出版時間:2010-1 出版社:機械工業(yè)出版社 作者:Thomas Pittman,James Peters 頁數:341
Tag標簽:無
前言
實用且復雜的現代信息系統并不是從累積的偶然事件中發(fā)展起來的。編譯程序作為一個實用的信息系統,只有經過精心設計,才能以簡單的措辭理解其復雜性。不僅未經設計的編譯程序會有功能缺陷,編譯程序理論本身還依賴于它與兩種理論之間的一種微妙關系,其中一種理論是源自人類自然語言的語言學原理,另一種理論是將計算機看作有窮狀態(tài)自動機。理解并利用這一關系需在文法理論的基本原理方面有扎實的根基,并熟練掌握其機械化實現過程。因而編譯程序設計的教學亦涉及一個復雜的信息系統,需精心設計才能以連貫、合理的次序展示相關概念,從而讓學生體會到編譯程序設計的內容既是相關的,也是可管理的?! ”緯⒎且槐驹噲D以所有可能的方法去構造所有可能的編譯程序的百科全書,而是依次介紹編譯程序設計中的最基本問題;其內容的深度足以讓勤奮的學生有能力通過手工方式或使用編譯程序生成工具(亦或兩種方式之結合),構造實用且高效的編譯程序。更重要的是,學生將明白這些工具是如何工作的,以及為什么必須以某種方式書寫文法方可取得預期的結果。這正是設計的原則。因此,盡管大多數現代分析程序生成工具采用自底向上分析技術,但本書深入研究有更多限制的自頂向下分析理論,然后才利用相對簡短(但完整)的一章內容學習自底向上分析程序。本書每…章的目標都是先灌輸對基本概念的理解,然后再將這些概念應用到實踐中?! ∨c同類教材相比,本書在四個重要方面有顯著特色。第一個特色是,它堅定不移地扎根于文法,一開始就介紹文法和語言識別器之間的理論關系,然后貫穿全書將文法技術應用到編譯程序設計的每一方面。第二個特色是,統一將實用的屬性文法作為編譯程序語義的載體,堅持這一立場自然會產生一個完全由屬性文法定義的、可編譯其自身的“編譯程序一編譯程序”,這正是本書最后一章的重點。第三個特色是,具有非常實用的特征,編譯程序的設計必須以屬性文法定義,而編譯程序的構造則需要可執(zhí)行的代碼,并且每一個重要的理論原則均需通過一種真實程序設計語言的大量代碼清單加以闡明,不斷展示文法與機器代碼之間極其自然的關系。第四個特色是,選擇Modula-2作為演示代碼的程序設計語言,旨在概念抽象與具體效率之間取得平衡;與C語言等更低級的語言相比,應用本書后幾章所介紹的優(yōu)化技術能以更低的開銷更顯著地提高Modula-2程序的效率?! ”緯捎糜谝粚W期的編譯原理入門課程,重點介紹前6章或前7章。本書亦可用于整學年的學習,更好地涉獵更多的高級課題。一學期的課程學習可安排在半年或一個季度的時間內完成;經過不斷優(yōu)化和實際教學檢驗,本書循序漸進地布置學生實驗項目,并在期末完成一個町工作的Itty Bitty Modula編譯程序,該編譯程序可在最終的實驗項目中用于編譯另一個分析程序,例如第6章最后概述的美化打印工具或Tiny BASIC語言解釋程序。
內容概要
本書詳細介紹了編譯程序設計中的詞法分析(掃描程序)、語法分析(分析程序)、語義分析(約束程序)、中間代碼優(yōu)化以及代碼生成等內容。作為頗受好評的編譯原理優(yōu)秀入門教材,本書的最大特色是在全書貫穿了一種基于文法的指導思路:在語法分析階段,該書遵循了一般教材采用的上下文無關文法;在語義分析階段,采用以上下文無關文法為基礎的屬性文法;而在代碼優(yōu)化和代碼生成階段,則采用了變換屬性文法。書中最后還給出變換屬性文法的一種自編譯實現。此外,本書還探討了面向不同計算機體系結構的代碼生成技術以及非過程式語言的編譯問題。 本書適合作為高等院校計算機科學與技術、軟件工程以及相關專業(yè)編譯原理課程的教學參考書,同時也可供計算機語言及其處理技術愛好者參考。
書籍目錄
出版者的話譯者序前言第1章 編譯程序理論概述 1.1 簡介 1.2 語言與翻譯程序 1.3 文法的作用 1.4 若干例子 1.5 編譯程序的結構 1.5.1 詞法分析 1.5.2 字符串表 1.5.3 語法分析 1.5.4 約束 1.5.5 符號表 1.5.6 代碼生成 1.5.7 優(yōu)化 符號 縮略詞 關鍵術語 練習 復習小測驗 編譯程序實驗項目 進一步閱讀第2章 文法:喬姆斯基層次 2.1 簡介 2.2 文法 2.2.1 字母表與串 2.2.2 非終結符與產生式 2.2.3 若干文法例子 2.3 喬姆斯基層次 2.4 文法及其機器 2.4.1 圖靈機 2.4.2 線性有界自動機 2.4.3 下推自動機 2.4.4 刪除空產生式 2.4.5 比較上下文無關文法和上下文敏感文法 2.4.6 有窮狀態(tài)自動機 2.5 空串與空語言 2.6 規(guī)范推導 2.7 二義性 2.8 文法思維的藝術 2.8.1 有窮狀態(tài)自動機的局限性 2.8.2 上下文無關文法的計數 2.8.3 對上下文敏感 小結 符號 縮略詞 關鍵術語 練習 復習小測驗 編譯程序實驗項目 進一步閱讀第3章 掃描程序和正則語言 3.1 詞法分析簡介 3.2 正則表達式 3.2.1 正則表達式代數 3.2.2 正則表達式的形式化特性 3.3 文法與正則表達式的轉換 3.4 有窮狀態(tài)自動機 3.5 不確定的有窮狀態(tài)自動機 3.6 將文法轉換為自動機 3.7 自動機的轉換 3.7.1 刪除空環(huán)路 3.7.2 刪除空變遷 3.7.3 自動機的確定化 3.7.4 自動機的約簡 ……第4章 分析程序和上下文無關語言第5章 語義分析與屬性文法第6章 語法制導代碼生成第7章 自底向上分析程序的自動化設計第8章 變換屬性文法第9章 代碼生成與優(yōu)化第10章 非過程式語言附錄A Itty Bitty Modula語法圖附錄B TAG編譯程序的TAG附錄C Itty Bitty線機器的指令集附錄D 四種計算機的代碼生成表
章節(jié)摘錄
編譯程序是一個扮演著翻譯人員角色的計算機程序,它讀入某一計算機語言的語句,如果這些語句在該語言中是有意義的,則將它們翻譯為含義相同的另一計算機語言的語句。有一些規(guī)則定義了每一種語言中什么是有意義的,編譯程序運用這些規(guī)則確定其輸入是否有意義,并保證其輸出是有意義的。使用計算機語言編寫的一系列語句組成一個程序;編譯程序將一種計算機語言(稱為源語言)的程序翻譯為另一種計算機語言(稱為目標語言)的程序(即語句序列)?! 嶋H上存在多種計算機語言以及計算機語言的翻譯程序。最簡單的翻譯程序是讀入一種用簡單計算機語言書寫的單詞,然后將這些單詞直接翻譯為計算機指令代碼中的數字。這種翻譯程序稱為匯編程序,其源語言稱為匯編語言。這一命名緣于大多數機器指令由幾個部分組成,匯編語言采用不同的單詞或數字表示每一部分,匯編程序則將這些部分組裝成一個數值代碼。匯編程序充其量不過是一個表查找例程,在表中查找源語言中每一單詞對應的數字表示,并將查找結果輸出,作為目標語言程序的組成部分。匯編語言通常使得程序員可準確、直接地訪問計算機硬件的每~功能;然而與大多數其他計算機語言相比,使用匯編語言編寫正確的程序是相當困難的?! 熬幾g程序”這一術語一般留給更復雜的語言使用,其中源語言單詞和目標語言之間不存在簡潔而直接的對應關系。大多數編譯程序的目標語言通常也是機器語言,這與匯編程序的目標語言相同;計算機語言翻譯程序的目的固然是簡化創(chuàng)建機器語言程序的過程,但許多早期的編譯程序、甚至一些現代的編譯程序都先編譯為匯編語言,然后借助于匯編程序完成匯編語言到機器語言的翻譯。然而,編譯程序的源程序通常是所謂的高級語言(簡稱HLL),高級語言的特點是更接近于問題求解的表示法,而不是機器語言。例如,對于商業(yè)應用而言,COBOL(COmmon Business Oriented Language)語言采用會計人員和中層管理人員易于理解的術語;而科學計算問題往往表述為公式,FORTRAN(FORmula TRANslator)語言被認為更適合表達這些公式。現在一些程序員更喜歡一種語言既有高級語言中更抽象的結構,又帶有匯編程序支持的低層控制,為此他們使用C語言(得名于它作為早期B語言的下一代語言)。程序設計方法學的最新進展提倡模塊化軟件設計,Modula-2語言非常強調這一特性?! 〗忉尦绦蛟谀承┓矫骖愃朴诜g程序,它也讀入一個高級語言的程序,但立即進行翻譯,就好像翻譯人員的口譯一樣立即可聽到和理解。編譯程序將一個計算機程序翻譯為稍后再執(zhí)行的機器代碼,而解釋程序則邊讀入、邊執(zhí)行程序。從某種意義上講,解釋程序從來沒有真正地完成翻譯過程,就好像前述例子中的翻譯人員,當他聽到“Peter,hit the ball!”的指示后,并不回應“Pierre,frappa la balle!”,而是徑自走過去擊球。由于解釋程序不必關注目標語言,它可以比編譯程序更快地處理一行輸入程序。解釋程序必須反復讀入其輸入程序以計算結果,但編譯程序僅將輸入程序翻譯一次。編譯程序首次運行計算機程序并得到結果要花費更長時間,但后續(xù)的運行則遠快于解釋程序,因為此時不再需要額外的翻譯時間?! ”緯闹攸c放在編譯程序的設計上,但某些練習也包含了解釋程序。
編輯推薦
●堅定不移地扎根于文法,一開始就介紹文法和語言識別器之間的理論關系,然后貫穿全書將文法技術應用到編譯程序設計的每一方面?! 窠y一將實用的屬性文法作為編譯程序語義的載體,堅持這一立場自然會產生一個完全由屬性文法定義的、可編譯其自身的“編譯程序一編譯程序”?! 窬哂蟹浅嵱帽卣鳎幾g程序的“設計”必須以屬性文法定義,而編譯程序的“構造”則需要可執(zhí)行的代碼,并且每一個重要的理論原則均需通過一種真實程序設計語言的大量代碼清單加以闡明,不斷展示文法與機器代碼之間極其自然的關系。 ●選擇Modula-2作為演示代碼的程序設計語言.旨在概念抽象與具體效率之間取得平衡。
圖書封面
圖書標簽Tags
無
評論、評分、閱讀與下載