本書(shū)系統(tǒng)地介紹了編譯程序的設(shè)計(jì)原理及實(shí)現(xiàn)技術(shù)。在內(nèi)容的組織上,本書(shū)強(qiáng)調(diào)知識(shí)的實(shí)用性,有機(jī)地結(jié)合了編譯的基本理論與具體的實(shí)現(xiàn)技術(shù),既注重理論的完整性,化繁為簡(jiǎn),又將理論融于具體的實(shí)例中,化難為易,以達(dá)到準(zhǔn)確、清楚地闡述相關(guān)概念和原理的目的。在具體內(nèi)容的講述中,思路清晰、條理分明,給出的示例豐富,實(shí)用性與連貫性強(qiáng),可使讀者全面、直觀地認(rèn)識(shí)編譯的各個(gè)階段。本書(shū)采用的算法全部由C語(yǔ)言描述,各章均附有習(xí)題,且附錄中提供了習(xí)題解答。本書(shū)既可作為計(jì)算機(jī)本科專業(yè)學(xué)生的教材,又可作為計(jì)算機(jī)軟件工程人員的參考資料。
費(fèi)蓉,博士,教授。作者主要承擔(dān)計(jì)算方法、大學(xué)生計(jì)算機(jī)基礎(chǔ)、軟件工具與環(huán)境、專業(yè)英語(yǔ)等本科課程,目前從事隨機(jī)環(huán)境建模分析、優(yōu)化算法等方面的研究。主持國(guó)家自然科學(xué)基金、陜西省技術(shù)轉(zhuǎn)移促進(jìn)、西安市科技計(jì)劃等縱向課題10余項(xiàng),橫向課題近10項(xiàng);在國(guó)內(nèi)外重要學(xué)術(shù)期刊和相關(guān)國(guó)際學(xué)術(shù)會(huì)議上公開(kāi)發(fā)表學(xué)術(shù)論文近30篇,其中SCI檢索10余篇;授權(quán)國(guó)家發(fā)明專利3項(xiàng),國(guó)際發(fā)明專利1項(xiàng),獲批軟件著作權(quán)30余項(xiàng);指導(dǎo)學(xué)生獲得"互聯(lián)網(wǎng)+”大學(xué)生創(chuàng)新創(chuàng)業(yè)大賽、全國(guó)大學(xué)生服務(wù)外包大賽等多項(xiàng)省級(jí)、國(guó)家級(jí)大獎(jiǎng)。參加的學(xué)術(shù)組織及任職:IEEE會(huì)員,ACM會(huì)員,CCF會(huì)員。個(gè)人/集體榮譽(yù):獲2015年西安理工大學(xué)校級(jí)講課比賽三等獎(jiǎng),作為主要參與人獲2017年度校級(jí)教學(xué)成果一等獎(jiǎng),作為主要參與人獲2015、2019年度陜西省高等學(xué)?茖W(xué)技術(shù)獎(jiǎng)一等獎(jiǎng)兩項(xiàng),2016年度陜西省科學(xué)技術(shù)獎(jiǎng)二等獎(jiǎng)一項(xiàng)。承擔(dān)過(guò)的重點(diǎn)科研項(xiàng)目:作為主要參與人(4/5)獲2017年度校級(jí)教學(xué)成果一等獎(jiǎng),作為主要參與人(4/7)(6/11)獲2015、2019年度陜西省高等學(xué)?茖W(xué)技術(shù)獎(jiǎng)一等獎(jiǎng)兩項(xiàng),2016年度陜西省科學(xué)技術(shù)獎(jiǎng)二等獎(jiǎng)一項(xiàng)。教學(xué)成果獲獎(jiǎng)情況:第二主編胡元義主持的《計(jì)算機(jī)專業(yè)核心學(xué)位課程教材建設(shè)(教材)》獲2015年校教學(xué)成果一等獎(jiǎng),《改革實(shí)驗(yàn)教學(xué)模式的實(shí)驗(yàn)教材建設(shè)(教材)》獲2012年校教學(xué)成果一等獎(jiǎng),《提高本科教學(xué)質(zhì)量,不斷進(jìn)行計(jì)算機(jī)教學(xué)實(shí)踐創(chuàng)新》和《編譯原理系列教材建設(shè)》分獲2003和2007年校教學(xué)成果二等獎(jiǎng);本人參與的《突出實(shí)踐,全面提高計(jì)算機(jī)專業(yè)本科培養(yǎng)質(zhì)量》和《抓質(zhì)量工程建設(shè),促創(chuàng)新型應(yīng)用人才培養(yǎng)》分獲2007和2009年校教學(xué)成果特等獎(jiǎng);主編的《數(shù)據(jù)結(jié)構(gòu)教程》獲2015校優(yōu)秀教材二等獎(jiǎng),主編的《編譯原理教程》(第一版)獲2007校優(yōu)秀教材二等獎(jiǎng),主編的《編譯原理教程》(第三版)獲2016校優(yōu)秀教材一等獎(jiǎng),主編的《C語(yǔ)言程序設(shè)計(jì)教程》獲2016校優(yōu)秀教材二等獎(jiǎng)。出版著作情況:(1)《數(shù)據(jù)結(jié)構(gòu)教程》、《數(shù)據(jù)結(jié)構(gòu)教程習(xí)題解析與上機(jī)指導(dǎo)》胡元義、黑新宏、魯曉峰、費(fèi)蓉等,西安電子科技大學(xué)出版社2012;(2)《操作系統(tǒng)原理》胡元義、費(fèi)蓉等,電子工業(yè)出版社,2018。
目 錄
第1章 緒論 1
1.1 程序設(shè)計(jì)語(yǔ)言和編譯程序 1
1.2 編譯程序的歷史及發(fā)展 3
1.3 編譯過(guò)程和編譯程序結(jié)構(gòu) 4
1.4 編譯程序的開(kāi)發(fā) 6
1.5 構(gòu)造編譯程序所應(yīng)具備的知識(shí)內(nèi)容 7
習(xí)題1 8
第2章 詞法分析 10
2.1 詞法分析器的設(shè)計(jì)方法 10
2.1.1 單詞符號(hào)的分類與輸出形式 10
2.1.2 狀態(tài)轉(zhuǎn)換圖 11
2.2 一個(gè)簡(jiǎn)單的詞法分析器示例 13
2.2.1 C語(yǔ)言子集的單詞符號(hào)表示 13
2.2.2 C語(yǔ)言子集對(duì)應(yīng)的狀態(tài)轉(zhuǎn)換圖 14
2.2.3 狀態(tài)轉(zhuǎn)換圖的實(shí)現(xiàn) 15
2.3 正規(guī)表達(dá)式與有限自動(dòng)機(jī)簡(jiǎn)介 17
2.3.1 正規(guī)表達(dá)式與正規(guī)集 17
2.3.2 有限自動(dòng)機(jī) 18
2.4 正規(guī)表達(dá)式到有限自動(dòng)機(jī)的構(gòu)造 21
2.4.1 由正規(guī)表達(dá)式構(gòu)造等價(jià)的非確定有限自動(dòng)機(jī) 21
2.4.2 NFA的確定化 22
2.4.3 確定有限自動(dòng)機(jī)(DFA)的化簡(jiǎn) 24
2.4.4 正規(guī)表達(dá)式到有限自動(dòng)機(jī)構(gòu)造示例 26
2.5 詞法分析器的自動(dòng)生成 31
習(xí)題2 33
第3章 文法和語(yǔ)言 36
3.1 基本概念 36
3.1.1 文法和語(yǔ)言的定義 36
3.1.2 文法產(chǎn)生的語(yǔ)言 38
3.2 形式語(yǔ)言分類 39
3.2.1 四類文法的劃分 39
3.2.2 四類文法的關(guān)系與區(qū)別 40
3.2.3 正規(guī)表達(dá)式與上下文無(wú)關(guān)文法 42
3.3 推導(dǎo)與語(yǔ)法樹(shù) 43
3.3.1 推導(dǎo)與短語(yǔ) 43
3.3.2 語(yǔ)法樹(shù)與二義性 44
習(xí)題3 49
第4章 語(yǔ)法分析—自頂向下分析方法 51
4.1 自頂向下分析原理 51
4.1.1 自頂向下分析存在的不確定性 51
4.1.2 確定的自頂向下分析 52
4.2 遞歸下降分析法 56
4.2.1 算術(shù)表達(dá)式的遞歸下降分析器 56
4.2.2 無(wú)二義性的算術(shù)表達(dá)式遞歸下降分析器 58
4.3 LL(1)分析法 59
4.3.1 表驅(qū)動(dòng)的LL(1)分析器 59
4.3.2 LL(1)分析表的構(gòu)造 62
習(xí)題4 66
第5章 語(yǔ)法分析—自底向上分析方法 68
5.1 自底向上分析原理 68
5.2 算符優(yōu)先分析法 70
5.2.1 算符優(yōu)先文法 70
5.2.2 算符優(yōu)先關(guān)系表的構(gòu)造 71
5.2.3 算符優(yōu)先分析算法的設(shè)計(jì) 74
5.2.4 優(yōu)先函數(shù) 78
5.3 LR分析器的工作原理 80
5.4 LR(0)分析器 86
5.4.1 LR(0)項(xiàng)目集規(guī)范族的構(gòu)造 86
5.4.2 LR(0)分析表的構(gòu)造 88
5.5 SLR(1)分析器 93
5.6 二義文法的應(yīng)用 99
習(xí)題5 103
第6章 語(yǔ)義分析和中間代碼生成 107
6.1 概述 107
6.1.1 語(yǔ)義分析的概念 107
6.1.2 語(yǔ)法制導(dǎo)翻譯方法 107
6.2 屬性文法 109
6.2.1 文法的屬性 109
6.2.2 屬性文法 110
6.3 幾種常見(jiàn)的中間語(yǔ)言 111
6.3.1 抽象語(yǔ)法樹(shù) 111
6.3.2 逆波蘭表示法 112
6.3.3 三地址代碼 114
6.4 表達(dá)式及賦值語(yǔ)句的翻譯 116
6.4.1 簡(jiǎn)單算術(shù)表達(dá)式和賦值語(yǔ)句的翻譯 116
6.4.2 布爾表達(dá)式的翻譯 118
6.5 控制語(yǔ)句的翻譯 123
6.5.1 條件語(yǔ)句if的翻譯 123
6.5.2 循環(huán)語(yǔ)句的翻譯 125
6.5.3 三種基本控制結(jié)構(gòu)的翻譯 127
6.5.4 多分支控制語(yǔ)句case的翻譯 132
6.5.5 語(yǔ)句標(biāo)號(hào)和轉(zhuǎn)移語(yǔ)句的翻譯 134
6.6 數(shù)組元素的翻譯 134
6.6.1 數(shù)組元素的地址計(jì)算及中間代碼形式 135
6.6.2 賦值語(yǔ)句中數(shù)組元素的翻譯 135
6.6.3 數(shù)組元素翻譯示例 136
6.7 過(guò)程或函數(shù)調(diào)用語(yǔ)句的翻譯 139
6.7.1 過(guò)程或函數(shù)調(diào)用的方法 139
6.7.2 過(guò)程或函數(shù)調(diào)用語(yǔ)句的四元式生成 140
6.8 說(shuō)明語(yǔ)句的翻譯 141
6.8.1 變量說(shuō)明的翻譯 141
6.8.2 數(shù)組說(shuō)明的翻譯 141
6.9 遞歸下降語(yǔ)法制導(dǎo)翻譯方法簡(jiǎn)介 142
習(xí)題6 143
第7章 代碼優(yōu)化 147
7.1 局部?jī)?yōu)化 147
7.1.1 基本塊的劃分方法 147
7.1.2 基本塊的DAG方法 148
7.1.3 用DAG進(jìn)行基本塊的優(yōu)化處理 152
7.1.4 DAG構(gòu)造算法的進(jìn)一步討論 153
7.2 循環(huán)優(yōu)化 154
7.2.1 程序流圖與循環(huán) 154
7.2.2 循環(huán)的查找 156
7.2.3 循環(huán)優(yōu)化 161
習(xí)題7 169
第8章 目標(biāo)程序運(yùn)行時(shí)存儲(chǔ)空間的組織 173
8.1 靜態(tài)存儲(chǔ)分配 173
8.2 簡(jiǎn)單的棧式存儲(chǔ)分配 174
8.2.1 棧式存儲(chǔ)分配與活動(dòng)記錄 175
8.2.2 過(guò)程的執(zhí)行 176
8.3 嵌套過(guò)程語(yǔ)言的棧式實(shí)現(xiàn) 179
8.3.1 嵌套層次顯示表和活動(dòng)記錄 179
8.3.2 嵌套過(guò)程的執(zhí)行 180
8.3.3 訪問(wèn)非局部名的另一種實(shí)現(xiàn)方法 182
8.4 堆式動(dòng)態(tài)存儲(chǔ)分配 185
8.4.1 堆式存儲(chǔ)的概念 185
8.4.2 堆式存儲(chǔ)的管理方法 186
習(xí)題8 188
第9章 目標(biāo)代碼生成 190
9.1 簡(jiǎn)單代碼生成器 190
9.1.1 待用信息與活躍信息 191
9.1.2 代碼生成算法 193
9.1.3 寄存器分配 194
9.1.4 源程序到目標(biāo)代碼生成示例 196
9.2 匯編指令到機(jī)器代碼翻譯概述 198
習(xí)題9 204
第10章 符號(hào)表與錯(cuò)誤處理 206
10.1 符號(hào)表 206
10.1.1 符號(hào)表的作用 206
10.1.2 符號(hào)表的組織 207
10.1.3 分程序結(jié)構(gòu)語(yǔ)言符號(hào)表建立 208
10.1.4 非分程序結(jié)構(gòu)語(yǔ)言符號(hào)表建立 211
10.1.5 常用符號(hào)表結(jié)構(gòu) 212
10.1.6 符號(hào)表內(nèi)容 213
10.2 錯(cuò)誤處理 214
10.2.1 語(yǔ)法錯(cuò)誤校正 214
10.2.2 語(yǔ)義錯(cuò)誤校正 220
習(xí)題10 221
附錄A 8086/8088指令碼匯總表 223
附錄B 8086/8088指令編碼空間表 228
附錄C 習(xí)題解答 230
參考文獻(xiàn) 290