本書全面講述了現(xiàn)代編譯器的各個組成部分,包括詞法分析、語法分析、抽象語法、語義檢查、中間代碼表示、指令選擇、數(shù)據(jù)流分析、寄存器分配以及運行時系統(tǒng)等。全書分成兩部分,* 一部分是編譯的基礎(chǔ)知識,適用于* 一門編譯原理課程(一個學(xué)期);* 二部分是高 級主題,包括面向?qū)ο笳Z言和函數(shù)語言、垃圾收集、循環(huán)優(yōu)化、存儲結(jié)構(gòu)優(yōu)化等,適合于后續(xù)課程或研究生教學(xué)。書中專門為學(xué)生提供了一個用C語言編寫的實習(xí)項目,包括前端和后端設(shè)計,學(xué)生可以在一學(xué)期內(nèi)創(chuàng)建功能完整的編譯器。
本書享有“虎書”的稱號,與有“龍書”之稱的《編譯原理》齊名,在先進性、新穎性上有很好的優(yōu)勢。
本書是經(jīng)典編譯原理教材,國際上眾多名校均采用本書作為編譯原理課程的教材,包括美國麻省理工學(xué)院、加州大學(xué)伯克利分校、普林斯頓大學(xué)和英國劍橋大學(xué)等。
《現(xiàn)代編譯原理:C語言描述(修訂版)》按照編譯器處理過程的各個階段依次組織,并精心設(shè)計了一個“學(xué)生項目編譯器”的框架和模塊接口。每一章結(jié)尾均給出習(xí)題,使得學(xué)生在掌握了編譯原理和方法的同時,能夠理論聯(lián)系實際地親自動手體驗具體的實現(xiàn)過程。
《現(xiàn)代編譯原理:C語言描述(修訂版)》還增加了一些其他編譯原理教科書沒有涉及的內(nèi)容。前端增加了面向?qū)ο蟮某绦蛟O(shè)計語言、函數(shù)式程序設(shè)計語言等現(xiàn)代語言的編譯實現(xiàn)方法,后端增加了針對現(xiàn)代計算機體系結(jié)構(gòu)特征的一些比較成熟的優(yōu)化方法。這展現(xiàn)了現(xiàn)代商業(yè)編譯器需解決的一些關(guān)鍵問題,開拓了學(xué)生的視野,為未來更深入的研究奠定基礎(chǔ)。
Andrew W. Appel
美國普林斯頓大學(xué)計算機科學(xué)系教授,1998~1999年在貝爾實驗室做研究工作。主要研究方向是計算機安全、編譯器設(shè)計、程序設(shè)計語言等。
Maia Ginsburg
美國普林斯頓大學(xué)計算機科學(xué)系講師。
* 一部分 編譯基本原理
* 1章 緒論 1
1.1 模塊與接口 1
1.2 工具和軟件 3
1.3 樹語言的數(shù)據(jù)結(jié)構(gòu) 3
程序設(shè)計:直線式程序解釋器 7
推薦閱讀 8
習(xí)題 9
* 2章 詞法分析 10
2.1 詞法單詞 10
2.2 正則表達式 11
2.3 有限自動機 13
2.4 非確定有限自動機 15
2.5 Lex:詞法分析器的生成器 20
程序設(shè)計:詞法分析 22
推薦閱讀 23
習(xí)題 23
第3章 語法分析 27
3.1 上下文無關(guān)文法 28
3.2 預(yù)測分析 32
3.3 LR分析 39
3.4 使用分析器的生成器 48
3.5 錯誤恢復(fù) 54
程序設(shè)計:語法分析 57
推薦閱讀 58
習(xí)題 58
第4章 抽象語法 62
4.1 語義動作 62
4.2 抽象語法分析樹 65
程序設(shè)計:抽象語法 71
推薦閱讀 71
習(xí)題 72
第5章 語義分析 73
5.1 符號表 73
5.2 Tiger編譯器的綁定 79
5.3 表達式的類型檢查 82
5.4 聲明的類型檢查 84
程序設(shè)計:類型檢查 86
習(xí)題 87
第6章 活動記錄 89
6.1 棧幀 90
6.2 Tiger編譯器的棧幀 96
程序設(shè)計:棧幀 102
推薦閱讀 103
習(xí)題 103
第7章 翻譯成中間代碼 106
7.1 中間表示樹 106
7.2 翻譯為樹中間語言 108
7.3 聲明 120
程序設(shè)計:翻譯成樹 122
習(xí)題 123
第8章 基本塊和軌跡 125
8.1 規(guī)范樹 126
8.2 處理條件分支 131
推薦閱讀 134
習(xí)題 134
第9章 指令選擇 136
9.1 指令選擇算法 138
9.2 CISC機器 144
9.3 Tiger編譯器的指令選擇 146
程序設(shè)計:指令選擇 152
推薦閱讀 153
習(xí)題 154
* 10章 活躍分析 155
10.1 數(shù)據(jù)流方程的解 156
10.2 Tiger編譯器的活躍分析 162
程序設(shè)計:構(gòu)造流圖 164
程序設(shè)計:活躍分析模塊 165
習(xí)題 165
* 11章 寄存器分配 166
11.1 通過簡化進行著色 166
11.2 合并 168
11.3 預(yù)著色的結(jié)點 171
11.4 圖著色的實現(xiàn) 175
11.5 針對樹的寄存器分配 181
程序設(shè)計:圖著色 184
推薦閱讀 185
習(xí)題 185
* 12章 整合為一體 188
程序設(shè)計:過程入口/出口 189
程序設(shè)計:創(chuàng)建一個可運行的編譯器 191
* 二部分 高 級主題
* 13章 垃圾收集 193
13.1 標(biāo)記-清掃式收集 194
13.2 引用計數(shù) 197
13.3 復(fù)制式收集 198
13.4 分代收集 201
13.5 增量式收集 203
13.6 Baker算法 205
13.7 編譯器接口 205
程序設(shè)計:描述字 208
程序設(shè)計:垃圾收集 208
推薦閱讀 208
習(xí)題 210
* 14章 面向?qū)ο蟮恼Z言 211
14.1 類 211
14.2 數(shù)據(jù)域的單繼承性 213
14.3 多繼承 214
14.4 測試類成員關(guān)系 216
14.5 私有域和私有方法 218
14.6 無類語言 219
14.7 面向?qū)ο蟪绦虻膬?yōu)化 219
程序設(shè)計:OBJECT-Tiger 220
推薦閱讀 220
習(xí)題 221
* 15章 函數(shù)式程序設(shè)計語言 222
15.1 一個簡單的函數(shù)式語言 222
15.2 閉包 224
15.3 不變的變量 225
15.4 內(nèi)聯(lián)擴展 229
15.5 閉包變換 233
15.6 高效的尾遞歸 235
15.7 懶惰計算 236
推薦閱讀 243
程序設(shè)計:編譯函數(shù)式語言 244
習(xí)題 244
* 16章 多態(tài)類型 246
16.1 參數(shù)多態(tài)性 246
16.2 類型推論 253
16.3 多態(tài)變量的表示 259
16.4 靜態(tài)重載的解決方法 265
推薦閱讀 266
習(xí)題 266
* 17章 數(shù)據(jù)流分析 269
17.1 流分析使用的中間表示 270
17.2 各種數(shù)據(jù)流分析 271
17.3 使用數(shù)據(jù)流分析結(jié)果的幾種轉(zhuǎn)換 274
17.4 加快數(shù)據(jù)流分析 276
17.5 別名分析 281
推薦閱讀 285
習(xí)題 285
* 18章 循環(huán)優(yōu)化 287
18.1 必經(jīng)結(jié)點 289
18.2 循環(huán)不變量計算 292
18.3 歸納變量 293
18.4 數(shù)組邊界檢查 297
18.5 循環(huán)展開 300
推薦閱讀 301
習(xí)題 301
* 19章 靜態(tài)單賦值形式 303
19.1 轉(zhuǎn)化為SSA形式 305
19.2 必經(jīng)結(jié)點樹的高效計算 310
19.3 使用SSA的優(yōu)化算法 315
19.4 數(shù)組、指針和存儲器 320
19.5 控制依賴圖 321
19.6 從SSA形式轉(zhuǎn)變回來 323
19.7 函數(shù)式中間形式 324
推薦閱讀 327
習(xí)題 328
* 20章 流水和調(diào)度 331
20.1 沒有資源約束時的循環(huán)調(diào)度 332
20.2 有資源約束的循環(huán)流水 336
20.3 分支預(yù)測 341
推薦閱讀 343
習(xí)題 343
* 21章 存儲層次 346
21.1 cache的組織結(jié)構(gòu) 346
21.2 cache塊對齊 349
21.3 預(yù)取 350
21.4 循環(huán)交換 354
21.5 分塊 355
21.6 垃圾收集和存儲層次 357
推薦閱讀 358
習(xí)題 358
附錄 Tiger語言參考手冊 360
參考文獻 368
索引 376