編譯原理與技術(第2版)

編譯原理與技術(第2版)

《編譯原理與技術(第2版)》是由李文生編著,2016年清華大學出版社出版的計算機系列教材。 該書可作為高等學校計算機科學與技術專業的本科生教材或參考書,也可供其他專業的學生或從事計算機工作的工程技術人員閱讀參考。

該教材系統地介紹了編譯程式的設計原理和基本實現技術。主要內容包括詞法分析、語法分析、語義分析、中間代碼生成、代碼生成和代碼最佳化等,還重點介紹了用於實現語義分析和中間代碼生成的語法制導翻譯技術,以及程式運行時存儲空間的組織與管理。

基本介紹

  • 書名:編譯原理與技術(第2版)
  • 作者:李文生
  • ISBN:9787302441410
  • 類別:計算機系列教材
  • 頁數:415頁
  • 出版社:清華大學出版社
  • 出版時間:2016-10-01
  • 裝幀:平裝
  • 開本:16開
成書過程,內容簡介,教材目錄,教學資源,教材特色,作者簡介,

成書過程

根據作者在教學實踐中的心得和體會,以及在第1版教材使用過程中得到的積極反饋和建議,結合編譯技術的發展和套用,該書對第1版教材的部分內容進行了修訂。
該書繼承和發揚了第1版教材理論充實、注重實踐的特色,並對原教材需要改善的內容進行了修訂,主要體現在:
(1)第4章,對LR分析程式進行了修改,主要涉及分析棧的組織和相應的分析動作,修改後的算法更便於理解和編碼實現。
(2)第5章,根據第4章的修改,對相應內容進行了修正,增加5.5節,介紹通用的語法制導翻譯函式的構造方法。
(3)第6章,內容組織做了調整,統一了示例語言文法,將聲明部分的翻譯方案和各語法成分的類型檢查方案的內容組織在一節中,使得內容上下銜接更自然。
(4)第8章,增加了訪問記錄中域的翻譯方案,重新組織了8.5節的內容,從實現的角度細化了8.6節的內容,根據第6章的文法,重寫了8.7節過程調用語句的翻譯。
(5)第9章,修正了所用目標機器的指令格式,更便於熟悉Intel彙編語言的讀者理解;給出了代碼生成算法的偽碼錶示。
(6)第10章,重新組織了10.3節的內容,並給出了基本塊DAG構造算法的偽碼錶示。
(7)第11章,這是新增加的一章,以C++語言為例介紹面向對象的編譯方法。主要介紹了面向對象語言的核心概念類和對象,及其主要特徵繼承性、封裝性和多態性,介紹了方法的編譯和繼承的編譯方法,以及面向對象語言程式運行時環境。
該教材於2016年10月1日由清華大學出版社出版。

內容簡介

該教材介紹了編譯程式的設計原理和基本實現技術。主要內容包括詞法分析、語法分析、語義分析、中間代碼生成、代碼生成和代碼最佳化等,還重點介紹了用於實現語義分析和中間代碼生成的語法制導翻譯技術,以及程式運行時存儲空間的組織與管理。介紹了LEX和YACC的使用方法及原理,剖析了PL/0語言的編譯程式,介紹了GCC編譯程式的基本結構。配合理論教學,給出了一些實踐題目。

教材目錄

