出版時間:2010-3 出版社:機械工業(yè)出版社 作者:何炎祥 頁數(shù):246
前言
編譯程序(Compiler)是計算機的重要系統(tǒng)軟件,是高級程序設(shè)計語言的支撐基礎(chǔ)。本書主要介紹設(shè)計和構(gòu)造編譯程序的基本原理和方法。本書共分12章。第1章講述編譯程序的功能、結(jié)構(gòu)、工作過程、組織方式、編譯程序與高級語言的關(guān)系以及編譯自動化方面的基本知識。第2章介紹形式語言理論,我們僅僅給出了便于理解、有助于研究各種分析方法和設(shè)計構(gòu)造編譯程序的形式語言理論,并著重介紹上下文無關(guān)文法。有窮自動機是描述詞法的有效工具,也是進行詞法分析的主要理論基礎(chǔ)。因此,第3章專門介紹有窮狀態(tài)自動機,它與正規(guī)文法、正規(guī)表達式之間的對應(yīng)關(guān)系以及它的確定化和最小化方面的知識。第4章討論詞法分析程序的設(shè)計方法。上下文無關(guān)文法可用于描述現(xiàn)今大多數(shù)高級程序設(shè)計語言的語法,也是語法分析的主要理論支柱。為此,在接下來的幾章里,主要討論與上下文無關(guān)文法相關(guān)的各類語法分析方法。第5章介紹自頂向下分析方法,包括LL(k)文法、LL(1)分析方法和應(yīng)用十分廣泛的遞歸下降分析方法。第6章討論自底向上分析方法的一般原理和優(yōu)先分析方法,包括簡單優(yōu)先分析技術(shù)和算符優(yōu)先分析方法。第7章專門討論自底向上的LR(k)分析方法,包括LR(0)、SLR(1)、規(guī)范LR(1)以及LALR(1)分析表的構(gòu)造算法。第8章介紹語法制導(dǎo)翻譯方法(SDTS),主要討論SDTS的基本原理、屬性翻譯文法及其在中間代碼生成中的應(yīng)用。第9章討論運行時的存儲組織與管理,其中考慮了一些重要的語言特征,如過程調(diào)用、參數(shù)傳遞、數(shù)組和記錄的存取方式以及多種存儲分配技術(shù)。第10章討論符號表的組織和存取符號表的各種方法。第11章介紹常用的優(yōu)化方法。第12章主要通過與具體機器無關(guān)的PL/0語言的目標(biāo)代碼生成過程,討論了代碼生成的原理??紤]到完整性,我們在附錄中給出了PL/0編譯程序源程序?!熬幾g原理”這門課程是計算機專業(yè)的主干課和必修課,也是計算機專業(yè)工程碩士課程中較難學(xué)習(xí)的一門課程,其先導(dǎo)課程是匯編語言程序設(shè)計、計算機組成原理、數(shù)據(jù)結(jié)構(gòu)、高級語言程序設(shè)計和離散數(shù)學(xué)等。本課程的參考學(xué)時數(shù)72,教師可根據(jù)具體情況對教材內(nèi)容進行取舍,例如,工科院校的學(xué)生可略過第7、8章并可精減第2、3章的內(nèi)容,從而使授課學(xué)時數(shù)減至54。教師在講授本課程的同時應(yīng)加強并引導(dǎo)學(xué)生做好該課程實踐方面的規(guī)劃和檢驗。本書特別注重設(shè)計和構(gòu)造編譯程序的理論與實踐、原理與方法的互通,而且基本概念清晰,深入淺出,循序漸進,系統(tǒng)性強。每章之后還附有難度不一的習(xí)題供學(xué)生復(fù)習(xí)、思考和探索。本書既可作為高等院校計算機專業(yè)工程碩士及相關(guān)層次學(xué)生的教材,也可供有關(guān)師生和科技工作者及軟件開發(fā)人員學(xué)習(xí)和參考。本書的第9、10、12章和附錄由伍春香編寫,第11章由王漢飛編寫,其余各章由何炎祥編寫。何炎祥和王漢飛最后統(tǒng)稿。本書是在我們已經(jīng)出版的幾本編譯原理教材的基礎(chǔ)上經(jīng)過適當(dāng)修訂而成。在修訂過程中得到了原合作者的全力支持。此外,書中引用了一些專家學(xué)者的論著和研究成果,以及一些公司的產(chǎn)品介紹,在此一并表示真誠的感謝。限于水平,書中錯誤難免,敬請讀者指正。
內(nèi)容概要
本書主要介紹設(shè)計和構(gòu)造編譯程序的基本原理和方法,內(nèi)容包括適合于計算機高級程序設(shè)計語言翻譯的形式語言和自動機理論、常用的詞法分析方法、各種經(jīng)典的語法分析方法、語法制導(dǎo)翻譯方法、存儲器的組織與管理方法、符號表的組織與造查表方法、代碼優(yōu)化和代碼生成方法、并行編譯程序及編譯自動化技術(shù)等。本書特別注重理論與實踐、原理與方法的互通,而且基本概念清晰,深入淺出,循序漸進,系統(tǒng)性強。各章之后還附有難度不一的習(xí)題供復(fù)習(xí)、思考和探索之用。 本書既可作為高等院校計算機專業(yè)的教材,也可供科技工作者及軟件研發(fā)人員學(xué)習(xí)和參考。
作者簡介
何炎祥,教授、博士生導(dǎo)師,武漢大學(xué)計算機學(xué)院院長。主要研究方向為:分布并行處理(含移動計算與Web服務(wù))、可信軟件、數(shù)據(jù)挖掘和軟件工程等。主持和主要承擔(dān)的科研項目包括863高技術(shù)計劃項目、國家自然科學(xué)基金重大研究計劃項目、國家自然科學(xué)基金面上項目、省市科技攻關(guān)
書籍目錄
出版者的話 序言 前言 教學(xué)建議 第1章 引論 1.1 程序設(shè)計語言的發(fā)展 1.1.1 程序設(shè)計語言 1.1.2 翻譯程序 1.2 為什么需要編譯程序 1.3 編譯程序的工作過程 1.3.1 分析部分 1.3.2 綜合部分 1.4 編譯程序的結(jié)構(gòu) 1.4.1 編譯程序的典型結(jié)構(gòu) 1.4.2 編譯程序的前端和后端 1.4.3 編譯程序的分遍 1.4.4 源程序中的錯誤及出錯處理 1.5 編譯程序的組織方式 1.6 編譯程序的其他技術(shù) 1.6.1 編譯程序的自展技術(shù) 1.6.2 編譯程序的移植技術(shù) 1.6.3 編譯程序的自動化技術(shù) 1.6.4 程序的可再入性 1.7 翻譯程序的編寫系統(tǒng) 1.8 并行編譯程序 1.9 小結(jié) 習(xí)題第2章 形式語言概論 2.1 語言成分 2.2 文法和語言 2.2.1 產(chǎn)生式文法 2.2.2 上下文無關(guān)文法 2.2.3 推導(dǎo)與直接推導(dǎo) 2.3 文法的分類 2.3.1 文法分類 2.3.2 文法分類的意義 2.3.3 文法舉例 2.4 語言和語法 2.4.1 句型、句子和語言 2.4.2 語法樹 2.4.3 產(chǎn)生式樹和產(chǎn)生式圖 2.5 文法和語言的一些特性 2.5.1 無用非終結(jié)符號 2.5.2 不可達文法符號 2.5.3 可空非終結(jié)符 2.5.4 最左推導(dǎo)、最右推導(dǎo)和規(guī)范推導(dǎo) 2.5.5 二義性 2.6 分析方法簡介 2.6.1 自頂向下分析方法 2.6.2 確定的自頂向下分析方法 2.6.3 自底向上分析方法 2.6.4 文法在內(nèi)存中的表示 2.7 小結(jié) 習(xí)題第3章 有窮自動機第4章 詞法分析第5章 自頂向下語法分析第6章 自底向上分析和優(yōu)先分析方法第7章 自底向上的LR(k)分析方法第8章 語法制導(dǎo)翻譯法第9章 運行時的存儲組織與管理第10章 符號表第11章 優(yōu)化第12章 代碼生成附錄 PL/0編譯程序源程序參考文獻
章節(jié)摘錄
版權(quán)頁:插圖:一個高級語言的編譯程序就是這個高級語言的翻譯程序。每個計算機程序都表示了某種行為,都可以完成某些特定任務(wù)。對于編譯程序的主要要求在于源程序與目標(biāo)程序的行為應(yīng)該是完全相同的。也就是說,不管由一個高級語言程序(如一個C或Java程序)轉(zhuǎn)換得來的機器語言程序的細(xì)節(jié)如何,這個高級語言程序?qū)τ谙嗤妮斎攵紤?yīng)該產(chǎn)生相同的結(jié)果,而且執(zhí)行相應(yīng)機器語言程序的結(jié)果與執(zhí)行原來高級語言程序的結(jié)果也是完全一致的。這樣,編譯程序的存在就可以使高級語言獨立于機器。程序員在使用高級語言編寫程序時不需要考慮那些與機器有關(guān)的繁瑣細(xì)節(jié),而可以把和機器有關(guān)的問題交給編譯程序去處理。眾所周知,我們不可能通過替換幾個單詞就能簡單地把一種語言翻譯成另一種語言。而必須首先分析源程序,弄清楚它的基本含義和結(jié)構(gòu)。這個過程稱為“分析”(Parsing)。然后在此基礎(chǔ)上進行一次或多次轉(zhuǎn)換,最終構(gòu)造出相應(yīng)的目標(biāo)程序。從圖1.1可知,在編譯方式中源程序的編譯和目標(biāo)程序的運行是分成兩個階段完成的。編譯所得的目標(biāo)程序,計算機暫不能直接執(zhí)行,還必須由連接裝配程序(nking-loadei)將目標(biāo)程序和系統(tǒng)子程序等連接成一個可執(zhí)行程序,這個可執(zhí)行程序則可直接被計算機執(zhí)行。由于編譯方式具有上述這些特征,因此,很多高級語言,如FORTRAN、ALGOL、PASCAL、COBOL、C、C++語言等,均采用這種編譯方式。
圖書封面
評論、評分、閱讀與下載