編譯引論精品課件_第1頁
編譯引論精品課件_第2頁
編譯引論精品課件_第3頁
編譯引論精品課件_第4頁
編譯引論精品課件_第5頁
已閱讀5頁,還剩63頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、編譯引論第1頁,共68頁,2022年,5月20日,20點35分,星期二 課程目標(biāo) 介紹編譯器構(gòu)造的基本原理、基本實現(xiàn)方法和基本編譯技術(shù); 介紹形式語言和自動機理論等理論知識: 強調(diào)形式化描述技術(shù); 強調(diào)對編譯原理和技術(shù)的宏觀理解。第2頁,共68頁,2022年,5月20日,20點35分,星期二課程的預(yù)備知識 至少學(xué)過兩門程序設(shè)計語言; 數(shù)據(jù)結(jié)構(gòu); 離散數(shù)學(xué); 具備多種程序設(shè)計語言知識對學(xué)習(xí)本課程會有所幫助。第3頁,共68頁,2022年,5月20日,20點35分,星期二課程意義 理解高級語言的工作原理,編寫出高效的代碼,提高軟件設(shè)計水平; 靈活設(shè)計、實現(xiàn)自定義語言; 編譯器的設(shè)計原理在計算機自身發(fā)

2、展的過程中及其應(yīng)用領(lǐng)域中無所不在,將該原理應(yīng)用于軟件逆向工程、程序分析/驗證、模型轉(zhuǎn)換及和軟件安全等涉及元級操作的領(lǐng)域。第4頁,共68頁,2022年,5月20日,20點35分,星期二 參考資料國外編譯原理領(lǐng)域內(nèi)的3本權(quán)威書籍:當(dāng)代編譯技術(shù)三大圣經(jīng)!1、龍書(Dragon book)第5頁,共68頁,2022年,5月20日,20點35分,星期二2、鯨書(Whale book)第6頁,共68頁,2022年,5月20日,20點35分,星期二3、虎書(Tiger book)第7頁,共68頁,2022年,5月20日,20點35分,星期二國內(nèi)編譯原理領(lǐng)域內(nèi)的權(quán)威書籍: 1. 陳意云 編譯原理高等教育出版社

3、第8頁,共68頁,2022年,5月20日,20點35分,星期二2. 呂映芝 編譯原理清華大學(xué)教育出版社;第9頁,共68頁,2022年,5月20日,20點35分,星期二3. 陳英 編譯原理清華工大學(xué)出版社第10頁,共68頁,2022年,5月20日,20點35分,星期二4.蔣宗禮 編譯原理高等教育出版社第11頁,共68頁,2022年,5月20日,20點35分,星期二5. 劉磊 編譯原理及實現(xiàn)機械工業(yè)出版社 第12頁,共68頁,2022年,5月20日,20點35分,星期二 課程安排理論教學(xué) 64 學(xué)時實踐教學(xué) 32 學(xué)時第13頁,共68頁,2022年,5月20日,20點35分,星期二 對于理論部分,

4、不斷地在數(shù)學(xué)語言和自然語言之間作切換; 學(xué)習(xí)編譯原理的方法 做到“讀你千遍也不厭倦,.”。第14頁,共68頁,2022年,5月20日,20點35分,星期二1.1 程序設(shè)計語言和編譯程序1.2 編譯程序的邏輯結(jié)構(gòu)1.3 其它與編譯程序相關(guān)的程序1.4 編譯程序的實現(xiàn)途徑第一章 編譯引論第15頁,共68頁,2022年,5月20日,20點35分,星期二主要內(nèi)容: 幾個基本概念:翻譯程序匯編程序編譯程序源程序目標(biāo)程序編譯器的工作過程及各個階段的功能;第16頁,共68頁,2022年,5月20日,20點35分,星期二編譯程序的實現(xiàn)途徑;與編譯程序相關(guān)的其他程序:編輯器預(yù)處理器連接程序裝配程序調(diào)試程序第17

