第1章 編譯概述
1.1 翻譯程序
1.2 編譯過程和編譯程序的基本結構
1.3 編譯程序的分類和生成方法
1.3.1 編譯程序的分類
1.3.2 編譯程序的生成方法
1.4 編譯技術的應用
本章小結
習題
第2章 文法與語言
2.1 符號串與語言
2.1.1 字母表
2.1.2 符號串
2.1.3 符號串的集合--語言
2.2 文法和語言的形式化定義
2.2.1 文法的形式化定義
2.2.2 語言的形式化定義
2.2.3 短語、直接短語和句柄
2.2.4 規(guī)范推導和規(guī)范歸約
2.3 語法分析樹與文法的二義性
2.3.1 語法分析樹
2.3.2 文法的二義性
2.3.3 二義性的消除
2.4 文法的化簡
2.5 語言的分類
本章小結
習題
第3章 詞法分析與有限自動機
3.1 詞法分析器的設計
3.1.1 詞法分析器的任務
3.1.2 詞法分析器的輸出形式
3.2 詞法分析器的手工構造
3.2.1 確定的有限自動機
3.2.2 構造單詞的確定有限自動機
3.2.3 編寫一個C語言詞法分析器
3.3 有限自動機及其化簡
3.3.1 不確定有限自動機
3.3.2 不確定有限自動機的化簡
3.3.3 確定有限自動機的化簡
3.4 正規(guī)文法、正規(guī)式和有限自動機之間的關系
3.4.1 正規(guī)式與正規(guī)集
3.4.2 正規(guī)式與正規(guī)文法的關系
3.4.3 正規(guī)文法與有限自動機之間的轉換
3.4.4 正規(guī)式與有限自動機之間的轉換
3.5 詞法分析程序自動生成器--Lex
3.5.1 Lex的功能
3.5.2 Lex源程序的組成
3.5.3 Lex編譯器的實現(xiàn)原理
3.5.4 一個生成C語言詞法分析器的Lex程序格式
本章小結
習題
第4章 自頂向下的語法分析
4.1 語法分析器的功能
4.2 不確定的自頂向下的分析方法
4.3 LL(1)分析方法
4.3.1 回溯的判別條件與LL(1)文法
4.3.2 左遞歸文法的改造
4.3.3 回溯的消除
4.4 構造遞歸下降分析程序
4.5 非遞歸的預測分析方法
4.5.1 預測分析程序工作原理
4.5.2 構造預測分析表(或稱LL(1)分析表)
4.5.3 預測分析的出錯處理
本章小結
習題
第5章 自底向上的語法分析
5.1 引言
5.2 自底向上的語法分析面臨的問題
5.3 算符優(yōu)先分析技術
5.3.1 算符優(yōu)先關系的定義
5.3.2 算符優(yōu)先關系表的生成
5.3.3 算符優(yōu)先分析總控程序
5.3.4 優(yōu)先函數(shù)及其生成
5.4 LR分析技術
5.4.1 LR分析技術概述
5.4.2 LR(0)分析法
5.4.3 SLR(1)分析技術
5.4.4 LR(1)分析技術
5.4.5 LALR(1)分析技術
5.5 二義性文法的應用
5.6 語法分析器自動生成器--YACC
5.6.1 基本原理與工作過程
5.6.2 C語法分析器的自動生成
本章小結
習題
第6章 屬性文法
6.1 屬性文法
6.1.1 屬性文法的定義
6.1.2 綜合屬性
6.1.3 繼承屬性
6.1.4 依賴圖
6.1.5 屬性文法的計算順序
6.2 S-屬性定義及其自底向上的計算
6.3 L-屬性定義及其自頂向下的計算
6.4 自底向上計算繼承屬性
6.4.1 刪除翻譯方案中嵌入的動作
6.4.2 分析棧中的繼承屬性
6.4.3 模擬繼承屬性的計算
本章小結
習題
第7章 語義分析與語法制導的翻譯
7.1 語義分析的主要任務
7.2 中間語言
7.2.1 圖表示
7.2.2 抽象語法樹
7.2.3 三地址代碼
7.2.4 四元式
7.2.5 三元式
7.2.6 逆波蘭式表示
7.3 聲明語句的翻譯
7.3.1 C語言變量聲明語句的翻譯
7.3.2 C語言函數(shù)定義的翻譯
7.3.3 C語言數(shù)組定義的翻譯
7.4 C表達式與簡單賦值語句的翻譯
7.5 支持C數(shù)組的賦值語句的翻譯
7.6 C語言布爾表達式的翻譯
7.6.1 作為數(shù)值計算的布爾表達式的翻譯
7.6.2 作為條件控制用的布爾表達式的翻譯
7.7 C語言中if語句的翻譯
7.8 C語言中while語句的翻譯
7.9 C語言中switch語句的翻譯
7.10 C語言中break語句的翻譯
7.11 C語言continue語句的翻譯
7.12 C語言中標號與goto語句的翻譯
7.13 C語言函數(shù)調用語句的翻譯
本章小結
習題
第8章 運行時環(huán)境
8.1 概述
8.2 符號表
8.2.1 符號表的作用與結構
8.2.2 符號表的管理
8.2.3 C語言中的符號表
8.3 存儲分配策略
8.3.1 靜態(tài)存儲分配策略
8.3.2 棧式存儲分配策略
8.3.3 堆式存儲分配策略
8.4 存儲空間的組織
8.4.1 運行時內存空間的劃分
8.4.2 函數(shù)與活動記錄
*8.5 非局部變量的訪問
8.6 C語言的存儲分配
8.6.1 C語言的活動記錄結構
8.6.2 入口指令的自動生成
8.6.3 出口指令的自動生成
8.7 垃圾回收機制
8.8 運行庫管理
8.9 連接程序與裝配程序
本章小結
習題
第9章 目標代碼生成
9.1 概述
9.2 一個面向棧的計算機模型
9.3 中間代碼生成目標代碼
9.3.1 逆波蘭式生成目標代碼
9.3.2 四元式生成目標代碼
9.4 C語言目標代碼生成
9.4.1 目標文件結構
9.4.2 從內部語法樹生成目標代碼
9.5 寄存器分配算法
本章小結
習題
第10章 代碼優(yōu)化
10.1 基本概念
10.1.1 優(yōu)化的定義
10.1.2 優(yōu)化的原則
10.1.3 優(yōu)化的分類
10.1.4 代碼優(yōu)化器的結構
10.2 基本塊的概念及優(yōu)化舉例
10.2.1 基本塊的概念
10.2.2 流圖
10.2.3 優(yōu)化舉例
10.3 基本塊內優(yōu)化
10.3.1 塊內優(yōu)化技術
10.3.2 基本塊的DAG
10.4 循環(huán)優(yōu)化
10.4.1 循環(huán)的查找
10.4.2 循環(huán)優(yōu)化技術
本章小結
習題
第11章 并行編譯技術
11.1 并行處理
11.1.1 并行體系結構
11.1.2 并行軟件系統(tǒng)
11.1.3 并行程序設計
11.2 并行編譯系統(tǒng)的功能和結構
11.2.1 并行編譯系統(tǒng)的功能
11.2.2 并行編譯系統(tǒng)的結構
11.3 向量語言編譯技術
11.4 共享存儲器并行機的并行編譯技術
本章小結
習題
第12章 面向對象語言的語法制導翻譯
12.1 面向對象語言理論基礎
12.2 mini-C++的對象布局模型的設計
12.3 mini-C++的函數(shù)名字轉換方案的設計
12.4 mini-C++的try-catch語句的翻譯
12.5 mini-C++的非靜態(tài)函數(shù)的翻譯
12.6 mini-C++的函數(shù)重載的翻譯
12.7 mini-C++的單一繼承的編譯處理
12.8 mini-C++的多重繼承的編譯處理
12.9 mini-C++的虛基類的編譯處理
12.10 mini-C++的單一繼承下虛函數(shù)重寫的翻譯
12.11 mini-C++的多重繼承下虛函數(shù)重寫的翻譯
12.12 mini-C++的運算符重載的翻譯
12.13 mini-C++的模板的翻譯
本章小結
習題
附錄A C語言的YACC源程序
參考文獻