ANTLR 忽略 AST 运算符

标签 antlr grammar abstract-syntax-tree antlrworks

我正在使用 ^ 和 !运算符分别设置根节点和不包含在 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 以外的嵌入式代码。

enter image description here

关于ANTLR 忽略 AST 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9473366/

相关文章:

parsing - ANTLR : Generate back source file from AST

antlr4 - 如何使用 ANTLR4 构建 AST?

parsing - 使用ANTLR分析和修改源代码;我做错了吗?

python - 人类可读的时间表语法,如我的应用程序中的功能?

parsing - 自定义解析返回值,保留未命名的终端

parsing - 判断文法是否为LR(0)

javascript - 从 Babel AST 生成 ES6 代码而不是 ES5 代码

java - antlr:将生成的解析器集成到系统中的最佳实践

java - 关闭 ANTLR4 CharStream(Java 运行时)- OutOfMemoryException

grammar - 使用示例生成语法的工具?