內容簡介
本書系統地介紹了
程式設計語言翻譯的基本原理與技術,內容包括
編譯器構造的所有重要階段:詞法分析、語法分析、語義分析與中間代碼生成、代碼最佳化、運行時的存儲分配以及目標代碼的生成等。本書還介紹了編譯器編寫工具
LEx和
YAcc的工作原理與使用方法,並對語法制導翻譯與屬性計算、類型與類型檢查、數據流分析等編譯器構造和程式分析技術中當前重點關注的原理和方法進行了討論。本書既可以作為工科院校計算機專業或非計算機專業本科生與研究生的教材,也可以作為軟體技術人員和程式設計語言愛好者的參考書。
本書配有電子教案,有需要者可從出版社網站下載,免費提供。
圖書目錄
第1章 引言
1.1 從面向機器的語言到面向人類的語言
1.2 語言之間的翻譯
l.3 編譯器與解釋器
1.4 編譯器的工作原理與基本組成
1.4.1 通用程式設計語言的主要成分
1.4.2 以階段劃分編譯器
1.4.3 編譯器各階段的工作
1.4.4 編譯器的分析/綜合模式
1.4.5 編譯器掃描的遍數
1.5 編譯器的編寫
1.6 本章小結
習題
第2章 詞法分析
2.1 詞法分析中的若干問題
2.1.1 記號、模式與單詞
2.1.2 記號的屬性
2.1.3 詞法分析器的作用與工作方式
2.1.4 輸入緩衝區
.2.2 模式的形式化描述
2.2.1 字元串與語言
2.2.2 正規式與正規集
2.2.3 記號的說明
2.3 記號的識別——有限自動機
2.3.1 不確定的有限自動機(NondeterministicFiniteAutomata,NFA)
2.3.2 確定的有限自動機(DeterministicFiniteAutomata,DFA)
2.3.3 有限自動機的等價
2.4 從正規式到詞法分析器
2.4.1 從正規式到NFA
2.4.2 從NFA到DFA
2.4.3 最小化DFA
2.4.4 DFA的“短路”計算
2.4.5 由DFA構造詞法分析器
2.5 本章小結
習題
第3章 語法分析
3.1 語法分析的若干問題
4.8.4 短路計算的語法制導翻譯
4.8.5 拉鏈與回填
4.9 控制語句
4.9.1 標號與無條件轉移
4.9.2 條件轉移
4.10 過程調用
4.11 類型檢查
4.11.1 類型、類型系統與類型檢查
4.11.2 類型系統
4.11.3 簡單的類型檢查
4.11.4 類型表達式的等價
4.11.5 多態函式的類型檢查
4.11.6 特定多態的類型檢查
4.12 本章小結
習題
第5章 運行環境
5.1 過程的動態特性
5.1.1 過程與活動
5.1.2 控制棧與活動記錄
5.1.3 名字的綁定
5.2 運行時數據空間的組織
5.2.1 運行時記憶體的劃分與數據空間的存儲分配策略
5.2.2 靜態與動態分配簡介
5.3 棧式動態分配
5.3.1 控制棧中的活動記錄
5.3.2 調用序列與返回序列
5.3.3 棧式分配中對非本地名字的訪問
5.3.4 參數傳遞的實現
5.4 本章小結
習題
第6章 代碼生成
6.1 代碼生成的相關問題
6.2 簡單的計算機模型
6.3 簡單的代碼生成器
6.3.1 基本塊、流圖與循環
6.3.2 下次引用信息與活躍信息
6.3.3 簡單的代碼生成
6.4 本章小結
習題
第7章 代碼最佳化
7.1 局部最佳化
7.1.1 基本塊的最佳化
7.1.2 窺孔最佳化
7.1.3 表達式的最佳化代碼生成
7.2 獨立於機器的最佳化
7.2.1 運行實例:快排序
7.2.2 全局公共子表達式
7.2.3 複寫傳播(CopyPropagation)
7.2.4 死代碼消除(Dead-CodeElimination).
7.2.5 代碼外提(CodeMotion)
7.2.6 歸納變數與強度削弱
7.3 數據流分析簡介
7.3.1 數據流抽象
7.3.2 數據流分析模式
7.3.3 基本塊上的數據流模式
7.3.4 到達定值(ReachingDefinitions)
7.3.5 活躍變數(LiveVatribale)
7.3.6 可用表達式(AvailabalExpression)
7.3.7 小結
7.4 數據流分析的數學基礎
7.4.1 半格(Semilattices)
7.4.2 轉換函式(TransferFunctions)
7.4.3 通用框架的疊代算法
7.4.4 數據流解的意義
7.5 本章小結
習題
參考文獻