5、頁,共68頁,2022年,5月20日,20點35分,星期二一、程序設(shè)計語言 (一)低級語言(面向機器的言) 機器語言 由于機器指令格式和代碼所代表的含義都是硬性規(guī)定的,故稱之為面向機器的語言,也稱為機器語言。 機器指令通常由操作碼和操作數(shù)兩部分組成,操作碼指出該指令所要完成的操作,即指令的功能,操作數(shù)指出參與運算的對象、以及運算結(jié)果所存放的位置等。 機器指令通過線路變成電信號,讓計算機執(zhí)行各種不同的操作。 1.1 程序設(shè)計語言和編譯程序第18頁,共68頁,2022年,5月20日,20點35分,星期二用Pentium機器語言編寫如下程序片段: 1010 1001 0001 0110 0000 0

6、001 0011 1100 0001 1000 0000 0001 0111 1100 0000 01010010 1101 0001 0101 0000 0000 1110 1010 0000 00110000 0101 0001 0101 0000 0000 0101 0011 0001 1000 0000 0001 .0000 0000 0000 0000 0000 0000 0000 0000 x + 15 xy Y = x - 15 否則第19頁,共68頁,2022年,5月20日,20點35分,星期二機器語言的缺點:難學(xué)、難記憶、難理解、出錯率高、難以維護,也不能直觀地反映用計算機解

7、決問題的基本思路。機器語言描述算法十分繁瑣,只供初等的運算、數(shù)據(jù)結(jié)構(gòu)和控制方式: 機器語言只接受算術(shù)運算、按位邏輯運算和數(shù)的大小比較運算等。 機器語言能直接表達的數(shù)據(jù)只有最原始的位、字節(jié)和字三種。 機器語言所提供的控制轉(zhuǎn)移指令也只有無條件轉(zhuǎn)移、條件轉(zhuǎn)移、進入子程序和從子程序返回等最基本的幾種。第20頁,共68頁,2022年,5月20日,20點35分,星期二 2. 機器語言程序依賴于具體的機器, 不具備移植性。 由于機器指令與CPU緊密相關(guān),所以,不同種類的CPU所對應(yīng)的機器指令也就不同,而且它們的指令系統(tǒng)往往相差很大。 但對同一系列的CPU來說,為了滿足各型號之間具有良好的兼容性,新一代CPU

8、的指令系統(tǒng)必須包括先前同系列CPU的指令系統(tǒng)。機器語言的優(yōu)點:執(zhí)行速度快。第21頁,共68頁,2022年,5月20日,20點35分,星期二 匯編語言(面向機器的語言) 用助記符(Memoni)代替操作碼,用地址符號(Symbol)或標(biāo)號(Label)代替地址碼, 如ADD表示加法操作,SUB表示減法操作等等 。通常是為特定的計算機或系列計算機專門設(shè)計的。第22頁,共68頁,2022年,5月20日,20點35分,星期二用Pentium匯編語言編程示例: MOV X , AX CMP AX , Y JL S1 SUB AX ,15 JMP S2 S1: ADD AX ,15 S2: MOV AX,

9、 Y . XDW YDW x + 15 xy Y = x - 15 否則第23頁,共68頁,2022年,5月20日,20點35分,星期二匯編語言的優(yōu)點:1、比機器語言較易學(xué)、易記憶及易理解;2、匯編語言程序占用內(nèi)存空間少,運行速度快,有著高級語言不可替代的用途。 70%以上的系統(tǒng)軟件是用匯編語言編寫的。 某些快速處理、位處理、訪問硬件設(shè)備等高效程序需用匯編語言編寫的。 某些高級繪圖程序、視頻游戲程序需用匯編語言編寫的。 第24頁,共68頁,2022年,5月20日,20點35分,星期二匯編語言的缺點:匯編語言程序依賴于具體的機器, 不具備移植性。 匯編語言是面向具體機型的,它離不開具體計算機的指

