編譯原理-編譯程序構(gòu)造實(shí)踐教程

出版時(shí)間:2010-4  出版社:人民郵電出版社  作者:張幸兒,戴新宇 編著  頁數(shù):282  
Tag標(biāo)簽:無  

前言

  編譯原理是計(jì)算機(jī)專業(yè)的一門重要課程,本課程開設(shè)的目的是講解編譯程序的構(gòu)造原理。由于編譯程序是把高級程序設(shè)計(jì)語言源程序翻譯成等價(jià)的低級語言目標(biāo)程序,其處理對象是符號序列,因此可以說編譯程序是符號處理的工具,只要是與符號處理相關(guān)的領(lǐng)域,都將可能需要應(yīng)用編譯原理中的基本原理。例如,編譯原理中所討論的正則表達(dá)式與狀態(tài)轉(zhuǎn)換圖就應(yīng)用在很多領(lǐng)域。編譯原理中的代碼優(yōu)化,盡管是在源程序的內(nèi)部中間表示一級上進(jìn)行的,但優(yōu)化的思想可以為軟件開發(fā)人員,特別是計(jì)算機(jī)程序設(shè)計(jì)愛好者所借鑒?! 【幾g原理課程的特點(diǎn)是理論性強(qiáng),因?yàn)樗c形式語言理論緊密相關(guān),可以說是在形式語言理論基礎(chǔ)上討論編譯原理,這使得編譯原理成為計(jì)算機(jī)專業(yè)最為困難的課程之一。其實(shí),實(shí)踐性應(yīng)是編譯原理課程更為關(guān)注的問題,也就是說,掌握編譯程序構(gòu)造原理的目的是實(shí)踐編譯程序構(gòu)造。本書著力降低理論難度,圍繞編譯程序的編制開展討論,以加強(qiáng)讀者的實(shí)踐應(yīng)用能力。  本書有如下一些特點(diǎn)?! 。?)以C語言為背景。緊密結(jié)合C語言,盡可能處處以C語言相關(guān)內(nèi)容為例子進(jìn)行討論,使得講解更有針對性,讀者也更易于理解和接受?! 。?)突出實(shí)踐性。對編譯過程的每個(gè)方面進(jìn)行論述時(shí),都有計(jì)算機(jī)實(shí)現(xiàn)的討論,例如文法的存儲表示、推導(dǎo)和語法分析樹的生成、詞法分析、識別程序句型分析,以及翻譯方案的實(shí)現(xiàn),都有相當(dāng)?shù)钠?。最后還討論了符號模擬執(zhí)行虛擬機(jī)目標(biāo)代碼的解釋程序的編制,給出可運(yùn)行的解釋程序?! 。?)明確C語言語法成分目標(biāo)代碼結(jié)構(gòu)與其他語言的區(qū)別。例如函數(shù)調(diào)用中,實(shí)際參數(shù)的計(jì)算次序與賦值語句左部變量地址的計(jì)算次序等,全書有多個(gè)C語言程序作為例子,包括應(yīng)用指針與結(jié)構(gòu),以及建立結(jié)點(diǎn)鏈的C程序編寫等,使讀者對C語言有更深入的認(rèn)識?! 。?)加強(qiáng)講解編程知識。本書中,除了作為例子的一些經(jīng)典算法,如排序程序與計(jì)算多項(xiàng)式的霍納方案外,不乏編程的方法和技巧。例如,文法的存儲表示、LR分析表的計(jì)算機(jī)存儲表示與特征變量的引進(jìn)以及置初值等,以啟發(fā)讀者應(yīng)用C語言編程的能力。  學(xué)習(xí)是吸收新知識的過程,更重要的是培養(yǎng)和提高分析問題和解決問題能力的過程。一個(gè)常見的思維方法是:以簡單的實(shí)例,通過對它的觀察分析,得到解決問題的思路。另一種慣用的思維方法是:從已給的輸入(Input)和要得到的輸出(Output)出發(fā),設(shè)法進(jìn)行處理(Process),以得到解決方案,這就是IPO。讀者可以體會本書中各種方法和技巧的應(yīng)用?! 】偟膩碚f,本書力圖以簡潔易懂的文字闡述主要的基本概念,用樸實(shí)的實(shí)例展示實(shí)用的方法,按直觀的思維方法啟發(fā)尋找問題的解答。

