java - ANTLR - 如何使用生成的 AST 树?

标签 java parsing antlr grammar

我有两个问题:

在我的 ANTLR 解析器中,我有这个重写规则:

msg: msg_content (COMMA msg_content)* -> ^(MSG_CTS msg_content+);

在我的树语法中,如何使用收集到的 msg_content 标记? $msg_content.text 正在返回空异常。


更一般地说,你能给我一些指导,关于我如何使用我生成的 AST 树吗?我基本上想遍历节点并为不同的事物创建 Java 类,例如

我有一个打印的简单树:

(MSG (AGENTS A B) (MSG_CTS x y))

我想要一些 Java 类“Message”,其中“Agents”的字段包含 A、B 和一些包含 X、Y 的 Content 字段。

我已经阅读了 ANTLR 权威指南,但没有看到关于如何使用组合标记的引用,甚至没有看到如何按照我想要的方式向下导航树。好像每个 ANTLR 教程都是关于表达式求值器的!

我看过:ANTLR 在线手册中的“Interfacing AST with Java”和“Expression evaluator”,但我不太明白如何将它们应用到我的问题中。如果您能提供一个简单的示例,那将非常有帮助!

请帮忙...谢谢!

最佳答案

$msg_content.text is returning a null exception

如果不查看所有涉及的规则和代码,就不可能对此发表评论。您能否编辑您的问题并包括一个我或其他人可以运行以重现错误/异常的独立示例?

(MSG (AGENTS A B) (MSG_CTS x y))

I'd like to have some Java class "Message" with fields for "Agents" containing A, B and some Content field that will hold X, Y.

查看此教程列表:https://stackoverflow.com/questions/278480/antlr-tutorials ,并非所有都与表达式评估器有关。 My tutorial演示了如何在 tree walker 中使用自定义节点类。

另见 this Q&A这也展示了如何在 tree walker 中使用自定义节点类。

关于java - ANTLR - 如何使用生成的 AST 树?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11444919/

相关文章:

java9 '-release 8' 带有内部包(例如 sun.misc.Unsafe)

ios - 尝试在 Parse 中查询特定用户的 PFRelation

antlr - 将 ANTLR 语法转换为 Bison/EBNF

parsing - Antlr 解析器运算符优先级

angular - 没有'new'就不能调用类构造函数

java - 文件读取进度

java - 通过 .sh 脚本对 java jar 进行基准测试

java - java中如何使用正则表达式捕获字符串中的内容

java - 没有 Comparable 的按字母顺序排列的 ListView

parsing - 是否可以为此语法编写递归下降解析器?