我正在使用ANTLR 3来创建AST。我想要有两个AST分析器,一个用于生产代码,一个用于我们已有的Eclipse插件。但是,该插件不需要树中的所有信息。我正在寻找的是一种解析树而不指定语法中所有分支的方法。有办法吗?
答案 0 :(得分:2)
您可能已经想到了这一点,但我在树语法中使用了.
或.*
来跳过给定节点或任意数量的节点。
例如,我有一个允许函数声明的DSL,我的一个树语法只关心名称和参数,但不关心内容(可能是任意长的)。我使用.*
作为占位符跳过了代码块的处理:
^(Function type_specifier? variable_name formal_parameters implemented_by? .*)
我不知道运行时性能命中,如果有的话,但我没有在性能对我的应用程序有问题的任何领域使用此构造。
答案 1 :(得分:1)
我不知道你究竟想做什么,但是当我上次遇到这个问题时,我在树步行者中设置了一个布尔标志。例如:
@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中,没有一种叫做跳过后续规则的东西。无论如何他们都要走了。所以我们只能手动完成。