我正在使用 ANTLR 3 创建一个 AST。我想要两个 AST 分析器,一个用于生产代码,一个用于我们已经拥有的 Eclipse 插件。但是,该插件不需要树中的所有信息。我正在寻找的是一种无需在语法中指定所有分支即可解析树的方法。有没有办法这样做?
问问题
1316 次
2 回答
2
您可能已经知道这一点,但我已经使用.
或.*
在我的树语法中跳过给定节点或任意数量的节点。
例如,我有一个允许函数声明的 DSL,而我的一个树语法只关心名称和参数,而不关心内容(可以任意长)。.*
我使用占位符跳过代码块的处理:
^(Function type_specifier? variable_name formal_parameters implemented_by? .*)
我不知道运行时性能是否受到影响(如果有的话),但我没有在性能对我的应用程序有问题的任何领域使用此构造。
于 2009-10-19T13:15:31.710 回答
1
虽然我不知道你到底想做什么,但是当我上次遇到这个问题时,我在 tree walker 中设置了一个布尔标志。例如:
@members
{
boolean executeAction = true;
}
...
equation:
@init{
if(executeAction){
//do your things
}
}
@after{
if(executeAction){
//do your things
}
}
exp { if(executeAction){/* Do your things */} } EQU exp
;
exp:
@init{
if(executeAction){
//do your things
}
}
@after{
if(executeAction){
//do your things
}
}
integer OPE integer
;
...
这样,您可以轻松地打开或关闭执行。您只需将所有代码包装到 if 语句中。
问题是,在 Antlr 中,没有所谓的跳过后续规则这种事情。无论如何,他们都要经过。所以我们只能手动完成。
于 2009-07-28T07:01:54.400 回答