內容簡介
本書全面、深入地探討了編譯器設計方面的重要主題,包括詞法分析、語法分析、語法制導定義和語法制導翻譯、運行時刻環境、目標代碼生成、代碼最佳化技術、並行性檢測以及過程間分析技術,並在相關章節中給出大量的實例。與上一版相比,本書進行了全面修訂,涵蓋了編譯器開發方面最新進展。每章中都提供了大量的實例及參考文獻。
圖書目錄
出版者的話
譯者序
前言
第1章 引論
1.1 語言處理器
1.2 一個編譯器的結構
1.2.1 詞法分析
1.2.2 語法分析
1.2.3 語義分析
1.2.4 中間代碼生成
1.2.5 代碼最佳化
1.2.6 代碼生成
1.2.7 符號表管理
1.2.8 將多個步驟組合成趟
1.2.9 編譯器構造工具
1.3 程式設計語言的發展歷程
1.3.1 走向高級程式設計語言
1.3.2 對編譯器的影響
1.3.3 1.3節的練習
1.4 構建一個編譯器的相關科學
. 1.4.1 編譯器設計和實現中的建模
1.4.2 代碼最佳化的科學
1.5 編譯技術的套用
1.5.1 高級程式設計語言的實現
1.5.2 針對計算機體系結構的最佳化
1.5.3 新計算機體系結構的設計
1.5.4 程式翻譯
1.5.5 軟體生產率工具
1.6 程式設計語言基礎
1.6.1 靜態和動態的區別
1.6.2 環境與狀態
1.6.3 靜態作用域和塊結構
1.6.4 顯式訪問控制
1.6.5 動態作用域
1.6.6 參數傳遞機制
1.6.7 別名
1.6.8 1.6節的練習
1.7 第1章的總結
1.8 第1章的參考書目
第2章 一個簡單的語法制導翻譯器
2.1 引言
2.2 語法定義
2.2.1 文法定義
2.2.2 推導
2.2.3 語法分析樹
2.2.4 二義性
2.2.5 運算符的結合性
2.2.6 運算符的優先權
2.2.7 2.2節的練習
2.3 語法制導翻譯
2.3.1 後綴表示
2.3.2 綜合屬性
2.3.3 簡單語法制導定義
2.3.4 樹的遍歷
2.3.5 翻譯方案
2.3.6 2.3節的練習
2.4 語法分析
2.4.1 自頂向下分析方法
2.4.2 預測分析法
2.4.3 何時使用產生式
2.4.4 設計一個預測語法分析器
2.4.5 左遞歸
2.4.6 2.4節的練習
2.5 簡單表達式的翻譯器
2.5.1抽象語法和具體語法
2.5.2調整翻譯方案
2.5.3非終結符號的過程
2.5.4 翻譯器的簡化
2.5.5 完整的程式
2.6 詞法分析
2.6.1 剔除空白和注釋
2.6.2 預讀
2.6.3 常量
2.6.4 識別關鍵字和標識符
2.6.5 詞法分析器
2.6.6 2.6節的練習
2.7 符號表
2.7.1 為每個作用域設定一個符號表
2.7.2 符號表的使用
2.8 中間代碼生成
2.8.1 兩種中間表示形式
2.8.2 語法樹的構造
2.8.4 三地址碼
2.8.5 2.8節的練習
2.9 第2章的總結
第3章 詞法分析
3.1 詞法分析器的作用
3.1.1 詞法分析及解析
3.1.2 詞法單元、模式、詞素
3.1.3 詞法單元的屬性
3.1.4 詞法錯誤
3.1.5 3.1節的練習
3.2 輸入緩衝
3.2.1 緩衝區對
3.2.2 哨兵標記
3.3 詞法單元的規約
3.3.1 串和語言
3.3.2 語言上的運算
3.3.3 正則表達式
3.3.4 正則定義
3.3.5 正則表達式的擴展
3.3.6 3.3節的練習
3.4 詞法單元的識別
3.4.1 狀態轉換圖
3.4.2 保留字和標識符的識別
3.4.3 完成我們的連續性例子
3.4.4 基於狀態轉換圖的詞法分析器的體系結構
3.4.5 3.4節的練習
3.5 詞法分析器生成工具lex
3.5.1 lex的使用
3.5.2 lex程式的結構
3.5.3 lex中的衝突解決
3.5.4 向前看運算符
3.5.5 3.5節練習
3.6 有窮自動機
3.6.1 不確定的有窮自動機
3.6.2 轉換表
3.6.3 nfa接受輸入字元串
3.6.4 確定的有窮自動機
3.6.5 3.6節的練習
3.7 從正則表達式到自動機
3.7.1 從nfa到dfa的轉換
3.7.2 nfa的模擬
3.7.3 nfa模擬效率
3.7.4 從正則表達式構造nfa
3.7.5 字元串處理算法的效率
3.7.6 3.7節的練習
3.8 詞法分析器生成工具的設計
3.8.1 被生成的詞法分析器的結構
3.8.2 基於nfa的模式匹配
3.8.3 詞法分析器使用的dfa
3.8.4 實現向前看運算符
3.8.5 3.8的練習
3.9 基於dfa的模式匹配器的最佳化
3.9.1 nfa的重要狀態
3.9.2 根據抽象語法樹計算得到的函式
3.9.3 計算nullable、firstpos及lastpos
3.9.4 計算followpos
3.9.5 根據正則表達式構建dfa
3.9.6 最小化一個dfa的狀態數
3.9.7 詞法分析器的狀態最小化
3.9.8 在dfa模擬中用時間換取空間
3.9.9 3.9節的練習
3.9.10 第3章的總結
3.11 第3章參考文獻
第4章 語法分析
4.1 引論
4.1.1 語法分析器的角色
4.1.2 代表性的文法
4.1.3 語法錯誤的處理
4.1.4 錯誤恢復策略
4.2 上下文無關文法
4.2.1 上下文無關文法的正式定義
4.2.2 符號表示的慣例
4.2.3 推導
4.2.4 語法分析樹和推導
4.2.5 二義性
4.2.6 驗證文法生成的語言
4.2.7上下文無關文法和正則表達式
4.2.8 4.2節的練習
4.3 設計文法
4.3.1 詞法分析和語法分析
4.3.2 消除二義性
4.3.3 左遞歸的消除
4.3.4 提取左公因子
4.3.5 非上下文無關的語言構造
4.3.6 4.3節的練習
4.4 自頂向下的語法分析
4.4.1 遞歸下降的語法分析
4.4.2 first和follow
4.4.3 ll(1)文法
4.4.4 非遞歸的預測分析
4.4.5 預測分析中的錯誤恢復
4.4.6 4.4節的練習
4.5 自底向上的語法分析
4.5.1 歸約
4.5.2 句柄剪枝
4.5.3 移入-歸約語法分析技術
4.5.4 移入-歸約語法分析中的衝突
4.5.5 4.5節的練習
4.6 lr語法分析技術介紹:簡單lr技術
4.6.1 為什麼使用lr語法分析器?
4.6.2 項和lr(0)自動機
4.6.3 lr-語法分析算法
4.6.4 構造slr-分析表
4.6.5 可行前綴
4.6.6 4.6節的練習
4.7 更強大的lr語法分析器
4.7.1 規範lr(1)項
4.7.2 構造lr(1)項集
4.7.3 規範lr(1)分析表
4.7.4 構造lalr語法分析表
4.7.5 lalr語法分析表的高效構造方法
4.7.6 lr語法分析表的壓縮
4.7.7 4.7節的練習
4.8 使用二義性文法
4.8.1 用優先權和結合性解決衝突
4.8.2 “懸空-else”二義性
4.8.3 lr語法分析中的錯誤恢復
4.8.4 4.8節的練習
4.9 語法分析器的生成工具
4.9.1 語法分析器的生成工具yacc
4.9.2 使用yacc處理二義性文法
4.9.3 用lex創建yacc的詞法分析器
4.9.4 yacc中的錯誤恢復
4.9.5 4.9節的練習
4.10:第4章的小結
4.11 第4章的參考文獻
第5章 語法制導的翻譯
5.1 語法制導定義
5.1.1 繼承屬性和綜合屬性
5.1.2 在一棵語法分析樹的結點上對一個sdd求值
5.1.3 5.1節的練習
5.2 sdd的求值順序
5.2.1 依賴圖
5.2.2 屬性求值的順序
5.2.3 s-屬性定義
5.2.4 l-屬性定義
5.2.5 具有受控副作用的語義規則
5.2.6 5.2節的練習
5.3 語法制導翻譯的套用
5.3.1 抽象語法樹的構造
5.3.2 類型的結構
5.3.3 5.3節的練習
5.4 語法制導的翻譯方案
5.4.1 後綴翻譯方案
5.4.2 後綴sdt的語法分析棧實現
5.4.3 產生式內部帶有語義動作的sdt
5.4.4 從sdt中消除左遞歸
5.4.5 l-屬性定義的sdt
5.4.6 5.4節的練習
5.5 實現l-屬性的sdd
5.5.1 在遞歸下降語法分析過程中進行翻譯
5.5.2 邊掃描邊生成代碼
5.5.3 l-屬性的sdd和ll語法分析
5.5.4 l-屬性的sdd的自底向上語法分析
5.5.5 5.5節的練習
5.6 第5章的總結
5.7 第5章的參考文獻
第6章 中間代碼生成
第7章 運行時刻環境
第7章 總結
第8章 代碼生成
第9章 機器無關最佳化
第10章 指令級並行
第11章 並行性和局部性的最佳化
第12章 過程間分析