2014-01-22 42 views
4

我想知道我們是否可以使用Antlr版本4構建AST。我無法找到任何有關使用antlr4構建它的參考。 一個SO回答說,它很容易使用antlr4只產生解析樹,但我的問題是什麼效率在antlr4中構建AST

它迫使我們抓取的,而不是抽象語法樹是不是通過整個樹走路和使用訪客執行任務有效的方式全解析樹。

回答

10

有我想先指出兩個關鍵項目:

  1. 效率佔地面積不是執行簡單的速度更。它也可以應用於內存開銷,可維護性以及團隊創建和/或使用一個軟件所使用的長期開發策略的有效性。

  2. 您是揮手在你的論點,即解析樹比AST的慢。我一直在測試ANTLR 3和4 ANTLR性能好幾年,並有在這一點毫無疑問,ANTLR 4的解析樹在ANTLR的AST的性能3.

這就是說,在ANTLR 4中專門使用解析樹的決定基於以下觀察結果:ANTLR 3中分離的解析器和樹解析器與AST的可維護性不符合預期的可維護性,並且因此總體效率降低到它們是不再是推薦的做法。

此外,自動解析樹建設ANTLR 4讓我實現declarative rule versioning,然後我applied to code throughout ANTLRWorks 2。這使我能夠依靠分析樹的形狀來創建大型代碼庫的rapidly correct every portion,而不會在最終產品中引入迴歸錯誤。