




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第1章緒論第一章 緒論編編 譯譯 技技 術(shù)術(shù)江蘇大學(xué)計(jì)算機(jī)學(xué)院計(jì)算機(jī)科學(xué)系江蘇大學(xué)計(jì)算機(jī)學(xué)院計(jì)算機(jī)科學(xué)系主講:年 軼第1章緒論第一章 引 論FTPFTP地址:地址:3用戶名:用戶名:nianyi密碼:密碼:123456上傳文件夾:上傳文件夾:up -“課程內(nèi)容課程內(nèi)容” -“班級(jí)班級(jí)”下載文件夾:下載文件夾:down -“課程內(nèi)容課程內(nèi)容”上傳文件壓縮包命名規(guī)則:班級(jí)上傳文件壓縮包命名規(guī)則:班級(jí)+學(xué)號(hào)(末學(xué)號(hào)(末2位)位)+姓名姓名 例如:例如:J計(jì)計(jì)080101許燕許燕,軟件軟件080101王鵬曉,網(wǎng)絡(luò)王鵬曉,網(wǎng)絡(luò)090101符丹符丹,嵌軟,嵌軟09010
2、1張巍張巍第1章緒論第一章 引 論學(xué)時(shí)與參考教材學(xué)時(shí)與參考教材學(xué)時(shí)學(xué)時(shí):35+1035+10小時(shí)小時(shí) 參考教材參考教材1 1、Compilers:Principles,Techniques,andTools 龍書龍書 該書出的比較早,但里面講解的該書出的比較早,但里面講解的核心編譯核心編譯原理至今都沒原理至今都沒有變過,所以一直到今天,它的有變過,所以一直到今天,它的價(jià)值都非凡價(jià)值都非凡。 這本書最大的這本書最大的特點(diǎn)特點(diǎn)就是一開始就通過一個(gè)實(shí)際的小例子,就是一開始就通過一個(gè)實(shí)際的小例子,把編譯原理的把編譯原理的大致內(nèi)容大致內(nèi)容羅列出來,讓很多編譯原理的初學(xué)者羅列出來,讓很多編譯原理的初學(xué)者很
3、快心里有了個(gè)底很快心里有了個(gè)底,也知道為什么會(huì)有這些理論,怎么運(yùn)用這也知道為什么會(huì)有這些理論,怎么運(yùn)用這些理論。些理論。第1章緒論1977年,Alfred V. Aho和Jeffrey D. Ullman合作出版了Principles of Compiler Design,封面是一位騎士和一只龍,龍是綠色的,因此被稱為龍書或綠龍書。第1章緒論1986,原來的兩位作者,加上Ravi Sethi,升級(jí)了前一本書,書名為 Compilers:Principles, Techniques, andTools ,封面沿用騎士和龍,但龍是紅色的,因此被稱為龍書二或紅龍書。第1章緒論2006年底,龍書升級(jí)了
4、。作者增加了Monica S. Lam,名字與龍書二相同,封面依然沿用騎士和龍,但龍是紫色的,因此被稱為龍書三或紫龍書。第1章緒論第1章緒論2 2、Modern Compiler Design 中文名字叫做中文名字叫做現(xiàn)代編譯程序設(shè)計(jì)現(xiàn)代編譯程序設(shè)計(jì),此書比較,此書比較關(guān)注的是編譯原理的實(shí)踐,書中給出了不少的實(shí)際程關(guān)注的是編譯原理的實(shí)踐,書中給出了不少的實(shí)際程序代碼,還有很多實(shí)際的編譯技術(shù)問題等等。序代碼,還有很多實(shí)際的編譯技術(shù)問題等等。 此書另外一個(gè)特點(diǎn)就是其此書另外一個(gè)特點(diǎn)就是其“現(xiàn)代現(xiàn)代”而字。在傳統(tǒng)而字。在傳統(tǒng)的編譯原理教材中,你是很少能看到如同的編譯原理教材中,你是很少能看到如同Ja
5、va中的中的“垃圾回收垃圾回收”等算法的。等算法的。 如果你如果你想想深入學(xué)習(xí)編譯原理的理論知識(shí),那么你肯深入學(xué)習(xí)編譯原理的理論知識(shí),那么你肯定得看前面那本定得看前面那本龍書龍書,如果你想自己動(dòng)手做一個(gè)先進(jìn),如果你想自己動(dòng)手做一個(gè)先進(jìn)的編譯器,那么你的編譯器,那么你得看這本得看這本現(xiàn)代編譯程序設(shè)計(jì)現(xiàn)代編譯程序設(shè)計(jì)。第1章緒論第一章 引 論為什么要學(xué)習(xí)編譯原理? 一個(gè)一個(gè)高手高手的必經(jīng)之路,可以說不懂編譯原理就的必經(jīng)之路,可以說不懂編譯原理就寫不出好程序來。寫不出好程序來。 如果哪一個(gè)高手說他如果哪一個(gè)高手說他不會(huì)不會(huì)編譯原理,你大可編譯原理,你大可以認(rèn)為他在以認(rèn)為他在說謊說謊。 通過了解程序如
6、何從通過了解程序如何從源代碼源代碼經(jīng)過一步步操作經(jīng)過一步步操作最終到最終到目標(biāo)代碼目標(biāo)代碼,可以,可以幫助幫助我們更好的理解計(jì)算我們更好的理解計(jì)算機(jī),有助于編寫好自己的代碼。機(jī),有助于編寫好自己的代碼。 能能更深入更深入的了解編出來的代碼是怎樣被機(jī)器的了解編出來的代碼是怎樣被機(jī)器識(shí)別運(yùn)行的,有助于你編程時(shí)的排查錯(cuò)誤。識(shí)別運(yùn)行的,有助于你編程時(shí)的排查錯(cuò)誤。第1章緒論第一章 引 論 你可以把學(xué)習(xí)的你可以把學(xué)習(xí)的過程過程當(dāng)作一種當(dāng)作一種了解了解,或者當(dāng),或者當(dāng)作一種對(duì)作一種對(duì)數(shù)據(jù)結(jié)構(gòu)和算法數(shù)據(jù)結(jié)構(gòu)和算法的應(yīng)用。能夠讓你更加的應(yīng)用。能夠讓你更加深入的理解程序在計(jì)算機(jī)中是如何運(yùn)行,以及甚深入的理解程序在
7、計(jì)算機(jī)中是如何運(yùn)行,以及甚至加深對(duì)硬件體系的認(rèn)識(shí)。至加深對(duì)硬件體系的認(rèn)識(shí)。 可以進(jìn)一步加深對(duì)可以進(jìn)一步加深對(duì)相關(guān)語言相關(guān)語言的理解,以及運(yùn)的理解,以及運(yùn)用。用。知道知道為什么要有這樣那樣的限制或者為什么為什么要有這樣那樣的限制或者為什么語言本身這么來設(shè)計(jì)。語言本身這么來設(shè)計(jì)。 當(dāng)你看到一個(gè)當(dāng)你看到一個(gè)開發(fā)環(huán)境開發(fā)環(huán)境,比如,比如Visual Studio正正在編譯執(zhí)行你的在編譯執(zhí)行你的VC+源代碼時(shí),你知道它是如何源代碼時(shí),你知道它是如何處理的。處理的。 第1章緒論 在解決在解決其他復(fù)雜其他復(fù)雜的問題時(shí),可以借鑒編譯原理的的問題時(shí),可以借鑒編譯原理的思想思想,不,不一定是編譯程序具體的一定是編
8、譯程序具體的實(shí)現(xiàn)模式實(shí)現(xiàn)模式,而是解決編譯問題時(shí)的思考,而是解決編譯問題時(shí)的思考方法。方法。 在在20世紀(jì)世紀(jì)50年代,編譯器的編寫一直被認(rèn)為是年代,編譯器的編寫一直被認(rèn)為是十分困難十分困難的的事情,第一事情,第一Fortran的編譯器據(jù)說花了的編譯器據(jù)說花了18年的時(shí)間才完成。年的時(shí)間才完成。 在人們嘗試編寫編譯器的同時(shí),誕生了在人們嘗試編寫編譯器的同時(shí),誕生了許多跟編譯相關(guān)的許多跟編譯相關(guān)的理論和技術(shù)理論和技術(shù),而這些理論和技術(shù)比一個(gè)實(shí)際的編譯器本身價(jià)值,而這些理論和技術(shù)比一個(gè)實(shí)際的編譯器本身價(jià)值更大更大。 就猶如數(shù)學(xué)家們?cè)诮鉀Q著名的哥德巴赫猜想一樣,雖然沒就猶如數(shù)學(xué)家們?cè)诮鉀Q著名的哥德巴
9、赫猜想一樣,雖然沒有最終解決問題,但是其間誕生不少名著的相關(guān)數(shù)論。有最終解決問題,但是其間誕生不少名著的相關(guān)數(shù)論。第1章緒論1.1 程序設(shè)計(jì)語言和編譯程序程序設(shè)計(jì)語言和編譯程序 1.2 編譯程序的歷史及發(fā)展編譯程序的歷史及發(fā)展 1.3 編譯過程與編譯程序結(jié)構(gòu)編譯過程與編譯程序結(jié)構(gòu)1.4 編譯程序的開發(fā)編譯程序的開發(fā) 1.5 構(gòu)造編譯程序所應(yīng)具備的知識(shí)內(nèi)容構(gòu)造編譯程序所應(yīng)具備的知識(shí)內(nèi)容 第1章緒論第1章緒論計(jì)算機(jī)語言計(jì)算機(jī)語言低級(jí)語言低級(jí)語言面向機(jī)器面向機(jī)器 主要包括:主要包括:機(jī)器機(jī)器語言、語言、匯編匯編語言語言 特點(diǎn)特點(diǎn):與特定的機(jī)器有關(guān),功效高,但使用復(fù)雜、繁:與特定的機(jī)器有關(guān),功效高,但
10、使用復(fù)雜、繁瑣、費(fèi)時(shí)、易出錯(cuò)?,?、費(fèi)時(shí)、易出錯(cuò)。 高級(jí)語言高級(jí)語言 面向用戶面向用戶 如:如: Fortran、Pascal、C 、Java語言等語言等 特點(diǎn):特點(diǎn):不依賴具體機(jī)器,移植性好、對(duì)用戶要求低、不依賴具體機(jī)器,移植性好、對(duì)用戶要求低、易使用、易維護(hù)等。易使用、易維護(hù)等。 1.1 程序設(shè)計(jì)語言和編譯程序程序設(shè)計(jì)語言和編譯程序第1章緒論高級(jí)語言程序的執(zhí)行方式高級(jí)語言程序的執(zhí)行方式 編譯編譯 解釋解釋計(jì)算機(jī)系統(tǒng)的組成:計(jì)算機(jī)系統(tǒng)的組成: 裸機(jī),系統(tǒng)程序裸機(jī),系統(tǒng)程序(操作系統(tǒng)、操作系統(tǒng)、編譯程序編譯程序、解釋程序解釋程序、程序設(shè)計(jì)程序設(shè)計(jì)語言、連接裝配程序、系統(tǒng)實(shí)用程序等語言、連接裝配程
11、序、系統(tǒng)實(shí)用程序等),應(yīng)用程序。,應(yīng)用程序。 第1章緒論 編譯程序編譯程序就是指這樣一種程序,通過它能夠?qū)⒂酶呒?jí)語就是指這樣一種程序,通過它能夠?qū)⒂酶呒?jí)語言編寫的源程序轉(zhuǎn)換成與之在言編寫的源程序轉(zhuǎn)換成與之在邏輯上邏輯上等價(jià)的低級(jí)語言形式的等價(jià)的低級(jí)語言形式的目標(biāo)程序,見圖目標(biāo)程序,見圖11。圖圖1-1 編譯程序的功能編譯程序的功能第1章緒論一個(gè)高級(jí)語言程序的執(zhí)行通常分為兩個(gè)階段:一個(gè)高級(jí)語言程序的執(zhí)行通常分為兩個(gè)階段: 編譯階段編譯階段和和運(yùn)行運(yùn)行階段。階段。 編譯階段編譯階段將源程序變換成目標(biāo)程序。將源程序變換成目標(biāo)程序。 運(yùn)行階段運(yùn)行階段則由所生成的目標(biāo)程序連同則由所生成的目標(biāo)程序連同運(yùn)行
12、系統(tǒng)運(yùn)行系統(tǒng)(數(shù)據(jù)空間分?jǐn)?shù)據(jù)空間分配子程序、標(biāo)準(zhǔn)函數(shù)程序等配子程序、標(biāo)準(zhǔn)函數(shù)程序等)接受程序的初始數(shù)據(jù)作為輸入,運(yùn)接受程序的初始數(shù)據(jù)作為輸入,運(yùn)行后輸出計(jì)算結(jié)果。行后輸出計(jì)算結(jié)果。圖圖1-2 源程序的編譯和運(yùn)行階段源程序的編譯和運(yùn)行階段第1章緒論如果編譯生成的目標(biāo)程序是如果編譯生成的目標(biāo)程序是匯編語言匯編語言形式的,那么在編譯形式的,那么在編譯與運(yùn)行階段之間還要添加一個(gè)匯編階段,它將編譯生成的匯編與運(yùn)行階段之間還要添加一個(gè)匯編階段,它將編譯生成的匯編語言目標(biāo)程序再經(jīng)過匯編程序變換成機(jī)器語言目標(biāo)程序,如圖語言目標(biāo)程序再經(jīng)過匯編程序變換成機(jī)器語言目標(biāo)程序,如圖13所示。所示。圖圖1-3源程序的編譯
13、、匯編和運(yùn)行階段源程序的編譯、匯編和運(yùn)行階段第1章緒論用高級(jí)語言編寫的程序也可通過用高級(jí)語言編寫的程序也可通過解釋程序解釋程序來執(zhí)行。解釋程來執(zhí)行。解釋程序也是一種翻譯程序,它將源程序作為輸入,序也是一種翻譯程序,它將源程序作為輸入,一條一條語句語句一條一條語語句地讀入并解釋執(zhí)行。句地讀入并解釋執(zhí)行。 解釋程序與編譯程序的解釋程序與編譯程序的主要區(qū)別主要區(qū)別是:編譯程序?qū)⒃闯绦蚍牵壕幾g程序?qū)⒃闯绦蚍g成目標(biāo)程序后再執(zhí)行該目標(biāo)程序;而解釋程序則逐條譯成目標(biāo)程序后再執(zhí)行該目標(biāo)程序;而解釋程序則逐條讀出讀出源源程序中的語句程序中的語句并并解釋執(zhí)行,即在解釋程序的解釋執(zhí)行,即在解釋程序的執(zhí)行過程執(zhí)行
14、過程中中并不產(chǎn)并不產(chǎn)生目標(biāo)程序生目標(biāo)程序。典型的解釋型高級(jí)語言是。典型的解釋型高級(jí)語言是BASIC語言。語言。圖圖1-4 解釋程序的解釋執(zhí)行過程解釋程序的解釋執(zhí)行過程第1章緒論1.3 編譯過程和編譯程序結(jié)構(gòu)編譯過程和編譯程序結(jié)構(gòu)編譯程序的工作過程:編譯程序的工作過程:1.詞法分析階段詞法分析階段2.語法分析階段語法分析階段3.語義分析和中間代碼生成階段語義分析和中間代碼生成階段4.優(yōu)化階段優(yōu)化階段5.目標(biāo)代碼生成階段目標(biāo)代碼生成階段第1章緒論1詞法分析詞法分析詞法分析的詞法分析的任務(wù)任務(wù)是輸入源程序,對(duì)構(gòu)成源程序的字符串是輸入源程序,對(duì)構(gòu)成源程序的字符串進(jìn)行掃描和分解,識(shí)別出進(jìn)行掃描和分解,識(shí)
15、別出一個(gè)個(gè)單詞一個(gè)個(gè)單詞符號(hào),如符號(hào),如基本字基本字(if、for、begin等等)、標(biāo)識(shí)符標(biāo)識(shí)符、常數(shù)常數(shù)、運(yùn)算符運(yùn)算符和和界符界符(如如“(”、“)”、“=”、“;”)等,等, 將將所識(shí)別出的單詞所識(shí)別出的單詞用統(tǒng)一長(zhǎng)度的用統(tǒng)一長(zhǎng)度的標(biāo)準(zhǔn)形式標(biāo)準(zhǔn)形式(也稱內(nèi)部碼也稱內(nèi)部碼)來表來表示,以便于后繼語法工作的進(jìn)行。示,以便于后繼語法工作的進(jìn)行。 因此,詞法分析因此,詞法分析工作工作是將源程序中的是將源程序中的字符串字符串變換成變換成單詞符單詞符號(hào)流號(hào)流的過程。的過程。 詞法分析所詞法分析所遵循遵循的是語言的的是語言的構(gòu)詞構(gòu)詞規(guī)則(詞法規(guī)則)規(guī)則(詞法規(guī)則) 。第1章緒論2語法分析語法分析語法分
16、析的語法分析的任務(wù)任務(wù)是在是在詞法分析的基礎(chǔ)上詞法分析的基礎(chǔ)上,根據(jù)語言的,根據(jù)語言的語法語法規(guī)則規(guī)則(文法規(guī)則文法規(guī)則)把單詞符號(hào)流分解成各類語法單位把單詞符號(hào)流分解成各類語法單位(語法范疇語法范疇),如如“短語短語”、“子句子句”、“句子句子(語句語句)”、“表達(dá)式表達(dá)式”、“程序程序段段”和和“程序程序”等。等。 通過通過語法分析語法分析可以確定整個(gè)輸入串是否構(gòu)成一個(gè)可以確定整個(gè)輸入串是否構(gòu)成一個(gè)語法上正語法上正確的確的“程序程序”。 語法分析所遵循的是語言的語法分析所遵循的是語言的語法規(guī)則語法規(guī)則,語法規(guī)則,語法規(guī)則通常通常用用上上下文無關(guān)文法下文無關(guān)文法描述。描述。第1章緒論形式語言
17、學(xué)(形式語言學(xué)(代數(shù)語言學(xué)) 運(yùn)用形式模型(抽象符號(hào)系統(tǒng))對(duì)語言(包括人工語言和自然語言)進(jìn)行理論上的分析和描寫。 描述語言有三種途徑:1窮舉 2文法 3自動(dòng)機(jī)。 文法是指的產(chǎn)生過程,而自動(dòng)機(jī)是指的識(shí)別過程。 一種語言,如果存在對(duì)它的識(shí)別過程,就一定存在對(duì)它的產(chǎn)生過程,反之亦然。 現(xiàn)行的形式語法系統(tǒng)是Chomsky于1956年為了描述自然語言而提出的一種理論模型。第1章緒論上下文無關(guān)文法上下文無關(guān)文法 文法文法描述語言的語法結(jié)構(gòu)的形式規(guī)則(即語法規(guī)則)。 上下文無關(guān)文法上下文無關(guān)文法它是這樣一種文法,它所定義的語法范疇(或語法單位)是完全獨(dú)立于這種范疇可能出現(xiàn)的環(huán)境的。舉例: 程序語言中,當(dāng)碰
18、到一個(gè)算術(shù)表達(dá)式時(shí),對(duì)它“就事論事”進(jìn)行處理,不必考慮它所處的上下文。 自然語言中,一個(gè)句子,一個(gè)詞,它們的語法性質(zhì)和所處的上下文往往有密切的關(guān)系。第1章緒論3語義分析和中間代碼生成語義分析和中間代碼生成這一階段的這一階段的任務(wù)任務(wù)是對(duì)各類不同是對(duì)各類不同語法范疇語法范疇按按語言的語義語言的語義進(jìn)行進(jìn)行初初步翻譯步翻譯,包含兩個(gè)方面的工作:,包含兩個(gè)方面的工作: 一是對(duì)每種語法范疇進(jìn)行一是對(duì)每種語法范疇進(jìn)行靜態(tài)語義檢查靜態(tài)語義檢查,如變量是否定義、類,如變量是否定義、類型是否正確等;型是否正確等; 二是在二是在語義檢查正確語義檢查正確的情況下進(jìn)行中間代碼的翻譯。的情況下進(jìn)行中間代碼的翻譯。 中
19、間代碼中間代碼是是介于介于高級(jí)語言的語句和低級(jí)語言的指令之間的一高級(jí)語言的語句和低級(jí)語言的指令之間的一種獨(dú)立于具體硬件的記號(hào)系統(tǒng),它既有一定程度的抽象,又與低種獨(dú)立于具體硬件的記號(hào)系統(tǒng),它既有一定程度的抽象,又與低級(jí)語言的指令十分接近,因此轉(zhuǎn)換為目標(biāo)代碼比較容易。級(jí)語言的指令十分接近,因此轉(zhuǎn)換為目標(biāo)代碼比較容易。 把語法范疇翻譯成中間代碼把語法范疇翻譯成中間代碼所遵循所遵循的是的是語言的語義規(guī)則語言的語義規(guī)則,常見,常見的中間代碼有的中間代碼有四元式、三元式、間接三元式和逆波蘭記號(hào)四元式、三元式、間接三元式和逆波蘭記號(hào)等。等。第1章緒論4優(yōu)化優(yōu)化優(yōu)化的任務(wù)是對(duì)前階段產(chǎn)生的中間代碼進(jìn)行等價(jià)變換或
20、改優(yōu)化的任務(wù)是對(duì)前階段產(chǎn)生的中間代碼進(jìn)行等價(jià)變換或改造,以期獲得造,以期獲得更為高效更為高效(節(jié)省時(shí)間和空間節(jié)省時(shí)間和空間)的目標(biāo)代碼。的目標(biāo)代碼。 常用的常用的優(yōu)化措施優(yōu)化措施有刪除冗余運(yùn)算、刪除無用賦值、合并已知有刪除冗余運(yùn)算、刪除無用賦值、合并已知量、循環(huán)優(yōu)化等。量、循環(huán)優(yōu)化等。 例如,其值例如,其值并不隨循環(huán)并不隨循環(huán)而發(fā)生變化的運(yùn)算可提到進(jìn)入循環(huán)前而發(fā)生變化的運(yùn)算可提到進(jìn)入循環(huán)前計(jì)算一次,而不必在循環(huán)中每次循環(huán)都進(jìn)行計(jì)算。優(yōu)化所遵循計(jì)算一次,而不必在循環(huán)中每次循環(huán)都進(jìn)行計(jì)算。優(yōu)化所遵循的原則是程序的等價(jià)變換規(guī)則。的原則是程序的等價(jià)變換規(guī)則。第1章緒論5目標(biāo)代碼生成目標(biāo)代碼生成這一階段
21、的任務(wù)是把中間代碼這一階段的任務(wù)是把中間代碼(或經(jīng)優(yōu)化處理之后或經(jīng)優(yōu)化處理之后)變換成變換成特特定機(jī)器上定機(jī)器上的的機(jī)器語言程序或匯編語言程序機(jī)器語言程序或匯編語言程序,實(shí)現(xiàn)最終的翻譯工作。,實(shí)現(xiàn)最終的翻譯工作。 此工作因?yàn)榇斯ぷ饕驗(yàn)槟繕?biāo)語言目標(biāo)語言的關(guān)系而十分的關(guān)系而十分依賴硬件系統(tǒng)依賴硬件系統(tǒng),即如何充,即如何充分利用機(jī)器現(xiàn)有的寄存器,合理地選擇指令,生成盡可能短且有分利用機(jī)器現(xiàn)有的寄存器,合理地選擇指令,生成盡可能短且有效的目標(biāo)代碼,這些都與目標(biāo)機(jī)器的硬件結(jié)構(gòu)有關(guān)。效的目標(biāo)代碼,這些都與目標(biāo)機(jī)器的硬件結(jié)構(gòu)有關(guān)。上述編譯過程的五個(gè)階段是編譯程序工作時(shí)的動(dòng)態(tài)特征,編上述編譯過程的五個(gè)階段是編
22、譯程序工作時(shí)的動(dòng)態(tài)特征,編譯程序的結(jié)構(gòu)可以按照這五個(gè)階段的任務(wù)分模塊進(jìn)行設(shè)計(jì)。譯程序的結(jié)構(gòu)可以按照這五個(gè)階段的任務(wù)分模塊進(jìn)行設(shè)計(jì)。第1章緒論圖圖15 編譯程序結(jié)構(gòu)示意編譯程序結(jié)構(gòu)示意 第1章緒論編譯過程中源程序的編譯過程中源程序的各種信息各種信息被保留在不同的表格里,編被保留在不同的表格里,編譯各階段的工作都譯各階段的工作都涉及涉及到構(gòu)造、查找或更新有關(guān)的到構(gòu)造、查找或更新有關(guān)的表格表格,編譯,編譯過程的過程的絕大部分時(shí)間都絕大部分時(shí)間都用在造表、查表和更新表格的事務(wù)上,用在造表、查表和更新表格的事務(wù)上,因此,編譯程序中還應(yīng)包括一個(gè)因此,編譯程序中還應(yīng)包括一個(gè)表格管理程序表格管理程序。出錯(cuò)處理
23、出錯(cuò)處理與編譯的各個(gè)階段都有聯(lián)系,與前三個(gè)階段的聯(lián)與編譯的各個(gè)階段都有聯(lián)系,與前三個(gè)階段的聯(lián)系尤為密切。系尤為密切。出錯(cuò)處理程序應(yīng)在出錯(cuò)處理程序應(yīng)在發(fā)現(xiàn)錯(cuò)誤后,將錯(cuò)誤的有關(guān)信發(fā)現(xiàn)錯(cuò)誤后,將錯(cuò)誤的有關(guān)信息如錯(cuò)誤類型、出錯(cuò)地點(diǎn)等向用戶報(bào)告。此外,為了盡可能多息如錯(cuò)誤類型、出錯(cuò)地點(diǎn)等向用戶報(bào)告。此外,為了盡可能多地發(fā)現(xiàn)錯(cuò)誤,應(yīng)在發(fā)現(xiàn)錯(cuò)誤后還能繼續(xù)編譯下去,以便發(fā)現(xiàn)更地發(fā)現(xiàn)錯(cuò)誤,應(yīng)在發(fā)現(xiàn)錯(cuò)誤后還能繼續(xù)編譯下去,以便發(fā)現(xiàn)更多的錯(cuò)誤。多的錯(cuò)誤。第1章緒論1.4 編譯程序的開發(fā)編譯程序的開發(fā)編譯程序的開發(fā)常常采用編譯程序的開發(fā)常常采用自編譯自編譯、交叉編譯交叉編譯、自展和移植等自展和移植等技術(shù)實(shí)現(xiàn)。技術(shù)實(shí)現(xiàn)
24、。1自編譯自編譯用某種高級(jí)語言書寫自己的編譯程序稱為自編譯。用某種高級(jí)語言書寫自己的編譯程序稱為自編譯。 例如,假定例如,假定A機(jī)器上已有一個(gè)機(jī)器上已有一個(gè)PASCAL語言可以運(yùn)行,則語言可以運(yùn)行,則可以可以用用PASCAL語言語言編寫編寫出一個(gè)功能出一個(gè)功能更強(qiáng)的更強(qiáng)的PASCAL語言編譯程序語言編譯程序,然后借助于原有的然后借助于原有的PASCAL編譯程序?qū)π戮帉懙木幾g程序?qū)π戮帉懙腜ASCAL編譯程編譯程序進(jìn)行編譯,從而在編譯后即得到一個(gè)能在序進(jìn)行編譯,從而在編譯后即得到一個(gè)能在A機(jī)器上運(yùn)行的功能機(jī)器上運(yùn)行的功能更強(qiáng)的更強(qiáng)的PASCAL編譯程序。編譯程序。第1章緒論2交叉編譯交叉編譯交叉
25、編譯交叉編譯是指用是指用A機(jī)器上的編譯程序來產(chǎn)生可在機(jī)器上的編譯程序來產(chǎn)生可在B機(jī)器上運(yùn)機(jī)器上運(yùn)行的目標(biāo)代碼。行的目標(biāo)代碼。 例如,若例如,若A機(jī)器上已有機(jī)器上已有C語言語言可以運(yùn)行,則可用可以運(yùn)行,則可用A機(jī)器中的機(jī)器中的C語言書寫一個(gè)編譯程序,它的源程序是語言書寫一個(gè)編譯程序,它的源程序是C語言程序,而產(chǎn)生的語言程序,而產(chǎn)生的目標(biāo)程序則是基于目標(biāo)程序則是基于B機(jī)器的,即機(jī)器的,即能夠在能夠在B機(jī)器上機(jī)器上執(zhí)行的低級(jí)語言執(zhí)行的低級(jí)語言程序。程序。以上兩種方法都以上兩種方法都假定假定已經(jīng)有了一個(gè)系統(tǒng)程序設(shè)計(jì)語言可以已經(jīng)有了一個(gè)系統(tǒng)程序設(shè)計(jì)語言可以使用。使用。第1章緒論3自展自展自展的方法是:自
26、展的方法是:首先首先確定一個(gè)非常簡(jiǎn)單的核心語言確定一個(gè)非常簡(jiǎn)單的核心語言L0,然后,然后用用機(jī)器語言或匯編語言機(jī)器語言或匯編語言書寫出它的編譯程序書寫出它的編譯程序T0;再把語言;再把語言L0擴(kuò)充擴(kuò)充到到L1,此時(shí)有,此時(shí)有L0L1,并用,并用L0編寫編寫L1的編譯程序的編譯程序T1(即自編譯即自編譯);然后再把語言然后再把語言L1擴(kuò)充為擴(kuò)充為L(zhǎng)2,此時(shí)有,此時(shí)有L1L2,并用,并用L1編寫編寫L2的編的編譯程序譯程序T2這樣不斷擴(kuò)展下去,直到完成所要求的編譯程序這樣不斷擴(kuò)展下去,直到完成所要求的編譯程序?yàn)橹埂橹?。?章緒論4移植移植移植移植是指是指A機(jī)器上的某種高級(jí)語言的編譯程序機(jī)器上的某
27、種高級(jí)語言的編譯程序稍加稍加改動(dòng)后能改動(dòng)后能夠在夠在B機(jī)器上運(yùn)行。一個(gè)程序若能較容易地從機(jī)器上運(yùn)行。一個(gè)程序若能較容易地從A機(jī)器上搬到機(jī)器上搬到B機(jī)器機(jī)器上運(yùn)行,則稱該程序是可移植的。移植具有一定的局限性。上運(yùn)行,則稱該程序是可移植的。移植具有一定的局限性。用系統(tǒng)程序設(shè)計(jì)語言來書寫用系統(tǒng)程序設(shè)計(jì)語言來書寫編譯程序編譯程序雖然縮短了開發(fā)周期并雖然縮短了開發(fā)周期并提高了編譯程序的質(zhì)量,但提高了編譯程序的質(zhì)量,但實(shí)現(xiàn)的自動(dòng)化實(shí)現(xiàn)的自動(dòng)化程度不高。實(shí)現(xiàn)編譯程程度不高。實(shí)現(xiàn)編譯程序的序的最高境界最高境界是能夠有一個(gè)自動(dòng)生成編譯程序的軟件工具,只要是能夠有一個(gè)自動(dòng)生成編譯程序的軟件工具,只要把把源程序的定
28、義源程序的定義以及機(jī)器語言的以及機(jī)器語言的描述描述輸入到該軟件中,就能自動(dòng)輸入到該軟件中,就能自動(dòng)生成這個(gè)語言的編譯程序,如圖生成這個(gè)語言的編譯程序,如圖16所示。所示。第1章緒論圖16 編譯程序自動(dòng)生成示意第1章緒論1.5 構(gòu)造編譯程序所應(yīng)具備的知識(shí)內(nèi)容構(gòu)造編譯程序所應(yīng)具備的知識(shí)內(nèi)容對(duì)被編譯的對(duì)被編譯的源語言源語言(如如C、PASCAL等等),要,要深刻理解深刻理解其結(jié)其結(jié)構(gòu)構(gòu)(語法語法)和含義。和含義。對(duì)目標(biāo)機(jī)器的對(duì)目標(biāo)機(jī)器的硬件和指令系統(tǒng)硬件和指令系統(tǒng)有深刻的了解。有深刻的了解。熟練掌握熟練掌握編譯方法編譯方法。第1章緒論(1) 對(duì)被編譯的對(duì)被編譯的源語言源語言(如如C、PASCAL等等
29、),要,要深刻理解深刻理解其其結(jié)構(gòu)結(jié)構(gòu)(語法語法)和含義。例如,下面的和含義。例如,下面的for循環(huán)語句:循環(huán)語句: for(i=1;i=10+i;i+) x=x+1; 就存在對(duì)就存在對(duì)循環(huán)終值循環(huán)終值的理解問題。的理解問題。 一種一種理解理解是以是以第一次第一次進(jìn)入進(jìn)入for循環(huán)的循環(huán)的i值計(jì)算出值計(jì)算出循環(huán)終值循環(huán)終值,此,此循環(huán)終值在循環(huán)中不再改變,也即循環(huán)終值為循環(huán)終值在循環(huán)中不再改變,也即循環(huán)終值為11; 另一種另一種理解理解則是循環(huán)終值表達(dá)式則是循環(huán)終值表達(dá)式10+i中的中的i值隨循環(huán)在不斷值隨循環(huán)在不斷地改變,此時(shí)地改變,此時(shí)for語句將出現(xiàn)死循環(huán)。語句將出現(xiàn)死循環(huán)。 如如TUR
30、BO PASCAL就是按第一種語義進(jìn)行翻譯的,而就是按第一種語義進(jìn)行翻譯的,而TURBO C則是按第二種語義翻譯的。此外,如果出了循環(huán)后則是按第二種語義翻譯的。此外,如果出了循環(huán)后還要引用還要引用i值,那么這個(gè)值,那么這個(gè)i值究竟是值究竟是循環(huán)終值循環(huán)終值還是還是循環(huán)終值加循環(huán)終值加1?因此,對(duì)語義的不同理解可以得到不同的編譯程序。因此,對(duì)語義的不同理解可以得到不同的編譯程序。第1章緒論(2) 必須對(duì)目標(biāo)機(jī)器的必須對(duì)目標(biāo)機(jī)器的硬件和指令系統(tǒng)硬件和指令系統(tǒng)有深刻的了解。有深刻的了解。 例如,產(chǎn)生兩個(gè)數(shù)相加的指令在例如,產(chǎn)生兩個(gè)數(shù)相加的指令在8086/8088匯編中假定用下面匯編中假定用下面兩種兩種指令實(shí)現(xiàn):指令實(shí)現(xiàn):ADD AX,06或或ADD BX,06 粗略看來,這兩條加法指令除了粗略看來,這兩條加法指令除了寄存器寄存器不同外沒有本質(zhì)上的差不同外沒有
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 分紅股合作合同范本
- 公司建材購銷合同范本
- 車輛運(yùn)輸肉類合同范本
- 供貨合同范本范文
- 養(yǎng)殖股東協(xié)議合同范本
- 華為購車合同范本
- 區(qū)代理商合同范本
- 儲(chǔ)料倉合同范本
- 制作標(biāo)識(shí)標(biāo)牌合同范本
- 合理借款合同范例
- 動(dòng)畫劇本創(chuàng)作課件
- 40篇英語短文搞定高考3500個(gè)單詞
- 【企業(yè)會(huì)計(jì)信息化存在的問題及解決對(duì)策開題報(bào)告】
- 痘痘肌膚的各種類型
- (完整版)設(shè)計(jì)管理
- 中國嚴(yán)重膿毒癥膿毒性休克治療指南2023年
- 材料性能學(xué)(第2版)付華課件0-緒論-材料性能學(xué)
- GB/T 3403.2-2013塑料粉狀脲-甲醛和脲/三聚氰胺-甲醛模塑料(UF-和UF/MF-PMCs)第2部分:試樣制備和性能測(cè)定
- GB/T 21835-2008焊接鋼管尺寸及單位長(zhǎng)度重量
- 2023年湖南省普通高中學(xué)業(yè)水平考試數(shù)學(xué)版含答案
- 積極情緒的力量
評(píng)論
0/150
提交評(píng)論