10、令系統(tǒng),因此,對于不同型號的計算機,有著不同的結(jié)構(gòu)的匯編語言,對于同一問題所編制的匯編語言程序在不同種類的計算機間是互不相通的。第25頁,共68頁,2022年,5月20日,20點35分,星期二(二)高級語言形式語言:是指按一定邏輯關(guān)系及嚴(yán)格規(guī)定的符號來表達某種事物以及進行信息交流的一種語言.高級語言:模仿便于理解的自然語言和數(shù)學(xué)語言,采用一組形式規(guī)則來描述的人工語言。高級語言編程示例: if (XY ) then Y:=X + 15 else Y:=X - 15;高級語言的優(yōu)點:以人為本,面向自然表達,比匯編語言更容易學(xué),易用、易理解、易修改;高級語言程序不依賴于具體的機器, 具備移植性。第2

11、6頁,共68頁,2022年,5月20日,20點35分,星期二高級程序設(shè)計語言分類:1、程序設(shè)計語言按功能分類:科學(xué)計算用語言商用語言表處理語言圖形語言公式處理語言串處理語言多用途語言第27頁,共68頁,2022年,5月20日,20點35分,星期二2、按處理問題模式分類:過程式語言函數(shù)式語言邏輯式語言對象式語 3、按執(zhí)行模式分類:順序語言并行語言第28頁,共68頁,2022年,5月20日,20點35分,星期二二、高級語言和匯編語言的執(zhí)行翻譯程序(Translator) :它把用匯編語言或高級語言編寫的程序轉(zhuǎn)換成等價的機器語言程序。 匯編程序(Assembler) :匯編語言的翻譯程序稱為匯編程序

12、(Assembler) 編譯程序(Compiler) :高級語言的翻譯程序稱為編譯程序,也稱為編譯器。第29頁,共68頁,2022年,5月20日,20點35分,星期二源程序(Source program):編譯程序的輸入對象, 它是高級語言編寫的程序;目標(biāo)程序(Object program): 編譯程序的輸出對象稱為目標(biāo)程序。目標(biāo)程序可以是機器語言程序、匯編語言程序或用戶自定義某種中間語言程序。第30頁,共68頁,2022年,5月20日,20點35分,星期二三、高級語言的執(zhí)行方式1. 編譯方式編譯階段:將源程序改造成另一種在邏輯上等價的目標(biāo)語言程序;運行階段:在運行子程序的支持下執(zhí)行目標(biāo)程序。

13、運行子程序是為了支持目標(biāo)程序的運行而開發(fā)的程序,如系統(tǒng)提供的標(biāo)準(zhǔn)庫函數(shù)和目標(biāo)程序所調(diào)用的其它子程序。 目標(biāo)程序程序的輸入數(shù)據(jù)運行結(jié)果高級語言 源程序 編譯程序 (器)第31頁,共68頁,2022年,5月20日,20點35分,星期二2. 解釋方式 接受某程序語言編寫的源程序,按源程序語句運行時的動態(tài)結(jié)構(gòu),直接逐句地分析、翻譯并執(zhí)行。解釋程序相當(dāng)于源程序的抽象執(zhí)行機,是語言的實現(xiàn)系統(tǒng)。 高級語言編程示例: if (XY ) then Y:=X + 15 else Y:=X - 15;Z:=Y+1; 運行結(jié)果 解釋程序 (器)程序的輸入數(shù)據(jù)高級語言源程序第32頁,共68頁,2022年,5月20日,2

