編譯程序設(shè)計藝術(shù)理論與實踐

出版時間:2010-1  出版社:機(jī)械工業(yè)出版社  作者:Thomas Pittman,James Peters  頁數(shù):341  
Tag標(biāo)簽:無  

前言

  實用且復(fù)雜的現(xiàn)代信息系統(tǒng)并不是從累積的偶然事件中發(fā)展起來的。編譯程序作為一個實用的信息系統(tǒng),只有經(jīng)過精心設(shè)計,才能以簡單的措辭理解其復(fù)雜性。不僅未經(jīng)設(shè)計的編譯程序會有功能缺陷,編譯程序理論本身還依賴于它與兩種理論之間的一種微妙關(guān)系,其中一種理論是源自人類自然語言的語言學(xué)原理,另一種理論是將計算機(jī)看作有窮狀態(tài)自動機(jī)。理解并利用這一關(guān)系需在文法理論的基本原理方面有扎實的根基,并熟練掌握其機(jī)械化實現(xiàn)過程。因而編譯程序設(shè)計的教學(xué)亦涉及一個復(fù)雜的信息系統(tǒng),需精心設(shè)計才能以連貫、合理的次序展示相關(guān)概念,從而讓學(xué)生體會到編譯程序設(shè)計的內(nèi)容既是相關(guān)的,也是可管理的?! ”緯⒎且槐驹噲D以所有可能的方法去構(gòu)造所有可能的編譯程序的百科全書,而是依次介紹編譯程序設(shè)計中的最基本問題;其內(nèi)容的深度足以讓勤奮的學(xué)生有能力通過手工方式或使用編譯程序生成工具(亦或兩種方式之結(jié)合),構(gòu)造實用且高效的編譯程序。更重要的是,學(xué)生將明白這些工具是如何工作的,以及為什么必須以某種方式書寫文法方可取得預(yù)期的結(jié)果。這正是設(shè)計的原則。因此,盡管大多數(shù)現(xiàn)代分析程序生成工具采用自底向上分析技術(shù),但本書深入研究有更多限制的自頂向下分析理論,然后才利用相對簡短(但完整)的一章內(nèi)容學(xué)習(xí)自底向上分析程序。本書每…章的目標(biāo)都是先灌輸對基本概念的理解,然后再將這些概念應(yīng)用到實踐中?! ∨c同類教材相比,本書在四個重要方面有顯著特色。第一個特色是,它堅定不移地扎根于文法,一開始就介紹文法和語言識別器之間的理論關(guān)系,然后貫穿全書將文法技術(shù)應(yīng)用到編譯程序設(shè)計的每一方面。第二個特色是,統(tǒng)一將實用的屬性文法作為編譯程序語義的載體,堅持這一立場自然會產(chǎn)生一個完全由屬性文法定義的、可編譯其自身的“編譯程序一編譯程序”,這正是本書最后一章的重點。第三個特色是,具有非常實用的特征,編譯程序的設(shè)計必須以屬性文法定義,而編譯程序的構(gòu)造則需要可執(zhí)行的代碼,并且每一個重要的理論原則均需通過一種真實程序設(shè)計語言的大量代碼清單加以闡明,不斷展示文法與機(jī)器代碼之間極其自然的關(guān)系。第四個特色是,選擇Modula-2作為演示代碼的程序設(shè)計語言,旨在概念抽象與具體效率之間取得平衡;與C語言等更低級的語言相比,應(yīng)用本書后幾章所介紹的優(yōu)化技術(shù)能以更低的開銷更顯著地提高M(jìn)odula-2程序的效率。  本書可用于一學(xué)期的編譯原理入門課程,重點介紹前6章或前7章。本書亦可用于整學(xué)年的學(xué)習(xí),更好地涉獵更多的高級課題。一學(xué)期的課程學(xué)習(xí)可安排在半年或一個季度的時間內(nèi)完成;經(jīng)過不斷優(yōu)化和實際教學(xué)檢驗,本書循序漸進(jìn)地布置學(xué)生實驗項目,并在期末完成一個町工作的Itty Bitty Modula編譯程序,該編譯程序可在最終的實驗項目中用于編譯另一個分析程序,例如第6章最后概述的美化打印工具或Tiny BASIC語言解釋程序。

內(nèi)容概要

