編譯原理與技術(shù)(第2版)(計算機系列教材)
定 價:49 元
- 作者:李文生
- 出版時間:2016/9/14
- ISBN:9787302441410
- 出 版 社:清華大學(xué)出版社
- 中圖法分類:TP314
- 頁碼:415
- 紙張:膠版紙
- 版次:1
- 開本:16K
本書系統(tǒng)地介紹了編譯程序的設(shè)計原理和基本實現(xiàn)技術(shù)。主要內(nèi)容包括詞法分析、語法分析、語義分析、中間代碼生成、代碼生成和代碼優(yōu)化等,還重點介紹了用于實現(xiàn)語義分析和中間代碼生成的語法制導(dǎo)翻譯技術(shù),以及程序運行時存儲空間的組織與管理。
本書在介紹基本理論和方法的同時,也注重實際應(yīng)用,介紹了LEX和YACC的使用方法及原理,剖析了PL/0語言的編譯程序,介紹了GCC編譯程序的基本結(jié)構(gòu)。配合理論教學(xué),給出了一些實踐題目,旨在培養(yǎng)學(xué)生分析和解決問題的能力。
本書內(nèi)容充實、圖文并茂、各章節(jié)內(nèi)容循序漸進(jìn),并注重理論與實踐的結(jié)合。
本書可作為高等學(xué)校計算機科學(xué)與技術(shù)專業(yè)的本科生教材或參考書,也可供其他專業(yè)的學(xué)生或從事計算機工作的工程技術(shù)人員閱讀參考。本書封面貼有清華大學(xué)出版社防偽標(biāo)簽,無標(biāo)簽者不得銷售。
本書系統(tǒng)地介紹了編譯的基本原理和實現(xiàn)技術(shù),和同類教材相比,具有以下特點:
1.理論與實踐并重,加強實踐環(huán)節(jié)
以介紹編譯原理與實現(xiàn)技術(shù)為重點,結(jié)合重點內(nèi)容設(shè)計相應(yīng)的上機實踐題目,同時,在zui后一章,介紹編譯程序設(shè)計及實現(xiàn)的常用方法,給出課程設(shè)計用的大型上機實踐作業(yè)。
2.內(nèi)容齊全
覆蓋了IEEE和ACMzui新的ComputingCurricula中有關(guān)編譯程序各個功能的工作原理及實現(xiàn)技術(shù)。而目前現(xiàn)有的教材,有的缺少語義分析(主要是類型檢查)或代碼優(yōu)化內(nèi)容的介紹,有的對編譯過程中使用的主要數(shù)據(jù)結(jié)構(gòu)(符號表)的描述比較少,有的在習(xí)題的安排上,上機實踐的題目較少。另外,考慮到本課程要求學(xué)生具有形式語言與自動機的基礎(chǔ)知識,而有的學(xué)校設(shè)置有“形式語言與自動機”課程、有的沒有,所以將形式語言與自動機的內(nèi)容單獨組織成一章介紹,這樣使得教材結(jié)構(gòu)清晰,便于教學(xué)過程的實施。
3.講解深入,便于自學(xué)
在“編譯原理與技術(shù)”課程的教學(xué)過程中,學(xué)生普遍反映內(nèi)容抽象,不易理解,自學(xué)就更加困難。根據(jù)多年的教學(xué)經(jīng)驗、并廣泛聽取教師和學(xué)生意見的基礎(chǔ)上,增加例題的講解,并且對較難的例題講解完整,這樣便于學(xué)生自學(xué)。
4.注重反映新技術(shù)
在介紹經(jīng)典過程性語言(如PASCALl、C等)的編譯原理及實現(xiàn)技術(shù)的基礎(chǔ)上,簡要介紹了面向?qū)ο笳Z言的編譯方法。
李文生,北京郵電大學(xué)計算機學(xué)院副教授。1990年畢業(yè)于天津大學(xué)計算機系,獲碩士學(xué)位。自1990年3月以來,一直在北京郵電大學(xué)計算機學(xué)院任教,主講計算機專業(yè)本科“編譯原理與技術(shù)”、“操作系統(tǒng)”等課程,長期站在教學(xué)第一線,有著豐富的教學(xué)實踐經(jīng)驗:出版《編譯原理與技術(shù)》、《編譯程序設(shè)計原理與技術(shù)》等多部教材。
第1章編譯概述/1
1.1翻譯和解釋/1
1.1.1程序設(shè)計語言/1
1.1.2翻譯程序/2
1.2編譯的階段和任務(wù)/4
1.2.1分析階段/4
1.2.2綜合階段/7
1.2.3符號表管理/10
1.2.4錯誤處理/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章形式語言與自動機基礎(chǔ)/19
2.1語言和文法/19
2.1.1字母表和符號串/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有限自動機/31
2.2.1確定的有限自動機/32
2.2.2非確定的有限自動機/342.2.3具有ε轉(zhuǎn)移的非確定的有限自動機/36
2.2.4DFA的化簡/40
2.3正規(guī)文法與有限自動機的等價性/42
2.4正規(guī)表達(dá)式與有限自動機的等價性/45
2.5正規(guī)表達(dá)式與正規(guī)文法的等價性/48
2.5.1正規(guī)定義式/48
2.5.2表示的縮寫/49
2.5.3正規(guī)表達(dá)式轉(zhuǎn)換為等價的正規(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記號的描述和識別/57
3.3.1詞法與正規(guī)文法/58
3.3.2記號的文法/58
3.3.3狀態(tài)轉(zhuǎn)換圖與記號的識別/61
3.4詞法分析程序的設(shè)計與實現(xiàn)/62
3.4.1文法及狀態(tài)轉(zhuǎn)換圖/63
3.4.2詞法分析程序的構(gòu)造/65
3.4.3詞法分析程序的實現(xiàn)/65
3.5LEX簡介/71
3.5.1LEX源程序的結(jié)構(gòu)/71
3.5.2LEX源程序舉例/74
習(xí)題3/76
程序設(shè)計1/77第4章語法分析/78
4.1語法分析簡介/78
4.1.1語法分析程序的地位/78
4.1.2常用的語法分析方法/78
4.1.3語法錯誤的處理/79
4.2自頂向下分析方法/80
4.2.1遞歸下降分析/81
4.2.2遞歸調(diào)用預(yù)測分析/82
4.2.3非遞歸預(yù)測分析/88
4.3自底向上分析方法/95
4.3.1規(guī)范歸約/97
4.3.2“移進(jìn)歸約”方法的實現(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分析方法對二義文法的應(yīng)用/124
4.4.6LR分析的錯誤處理與恢復(fù)/129
4.5軟件工具YACC/131
4.5.1YACC源程序/132
4.5.2YACC對二義文法的處理/134
4.5.3用LEX建立YACC的詞法分析程序/136
習(xí)題4/137
程序設(shè)計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計算次序/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ù)測翻譯程序的設(shè)計/162
5.4L屬性定義的自底向上翻譯/165
5.4.1移走翻譯方案中嵌入的語義規(guī)則/166
5.4.2直接使用分析棧中的繼承屬性/166
5.4.3變換繼承屬性的計算規(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錯誤處理/181
6.2符號表/182
6.2.1符號表的建立和訪問時機/182
6.2.2符號表內(nèi)容/184
6.2.3符號表操作/187
6.2.4符號表組織/189
6.3類型檢查/193
6.3.1類型表達(dá)式/194
6.3.2類型等價/197
6.4一個簡單的類型檢查程序/204
6.4.1語言說明/204
6.4.2符號表的建立/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ù)和運算符的重載/216
6.5.2多態(tài)函數(shù)/217
習(xí)題6/220
程序設(shè)計3/223第7章運行環(huán)境/225
7.1程序運行時的存儲組織/225
7.1.1程序運行空間的劃分/226
7.1.2活動記錄與控制棧/227
7.1.3名字的作用域及名字綁定/230
7.2存儲分配策略/231
7.2.1靜態(tài)存儲分配/231
7.2.2棧式存儲分配/233
7.2.3堆式存儲分配/237
7.3非局部名字的訪問/239
7.3.1程序塊/239
7.3.2靜態(tài)作用域規(guī)則下非局部名字的
訪問/241
7.3.3動態(tài)作用域規(guī)則下非局部名字的
訪問/248
7.4參數(shù)傳遞機制/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僅涉及簡單變量的賦值語句的
翻譯/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è)計的相關(guān)問題/298
9.2基本塊和流圖/300
9.3下次引用信息/302
9.4一個簡單的代碼生成程序/305
9.4.1目標(biāo)機器描述/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削弱計算強度/321
10.2.5改變計算次序/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削弱計算強度/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削弱計算強度及代數(shù)化簡/338
習(xí)題10/339第11章面向?qū)ο蟮木幾g方法/341
11.1面向?qū)ο笳Z言的基本概念/341
11.1.1類和對象/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動態(tài)方法/351
11.3繼承的編譯/354
11.3.1單一繼承的編譯/354
11.3.2多繼承的編譯/355
11.4程序運行環(huán)境/358
習(xí)題11/359第12章編譯程序構(gòu)造實踐/360
12.1編譯程序的表示及實現(xiàn)方法/360
12.1.1表示方法/360
12.1.2實現(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編譯程序的出錯處理/373
12.2.6PL/0編譯程序的執(zhí)行環(huán)境及
代碼生成/375
12.2.7PL/0程序編譯和運行示例/379
12.3GCC編譯程序/381
12.3.1GCC簡介/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編譯實踐/392
12.4.1PascalS語言說明/392
12.4.2課程設(shè)計要求及說明/398
12.4.3編譯程序的測試/400附錄PL/0編譯程序源程序/402參考文獻(xiàn)/416