出版時(shí)間:2011-1 出版社:機(jī)械工業(yè)出版社 作者:裘巍 頁數(shù):449
Tag標(biāo)簽:無
前言
與其他自然科學(xué)相比,計(jì)算機(jī)科學(xué)的發(fā)展歷史并不久遠(yuǎn),是較新的學(xué)科體系,尚有許多未知的領(lǐng)域有待探索。因此,本專業(yè)學(xué)生或工程技術(shù)人員僅僅滿足于學(xué)習(xí)或應(yīng)用幾門程序設(shè)計(jì)語言是遠(yuǎn)遠(yuǎn)不夠的。一些看似抽象的課程才是提高專業(yè)人員“內(nèi)功”修為的秘技,例如數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)、編譯原理、計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)、計(jì)算機(jī)網(wǎng)絡(luò)等。不過,經(jīng)典課程的學(xué)習(xí)并不是一蹴而就的,如何學(xué)習(xí)與理解課程的精髓是值得關(guān)注的。本書將從編譯器設(shè)計(jì)的角度,為讀者揭示編譯原理的精髓。學(xué)習(xí)編譯技術(shù)的意義有人認(rèn)為,編譯技術(shù)似乎已經(jīng)相當(dāng)成熟了,繼續(xù)深入研究是沒有任何意義的。實(shí)際上,任何科學(xué)技術(shù)都是發(fā)展變化的。表面上看,編譯器設(shè)計(jì)的高層問題似乎已經(jīng)形成了完美的體系,但當(dāng)我們深入其內(nèi)核就會發(fā)現(xiàn)事實(shí)并非如此?,F(xiàn)代編譯器設(shè)計(jì)面臨的挑戰(zhàn)是來自目標(biāo)計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)、新穎程序設(shè)計(jì)語言及本身的計(jì)算資源等多方面的。其中,任何一方面的因素都足以顛覆某些傳統(tǒng)理論與算法。例如,在現(xiàn)代編譯器設(shè)計(jì)中,計(jì)算資源的增加允許設(shè)計(jì)者采用更耗費(fèi)時(shí)間、空間的算法,而不必過分關(guān)注其代價(jià)。對于優(yōu)化算法設(shè)計(jì)者而言,這是令人興奮的。為了追求目標(biāo)代碼的更優(yōu),即使設(shè)計(jì)一些時(shí)空復(fù)雜度稍高的算法也是可以接受的。當(dāng)然,從更高的層次上講,學(xué)習(xí)編譯器設(shè)計(jì)的目的還不僅僅局限于其本身的理論與技術(shù)。作為一個(gè)系統(tǒng)軟件的設(shè)計(jì)學(xué)科,其解決問題的思路與方法更是值得讀者細(xì)細(xì)品味的。這可能是一個(gè)漫長而艱辛的歷程,不過,這才是經(jīng)典學(xué)科的魅力所在。以品味經(jīng)典為目的來學(xué)習(xí)與研究操作系統(tǒng)、數(shù)據(jù)庫技術(shù)、計(jì)算機(jī)網(wǎng)絡(luò)、編譯技術(shù)等學(xué)科是筆者多年來的努力方向。從20世紀(jì)50年代中期以來,編譯器設(shè)計(jì)就一直是計(jì)算機(jī)科學(xué)界的一個(gè)重要研究領(lǐng)域。Fortran語言之父John Backus認(rèn)為,除非編譯器生成的代碼與手工編寫的機(jī)器代碼的性能非常接近,否則程序員就不會放棄匯編語言程序設(shè)計(jì)的思想與方法,這就是編譯技術(shù)研究的源動力。從學(xué)術(shù)研究的角度講,眾所周知,圖靈獎被譽(yù)為“計(jì)算機(jī)界的諾貝爾獎”,自1966年設(shè)立至今,54位獲獎?wù)咧芯陀?6位是由于程序設(shè)計(jì)語言及編譯技術(shù)的研究成果而獲此殊榮的。編譯技術(shù)在計(jì)算機(jī)科學(xué)領(lǐng)域的地位由此可見一斑。
內(nèi)容概要
本書系統(tǒng)地介紹了一個(gè)實(shí)際的Pascal編譯器Neo Pascal的設(shè)計(jì)與實(shí)現(xiàn)。結(jié)合Neo Pascal的源代碼,詳細(xì)講述了LL(1)語法分析器、符號表系統(tǒng)、中間表示、類型系統(tǒng)、優(yōu)化技術(shù)、運(yùn)行時(shí)刻的存儲管理、代碼生成器等編譯器設(shè)計(jì)的核心話題。各章都附有少量以實(shí)踐應(yīng)用為主的練習(xí)題,既可作為閱讀思考題,也可作為課程設(shè)計(jì)選題。 與國內(nèi)其他介紹編譯技術(shù)的圖書相比,本書更關(guān)注的是編譯器的實(shí)現(xiàn)細(xì)節(jié),而不僅僅局限于理論闡述。本書可供從事編譯器設(shè)計(jì)相關(guān)工作的工程人員閱讀,也可作為高等院校計(jì)算機(jī)專業(yè)的編譯原理課程參考書?! ∽x者可在http://neopascal.sourceforge.net獲得Neo Pascal的源代碼及相關(guān)文檔。
書籍目錄
出版說明前言第1章 概述 1.1 編譯技術(shù)概述 1.1.1 程序設(shè)計(jì)語言基礎(chǔ) 1.1.2 程序設(shè)計(jì)語言的翻譯機(jī)制 1.1.3 編譯器的基本結(jié)構(gòu) 1.2 Pascal語言基礎(chǔ) 1.2.1 Pascal語言簡介 1.2.2 Pascal程序基本組成 1.2.3 Pascal的聲明部分 1.2.4 Pascal的類型 1.2.5 Pascal的運(yùn)算符 1.2.6 Pascal的語句 1.3 開發(fā)環(huán)境與Delphi基礎(chǔ) 1.3.1 開發(fā)環(huán)境與文件列表 1.3.2 Delphi基礎(chǔ) 1.4 深入學(xué)習(xí) 1.5 實(shí)踐與思考 1.6 大師風(fēng)采--Niklaus Wirth 第2章 詞法分析 2.1 詞法分析概述 2.1.1 詞法分析的任務(wù) 2.1.2 單詞的分類 2.2 詞法分析器的設(shè)計(jì) 2.2.1 識別單詞 2.2.2 轉(zhuǎn)換圖 2.2.3 構(gòu)造詞法分析器 2.3 詞法分析器的實(shí)現(xiàn) 2.3.1 詞法定義 2.3.2 構(gòu)造轉(zhuǎn)換圖與轉(zhuǎn)換表 2.3.3 相關(guān)數(shù)據(jù)結(jié)構(gòu) 2.3.4 源代碼實(shí)現(xiàn) 2.4 深入學(xué)習(xí) 2.5 實(shí)踐與思考 2.6 大師風(fēng)采--Dennis M. Ritchie 第3章 語法分析 3.1 程序設(shè)計(jì)語言的語法描述 3.1.1 上下文無關(guān)文法 3.1.2 推導(dǎo) 3.1.3 語法樹 3.1.4 歸約簡介 3.2 語法分析概述 3.2.1 語法分析的任務(wù) 3.2.2 自上而下的語法分析法 3.2.3 構(gòu)造語法分析器 3.3 語法分析器的實(shí)現(xiàn) ……第4章 符號表系統(tǒng) 第5章 中間表示 第6章 表達(dá)式語義 第7章 優(yōu)化技術(shù) 第8章 運(yùn)行時(shí)刻的存儲管理 第9章 目標(biāo)代碼生成 第10章 GCC內(nèi)核與現(xiàn)代編譯參考文獻(xiàn)
章節(jié)摘錄
插圖:迄今為止,程序設(shè)計(jì)語言仍是人類與計(jì)算機(jī)交流的主要途徑,它的應(yīng)用領(lǐng)域也僅限于操縱與控制計(jì)算機(jī)。從第一臺計(jì)算機(jī)誕生之日起,人類就始終在探索一種有效的方式與計(jì)算機(jī)進(jìn)行對話交流,使之能為人類服務(wù)。雖然時(shí)隔數(shù)十年,計(jì)算機(jī)能識別與處理的語言仍然是二進(jìn)制形式的機(jī)器語言描述的源程序。當(dāng)然,不可否認(rèn)二進(jìn)制機(jī)器語言的優(yōu)點(diǎn)非常多,但機(jī)器語言的易用性差也是不可回避的。即使是計(jì)算機(jī)專家想直接使用機(jī)器語言與計(jì)算機(jī)進(jìn)行交流也是非常困難的。在20世紀(jì)50年代,計(jì)算機(jī)科學(xué)家們就已經(jīng)意識到必須解決這一棘手的問題,否則計(jì)算機(jī)將無法得到普及。經(jīng)過多年努力,匯編語言、C、Pascal等程序設(shè)計(jì)語言終于橫空出世。根據(jù)語言的形式與特點(diǎn),習(xí)慣上,將機(jī)器語言與匯編語言(一種比較接近機(jī)器語言的程序設(shè)計(jì)語言)稱為低級語言,將其余的C、Pascal之類的語言稱為高級語言。讀者必須注意,低級語言與高級語言之分并不是說明語言本身的優(yōu)劣,僅僅是說明語言的形式與機(jī)器語言的相似程度。所謂低級語言指的是與機(jī)器語言比較類似的語言,而高級語言指的是與機(jī)器語言差別較大而與自然語言比較類似的語言。由于這些非機(jī)器語言的誕生,也就出現(xiàn)了將非機(jī)器語言等價(jià)翻譯成機(jī)器語言的需求。顯然,將非機(jī)器語言翻譯成機(jī)器語言的工作不能由手工完成,否則,非機(jī)器語言的產(chǎn)生就沒有任何意義了。因此,人們試圖借助于一個(gè)程序工具自動完成翻譯工作。根據(jù)語言不同,翻譯工具的復(fù)雜程度也不盡相同。比如,匯編語言比較接近機(jī)器語言,所以其翻譯工具較易實(shí)現(xiàn)。而高級語言與機(jī)器語言差別較大,所以其翻譯工具的實(shí)現(xiàn)也較為復(fù)雜。習(xí)慣上,將前者稱為匯編器,而將后者稱為編譯器。當(dāng)然,有些書上對于匯編器與編譯器并沒有嚴(yán)格區(qū)分,都將其稱為編譯器,反正這只是一個(gè)名詞而已,讀者不必深究。編譯器的源語言是一種較為高級的程序設(shè)計(jì)語言,而目標(biāo)語言可以是匯編語言、機(jī)器語言或者另一種高級語言。筆者必須澄清~點(diǎn),人們普遍認(rèn)為編譯器的目標(biāo)語言就是低級語言,這個(gè)觀點(diǎn)的確沒有錯(cuò),但并不完整。
編輯推薦
《編譯器設(shè)計(jì)之路》:完整介紹一個(gè)實(shí)際編譯器Neo Pascal的設(shè)計(jì)與實(shí)現(xiàn),詳細(xì)講述LL(1)分析器、符號表系統(tǒng)、優(yōu)化等核心話題。闡述系統(tǒng)軟件的設(shè)計(jì)觀點(diǎn)探討現(xiàn)代編譯技術(shù)熱點(diǎn)提供編譯器全部源代碼
圖書封面
圖書標(biāo)簽Tags
無
評論、評分、閱讀與下載