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