3

我有两个问题:

在我的 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 类“消息”,其中包含 A、B 的“代理”字段和一些包含 X、Y 的内容字段。

我已经阅读了 ANTLR 权威指南,但还没有参考如何使用组合标记,甚至没有参考如何像我想要的那样在树下导航。就好像每个 ANTLR 教程都有关于表达式评估器的内容!

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

请帮忙...谢谢!

4

1 回答 1

1

$msg_content.text 返回一个空异常

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

(味精(代理 AB)(味精_CTS xy))

我想要一些 Java 类“消息”,其中包含 A、B 的“代理”字段和一些包含 X、Y 的内容字段。

看看这个教程列表:https ://stackoverflow.com/questions/278480/antlr-tutorials ,并不是所有的都是关于表达式评估器的。我的教程演示了如何在 tree walker 中使用自定义 Node 类。

另请参阅此问答,该问答还显示了如何在 tree walker 中使用自定义节点类。

于 2012-07-12T06:24:19.873 回答