本書(shū)旨在介紹編譯程序構(gòu)造的一般原理和基本方法,內(nèi)容包括語(yǔ)言和文法、詞法分析、語(yǔ)法分析、語(yǔ)法制導(dǎo)翻譯、中間代碼生成、存儲(chǔ)管理、代碼優(yōu)化和目標(biāo)代碼生成等。編譯原理是計(jì)算機(jī)專(zhuān)業(yè)設(shè)置的一門(mén)重要的專(zhuān)業(yè)課程。本書(shū)在編譯技術(shù)原理與及方法進(jìn)行了系統(tǒng)的闡釋?zhuān)⒅貙?shí)踐訓(xùn)練內(nèi)容,有利于提高軟件從業(yè)人員的素質(zhì)和能力。
本書(shū)系統(tǒng)性強(qiáng),概念清晰,內(nèi)容簡(jiǎn)明扼要,前9章配有習(xí)題,第10章給出了編譯程序?qū)嵗治觥?br />本書(shū)可作為高等院校計(jì)算機(jī)專(zhuān)業(yè)本科生的教材,也可供成人教育本科、專(zhuān)升本學(xué)生和計(jì)算機(jī)從業(yè)人員參考。
該教材編寫(xiě)目標(biāo)明確,內(nèi)容豐富,語(yǔ)言簡(jiǎn)練。教材主要特色與優(yōu)勢(shì)如下:
(1)案例鮮活且豐富,以學(xué)生更容易理解和接受的方式對(duì)涉及的基本概念和算法進(jìn)行重新闡述,深入淺出;
(2)借助多媒體手段,為每個(gè)重點(diǎn)算法配備相應(yīng)慕課視頻,在算法下面配置相應(yīng)的二維碼,學(xué)生可以?huà)叽a觀看學(xué)習(xí);
(3)理論和實(shí)踐有機(jī)結(jié)合,在介紹編譯各個(gè)階段的原理過(guò)程中,給出C語(yǔ)言的子集C--語(yǔ)言的編譯程序的編寫(xiě)過(guò)程分析,讓讀者在學(xué)習(xí)編譯原理的同時(shí)完成一個(gè)小型語(yǔ)言的編譯程序;
(4)配書(shū)資源齊全,提供實(shí)驗(yàn)大綱、實(shí)驗(yàn)指導(dǎo)書(shū)及相關(guān)參考源碼。
作者黃海平是南京郵電大學(xué)計(jì)算機(jī)學(xué)院教授、 博士生導(dǎo)師,江蘇省333工程中青年學(xué)術(shù)帶頭人, 江蘇省六大人才高峰 高層次人才培養(yǎng)對(duì)象, 2005年以來(lái)一直從事編譯原理的教學(xué)工作。
第1章 引論 1
1.1 程序設(shè)計(jì)語(yǔ)言的發(fā)展歷程 2
1.2 程序設(shè)計(jì)語(yǔ)言的翻譯機(jī)制 4
1.3 編譯程序概述 6
1.3.1 編譯程序的邏輯結(jié)構(gòu)概述 6
1.3.2 編譯程序的分遍 10
1.4 編譯程序的構(gòu)造方法 11
1.4.1 編寫(xiě)編譯程序的一般方法 11
1.4.2 編譯程序的開(kāi)發(fā)技術(shù) 11
1.5 編譯技術(shù)的主要應(yīng)用 15
1.6 本章小結(jié) 15
習(xí)題 16
第2章 形式語(yǔ)言的基本知識(shí) 17
2.1 字母表和符號(hào)串的基本概念 18
2.2 用文法產(chǎn)生法描述語(yǔ)言 19
2.2.1 巴克斯-諾爾范式 20
2.2.2 通過(guò)文法產(chǎn)生語(yǔ)言的方式 21
2.3 句型的分析 23
2.4 文法和語(yǔ)言的分類(lèi) 27
2.5 文法的其他表示法 29
2.6 C--語(yǔ)言的形式定義 31
2.7 應(yīng)用案例 32
2.8 本章小結(jié) 32
習(xí)題 32
第3章 詞法分析 35
3.1 詞法分析概述 36
3.1.1 詞法分析的任務(wù) 36
3.1.2 單詞的分類(lèi)與表示 37
3.2 手動(dòng)編寫(xiě)詞法分析程序 38
3.2.1 單詞的描述正規(guī)文法與狀態(tài)轉(zhuǎn)換圖 38
3.2.2 C--語(yǔ)言詞法分析程序的設(shè)計(jì)與實(shí)現(xiàn) 40
3.3 自動(dòng)生成詞法分析程序的原理 42
3.3.1 單詞的描述正規(guī)表達(dá)式 43
3.3.2 單詞的識(shí)別有窮自動(dòng)機(jī) 44
3.3.3 正規(guī)表達(dá)式、正規(guī)文法和有窮自動(dòng)機(jī)的等價(jià)性 49
3.4 本章小結(jié) 56
習(xí)題 56
第4章 語(yǔ)法分析 58
4.1 語(yǔ)法分析概述 59
4.2 自頂向下的語(yǔ)法分析 59
4.2.1 消除文法的回溯和左遞歸 59
4.2.2 LL(1)分析法 62
4.3 自底向上的語(yǔ)法分析 68
4.3.1 LR分析器的邏輯結(jié)構(gòu)和分析過(guò)程 68
4.3.2 LR(0)分析表的構(gòu)造 71
4.3.3 SLR(1)分析表的構(gòu)造 76
4.3.4 LR(1)分析表的構(gòu)造 79
4.3.5 LALR(1)分析表的構(gòu)造 81
4.4 語(yǔ)法分析程序的自動(dòng)生成 83
4.5 應(yīng)用案例 84
4.6 本章小結(jié) 85
習(xí)題 85
第5章 語(yǔ)義分析及中間代碼生成 89
5.1 語(yǔ)法制導(dǎo)翻譯概述 90
5.2 中間語(yǔ)言 92
5.2.1 逆波蘭表示 92
5.2.2 三元式 95
5.2.3 樹(shù)形表示 96
5.2.4 四元式 97
5.3 自底向上語(yǔ)法制導(dǎo)翻譯 97
5.4 自頂向下語(yǔ)法制導(dǎo)翻譯 119
5.5 屬性文法與屬性翻譯 123
5.6 本章小結(jié) 126
習(xí)題 127
第6章 符號(hào)表 129
6.1 符號(hào)表的作用 130
6.2 符號(hào)表的組織 130
6.2.1 符號(hào)表的形式 130
6.2.2 符號(hào)表中的內(nèi)容 132
6.3 符號(hào)表的構(gòu)造與查找 133
6.3.1 順序查表與造表法 133
6.3.2 折半查表與造表法 134
6.3.3 散列表法(雜湊法) 135
6.4 分程序結(jié)構(gòu)語(yǔ)言的符號(hào)表 137
6.5 非分程序結(jié)構(gòu)語(yǔ)言的符號(hào)表 138
6.6 本章小結(jié) 139
習(xí)題 140
第7章 存儲(chǔ)組織與分配 141
7.1 存儲(chǔ)組織概述 142
7.1.1 存儲(chǔ)空間的一般劃分與組織 142
7.1.2 過(guò)程活動(dòng)和活動(dòng)記錄 143
7.2 靜態(tài)存儲(chǔ)分配 144
7.3 動(dòng)態(tài)存儲(chǔ)分配 145
7.3.1 棧式存儲(chǔ)分配 145
7.3.2 堆式存儲(chǔ)分配 148
7.4 本章小結(jié) 149
習(xí)題 149
第8章 代碼優(yōu)化 152
8.1 代碼優(yōu)化概述 153
8.2 局部?jī)?yōu)化 154
8.3 循環(huán)優(yōu)化 156
8.4 利用DAG進(jìn)行優(yōu)化 163
8.5 數(shù)據(jù)流分析及全局優(yōu)化概述 167
8.6 本章小結(jié) 174
習(xí)題 174
第9章 目標(biāo)代碼生成 178
9.1 目標(biāo)代碼生成概述 179
9.2 假想的計(jì)算機(jī)模型 179
9.3 一種簡(jiǎn)單代碼生成程序 180
9.4 寄存器分配 185
9.5 由DAG生成目標(biāo)代碼 188
9.6 窺孔優(yōu)化 191
9.7 本章小結(jié) 192
習(xí)題 192
第10章 編譯程序?qū)嵗治?194
10.1 C--語(yǔ)言的編譯程序 195
10.2 編譯程序自動(dòng)生成器簡(jiǎn)介 195
10.2.1 Lex 195
10.2.2 YACC 197
10.2.3 Parser Generator 198
10.3 利用Parser Generator生成編譯程序 202
10.3.1 Lex源程序設(shè)計(jì) 202
10.3.2 YACC源程序設(shè)計(jì) 203
10.3.3 語(yǔ)義分析 206
10.4 部分核心代碼 207
10.5 軟件測(cè)試及其結(jié)果分析 213
10.6 本章小結(jié) 217