圖書信息
【作 者】:蔣偉進
【出 版 社】:中南大學出版社
【出版時間】:2005-08
【ISBN】:7-81105-159-1/TP·023
【字 數】:385(千字)
【頁 碼】:237(頁)
【定 價】:¥22(元)
【開 本】:16開
內容簡介
本書全面地介紹了編譯程式的基本結構,系統地闡述了編譯原理的一般理論、常用方法和實現技術。全書共分九章,包括語言的基礎知識、詞法分析程式的設計原理和構造方法、常用語法分析技術、屬性文法基本概念、中間代碼生成、符號表構造、代碼最佳化和目標代碼生成及運行時存儲空間的組織等。本書敘述嚴謹、簡明,富有啟發性,且深入淺出,通俗易懂,便於自學。在各章後面均附有習題和習題參考答案。本書可作為高等院校計算機專業教材,也可以作為成人高等教育計算機專業本科和專科起點本科生的教材,也可以作為計算機專業人員的參考用書。
圖書目錄
第1章 編譯原理概述(1) 1.1 翻譯程式與編譯程式(1) 1.2 編譯過程和編譯程式的基本結構(2) 1.3 編譯程式的生成方法(5) 1.4 編譯技術在軟體開發的套用(6) 1.5 編譯器的構造工具(7) 小結(7) 習題一(8) 參考答案(9) 第2章 文法和語言基礎(10) 2.1 字母表和符號串的基本概念(10) 2.1.1 字母表和符號串(10) 2.1.2 符號串的運算(11) 2.2 文法和語言的形式定義(12) 2.2.1 形式語言(12) 2.2.2 文法的形式定義(13) 2.2.3 語言的形式定義(16) 2.2.4 規範推導和規範歸約(18) 2.2.5 遞歸規則與文法的遞歸性(19) 2.3 短語、直接短語和句柄(20) 2.3.1 短語和直接短語(20) 2.3.2 句柄(21) 2.4 語法樹與文法的二義性(22) 2.4.1 推導與語法樹(22) 2.4.2 文法的二義性(24) 2.4.3 文法二義性的消除(25) 2.5 文法和語言的分類(26) 2.6 有關文法實用中的一些說明(28) 2.6.1 有關文法的使用限制(28) 2.6.2 上下文無關文法中的ε規則(29) 2.7 文法在記憶體中的表示(29) 小結(30) 習題二(31) 參考答案(33) 第3章 詞法分析與有窮自動機(35) 3.1 詞法分析程式的設計(35) 3.1.1 詞法分析程式與語法分析程式的接口方式(35) 3.1.2 詞法分析程式的輸出(35) 3.1.3 將詞法分析工作分離的考慮(36) 3.2 語言單詞符號的兩種定義方式(37) 3.2.1 正規式與正規集(37) 3.2.2 正規文法與正規式(38) 3.3 正規式與有窮自動機(41) 3.3.1 確定有窮自動機(DFA)(41) 3.3.2 非確定有窮自動機(NFA)(42) 3.3.3 由正規表示式R構造NFA(43) 3.3.4 NFA確定化為DFA的方法(44) 3.3.5 DFA的化簡(47) 3.3.6 有窮自動機到正規式的轉換(49) 3.4 正規文法與有窮自動機(50) 3.4.1 右線性正規文法到有窮自動機的轉換方法(50) 3.4.2 左線性正規文法到有窮自動機的轉換方法(51) 3.4.3 有窮自動機到正規文法的轉換方法(52) 3.5 詞法分析程式設計(53) 小結(56) 習題三(56) 參考答案(58) 第4章 語法分析(62) 4.1 自上而下語法分析法(62) 4.1.1 非確定的自上而下分析法(62) 4.1.2 文法的左遞歸性和回溯的消除(63) 4.1.3 某些非LL(1)文法改寫成LL(1)文法(67) 4.1.4 遞歸下降分析法(68) 4.1.5 預測分析法與預測分析表(70) 4.2 自下而上的分析法(73) 4.3 算符優先分析法(74) 4.3.1 算符優先文法(74) 4.3.2 算符優先關係表的構造(76) 4.3.3 算符優先分析算法(77) 4.3.4 優先函式(79) 4.4 LR分析法(82) 4.4.1 LR分析器的工作原理和過程(82) 4.4.2 LR(0)分析法(85) 4.4.3 SLR(1)分析法(89) 4.4.4 LR(1)分析法(95) 4.4.5 LALR(1)分析法(98) 小結(101) 習題四(103) 參考答案(106) 第5章 語法制導翻譯和中間代碼生成(118) 5.1 屬性文法(118) 5.2 語法制導翻譯概述(120) 5.3 中間語言(122) 5.3.1 逆波蘭式(122) 5.3.2 三元式和樹形表示(123) 5.3.3 四元式和三地址碼(124) 5.4 自底向上語法制導翻譯(125) 5.4.1 簡單算術表達式和賦值語句的翻譯(125) 5.4.2 布爾表達式的翻譯(127) 5.4.3 控制語句的翻譯(131) 5.4.4 循環語句的翻譯(133) 5.4.5 簡單說明語句的翻譯(135) 5.4.6 含數組元素的賦值語句的翻譯(136) 5.5 遞歸下降語法制導的翻譯(139) 小結(141) 習題五(141) 參考答案(142) 第6章 符號表的組織和管理(144) 6.1 符號表的內容與作用(145) 6.1.1 符號表的內容(145) 6.1.2 符號表的作用(145) 6.2 符號表的組織(146) 6.2.1 符號表的總體組織(146) 6.2.2 表項屬性信息組織(147) 6.2.3 符號表域的組織(148) 6.2.4 Pascal的符號表組織(148) 6.3 符號表的建立與查找(152) 6.3.1 符號表的建立(152) 6.3.2 符號表的查找(152) 小結(154) 習題六(154) 參考答案(155) 第7章 代碼最佳化(157) 7.1 最佳化概述(158) 7.1.1 合併常量運算(158) 7.1.2 刪除公共子表達式(158) 7.1.3 減少複寫傳播(158) 7.1.4 消除無用代碼(158) 7.1.5 削減運算強度(159) 7.1.6 外提循環中的不變表達式(159) 7.1.7 刪除歸納變數(160) 7.2 局部最佳化(160) 7.2.1 劃分基本塊的方法(160) 7.2.2 基本塊的DAG表示(162) 7.2.3 利用DAG進行基本塊的最佳化處理(163) 7.3 循環最佳化(166) 7.3.1 程式流程圖(166) 7.3.2 循環查找(167) 7.3.3 循環最佳化(167) 7.4 窺孔最佳化(170) 小結(171) 習題七(171) 參考答案(174) 第8章 運行時存儲空間組織(179) 8.1 程式運行的存儲分配知識(179) 8.1.1 運行時存儲空間劃分(179) 8.1.2 過程的活動(180) 8.1.3 活動記錄(181) 8.1.4 存儲分配策略(182) 8.2 靜態存儲分配(182) 8.3 棧式存儲分配(183) 8.3.1 沒有局部過程的棧式存儲分配(184) 8.3.2 允許過程嵌套定義語言的棧式存儲分配(184) 8.4 堆式動態存儲分配(187) 8.5 參數傳遞機制(188) 8.5.1 值傳遞(188) 8.5.2 地址傳遞(189) 8.5.3 值結果傳遞(189) 8.5.4 名字傳遞(190) 習題八(191) 參考答案(193) 第9章 目標代碼生成(196) 9.1 概述(196) 9.2 假想的計算機模型(198) 9.3 簡單的代碼生成器(200) 9.3.1 待用信息和活躍信息(201) 9.3.2 代碼生成算法(202) 9.3.3 暫存器分配(205) 9.4 DAG的目標代碼(208) 小結(211) 習題九(211) 參考答案(212) 附錄A LEX(LexicalCompiler)和YACC(YetAnotherCompiler-Compiler)工具(215) A.1 簡介(215) A.2 LEX詞法分析自動生成程式(215) A.2.1 語言LEX的一般描述(216) A.2.2 LEX的常規表達式(216) A.2.3 LEX編程(218) A.2.4 高級LEX(219) A.3 YACC語法分析自動生成程式(220) A.3.1 YACC規格說明(220) A.3.2 YACC編程(220) 附錄B 編譯程式實驗(223) B.1 選擇實驗題目的途徑(223) B.2 實驗題(224) 實驗一(224) 實驗二(224) 實驗三(225) 6編譯原理 實驗四(225) 實驗五(226) 實驗六(226) B.3 實驗報告範例(227) 一、分析(228) 二、算法(229) 三、實現(229) 四、總結(230) 附錄(231) 參考文獻(237)