1

構建AST我正在開發一個編譯器和已經實施的詞法,語法分析器和語義分析(使用聽衆和觀衆)使用ANTLR4。對於代碼生成,我計劃使用StringTemplate(ST)生成LLVM IR。 要做到這一點,我想先構建一個AST,然後生成代碼。在ANTLR版本4

我的問題在這裏,我需要構建AST?或者我可以使用Parse Tree? 如果我需要使用AST,我無法找到使用訪問者或偵聽器手動構建AST的任何示例。即使是一個小文法的例子也會很有幫助。

謝謝。

回答

2

沒有,沒有根本的需要構建一個AST。在最簡單的情況下,您可以直接或使用ST來遍歷分析樹並輸出IR。

當需要如IR輸出變換時,兩種基本方法是:(1)分析和註釋解析樹描述必要的改變;或者(2)走分析樹,構建一個單獨的AST,然後走路並轉換AST。

對於註解策略,延伸ParseTreeProperty創建上下文節點類型特定的屬性類。請參閱該課程中的評論以瞭解如何使用。

AST的策略並沒有氣餒 - 這是在Antlr3使用的主要策略 - 但在本質上Antlr4不支持。至於爲什麼Antlr4傾向於註釋策略,請參見最後幾個paragraphs of this answer

+0

非常感謝您的回覆。我可以通過步行分析樹來輸出IR,以獲得二元操作等簡單結構。我無法處理好繼承(基類函數調用派生類/函數覆蓋)。你有沒有看到任何這樣的項目在線?一個例子會有很大的幫助。非常感謝你。 – NewGirl

+0

我知道沒有這樣的項目。也許最好發表一個新的問題和說明細節,以便如何分析和解析適合輸出的分析樹結構。 – GRosenberg