編譯原理
王克朝等
相關主題
商品描述
本書根據高等學校本科課程“編譯原理”的教學基本要求進行編寫。本書系統介紹了編譯程序在設計和實現方面的基本原理、基本方法和實現技術。主要內容包括:形式語言與文法、正規式與有窮自動機、詞法分析、自頂向下語法分析、自底向上語法分析、語義分析與中間代碼生成、代碼優化、目標代碼生成、符號表以及運行時的存儲組織與管理等相關知識。本書系統性強,概念、條理清晰,內容通俗易懂。本書共 11章,每一章均包括學習導讀、基本內容、本章小結、核心概念、單元自測和習題等。
目錄大綱
目錄
前言
第1章 緒論 1
1.1 程序設計語言與編譯程序 1
1.1.1 程序設計語言的翻譯程序 1
1.1.2 編譯程序和解釋程序 1
1.1.3 學習編譯程序帶來的益處 3
1.2 編譯的基本知識 3
1.2.1 編譯過程 3
1.2.2 編譯程序的基本結構 6
1.2.3 遍 6
1.2.4 編譯程序的前端和後端 7
1.3 編譯程序的設計和實現方式 8
1.4 編譯程序的配套工具 9
1.4.1 預處理器 9
1.4.2 匯編程序 9
1.4.3 連接裝配程序 10
1.5 編譯程序的發展及編譯技術的應用 11
1.5.1 編譯程序的發展 11
1.5.2 編譯技術的應用 11
1.6 本章小結 12
單元自測題 1 12
習題1 14
第2章 形式語言與文法 15
2.1 程序設計語言的描述 15
2.2 形式語言的基本概念 16
2.2.1 字母表和符號串 16
2.2.2 符號串的運算 17
2.3 文法和語言的形式定義 18
2.3.1 文法的形式定義 18
2.3.2 語言的形式定義 21
2.3.3 規範推導和規範歸約 22
2.3.4 遞歸規則與文法的遞歸性 23
2.4 短語、直接短語和句柄 25
2.5 語法樹及文法的二義性 26
2.5.1 語法樹 26
2.5.2 文法的二義性 28
2.5.3 文法二義性的消除 29
2.6 文法的實用限制和等價變換 31
2.6.1 文法的實用限制 31
2.6.2 文法的等價變換 32
2.7 文法和語言的分類 33
2.8 本章小結 35
單元自測題2 36
習題2 39
第3章 正規式與有窮自動機 41
3.1 正規式與正規集 41
3.2 正規式與正規文法 42
3.3 有窮自動機 45
3.3.1 確定的有窮自動機 45
3.3.2 非確定的有窮自動機 47
3.3.3 DFA與 NFA的等價性 48
3.3.4 NFA確定化為 DFA 49
3.3.5 DFA化簡 51
3.4 正規式與有窮自動機 54
3.4.1 由正規式 R構造 NFA 54
3.4.2 有窮自動機到正規式的轉換方法 56
3.5 正規文法與有窮自動機 57
3.5.1 右線性文法到有窮自動機的轉換方法 57
3.5.2 左線性文法到有窮自動機的轉換方法 58
3.5.3 有窮自動機到正規文法的轉換方法 59
3.6 本章小結 60
單元自測題 3 60
習題3 62
第4章詞法分析 64
4.1 詞法分析程序的功能 64
4.2 單詞符號及輸出單詞的形式 64
4.2.1 語言的單詞符號 64
4.2.2 詞法分析程序輸出單詞的形式 65
4.3 詞法分析程序的構造 66
4.4 詞法分析程序的自動生成工具 LEX 73
4.4.1 LEX介紹 73
4.4.2 LEX源程序的結構 74
4.4.3 LEX的實例 77
4.5本章小結 78
單元自測題4 79
習題4 80
第5章 自頂向下語法分析 81
5.1 語法分析的作用和分類 81
5.2 非確定的自頂向下分析法的思想 82
5.3 文法的左遞歸性和回溯的消除 83
5.3.1 左遞歸性的消除 83
5.3.2 確定的自頂向下分析的定義 84
5.3.3 回溯的消除 85
5.4 遞歸下降分析法 89
5.5 預測分析法 90
5.6 本章小結 94
單元自測題 5 94
習題5 96
第6章自底向上語法分析 98
6.1 自底向上分析法的原理 98
6.2 LR分析法 99
6.2.1 LR語法分析程序的工作原理和過程 100
6.2.2 LR(0)分析法 103
6.2.3 SLR(1)分析法 107
6.2.4 LR(1)分析法 113
6.2.5 LALR(1)分析法 116
6.2.6 LR分析對二義性文法的應用 120
6.2.7 LR語法分析中的錯誤恢復技術 121
6.2.8 LR分析法的應用與拓展 124
6.3 語法分析程序自動生成工具簡介 125
6.4 本章小結 125
單元自測題6 126
習題6 128
第7章 語義分析與中間代碼生成 130
7.1 語義分析的基本知識 130
7.1.1 語義分析的概念 130
7.1.2 語義分析的任務 131
7.1.3 語義分析的錯誤處理 131
7.2 語法制導翻譯 132
7.2.1 語法制導 132
7.2.2 翻譯方案 133
7.2.3 基於語法制導的翻譯 133
7.3 屬性文法 135
7.3.1 屬性文法的基本概念 135
7.3.2 屬性文法的處理方法 138
7.4 幾種常見的中間語言 139
7.4.1 抽象語法樹 139
7.4.2 逆波蘭式 140
7.4.3 三元式、間接三元式和樹形表示 141
7.4.4 四元式和三地址代碼 143
7.5 遞歸下降語法制導翻譯 144
7.6 自底向上語法制導翻譯 145
7.6.1 簡單算術表達式和賦值語句的翻譯 145
7.6.2 布爾表達式的翻譯 147
7.6.3 控制語句的翻譯 148
7.6.4 循環語句的翻譯 149
7.6.5 簡單說明語句的翻譯 150
7.6.6 含數組元素的賦值語句的翻譯 150
7.6.7 過程和函數調用語句的翻譯 152
7.7 本章小結 152
單元自測題7 153
習題7 156
第8章代碼優化 158
8.1 代碼優化的含義、原則和分類 158
8.2 局部優化 159
8.2.1 基本塊的劃分方法 159
8.2.2 基本塊的優化技術 161
8.2.3 基本塊優化技術的實現 163
8.3 循環優化 168
8.3.1 循環的基本概念 169
8.3.2 循環的優化技術 171
8.4 本章小結 175
單元自測題8 175
習題8 176
第9章 目標代碼生成 178
9.1 目標代碼生成的作用、形式和過程 178
9.2 簡單代碼生成器實例 180
9.3 代碼生成器的自動生成技術 183
9.4 本章小結 183
單元自測題 9 183
習題9 184
第10章 符號表 185
10.1 符號表的組織和內容 185
10.2 符號表的結構與存放 187
10.2.1 線性符號表 187
10.2.2 有序符號表 188
10.2.3 散列符號表 189
10.3 符號表的管理 190
10.3.1 符號表的建立 190
10.3.2 符號表的查填 191
10.4 本章小結 192
單元自測題10 192
習題10 193
第11章 運行時的存儲組織與管理 194
11.1 運行時存儲組織的作用、任務和存儲空間的佈局 194
11.1.1 運行時存儲組織的作用與任務 194
11.1.2 程序運行時存儲空間的佈局 195
11.2 靜態存儲分配 196
11.3 棧式存儲分配 197
11.4 堆式存儲分配 197
11.5 活動記錄 199
11.5.1 過程活動記錄 199
11.5.2 嵌套過程定義中非局部量的訪問 201
11.6 本章小結 206
單元自測題 11 206
習題11 207
參考文獻208
前言
第1章 緒論 1
1.1 程序設計語言與編譯程序 1
1.1.1 程序設計語言的翻譯程序 1
1.1.2 編譯程序和解釋程序 1
1.1.3 學習編譯程序帶來的益處 3
1.2 編譯的基本知識 3
1.2.1 編譯過程 3
1.2.2 編譯程序的基本結構 6
1.2.3 遍 6
1.2.4 編譯程序的前端和後端 7
1.3 編譯程序的設計和實現方式 8
1.4 編譯程序的配套工具 9
1.4.1 預處理器 9
1.4.2 匯編程序 9
1.4.3 連接裝配程序 10
1.5 編譯程序的發展及編譯技術的應用 11
1.5.1 編譯程序的發展 11
1.5.2 編譯技術的應用 11
1.6 本章小結 12
單元自測題 1 12
習題1 14
第2章 形式語言與文法 15
2.1 程序設計語言的描述 15
2.2 形式語言的基本概念 16
2.2.1 字母表和符號串 16
2.2.2 符號串的運算 17
2.3 文法和語言的形式定義 18
2.3.1 文法的形式定義 18
2.3.2 語言的形式定義 21
2.3.3 規範推導和規範歸約 22
2.3.4 遞歸規則與文法的遞歸性 23
2.4 短語、直接短語和句柄 25
2.5 語法樹及文法的二義性 26
2.5.1 語法樹 26
2.5.2 文法的二義性 28
2.5.3 文法二義性的消除 29
2.6 文法的實用限制和等價變換 31
2.6.1 文法的實用限制 31
2.6.2 文法的等價變換 32
2.7 文法和語言的分類 33
2.8 本章小結 35
單元自測題2 36
習題2 39
第3章 正規式與有窮自動機 41
3.1 正規式與正規集 41
3.2 正規式與正規文法 42
3.3 有窮自動機 45
3.3.1 確定的有窮自動機 45
3.3.2 非確定的有窮自動機 47
3.3.3 DFA與 NFA的等價性 48
3.3.4 NFA確定化為 DFA 49
3.3.5 DFA化簡 51
3.4 正規式與有窮自動機 54
3.4.1 由正規式 R構造 NFA 54
3.4.2 有窮自動機到正規式的轉換方法 56
3.5 正規文法與有窮自動機 57
3.5.1 右線性文法到有窮自動機的轉換方法 57
3.5.2 左線性文法到有窮自動機的轉換方法 58
3.5.3 有窮自動機到正規文法的轉換方法 59
3.6 本章小結 60
單元自測題 3 60
習題3 62
第4章詞法分析 64
4.1 詞法分析程序的功能 64
4.2 單詞符號及輸出單詞的形式 64
4.2.1 語言的單詞符號 64
4.2.2 詞法分析程序輸出單詞的形式 65
4.3 詞法分析程序的構造 66
4.4 詞法分析程序的自動生成工具 LEX 73
4.4.1 LEX介紹 73
4.4.2 LEX源程序的結構 74
4.4.3 LEX的實例 77
4.5本章小結 78
單元自測題4 79
習題4 80
第5章 自頂向下語法分析 81
5.1 語法分析的作用和分類 81
5.2 非確定的自頂向下分析法的思想 82
5.3 文法的左遞歸性和回溯的消除 83
5.3.1 左遞歸性的消除 83
5.3.2 確定的自頂向下分析的定義 84
5.3.3 回溯的消除 85
5.4 遞歸下降分析法 89
5.5 預測分析法 90
5.6 本章小結 94
單元自測題 5 94
習題5 96
第6章自底向上語法分析 98
6.1 自底向上分析法的原理 98
6.2 LR分析法 99
6.2.1 LR語法分析程序的工作原理和過程 100
6.2.2 LR(0)分析法 103
6.2.3 SLR(1)分析法 107
6.2.4 LR(1)分析法 113
6.2.5 LALR(1)分析法 116
6.2.6 LR分析對二義性文法的應用 120
6.2.7 LR語法分析中的錯誤恢復技術 121
6.2.8 LR分析法的應用與拓展 124
6.3 語法分析程序自動生成工具簡介 125
6.4 本章小結 125
單元自測題6 126
習題6 128
第7章 語義分析與中間代碼生成 130
7.1 語義分析的基本知識 130
7.1.1 語義分析的概念 130
7.1.2 語義分析的任務 131
7.1.3 語義分析的錯誤處理 131
7.2 語法制導翻譯 132
7.2.1 語法制導 132
7.2.2 翻譯方案 133
7.2.3 基於語法制導的翻譯 133
7.3 屬性文法 135
7.3.1 屬性文法的基本概念 135
7.3.2 屬性文法的處理方法 138
7.4 幾種常見的中間語言 139
7.4.1 抽象語法樹 139
7.4.2 逆波蘭式 140
7.4.3 三元式、間接三元式和樹形表示 141
7.4.4 四元式和三地址代碼 143
7.5 遞歸下降語法制導翻譯 144
7.6 自底向上語法制導翻譯 145
7.6.1 簡單算術表達式和賦值語句的翻譯 145
7.6.2 布爾表達式的翻譯 147
7.6.3 控制語句的翻譯 148
7.6.4 循環語句的翻譯 149
7.6.5 簡單說明語句的翻譯 150
7.6.6 含數組元素的賦值語句的翻譯 150
7.6.7 過程和函數調用語句的翻譯 152
7.7 本章小結 152
單元自測題7 153
習題7 156
第8章代碼優化 158
8.1 代碼優化的含義、原則和分類 158
8.2 局部優化 159
8.2.1 基本塊的劃分方法 159
8.2.2 基本塊的優化技術 161
8.2.3 基本塊優化技術的實現 163
8.3 循環優化 168
8.3.1 循環的基本概念 169
8.3.2 循環的優化技術 171
8.4 本章小結 175
單元自測題8 175
習題8 176
第9章 目標代碼生成 178
9.1 目標代碼生成的作用、形式和過程 178
9.2 簡單代碼生成器實例 180
9.3 代碼生成器的自動生成技術 183
9.4 本章小結 183
單元自測題 9 183
習題9 184
第10章 符號表 185
10.1 符號表的組織和內容 185
10.2 符號表的結構與存放 187
10.2.1 線性符號表 187
10.2.2 有序符號表 188
10.2.3 散列符號表 189
10.3 符號表的管理 190
10.3.1 符號表的建立 190
10.3.2 符號表的查填 191
10.4 本章小結 192
單元自測題10 192
習題10 193
第11章 運行時的存儲組織與管理 194
11.1 運行時存儲組織的作用、任務和存儲空間的佈局 194
11.1.1 運行時存儲組織的作用與任務 194
11.1.2 程序運行時存儲空間的佈局 195
11.2 靜態存儲分配 196
11.3 棧式存儲分配 197
11.4 堆式存儲分配 197
11.5 活動記錄 199
11.5.1 過程活動記錄 199
11.5.2 嵌套過程定義中非局部量的訪問 201
11.6 本章小結 206
單元自測題 11 206
習題11 207
參考文獻208