ANTLR忽略AST运算符

ANTLR忽略AST运算符,antlr,grammar,abstract-syntax-tree,antlrworks,Antlr,Grammar,Abstract Syntax Tree,Antlrworks,我正在使用^and!运算符分别设置根节点和不包含在AST中。但是,它不会对ANTLRWorks生成的树产生影响。因此,我不确定我的语法是否错误,或者ANTLRWorks是否只是没有创建正确的树 这是我的一段语法 expr : '('! logExpr ')'!; 这些括号不应包含在AST中 addExpr : multExpr ( (PLUS|MINUS)^ multExpr )*; 加号或减号应该是AST中的根节点 addExpr : multExpr ( (PLUS|MINU

我正在使用^and!运算符分别设置根节点和不包含在AST中。但是,它不会对ANTLRWorks生成的树产生影响。因此,我不确定我的语法是否错误,或者ANTLRWorks是否只是没有创建正确的树

这是我的一段语法

expr
:   '('! logExpr ')'!;
这些括号不应包含在AST中

addExpr
:   multExpr ( (PLUS|MINUS)^ multExpr )*;
加号或减号应该是AST中的根节点

addExpr
:   multExpr ( (PLUS|MINUS)^ multExpr )*;

然而,这两件事都没有按我预期的方式发生。我把它们移走或放回去都没有区别。我找到了答案。ANTLRWorks显示的是解析树,而不是AST。它忽略所有重写。这引出了我的第二个问题,那就是,如果ANTLRWorks不能为我实现AST,我该如何可视化它?找到了答案。

AntlWorks的解释器显示解析树,即使您已将
output=AST在语法的选项块中,正如您已经发现的那样

但是,AntlWorks的调试器确实显示AST。要激活调试器,请按CTL+D或从菜单栏中选择运行
->
Debug

调试器能够可视化解析树和AST。注意,它不会处理Java以外的嵌入式代码


您在Antlrworks中查找了哪些内容以得出结论。我还假设您告诉antlr在解释器选项卡上输出一个ast?@stryba,该选项卡显示树的图表。或者这是解析树而不是AST?只有解释器显示解析树,调试器才能可视化AST。有关详细信息,请参阅我的答案。