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