《編譯器構造(Java語言版)》是2014年清華大學出版社出版的圖書,作者是Anthony J. Dos Reis 。
基本介紹
- 中文名:編譯器構造(Java語言版)
- 作者:Anthony J. Dos Reis
- 出版時間:2014年3月14日
- 出版社:清華大學出版社
- ISBN:9787302340553
- 定價:89 元
- 開本:16 開
- 裝幀:平裝
圖書簡介,圖書目錄,
圖書簡介
編譯器是計算機系統最核心最基礎的支撐軟體之一。編譯器設計原理與技術相關的知識體系,可以體現從電腦程式設計語言到計算機體系結構相對獨立的整機概念,又涉及到形式語言與自動機、數據結構與算法等計算機學科的基礎理論,還關係到獨特的軟體設計方法,不愧為聯繫計算機科學理論和計算機系統的典範。正如前輩Alfred V. Aho 和Jeffrey D.Ullman在他們的著作中所提到的,在每一個計算機學者的職業生涯中,都會反覆用到這些原理和技術。正因為如此,在大多數高等院校的計算機科學與技術專業,編譯原理與技術都作為必修的核心專業基礎課程之一。
圖書目錄
1.1 概述 1
1.2 語言的基本概念 1
1.3 編譯器的基本概念 2
1.4 集合論中的基本概念 4
1.5 空串 6
1.6 連線 6
1.7 指數記法 6
1.8 星運算符(也稱為0次或多次運算符) 7
1.9 串集合的連線 8
1.10 加運算符(也稱為1次或多次運算符) 9
1.11 問號運算符(也稱為0次或1次運算符) 10
1.12 包含單獨一個串的集合的簡便記法 10
1.13 運算符優先權 11
1.14 正規表達式 11
1.15 正則表達式的局限性 13
問題 ... 14
第2章 上下文無關文法(一) 16
2.1 概述 16
2.2 什麼是上下文無關文法 17
2.3 基於上下文無關文法的推導 18
2.4 由上下文無關文法定義的語言 19
2.5 上下文無關文法的不同表示方法 21
2.6 一些簡單文法 22
2.7 基於上下文無關文法的語言生成技術 25
2.8 正規文法和右線性文法 30
2.9 基於正規文法的計數 32
2.10 表的文法 33
2.11 一個不是上下文無關的重要語言 38
問題 ... 39
第3章 上下文無關文法(二) 42
3.1 概述 42
3.2 語法分析樹 42
3.3 最左和最右推導 43
3.4 替換 45
3.5 二義文法 46
3.6 確定可致空的非終結符 51
3.7 消除 產生式 52
3.8 消除unit產生式 55
3.9 消除無用非終結符 57
3.10 遞歸轉換 62
3.11 增加空串到語言 67
問題 ... 68
第4章 上下文無關文法(三) 73
4.1 概述 73
4.2 算術表達式文法 73
4.3 文法中結合性和優先權的描述 78
4.4 Backus-Naur範式 80
4.5 語法圖 82
4.6 抽象語法樹和三地址碼 84
4.7 非收縮文法 85
4.8 基本非收縮文法 85
4.9 上下文無關文法到基本非收縮文法的轉換 86
4.10 上下文無關語言的pumping特性 88
問題...... 92
第5章 Chomsky層次(選講) 94
5.1 概述 94
5.2 上下文有關產生式 95
5.3 上下文有關文法 96
5.4 非受限文法 98
問題..... 98
第6章 自上而下語法分析 100
6.1 概述 100
6.2 自上而下構造語法分析樹 100
6.3 失敗的語法分析 102
6.4 不適合自上而下語法分析的文法 102
6.5 確定的語法分析器 103
6.6 藉助棧的語法分析器 104
6.7 用表來表示棧式語法分析器 109
6.8 處理不以終結符領頭的產生式 109
6.9 用Java寫一個棧式語法分析器 110
問題..... 117
第7章 LL(1)文法 120
7.1 概述 120
7.2 產生式右端的FIRST集合 120
7.3 確定操作序列 122
7.4 確定 產生式的選擇集合 124
7.5 後跟-左端-後跟-最右規則 127
7.6 右端可致空的產生式的選擇集合 129
7.7 包含輸入結束符的選擇集合 130
7.8 針對含lambda產生式文法的棧式語法分析器 133
7.9 將非LL(1)文法轉換為LL(1)文法 134
7.10 用二義文法進行分析 141
7.11 計算FIRST和FOLLOW集合 143
問題..... 145
第8章 表驅動的棧式語法分析器(選講) 151
8.1 概述 151
8.2 統一棧式語法分析器的操作 152
8.3 實現表驅動的棧式語法分析器 154
8.4 表驅動棧式語法分析器的改進 159
8.5 不確定的語法分析器--偏向理論的內容(選講) 160
問題..... 162
第9章 遞歸-下降語法分析 164
9.1 概述 164
9.2 一個簡單的遞歸-下降語法分析器 164
9.3 處理lambda產生式 171
9.4 一個公共錯誤 175
9.5 產生式的Java代碼 176
9.6 遞歸-下降語法分析器中提取左公因子 177
9.7 消除尾遞歸 182
9.8 翻譯星號、加號和問號算符 185
9.9 反向動作 187
問題..... 189
第10章 遞歸-下降翻譯 192
10.1 概述 192
10.2 一個簡單的翻譯文法 192
10.3 轉換翻譯文法到Java代碼 193
10.4 翻譯文法的描述 195
10.5 在語法分析過程中傳遞信息 207
10.6 L-屬性文法 213
10.7 一個新的單詞符號管理器 214
10.8 解決單詞符號向前一個字元看問題 217
10.9 新單詞符號管理器的代碼 217
10.10 前綴表達式編譯器的翻譯文法 229
10.11 趣用遞歸(選講) 233
問題..... 236
第11章 彙編語言 239
11.1 概述 239
11.2 J1計算機的結構 239
11.3 機器語言指令 240
11.4 彙編語言指令 242
11.5 壓入字元 242
11.6 aout指令 243
11.7 使用標號 243
11.8 使用彙編器 245
11.9 stav指令 248
11.10 編譯賦值語句 249
11.11 編譯print和println 252
11.12 輸出字元串 253
11.13 輸入十進制數 256
11.14 入口指導語句 257
11.15 更多的彙編語言內容 257
問題..... 257
第12章 一個簡單的編譯器S1 261
12.1 概述 261
12.2 源語言 261
12.3 源語言的文法 262
12.4 目標語言 263
12.5 符號表 264
12.6 代碼生成器 264
12.7 token類 265
12.8 寫出翻譯文法 265
12.9 實現S1編譯器 272
12.10 使用S1 287
12.11 關於擴展S1編譯器的忠告 290
?12.11.1 更新單詞符號管理器 290
?12.11.2 先調試單詞符號管理器 291
?12.11.3 選擇集合 291
?12.11.4 使用必要的break語句 291
?12.11.5 使用必要的Consume方法調用 291
?12.11.6 正確地解釋翻譯文法 292
12.12 對於S2的描述 292
問題..... 296
第13章 JavaCC(選講) 302
13.1 概述 302
13.2 JavaCC中擴展的正規表達式 303
13.3 JavaCC輸入檔案 308
13.4 正規表達式動作描述 315
13.5 S1j的JavaCC輸入檔案 318
13.6 JavaCC產生的檔案 326
13.7 使用星號和加號操作 330
13.8 選擇點和向前看 333
13.9 JavaCC的選擇算法 338
13.10 語法和語義的向前看描述(選講) 342
13.11 用JavaCC僅生成單詞符號管理器 344
13.12 使用單詞符號鏈 346
13.13 抑制警告信息 349
問題..... 350
第14章 在S2基礎上構造 354
14.1 概述 354
14.2 擴展println和print 354
14.3 級聯賦值語句 359
14.4 一元加和減 362
14.5 readint語句 365
14.6 從命令行控制單詞符號蹤跡的生成 365
14.7 S3的規範 366
問題..... 366
第15章 編譯控制結構 370
15.1 概述 370
15.2 while語句 370
15.3 if語句 374
15.4 do-while語句 377
15.5 數字常量的範圍檢查 378
15.6 處理字元串中的反斜線-引號 380
15.7 用JavaCC處理反斜線(選講) 381
15.8 JavaCC中的全局塊(選講) 386
15.9 處理跨行字元串 388
15.10 用JavaCC處理跨行字元串(選講) 389
15.11 JavaCC中的SPECIAL_TOKEN塊(選講) 394
15.12 錯誤恢復 396
15.13 JavaCC中的錯誤恢復(選講) 400
15.14 S4的規範 401
問題..... 402
第16章 編譯函式形式的程式 405
16.1 概述 405
16.2 分別彙編和連線 405
16.3 調用函式和從函式返回 408
16.4 S5的源語言 412
16.5 S5的符號表 413
16.6 S5的代碼生成器 415
16.7 S5的翻譯文法 416
16.8 與庫連線 427
16.9 S5規範 428
16.10 擴展S5(選講) 428
問題..... 430
第17章 有限自動機 433
17.1 概述 433
17.2 確定有限自動機 433
17.3 轉換DFA到正規表達式 435
17.4 DFA的Java代碼 438
17.5 非確定有限自動機 441
17.6 使用NFA作為一個算法 443
17.7 利用子集算法轉換NFA到DFA 444
17.8 轉換DFA到正規文法 446
17.9 轉換正規文法到NFA 448
17.10 轉換正規表達式到NFA 449
17.11 求出最小的DFA 452
17.12 正規語言的泵理論 456
問題..... 457
第18章 課程設計項目:用編譯技術實現grep 460
18.1 概述 460
18.2 grep程式的正規表達式 461
18.3 針對正規表達式的單詞符號管理器 462
18.4 正規表達式的文法 463
18.5 正規表達式編譯器的目標語言 465
18.6 用NFA進行模式匹配 471
問題..... 474
第19章 編譯到面向暫存器的結構 476
19.1 概述 476
19.2 使用暫存器指令集 477
19.3 修改R1符號表 478
19.4 R1的語法分析器和代碼生成器 480
問題..... 487
第20章 最佳化 488
20.1 概述 488
20.2 使用ldc指令 489
20.3 重用臨時變數 490
20.4 常量合併 494
20.5 暫存器分配 496
20.6 窺孔最佳化 498
問題..... 502
第21章 解釋器 506
21.1 概述 506
21.2 轉換S1到I1 507
21.3 解釋轉移控制的語句 510
21.4 實現編譯:解釋器CI1 512
21.5 解釋器的優點 517
問題..... 517
第22章 自下而上語法分析 519
22.1 概述 519
22.2 自下而上語法分析原理 519
22.3 語法分析:右遞歸文法對比左遞歸文法 522
22.4 用二義文法進行自下而上語法分析 523
22.5 不歸約規則 526
22.6 SLR(1)語法分析 528
22.7 移進/歸約衝突 533
22.8 歸約/歸約衝突 535
22.9 LR(1)語法分析 537
問題..... 540
第23章 yacc 542
23.1 概述 542
23.2 yacc輸入和輸出檔案 542
23.3 一個yacc-生成的簡單語法分析器 543
23.4 用取值棧傳遞值 551
23.5 對二義文法使用yacc 556
23.6 在語法分析樹中傳遞值 559
23.7 實現Sly 560
23.8 jflex 567
問題..... 574
附錄A 棧指令集 576
附錄B 暫存器指令集 580
參考文獻 583