編譯系統(tǒng)是計算機系統(tǒng)中的系統(tǒng)軟件,是軟件開發(fā)環(huán)境的核心組成部分。本書介紹編譯系統(tǒng)的結構、工作流程及編譯程序各組成部分的設計原理和實現(xiàn)技術。作者遵循CDIO工程教育理念將全書內容分為四篇,第1篇構思(Conceive),包括編譯程序概論、文法和語言;第2篇設計(Design),包括詞法分析、自頂向下語法分析、自底向上語法分析、語義分析與符號表;第3篇實現(xiàn)(Implement),包括語法制導翻譯與中間代碼生成、目標程序運行時的存儲組織、出錯處理、代碼優(yōu)化、目標代碼生成;第4篇運作(Operate),包括寄存器分配、垃圾回收、面向對象語言編譯器和人工智能編譯器。
更多科學出版社服務,請掃碼獲取。
目錄
第1篇 構思(Conceive)
第1章 編譯程序概論 3
1.1 編譯程序的概念 3
1.1.1 程序設計語言 3
1.1.2 基本概念和術語 4
1.1.3 程序設計語言的翻譯 4
1.1.4 高級語言程序的執(zhí)行 5
1.2 編譯過程 6
1.3 編譯程序的結構 8
1.3.1 詞法分析程序 10
1.3.2 語法分析程序 11
1.3.3 語義分析程序 12
1.3.4 中間代碼生成程序 12
1.3.5 代碼優(yōu)化程序 13
1.3.6 目標代碼生成程序 14
1.3.7 信息表管理程序 15
1.3.8 錯誤檢查和處理程序 16
1.3.9 編譯程序的分遍 17
1.4 解釋程序 18
1.5 編譯程序的評價指標與構造技術 19
1.5.1 編譯程序的評價指標 20
1.5.2 編譯程序的構造技術 21
1.6 程序設計語言范型 24
習題 26
第2章 文法和語言 27
2.1 符號和符號串 27
2.2 文法和語言的定義 29
2.3 文法的類型 35
2.4 上下文無關文法及其語法樹 37
2.4.1 程序設計語言的語法結構的描述 37
2.4.2 語法樹 38
2.4.3 文法的二義性 39
2.5 句型的分析 41
2.5.1 規(guī)范推導和規(guī)范歸約 41
2.5.2 短語和句柄 43
2.6 文法描述語言時的限制與擴充 46
2.6.1 文法描述語言時的限制 46
2.6.2 文法描述語言時的擴充 47
習題 48
第2篇 設計(Design)
第3章 詞法分析 53
3.1 詞法分析概述 53
3.2 詞法分析器的結構 53
3.2.1 詞法分析器的工作方式 53
3.2.2 詞法分析器的輸出 54
3.2.3 詞法分析作為一個獨立階段的原因 55
3.3 單詞的描述工具 55
3.3.1 正規(guī)文法 56
3.3.2 正規(guī)式 56
3.3.3 正規(guī)文法和正規(guī)式的等價性 58
3.4 有限自動機 60
3.4.1 確定的有限自動機(DFA) 60
3.4.2 不確定的有限自動機(NFA) 62
3.4.3 NFA轉換為等價的DFA 63
3.4.4 確定有限自動機的化簡 66
3.5 正規(guī)式和有限自動機的等價性 68
3.6 正規(guī)文法和有限自動機的等價性 71
3.7 詞法分析器的自動構造工具 73
習題 75
實踐項目一 76
第4章 自頂向下語法分析 77
4.1 自頂向下語法分析概述 77
4.2 遞歸下降分析法 78
4.3 LL(1)預測分析法 80
4.4 非LL(1)文法到LL(1)文法的等價變換 83
4.4.1 提取左公共因子 83
4.4.2 消除左遞歸 84
4.4.3 消除文法左遞歸的方法 86
4.5 LL的自動生成工具 88
4.5.1 遞歸子程序法 88
4.5.2 預測分析方法 90
案例分析 91
習題 93
實踐項目二 95
第5章 自底向上語法分析 96
5.1 自底向上語法分析概述 96
5.2 算符優(yōu)先分析 97
5.2.1 算符優(yōu)先文法的定義 97
5.2.2 算符優(yōu)先關系表的構造 99
5.2.3 最左素短語 101
5.2.4 優(yōu)先函數 103
5.3 LR分析 104
5.3.1 LR分析器概述 105
5.3.2 LR(0)分析 106
5.3.3 SLR(1)分析 113
5.3.4 LR(1)分析 114
5.3.5 LALR(1)分析 114
5.4 LR的自動生成工具 115
案例分析 115
習題 120
實踐項目三 121
第6章 語義分析與符號表 122
6.1 語義分析概述 122
6.2 符號表的作用 122
6.3 符號表的內容 123
6.4 符號表的組織 128
6.5 符號表的管理 135
習題 137
第3篇 實現(xiàn)(Implement)
第7章 語法制導翻譯與中間代碼生成 141
7.1 語法制導翻譯 141
7.1.1 屬性文法 141
7.1.2 語法翻譯概述 141
7.2 中間代碼表示 143
7.2.1 逆波蘭式 143
7.2.2 三地址代碼 144
7.2.3 四元式表示 145
7.2.4 其他表示 146
7.3 簡單賦值語句的翻譯 146
7.4 布爾表達式的翻譯 147
7.5 控制語句的翻譯 149
習題 151
實踐項目四 153
第8章 目標程序運行時的存儲組織 154
8.1 存儲組織及管理 154
8.2 靜態(tài)存儲分配策略 155
8.3 動態(tài)存儲分配 157
8.3.1 過程與活動記錄 157
8.3.2 簡單的棧式存儲分配的實現(xiàn) 159
8.3.3 嵌套過程語言的棧式實現(xiàn) 159
習題 161
第9章 出錯處理 163
9.1 錯誤分類 163
9.1.1 語法錯誤 163
9.1.2 語義錯誤 163
9.2 編譯程序中參數錯誤的處理 164
9.2.1 校正法 164
9.2.2 局部化法 165
9.2.3 參數FSYS集合內容的補充 168
9.3 一些語義錯誤的處理 169
9.3.1 遏止株連錯誤 169
9.3.2 遏止重復錯誤 169
習題 170
實踐項目五 171
第10章 代碼優(yōu)化 172
10.1 優(yōu)化技術簡介 172
10.1.1 刪除多余運算 172
10.1.2 復寫傳播 173
10.1.3 無用代碼刪除 173
10.1.4 代碼外提 173
10.1.5 強度削弱和基本歸納變量刪除 174
10.2 局部優(yōu)化 175
10.2.1 基本塊 175
10.2.2 基本塊的有向無環(huán)圖表示 176
10.2.3 基于基本塊的優(yōu)化 179
10.3 循環(huán)優(yōu)化 180
10.3.1 流圖 180
10.3.2 循環(huán) 180
10.3.3 循環(huán)不變計算及代碼外提 183
10.3.4 歸納變量相關的優(yōu)化 186
10.4 全局優(yōu)化 188
10.4.1 全局公共子表達式 188
10.4.2 復寫傳播 188
習題 190
實踐項目六 192
第11章 目標代碼生成 193
11.1 目標代碼生成概述 193
11.1.1 代碼生成器的輸入 193
11.1.2 目標代碼的形式 193
11.1.3 指令選擇 194
11.1.4 寄存器分配 194
11.1.5 計算順序的選擇 195
11.2 常用的代碼生成器的開發(fā)方法 195
11.2.1 解釋性代碼生成法 195
11.2.2 模式匹配代碼生成法 196
11.2.3 表驅動代碼生成法 196
習題 197
第4篇 運作(Operate)
第12章 寄存器分配 201
12.1 寄存器分配概述 201
12.2 寄存器分配圖染色法 202
12.3 合并 204
12.4 預著色的結點 206
12.5 圖著色的實現(xiàn) 207
12.6 針對樹的寄存器分配 208
習題 212
第13章 垃圾回收 213
13.1 垃圾收集概述 213
13.2 引用計數 214
13.3 復制式收集 215
13.4 分代收集 217
13.5 增量式收集 218
13.6 編譯器接口 219
習題 221
第14章 面向對象語言編譯器 222
14.1 面向對象語言概述 222
14.2 類與繼承 223
14.3 私有域和私有方法 224
14.4 面向對象語言的翻譯 225
14.4.1 單繼承的編譯方案 225
14.4.2 多繼承的編譯方案 227
14.5 面向對象語言的編譯優(yōu)化 228
習題 230
第15章 人工智能編譯器 231
15.1 人工智能編程語言概述 231
15.1.1 Python 231
15.1.2 R 232
15.1.3 LISP 233
15.1.4 Prolog 233
15.2 Python虛擬機基本原理 233
15.2.1 過程概述 233
15.2.2 關于.pyc文件 234
15.2.3 關于PyCodeObject 234
15.2.4 執(zhí)行字節(jié)碼 235
15.2.5 Python字節(jié)碼 236
15.3 代碼自動生成與抽象語法樹 237
習題 239
參考文獻 240