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