本書介紹編譯理論的基礎及實現方法,強調語言的形式化定義、編譯技術和各種概念及實現過程的具體方法。全書共9章,內容包括編譯引論、形式語言和有限自動機理論、詞法分析、語法分析、語法制導翻譯與中間代碼生成、運行時的存儲組織與分配、符號表、代碼優化、目標代碼生成。介紹過程以算法為核心,力求簡單明了地反映編譯的基礎知識,為計算機軟件工作者開發大型軟件打下良好的基礎。
本書可作為高等工科院校計算機專業的本科或專科教材,也可作為碩士研究生及計算機軟件技術人員的參考書。
本書可作為高等工科院校計算機專業的本科或專科教材,也可作為碩士研究生學習及計算機軟件技術人員的參考書。
全書共分為九章,第1章緒論,介紹了編譯程序有關概念,編譯過程、編譯程序的組織和結構等要點。第2章作為后續各章的理論基礎,主要介紹了描述語言的兩大工具文法和有限自動機。第3章以正規式作為單詞識別工具,從手工和自動兩個角度討論了詞法分析器的設計及實現。第4章對上下文無關文法的兩類語法分析方法,即自上而下和自下而上的幾種經典方法展開了討論。如遞歸子程序法、LL(1)分析法、算法優先分析和LR分析進行了詳細的講解。第5章介紹了語義分析,涉及到語法制導翻譯與中間代碼生成。重點講解了屬性文法、翻譯模式、中間代碼表現形式和流行的高級程序設計語言中典型語句的翻譯。第6章介紹了編譯程序運行時環境的有關概念和存儲組織與分配技術。第7章介紹了整個編譯過程都要涉及到的數據結構-符號表。第8章介紹了代碼優化,展開討論了優化的基本概念,優化涉及到的數據流分析技術和控制流分析技術。第9章簡單介紹了代碼生成的有關知識點。并在附錄中給出了基于前端的編譯程序算法的程序文本。
第1章引論
1.1什么是編譯程序
1.1.1編譯程序與高級程序設計語言的關系
1.1.2高級語言源程序的執行過程
1.1.3與編譯器有關的程序
1.2編譯過程與編譯程序的組織結構
1.2.1編譯過程概述
1.2.2編譯程序的組織結構
1.2.3編譯階段的組合
1.3編譯程序的構造與實現
1.3.1如何構造一個編譯程序
1.3.2編譯程序的開發
1.3.3編譯程序的自動構造工具
習題
第2章形式語言和有限自動機理論
2.1文法和語言
2.1.1字母表和符號串
2.1.2文法和語言的形式化定義
2.1.3語法分析樹與文法二義性
2.1.4文法和語言的分類
2.2有限自動機
2.2.1確定的有限自動機(DFA)
2.2.2非確定的有限自動機(NFA)
2.2.3NFA轉換為等價的DFA
2.2.4確定的有限自動機的化簡
習題
第3章詞法分析
3.1詞法分析基本思想
3.1.1詞法分析需求分析
3.1.2詞法分析任務
3.1.3詞法分析方式
3.2單詞的描述工具
3.2.1正規文法和正規式
3.2.2正規式與有限自動機的等價性
3.2.3正規文法和有限自動機的等價性
3.3單詞的識別
3.3.1單詞分類
3.3.2單詞的內部表示
3.3.3單詞的形式化描述
3.4詞法分析程序的設計及實現
3.4.1詞法分析程序的輸入
3.4.2掃描緩沖區及其預處理
3.4.3由詞法規則畫出狀態轉換圖
3.4.4單詞對應狀態轉換圖的實現
3.5詞法分析程序的自動實現
3.5.1Lex介紹
3.5.2Lex語法基礎
3.5.3詞法分析器自動構造
習題
第4章語法分析
4.1自頂向下的語法分析方法
4.1.1包含回溯的自頂向下語法分析
4.1.2回溯產生的原因與解決方法
4.1.3遞歸下降分析法
4.1.4 LL(1)分析法與LL(1)分析器
4.2自底向上的語法分析方法
4.2.1“移進歸約”分析
4.2.2規范歸約與句柄
4.2.3算符優先分析法
4.2.4LR分析法
4.2.5語法分析程序自動生成器YACC
習題
第5章語法制導翻譯與中間代碼生成
5.1兩種翻譯方法簡介
5.2屬性文法
5.2.1綜合屬性
5.2.2繼承屬性
5.3依賴圖
5.4語法制導翻譯
5.4.1S屬性文法與自底向上翻譯
5.4.2L屬性文法與自頂向下翻譯
5.4.3翻譯模式
5.5中間代碼的形式
5.5.1逆波蘭表示法
5.5.2三元式表示法
5.5.3四元式表示法
5.5.4圖表示法
5.6中間代碼生成
5.6.1說明語句的翻譯
5.6.2賦值語句的翻譯
5.6.3賦值語句中的布爾表達式的翻譯
5.6.4控制流語句中的布爾表達式的翻譯
5.6.5控制流語句的翻譯
5.6.6數組元素的翻譯
5.6.7函數調用的翻譯
習題
第6章運行時的存儲組織與分配
6.1概述
6.1.1關于存儲組織
6.1.2函數(或過程)的活動記錄
6.1.3存儲分配策略
6.2靜態存儲分配
6.3基于棧的運行時動態存儲分配
6.3.1簡單棧式存儲分配的實現
6.3.2嵌套過程語言的棧式存儲分配的實現
6.4基于堆的動態存儲分配的實現
6.5參數傳遞
6.5.1傳值
6.5.2傳地址
習題
第7章符號表
7.1符號表的作用
7.2符號表的內容
7.3符號表的組織
7.3.1符號表的數據結構
7.3.2關鍵字域的組織
7.3.3其他域的組織
7.4符號表舉例
7.4.1無序表
7.4.2有序表
7.4.3散列符號表
7.4.4棧式符號表
習題
第8章代碼優化
8.1概述
8.2局部優化
8.2.1基本塊的劃分
8.2.2基本塊的優化
8.2.3基本塊的有向圖表示
8.3循環優化
8.3.1控制流圖
8.3.2基本屬性
8.3.3支配結點和后必經結點
8.3.4循環的查找
8.3.5循環優化
8.4全局優化
8.4.1相關概念及數據流方程
8.4.2可到達定義
8.4.3結構化程序的數據流分析
8.4.4數據流方程的迭代解
8.4.5活躍變量分析
習題
第9章目標代碼生成
9.1目標代碼的形式
9.2目標代碼生成的主要問題
9.2.1目標程序
9.2.2指令選擇
9.2.3寄存器分配
9.2.4計算次序選擇
9.3目標機器
9.3.1目標機器的指令系統
9.3.2指令開銷
9.4一個簡單的代碼生成器
9.4.1寄存器描述和地址描述
9.4.2代碼生成算法
9.4.3寄存器選擇函數
9.4.4為變址和指針語句產生代碼
9.4.5條件語句
9.5寄存器分配的原則
習題
附錄A基于前端的編譯程序算法
A.1詞法分析器的實現
A.2遞歸下降語法分析器的實現
A.3算法優先語法分析器的實現
A.4LR語法分析器的實現
參考文獻