ANTLR涉及編譯原理中的哪些部分?

我看了《編程語言實現模式》和ANTLR的Reference,進一步學習編譯原理還需要補充哪些知識?


ANTLR自身覆蓋詞法分析與語法分析部分,可以生成詞法分析器、語法分析器和parse tree。

基於ANTLR的語法制導翻譯(內嵌在語法里的語義動作(semantic action),或者是ANTLRv4的回調),還可以實現AST生成、語義檢查等功能。

這樣藉助ANTLR就可以基本覆蓋整個編譯器前端的需求了。

如果把編譯器的工作流程分為3部分:

前端 | 中端(優化) | 後端
詞法分析 -&> 語法分析 -&> 語義分析 | 平台無關優化 -&> 平台相關優化 | 寄存器分配 -&> 代碼生成

那麼題主在學習了ANTLR後就可以學習一下編譯器的優化與代碼生成部分。

歡迎參考書單:學習編程語言與編譯優化的一個書單


Antlr 並沒有涉及寄存器分配的知識,SCIP《計算機語言的解釋和執行》上有如何構建寄存器模型的知識。

Antlr 只是一個將文本按照語法規則解析成一個語法樹的工具,至於後面的優化和代碼生成,只有 Antlr 本身的源碼,優化了語法規則的語法樹,生成了 Java 的解析器實例代碼。


既然學到了怎麼創建了AST,下一步可以看怎麼用一種中間表示(IR)來進行代碼生成。如果還想繼續的話看怎麼進行各種形式的代碼優化唄。


推薦閱讀:

函數的局部變數在棧中是如何分布的?
能否從編譯原理的角度詳細的描述一下模板編譯的過程?
編譯程序是否有操作系統的參與?
編譯器、解釋器和虛擬機有什麼區別和聯繫?大體原理是什麼?
編譯器處理轉義符?

TAG:編譯原理 | ANTLR |