我正在使用^和!运算符分别设置根节点和不包含在AST中。但是,它不会对ANTLRWorks生成的树产生影响。所以我不确定我的语法是不正确的,还是ANTLRWorks没有创建正确的树。
这是我的语法片段
expr
: '('! logExpr ')'!;
这些括号不应包含在AST中。
addExpr
: multExpr ( (PLUS|MINUS)^ multExpr )*;
PLUS或MINUS应该是AST中的根节点。
然而,这些事情都没有像我期望的那样发生。当我移除它们或将它们放回原处时没有任何区别。 ANTLRWorks 1.4.3 ANTLR 3.4
答案 0 :(得分:4)
ANTLRWorks的解释器显示了解析树,即使你已经将output=AST;
放在语法的options-block中,就像你已经找到的那样。
然而,ANTLRWorks的调试器 显示AST。要激活调试器,请按 CTL + D 或从菜单栏中选择运行 ->
Debug
调试器能够可视化解析树和AST。请注意,它将不处理除Java之外的嵌入式代码。
答案 1 :(得分:2)
我找到了答案。 ANTLRWorks显示解析树,而不是AST。它忽略了所有重写。这导致了我的第二个问题,即如果ANTLRWorks没有为我做这个,我如何可视化AST?答案就是here。