《高等學校規劃教材:編譯原理簡明教程》是2012年1月1日電子工業出版社出版的圖書,作者是楊明。該書適合作為高等學校計算機及相關專業教材,也可作為IT技術人員的參考書。
基本介紹
內容簡介,圖書目錄,
內容簡介
楊明、姜乃松、蔡維玲編著的編譯概述、文法和語言、詞法分析與有限自動機、自頂向下的語法分析、自底向上的語法分析、屬性文法、語義分析與語法制導的翻譯、運行時環境、目標代碼生成、代碼最佳化、並行編譯技術、面向對象語言的語法制導翻譯。《編譯原理簡明教程》先進、實用、簡潔、通俗,可讀性好,還免費提供電子教案和習題解答。
圖書目錄
第1章 編譯概述 1
1.1 翻譯程式 1
1.2 編譯過程和編譯程式的基本結構 2
1.3 編譯程式的分類和生成方法 5
1.3.1 編譯程式的分類 5
1.3.2 編譯程式的生成方法 6
1.4 編譯技術的套用 7
本章小結 7
習題1 7
第2章 文法與語言 8
2.1 符號串與語言 8
2.1.1 字母表 8
2.1.2 符號串 8
2.1.3 符號串的集合——語言 9
2.2 文法和語言的形式化定義 10
2.2.1 文法的形式化定義 10
2.2.2 語言的形式化定義 14
2.2.3 短語、直接短語和句柄 16
2.2.4 規範推導和規範歸約 17
2.3 語法分析樹與文法的二義性 18
2.3.1 語法分析樹 18
2.3.2 文法的二義性 19
2.3.3 二義性的消除 20
2.4 文法的化簡 22
2.5 語言的分類 23
本章小結 25
習題2 26
第3章 詞法分析與有限自動機 28
3.1 詞法分析器的設計 28
3.1.1 詞法分析器的任務 28
3.1.2 詞法分析器的輸出形式 29
3.2 詞法分析器的手工構造 30
3.2.1 確定的有限自動機 31
3.2.2 構造單詞的確定有限自動機 32
3.2.3 編寫一個C語言詞法分析器 34
3.3 有限自動機及其化簡 36
3.3.1 不確定有限自動機 36
3.3.2 不確定有限自動機的化簡 37
3.3.3 確定有限自動機的化簡 40
3.4 正規文法、正規式和有限自動機之間的關係 42
3.4.1 正規式與正規集 42
3.4.2 正規式與正規文法的關係 43
3.4.3 正規文法與有限自動機之間的轉換 45
3.4.4 正規式與有限自動機之間的轉換 47
3.5 詞法分析程式自動生成器——Lex 49
3.5.1 Lex的功能 50
3.5.2 Lex源程式的組成 50
3.5.3 Lex編譯器的實現原理 51
3.5.4 一個生成C語言詞法分析器的Lex程式格式 51
本章小結 53
習題3 53
第4章 自頂向下的語法分析 55
4.1 語法分析器的功能 55
4.2 不確定的自頂向下的分析方法 56
4.3 LL(1)分析方法 57
4.3.1 回溯的判別條件與LL(1)文法 57
4.3.2 左遞歸文法的改造 58
4.3.3 回溯的消除 60
4.4 構造遞歸下降分析程式 61
4.5 非遞歸的預測分析方法 62
4.5.1 預測分析程式工作原理 63
4.5.2 構造預測分析表(或稱LL(1)分析表) 64
4.5.3 預測分析的出錯處理 66
本章小結 68
習題4 68
第5章 自底向上的語法分析 70
5.1 引言 70
5.2 自底向上的語法分析面臨的問題 70
5.3 算符優先分析技術 71
5.3.1 算符優先關係的定義 71
5.3.2 算符優先關係表的生成 74
5.3.3 算符優先分析總控程式 76
5.3.4 優先函式及其生成 78
5.4 LR分析技術 81
5.4.1 LR分析技術概述 81
5.4.2 LR(0)分析法 82
5.4.3 SLR(1)分析技術 89
5.4.4 LR(1)分析技術 90
5.4.5 LALR(1)分析技術 94
5.5 二義性文法的套用 95
5.6 語法分析器自動生成器——YACC 96
5.6.1 基本原理與工作過程 96
5.6.2 C語法分析器的自動生成 102
本章小結 102
習題5 102
第6章 屬性文法 104
6.1 屬性文法 104
6.1.1 屬性文法的定義 104
6.1.2 綜合屬性 106
6.1.3 繼承屬性 106
6.1.4 依賴圖 107
6.1.5 屬性文法的計算順序 108
6.2 S-屬性定義及其自底向上的計算 109
6.3 L-屬性定義及其自頂向下的計算 111
6.4 自底向上計算繼承屬性 115
6.4.1 刪除翻譯方案中嵌入的動作 115
6.4.2 分析棧中的繼承屬性 115
6.4.3 模擬繼承屬性的計算 117
本章小結 119
習題6 119
第7章 語義分析與語法制導的翻譯 121
7.1 語義分析的主要任務 121
7.2 中間語言 121
7.2.1 圖表示 122
7.2.2 抽象語法樹 122
7.2.3 三地址代碼 123
7.2.4 四元式 124
7.2.5 三元式 124
7.2.6 逆波蘭式表示 125
7.3 聲明語句的翻譯 125
7.3.1 C語言變數聲明語句的翻譯 125
7.3.2 C語言函式定義的翻譯 126
7.3.3 C語言數組定義的翻譯 131
7.4 C表達式與簡單賦值語句的翻譯 133
7.5 支持C數組的賦值語句的翻譯 134
7.6 C語言布爾表達式的翻譯 136
7.6.1 作為數值計算的布爾表達式的翻譯 137
7.6.2 作為條件控制用的布爾表達式的翻譯 138
7.7 C語言中if語句的翻譯 140
7.8 C語言中while語句的翻譯 145
7.9 C語言中switch語句的翻譯 147
7.10 C語言中break語句的翻譯 148
7.11 C語言continue語句的翻譯 149
7.12 C語言中標號與goto語句的翻譯 150
7.13 C語言函式調用語句的翻譯 150
本章小結 152
習題7 152
第8章 運行時環境 153
8.1 概述 153
8.2 符號表 154
8.2.1 符號表的作用與結構 154
8.2.2 符號表的管理 154
8.2.3 C語言中的符號表 155
8.3 存儲分配策略 157
8.3.1 靜態存儲分配策略 157
8.3.2 棧式存儲分配策略 157
8.3.3 堆式存儲分配策略 158
8.4 存儲空間的組織 158
8.4.1 運行時記憶體空間的劃分 158
8.4.2 函式與活動記錄 158
*8.5 非局部變數的訪問 159
8.6 C語言的存儲分配 163
8.6.1 C語言的活動記錄結構 163
8.6.2 入口指令的自動生成 165
8.6.3 出口指令的自動生成 166
8.7 垃圾回收機制 166
8.8 運行庫管理 168
8.9 連線程式與裝配程式 168
本章小結 169
習題8 169
第9章 目標代碼生成 171
9.1 概述 171
9.2 一個面向棧的計算機模型 171
9.3 中間代碼生成目標代碼 173
9.3.1 逆波蘭式生成目標代碼 173
9.3.2 四元式生成目標代碼 174
9.4 C語言目標代碼生成 176
9.4.1 目標檔案結構 176
9.4.2 從內部語法樹生成目標代碼 177
9.5 暫存器分配算法 179
本章小結 181
習題9 182
第10章 代碼最佳化 183
10.1 基本概念 183
10.1.1 最佳化的定義 183
10.1.2 最佳化的原則 183
10.1.3 最佳化的分類 183
10.1.4 代碼最佳化器的結構 184
10.2 基本塊的概念及最佳化舉例 185
10.2.1 基本塊的概念 185
10.2.2 流圖 185
10.2.3 最佳化舉例 186
10.3 基本塊內最佳化 189
10.3.1 塊內最佳化技術 189
10.3.2 基本塊的DAG 190
10.4 循環最佳化 195
10.4.1 循環的查找 195
10.4.2 循環最佳化技術 197
本章小結 201
習題10 201
第11章 並行編譯技術 204
11.1 並行處理 204
11.1.1 並行體系結構 204
11.1.2 並行軟體系統 205
11.1.3 並行程式設計 205
11.2 並行編譯系統的功能和結構 206
11.2.1 並行編譯系統的功能 206
11.2.2 並行編譯系統的結構 206
11.3 向量語言編譯技術 207
11.4 共享存儲器並行機的並行編譯技術 207
本章小結 208
習題11 208
第12章 面向對象語言的語法制導翻譯 209
12.1 面向對象語言理論基礎 209
12.2 mini-C++的對象布局模型的設計 210
12.3 mini-C++的函式名字轉換方案的設計 211
12.4 mini-C++的try-catch語句的翻譯 213
12.5 mini-C++的非靜態函式的翻譯 215
12.6 mini-C++的函式重載的翻譯 216
12.7 mini-C++的單一繼承的編譯處理 217
12.8 mini-C++的多重繼承的編譯處理 219
12.9 mini-C++的虛基類的編譯處理 221
12.10 mini-C++的單一繼承下虛函式重寫的翻譯 223
12.11 mini-C++的多重繼承下虛函式重寫的翻譯 224
12.12 mini-C++的運算符重載的翻譯 224
12.13 mini-C++的模板的翻譯 225
本章小結 225
習題12 225
附錄A C語言的YACC源程式 226
參考文獻 232