內(nèi)容概要

本書系統(tǒng)而簡潔地介紹編譯程序的構(gòu)造原理,內(nèi)容主要包括:概論、編譯程序構(gòu)造的基礎(chǔ)知識、詞法分析、語法分析、語義分析與目標(biāo)代碼生成、中間表示代碼與代碼優(yōu)化、程序錯(cuò)誤的檢查與校正、目標(biāo)代碼的運(yùn)行,以及虛擬機(jī)目標(biāo)程序的解釋程序的編制。各章開始于本章導(dǎo)讀,各章末有本章小結(jié)、復(fù)習(xí)思考題以及習(xí)題。本書突出實(shí)踐性,在編譯程序構(gòu)造的各個(gè)環(huán)節(jié)中,提供了具體可行的實(shí)現(xiàn)方法和技巧,供讀者參考。    本書可作為計(jì)算機(jī)及相關(guān)專業(yè)的編譯原理課程教材,也可作為計(jì)算機(jī)軟件技術(shù)人員、研究生及廣大計(jì)算機(jī)愛好者的參考用書。

作者簡介

  張幸兒,南京大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)系教授,長期從事教學(xué)和科研工作,參與多個(gè)編譯程序和軟件項(xiàng)目的研制,長期從事編譯原理、程序設(shè)計(jì)等課程的教學(xué)。有豐富的教學(xué)經(jīng)驗(yàn)和計(jì)算機(jī)軟件開發(fā)經(jīng)驗(yàn)。多次獲得省部級科研與優(yōu)秀教材獎,其中《計(jì)算機(jī)編譯理論》和《計(jì)算機(jī)編譯原理》分別獲得教育部普通高校優(yōu)秀教材二等獎?! 〈餍掠睿暇┐髮W(xué)計(jì)算機(jī)科學(xué)與技術(shù)系副教授,博士,研究方向是自然語言處理,多次講授計(jì)算機(jī)編譯原理課程。

書籍目錄

第1章 概論   1.1 編譯程序概況   1.2 編譯程序的構(gòu)造   1.3 編譯程序的實(shí)現(xiàn)   本章小結(jié)   復(fù)習(xí)思考題 第2章 編譯程序構(gòu)造的基礎(chǔ)知識   2.1 符號串與符號串集合   2.2 文法與語言   2.3 句型分析   2.4 語法分析樹的計(jì)算機(jī)生成   本章小結(jié)   復(fù)習(xí)思考題   習(xí)題 第3章 詞法分析   3.1 概況   3.2 詞法分析程序的手工實(shí)現(xiàn)   3.3 詞法分析程序的自動生成   本章小結(jié)   復(fù)習(xí)思考題   習(xí)題 第4章 語法分析——自頂向下分析技術(shù)   4.1 自頂向下分析技術(shù)概況   4.2 無回溯的自頂向下分析技術(shù)   4.3 預(yù)測識別程序句型分析的計(jì)算機(jī)實(shí)現(xiàn)   本章小結(jié)  復(fù)習(xí)思考題   習(xí)題 第5章 語法分析——自底向上分析技術(shù)   5.1 自底向上分析技術(shù)概況   5.2 LR(1)分析技術(shù)   5.3 其他的自底向上分析技術(shù)   本章小結(jié)   復(fù)習(xí)思考題   習(xí)題 第6章 語義分析與目標(biāo)代碼生成   6.1 概況   6.2 說明部分的翻譯   6.3 類型檢查   6.4 目標(biāo)代碼的生成   6.5 翻譯方案的實(shí)現(xiàn)   本章小結(jié)   復(fù)習(xí)思考題   習(xí)題 第7章 中間表示代碼與代碼優(yōu)化   7.1 概況   7.2 源程序的中間表示代碼   7.3 基本塊的代碼優(yōu)化   7.4 與循環(huán)有關(guān)的優(yōu)化   7.5 全局優(yōu)化的實(shí)現(xiàn)思想   7.6 窺孔優(yōu)化   本章小結(jié)   復(fù)習(xí)思考題   習(xí)題 第8章 程序錯(cuò)誤的檢查與校正 第9章 目標(biāo)代碼的運(yùn)行 第10章 虛擬機(jī)目標(biāo)程序的解釋程序的研制 參考文獻(xiàn) 

