目錄
序言
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 輸入子系統(tǒng)
3.2 詞法分析的兩個途徑
3.3 正規(guī)表達式
3.3.1 基本定義
3.3.2 正規(guī)表達式
3.4 有限自動機
3.5 從正規(guī)表達式到詞法分析程序
3.6 LEX——一個建立詞法分析器的自動工具
3.7 實踐中的幾個問題
3.7.1 保留字
3.7.2 向前看多字符問題
3.7.3 詞法錯誤的矯正
3.8 正規(guī)表達式到有限自動機的轉換
3.8.1 把正規(guī)表達式轉換為NFA
3.8.2 從NFA到DFA的轉換——子集構造法
3.8.3 DFA的優(yōu)化——極小化
練習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)預測函數(shù)
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 利用狀態(tài)機實現(xiàn)對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 符號表數(shù)據庫的數(shù)據結構
8.3 一個分程序結構的哈希符號表
8.3.1 基本數(shù)據結構
8.3.2 分程序結構
8.3.3 一種簡單的分程序結構符號表的實現(xiàn)方法
8.3.4 符號表的高級維護層
練習8
9 運行時存儲器的組織
9.1 靜態(tài)分配
9.2 棧式分配
9.3 堆式分配
9.4 靜態(tài)鍵與動態(tài)鍵
練習9
10 聲明的語義處理技術
10.1 簡單變量聲明的處理
10.2 結構與聯(lián)合聲明的處理
10.3 枚舉類型聲明的處理
10.4 函數(shù)聲明與定義的處理
10.5 分程序的處理
練習10
11 C代碼生成器的接口gen()子程序
練習11
12 表達式的語義處理
12.1 臨時變量的分配
12.2 左值與右值
12.3 臨時變量的表示——一種支持左右值實現(xiàn)的數(shù)據結構
12.4 單目運算符的語義處理
12.5 雙目運算符的處理
練習12
13 控制語句的語義處理
13.1 簡單控制語句的語義處理
13.2 條件語句的語義處理
13.3 循環(huán)語句break與c0ntinue語句的語義處理
13.4switch語句的語義處理
練習13
14 代碼優(yōu)化
14.1 分析器的優(yōu)化
14.2 線性(窺孔)優(yōu)化
14.2.1 強度削減
14.2.2 常數(shù)折合與常數(shù)傳播
14.2.3 死變量與死代碼
14.2.4 窺孔優(yōu)化之例
14.3 語法樹上的優(yōu)化
14.3.1 從逆波蘭至語法樹
14.3.2 公共子表達式節(jié)省
14.3.3 寄存器分配
14.3.4 局部循環(huán)優(yōu)化
練習14
15 代碼的生成
15.1 寄存器與臨時單元的管理
15.2 一個簡單的代碼生成器
15.3 一個簡單的寄存器分配方案
15.4 從樹生成代碼
15.5 代碼生成器的自動化技術
15.5.1 基于文法的代碼生成器
15.5.2 基于樹重寫的代碼生成器的生成器
練習15
參考文獻