我有一個構建抽象語法樹的ANTLR3語法。我正在考慮升級到ANTLR4。但是,看來ANTLR4只構建解析樹而不是抽象語法樹。例如,output=AST
選項不再被識別。此外,「AST」和「抽象語法」出現在文本「The Definitive ANTLR4 reference」。如何使用ANTLR4構建AST?
我想知道我是否錯過了一些東西。
我的應用程序當前知道如何抓取ANTLR3產生的AST。改變它來處理一個分析樹並不是不可能的,但它會有點工作。我想確定這是必要的,然後纔開始走這條路。
我有一個構建抽象語法樹的ANTLR3語法。我正在考慮升級到ANTLR4。但是,看來ANTLR4只構建解析樹而不是抽象語法樹。例如,output=AST
選項不再被識別。此外,「AST」和「抽象語法」出現在文本「The Definitive ANTLR4 reference」。如何使用ANTLR4構建AST?
我想知道我是否錯過了一些東西。
我的應用程序當前知道如何抓取ANTLR3產生的AST。改變它來處理一個分析樹並不是不可能的,但它會有點工作。我想確定這是必要的,然後纔開始走這條路。
ANTLR 4基於語法生成解析樹,而不是基於任意AST運算符和/或重寫規則的AST。這允許ANTLR 4自動生成偵聽器和訪問者接口,您可以使用語法在代碼中實現這些接口。
對於從第3版升級現有應用程序的用戶來說,這種改變可能是很戲劇性的,但是作爲一個整體,新系統更容易使用和(尤其是)維護。
謝謝。我可以理解新系統的優點,因此我想升級它。我願意爲做到這一點做必要的事情。我只想確保在開始這項工作之前瞭解情況。這聽起來像我。 – 2013-04-05 11:04:26
我可以把'ParserRuleContext'作爲AST的節點嗎? – jiamo 2015-08-18 07:53:11
此問題最終在http://stackoverflow.com/questions/29971097/how-to-create-ast-with-antlr4回答 – James 2017-01-22 12:21:07