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