14、0點35分,星期二解釋器和編譯器的比較解釋器是執(zhí)行系統(tǒng),編譯器是轉(zhuǎn)換系統(tǒng)?;诮忉寛?zhí)行的程序可以動態(tài)修改自身, 而基于編譯執(zhí)行的程序不易勝任,因其需要動態(tài)編譯技術(shù),難度較大?;诮忉尫绞接欣谌藱C交互。執(zhí)行速度:解釋器執(zhí)行速度要慢??臻g開銷: 解釋器需要保存的信息較多,空間開銷大。利用解釋器可自動生成編譯器。二者實現(xiàn)技術(shù)相似。綜上,大多數(shù)的高級語言采用編譯方式。第33頁,共68頁,2022年,5月20日,20點35分,星期二3.語言的轉(zhuǎn)換執(zhí)行方式假如要實現(xiàn)L語言,現(xiàn)在已有L語言的編譯程序,就可以先把用L語言編寫的程序轉(zhuǎn)換成等價的L語言的程序,再利用L語言的編譯程序?qū)崿F(xiàn)L語言。L語言編譯器 轉(zhuǎn)換

15、器 L語言程序 L語言程序 目標(biāo)程序 第34頁,共68頁,2022年,5月20日,20點35分,星期二1.2 編譯程序的邏輯結(jié)構(gòu)編譯程序的基本任務(wù)是將源語言程序翻譯成等價的目標(biāo)語言程序。 1、 源語言的種類成千上萬,從常用的諸如FORTEAN,PASCAL和C語言,到各種各樣的計算機應(yīng)用領(lǐng)域的專用語言。 2、目標(biāo)語言也是成千上萬的。 3、編譯程序根據(jù)它們構(gòu)造的不同、所執(zhí)行的具體功能的差異又分成多種類型,比如:一趟編譯的、多趟編譯的、具有調(diào)試和優(yōu)化功能的等等。 盡管存在這些明顯的復(fù)雜因素,任何編譯程序所必需執(zhí)行的主要任務(wù)基本是一樣的,通過理解這些任務(wù),使用同樣的基本技術(shù),我們可以為各種各樣的源語

16、言和目標(biāo)語言設(shè)計和構(gòu)造編譯程序。第35頁,共68頁,2022年,5月20日,20點35分,星期二 、編譯器的邏輯結(jié)構(gòu)表 處 理 錯 誤 處 理 目標(biāo)代碼生成中間代碼優(yōu)化中間代碼生成語義分析語法分析詞法分析目標(biāo)程序源程序第36頁,共68頁,2022年,5月20日,20點35分,星期二詞法分析的示例某程序片段如下: VAR sum, first, count: real; BEGIN sum:=first + count * 10 END.詞法分析(Lexical Analysis)第37頁,共68頁,2022年,5月20日,20點35分,星期二詞法分析程序掃描該程序段的字符序列,識別出下列單詞及

17、其種類序列:1.關(guān)鍵字 VAR 2.1 sum 3.特殊符 , 4.1 first 5.特殊符 , 6.1 count 7.特殊符 : 8.關(guān)鍵字 real 9.特殊符 ; 10.關(guān)鍵字 BEGIN 11.1 sum 12.特殊符 := 13.1 first 14.特殊符 + 15.1 count 16.特殊符 * 17.整形常數(shù) 10 18 .關(guān)鍵字 END 19.特殊符 .VAR sum, first, count: real; BEGINsum:=first + count * 10 END.第38頁,共68頁,2022年,5月20日,20點35分,星期二單詞種類: 關(guān)鍵字: if、th

18、en、for、while等; 標(biāo)識符; 常數(shù); 運算符 特殊符 分界符: 標(biāo)點符號、左右括號等等. 單詞的機內(nèi)表示,即TOKEN形式,一般包括單詞屬性標(biāo)識和單詞內(nèi)碼兩個部分。這種形式既刻畫了單詞本身,又刻畫了它所具有的種類屬性。 第39頁,共68頁,2022年,5月20日,20點35分,星期二1. (3 ,VAR) 2. (1, sum) 3. (3 , )4. (1 first) 5. (3 , ) 6. (1, count ) 7. (3 , : ) 8. (3 , real ) 9. (3, ; )10. (3 , BEGIN ) 11. (1, sum ) 12. (3 , := )1

