我有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