編譯原理與技術(shù)(第2版)(計(jì)算機(jī)系列教材)
定 價(jià):49 元
- 作者:李文生
- 出版時(shí)間:2016/9/14
- ISBN:9787302441410
- 出 版 社:清華大學(xué)出版社
- 中圖法分類:TP314
- 頁碼:415
- 紙張:膠版紙
- 版次:1
- 開本:16K
本書系統(tǒng)地介紹了編譯程序的設(shè)計(jì)原理和基本實(shí)現(xiàn)技術(shù)。主要內(nèi)容包括詞法分析、語法分析、語義分析、中間代碼生成、代碼生成和代碼優(yōu)化等,還重點(diǎn)介紹了用于實(shí)現(xiàn)語義分析和中間代碼生成的語法制導(dǎo)翻譯技術(shù),以及程序運(yùn)行時(shí)存儲(chǔ)空間的組織與管理。
本書在介紹基本理論和方法的同時(shí),也注重實(shí)際應(yīng)用,介紹了LEX和YACC的使用方法及原理,剖析了PL/0語言的編譯程序,介紹了GCC編譯程序的基本結(jié)構(gòu)。配合理論教學(xué),給出了一些實(shí)踐題目,旨在培養(yǎng)學(xué)生分析和解決問題的能力。
本書內(nèi)容充實(shí)、圖文并茂、各章節(jié)內(nèi)容循序漸進(jìn),并注重理論與實(shí)踐的結(jié)合。
本書可作為高等學(xué)校計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)的本科生教材或參考書,也可供其他專業(yè)的學(xué)生或從事計(jì)算機(jī)工作的工程技術(shù)人員閱讀參考。本書封面貼有清華大學(xué)出版社防偽標(biāo)簽,無標(biāo)簽者不得銷售。
本書系統(tǒng)地介紹了編譯的基本原理和實(shí)現(xiàn)技術(shù),和同類教材相比,具有以下特點(diǎn):
1.理論與實(shí)踐并重,加強(qiáng)實(shí)踐環(huán)節(jié)
以介紹編譯原理與實(shí)現(xiàn)技術(shù)為重點(diǎn),結(jié)合重點(diǎn)內(nèi)容設(shè)計(jì)相應(yīng)的上機(jī)實(shí)踐題目,同時(shí),在zui后一章,介紹編譯程序設(shè)計(jì)及實(shí)現(xiàn)的常用方法,給出課程設(shè)計(jì)用的大型上機(jī)實(shí)踐作業(yè)。
2.內(nèi)容齊全
覆蓋了IEEE和ACMzui新的ComputingCurricula中有關(guān)編譯程序各個(gè)功能的工作原理及實(shí)現(xiàn)技術(shù)。而目前現(xiàn)有的教材,有的缺少語義分析(主要是類型檢查)或代碼優(yōu)化內(nèi)容的介紹,有的對(duì)編譯過程中使用的主要數(shù)據(jù)結(jié)構(gòu)(符號(hào)表)的描述比較少,有的在習(xí)題的安排上,上機(jī)實(shí)踐的題目較少。另外,考慮到本課程要求學(xué)生具有形式語言與自動(dòng)機(jī)的基礎(chǔ)知識(shí),而有的學(xué)校設(shè)置有“形式語言與自動(dòng)機(jī)”課程、有的沒有,所以將形式語言與自動(dòng)機(jī)的內(nèi)容單獨(dú)組織成一章介紹,這樣使得教材結(jié)構(gòu)清晰,便于教學(xué)過程的實(shí)施。
3.講解深入,便于自學(xué)
在“編譯原理與技術(shù)”課程的教學(xué)過程中,學(xué)生普遍反映內(nèi)容抽象,不易理解,自學(xué)就更加困難。根據(jù)多年的教學(xué)經(jīng)驗(yàn)、并廣泛聽取教師和學(xué)生意見的基礎(chǔ)上,增加例題的講解,并且對(duì)較難的例題講解完整,這樣便于學(xué)生自學(xué)。
4.注重反映新技術(shù)
在介紹經(jīng)典過程性語言(如PASCALl、C等)的編譯原理及實(shí)現(xiàn)技術(shù)的基礎(chǔ)上,簡(jiǎn)要介紹了面向?qū)ο笳Z言的編譯方法。
李文生,北京郵電大學(xué)計(jì)算機(jī)學(xué)院副教授。1990年畢業(yè)于天津大學(xué)計(jì)算機(jī)系,獲碩士學(xué)位。自1990年3月以來,一直在北京郵電大學(xué)計(jì)算機(jī)學(xué)院任教,主講計(jì)算機(jī)專業(yè)本科“編譯原理與技術(shù)”、“操作系統(tǒng)”等課程,長(zhǎng)期站在教學(xué)第一線,有著豐富的教學(xué)實(shí)踐經(jīng)驗(yàn):出版《編譯原理與技術(shù)》、《編譯程序設(shè)計(jì)原理與技術(shù)》等多部教材。
第1章編譯概述/1
1.1翻譯和解釋/1
1.1.1程序設(shè)計(jì)語言/1
1.1.2翻譯程序/2
1.2編譯的階段和任務(wù)/4
1.2.1分析階段/4
1.2.2綜合階段/7
1.2.3符號(hào)表管理/10
1.2.4錯(cuò)誤處理/10
1.3和編譯有關(guān)的其他概念/11
1.3.1編譯的前端和后端/11
1.3.2“遍”的概念/11
1.4編譯程序的伙伴工具/13
1.4.1預(yù)處理器/14
1.4.2匯編程序/14
1.4.3連接裝配程序/16
1.5編譯原理的應(yīng)用/16
習(xí)題1/18第2章形式語言與自動(dòng)機(jī)基礎(chǔ)/19
2.1語言和文法/19
2.1.1字母表和符號(hào)串/19
2.1.2語言/20
2.1.3文法及其形式定義/21
2.1.4推導(dǎo)和短語/23
2.1.5分析樹及二義性/25
2.1.6文法變換/27
2.2有限自動(dòng)機(jī)/31
2.2.1確定的有限自動(dòng)機(jī)/32
2.2.2非確定的有限自動(dòng)機(jī)/342.2.3具有ε轉(zhuǎn)移的非確定的有限自動(dòng)機(jī)/36
2.2.4DFA的化簡(jiǎn)/40
2.3正規(guī)文法與有限自動(dòng)機(jī)的等價(jià)性/42
2.4正規(guī)表達(dá)式與有限自動(dòng)機(jī)的等價(jià)性/45
2.5正規(guī)表達(dá)式與正規(guī)文法的等價(jià)性/48
2.5.1正規(guī)定義式/48
2.5.2表示的縮寫/49
2.5.3正規(guī)表達(dá)式轉(zhuǎn)換為等價(jià)的正規(guī)文法/50
習(xí)題2/51第3章詞法分析/53
3.1詞法分析程序與語法分析程序的關(guān)系/53
3.2詞法分析程序的輸入與輸出/54
3.2.1輸入緩沖區(qū)/54
3.2.2詞法分析程序的輸出/56
3.3記號(hào)的描述和識(shí)別/57
3.3.1詞法與正規(guī)文法/58
3.3.2記號(hào)的文法/58
3.3.3狀態(tài)轉(zhuǎn)換圖與記號(hào)的識(shí)別/61
3.4詞法分析程序的設(shè)計(jì)與實(shí)現(xiàn)/62
3.4.1文法及狀態(tài)轉(zhuǎn)換圖/63
3.4.2詞法分析程序的構(gòu)造/65
3.4.3詞法分析程序的實(shí)現(xiàn)/65
3.5LEX簡(jiǎn)介/71
3.5.1LEX源程序的結(jié)構(gòu)/71
3.5.2LEX源程序舉例/74
習(xí)題3/76
程序設(shè)計(jì)1/77第4章語法分析/78
4.1語法分析簡(jiǎn)介/78
4.1.1語法分析程序的地位/78
4.1.2常用的語法分析方法/78
4.1.3語法錯(cuò)誤的處理/79
4.2自頂向下分析方法/80
4.2.1遞歸下降分析/81
4.2.2遞歸調(diào)用預(yù)測(cè)分析/82
4.2.3非遞歸預(yù)測(cè)分析/88
4.3自底向上分析方法/95
4.3.1規(guī)范歸約/97
4.3.2“移進(jìn)歸約”方法的實(shí)現(xiàn)/98
4.4LR分析方法/100
4.4.1LR分析程序的模型及工作過程/100
4.4.2SLR(1)分析表的構(gòu)造/104
4.4.3LR(1)分析表的構(gòu)造/112
4.4.4LALR(1)分析表的構(gòu)造/119
4.4.5LR分析方法對(duì)二義文法的應(yīng)用/124
4.4.6LR分析的錯(cuò)誤處理與恢復(fù)/129
4.5軟件工具YACC/131
4.5.1YACC源程序/132
4.5.2YACC對(duì)二義文法的處理/134
4.5.3用LEX建立YACC的詞法分析程序/136
習(xí)題4/137
程序設(shè)計(jì)2/141第5章語法制導(dǎo)翻譯技術(shù)/142
5.1語法制導(dǎo)定義及翻譯方案/143
5.1.1語法制導(dǎo)定義/143
5.1.2依賴圖/146
5.1.3計(jì)算次序/147
5.1.4S屬性定義及L屬性定義/148
5.1.5翻譯方案/149
5.2S屬性定義的自底向上翻譯/151
5.2.1為表達(dá)式構(gòu)造語法樹的語法制導(dǎo)
定義/151
5.2.2S屬性定義的自底向上翻譯/155
5.3L屬性定義的自頂向下翻譯/158
5.3.1消除翻譯方案中的左遞歸/158
5.3.2預(yù)測(cè)翻譯程序的設(shè)計(jì)/162
5.4L屬性定義的自底向上翻譯/165
5.4.1移走翻譯方案中嵌入的語義規(guī)則/166
5.4.2直接使用分析棧中的繼承屬性/166
5.4.3變換繼承屬性的計(jì)算規(guī)則/169
5.4.4改寫語法制導(dǎo)定義為S屬性定義/172
5.5通用的語法制導(dǎo)翻譯方法/173
習(xí)題5/176第6章語義分析/180
6.1語義分析概述/180
6.1.1語義分析的任務(wù)/180
6.1.2語義分析程序的位置/181
6.1.3錯(cuò)誤處理/181
6.2符號(hào)表/182
6.2.1符號(hào)表的建立和訪問時(shí)機(jī)/182
6.2.2符號(hào)表內(nèi)容/184
6.2.3符號(hào)表操作/187
6.2.4符號(hào)表組織/189
6.3類型檢查/193
6.3.1類型表達(dá)式/194
6.3.2類型等價(jià)/197
6.4一個(gè)簡(jiǎn)單的類型檢查程序/204
6.4.1語言說明/204
6.4.2符號(hào)表的建立/205
6.4.3表達(dá)式的類型檢查/210
6.4.4語句的類型檢查/213
6.4.5類型轉(zhuǎn)換/214
6.5類型檢查有關(guān)的其他主題/216
6.5.1函數(shù)和運(yùn)算符的重載/216
6.5.2多態(tài)函數(shù)/217
習(xí)題6/220
程序設(shè)計(jì)3/223第7章運(yùn)行環(huán)境/225
7.1程序運(yùn)行時(shí)的存儲(chǔ)組織/225
7.1.1程序運(yùn)行空間的劃分/226
7.1.2活動(dòng)記錄與控制棧/227
7.1.3名字的作用域及名字綁定/230
7.2存儲(chǔ)分配策略/231
7.2.1靜態(tài)存儲(chǔ)分配/231
7.2.2棧式存儲(chǔ)分配/233
7.2.3堆式存儲(chǔ)分配/237
7.3非局部名字的訪問/239
7.3.1程序塊/239
7.3.2靜態(tài)作用域規(guī)則下非局部名字的
訪問/241
7.3.3動(dòng)態(tài)作用域規(guī)則下非局部名字的
訪問/248
7.4參數(shù)傳遞機(jī)制/250
7.4.1傳值調(diào)用/250
7.4.2引用調(diào)用/252
7.4.3復(fù)制恢復(fù)/253
7.4.4傳名調(diào)用/255
習(xí)題7/255第8章中間代碼生成/259
8.1中間代碼形式/259
8.1.1圖形表示/259
8.1.2三地址代碼/260
8.2賦值語句的翻譯/265
8.2.1僅涉及簡(jiǎn)單變量的賦值語句的
翻譯/265
8.2.2涉及數(shù)組元素的賦值語句/268
8.2.3記錄結(jié)構(gòu)中域的訪問/273
8.3布爾表達(dá)式的翻譯/274
8.3.1翻譯布爾表達(dá)式的方法/274
8.3.2數(shù)值表示法/275
8.3.3控制流表示法及回填技術(shù)/276
8.4控制語句的翻譯/282
8.5goto語句的翻譯/287
8.6CASE語句的翻譯/289
8.7過程調(diào)用語句的翻譯/292
習(xí)題8/294第9章目標(biāo)代碼生成/297
9.1目標(biāo)代碼生成概述/297
9.1.1代碼生成程序的位置/297
9.1.2代碼生成程序設(shè)計(jì)的相關(guān)問題/298
9.2基本塊和流圖/300
9.3下次引用信息/302
9.4一個(gè)簡(jiǎn)單的代碼生成程序/305
9.4.1目標(biāo)機(jī)器描述/305
9.4.2代碼生成算法/307
9.4.3其他常用語句的代碼生成/312
習(xí)題9/315第10章代碼優(yōu)化/317
10.1代碼優(yōu)化概述/317
10.1.1代碼優(yōu)化程序的功能和位置/317
10.1.2代碼優(yōu)化的主要種類/317
10.2基本塊優(yōu)化/318
10.2.1常數(shù)合并及常數(shù)傳播/318
10.2.2刪除公共表達(dá)式/320
10.2.3復(fù)制傳播/321
10.2.4削弱計(jì)算強(qiáng)度/321
10.2.5改變計(jì)算次序/321
10.3dag在基本塊優(yōu)化中的應(yīng)用/322
10.3.1基本塊的dag表示/322
10.3.2基本塊的dag構(gòu)造算法/323
10.3.3dag的應(yīng)用/327
10.3.4dag構(gòu)造算法的進(jìn)一步討論/330
10.4循環(huán)優(yōu)化/333
10.4.1循環(huán)展開/333
10.4.2代碼外提/334
10.4.3削弱計(jì)算強(qiáng)度/334
10.4.4刪除歸納變量/335
10.5窺孔優(yōu)化/337
10.5.1刪除冗余的傳送指令/337
10.5.2刪除死代碼/337
10.5.3控制流優(yōu)化/338
10.5.4削弱計(jì)算強(qiáng)度及代數(shù)化簡(jiǎn)/338
習(xí)題10/339第11章面向?qū)ο蟮木幾g方法/341
11.1面向?qū)ο笳Z言的基本概念/341
11.1.1類和對(duì)象/341
11.1.2繼承/343
11.1.3信息封裝/346
11.1.4多態(tài)性/347
11.2方法的編譯/350
11.2.1靜態(tài)方法/350
11.2.2動(dòng)態(tài)方法/351
11.3繼承的編譯/354
11.3.1單一繼承的編譯/354
11.3.2多繼承的編譯/355
11.4程序運(yùn)行環(huán)境/358
習(xí)題11/359第12章編譯程序構(gòu)造實(shí)踐/360
12.1編譯程序的表示及實(shí)現(xiàn)方法/360
12.1.1表示方法/360
12.1.2實(shí)現(xiàn)語言/360
12.1.3自展法/361
12.1.4移植法/362
12.2PL/0語言及其編譯程序介紹/364
12.2.1PL/0語言/365
12.2.2PL/0編譯程序的結(jié)構(gòu)/368
12.2.3PL/0編譯程序的詞法分析/369
12.2.4PL/0編譯程序的語法分析/371
12.2.5PL/0編譯程序的出錯(cuò)處理/373
12.2.6PL/0編譯程序的執(zhí)行環(huán)境及
代碼生成/375
12.2.7PL/0程序編譯和運(yùn)行示例/379
12.3GCC編譯程序/381
12.3.1GCC簡(jiǎn)介/382
12.3.2GCC編譯程序的結(jié)構(gòu)與處理
流程/383
12.3.3GCC的分析程序/384
12.3.4GCC的中間語言及中間代碼
生成/385
12.3.5GCC的代碼優(yōu)化/389
12.3.6GCC的代碼生成/391
12.4編譯實(shí)踐/392
12.4.1PascalS語言說明/392
12.4.2課程設(shè)計(jì)要求及說明/398
12.4.3編譯程序的測(cè)試/400附錄PL/0編譯程序源程序/402參考文獻(xiàn)/416