目錄
序言
1 引論
1.1 什麼是編譯程序
1.2 解釋性程序
1.3 編譯程序的基本結構
1.4 程序語言的語法與語義
1.5 程序設計語言設計、編譯程序設計及計算機設計之間的關係
練習1
2 一個簡單的編譯程序
2.1 語言(XL)概述
2.2 XL的詞法分析程序
2.3 XL遞歸下降分析
2.4 生成中間代碼
2.4.1 中間語言
2.4.2 臨時變量
2.4.3 動作符號
2.4.4 語義信息
練習2
3 詞法分析
3.1 輸入子係統
3.2 詞法分析的兩個途徑
3.3 正規錶達式
3.3.1 基本定義
3.3.2 正規錶達式
3.4 有限自動機
3.5 從正規錶達式到詞法分析程序
3.6 LEX――一個建立詞法分析器的自動工具
3.7 實踐中的幾個問題
3.7.1 保留字
3.7.2 嚮前看多字符問題
3.7.3 詞法錯誤的矯正
3.8 正規錶達式到有限自動機的轉換
3.8.1 把正規錶達式轉換為NFA
3.8.2 從NFA到DFA的轉換――子集構造法
3.8.3 DFA的優化――極小化
練習3
4 上下文無關文法與分析
4.1 基本概念與定義
4.2 推導與分析樹
4.3 文法的設計
4.3.1 右綫性文法
4.3.2 驗證由文法生成的語言
4.3.3 消除歧義
4.3.4 遞歸文法
4.3.5 提左公因子
4.4 文法分析算法
4.4.1 空串非終結符
4.4.2 FIRST集閤及其計算
4.4.3 FOLLOW集閤及其計算
4.5 上下文無關文法的限度
練習4
5 LL(1)文法與分析器
5.1 自上而下分析與下推自動機
5.1.1 作為下推自動機的遞歸下降分析器
5.1.2 利用下推自動機進行自上而下的分析算法
5.2 LL(1)預測函數
5.3 LL(1)分析錶
5.4 一個LL(1)分析錶及驅動程序實例
5.5 LL的自動生成工具
5.5.1 LLama
5.5.2 LLGen
5.6 LL(1)文法的構造
5.7 自上而下分析中的查錯恢復問題
練習5
6 LR分析
6.1 自下而上的分析過程――移入歸約分析
6.2 利用狀態機實現對LR分析器的控製
6.3 建立LR分析錶的基本理論
6.3.1 LR(0)文法
6.3.2 SLR(1)文法
6.3.3 LR(1)文法
6.3.4 LALR(1)文法
6.4 LR分析錶的壓縮錶示
6.5 歧義文法的利用
6.6 LR分析中的查錯恢復問題
6.7 LALR(1)分析器的自動生成工具――YACC與OCCS
6.7.1 YACC程序
6.7.2 YACC中如何利用歧義文法
6.7.3 利用Lex建立YACC的詞法分析程序
6.7.4YACC中的查錯恢復方法
練習6
7 語法製導的翻譯
7.1 增廣文法
7.2 屬性文法
7.3 LL分析中的語義處理技術
7.3.1 錶驅動的LL分析中使用的增廣文法
7.3.2 下推自動機中屬性文法的實施
7.3.3 LL中屬性的$錶示法
7.4 LR分析中的語義處理技術
7.4.1 LR分析中屬性處理的特點
7.4.2 一個LR語義處理流程的例子
7.4.3 建立LR分析用的屬性文法及LR分析中屬性的$錶示法
7.4.4 嵌入動作與語法變換
7.5 語義棧的類型描述
7.6 中間語言錶示――IR
7.6.1 IR的一般形式
7.6.2 C代碼:一種簡單的中間語言與虛擬機
7.6.2.1 C虛擬機
7.6.2.2 C虛擬機的存儲管理
7.6.2.3 C代碼描述
練習7
8 符號錶
8.1 符號錶模塊的基本結構
8.2 符號錶數據庫的數據結構
8.3 一個分程序結構的哈希符號錶
8.3.1 基本數據結構
8.3.2 分程序結構
8.3.3 一種簡單的分程序結構符號錶的實現方法
8.3.4 符號錶的高級維護層
練習8
9 運行時存儲器的組織
9.1 靜態分配
9.2 棧式分配
9.3 堆式分配
9.4 靜態鍵與動態鍵
練習9
10 聲明的語義處理技術
10.1 簡單變量聲明的處理
10.2 結構與聯閤聲明的處理
10.3 枚舉類型聲明的處理
10.4 函數聲明與定義的處理
10.5 分程序的處理
練習10
11 C代碼生成器的接口gen()子程序
練習11
12 錶達式的語義處理
12.1 臨時變量的分配
12.2 左值與右值
12.3 臨時變量的錶示――一種支持左右值實現的數據結構
12.4 單目運算符的語義處理
12.5 雙目運算符的處理
練習12
13 控製語句的語義處理
13.1 簡單控製語句的語義處理
13.2 條件語句的語義處理
13.3 循環語句break與c0ntinue語句的語義處理
13.4switch語句的語義處理
練習13
14 代碼優化
14.1 分析器的優化
14.2 綫性(窺孔)優化
14.2.1 強度削減
14.2.2 常數摺閤與常數傳播
14.2.3 死變量與死代碼
14.2.4 窺孔優化之例
14.3 語法樹上的優化
14.3.1 從逆波蘭至語法樹
14.3.2 公共子錶達式節省
14.3.3 寄存器分配
14.3.4 局部循環優化
練習14
15 代碼的生成
15.1 寄存器與臨時單元的管理
15.2 一個簡單的代碼生成器
15.3 一個簡單的寄存器分配方案
15.4 從樹生成代碼
15.5 代碼生成器的自動化技術
15.5.1 基於文法的代碼生成器
15.5.2 基於樹重寫的代碼生成器的生成器
練習15
參考文獻
· · · · · · (
收起)