我试图使用树梢来解析一个ERB文件。我需要能够处理以下几行:
<% ruby_code_here %>
<%= other_ruby_code %>既然Treetop是用Ruby编写的,而您是用Ruby编写Treetop语法的,那么Treetop中是否已经有一些方法可以说“嘿,在这里查找Ruby代码,并给我它的分解”,而不用我编写单独的规则来处理Ruby语言的所有部分?我正在寻找一种方法,在我的.treetop语法文件中,有这样的方法:
rule erb_tag
"<%" ruby_code "%>" {
def content
...
end
}
end其中ruby_code由Treetop提供的一些规则处理。
编辑: 其他人使用Ruby解析了ERB,但是我在复制他所做的事情时出错了。rlex程序在生成解析器类时没有生成完整的类。
编辑:是对的,所以你们都很沮丧,但是谢谢你们的信息。)对于我的硕士项目,我正在编写一个测试用例生成器,需要使用ERB作为输入。幸运的是,就我的目的而言,我只需要识别ERB代码中的一些内容,比如if语句和其他条件以及循环。我想我可以想出与此相匹配的Treetop语法,但请注意,对于Ruby来说,它是不完整的。
发布于 2010-10-29 20:41:44
据我所知,还没有人为Ruby创建Treetop语法。(事实上,除了MRI和YARV附带的YACC语法之外,没有人能够为Ruby创建任何语法。)我知道Treetop的作者已经做了好几年的工作,但这并不是一件简单的事情。获得XRuby中使用的ANTLR语法耗时5年左右,至今仍未完全兼容。
Ruby的语法异常复杂,令人难以置信。
发布于 2010-10-29 18:43:47
不是
我不这样认为。在树顶中指定复杂而微妙的Ruby语法将是一个重大的成就,但这应该是可能的。
真正的红宝石语法是用雅克写的。现在,yacc是一个传奇的工具,但树顶生成了一个更强大的类解析器,所以它应该是可能的,也许有人已经这样做了。
这不是下午的项目。
发布于 2010-10-31 18:06:18
也许我在开玩笑,但如果yacc没有ruby那么复杂,那么您可以在树顶实现yacc,而不是使用为yacc创建的ruby语法。
https://stackoverflow.com/questions/4054761
复制相似问题