商品描述
本書將帶領讀者使用Python語言動手構建編譯器,通過循序漸進的方法,在設計和實現編譯器的過程中了解基本概念、算法和數據結構等相關知識。本書將每章作為構建編譯器的一個基本“步驟”,逐步為編譯器添加功能。全書涵蓋變量、寄存器、條件、循環、元組、函數、動態類型、通用類型等內容。本書適合作為高等院校編譯原理等課程的教材,也適合相關技術人員參考。
作者簡介
傑裏米·G. 希克(Jeremy G. Siek) 印第安納大學信息、計算與工程學院的計算機科學教授。他的主要研究方向為編程語言設計、類型系統、使用證明助手的機械化定理證明以及編譯器優化。Jeremy曾出版The Boost Graph Library,還設計了C++的受限模板。他發明了漸變類型,這是一種在同一編程語言中整合動態類型和靜態類型的類型系統。2009年,他獲得美國 科學基金會(NSF)教師早期職業發展獎,以資助其“彌合原型與生產之間的差距”項目;2010年和2015年,他獲得蘇格蘭信息學與計算機科學聯盟(SICSA)傑出訪問學者獎學金。他是印第安納大學編程系統中心的成員。
目錄大綱
譯者序
前言
第1章 預備知識
1.1 抽象語法樹
1.2 語法
1.3 模式匹配
1.4 遞歸函數
1.5 解釋器
1.6 編譯器示例:部分求值器
第2章 整數與變量
2.1 LVar語言
2.1.1 通過方法覆蓋來擴展解釋器
2.1.2 LVar的定義性解釋器
2.2 x86Int匯編語言
2.3 規劃x86匯編之旅
2.4 移除覆雜操作數
2.5 選擇指令
2.6 分配變量存儲
2.7 修補指令
2.8 生成起始和收尾代碼
2.9 挑戰:LVar的部分求值器
第3章 語法分析
3.1 詞法分析和正則表達式
3.2 文法和解析樹
3.3 二義性文法
3.4 從解析樹到抽象語法樹
3.5 Earley算法
3.6 LALR(1)算法
3.7 進一步閱讀
第4章 寄存器分配
4.1 寄存器和調用約定
4.2 活躍性分析
4.3 構建幹涉圖
4.4 利用數獨進行圖著色
4.5 修補指令
4.6 生成起始和收尾代碼
4.7 挑戰:傳送偏置
4.8 進一步閱讀
第5章 布爾值和條件表達式
5.1 LIf語言
5.2 LIf程序的類型檢查
5.3 CIf中間語言
5.4 x86If語言
5.5 收縮LIf語言
5.6 移除覆雜操作數
5.7 詳細控制
5.8 選擇指令
5.9 寄存器分配
5.9.1 活躍性分析
5.9.2 構建幹涉圖
5.10 修補指令
5.11 生成起始和收尾代碼
5.12 挑戰:優化塊和移除跳轉
5.12.1 優化塊
5.12.2 移除跳轉
5.13 進一步閱讀
第6章 循環和數據流分析
6.1 LWhile語言
6.2 循環控制流和數據流分析
6.3 移除覆雜操作數
6.4 詳細控制
6.5 寄存器分配
第7章 元組和垃圾回收
7.1 LTup語言
7.2 垃圾回收
7.2.1 雙空間覆制收集器
7.2.2 通過Cheney算法進行圖的覆制
7.2.3 數據表示
7.2.4 垃圾回收器的實現
7.3 顯露分配
7.4 移除覆雜操作數
7.5 詳細控制和CTup語言
7.6 選擇指令和x86Global語言
7.7 寄存器分配
7.8 生成起始和收尾代碼
7.9 挑戰:數組
7.9.1 數據表示
7.9.2 重載解析
7.9.3 邊界檢查
7.9.4 顯露分配
7.9.5 移除覆雜操作數
7.9.6 詳細控制
7.9.7 選擇指令
7.10 進一步閱讀
第8章 函數
8.1 LFun語言
8.2 x86匯編下的函數
8.2.1 調用約定
8.2.2 高效的尾調用
8.3 收縮LFun語言
8.4 揭示函數和LFunRef語言
8.5 限制函數
8.6 移除覆雜操作數
8.7 詳細控制和CFun語言
8.8 選擇指令和語言
8.9 寄存器分配
8.9.1 活躍性分析
8.9.2 構建幹涉圖
8.9.3 分配寄存器
8.10 修補指令
8.11 生成起始和收尾代碼
8.12 翻譯舉例
第9章 詞法作用域函數
9.1 Lλ語言
9.2 賦值和詞法作用域函數
9.3 唯一化變量
9.4 賦值轉換
9.5 閉包轉換
9.6 顯露分配
9.7 詳細控制和CClos
9.8 選擇指令
9.9 挑戰:優化閉包
9.10 進一步閱讀
第10章 動態類型
10.1 LDyn語言
10.2 標記值的表示
10.3 LAny語言
10.4 強制轉換插入:編譯LDyn為LAny
10.5 揭示強制轉換
10.6 賦值轉換
10.7 閉包轉換
10.8 移除覆雜操作數
10.9 詳細控制和CAny
10.10 選擇指令
10.11 LAny語言的寄存器分配
第11章 漸變類型
11.1 類型檢查L?
11.2 解釋LCast
11.3 重載解析
11.4 插入強制轉換
11.5 低層類型轉換
11.6 區分代理
11.7 揭示強制轉換
11.8 閉包轉換
11.9 選擇指令
11.10 進一步閱讀
第12章 泛型
12.1 編譯泛型
12.2 解析實例化
12.3 擦除泛型類型
附錄 x86指令集快速參考
參考文獻