![]() ![]() |
編譯器構造 [美]查爾斯·N.費希爾 [美]羅恩·K.塞隆 [美]理查德·J.勒布朗 ![]() 本書面向初學者,從編譯器構造的角度進行分析,旨在幫助讀者深入理解編譯器的設計原理和方法。全書共14章,主要內(nèi)容包括:詞法分析和語法分析、語法制導翻譯、符號表和聲明處理、語義分析、虛擬機代碼、運行時支持、目標代碼生成等。全書內(nèi)容安排緊湊合理,對編譯器構造的基本知識與關鍵技術進行了深入淺出的講解,并提供了詳盡清晰的算法,倡導在實踐中學習編譯器構造的相關技術。本書不僅可作為計算機專業(yè)本科生或研究生的教材,也適合作為相關領域技術人員的參考書。 本書是一本經(jīng)典的面向本科生理解編譯原理和編譯器構造的課程教材。本書以簡潔、清晰的風格全面介紹了編譯器構造的基本知識與關鍵技術。本書的三位原作者大學擁有30余年的編譯器課程教學經(jīng)驗,根據(jù)他們豐富的教學經(jīng)驗和研究經(jīng)驗編寫了這本教材。本書結合程序語言和編譯技術的發(fā)展,以Java語言作為編譯器的分析對象,并且采用面向?qū)ο蟮脑O計模式來組織編譯器中的數(shù)據(jù)結構,在很大程度上降低了編譯器構造的復雜程度,使初學編譯器的讀者能更加容易地上手實現(xiàn)自己的編譯器。 前 言 自1988年費希爾和勒布朗合著的Crafting a Compiler出版以來,情況已經(jīng)發(fā)生了很大變化。雖然教師可能還記得那本書保存在5.25英寸軟盤上的附帶軟件,但現(xiàn)在的大多數(shù)學生既未曾擁有過也沒有見過這樣的軟盤。學生在課堂上和課外所體驗的編程語言發(fā)生了許多變化。1991年,這本書以兩種形式出現(xiàn),其中的算法用C語言或Ada語言呈現(xiàn)。雖然現(xiàn)在C語言仍然是一種流行的語言,但Ada語言已經(jīng)變得鮮為人知,沒有達到預期的流行程度。C 語言從C語言發(fā)展而來,加入了面向?qū)ο蟮奶匦。Java是作為一種更簡單的面向?qū)ο笳Z言開發(fā)的,因其安全性和能在Web瀏覽器中運行而受到歡迎。美國大學理事會指定的大學先修課程已從Pascal改為C ,而后又改為Java。 雖然發(fā)生了很多變化,但學生還在繼續(xù)學習、教師也還在繼續(xù)教授編譯器構造這一課程。編譯器和編程語言翻譯領域的研究繼續(xù)快步前進,這是因為編譯器以適應日益多樣化的體系結構和編程語言為己任。軟件開發(fā)環(huán)境也依賴于編譯器與各種軟件工具鏈組件(如語法感知編輯器、性能剖析工具和調(diào)試器)的成功互動。所有的現(xiàn)代軟件都依賴于編譯器來嚴格檢查錯誤并忠實地翻譯程序。 隨著時間的推移,一些教科書經(jīng)歷了相對較小的變化,可能增加了一些新的習題或示例。而本書則反映了1988年到1991年期間素材的大量實質(zhì)性的修訂。雖然本書的重點仍然是講授編譯器結構的基本原理,但算法和方法層面已融入最新實踐: ● 已經(jīng)從實際應用中消失的主題(例如,屬性文法)的相關內(nèi)容已被盡量壓縮或完全刪除。 有些教科書經(jīng)過修訂,增加了更多的研究生水平的素材。雖然這些內(nèi)容在高級課程中可能有用,但本書的主要讀者仍然是學習編譯器構造的本科生。研究生課程可以使用第13章和第14章的內(nèi)容,并將前面的部分作為參考材料。 偽代碼和縮寫 本書的使用方法 第10章介紹Java虛擬機(Java Virtual Machine,JVM),如果學生要在他們的項目中生成JVM代碼,就應講授這些內(nèi)容。第11章介紹虛擬機代碼生成。希望學生生成機器代碼的教師可以跳過第10章和第11章,而只講第12章和第13章。入門課程可以包括第14章開始部分有關自動程序優(yōu)化的內(nèi)容。 第4~6章中涉及語法分析技術的更多細節(jié)。第8章和第9章對類型檢查和語義分析進行了廣泛和深入的研究。第10章和第14章介紹高級概念,如靜態(tài)單賦值(Static Single Assignment,SSA)形式等。第14章涉及程序分析和轉(zhuǎn)換的高級主題,包括數(shù)據(jù)流框架。第13章和第14章可以作為研究生編譯器課程的基礎,輔以前面的章節(jié)作為參考材料。 各章概述 第1章 引言 第2章 一個簡單的編譯器 第3章 詞法分析理論與實踐 第4章 文法和語法分析 第5章 自頂向下語法分析 第6章 自底向上語法分析 第7章 語法制導翻譯 第8章 符號表和聲明處理 該章還介紹了處理符號聲明所需的語義分析,包括類型、變量、數(shù)組、結構和枚舉,同時介紹了類型檢查,包括面向?qū)ο箢、子類和超類?/p> 第9章 語義分析 第10章 中間表示 第11章 虛擬機代碼生成 雖然對生成機器碼感興趣的讀者可能會跳過第11章,但我們建議先學習這一章,然后再嘗試生成機器碼級別的代碼。第11章的思想很容易應用于第12章和第13章,但從VM的角度來看,它們更容易理解。 第12章 運行時支持 第13章 目標代碼生成 第14章 程序優(yōu)化 查爾斯·N.費希爾 (Charles N.Fischer) 美國威斯康星大學計算機科學系教授,長期為本科生和研究生講授編譯原理相關課程。研究興趣為編譯器設計與實現(xiàn)。 羅恩·K.塞隆 (Ron K.Cytron) 美國圣路易斯華盛頓大學計算機科學與工程系教授,研究興趣為實時系統(tǒng)與程序設計語言。 理查德·J.勒布朗 (Richard J.LeBlanc,Jr.) 美國佐治亞理工學院計算機系教授,主講編譯器與解釋器方面的課程。曾任ACM教育委員會委員,是SE2004教育規(guī)范委員會副主席。 王剛,南開大學計算機學院教授、博士生導師。主要講授程序設計、算法、編譯、并行計算方面的課程。研究興趣包括計算機理論、海量信息存儲、并行與分布式計算、搜索引擎等,特別是在分布式存儲系統(tǒng)可靠性技術、云存儲用戶數(shù)據(jù)隱私保護、搜索引擎性能優(yōu)化等方向取得了一系列重要成果。近年來在計算機領域的國際頂尖學術期刊及國際頂級學術會議發(fā)表學術論文。主持國家863項目、國家自然科學基金項目、天津市自然科學基金項目等,主持與百度公司、奇虎360公司、華為公司等合作項目,F(xiàn)為IEEE/ACM/中國計算機學會會員、中國計算機學會信息存儲專委會委員、中國計算機學會理論計算機專委會委員。 目 錄
你還可能感興趣
我要評論
|