本書詳細(xì)介紹了編譯程序設(shè)計中的詞法分析(掃描程序)、語法分析(分析程序)、語義分析(約束程序)、中間代碼優(yōu)化以及代碼生成等內(nèi)容。作為頗受好評的編譯原理優(yōu)秀入門教材,本書的最大特色是在全書貫穿了一種基于文法的指導(dǎo)思路:在語法分析階段,該書遵循了一般教材采用的上下文無關(guān)文法;在語義分析階段,采用以上下文無關(guān)文法為基礎(chǔ)的屬性文法;而在代碼優(yōu)化和代碼生成階段,則采用了變換屬性文法。書中最后還給出變換屬性文法的一種自編譯實現(xiàn)。此外,本書還探討了面向不同計算機(jī)體系結(jié)構(gòu)的代碼生成技術(shù)以及非過程式語言的編譯問題。    本書適合作為高等院校計算機(jī)科學(xué)與技術(shù)、軟件工程以及相關(guān)專業(yè)編譯原理課程的教學(xué)參考書,同時也可供計算機(jī)語言及其處理技術(shù)愛好者參考。

書籍目錄

出版者的話譯者序前言第1章  編譯程序理論概述 1.1  簡介 1.2 語言與翻譯程序 1.3 文法的作用 1.4 若干例子 1.5 編譯程序的結(jié)構(gòu)  1.5.1 詞法分析  1.5.2 字符串表  1.5.3 語法分析  1.5.4 約束  1.5.5 符號表  1.5.6 代碼生成  1.5.7 優(yōu)化 符號 縮略詞 關(guān)鍵術(shù)語 練習(xí) 復(fù)習(xí)小測驗 編譯程序?qū)嶒烅椖俊∵M(jìn)一步閱讀第2章  文法:喬姆斯基層次 2.1  簡介 2.2  文法  2.2.1 字母表與串  2.2.2 非終結(jié)符與產(chǎn)生式  2.2.3 若干文法例子 2.3 喬姆斯基層次 2.4 文法及其機(jī)器  2.4.1  圖靈機(jī)  2.4.2 線性有界自動機(jī)  2.4.3 下推自動機(jī)  2.4.4 刪除空產(chǎn)生式  2.4.5  比較上下文無關(guān)文法和上下文敏感文法  2.4.6 有窮狀態(tài)自動機(jī) 2.5 空串與空語言 2.6 規(guī)范推導(dǎo) 2.7 二義性 2.8 文法思維的藝術(shù)  2.8.1 有窮狀態(tài)自動機(jī)的局限性  2.8.2 上下文無關(guān)文法的計數(shù)  2.8.3 對上下文敏感 小結(jié) 符號 縮略詞 關(guān)鍵術(shù)語 練習(xí) 復(fù)習(xí)小測驗 編譯程序?qū)嶒烅椖俊∵M(jìn)一步閱讀第3章  掃描程序和正則語言 3.1 詞法分析簡介 3.2 正則表達(dá)式  3.2.1  正則表達(dá)式代數(shù)  3.2.2  正則表達(dá)式的形式化特性 3.3 文法與正則表達(dá)式的轉(zhuǎn)換 3.4 有窮狀態(tài)自動機(jī) 3.5 不確定的有窮狀態(tài)自動機(jī) 3.6 將文法轉(zhuǎn)換為自動機(jī) 3.7  自動機(jī)的轉(zhuǎn)換  3.7.1 刪除空環(huán)路  3.7.2 刪除空變遷  3.7.3  自動機(jī)的確定化  3.7.4  自動機(jī)的約簡 ……第4章 分析程序和上下文無關(guān)語言第5章 語義分析與屬性文法第6章 語法制導(dǎo)代碼生成第7章 自底向上分析程序的自動化設(shè)計第8章 變換屬性文法第9章 代碼生成與優(yōu)化第10章 非過程式語言附錄A Itty Bitty Modula語法圖附錄B TAG編譯程序的TAG附錄C Itty Bitty線機(jī)器的指令集附錄D 四種計算機(jī)的代碼生成表

