序言
隨著晶片技術的高速發展,與之伴隨的編譯器開發也迅速增多,但相關的技術資料卻晦澀難懂。編譯器領域由AlfredV.Aho 等著的經典名著《編譯原理》偏重理論,缺少範例,入門難度很高。開放原始碼專案LLVM 和GCC 的程式架構複雜且技術資料多為英文,不太適合初學者入門。作者根據自己對Linux 和C/C++ 的長期使用經驗撰寫了一個簡單編譯器框架(Simple Compiler Framework,SCF),詳細說明一門程式語言的開發過程,為初學者提供了一個編譯器領域的入門途徑。
本書以作者撰寫的SCF 編譯器框架為基礎,以高階語言的編譯連接過程為脈絡,一步步地說明編譯器的架構及其各模組的實現細節。
本書主要內容
第1章主要說明編譯器的發展史、應用場景和程式架構,讓讀者對該領域有個初步印象。
第2章由淺入深地說明詞法分析模組的實現細節,以儘量簡單通俗的方式啟動讀者入門。
第3章拋開了編譯理論,從實踐的角度說明怎麼撰寫語法分析模組,展現把原始程式碼轉換成電腦可以理解的樹形資料結構的過程。該樹形資料結構即通常所講的抽象語法樹。
第4章說明語義分析和運算元多載的支援方法。
第5章是三位址碼的生成,說明怎麼把樹形資料結構變成類似組合語言的線性程式序列。
第6章是基本區塊的劃分,介紹編譯器內部對程式流程的表示方式。
第7章為中間程式最佳化,說明編譯器怎麼生成簡潔高效的程式和怎麼支援自動記憶體管理。
第8章介紹在不同類型的CPU 上怎樣為變數分配暫存器。
第9章詳細講解X86_64 的機器碼生成過程,並簡單描述ARM64 的機器碼生成過程。
第10章以Linux 為平臺說明連接器的撰寫和可執行程式的執行。
第11章說明指令碼語言的位元組碼和虛擬機器。
第12章介紹泛編譯器問題的數學模型及其簡單解法,該章的最後兩句為本書的總綱。
閱讀建議
編譯器屬於電腦領域的核心技術,與作業系統和CPU 指令的連結較多。前4章的閱讀需要熟悉C 語言,第5章之後的章節需要讀者具有一定的組合語言基礎,第10章需要讀者熟悉Linux 系統。
致謝
感謝我的父母,感謝北京清華大學出版社趙佳霓編輯的細心指導,感謝我的所有關注者,正是你們的支持才完成了編譯器程式的開發和本書的撰寫。
由於時間倉促,書中難免存在疏漏之處,請讀者見諒,並提出寶貴意見。
于東亮