《編譯器設計之路》是2011年1月機械工業出版社出版的圖書,作者是裘巍。
基本介紹
- 書名:編譯器設計之路
- 作者:裘巍
- ISBN:9787111321644
- 類別:軟體
- 出版社:機械工業出版社
- 出版時間:2011年1月
- 開本:16
- 叢書名:信息科學與技術叢書
- 語音:簡體中文
內容簡介,圖書目錄,
內容簡介
本書系統地介紹了一個實際的Pascal編譯器Neo Pascal的設計與實現。結合Neo Pascal的原始碼,詳細講述了LL(1)語法分析器、符號表系統、中間表示、類型系統、最佳化技術、運行時刻的存儲管理、代碼生成器等編譯器設計的核心話題。各章都附有少量以實踐套用為主的練習題,既可作為閱讀思考題,也可作為課程設計選題。
與國內其他介紹編譯技術的圖書相比,本書更關注的是編譯器的實現細節,而不僅僅局限於理論闡述。本書可供從事編譯器設計相關工作的工程人員閱讀,也可作為高等院校計算機專業的編譯原理課程參考書。
圖書目錄
第1章 概述 1
1.1 編譯技術概述 1
1.1.1 程式設計語言基礎 1
1.1.2 程式設計語言的翻譯機制 4
1.1.3 編譯器的基本結構 5
1.2 Pascal語言基礎 8
1.2.1 Pascal語言簡介 8
1.2.2 Pascal程式基本組成 9
1.2.3 Pascal的聲明部分 10
1.2.4 Pascal的類型 12
1.2.5 Pascal的運算符 15
1.2.6 Pascal的語句 17
1.3 開發環境與Delphi基礎 18
1.3.1 開發環境與檔案列表 18
1.3.2 Delphi基礎 19
1.4 深入學習 24
1.5 實踐與思考 25
1.6 大師風采——Niklaus Wirth 25
第2章 詞法分析 26
2.1 詞法分析概述 26
2.1.1 詞法分析的任務 26
2.1.2 單詞的分類 28
2.2 詞法分析器的設計 28
2.2.1 識別單詞 28
2.2.2 轉換圖 29
2.2.3 構造詞法分析器 31
2.3 詞法分析器的實現 35
2.3.1 詞法定義 35
2.3.2 構造轉換圖與轉換表 36
2.3.3 相關數據結構 38
2.3.4 原始碼實現 40
2.4 深入學習 44
2.5 實踐與思考 45
2.6 大師風采——Dennis M. Ritchie 45
第3章 語法分析 47
3.1 程式設計語言的語法描述 47
3.1.1 上下文無關文法 47
3.1.2 推導 52
3.1.3 語法樹 54
3.1.4 歸約簡介 57
3.2 語法分析概述 58
3.2.1 語法分析的任務 58
3.2.2 自上而下的語法分析法 59
3.2.3 構造語法分析器 64
3.3 語法分析器的實現 71
3.3.1 文法定義 71
3.3.2 語法分析表 76
3.3.3 原始碼實現 86
3.4 深入學習 90
3.5 實踐與思考 91
3.6 大師風采——Edsger Wybe
Dijkstra 92
第4章 符號表系統 93
4.1 語義分析概述 93
4.1.1 程式設計語言的語義 93
4.1.2 語義分析與IR生成的任務 94
4.1.3 語法制導翻譯 95
4.2 符號表設計 98
4.2.1 符號表概述 98
4.2.2 符號表的邏輯結構 99
4.2.3 符號表的實例分析 109
4.3 聲明部分的實現 111
4.3.1 相關數據結構 111
4.3.2 主程式首部聲明 113
4.3.3 包含檔案聲明部分 114
4.3.4 標號聲明部分 118
4.3.5 常量聲明部分 119
4.3.6 類型聲明部分 120
4.3.7 變數聲明部分 149
4.3.8 過程、函式聲明部分 152
4.4 深入學習 154
4.5 實踐與思考 155
4.6 大師風采——John Backus 155
第5章 中間表示 156
5.1 IR概述 156
5.1.1 IR的作用 156
5.1.2 IR設計及其級別 157
5.1.3 設計IR的重要意義 159
5.2 IR生成 160
5.2.1 三地址代碼概述 160
5.2.2 Neo Pascal三地址代碼的
實現 164
5.2.3 翻譯機制概述 168
5.3 語句翻譯概述 170
5.3.1 語句翻譯基礎 170
5.3.2 翻譯輔助函式及其實現 173
5.4 if 語句 176
5.4.1 if 語句的翻譯 176
5.4.2 原始碼實現 177
5.5 while/repeat語句 181
5.5.1 while 語句的翻譯 181
5.5.2 原始碼實現 181
5.5.3 repeat語句的翻譯 184
5.6 for語句 184
5.6.1 for語句的翻譯 184
5.6.2 原始碼實現 186
5.7 case語句 192
5.7.1 case語句的翻譯 192
5.7.2 原始碼實現 193
5.8 其他語句 199
5.8.1 break、continue語句的翻譯 199
5.8.2 goto 語句的翻譯 201
5.8.3 asm 語句的翻譯 204
5.9 深入學習 208
5.10 實踐與思考 208
5.11 大師風采——Kenneth E.
Iverson 209
第6章 表達式語義 210
6.1 表達式概述 210
6.2 類型系統基礎 211
6.2.1 類型基礎 211
6.2.2 類型系統 212
6.2.3 類型轉換 217
6.3 類型系統的實現 218
6.3.1 類型系統的設計 218
6.3.2 IR的運算元 221
6.3.3 類型相容的實現 222
6.3.4 類型推斷的實現 223
6.4 表達式翻譯 226
6.4.1 表達式翻譯基礎 226
6.4.2 深入表達式翻譯 229
6.4.3 表達式翻譯的實現 230
6.5 運算元翻譯 247
6.5.1 運算元的地址與形態 247
6.5.2 運算元翻譯基礎 248
6.5.3 簡單變數運算元的翻譯 252
6.5.4 記錄欄位運算元的翻譯 262
6.5.5 數組翻譯基礎 265
6.5.6 數組元素運算元的翻譯 270
6.5.7 指針運算的翻譯 280
6.6 深入學習 286
6.7 實踐與思考 286
6.8 大師風采——Alan Kay 287
第7章 最佳化技術 288
7.1 最佳化概述 288
7.1.1 什麼是最佳化 288
7.1.2 最佳化級別 289
7.2 控制流分析 290
7.2.1 流圖與基本塊 290
7.2.2 流圖的數據結構 292
7.2.3 流圖的構造 293
7.2.4 最佳化的分類 297
7.3 數據流分析 298
7.3.1 數據流的相關概念 298
7.3.2 數據流分析的策略 298
7.3.3 活躍變數分析 299
7.3.4 ud鏈與du鏈 301
7.3.5 更多數據流問題 302
7.4 數據流分析的實現 303
7.4.1 定值點與引用點分析的基礎 303
7.4.2 定值點、引用點分析的相關
數據結構 305
7.4.3 定值點、引用點分析的實現 307
7.4.4 活躍變數分析的實現 312
7.4.5 ud鏈、du鏈分析的實現 314
7.5 常量傳播與常量摺疊 321
7.5.1 常量傳播基礎 321
7.5.2 常量傳播的實現 324
7.6 複寫傳播 328
7.6.1 複寫傳播的基礎 328
7.6.2 複寫傳播的實現 330
7.7 代數簡化 333
7.7.1 代數簡化基礎 333
7.7.2 代數簡化的實現 334
7.8 跳轉最佳化 339
7.8.1 跳轉最佳化基礎 339
7.8.2 條件跳轉最佳化的實現 341
7.8.3 連續跳轉最佳化的實現 343
7.9 冗餘代碼刪除 345
7.9.1 冗餘代碼刪除基礎 345
7.9.2 死代碼刪除的實現 346
7.9.3 不可到達代碼刪除的實現 348
7.10 深入學習 350
7.11 實踐與思考 350
7.12 大師風采—Richard
Stallman 351
第8章 運行時刻的存儲管理 352
8.1 存儲管理概述 352
8.1.1 存儲區域 352
8.1.2 存儲布局 354
8.1.3 存儲分配基礎 356
8.2 棧式存儲分配 357
8.2.1 棧式存儲分配基礎 357
8.2.2 i386棧式存儲分配 360
8.2.3 深入理解棧式存儲分配 365
8.3 存儲分配的實現 368
8.4 存儲最佳化 372
8.4.1 存儲最佳化基礎 372
8.4.2 存儲最佳化的實現 374
8.5 深入學習 381
8.6 實踐與思考 382
8.7 大師風采—Bjarne
Stroustrup 382
第9章 目標代碼生成 383
9.1 目標代碼生成概述 383
9.1.1 目標代碼生成基礎 383
9.1.2 指令選擇 384
9.1.3 暫存器分配 385
9.2 目標機簡介 386
9.2.1 目標機結構 386
9.2.2 浮點處理單元 387
9.2.3 運算元定址方式 391
9.2.4 ptr操作符 392
9.2.5 一個完整的彙編程式 393
9.3 構造代碼生成器 393
9.3.1 自動代碼生成器基礎 393
9.3.2 指令模板 394
9.3.3 暫存器描述 397
9.3.4 暫存器分配 398
9.3.5 代碼生成器的基本結構 402
9.4 深入學習 413
9.5 實踐與思考 413
9.6 大師風采——Peter Naur 413
第10章 GCC核心與現代編譯
技術概述 414
10.1 編譯技術的現狀及發展 414
10.2 GCC核心分析 415
10.2.1 GCC的基本結構 415
10.2.2 GENERIC 416
10.2.3 GIMPLE 416
10.2.4 SSA 426
10.2.5 RTL概述 428
10.2.6 RTX 430
10.3 動態編譯技術簡介 436
10.3.1 動態編譯技術基礎 436
10.3.2 運行時特定化 437
10.3.3 動態二進制翻譯 439
10.4 並行編譯技術簡介 441
10.4.1 並行編譯技術基礎 441
10.4.2 並行計算機及其編譯系統 443
10.5 深入學習 446
10.6 大師風采——Alan Perlis 447
參考文獻 448