日韩精品 中文字幕 动漫,91亚洲午夜一区,在线不卡日本v一区v二区丶,久久九九国产精品自在现拍

注冊 | 登錄讀書好,好讀書,讀好書!
讀書網-DuShu.com
當前位置: 首頁出版圖書科學技術計算機/網絡軟件與程序設計匯編語言/編譯原理現代編譯原理(C語言描述)

現代編譯原理(C語言描述)

現代編譯原理(C語言描述)

定 價:¥45.00

作 者: (美)Andrew W.Appel著
出版社: 人民郵電出版社
叢編項: 圖靈計算機科學叢書
標 簽: 解釋程序

ISBN: 9787115145529 出版時間: 2006-04-01 包裝: 平裝
開本: 16開 頁數: 385 字數:  

內容簡介

本書全面講述了現代編譯器的結構、編譯算法和實現方法,是Andreww.Apple的“虎書”——ModernCompilerImplementation——“紅、藍、綠”三序列之一。這三本書的內容基本相同。但是使用不同的語言來實現書中給出的一個編譯器。本書使用的是更適合廣大讀者的c語言,而另外兩本書分別采用ML語言和Java語言。本書的另一個特點是增加了一些其他編譯原理教科書沒有涉及的內容。前端增加了面向對象的程序設計語言、函數式程序設計語言等現代語言的編譯實現方法,后端增加了針對現代計算機體系結構特征的一些比較成熟的優(yōu)化方法。這部分內容展現了現代商業(yè)編譯器需解決的一些關鍵問題,開拓了學生的視野,為學生未來進行更深入的研究奠定了基礎。本書全面講述了現代編譯器的各個組成部分,包括詞法分析、語法分析、抽象語法、語義檢查、中間代碼表示、指令選擇、數據流分析、寄存器分配以及運行時系統等。全書分成兩部分,第一部分是編譯的基礎知識,適用于第一門編譯原理課程(一個學期);第二部分是高級主題,包括面向對象語言和函數語言、垃圾收集、循環(huán)優(yōu)化、ssA(靜態(tài)單賦值)形式、循環(huán)調度、存儲結構優(yōu)化等,適合于后續(xù)課程或研究生教學。書中專門為學生提供了一個用C語言編寫的實習項目,包括前端和后端設計,學生可以在一學期內創(chuàng)建一個功能完整的編譯器。本書適用于高等院校計算機及相關專業(yè)的本科生或研究生,也可供科研人員或工程技術人員參考。

作者簡介

  Andrew W.Appel,美國普林斯頓大學計算機科學系教授,第26屆ACM SIGPLAN-SIGACT程序設計原理年會大會執(zhí)行主席,1998-1999年在貝爾實驗室做研究工作。主要研究方向是計算機安全、編譯器設計、程序設計語言等。

圖書目錄

