预购商品
书目分类
特别推荐
本書全面講述了現代編譯器的各個組成部分,包括詞法分析、語法分析、抽象語法、語義檢查、中間代碼表示、指令選擇、數據流分析、寄存器分配以及運行時系統等。全書分成兩部分,第一部分是編譯的基礎知識,適用於第一門編譯原理課程(一個學期);第二部分是高級主題,包括面向對象語言和函數語言、垃圾收集、循環優化、存儲結構優化等,適合於后續課程或研究生教學。書中專門為學生提供了一個用C語言編寫的實習項目,包括前端和后端設計,學生可以在一學期內創建功能完整的編譯器。
第一部分 編譯基本原理 第1章 緒論 1 1.1 模組與介面 1 1.2 工具和軟體 3 1.3 樹語言的資料結構 3 程式設計:直線式程式解譯器 7 推薦閱讀 8 習題 9 第2章 詞法分析 10 2.1 詞法單詞 10 2.2 規則運算式 11 2.3 有限自動機 13 2.4 非確定有限自動機 15 2.5 Lex:詞法分析器的生成器 20 程式設計:詞法分析 22 推薦閱讀 23 習題 23 第3章 語法分析 27 3.1 上下文無關文法 28 3.2 預測分析 32 3.3 LR分析 39 3.4 使用分析器的生成器 48 3.5 錯誤恢復 54 程式設計:語法分析 57 推薦閱讀 58 習題 58 第4章 抽象語法 62 4.1 語義動作 62 4.2 抽象語法分析樹 65 程式設計:抽象語法 71 推薦閱讀 71 習題 72 第5章 語義分析 73 5.1 符號表 73 5.2 Tiger編譯器的綁定 79 5.3 運算式的類型檢查 82 5.4 聲明的類型檢查 84 程式設計:類型檢查 86 習題 87 第6章 活動記錄 89 6.1 棧幀 90 6.2 Tiger編譯器的棧幀 96 程式設計:棧幀 102 推薦閱讀 103 習題 103 第7章 翻譯成中間代碼 106 7.1 中間表示樹 106 7.2 翻譯為樹中間語言 108 7.3 聲明 120 程式設計:翻譯成樹 122 習題 123 第8章 基本塊和軌跡 125 8.1 規範樹 126 8.2 處理條件分支 131 推薦閱讀 134 習題 134 第9章 指令選擇 136 9.1 指令選擇演算法 138 9.2 CISC機器 144 9.3 Tiger編譯器的指令選擇 146 程式設計:指令選擇 152 推薦閱讀 153 習題 154 第10章 活躍分析 155 10.1 資料流程方程的解 156 10.2 Tiger編譯器的活躍分析 162 程式設計:構造流圖 164 程式設計:活躍分析模組 165 習題 165 第11章 寄存器分配 166 11.1 通過簡化進行著色 166 11.2 合併 168 11.3 預著色的結點 171 11.4 圖著色的實現 175 11.5 針對樹的寄存器分配 181 程式設計:圖著色 184 推薦閱讀 185 習題 185 第12章 整合為一體 188 程式設計:過程入口/出口 189 程式設計:創建一個可運行的編譯器 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 程式設計:描述字 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 物件導向程式的優化 219 程式設計:OBJECT-Tiger 220 推薦閱讀 220 習題 221 第15章 函數式程式設計語言 222 15.1 一個簡單的函數式語言 222 15.2 閉包 224 15.3 不變的變數 225 15.4 內聯擴展 229 15.5 閉包變換 233 15.6 高效的尾遞迴 235 15.7 懶惰計算 236 推薦閱讀 243 程式設計:編譯函數式語言 244 習題 244 第16章 多態類型 246 16.1 參數多態性 246 16.2 類型推論 253 16.3 多態變數的表示 259 16.4 靜態重載的解決方法 265 推薦閱讀 266 習題 266 第17章 資料流程分析 269 17.1 流分析使用的中間表示 270 17.2 各種資料流程分析 271 17.3 使用資料流程分析結果的幾種轉換 274 17.4 加快資料流程分析 276 17.5 別名分析 281 推薦閱讀 285 習題 285 第18章 迴圈優化 287 18.1 必經結點 289 18.2 迴圈不變數計算 292 18.3 歸納變數 293 18.4 陣列邊界檢查 297 18.5 迴圈展開 300 推薦閱讀 301 習題 301 第19章 靜態單賦值形式 303 19.1 轉化為SSA形式 305 19.2 必經結點樹的高效計算 310 19.3 使用SSA的優化演算法 315 19.4 陣列、指標和記憶體 320 19.5 控制依賴圖 321 19.6 從SSA形式轉變回來 323 19.7 函數式中間形式 324 推薦閱讀 327 習題 328 第20章 流水和調度 331 20.1 沒有資源約束時的迴圈調度 332 20.2 有資源約束的迴圈流水 336 20.3 分支預測 341 推薦閱讀 343 習題 343 第21章 存儲層次 346 21.1 cache的組織結構 346 21.2 cache塊對齊 349 21.3 預取 350 21.4 迴圈交換 354 21.5 分塊 355 21.6 垃圾收集和存儲層次 357 推薦閱讀 358 習題 358 附錄 Tiger語言參考手冊 360 參考文獻 368 索引 376
安德魯·W.安佩爾,美國普林斯頓大學計算機科學系教授,1998-1999年在貝爾實驗室做研究工作。主要研究方向是計算機安全、編譯器設計、程序設計語言等。馬亞·金斯伯格,美國普林斯頓大學計算機科學系講師。
客服公告
热门活动
订阅电子报