《編譯原理教程(第四版)(胡元義)》是2016年西安電子科技大學出版社出版的圖書,作者是胡元義。
基本介紹
- 書名:編譯原理教程(第四版)(胡元義)
- 作者:胡元義
- 出版社:西安電子科技大學出版社
- 出版時間:2016年02月
- 定價:23.8 元
- ISBN:978-7-5606-3568-2
內容簡介,目錄,
內容簡介
本書系統地介紹了編譯程式的設計原理及實現技術。在內容的組織上,本書強調知識的實用性,將編譯的基本理論與具體的實現技術有機地結合起來,既注重了理論的完整性,化繁為簡,又將理論融於具體的實例中,化難為易,以達到準確、清楚地闡述相關概念和原理的目的。在具體內容講述中,思路清晰、條理分明,給出的示例豐富並具有實用性與連貫性,使讀者對編譯的各個階段有一個全面、直觀的認識。本書採用的算法全部由C語言描述,各章均附有習題。
本書可作為計算機本科專業的教材,也可作為計算機軟體工程人員的參考資料。
目錄
第一章 緒論 1
1.1 程式設計語言和編譯程式 1
1.2 編譯程式的歷史及發展 2
1.3 編譯過程和編譯程式結構 4
1.4 編譯程式的開發 5
1.5 構造編譯程式所應具備的知識內容 6
習題一 8
第二章 詞法分析 9
2.1 詞法分析器的設計方法 9
2.1.1 單詞符號的分類與輸出形式 9
2.1.2 狀態轉換圖 10
2.2 一個簡單的詞法分析器示例 12
2.2.1 C語言子集的單詞符號表示 12
2.2.2 C語言子集對應的狀態轉換圖 13
2.2.3 狀態轉換圖的實現 13
2.3 正規表達式與有限自動機簡介 16
2.3.1 正規表達式與正規集 16
2.3.2 有限自動機 18
2.4 正規表達式到有限自動機的構造 20
2.4.1 由正規表達式構造等價的非確定有限自動機(NFA) 20
2.4.2 NFA的確定化 21
2.4.3 確定有限自動機(DFA)的化簡 23
2.4.4 正規表達式到有限自動機構造示例 25
2.5 詞法分析器的自動生成 30
習題二 32
第三章 語法分析 35
3.1 文法和語言 35
3.1.1 文法和語言的基本概念 35
3.1.2 形式語言分類 38
3.1.3 正規表達式與上下文無關文法 40
3.2 推導與語法樹 41
3.2.1 推導與短語 41
3.2.2 語法樹與二義性 42
3.3 自頂向下的語法分析 47
3.3.1 遞歸下降分析法 47
3.3.2 LL(1)分析法 55
3.4 自底向上的語法分析 61
3.4.1 自底向上分析原理 61
3.4.2 算符優先分析法 64
3.5 規範歸約的自底向上語法分析方法 73
3.5.1 LR分析器的工作原理 74
3.5.2 LR(0)分析器 79
3.5.3 SLR(1)分析器 86
3.5.4 LR(1)分析器 91
3.5.5 LALR(1)分析器 95
3.5.6 二義文法的套用 97
*3.5.7 LR分析器的套用與拓展 101
習題三 103
第四章 語義分析和中間代碼生成 111
4.1 概述 111
4.1.1 語義分析的概念 111
4.1.2 語法制導翻譯方法 111
4.2 屬性文法 113
4.2.1 文法的屬性 113
4.2.2 屬性文法 113
4.3 幾種常見的中間語言 115
4.3.1 抽象語法樹 115
4.3.2 逆波蘭表示法 116
4.3.3 三地址代碼 118
4.4 表達式及賦值語句的翻譯 120
4.4.1 簡單算術表達式和賦值語句的翻譯 120
4.4.2 布爾表達式的翻譯 122
4.5 控制語句的翻譯 127
4.5.1 條件語句if的翻譯 127
4.5.2 循環語句的翻譯 129
4.5.3 三種基本控制結構的翻譯 131
4.5.4 多分支控制語句switch的翻譯 136
4.5.5 語句標號和轉移語句的翻譯 138
4.6 數組元素的翻譯 139
4.6.1 數組元素的地址計算及中間代碼形式 139
4.6.2 賦值語句中數組元素的翻譯 139
4.6.3 數組元素翻譯示例 141
4.7 過程或函式調用語句的翻譯 144
4.7.1 過程或函式調用的方法 144
4.7.2 過程或函式調用語句的四元式生成 145
4.8 說明語句的翻譯 145
4.8.1 變數說明的翻譯 145
4.8.2 數組說明的翻譯 146
4.9 遞歸下降語法制導翻譯方法簡介 147
習題四 148
第五章 代碼最佳化 152
5.1 局部最佳化 152
5.1.1 基本塊的劃分方法 152
5.1.2 基本塊的DAG方法 153
5.1.3 用DAG進行基本塊的最佳化處理 157
5.1.4 DAG構造算法的進一步討論 158
5.2 循環最佳化 159
5.2.1 程式流圖與循環 159
5.2.2 循環的查找 161
5.2.3 循環最佳化 166
*5.3 全局最佳化概述 173
5.3.1 到達-定值與引用-定值鏈 173
5.3.2 定值-引用鏈(du鏈) 177
5.3.3 複寫傳播 180
*5.4 代碼最佳化示例 183
習題五 187
第六章 目標程式運行時存儲空間的組織 191
6.1 靜態存儲分配 191
6.2 簡單的棧式存儲分配 192
6.2.1 棧式存儲分配與活動記錄 193
6.2.2 過程的執行 195
6.3 嵌套過程語言的棧式實現 197
6.3.1 嵌套層次顯示(DISPLAY)表和活動記錄 197
6.3.2 嵌套過程的執行 199
6.3.3 訪問非局部名的另一種實現方法 200
6.4 堆式動態存儲分配 203
6.4.1 堆式存儲的概念 203
6.4.2 堆式存儲的管理方法 204
*6.5 參數傳遞補遺 205
6.5.1 參數傳遞的方法 206
6.5.2 不同參數傳遞方法比較 207
習題六 208
第七章 目標代碼生成 211
7.1 簡單代碼生成器 211
7.1.1 待用信息與活躍信息 212
7.1.2 代碼生成算法 214
7.1.3 暫存器分配 215
7.1.4 源程式到目標代碼生成示例 217
*7.2 彙編指令到機器代碼翻譯概述 219
習題七 225
第八章 符號表與錯誤處理 228
8.1 符號表 228
8.1.1 符號表的作用 228
8.1.2 符號表的組織 228
8.1.3 分程式結構語言符號表的建立 230
8.1.4 非分程式結構語言符號表的建立 233
8.1.5 常用符號表結構 234
8.1.6 符號表內容 235
8.2 錯誤處理 236
8.2.1 語法錯誤校正 236
8.2.2 語義錯誤校正 242
習題八 243
附錄1 8086/8088指令碼匯總表 245
附錄2 8086/8088指令編碼空間表 250
參考文獻 252