章節(jié)摘錄

 ?、谡Z法分析。詞法分析時(shí)識別開各個(gè)符號之后,由語法分析部分根據(jù)程序設(shè)計(jì)語言的語法規(guī)則,識別出各個(gè)語法成分,最終識別出完整的程序。在識別各類語法成分的同時(shí),也就檢查了語法的正確性。當(dāng)識別出是語法上正確的程序時(shí),生成相應(yīng)的內(nèi)部中間表示(通常是語法分析樹或其他內(nèi)部中間表示),如果存在錯(cuò)誤,則給出相應(yīng)的報(bào)錯(cuò)信息?! ⊥瓿烧Z法分析的部分稱為語法分析程序,或稱為識別程序。概括起來,語法分析程序的功能是識別出各個(gè)語法成分,生成相應(yīng)的內(nèi)部中間表示,同時(shí)進(jìn)行語法正確性的檢查?! 、壅Z義分析。編譯程序繼語法分析之后進(jìn)行語義分析,即基于語法分析時(shí)輸出的內(nèi)部中間表示,依據(jù)各個(gè)語法成分的含義進(jìn)行語義分析。由于一個(gè)程序通常由數(shù)據(jù)結(jié)構(gòu)和控制結(jié)構(gòu)兩部分組成,必然對這兩部分進(jìn)行語義分析。對于數(shù)據(jù)結(jié)構(gòu),語義分析部分進(jìn)行的語義分析工作是確定類型和類型檢查,確切地說,檢查標(biāo)識符是否有定義,確定標(biāo)識符所對應(yīng)數(shù)據(jù)對象的數(shù)據(jù)類型等屬性,檢查運(yùn)算的合法性及運(yùn)算分量數(shù)據(jù)類型的一致性;對于控制結(jié)構(gòu),根據(jù)程序設(shè)計(jì)語言所規(guī)定的語義,對它們進(jìn)行相應(yīng)的語義處理,這時(shí)可以生成相應(yīng)的目標(biāo)代碼。例如,對于一個(gè)加法運(yùn)算,當(dāng)檢查了兩個(gè)運(yùn)算分量都有定義,它們都能進(jìn)行加法運(yùn)算(運(yùn)算是合法的),且兩個(gè)運(yùn)算分量的類型一致(相容)時(shí),可以生成進(jìn)行加法的目標(biāo)代碼。不言而喻,執(zhí)行語義分析的同時(shí),還進(jìn)行一些語義檢查,當(dāng)然這只是靜態(tài)語義檢查,即在編譯時(shí)刻所能進(jìn)行的語義檢查,例如,檢查是否從循環(huán)外通過控制轉(zhuǎn)移語句把控制轉(zhuǎn)入循環(huán)體。在運(yùn)行時(shí)刻才能進(jìn)行的語義檢查稱為動態(tài)語義檢查,如檢查數(shù)組元素下標(biāo)是否越界,以及指針變量是否有初值等,自然不在語義分析時(shí)刻進(jìn)行。為了改進(jìn)目標(biāo)程序質(zhì)量,語義分析時(shí)可能不生成目標(biāo)代碼,而是生成另外一種內(nèi)部中間表示,或稱中間表示代碼。代碼優(yōu)化階段就是基于這種中間表示代碼進(jìn)行優(yōu)化,然后再從優(yōu)化了的中間表示代碼生成目標(biāo)代碼。語義分析工作通常由語義子程序完成。  完成語義分析的部分稱為語義分析程序。概括起來,語義分析程序的功能是確定類型、類型檢查、識別含義與相應(yīng)語義處理,以及其他一些靜態(tài)語義檢查等?! 、艽a優(yōu)化。代碼優(yōu)化指的是為改進(jìn)目標(biāo)程序質(zhì)量而在編譯時(shí)刻進(jìn)行的各項(xiàng)優(yōu)化工作。代碼優(yōu)化通?;谡Z義分析部分生成的中間表示代碼進(jìn)行,把它變換成功能相同、但功效更高的優(yōu)化了的中間表示代碼。本書的中間表示代碼主要是四元式序列。代碼優(yōu)化有與機(jī)器無關(guān)的優(yōu)化和與機(jī)器有關(guān)的優(yōu)化之分。本書重點(diǎn)討論與機(jī)器無關(guān)的優(yōu)化。除了對中間表示代碼進(jìn)行優(yōu)化外,也可以對目標(biāo)代碼進(jìn)行優(yōu)化,這種優(yōu)化通常稱為窺孔優(yōu)化。窺孔優(yōu)化是機(jī)器語言級上僅在一個(gè)很小的范圍內(nèi)進(jìn)行的、不太復(fù)雜因而代價(jià)不是很高的一類優(yōu)化?! ‘?dāng)前的很多高級程序設(shè)計(jì)語言的編譯程序都進(jìn)行代碼優(yōu)化,c語言編譯程序是突出的優(yōu)化典型?! ⊥瓿纱a優(yōu)化的部分稱為代碼優(yōu)化程序。概括起來,代碼優(yōu)化程序的功能是:在編譯時(shí)刻基于中間表示代碼進(jìn)行目標(biāo)程序質(zhì)量的改進(jìn)?! 、菽繕?biāo)程序生成。如前所述,語義分析時(shí)可以直接生成目標(biāo)程序,這里的目標(biāo)程序生成指的是基于優(yōu)化了的中間表示代碼(也即四元式序列)生成目標(biāo)程序。目標(biāo)程序的生成與運(yùn)行目標(biāo)程序的計(jì)算機(jī)密切相關(guān)。為了學(xué)習(xí)的目的,本書避免把大量的時(shí)間花在對具體計(jì)算機(jī)細(xì)節(jié)的了解上,將基于一種所謂的虛擬機(jī)來討論目標(biāo)程序的生成。

