定 價:23 元
叢書名:普通高等教育“十一五”國家級規(guī)劃教材·普通高等教育“十一五”計算機類規(guī)劃教材
- 作者:劉磊 ,等 著
- 出版時間:2010/8/1
- ISBN:9787111312611
- 出 版 社:機械工業(yè)出版社
- 中圖法分類:TP314
- 頁碼:184
- 紙張:膠版紙
- 版次:2
- 開本:16K
編譯原理是計算機學科的一門重要專業(yè)基礎課。《編譯原理及實現(xiàn)技術(第2版)》旨在介紹編譯程序設計的基本原理、實現(xiàn)技術、方法和工具,充分考慮了教師便于教學,學生便于自學的問題。在介紹基本原理和實現(xiàn)技術中,注重循序漸進、深入淺出,每一章節(jié)都提供了編譯程序實現(xiàn)的具體實例,每章末尾給出了豐富的習題以輔助學生更好地掌握編譯過程。
《編譯原理及實現(xiàn)技術(第2版)》包含了編譯程序設計的基礎理論和具體實現(xiàn)技術,主要內容有:形式語言和自動機理論、詞法分析、語法分析、語義分析、中間代碼生成、中間代碼優(yōu)化和目標代碼生成等編譯過程。
《編譯原理及實現(xiàn)技術(第2版)》可作為大專院校計算機專業(yè)本科生教材,也可作為計算機工程技術人員的參考書。
編譯原理是計算機學科的一門重要專業(yè)基礎課。學習編譯課程,不僅可以掌握編譯程序本身的實現(xiàn)技術,而且能夠提高對程序設計語言的理解,提高開發(fā)大型軟件的能力,提高軟件程序的設計能力,提高抽象思維能力。
編譯程序是計算機系統(tǒng)軟件的重要組成部分,其基本原理和實現(xiàn)技術也適用于一般軟件的設計和實現(xiàn),而且在軟件工程、軟件自動化、程序分析等領域有著廣泛的應用。通常把編譯程序視為高級語言到機器語言的轉換程序,而這種轉換不是結構上的變換,而是基于語言語義的等價變換,因此,編譯程序設計的難度和復雜性是很高的。同時,編譯原理也是一門對實踐性要求較高的課程。本書充分考慮了便于教師教學,便于學生自學的問題,循序漸進地介紹了編譯程序設計的基本原理、主要實現(xiàn)技術、基本設計方法和一些自動構造工具,深入淺出地介紹了完整的編譯程序構造和實現(xiàn)過程,使學生能夠掌握編譯的整體結構。
本書共分10章。第l章介紹了編譯程序的基礎知識。第2章作為編譯程序的理論基礎,簡單介紹了形式語言、有限自動機理論和正則表達式等基礎知識。第3章以正則表達式、有限自動機為工具,討論了詞法分析程序的設計與實現(xiàn),并簡要介紹了詞法分析器生成器LEX的基本原理和使用方法。第4章介紹了自頂向下的語法分析方法的基本思想,并討論了遞歸下降語法分析方法和LL(1)語法分析方法的實現(xiàn)技術。第5章介紹了自底向上語法分析方法的基本思想,并詳細討論了LR類語法分析的基本原理和實現(xiàn)方法,同時簡單介紹了流行的語法分析器生成器YACC、Bison等工具。第6章專門介紹語義分析,包括標識符、類型、值的內部表示及其構造,符號表的構造及其管理。第7章介紹了中間代碼生成,包括常用中間代碼結構、表達式的中間代碼、下標變量的中間代碼以及語句的中間代碼。第8章介紹了中間代碼優(yōu)化的基本方法,重點討論了常量表達式優(yōu)化、公共表達式優(yōu)化和循環(huán)不變式優(yōu)化。第9章介紹編譯程序運行時的存儲空間組織與存儲分配技術,重點討論了運行時的存儲結構、存儲分配、過程活動記錄以及變量訪問環(huán)境等。第10章介紹了目標代碼生成的基本技術,重點討論了中間代碼到目標代碼的翻譯。
前言
第1章 編譯引論
1.1 程序設計語言和編譯程序
1.2 編譯程序的結構
1.2.1 編譯程序的構成
1.2.2 遍
1.2.3 編譯程序的前端和后端
1.3 編譯程序和程序設計環(huán)境
1.4 編譯程序的實現(xiàn)
習題1
第2章 形式語言與自動機理論基礎
2.1 基本概念
2.2 文法
2.2.1 文法的定義
2.2.2 文法分類
2.2.3 推導和歸約
2.2.4 語法樹與文法二義性
2.2.5 文法等價變換
2.3 有限自動機(FA)
2.3.1 確定有限自動機
2.3.2 非確定有限自動機
2.3.3 DFA與NFA的等價
2.3.4 DFA的化簡
2.4 正則表達式
2.4.1 正則表達式與正則集
2.4.2 正則表達式與有限自動機的相互轉換
習題2
第3章 詞法分析
3.1 詞法分析介紹
3.1.1 詞法分析程序的功能
3.1.2 詞法分析程序的接口
3.2 詞法分析程序設計
3.2.1 單詞分類
3.2.2 單詞的內部表示
3.2.3 單詞的形式描述
3.2.4 自動機的實現(xiàn)
3.3 詞法分析程序的實現(xiàn)
3.3.1 實現(xiàn)詞法分析程序應注意的問題
3.3.2 單詞結構
3.3.3 實現(xiàn)算法
3.4 詞法分析程序自動生成
3.4.1 LEX簡介
3.4.2 LEX工作原理
3.4.3 LEX源文件結構
3.4.4 LEX系統(tǒng)中的正則式
3.4.5 LEX的使用方式
3.4.6 應用實例
習題3
第4章 語法分析——自頂向下分析方法
4.1 語法分析程序介紹
4.1.1 語法分析程序的功能
4.1.2 語法錯誤類別及錯誤處理
4.1.3 自頂向下語法分析基本思想
4.1.4 3個重要的集合
4.1.5 自頂向下語法分析條件
4.2 遞歸下降法
4.2.1 遞歸下降法語法分析原理
4.2.2 遞歸下降法語法分析程序的構造
4.3 LL(1)分析方法
4.3.1 LL(1)分析法原理
4.3.2 LL(1)分析表的構造
4.3.3 LI.(1)驅動程序的構造
4.4 自頂向下分析程序的自動生成
習題4
第5章 語法分析——自底向上分析方法
5.1 自底向上語法分析方法介紹
5.2 簡單優(yōu)先分析
5.2.1 簡單優(yōu)先文法及其優(yōu)先關系
矩陣的構造
5.2.2 簡單優(yōu)先分析算法
5.3 LR分析法
5.3.1 LR類分析法的工作過程
5.3.2 LR(O)分析方法
5.3.3 SLR(1)分析方法
5.3.4 LR(1)分析方法
5.3.5 LALR(1)分析方法
5.3.6 LR方法小結
5.4 自底向上分析程序的自動生成
習題5
第6章 語義分析和符號表
6.1 語義分析概述
6.1.1 語義
6.1.2 語義分析的功能
6.1.3 語義分析的一般過程
6.2 符號表的數(shù)據結構
6.2.1 標識符的屬性
6.2.2 標識符的內部表示
6.2.3 類型的內部表示
6.2.4 值的內部表示
6.3 符號表的管理
6.3.1 符號表的建立與訪問
6.3.2 符號表的組織
6.3.3 符號表的局部化處理
6.4 程序設計語言符號表的實例
6.4.1 Pascal的符號表
6.4.2 C的符號表
習題6
第7章 中間代碼生成
7.1 常用的中間代碼結構
7.1.1 后綴式
7.1.2 抽象語法樹和DAG
7.1.3 三地址中間代碼
7.2 語法制導方法概論
7.3 類型檢查和類型轉換
7.4 中間代碼生成中的幾個問題
7.4.1 語義信息的獲取和保存
7.4.2 語義棧Sem及其操作
7.4.3 常用的語義子程序
7.5 表達式的中間代碼生成
7.6 下標變量的中間代碼生成
7.6.1 下標變量的地址
7.6.2 下標變量的四元式結構
7.6.3 下標變量的中間代碼生成過程
7.6.4 下標變量中間代碼生成實例
7.7 賦值語句的中間代碼
7.8 過程調用和函數(shù)調用的中間代碼
7.9 控制語句的中間代碼生成
7.9.1 goto語句和標號定位的中間代碼
7.9.2 條件語句的中間代碼
7.9.3 while語句的中間代碼
7.10 過程/函數(shù)聲明的中間代碼生成
習題7
第8章 中間代碼優(yōu)化
8.1 優(yōu)化方法概述
8.2 基本塊劃分
8.3 常量表達式局部優(yōu)化
8.4 公共表達式局部優(yōu)化
8.5 循環(huán)不變式外提
8.5.1 循環(huán)不變式外提概述
8.5.2 循環(huán)不變式外提原理
8.6 其他各類優(yōu)化介紹
習題8
第9章 運行時存儲空間的組織與管理
9.1 目標程序運行時的存儲結構
9.1.1 目標程序運行時內存的劃分
9.1.2 目標程序運行時的存儲分配策略
9.2 過程活動記錄和運行時棧
9.2.1 過程活動記錄
9.2.2 過程活動記錄的申請和釋放
9.3 變量訪問環(huán)境
9.3.1 變量訪問環(huán)境概述
9.3.2 Display表方法
9.3.3 靜態(tài)鏈方法
習題9
第10章 目標代碼生成
10.1 目標代碼生成介紹
10.1.1 代碼生成器的輸入和輸出
10.1.2 指令選擇
10.2 虛擬機
10.3 寄存器的分配
10.3.1 單寄存器機器的寄存器分配
10.3.2 多寄存器機器的寄存器分配
10.4 四元式到目標代碼的翻譯
10.4.1 表達式四元式的翻譯
10.4.2 賦值語句四元式的翻譯
10.4.3 輸入輸出語句四元式的翻譯
10.4.4 條件語句四元式的翻譯
10.4.5 循環(huán)語句四元式的翻譯
10.4.6 標號語句四元式和goto語句四元式的翻譯
10.4.7 過程、函數(shù)說明語句四元式的翻譯
10.4.8 過程和函數(shù)調用語句四元式的翻譯
習題10
參考文獻
2.語法分析階段
語法分析的任務是根據程序設計語言的語法規(guī)則,把詞法分析的結果分解成各種語法單位,同時檢查程序中的語法錯誤。語法分析的掃描對象有兩種可能:一種是將詞法分析程序作為獨立的一遍運行,掃描整個源程序的ASCII碼序列,將之轉換為TOKEN序列,輸出到一個中間文件,該文件作為語法分析程序的掃描對象繼續(xù)編譯的過程;更一般的情況是將詞法分析程序設計成一個子程序,每當語法分析程序需要讀取單詞時,則調用該子程序。這種設計方案中,詞法分析程序和語法分析程序處于同一遍,可以省去中間文件。
3.語義分析階段
這一階段的任務是對語法分析所識別出的各類語法范疇,分析其含義,并進行靜態(tài)語義檢查。例如,變量是否定義、類型是否匹配等。這一階段所依循的是語言的語義規(guī)則。通常使用屬性文法描述語義規(guī)則。
4.中間代碼生成
在進行了上述的語法分析和語義分析階段的工作后,有些編譯程序將源程序變成一種內部表示形式,這種內部表示形式叫做中間代碼。使用中間代碼的主要好處是便于移植、便于修改、便于優(yōu)化。這種中間代碼的形式有很多種,常見的有后綴式(棧式)中間代碼、三地址中間代碼(三元式和四元式)、圖結構中間代碼(樹,DAG)。其中,后綴式中間代碼是最早使用的一種中間代碼,現(xiàn)在很少使用,目前使用的主要是后兩種。
5.中間代碼優(yōu)化
此階段的任務是對前階段產生的中間代碼在不改變源程序語義的前提下進行加工變換,使生成的代碼更為高效,縮短運行時間或節(jié)省存儲空間。主要的優(yōu)化方式包括常量表達式優(yōu)化、公共子表達式優(yōu)化、不變表達式的循環(huán)外提和削減運算強度等。
6.目標代碼生成
這一階段的任務是把中間代碼變換成特定機器上的機器指令代碼或匯編指令代碼。這是編譯的最后階段,因為目標語言的關系而十分依賴于硬件系統(tǒng)。如何充分利用寄存器、合理選擇指令、生成盡可能短而有效的目標代碼,都與目標機的結構有關。
生成的目標代碼如果是匯編指令代碼,則需經由匯編程序處理后才能執(zhí)行;生成的目標代碼如果是絕對指令代碼,則可直接投入運行;如果是可重定位的指令代碼,那么目標代碼只是一個代碼模塊,必須由連接裝配程序將輸入/輸出模塊、標準函數(shù)等系統(tǒng)模塊與目標代碼模塊連接在一起,才能形成一個絕對指令代碼程序以供執(zhí)行。大多數(shù)現(xiàn)代實用的編譯程序生成的目標代碼都是這種可重定位的指令代碼。