19、3. (1, first ) 14. (3 , + ) 15. (1, count ) 16. (3 , * ) 17. (2, 10 ) 18 . (3 , END )19. (3 , . )VAR sum, first, count: real; BEGINsum:=first + count * 10 END.第40頁,共68頁,2022年,5月20日,20點35分,星期二詞法分析任務(wù):依據(jù)語言的詞法規(guī)則,掃描源程序的字符序列,識別每 一個單詞及其種類,并將其表示成所謂的機內(nèi)表示TOKEN形式。在詞法分析階段還要檢查括號類配對等詞法錯誤并去掉源程序中注釋。詞法分析階段不依賴于語言的語法定

20、義。詞法分析與語法分析的接口。第41頁,共68頁,2022年,5月20日,20點35分,星期二語法分析(Syntax Analysis) 依據(jù)源語言的語法規(guī)則,確定整個輸入串是否構(gòu)成一個語法上正確的程序。一般來說分析時發(fā)現(xiàn)錯誤輸出錯誤位置及類型,如未發(fā)現(xiàn)錯誤則將源程序裝換成語法樹的形式,目的是把詞法分析的結(jié)果分解成各種語法單位 。 語法分析程序的掃描對象:源程序的字符序列(當(dāng)詞法分析程序是語法分析程序的子程序時)或Token序列(當(dāng)詞法分析程序是獨立的一遍時。第42頁,共68頁,2022年,5月20日,20點35分,星期二+:=*賦值語句表達式表達式標(biāo)識符 sum 表達式標(biāo)識符 first 表

21、達式標(biāo)識符 count 常數(shù) 10表達式語法分析的示例sum:= first + count * 10 第43頁,共68頁,2022年,5月20日,20點35分,星期二+:=*賦值語句表達式表達式標(biāo)識符 sum 表達式標(biāo)識符 first 表達式標(biāo)識符 count 常數(shù) 10表達式第44頁,共68頁,2022年,5月20日,20點35分,星期二sum + first := count * 10 sum := “first” +count * 10 第45頁,共68頁,2022年,5月20日,20點35分,星期二語義分析(Semantic Analysis) 審查源程序有無語義錯誤,為代碼生成 階

22、段收集類型信息。語義錯誤檢查又可分為類型檢查和一般的語義檢查。類型檢查主要包含以下內(nèi)容:各種條件表達式的類型是不是boolean型?運算符的分量的類型是否相容?賦值語句的左右部的類型是否相容?形參和實參的類型是否相容?下標(biāo)表達式的類型是否為所允許的類型?變體記錄中表示情形的常量是否為合法類型?函數(shù)說明中的函數(shù)類型和返回值的類型是否一致?第46頁,共68頁,2022年,5月20日,20點35分,星期二除了上述類型檢查外,語義分析還要進行如下一些語義檢查:VE中的V是不是變量,而且是數(shù)組類型?V. id中的V是不是變量,而且是記錄類型? id是不是該記錄類型中的域名?V中的V是不是指針或文件變量?

23、Y + f(.)中的f是不是函數(shù)名?形參個數(shù)和實參個數(shù)是否一致?第47頁,共68頁,2022年,5月20日,20點35分,星期二每個使用性標(biāo)識符是否都有聲明?在同層內(nèi)有無標(biāo)識符被聲明多次?p(.)語句中的p是不是過程名?形參個數(shù)和實參個數(shù)是否一致?標(biāo)號是否有聲明?有無重復(fù)聲明和重復(fù)定位錯誤?有無非法轉(zhuǎn)入錯誤?子界類型中的下界和上界類型是否相容?下界是否小于等于上界? 第48頁,共68頁,2022年,5月20日,20點35分,星期二語義分析的示例VAR first: real; count:char; BEGIN sum:=first + count * 10 END.詞義錯誤:1、sum有使用

24、而無定義;2、 count為字符類型變量不能進行乘法運算。第49頁,共68頁,2022年,5月20日,20點35分,星期二中間代碼生成(Intermediate Code Generation) 為優(yōu)化源程序、為編譯程序便于移植和便于修改、將源程序轉(zhuǎn)換成一種稱為中間代碼的內(nèi)部表示形式。 中間代碼是一種簡單的含義明確的記號系統(tǒng),形式有多種,常見的有后綴式(棧式)中間代碼、三地址中間代碼(三元式和四元式)、圖結(jié)構(gòu)中間代碼(樹,DAG)。第50頁,共68頁,2022年,5月20日,20點35分,星期二例:VAR sum, count, first: real; count:char; BEGIN s

25、um:=first + count * 10 END.生成如下四元式形式的中間代碼序列:1、(int-to-real, 10 , - ,t1 )2、(*, count , t1 ,t2 )3、(+, first , t2 ,t3 )4、(:=, t3 ,- , sum )第51頁,共68頁,2022年,5月20日,20點35分,星期二中間代碼優(yōu)化( Intermediate Code Optimization) 在不改變源程序語義的前提下變換或改造中間代碼,使生成的目標(biāo)代碼更為高效,即縮短運行時間或節(jié)省存儲空間。主要的優(yōu)化方式包括常量表達式優(yōu)化、公共子表達式優(yōu)化、不變表達式的循環(huán)外提和削減運算

26、強度等。第52頁,共68頁,2022年,5月20日,20點35分,星期二例:sum:=first + count * 10生成如下四元式形式的中間代碼序列:1、(int-to-real, 10 , - ,t1 )2、(*, count , t1 ,t2 )3、(+, first , t2 ,t3 )4、(:=, t3 ,- , sum )生成如下優(yōu)化后的四元式形式的中間代碼序列:2、(*, count , 10.0 ,t2 )3、(+, first , t2 ,t3 )4、(:=, t3 ,- , sum )第53頁,共68頁,2022年,5月20日,20點35分,星期二目標(biāo)代碼生成(Code

27、 Generation) 中間代碼變換為特定機器上的機器指令代碼(絕對指令代碼或可重定位的指令代碼)或匯編指令代碼。例:sum:=first + count * 10生成如下匯編代碼:1. MOV count , R12. MULT R1 , #10.0 3. MOV first , R24. ADD R1, R25. MOV R1, sum 第54頁,共68頁,2022年,5月20日,20點35分,星期二表格管理(Symbol-Table Management) 較大的編譯程序用到很多表格,為了合理地管理表格(構(gòu)造、查找、更新),很多編譯程序設(shè)立一些專門子程序(稱為表格管理程序)負責(zé)管理表格

28、。 錯誤處理(Error Detection and Reporting) 編譯程序各個階段還存在著錯誤處理模塊,當(dāng)有錯誤出現(xiàn)時,由相應(yīng)的錯誤處理模塊給出解決方案,使得編譯器能夠繼續(xù)進行下去。詞法和語法錯誤檢查集中一次完成,而語義錯誤檢查要分散在語法分析以后的各個階段。第55頁,共68頁,2022年,5月20日,20點35分,星期二1.2.2 遍 (Pass) 所謂“遍”就是對源程序或源程序的中間表示形式從頭到尾掃描一次,并作加工處理,生成新的中間結(jié)果或目標(biāo)程序。 第56頁,共68頁,2022年,5月20日,20點35分,星期二1.2.3 編譯程序的前端和后端前端主要由與源語言有關(guān)但與目標(biāo)機無

29、關(guān)的那些部分組成。編譯前端通常包括詞法分析、語法分析、語義分析、中間代碼生成,與目標(biāo)機無關(guān)的中間代碼優(yōu)化部分也可包含在前端,當(dāng)然前端也包括相應(yīng)部分的錯誤處理。編譯后端包括與目標(biāo)機有關(guān)的中間代碼優(yōu)化部分和目標(biāo)代碼生成等。一般來說,這些部分與源語言無關(guān)而僅僅依賴于中間語言。很明顯編譯后端是面向目標(biāo)語言的,而編譯前端則不是,它幾乎獨立于目標(biāo)語言。第57頁,共68頁,2022年,5月20日,20點35分,星期二 源程序文件預(yù)處理器標(biāo)準(zhǔn)源程序文件編譯程序 匯編代碼匯編程序可重定位的目標(biāo)代碼連接/裝配程序絕對目標(biāo)代碼高級語言程序的生成到可執(zhí)行代碼的生成過程編輯器調(diào)試程序1.3 其它與編譯程序相關(guān)的伙伴程序

30、第58頁,共68頁,2022年,5月20日,20點35分,星期二編輯器(Editor) 為用戶輸入源程序文件提供一般的編輯功能,有的還具有語法制導(dǎo)的結(jié)構(gòu)化功能和其它分析、提示、檢查和自動提供關(guān)鍵字或與當(dāng)前關(guān)鍵字相匹配的關(guān)鍵字等高級編輯功能等。第59頁,共68頁,2022年,5月20日,20點35分,星期二 預(yù)處理器(Preprocessor) 預(yù)處理器是翻譯工作開始之前由編譯器調(diào)用的獨立程序,它所做的工作包括刪除源程序中的注釋、執(zhí)行宏替換以及包含文件的嵌入等。第60頁,共68頁,2022年,5月20日,20點35分,星期二連接程序(Linker) 連接程序負責(zé)將分別在不同的目標(biāo)文件中編譯或匯編

31、的代碼集中到一個可執(zhí)行文件中,并將目標(biāo)程序和標(biāo)準(zhǔn)庫函數(shù)的代碼以及計算機操作系統(tǒng)提供的資源連接在一起。連接程序?qū)Σ僮飨到y(tǒng)和目標(biāo)機有極大的依賴性。第61頁,共68頁,2022年,5月20日,20點35分,星期二裝配程序(Loader)裝配程序用來把程序加載到內(nèi)存儲器中,以便執(zhí)行。由于用戶的程序經(jīng)匯編或編譯后生成的目標(biāo)代碼通常采用相對地址的形式,它的起始地址是不確定的,這樣的代碼被稱為可重定位的。裝入程序可處理所有的與指定的基地址或起始地址有關(guān)的可重定位的地址,它使得可執(zhí)行代碼更加靈活。第62頁,共68頁,2022年,5月20日,20點35分,星期二 在高級語言發(fā)展的早期,這些工具都是獨立的,缺乏整

