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