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