第一部分 編譯基本原理
第1章 緒論 1
1.1 模塊與接口 1
1.2 工具和軟件 3
1.3 樹語言的數據結構 3
程序設計:直線式程序解釋器 7
推薦閱讀 9
習題 9
第2章 詞法分析 10
2.1 詞法單詞 10
2.2 正則表達式 11
2.3 有限自動機 13
2.4 非確定有限自動機 15
2.4.1 將正則表達式轉換為NFA 16
2.4.2 將NFA轉換為DFA 18
2.5 Lex:詞法分析器的生成器 20
程序設計:詞法分析 22
推薦閱讀 23
習題 23
第3章 語法分析 27
3.1 上下文無關文法 28
3.1.1 推導 29
3.1.2 語法分析樹 29
3.1.3 二義性文法 30
3.1.4 文件結束符 31
3.2 預測分析 32
3.2.1 FIRST集合和FOLLOW集合 33
3.2.2 構造一個預測分析器 35
3.2.3 消除左遞歸 36
3.2.4 提取左因子 37
3.2.5 錯誤恢復 37
3.3 LR分析 39
3.3.1 LR分析引擎 40
3.3.2 LR(0)分析器生成器 41
3.3.3 SLR分析器的生成 44
3.3.4 LR(1)項和LR(1)分析表 45
3.3.5 LALR(1)分析表 46
3.3.6 各類文法的層次 47
3.3.7 二義性文法的LR分析 47
3.4 使用分析器的生成器 48
3.4.1 沖突 49
3.4.2 優(yōu)先級指導 50
3.4.3 語法和語義 53
3.5 錯誤恢復 54
3.5.1 用error符號恢復 54
3.5.2 全局錯誤修復 55
程序設計:語法分析 57
推薦閱讀 58
習題 58
第4章 抽象語法 62
4.1 語義動作 62
4.1.1 遞歸下降 62
4.1.2 Yacc生成的分析器 62
4.1.3 語義動作的解釋器 64
4.2 抽象語法分析樹 65
4.2.1 位置 67
4.2.2 Tiger的抽象語法 68
程序設計:抽象語法 71
推薦閱讀 71
習題 72
第5章 語義分析 73
5.1 符號表 73
5.1.1 多個符號表 74
5.1.2 高效的命令式風格符號表 75
5.1.3 高效的函數式符號表 76
5.1.4 Tiger編譯器的符號 77
5.1.5 函數式風格的符號表 79
5.2 Tiger編譯器的綁定 79
5.3 表達式的類型檢查 82
5.4 聲明的類型檢查 84
5.4.1 變量聲明 84
5.4.2 類型聲明 85
5.4.3 函數聲明 85
5.4.4 遞歸聲明 86
程序設計:類型檢查 87
習題 87
第6章 活動記錄 89
6.1 棧幀 90
6.1.1 幀指針 91
6.1.2 寄存器 92
6.1.3 參數傳遞 92
6.1.4 返回地址 94
6.1.5 棧幀內的變量 94
6.1.6 靜態(tài)鏈 95
6.2 Tiger編譯器的棧幀 96
6.2.1 棧幀描述的表示 98
6.2.2 局部變量 98
6.2.3 計算逃逸變量 99
6.2.4 臨時變量和標號 100
6.2.5 兩層抽象 100
6.2.6 管理靜態(tài)鏈 102
6.2.7 追蹤層次信息 102
程序設計:棧幀 103
推薦閱讀 103
習題 103
第7章 翻譯成中間代碼 106
7.1 中間表示樹 106
7.2 翻譯為樹中間語言 108
7.2.1 表達式的種類 108
7.2.2 簡單變量 111
7.2.3 追隨靜態(tài)鏈 112
7.2.4 數組變量 113
7.2.5 結構化的左值 114
7.2.6 下標和域選擇 114
7.2.7 關于安全性的勸告 115
7.2.8 算術操作 116
7.2.9 條件表達式 116
7.2.10 字符串 117
7.2.11 記錄和數組的創(chuàng)建 118
7.2.12 while循環(huán) 119
7.2.13 for循環(huán) 119
7.2.14 函數調用 120
7.3 聲明 120
7.3.1 變量定義 120
7.3.2 函數定義 120
7.3.3 片段 121
程序設計:翻譯成樹 122
習題 123
第8章 基本塊和軌跡 125
8.1 規(guī)范樹 126
8.1.1 ESEQ的轉換 126
8.1.2 一般重寫規(guī)則 126
8.1.3 將CALL移到頂層 130
8.1.4 線性語句表 131
8.2 處理條件分支 131
8.2.1 基本塊 131
8.2.2 軌跡 132
8.2.3 完善 133
8.2.4 最優(yōu)軌跡 133
推薦閱讀 134
習題 134
第9章 指令選擇 136
9.1 指令選擇算法 138
9.1.1 Maximal Munch算法 138
9.1.2 動態(tài)規(guī)劃 140
9.1.3 樹文法 141
9.1.4 快速匹配 143
9.1.5 覆蓋算法的效率 143
9.2 CISC機器 144
9.3 Tiger編譯器的指令選擇 146
9.3.1 抽象的匯編語言指令 146
9.3.2 生成匯編指令 148
9.3.3 過程調用 151
9.3.4 無幀指針的情形 151
程序設計:指令選擇 152
推薦閱讀 153
習題 154
第10章 活躍分析 155
10.1 數據流方程的解 156
10.1.1 活躍性計算 156
10.1.2 集合的表示 158
10.1.3 時間復雜度 158
10.1.4 最小不動點 159
10.1.5 靜態(tài)活躍性與動態(tài)活躍性 160
10.1.6 沖突圖 161
10.2 Tiger編譯器的活躍分析 162
10.2.1 圖 162
10.2.2 控制流圖 163
10.2.3 活躍分析 164
程序設計:構造流圖 164
程序設計:活躍分析模塊 165
習題 165
第11章 寄存器分配 166
11.1 通過簡化進行著色 166
11.2 合并 168
11.3 預著色的結點 171
11.3.1 機器寄存器的臨時副本 171
11.3.2 調用者保護的寄存器和被調用者保護的寄存器 172
11.3.3 含預著色結點的例子 172
11.4 圖著色的實現 175
11.4.1 傳送指令工作表的管理 176
11.4.2 數據結構 176
11.4.3 程序代碼 177
11.5 針對樹的寄存器分配 181
程序設計:圖著色 184
推薦閱讀 185
習題 185
第12章 整合為一體 188
程序設計:過程入口/出口 189
程序設計:創(chuàng)建一個可運行的編譯器 191
第二部分高級主題
第13章 垃圾收集 193
13.1 標記-清掃式收集 194
13.2 引用計數 197
13.3 復制式收集 198
13.4 分代收集 201
13.5 增量式收集 203
13.6 Baker算法 205
13.7 編譯器接口 205
13.7.1 快速分配 205
13.7.2 數據布局的描述 206
13.7.3 導出指針 207
程序設計:描述字 208
程序設計:垃圾收集 208
推薦閱讀 208
習題 210
第14章 面向對象的語言 211
14.1 類 211
14.2 數據域的單繼承性 213
14.3 多繼承 214
14.4 測試類成員關系 216
14.5 私有域和私有方法 218
14.6 無類語言 219
14.7 面向對象程序的優(yōu)化 219
程序設計:OBJECT-Tiger 220
推薦閱讀 220
習題 221
第15章 函數式程序設計語言 222
15.1 一個簡單的函數式語言 222
15.2 閉包 224
15.3 不變的變量 225
15.3.1 基于延續(xù)的I/O 226
15.3.2 語言上的變化 227
15.3.3 純函數式語言的優(yōu)化 228
15.4 內聯擴展 229
15.5 閉包變換 233
15.6 高效的尾遞歸 235
15.7 懶惰計算 236
15.7.1 傳名調用計算 237
15.7.2 按需調用 238
15.7.3 懶惰程序的計算 239
15.7.4 懶惰函數式程序的優(yōu)化 239
15.7.5 嚴格性分析 241
推薦閱讀 243
程序設計:編譯函數式語言 244
習題 244
第16章 多態(tài)類型 246
16.1 參數多態(tài)性 246
16.1.1 顯式帶類型的多態(tài)語言 247
16.1.2 多態(tài)類型的檢查 248
16.2 類型推論 253
16.2.1 一個隱式類型的多態(tài)語言 254
16.2.2 類型推論算法 255
16.2.3 遞歸的數據類型 257
16.2.4 Hindley-Milner類型的能力 259
16.3 多態(tài)變量的表示 259
16.3.1 多態(tài)函數的擴展 260
16.3.2 完全的裝箱轉換 261
16.3.3 基于強制的表示分析 262
16.3.4 將類型作為運行時參數傳遞 264
16.4 靜態(tài)重載的解決方法 265
推薦閱讀 266
習題 266
第17章 數據流分析 269
17.1 流分析使用的中間表示 270
17.2 各種數據流分析 271
17.2.1 到達定值 271
17.2.2 可用表達式 273
17.2.3 到達表達式 274
17.2.4 活躍分析 274
17.3 使用數據流分析結果的幾種轉換 274
17.3.1 公共子表達式刪除 274
17.3.2 常數傳播 275
17.3.3 復寫傳播 275
17.3.4 死代碼刪除 275
17.4 加快數據流分析 276
17.4.1 位向量 276
17.4.2 基本塊 276
17.4.3 結點排序 277
17.4.4 使用-定值鏈和定值-使用鏈 277
17.4.5 工作表算法 278
17.4.6 增量式數據流分析 278
17.5 別名分析 281
17.5.1 基于類型的別名分析 282
17.5.2 基于流的別名分析 283
17.5.3 使用可能別名信息 284
17.5.4 嚴格的純函數式語言中的別名分析 285
推薦閱讀 285
習題 285
第18章 循環(huán)優(yōu)化 287
18.1 必經結點 289
18.1.1 尋找必經結點的算法 289
18.1.2 直接必經結點 289
18.1.3 循環(huán) 290
18.1.4 循環(huán)前置結點 291
18.2 循環(huán)不變量計算 292
18.3 歸納變量 293
18.3.1 發(fā)現歸納變量 294
18.3.2 強度削弱 295
18.3.3 刪除 296
18.3.4 重寫比較 296
18.4 數組邊界檢查 297
18.5 循環(huán)展開 300
推薦閱讀 301
習題 301
第19章 靜態(tài)單賦值形式 303
19.1 轉化為SSA形式 305
19.1.1 插入φ函數的標準 306
19.1.2 必經結點邊界 306
19.1.3 插入φ函數 308
19.1.4 變量重命名 309
19.1.5 邊分割 310
19.2 必經結點樹的高效計算 310
19.2.1 深度優(yōu)先生成樹 310
19.2.2 半必經結點 311
19.2.3 Lengauer-Tarjan算法 312
19.3 使用SSA的優(yōu)化算法 315
19.3.1 死代碼刪除 315
19.3.2 簡單的常數傳播 316
19.3.3 條件常數傳播 317
19.3.4 保持必經結點性質 319
19.4 數組、指針和存儲器 320
19.5 控制依賴圖 321
19.6 從SSA形式轉變回來 323
19.7 函數式中間形式 324
推薦閱讀 327
習題 328
第20章 流水和調度 331
20.1 沒有資源約束時的循環(huán)調度 332
20.2 有資源約束的循環(huán)流水 336
20.2.1 模調度 337
20.2.2 尋找最小的啟動間距 338
20.2.3 其他控制流 340
20.2.4 編譯器應該調度指令嗎 340
20.3 分支預測 341
20.3.1 靜態(tài)分支預測 342
20.3.2 編譯器應該預測分支嗎 342
推薦閱讀 343
習題 343
第21章 存儲層次 346
21.1 cache的組織結構 346
21.2 cache塊對齊 349
21.3 預取 350
21.4 循環(huán)交換 354
21.5 分塊 355
21.6 垃圾收集和存儲層次 357
推薦閱讀 358
習題 358
附錄 Tiger語言參考手冊 360
參考文獻 368
索引 376

本目錄推薦

掃描二維碼
Copyright ? 讀書網 rgspecialties.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網安備 42010302001612號