編譯器設計之路

出版時間:2011-1  出版社:機械工業(yè)出版社  作者:裘巍  頁數:449  
Tag標簽:無  

前言

與其他自然科學相比,計算機科學的發(fā)展歷史并不久遠,是較新的學科體系,尚有許多未知的領域有待探索。因此,本專業(yè)學生或工程技術人員僅僅滿足于學習或應用幾門程序設計語言是遠遠不夠的。一些看似抽象的課程才是提高專業(yè)人員“內功”修為的秘技,例如數據結構、操作系統、編譯原理、計算機系統結構、計算機網絡等。不過,經典課程的學習并不是一蹴而就的,如何學習與理解課程的精髓是值得關注的。本書將從編譯器設計的角度,為讀者揭示編譯原理的精髓。學習編譯技術的意義有人認為,編譯技術似乎已經相當成熟了,繼續(xù)深入研究是沒有任何意義的。實際上,任何科學技術都是發(fā)展變化的。表面上看,編譯器設計的高層問題似乎已經形成了完美的體系,但當我們深入其內核就會發(fā)現事實并非如此。現代編譯器設計面臨的挑戰(zhàn)是來自目標計算機系統結構、新穎程序設計語言及本身的計算資源等多方面的。其中,任何一方面的因素都足以顛覆某些傳統理論與算法。例如,在現代編譯器設計中,計算資源的增加允許設計者采用更耗費時間、空間的算法,而不必過分關注其代價。對于優(yōu)化算法設計者而言,這是令人興奮的。為了追求目標代碼的更優(yōu),即使設計一些時空復雜度稍高的算法也是可以接受的。當然,從更高的層次上講,學習編譯器設計的目的還不僅僅局限于其本身的理論與技術。作為一個系統軟件的設計學科,其解決問題的思路與方法更是值得讀者細細品味的。這可能是一個漫長而艱辛的歷程,不過,這才是經典學科的魅力所在。以品味經典為目的來學習與研究操作系統、數據庫技術、計算機網絡、編譯技術等學科是筆者多年來的努力方向。從20世紀50年代中期以來,編譯器設計就一直是計算機科學界的一個重要研究領域。Fortran語言之父John Backus認為,除非編譯器生成的代碼與手工編寫的機器代碼的性能非常接近,否則程序員就不會放棄匯編語言程序設計的思想與方法,這就是編譯技術研究的源動力。從學術研究的角度講,眾所周知,圖靈獎被譽為“計算機界的諾貝爾獎”,自1966年設立至今,54位獲獎者中就有16位是由于程序設計語言及編譯技術的研究成果而獲此殊榮的。編譯技術在計算機科學領域的地位由此可見一斑。

內容概要

本書系統地介紹了一個實際的Pascal編譯器Neo Pascal的設計與實現。結合Neo Pascal的源代碼,詳細講述了LL(1)語法分析器、符號表系統、中間表示、類型系統、優(yōu)化技術、運行時刻的存儲管理、代碼生成器等編譯器設計的核心話題。各章都附有少量以實踐應用為主的練習題,既可作為閱讀思考題,也可作為課程設計選題?! ∨c國內其他介紹編譯技術的圖書相比,本書更關注的是編譯器的實現細節(jié),而不僅僅局限于理論闡述。本書可供從事編譯器設計相關工作的工程人員閱讀,也可作為高等院校計算機專業(yè)的編譯原理課程參考書?! ∽x者可在http://neopascal.sourceforge.net獲得Neo Pascal的源代碼及相關文檔。

書籍目錄

出版說明前言第1章  概述	 1.1  編譯技術概述	  1.1.1  程序設計語言基礎	  1.1.2  程序設計語言的翻譯機制	  1.1.3  編譯器的基本結構	 1.2 Pascal語言基礎	  1.2.1  Pascal語言簡介	  1.2.2  Pascal程序基本組成	  1.2.3  Pascal的聲明部分	  1.2.4  Pascal的類型	  1.2.5  Pascal的運算符	  1.2.6  Pascal的語句	 1.3  開發(fā)環(huán)境與Delphi基礎	  1.3.1  開發(fā)環(huán)境與文件列表	  1.3.2  Delphi基礎	 1.4  深入學習	 1.5  實踐與思考	 1.6  大師風采--Niklaus Wirth	第2章  詞法分析	 2.1 詞法分析概述	  2.1.1  詞法分析的任務	  2.1.2  單詞的分類	 2.2 詞法分析器的設計	  2.2.1  識別單詞	  2.2.2  轉換圖	  2.2.3  構造詞法分析器	 2.3  詞法分析器的實現	  2.3.1  詞法定義	  2.3.2  構造轉換圖與轉換表	  2.3.3  相關數據結構	  2.3.4  源代碼實現	 2.4  深入學習	 2.5  實踐與思考	 2.6  大師風采--Dennis M. Ritchie	第3章  語法分析	 3.1  程序設計語言的語法描述	  3.1.1  上下文無關文法	  3.1.2  推導	  3.1.3  語法樹	  3.1.4  歸約簡介	 3.2  語法分析概述	  3.2.1  語法分析的任務	  3.2.2  自上而下的語法分析法	  3.2.3  構造語法分析器	  3.3  語法分析器的實現 ……第4章  符號表系統	第5章  中間表示	第6章  表達式語義	第7章  優(yōu)化技術	第8章  運行時刻的存儲管理	第9章  目標代碼生成	第10章  GCC內核與現代編譯參考文獻