編輯推薦

  牢牢掌握編譯程序構(gòu)造的基本原理  深入理解C程序設(shè)計(jì)語言的特性  實(shí)踐中領(lǐng)悟、實(shí)踐中提升  編譯原理課程討論的對象是編譯程序。編譯程序是符號處理的工具,只要是與符號處理相關(guān)的領(lǐng)域,都將可能需要應(yīng)用編譯程序構(gòu)造的基本原理?! H討論編譯原理最基本的內(nèi)容,突出從源程序讀入到目標(biāo)程序生成這一主線。  緊密結(jié)合C語言。以C語言相關(guān)內(nèi)容為例進(jìn)行討論,更具針對性?! ⊥怀鰧?shí)踐性。對編譯過程的每個(gè)關(guān)鍵部分都有計(jì)算機(jī)實(shí)現(xiàn)的討論,提供具體而切實(shí)可行的實(shí)現(xiàn)方法和技巧,讀者將對概念與計(jì)算機(jī)實(shí)現(xiàn)之間的差異有深刻的體會,對C語言的應(yīng)用能力將有較大的提升,并能積累程序編寫和軟件開發(fā)的經(jīng)驗(yàn)?!  毒幾g原理:編譯程序構(gòu)造與實(shí)踐教程》不是單純地給出問題的解答,注重對重點(diǎn)問題進(jìn)行分析,闡述思路。結(jié)合各種方法以實(shí)例說明,使學(xué)生在理解的基礎(chǔ)上掌握問題的求解方法。概括地說,《編譯原理:編譯程序構(gòu)造與實(shí)踐教程》力圖以簡潔易懂的文字闡述主要的基本概念,用樸實(shí)的實(shí)例展示實(shí)用的方法,按直觀的思維方法啟發(fā)尋找問題的解答。

圖書封面

圖書標(biāo)簽Tags

評論、評分、閱讀與下載


    編譯原理-編譯程序構(gòu)造實(shí)踐教程 PDF格式下載


用戶評論 (總計(jì)1條)

 
 

  •   幫侄子代購的
 

250萬本中文圖書簡介、評論、評分,PDF格式免費(fèi)下載。 第一圖書網(wǎng) 手機(jī)版

京ICP備13047387號-7