本書討論了編譯原理的基礎理論與實現(xiàn)技術,并在其前幾版的基礎上進行了修訂與更新。本書共13章,內(nèi)容包括編譯概述、形式語言與自動機理論基礎、詞法分析、語法分析、語義分析及中間代碼生成、代碼優(yōu)化、目標代碼的生成、符號表和出錯處理、面向對象語言的編譯、并行編譯技術、軟件構造等。在內(nèi)容的組織上,本書將編譯的基本理論和具體的實現(xiàn)技術有機地結合起來,清楚地闡述相關的概念和原理,并給出部分C語言實現(xiàn)程序;同時,對編譯程序自動生成工具的功能和使用方法做了詳細的介紹。本書提供免費電子課件。
目 錄
第1章 概述 1
1.1 程序設計語言與翻譯 1
1.1.1 程序設計語言 1
1.1.2 編譯程序和解釋程序 2
1.2 編譯過程概述 3
1.2.1 編譯程序的工作過程 3
1.2.2 編譯程序的結構 7
1.3 編譯程序的開發(fā) 7
1.3.1 編譯程序的開發(fā)步驟 8
1.3.2 編譯程序的開發(fā)技術 8
1.3.3 編譯程序的自動生成 10
1.4 本章小結 10
習題1 11
第2章 形式語言理論基礎 12
2.1 形式語言的基本概念 12
2.1.1 符號和符號串 12
2.1.2 符號串的運算 13
2.1.3 符號串集合的運算 15
2.2 文法和語言的形式定義 16
2.2.1 文法的形式定義 16
2.2.2 形式語言的定義 19
2.3 語法樹和二義性 22
2.3.1 語法樹和推導 22
2.3.2 文法的二義性 25
2.4 文法的限制 28
2.4.1 文法的實用限制 28
2.4.2 文法的等價變換 31
2.4.3 擴充的BNF表示法 33
2.5 文法和語言的Chomsky分類 34
2.5.1 0型文法與0型語言(對應圖靈機) 34
2.5.2 1型文法與1型語言(對應線性界限自動機) 35
2.5.3 2型文法與2型語言(對應下推自動機) 35
2.5.4 3型文法與3型語言(對應有限自動機) 36
2.5.5 四類文法的關系和區(qū)別 37
2.6 本章小結 38
習題2 38
第3章 自動機理論基礎 40
3.1 有限自動機的基本概念 40
3.1.1 有限自動機的定義及表示法 40
3.1.2 有限自動機的機器模型 43
3.1.3 確定有限自動機(DFA) 43
3.1.4 有限自動機在計算機內(nèi)的表示 44
3.1.5 不確定有限自動機(NFA) 45
3.1.6 由NFA到DFA的等價轉換 47
3.2 確定有限自動機DFA的化簡 50
3.2.1 等價狀態(tài)和無關狀態(tài) 50
3.2.2 自動機的化簡 51
3.3 正則表達式形式定義 53
3.4 下推自動機PDA 54
3.4.1 下推自動機的機器模型 54
3.4.2 PDA的形式定義 55
3.5 本章小結 57
習題3 57
第4章 詞法分析 59
4.1 詞法分析概述 59
4.1.1 詞法分析的功能 59
4.1.2 詞法分析的兩種處理結構 59
4.1.3 單詞符號的種類 60
4.1.4 詞法分析程序的輸出形式 60
4.2 詞法分析程序 61
4.2.1 詞法分析程序的設計與實現(xiàn) 61
4.2.2 單詞的識別 61
4.2.3 無符號數(shù)的識別 65
4.2.4 標識符的識別 66
4.3 詞法分析程序的自動生成 68
4.3.1 基本思想 68
4.3.2 Lex源程序結構 69
4.3.3 Lex編譯程序工作過程 71
4.3.4 Lex的實現(xiàn) 71
4.3.5 Lex的使用方式 72
4.4 本章小結 72
習題4 73
第5章 語法分析——自頂向下分析方法 74
5.1 自頂向下語法分析技術 74
5.1.1 自頂向下語法分析思想 75
5.1.2 三種終結符號集 76
5.1.3 自頂向下語法分析難點 78
5.1.4 確定的自頂向下語法分析思想 80
5.2 LL(K)語法分析方法 80
5.2.1 LL(1)語法分析思想 80
5.2.2 LL(1)語法分析方法的邏輯結構 81
5.2.3 LL(1)語法分析方法 81
5.3 遞歸下降語法分析方法 88
5.3.1 遞歸下降語法分析方法的實現(xiàn)思想 88
5.3.2 遞歸子程序及其性質 89
5.3.3 遞歸下降語法分析方法處理示例 90
5.4 本章小結 95
習題5 95
第6章 語法分析——自底向上分析方法 97
6.1 自底向上語法分析技術 97
6.1.1 自底向上語法分析思想 97
6.1.2 自底向上分析難點 99
6.2 自底向上優(yōu)先分析方法 99
6.2.1 簡單優(yōu)先分析方法 100
6.2.2 算符優(yōu)先分析方法 102
6.3 LR(K)分析方法 112
6.3.1 LR分析思想及邏輯結構 113
6.3.2 LR(0)分析方法 116
6.3.3 SLR(1)分析方法 124
6.3.4 LR(1)分析方法 127
6.3.5 LALR(1)分析方法 131
6.4 本章小結 136
習題6 136
第7章 語義分析及中間代碼生成 138
7.1 語義分析概述 138
7.1.1 語義分析的概念 138
7.1.2 屬性文法技術 140
7.2 中間語言代碼 142
7.2.1 抽象語法樹 142
7.2.2 逆波蘭表示 144
7.2.3 四元式 147
7.2.4 三元式 150
7.3 語法制導翻譯 154
7.3.1 表達式的翻譯 154
7.3.2 說明語句的翻譯 158
7.3.3 賦值語句的翻譯 161
7.3.4 控制語句的翻譯 161
7.4 本章小結 164
習題7 165
第8章 代碼優(yōu)化 167
8.1 代碼優(yōu)化概述 167
8.1.1 代碼優(yōu)化的定義 167
8.1.2 代碼優(yōu)化的分類 167
8.1.3 優(yōu)化技術簡介 168
8.2 局部優(yōu)化 171
8.2.1 基本塊的劃分 171
8.2.2 基本塊的DAG表示 173
8.2.3 基本塊優(yōu)化的實現(xiàn) 176
8.3 循環(huán)優(yōu)化 177
8.3.1 循環(huán)的查找 177
8.3.2 循環(huán)優(yōu)化的實現(xiàn) 178
8.4 本章小結 182
習題8 182
第9章 目標代碼的生成 184
9.1 目標代碼生成概述 184
9.1.1 目標代碼 185
9.1.2 寄存器分配 185
9.2 一個計算機模型——虛擬機 186
9.2.1 虛擬機 186
9.2.2 虛擬機的匯編指令 187
9.3 從中間代碼生成目標代碼 189
9.3.1 從逆波蘭表示生成目標代碼 189
9.3.2 從四元式序列生成目標代碼 192
9.4 目標程序運行時的存儲管理 192
9.4.1 程序運行時的存儲組織 193
9.4.2 靜態(tài)存儲分配 194
9.4.3 棧式動態(tài)存儲分配 195
9.4.4 堆式動態(tài)存儲分配 198
9.5 本章小結 200
習題9 201
第10章 符號表和出錯處理 202
10.1 符號表的結構與存放 202
10.1.1 符號表的組織與內(nèi)容 202
10.1.2 線性符號表 204
10.1.3 有序符號表 204
10.1.4 散列符號表 205
10.1.5 棧式符號表 206
10.2 符號表的管理 208
10.2.1 符號表的建立 208
10.2.2 符號表的查填 209
10.3 程序的錯誤 210
10.3.1 錯誤存在的必然性 210
10.3.2 錯誤的種類 211
10.3.3 錯誤復原 212
10.4 出錯處理 213
10.4.1 詞法錯誤的處理 213
10.4.2 語法錯誤的處理 214
10.4.3 語義錯誤的處理 216
10.5 本章小結 218
習題10 218
第11章 面向對象語言的編譯 220
11.1 概述 220
11.1.1 面向對象語言的基本特征 220
11.1.2 類和成員的屬性構造 222
11.1.3 面向對象編譯程序的特點 225
11.2 面向對象語言的語法結構 226
11.2.1 單一繼承 226
11.2.2 多重繼承 228
11.2.3 多態(tài)性 229
11.2.4 動態(tài)綁定 230
11.2.5 接口類型 230
11.3 面向對象的動態(tài)存儲分配 231
11.3.1 對象的存儲區(qū)管理方式 231
11.3.2 靜態(tài)模型和棧式模型廢棄單元的回收 231
11.3.3 堆式模型廢棄單元的回收 232
11.4 本章小結 234
習題11 234
第12章 并行編譯技術 235
12.1 并行計算機及其編譯系統(tǒng)簡介 235
12.1.1 并行計算相關技術簡介 236
12.1.2 并行編譯系統(tǒng)的分類及結構 239
12.2 并行程序設計模型 242
12.2.1 并行體系結構分類及并行程序設計 242
12.2.2 并行程序設計模型 244
12.3 并行編譯系統(tǒng)的構造 245
12.3.1 并行編譯系統(tǒng)的構造簡介 245
12.3.2 程序分析 247
12.3.3 程序優(yōu)化 251
12.3.4 并行代碼生成 252
12.4 自動并行化技術研究現(xiàn)狀 255
12.4.1 比較典型的自動并行化系統(tǒng)簡介 256
12.4.2 自動并行化編譯系統(tǒng)發(fā)展簡介 257
12.5 本章小結 259
習題12 260
第13章 軟件構造 261
13.1 軟件構造技術 261
13.1.1 API的設計和構造 261
13.1.2 基于狀態(tài)和表驅動的構造技術 263
13.1.3 基于復用的構造技術 265
13.2 模塊化軟件構造 269
13.2.1 模塊化設計理論 269
13.2.2 數(shù)據(jù)結構與算法 271
13.2.3 軟件測試與軟件調(diào)試 273
13.3 面向對象的軟件構造技術 276
13.3.1 抽象與封裝 277
13.3.2 面向對象的設計 278
13.3.3 測試與調(diào)試的基本技術 284
13.4 本章小結 286
習題13 286
附錄A 編譯程序自動生成工具 287
思考題 306
參考文獻 307