本書系統(tǒng)地闡述了編譯原理的一般理論、常用方法和實現(xiàn)技術(shù)。主要內(nèi)容包括形式語言基礎(chǔ)知識、詞法分析、語法分析、中間代碼生成、代碼優(yōu)化、目標代碼生成、符號表的構(gòu)造和運行時存儲空間的組織等部分。本書系統(tǒng)性強,內(nèi)容循序漸進,實例豐富。對算法的描述深入淺出,文字簡練,通俗易懂。每章都配有各種類型的習(xí)題。
長春工業(yè)大學(xué)軟件學(xué)院教授,博士;美國ACM會員,中國計算機學(xué)會CCF會員,吉林省省政府政務(wù)大廳評標專家;發(fā)表學(xué)術(shù)論文30余篇,其中SCI、EI檢索20余篇;完成專著2部,出版教材近10部。
第1章 編譯簡述 1
1.1 程序的翻譯 1
1.1.1 程序設(shè)計語言 1
1.1.2 編譯程序 2
1.1.3 實現(xiàn)高級語言的編譯方式 2
1.2 編譯程序的組成 3
1.2.1 編譯程序的構(gòu)成 4
1.2.2 遍 5
1.2.3 編譯程序前端和后端 5
1.3 編譯程序的構(gòu)造 5
1.4 小結(jié) 6
復(fù)習(xí)思考題 7
第2章 形式語言與詞法分析 8
2.1 字母表和符號串的基本概念 8
2.1.1 字母表和符號串 9
2.1.2 符號串的運算 10
2.2 文法和語言的形式定義 11
2.2.1 形式語言 12
2.2.2 文法的形式定義 13
2.2.3 語言的形式定義 14
2.3 語法樹與文法二義性 17
2.3.1 語法樹 17
2.3.2 文法二義性 18
2.4 文法和語言的分類 19
2.5 詞法分析的任務(wù) 20
2.5.1 詞法分析的任務(wù)描述 20
2.5.2 詞法分析器與語法分析器的接口 20
2.6 詞法分析程序的輸出形式 21
2.6.1 單詞符號的分類 21
2.6.2 詞法分析程序單詞的輸出形式 22
2.6.3 詞法錯誤 23
2.7 詞法分析程序的設(shè)計與實現(xiàn) 24
2.7.1 輸入和預(yù)處理功能 24
2.7.2 單詞符號的識別 25
2.7.3 狀態(tài)轉(zhuǎn)換圖 26
2.7.4 狀態(tài)轉(zhuǎn)換圖的實現(xiàn) 26
2.8 正規(guī)表達式與有限自動機 27
2.8.1 正規(guī)表達式與正規(guī)集 28
2.8.2 有限自動機 31
2.9 詞法分析程序的自動生成工具Lex 40
2.10 實例語言的詞法分析程序 43
2.10.1 微小語言Micro 43
2.10.2 Micro的詞法分析 43
2.11 小結(jié) 45
復(fù)習(xí)思考題 46
第3章 自頂向下語法分析 50
3.1 自頂向下分析的一般方法 51
3.2 LL(1)文法 52
3.2.1 消除左遞歸 52
3.2.2 提取左因子 53
3.3 遞歸下降分析法 58
3.4 LL(1)分析法 60
3.4.1 非遞歸預(yù)測分析器 60
3.4.2 構(gòu)造預(yù)測分析表 62
3.5 預(yù)測分析中的錯誤處理 63
3.6 小結(jié) 64
復(fù)習(xí)思考題 64
第4章 自底向上語法分析 66
4.1 自底向上分析的基本概念 66
4.1.1 歸約 66
4.1.2 句柄 67
4.1.3 用棧實現(xiàn)自底向上分析 68
4.1.4 移進-歸約分析的沖突 69
4.2 算符優(yōu)先分析 70
4.2.1 直觀算符優(yōu)先分析法 71
4.2.2 算符優(yōu)先文法的定義 73
4.2.3 算符優(yōu)先關(guān)系表的構(gòu)造 74
4.2.4 算符優(yōu)先分析算法 75
4.2.5 優(yōu)先函數(shù) 76
4.2.6 算符優(yōu)先分析法的局限性 78
4.3 LR分析法 78
4.3.1 LR分析算法 79
4.3.2 LR文法和LR分析方法的特點 81
4.3.3 構(gòu)造LR(0)分析表 82
4.3.4 構(gòu)造SLR(1)分析表 88
4.3.5 構(gòu)造規(guī)范的LR分析表 92
4.3.6 構(gòu)造LALR分析表 95
4.3.7 二義文法的應(yīng)用 97
4.4 語法分析程序的自動生成工具YACC 101
4.5 實例語言編譯程序的語法分析 104
4.6 小結(jié) 106
復(fù)習(xí)思考題 107
第5章 語義分析與中間代碼的生成 110
5.1 語義分析的任務(wù) 110
5.1.1 語義分析的概念 110
5.1.2 語義分析的任務(wù) 111
5.2 語法制導(dǎo)翻譯 111
5.2.1 屬性文法 111
5.2.2 語法制導(dǎo)翻譯方法 111
5.3 中間代碼 112
5.3.1 逆波蘭表示法 112
5.3.2 四元式 112
5.3.3 三元式 113
5.3.4 間接三元式 113
5.3.5 抽象語法樹 114
5.4 說明語句的翻譯 114
5.4.1 簡單說明語句的翻譯 114
5.4.2 過程中的說明 115
5.5 賦值語句的翻譯 115
5.5.1 簡單算術(shù)表達式和賦值語句的翻譯 115
5.5.2 數(shù)組的翻譯 117
5.6 布爾表達式的翻譯 117
5.7 控制語句的翻譯 120
5.7.1 條件語句if的翻譯 121
5.7.2 循環(huán)語句while的翻譯 122
5.7.3 三種基本控制結(jié)構(gòu)的翻譯 123
5.8 過程調(diào)用的翻譯 124
5.9 實例編譯程序的語義分析 125
5.10 小結(jié) 127
復(fù)習(xí)思考題 127
第6章 符號表管理 131
6.1 符號表的作用 131
6.1.1 收集標識符屬性信息 131
6.1.2 符號表內(nèi)容為上下文語義的合法性檢查提供依據(jù) 132
6.1.3 作為目標代碼生成階段編譯程序分配地址空間的依據(jù) 132
6.2 符號表的主要內(nèi)容 132
6.2.1 符號名 132
6.2.2 符號的類型 133
6.2.3 符號的存儲類型 133
6.2.4 符號的作用域及可視性 133
6.2.5 符號變量的存儲分配信息 134
6.2.6 符號的其他屬性 136
6.3 符號表的組織 136
6.3.1 符號表的總體組織 136
6.3.2 符號表項的組織 138
6.4 符號表的管理 142
6.4.1 符號表的初始化 142
6.4.2 符號的插入 143
6.4.3 符號的查找 145
6.5 小結(jié) 146
復(fù)習(xí)思考題 146
第7章 運行時的存儲組織與分配 147
7.1 存儲組織概述 147
7.1.1 運行時內(nèi)存的劃分 147
7.1.2 過程活動記錄 149
7.2 靜態(tài)存儲分配 150
7.3 棧式動態(tài)存儲分配 151
7.3.1 棧的結(jié)構(gòu) 151
7.3.2 活動樹和簡單的棧式存儲分配 151
7.3.3 嵌套過程語言的棧式實現(xiàn) 153
7.4 堆式動態(tài)存儲分配 154
7.5 小結(jié) 156
復(fù)習(xí)思考題 156
第8章 代碼優(yōu)化 158
8.1 局部優(yōu)化 159
8.1.1 基本塊的劃分 159
8.1.2 利用基本塊DAG進行優(yōu)化 162
8.2 循環(huán)優(yōu)化 166
8.2.1 程序流圖 166
8.2.2 循環(huán)的查找 167
8.2.3 循環(huán)優(yōu)化 169
8.3 小結(jié) 171
復(fù)習(xí)思考題 171
第9章 目標代碼生成 173
9.1 目標代碼的形式 173
9.2 假想的計算機模型 174
9.3 一個簡單的代碼生成程序 175
9.3.1 待用信息和活躍信息 175
9.3.2 寄存器描述和地址描述 175
9.3.3 代碼生成算法 176
9.3.4 寄存器選擇函數(shù) 177
9.3.5 為變址和指針語句產(chǎn)生代碼 178
9.3.6 條件語句 178
9.4 小結(jié) 180
復(fù)習(xí)思考題 180
附錄A C語言實現(xiàn)的實例語言編譯程序 181
附錄B YACC語言實現(xiàn)的實例語言編譯程序 184
參考文獻 185