2011-12-12 43 views
2

我想用ANTLR編寫從DSL到Java的翻譯器。所以,我用兩種不同的語法編寫了詞法分析器和解析器。現在我必須編寫樹語法,並且我想知道哪些是獲得我的結果的最佳實踐(或推薦實踐)。更確切地說,我想知道哪些是最好的方法來做這樣的事情:使用屬性(例如,添加類型)和優化來豐富樹。基於ANTLR的翻譯器的結構(最佳實踐)

我應該爲識別類型和優化編寫不同的樹語法,然後在解析器之後和最終代碼生成樹語法之前串行調用?還有另一種更容易維護的方法嗎?我也是通過手動解析解析器生成的樹來識別類型。但這是相當保持的。

謝謝你。

回答

1

沒有真正的最佳實踐:只是常識和個人喜好。

然而,更多的邏輯以分離某些屬性的從優化動作節點加法(重寫^(* 0 ^(...))0)是在單獨越過AST。不要太擔心表現:樹行走非常快:大部分時間通常是在解析過程中度過的。通過ANTLR 3.2的添加tree pattern matching,您可以編寫很小的樹語法來對AST執行特定的操作(易於維護!)。

也看到這之前常見&一個是有關手動走AST或使用它樹語法: Systematic way to generate ANTLR tree grammar?