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