我正在使用 ^ 和 !运算符分别设置根节点和不包含在 AST 中。但是,它对 ANTLRWorks 生成的树没有影响。所以我不确定我的语法是否不正确,或者 ANTLRWorks 是否没有创建正确的树。
这是我的语法片段
expr
: '('! logExpr ')'!;
这些括号不应包含在 AST 中。
addExpr
: multExpr ( (PLUS|MINUS)^ multExpr )*;
PLUS 或 MINUS 应该是 AST 中的根节点。
然而,这些事情都没有按照我期望的方式发生。当我将它们取下或放回去时,它们没有任何区别。 ANTLRWorks 1.4.3 ANTLR 3.4
最佳答案
ANTLRWorks 的解释器显示解析树,即使您已将 output=AST;
放入语法的选项 block 中,正如您已经发现的那样。
但是,ANTLRWorks 的调试器确实 显示了 AST。要激活调试器,请按 CTL+D 或选择 Run->
Debug从菜单栏。
调试器能够可视化解析树和 AST。请注意,它不会处理 Java 以外的嵌入式代码。
关于ANTLR 忽略 AST 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9473366/