第1章編譯概述/1
1.1翻譯和解釋/1
1.1.1程式設計語言/1
1.1.2翻譯程式/2
1.2編譯的階段和任務/4
1.2.1分析階段/4
1.2.2綜合階段/7
1.2.3符號表管理/10
1.2.4錯誤處理/10
1.3和編譯有關的其他概念/11
1.3.1編譯的前端和後端/11
1.3.2“遍”的概念/11
1.4編譯程式的夥伴工具/13
1.4.1預處理器/14
1.4.2彙編程式/14
1.4.3連線裝配程式/16
1.5編譯原理的套用/16
習題1/18
第2章形式語言與自動機基礎/19
2.1語言和文法/19
2.1.1字母表和符號串/19
2.1.2語言/20
2.1.3文法及其形式定義/21
2.1.4推導和短語/23
2.1.5分析樹及二義性/25
2.1.6文法變換/27
2.2有限自動機/31
2.2.1確定的有限自動機/32
2.2.2非確定的有限自動機/342.2.3具有ε轉移的非確定的有限自動機/36
2.2.4DFA的化簡/40
2.3正規文法與有限自動機的等價性/42
2.4正規表達式與有限自動機的等價性/45
2.5正規表達式與正規文法的等價性/48
2.5.1正規定義式/48
2.5.2表示的縮寫/49
2.5.3正規表達式轉換為等價的正規文法/50
習題2/51
第3章詞法分析/53
3.1詞法分析程式與語法分析程式的關係/53
3.2詞法分析程式的輸入與輸出/54
3.2.1輸入緩衝區/54
3.2.2詞法分析程式的輸出/56
3.3記號的描述和識別/57
3.3.1詞法與正規文法/58
3.3.2記號的文法/58
3.3.3狀態轉換圖與記號的識別/61
3.4詞法分析程式的設計與實現/62
3.4.1文法及狀態轉換圖/63
3.4.2詞法分析程式的構造/65
3.4.3詞法分析程式的實現/65
3.5LEX簡介/71
3.5.1LEX源程式的結構/71
3.5.2LEX源程式舉例/74
習題3/76
程式設計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遞歸調用預測分析/82
4.2.3非遞歸預測分析/88
4.3自底向上分析方法/95
4.3.1規範歸約/97
4.3.2“移進歸約”方法的實現/98
4.4LR分析方法/100
4.4.1LR分析程式的模型及工作過程/100
4.4.2SLR(1)分析表的構造/104
4.4.3LR(1)分析表的構造/112
4.4.4LALR(1)分析表的構造/119
4.4.5LR分析方法對二義文法的套用/124
4.4.6LR分析的錯誤處理與恢復/129
4.5軟體工具YACC/131
4.5.1YACC源程式/132
4.5.2YACC對二義文法的處理/134
4.5.3用LEX建立YACC的詞法分析程式/136
習題4/137
程式設計2/141
第5章語法制導翻譯技術/142
5.1語法制導定義及翻譯方案/143
5.1.1語法制導定義/143
5.1.2依賴圖/146
5.1.3計算次序/147
5.1.4S屬性定義及L屬性定義/148
5.1.5翻譯方案/149
5.2S屬性定義的自底向上翻譯/151
5.2.1為表達式構造語法樹的語法制導
定義/151
5.2.2S屬性定義的自底向上翻譯/155
5.3L屬性定義的自頂向下翻譯/158
5.3.1消除翻譯方案中的左遞歸/158
5.3.2預測翻譯程式的設計/162
5.4L屬性定義的自底向上翻譯/165
5.4.1移走翻譯方案中嵌入的語義規則/166
5.4.2直接使用分析棧中的繼承屬性/166
5.4.3變換繼承屬性的計算規則/169
5.4.4改寫語法制導定義為S屬性定義/172
5.5通用的語法制導翻譯方法/173
習題5/176
第6章語義分析/180
6.1語義分析概述/180
6.1.1語義分析的任務/180
6.1.2語義分析程式的位置/181
6.1.3錯誤處理/181
6.2符號表/182
6.2.1符號表的建立和訪問時機/182
6.2.2符號表內容/184
6.2.3符號表操作/187
6.2.4符號表組織/189
6.3類型檢查/193
6.3.1類型表達式/194
6.3.2類型等價/197
6.4一個簡單的類型檢查程式/204
6.4.1語言說明/204
6.4.2符號表的建立/205
6.4.3表達式的類型檢查/210
6.4.4語句的類型檢查/213
6.4.5類型轉換/214
6.5類型檢查有關的其他主題/216
6.5.1函式和運算符的重載/216
6.5.2多態函式/217
習題6/220
程式設計3/223
第7章運行環境/225
7.1程式運行時的存儲組織/225
7.1.1程式運行空間的劃分/226
7.1.2活動記錄與控制棧/227
7.1.3名字的作用域及名字綁定/230
7.2存儲分配策略/231
7.2.1靜態存儲分配/231
7.2.2棧式存儲分配/233
7.2.3堆式存儲分配/237
7.3非局部名字的訪問/239
7.3.1程式塊/239
7.3.2靜態作用域規則下非局部名字的
訪問/241
7.3.3動態作用域規則下非局部名字的
訪問/248
7.4參數傳遞機制/250
7.4.1傳值調用/250
7.4.2引用調用/252
7.4.3複製恢復/253
7.4.4傳名調用/255
習題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涉及數組元素的賦值語句/268
8.2.3記錄結構中域的訪問/273
8.3布爾表達式的翻譯/274
8.3.1翻譯布爾表達式的方法/274
8.3.2數值表示法/275
8.3.3控制流表示法及回填技術/276
8.4控制語句的翻譯/282
8.5goto語句的翻譯/287
8.6CASE語句的翻譯/289
8.7過程調用語句的翻譯/292
習題8/294
第9章目標代碼生成/297
9.1目標代碼生成概述/297
9.1.1代碼生成程式的位置/297
9.1.2代碼生成程式設計的相關問題/298
9.2基本塊和流圖/300
9.3下次引用信息/302
9.4一個簡單的代碼生成程式/305
9.4.1目標機器描述/305
9.4.2代碼生成算法/307
9.4.3其他常用語句的代碼生成/312
習題9/315
第10章代碼最佳化/317
10.1代碼最佳化概述/317
10.1.1代碼最佳化程式的功能和位置/317
10.1.2代碼最佳化的主要種類/317
10.2基本塊最佳化/318
10.2.1常數合併及常數傳播/318
10.2.2刪除公共表達式/320
10.2.3複製傳播/321
10.2.4削弱計算強度/321
10.2.5改變計算次序/321
10.3dag在基本塊最佳化中的套用/322
10.3.1基本塊的dag表示/322
10.3.2基本塊的dag構造算法/323
10.3.3dag的套用/327
10.3.4dag構造算法的進一步討論/330
10.4循環最佳化/333
10.4.1循環展開/333
10.4.2代碼外提/334
10.4.3削弱計算強度/334
10.4.4刪除歸納變數/335
10.5窺孔最佳化/337
10.5.1刪除冗餘的傳送指令/337
10.5.2刪除死代碼/337
10.5.3控制流最佳化/338
10.5.4削弱計算強度及代數化簡/338
習題10/339
第11章面向對象的編譯方法/341
11.1面向對象語言的基本概念/341
11.1.1類和對象/341
11.1.2繼承/343
11.1.3信息封裝/346
11.1.4多態性/347
11.2方法的編譯/350
11.2.1靜態方法/350
11.2.2動態方法/351
11.3繼承的編譯/354
11.3.1單一繼承的編譯/354
11.3.2多繼承的編譯/355
11.4程式運行環境/358
習題11/359
第12章編譯程式構造實踐/360
12.1編譯程式的表示及實現方法/360
12.1.1表示方法/360
12.1.2實現語言/360
12.1.3自展法/361
12.1.4移植法/362
12.2PL/0語言及其編譯程式介紹/364
12.2.1PL/0語言/365
12.2.2PL/0編譯程式的結構/368
12.2.3PL/0編譯程式的詞法分析/369
12.2.4PL/0編譯程式的語法分析/371
12.2.5PL/0編譯程式的出錯處理/373
12.2.6PL/0編譯程式的執行環境及
代碼生成/375
12.2.7PL/0程式編譯和運行示例/379
12.3GCC編譯程式/381
12.3.1GCC簡介/382
12.3.2GCC編譯程式的結構與處理
流程/383
12.3.3GCC的分析程式/384
12.3.4GCC的中間語言及中間代碼
生成/385
12.3.5GCC的代碼最佳化/389
12.3.6GCC的代碼生成/391
12.4編譯實踐/392
12.4.1PascalS語言說明/392
12.4.2課程設計要求及說明/398
12.4.3編譯程式的測試/400
附錄PL/0
編譯程式源程式/402
參考文獻/416