章節(jié)摘錄

插圖:迄今為止,程序設計語言仍是人類與計算機交流的主要途徑,它的應用領域也僅限于操縱與控制計算機。從第一臺計算機誕生之日起,人類就始終在探索一種有效的方式與計算機進行對話交流,使之能為人類服務。雖然時隔數十年,計算機能識別與處理的語言仍然是二進制形式的機器語言描述的源程序。當然,不可否認二進制機器語言的優(yōu)點非常多,但機器語言的易用性差也是不可回避的。即使是計算機專家想直接使用機器語言與計算機進行交流也是非常困難的。在20世紀50年代,計算機科學家們就已經意識到必須解決這一棘手的問題,否則計算機將無法得到普及。經過多年努力,匯編語言、C、Pascal等程序設計語言終于橫空出世。根據語言的形式與特點,習慣上,將機器語言與匯編語言(一種比較接近機器語言的程序設計語言)稱為低級語言,將其余的C、Pascal之類的語言稱為高級語言。讀者必須注意,低級語言與高級語言之分并不是說明語言本身的優(yōu)劣,僅僅是說明語言的形式與機器語言的相似程度。所謂低級語言指的是與機器語言比較類似的語言,而高級語言指的是與機器語言差別較大而與自然語言比較類似的語言。由于這些非機器語言的誕生,也就出現了將非機器語言等價翻譯成機器語言的需求。顯然,將非機器語言翻譯成機器語言的工作不能由手工完成,否則,非機器語言的產生就沒有任何意義了。因此,人們試圖借助于一個程序工具自動完成翻譯工作。根據語言不同,翻譯工具的復雜程度也不盡相同。比如,匯編語言比較接近機器語言,所以其翻譯工具較易實現。而高級語言與機器語言差別較大,所以其翻譯工具的實現也較為復雜。習慣上,將前者稱為匯編器,而將后者稱為編譯器。當然,有些書上對于匯編器與編譯器并沒有嚴格區(qū)分,都將其稱為編譯器,反正這只是一個名詞而已,讀者不必深究。編譯器的源語言是一種較為高級的程序設計語言,而目標語言可以是匯編語言、機器語言或者另一種高級語言。筆者必須澄清~點,人們普遍認為編譯器的目標語言就是低級語言,這個觀點的確沒有錯,但并不完整。

編輯推薦

《編譯器設計之路》:完整介紹一個實際編譯器Neo Pascal的設計與實現,詳細講述LL(1)分析器、符號表系統、優(yōu)化等核心話題。闡述系統軟件的設計觀點探討現代編譯技術熱點提供編譯器全部源代碼

圖書封面

圖書標簽Tags

評論、評分、閱讀與下載


    編譯器設計之路 PDF格式下載


用戶評論 (總計10條)

 
 

  •   編譯器或者編譯原理跨越了數學,計算機體系結構,操作系統,應用軟件等諸多的知識領域。寫一本關于編譯器的書本身就是一個富有挑戰(zhàn)性的工作。把書寫到深入淺出,讀者能夠容易理解,掌握,就更是對作者知識層面和表達能力的考驗。何況市面上已經有諸多國內外的大牛的著作。

    這本書很讓人吃驚的是能把編譯器的來龍去脈講的清清楚楚,尤其介紹各種算法,思想的歷史淵源,不僅說how,更讓讀者了解why.如果從入門難度上來看,本書可以說是我所讀的編譯器書籍中最好的。JIT技術是虛擬化的核心技術之一,這是第一本國內書籍中有涉及的,美中不足是篇幅較短。

    另外書中對一些關鍵概念著墨不多,如DFA/NFA, bottom-up parsing,等。但作為一個編譯器入門書籍能有這種質量,實屬難能可貴。
  •   用開源編譯器為對象來說明如何寫編譯器,寫得比較詳細。
  •   很不錯的書,用例子講話!
  •   感覺還不錯,作者挺認真的,連QQ都留下來了。
  •   但愿自己能夠寫一個編譯器。
  •   最近要做相關的開發(fā) 正好參考下 感覺應該是有幫助的。
  •   龍書純理論,看得太枯燥了,買了這本書對照著學習挺好的
  •   書都給弄爛了,能注意一下么?這樣誰還敢買?
  •   一起來學習。好書就是好。
  •   好書,國人的驕傲,進步的源泉!
 

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

京ICP備13047387號-7