章節(jié)摘錄

  編譯程序是一個扮演著翻譯人員角色的計算機(jī)程序,它讀入某一計算機(jī)語言的語句,如果這些語句在該語言中是有意義的,則將它們翻譯為含義相同的另一計算機(jī)語言的語句。有一些規(guī)則定義了每一種語言中什么是有意義的,編譯程序運(yùn)用這些規(guī)則確定其輸入是否有意義,并保證其輸出是有意義的。使用計算機(jī)語言編寫的一系列語句組成一個程序;編譯程序?qū)⒁环N計算機(jī)語言(稱為源語言)的程序翻譯為另一種計算機(jī)語言(稱為目標(biāo)語言)的程序(即語句序列)。  實際上存在多種計算機(jī)語言以及計算機(jī)語言的翻譯程序。最簡單的翻譯程序是讀入一種用簡單計算機(jī)語言書寫的單詞,然后將這些單詞直接翻譯為計算機(jī)指令代碼中的數(shù)字。這種翻譯程序稱為匯編程序,其源語言稱為匯編語言。這一命名緣于大多數(shù)機(jī)器指令由幾個部分組成,匯編語言采用不同的單詞或數(shù)字表示每一部分,匯編程序則將這些部分組裝成一個數(shù)值代碼。匯編程序充其量不過是一個表查找例程,在表中查找源語言中每一單詞對應(yīng)的數(shù)字表示,并將查找結(jié)果輸出,作為目標(biāo)語言程序的組成部分。匯編語言通常使得程序員可準(zhǔn)確、直接地訪問計算機(jī)硬件的每~功能;然而與大多數(shù)其他計算機(jī)語言相比,使用匯編語言編寫正確的程序是相當(dāng)困難的?!  熬幾g程序”這一術(shù)語一般留給更復(fù)雜的語言使用,其中源語言單詞和目標(biāo)語言之間不存在簡潔而直接的對應(yīng)關(guān)系。大多數(shù)編譯程序的目標(biāo)語言通常也是機(jī)器語言,這與匯編程序的目標(biāo)語言相同;計算機(jī)語言翻譯程序的目的固然是簡化創(chuàng)建機(jī)器語言程序的過程,但許多早期的編譯程序、甚至一些現(xiàn)代的編譯程序都先編譯為匯編語言,然后借助于匯編程序完成匯編語言到機(jī)器語言的翻譯。然而,編譯程序的源程序通常是所謂的高級語言(簡稱HLL),高級語言的特點是更接近于問題求解的表示法,而不是機(jī)器語言。例如,對于商業(yè)應(yīng)用而言,COBOL(COmmon Business Oriented Language)語言采用會計人員和中層管理人員易于理解的術(shù)語;而科學(xué)計算問題往往表述為公式,F(xiàn)ORTRAN(FORmula TRANslator)語言被認(rèn)為更適合表達(dá)這些公式。現(xiàn)在一些程序員更喜歡一種語言既有高級語言中更抽象的結(jié)構(gòu),又帶有匯編程序支持的低層控制,為此他們使用C語言(得名于它作為早期B語言的下一代語言)。程序設(shè)計方法學(xué)的最新進(jìn)展提倡模塊化軟件設(shè)計,Modula-2語言非常強(qiáng)調(diào)這一特性?! 〗忉尦绦蛟谀承┓矫骖愃朴诜g程序,它也讀入一個高級語言的程序,但立即進(jìn)行翻譯,就好像翻譯人員的口譯一樣立即可聽到和理解。編譯程序?qū)⒁粋€計算機(jī)程序翻譯為稍后再執(zhí)行的機(jī)器代碼,而解釋程序則邊讀入、邊執(zhí)行程序。從某種意義上講,解釋程序從來沒有真正地完成翻譯過程,就好像前述例子中的翻譯人員,當(dāng)他聽到“Peter,hit the ball!”的指示后,并不回應(yīng)“Pierre,frappa la balle!”,而是徑自走過去擊球。由于解釋程序不必關(guān)注目標(biāo)語言,它可以比編譯程序更快地處理一行輸入程序。解釋程序必須反復(fù)讀入其輸入程序以計算結(jié)果,但編譯程序僅將輸入程序翻譯一次。編譯程序首次運(yùn)行計算機(jī)程序并得到結(jié)果要花費更長時間,但后續(xù)的運(yùn)行則遠(yuǎn)快于解釋程序,因為此時不再需要額外的翻譯時間。  本書的重點放在編譯程序的設(shè)計上,但某些練習(xí)也包含了解釋程序。

編輯推薦

  ●堅定不移地扎根于文法,一開始就介紹文法和語言識別器之間的理論關(guān)系,然后貫穿全書將文法技術(shù)應(yīng)用到編譯程序設(shè)計的每一方面?!  窠y(tǒng)一將實用的屬性文法作為編譯程序語義的載體,堅持這一立場自然會產(chǎn)生一個完全由屬性文法定義的、可編譯其自身的“編譯程序一編譯程序”?!  窬哂蟹浅嵱帽卣鳎幾g程序的“設(shè)計”必須以屬性文法定義,而編譯程序的“構(gòu)造”則需要可執(zhí)行的代碼,并且每一個重要的理論原則均需通過一種真實程序設(shè)計語言的大量代碼清單加以闡明,不斷展示文法與機(jī)器代碼之間極其自然的關(guān)系?!  襁x擇Modula-2作為演示代碼的程序設(shè)計語言.旨在概念抽象與具體效率之間取得平衡。

圖書封面

圖書標(biāo)簽Tags

評論、評分、閱讀與下載


    編譯程序設(shè)計藝術(shù)理論與實踐 PDF格式下載


用戶評論 (總計1條)

 
 

  •   與以前見的編譯理論的書風(fēng)格不太一樣,給人耳目一新的感覺。
 

250萬本中文圖書簡介、評論、評分,PDF格式免費下載。 第一圖書網(wǎng) 手機(jī)版

京ICP備13047387號-7