教學資源

  • 配套教材
該教材有配套教材《編譯原理與技術(第2版)學習指導與習題解析》。
書名書號出版社出版時間作者
《編譯原理與技術(第2版)學習指導與習題解析》
9787302495802
清華大學出版社
2018.07.01
李文生
  • 課程資源
《編譯原理與技術(第2版)學習指導與習題解析》提供有課堂教學使用的ppt課件。

教材特色

該教材和同類教材相比,具有以下特點:
1.理論與實踐並重,加強實踐環節
以介紹編譯原理與實現技術為重點,結合重點內容設計相應的上機實踐題目,同時,在最後一章,介紹編譯程式設計及實現的常用方法,給出課程設計用的大型上機實踐作業。
2.內容齊全
覆蓋了IEEE和ACM最新的Computing Curricula中有關編譯程式各個功能的工作原理及實現技術。另外,考慮到該課程要求學生具有形式語言與自動機的基礎知識,所以將形式語言與自動機的內容單獨組織成一章介紹。
3.講解深入,便於自學
在“編譯原理與技術”課程的教學過程中,增加例題的講解,並且對較難的例題講解完整。
4.注重反映新技術
在介紹經典過程性語言(如PASCALl、C等)的編譯原理及實現技術的基礎上,簡要介紹了面向對象語言的編譯方法。

作者簡介

李文生北京郵電大學計算機學院副教授。1990年畢業於天津大學計算機系,獲碩士學位。主講計算機專業本科“編譯原理與技術”、“作業系統”等課程,出版有《編譯原理與技術》、《編譯程式設計原理與技術》等教材。

相關詞條

熱門詞條

聯絡我們