我有2个问题:ANTLR - 如何使用生成的AST树?
在我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在线手册中的“AST与Java的接口”和“表达式评估器”,但我不太清楚如何将这些应用到我的问题中。如果你能提供一个简单的例子,它会非常有帮助!
请帮助...谢谢!
我通读了你的教程Bart Kiers,但它仍然是一个表达式评估器。我想知道如何解决我的特殊问题。例如,我想创建一个“代理”对象,将其附加到“消息”对象。然后,向下移动并创建一个“内容”对象,再次将它附加到同一个消息等...我怎么做到这一点? – 2012-07-12 18:16:15
@ Inf.S,不,它不是一个表达式求值器:它是一个带'for','while'和'if'语句,函数等的小型语言。就像我解释的:在树步行者中,我展示到底如何创建自定义节点类,这是你看起来像是在后面。 – 2012-07-12 18:20:14
让我回头再读一遍教程,然后阅读Scopes。如果我仍然陷入困境,我会在这个问答中回复你。谢谢! – 2012-07-12 19:02:16