2

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

这是我的语法片段

expr
:   '('! logExpr ')'!;

这些括号不应包含在 AST 中。

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

加号或减号应该是 AST 中的根节点。

然而,这些事情都没有像我期望的那样发生。当我删除它们或将它们放回去时,它们没有区别。ANTLRWorks 1.4.3 ANTLR 3.4

4

2 回答 2

4

ANTLRWorks 的解释器会显示解析树,即使您已将output=AST;其放入语法的选项块中,正如您已经发现的那样。

但是,ANTLRWorks 的调试器确实显示了 AST。要激活调试器,请按CTL+DRun->Debug从菜单栏中选择。

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

在此处输入图像描述

于 2012-02-28T07:56:23.937 回答
2

我找到了答案。ANTLRWorks 显示的是解析树,而不是 AST。它忽略所有重写。这导致了我的第二个问题,如果 ANTLRWorks 不为我做,我如何可视化 AST?答案可以在这里找到。

于 2012-02-28T00:46:39.033 回答