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

时间:2012-07-12 04:14:44

标签: 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教程都有关于表达式评估器的那样!

我已经看到:“与Java接口”和ANTLR在线手册中的“表达式评估器”,但我不太明白如何将这些应用到我的问题中。如果你能提供一个简单的例子,它会非常有用!

请帮忙......谢谢!

1 个答案:

答案 0 :(得分:1)

  

$ msg_content.text返回空异常

如果没有看到所有涉及的规则和代码,就无法评论。你可以编辑你的问题并包含一个自包含的例子我或其他人可以运行再现错误/异常吗?

  

(MSG(代理人A B)(MSG_CTS x y))

     

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

看看这个教程列表:https://stackoverflow.com/questions/278480/antlr-tutorials,而不是所有关于表达式评估者的教程。 My tutorial演示了如何在树步行器中使用自定义Node类。

另请参阅this Q&A,其中还显示了如何在树步行器中使用自定义节点类。