「編譯原理」課程是一門理論性與實踐性非常強的課程,應遵循從具體到抽象的認知規律。本書以一個開源的C編譯器(UCC)為案例,在源代碼分析的過程中,展開對編譯原理相關知識的學習和討論。《C編譯器剖析》共分6章:
第1章介紹文法和遞歸等知識點,並采用結合C語言的方式來討論匯編代碼;第2章討論UCC編譯器的詞法分析、內存管理、符號表管理和類型系統等基本模塊;第3章介紹UCC編譯器的語法分析,采用的是手工打造分析器的技術路線;第4章介紹語義檢查,通過本章的學習,有助於C程序員站在編譯器的角度來深入理解C語言的語義規則;第5章分析UCC編譯器的中間代碼生成及優化;第6章介紹如何生成32位的x86匯編代碼。
《C編譯器剖析》不僅是很好的編譯原理和編譯器設計教材,也可作為讀者深入學習C程序設計的參考用書。
目錄
第1章 基礎知識
1.1 語言、文法與遞歸
1.2 一個較復雜的文法
1.3 由文法到分析器
1.3.1 表達式
1.3.2 聲明
1.3.3 語句
1.4 UCC編譯器預覽
1.4.1 UCC的使用
1.4.2 UCC驅動器
1.5 結合C語言來學匯編
1.5.1 匯編語言簡介
1.5.2 整數運算
1.5.3 浮點數的算術運算
1.5.4 浮點數之間的比較操作
1.5.5 指針、數組和結構體
1.6 C語言的變量名、數組名和函數名
1.7 C語言的變參函數
1.8 本章習題
第2章 UCC編譯器的基本模塊
2.1 從Makefile走起
2.2 詞法分析
2.3 UCC編譯器的內存管理
2.4 C語言的類型系統
2.5 UCC編譯器的符號表管理
2.6 本章習題
第3章 語法分析
3.1 C語言的表達式
3.1.1 條件表達式和二元表達式
3.1.2 一元表達式、后綴表達式和基本表達式
3.2 C語言的語句
3.3 C語言的外部聲明
3.3.1 聲明和函數定義
3.3.2 與聲明有關的幾個非終結符
3.3.3 聲明說明符和聲明符
3.4 本章習題
第4章 語義檢查
4.1 語義檢查簡介
4.2 表達式的語義檢查
4.2.1 表達式的語義檢查簡介
4.2.2 數組索引的語義檢查
4.2.3 基本表達式的語義檢查
4.2.4 函數調用的語義檢查
4.2.5 成員選擇運算符的語義檢查
4.2.6 相容類型
4.2.7 一元表達式的語義檢查
4.2.8 二元表達式、賦值表達式和條件表達式的語義檢查
4.3 語句的語義檢查
4.4 聲明的語義檢查
4.4.1 類型結構的構建
4.4.2 結構體的類型結構
4.4.3 結構體和數組的初始化
4.4.4 內部連接和外部連接
4.4.5 外部聲明的語義檢查
4.5 本章習題
第5章 中間代碼生成及優化
5.1 中間代碼生成簡介
5.2 表達式的翻譯
5.2.1 布爾表達式的翻譯
5.2.2 公共子表達式
5.2.3 通過「偏移」訪問數組元素和結構體成員
5.2.4 后綴表達式的翻譯
5.2.5 賦值表達式的翻譯
5.2.6 一元表達式及其他表達式的翻譯
5.3 語句的翻譯
5.3.1 if語句和復合語句的翻譯
5.3.2 switch語句的翻譯
5.4 UCC編譯器的優化
5.4.1 刪除無用的臨時變量和優化跳轉目標
5.4.2 基本塊的合並
5.5 本章習題
第6章 匯編代碼生成
6.1 匯編代碼生成簡介
6.2 寄存器的管理
6.3 中間代碼的翻譯
6.3.1 由中間代碼產生匯編指令的主要流程
6.3.2 為算術運算產生匯編代碼
6.3.3 為跳轉指令產生匯編代碼
6.3.4 為函數調用與返回產生匯編代碼
6.3.5 為類型轉換產生匯編代碼
6.3.6 為取地址產生匯編指令
6.4 本章習題
參考文獻
后記
1.1 語言、文法與遞歸
1.2 一個較復雜的文法
1.3 由文法到分析器
1.3.1 表達式
1.3.2 聲明
1.3.3 語句
1.4 UCC編譯器預覽
1.4.1 UCC的使用
1.4.2 UCC驅動器
1.5 結合C語言來學匯編
1.5.1 匯編語言簡介
1.5.2 整數運算
1.5.3 浮點數的算術運算
1.5.4 浮點數之間的比較操作
1.5.5 指針、數組和結構體
1.6 C語言的變量名、數組名和函數名
1.7 C語言的變參函數
1.8 本章習題
第2章 UCC編譯器的基本模塊
2.1 從Makefile走起
2.2 詞法分析
2.3 UCC編譯器的內存管理
2.4 C語言的類型系統
2.5 UCC編譯器的符號表管理
2.6 本章習題
第3章 語法分析
3.1 C語言的表達式
3.1.1 條件表達式和二元表達式
3.1.2 一元表達式、后綴表達式和基本表達式
3.2 C語言的語句
3.3 C語言的外部聲明
3.3.1 聲明和函數定義
3.3.2 與聲明有關的幾個非終結符
3.3.3 聲明說明符和聲明符
3.4 本章習題
第4章 語義檢查
4.1 語義檢查簡介
4.2 表達式的語義檢查
4.2.1 表達式的語義檢查簡介
4.2.2 數組索引的語義檢查
4.2.3 基本表達式的語義檢查
4.2.4 函數調用的語義檢查
4.2.5 成員選擇運算符的語義檢查
4.2.6 相容類型
4.2.7 一元表達式的語義檢查
4.2.8 二元表達式、賦值表達式和條件表達式的語義檢查
4.3 語句的語義檢查
4.4 聲明的語義檢查
4.4.1 類型結構的構建
4.4.2 結構體的類型結構
4.4.3 結構體和數組的初始化
4.4.4 內部連接和外部連接
4.4.5 外部聲明的語義檢查
4.5 本章習題
第5章 中間代碼生成及優化
5.1 中間代碼生成簡介
5.2 表達式的翻譯
5.2.1 布爾表達式的翻譯
5.2.2 公共子表達式
5.2.3 通過「偏移」訪問數組元素和結構體成員
5.2.4 后綴表達式的翻譯
5.2.5 賦值表達式的翻譯
5.2.6 一元表達式及其他表達式的翻譯
5.3 語句的翻譯
5.3.1 if語句和復合語句的翻譯
5.3.2 switch語句的翻譯
5.4 UCC編譯器的優化
5.4.1 刪除無用的臨時變量和優化跳轉目標
5.4.2 基本塊的合並
5.5 本章習題
第6章 匯編代碼生成
6.1 匯編代碼生成簡介
6.2 寄存器的管理
6.3 中間代碼的翻譯
6.3.1 由中間代碼產生匯編指令的主要流程
6.3.2 為算術運算產生匯編代碼
6.3.3 為跳轉指令產生匯編代碼
6.3.4 為函數調用與返回產生匯編代碼
6.3.5 為類型轉換產生匯編代碼
6.3.6 為取地址產生匯編指令
6.4 本章習題
參考文獻
后記
網路書店
類別
折扣
價格
-
新書87折$256