32、體性。隨著程序設(shè)計語言的發(fā)展,編輯器、預(yù)處理器、編譯器、連接程序、裝配程序、調(diào)試程序及項目管理程序等這些工具往往被集成在一起,構(gòu)成基于窗口的交互式集成開發(fā)環(huán)境(IDE),集編輯、編譯、調(diào)試、連接、運行等功能于一體。在這種集成開發(fā)環(huán)境中,編譯程序起到核心作用。調(diào)試程序(Debugger) 調(diào)試程序是可在被編譯了的程序中判定執(zhí)行錯誤的程序。第63頁,共68頁,2022年,5月20日,20點35分,星期二1.4 編譯程序的實現(xiàn)途徑一、開發(fā)編譯程序的必要條件實現(xiàn)一個編譯程序應(yīng)從以下三方面入手:源語言:對源語言的詞法、語法和語義要有準(zhǔn)確無誤 的理解,否則難以保證編譯程序的正確性。目標(biāo)語言:對目標(biāo)語言要有很好的了解,否則會生成 質(zhì)量不高的目標(biāo)代碼。若選用機器語言作 為目標(biāo)語言,更需要深入了解目標(biāo)機的軟 件、硬件的有關(guān)資源、環(huán)境及特點。編譯技術(shù): 確定對編譯程序的要求,如搞不搞優(yōu)化,搞優(yōu)化搞到哪一級等等。根據(jù)編譯程序的規(guī)模,確定編譯程序的掃描次數(shù)、每趟掃描的具體任務(wù)和所要采用的技術(shù)。設(shè)計各遍掃描程序的算法并加以實現(xiàn) 。第64頁,共6

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論