版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1第1章編譯系統(tǒng)概述1.1
程序設(shè)計語言的發(fā)展1.2
基本術(shù)語解釋1.3
編譯過程概述1.4
出錯處理1.5
編譯程序的前端和后端1.6
編譯程序的實現(xiàn)方式21.1 程序設(shè)計語言的發(fā)展匯編語言(AssembleLanguage)機器語言(MachineLanguage)程序設(shè)計語言(ProgrammingLanguage)3
例計算表達式3*16+2的值,實現(xiàn)該計算的機器語言程序、匯編語言程序和程序設(shè)計語言(C語言)程序如下所示。目標計算機的系統(tǒng)結(jié)構(gòu)和匯編語言的使用方法詳見本書第7章。22038210260261011000f000LoadR0,3MulR0,10LoadR1,2AddR0,R1WriteR0Haltvoidmain(void){cout<<3*16+2;}4㈠機器語言機器指令集合稱為機器語言。機器指令即二進制數(shù),通常由若干字節(jié)構(gòu)成。①優(yōu)點計算機可直接識別執(zhí)行可充分利用硬件特性②缺點可讀性差指令系統(tǒng)隨機種而異由于機器指令直接或間接含有絕對地址,增加或減少一條指令,可能會引起多條指令的修改。編程者需協(xié)調(diào)內(nèi)存的使用所以,機器語言形式的程序編制和維護困難,限制了計算機的推廣和應(yīng)用。5㈡匯編語言用記憶符取代二進制位,存儲地址和匯編語句的序號可用符號名表示。①優(yōu)點用符號取代二進制數(shù),提高了程序的可理解性。性能較好的匯編語言,可用符號名來表示存儲地址和匯編語句序號,這樣避免了在匯編語句中絕對地址的出現(xiàn)??沙浞掷糜布匦运?,匯編語言在一定程度上降低了程序編制和維護的難度。②缺點匯編語句和機器指令基本上是一對一的,所以匯編語言的編程效率并沒有質(zhì)的提高。和機器語言一樣,匯編語言依附于目標計算機。需匯編程序,將匯編語言譯成機器語言。匯編程序是編譯程序的雛形。6㈢程序設(shè)計語言程序設(shè)計語言又稱高級語言。程序設(shè)計語言接近于英語,相當于工程語言。目前計算機系統(tǒng)一般含有多個程序設(shè)計語言的翻譯程序(例VC、VB等),甚至對同一個程序設(shè)計語言配備了多個不同性能的翻譯程序,供用戶選擇使用。①優(yōu)點獨立于具體計算機,面向過程(函數(shù))或?qū)ο?。程序設(shè)計語言接近于英語,可理解性好。數(shù)據(jù)類型豐富,各種功能的語句齊備,一條語句至少相當于幾十條匯編語句。所以,程序設(shè)計語言極大地提高了編程效率,大幅度地降低了編程難度。②缺點需翻譯程序,將高級語言譯成機器語言或匯編語言。對硬件操作困難,高級語言通常提供匯編語言接口。71.2基本術(shù)語解釋㈠源語言和源程序(SourceLanguageandSourceProgram)
用程序設(shè)計語言書寫的程序,稱為源程序,該程序設(shè)計語言稱為源語言。源程序通常用編緝程序輸入,用字符(ASCII碼)表示,以文本文件形式存儲。㈡文本文件(TextFile)
文本文件的內(nèi)容由94個圖形字符‘!’-‘~’(33-126)和4個控制字符換行(10)、回車(13)、空格(32)、TAB(9)構(gòu)成,文本文件又稱為ASCII碼文件,擴展名通常為TXT,文件尾用控制字符EOF(26)指示。8㈢目標語言和目標程序(TargetLanguageandTargetProgram)
目標語言可以是機器語言(二進制數(shù)),也可以是匯編語言(字符),或者是其它中間語言(字符),但最終結(jié)果必定是機器語言。機器語言程序用二進制文件存儲,匯編語言或中間語言程序用文本文件存儲。目標程序是經(jīng)翻譯程序加工后用目標語言表示的程序。㈣二進制文件(BinaryFile)
二進制文件由機器指令即二進制數(shù)構(gòu)成,因二進制數(shù)可能是26(文件結(jié)束控制符),故文件尾用文件長度(文件的字節(jié)數(shù))指示,擴展名通常為EXE。9㈤翻譯程序(Translator)
將源程序譯成邏輯上等價的目標程序的程序。翻譯程序有二種工作方式:編譯和解釋。解釋程序Interpreter
源程序結(jié)果輸入數(shù)據(jù)解釋、執(zhí)行
解釋方式主要特點是:用戶程序是消極的。用戶程序運行時,控制點在解釋程序,即用戶程序的執(zhí)行離不開解釋程序。①解釋方式(Interpret)
以源程序作為輸入,輸入一句解釋執(zhí)行一句,不產(chǎn)生完整的目標程序,相應(yīng)的翻譯程序稱為解釋程序(Interpreter)
。工作方式如下圖所示:10②編譯方式(Compile)
將源程序全部譯為目標程序,該目標程序可在操作系統(tǒng)環(huán)境下直接執(zhí)行,相應(yīng)的翻譯程序稱為編譯程序(Compiler)
,工作方式如下圖所示:
編譯是從源代碼(通常為高階語言)到能直接被計算機或虛擬機執(zhí)行的目標代碼(通常為低階語言或機器語言)的翻譯過程。然而,也存在從低階語言到高階語言的編譯器,反編譯器將生成的低階語言代碼重新編譯成高階語言代碼。也有從一種高階語言生成另一種高階語言的編譯器,或者生成一種需要進一步處理的的中間代碼的編譯器(又叫級聯(lián))。
源代碼(sourcecode)→預處理器(preprocessor)→編譯器(compiler)→匯編程序(assembler)→目標代碼(objectcode)→鏈接器(Linker)→可執(zhí)行程序(executables)
11編輯程序的工作結(jié)果是ASCII碼形式的源程序。編譯程序以ASCII碼形式的源程序為輸入,它的工作結(jié)果是二進制形式的目標程序,但并未包括用戶程序中所使用的系統(tǒng)函數(shù)的目標代碼。從整體上來看,程序是不完整的,程序中的部分地址尚未確定(例系統(tǒng)函數(shù)的調(diào)用)。將二進制形式的用戶程序和系統(tǒng)函數(shù)目標代碼連接成一個程序,對未確定的地址進行定位。由操作系統(tǒng)將用戶程序裝入內(nèi)存后運行。程序在運行過程中讀入數(shù)據(jù),經(jīng)處理加工后輸出計算結(jié)果。
編譯方式主要特點是:用戶程序是積極的。用戶程序執(zhí)行時,控制點在用戶程序自身。除操作系統(tǒng)外,程序運行無需其它支撐軟件。12③二種翻譯方式比較解釋方式和編譯方式的主要區(qū)別是:目標代碼的執(zhí)行方式不同,基本原理和方法沒有本質(zhì)上的區(qū)別。1)解釋方式的優(yōu)點提供一種直接的交互調(diào)試功能,容易獲得較好的動態(tài)調(diào)試效果。使用變量可不預先定義。變量性質(zhì)可動態(tài)修改。2)解釋方式的缺點在執(zhí)行時需動態(tài)地對程序進行分析翻譯,開銷大,其執(zhí)行速度相當于編譯方式的1/10至1/100。解釋方式占用內(nèi)存大顯然解釋程序的優(yōu)點就是編譯程序的缺點,反之亦然,對于編譯程序的優(yōu)缺點不再重復敘述。④對任何一種高級語言,既可采用編譯方式,也可采用解釋方式,包括匯編語言在內(nèi)(MASM方式和DEBUG方式)。131.3 編譯過程概述
典型的編譯程序工作過程是:輸入源程序,對它進行加工處理,最后輸出目標程序(機器語言或匯編語言形式)。整個過程相當復雜,從數(shù)據(jù)加工的角度來看,可將其分成4個邏輯階段,它們是:詞法分析語法分析語義分析(中間代碼產(chǎn)生)目標代碼生成詞法分析語法分析語義分析(中間代碼產(chǎn)生)目標代碼生成源程序目標程序編譯程序基本上是按照這個流程來設(shè)計的。圖示如下:14
以算術(shù)表達式3+abc*128為例,來說明編譯程序工作過程。㈠詞法分析(LexicalAnalysis)
執(zhí)行詞法分析任務(wù)的程序稱為詞法分析器。任務(wù):字符串形式單詞編碼形式單詞內(nèi)部碼(二元式)依據(jù):語言的構(gòu)詞規(guī)則①二元式(Pair)(單詞種別,單詞值)單詞種別:用整數(shù)碼表示(為直觀起見用字符表示),語法分析時用。單詞值:在本書中用字符串表示,語義分析時用。當一個單詞種別中可能有多個單詞時,單詞的值才有意義。為了便于輸入處理,無意義的單詞值用"NUL"表示。15②二元式編碼單詞單詞種別單詞值++NUL--NUL**NUL//NUL((NUL))NUL………標識符i字符串形式符號名
整常數(shù)x字符串形式整常數(shù)實常數(shù)y字符串形式實常數(shù)………經(jīng)詞分析,算術(shù)表達式3+abc*128的單詞內(nèi)部碼(二元式)為:('x',"3")('+',"NUL")('i',"abc")('*',"NUL")('x',"128")16㈡語法分析(Parsing)
執(zhí)行語法分析任務(wù)的程序稱為語法分析器。任務(wù):檢查源程序的語法結(jié)構(gòu)是否正確依據(jù):語言的語法規(guī)則在語法分析時,算術(shù)表達式3+abc*128的語法結(jié)構(gòu)應(yīng)表示為x+i*x,語法分析器最終應(yīng)識別出這是一個算術(shù)表達式。識別過程相當于建立一棵語法樹 <算術(shù)表達式> <算術(shù)表達式> + <項> <項> <項> * <因子> <因子> <因子> x(整常數(shù)) x(整常數(shù)) i(標識符)17㈢語義分析(SemanticAnalysis)
執(zhí)行語義分析任務(wù)的程序稱為語義分析器或中間代碼產(chǎn)生器。任務(wù):建立符號表和常數(shù)表,記錄源程序中標識符屬性和常數(shù)值,根據(jù)語言的語義規(guī)定生成中間代碼。依據(jù):語言的語義內(nèi)涵語義分析(中間代碼產(chǎn)生)主要工作為:語義正確性檢查語義翻譯①語義正確性檢查 例2:begin
realA;integerB;B=A+B;end
語法正確,不同的語言有不同的語義解釋。標準Fortran語言認為是錯誤的,其不允許不同類型的量進行混合運算。C語言認為是正確的,允許混合運算,但需轉(zhuǎn)換成相同類型的量,然后再進行運算。Pascal語言認為是錯誤的,雖允許混合運算,但不允許將實型量賦值于整型量。begin
realA;
integerB;B=A+B;end18②語義翻譯
1)說明語句的翻譯 將標識符及其屬性填入符號表。
2)執(zhí)行語句的翻譯 根據(jù)不同語句的語義,生成邏輯上等價的中間代碼。中間代碼結(jié)構(gòu)簡單、意義明確的記號系統(tǒng),非常接近機器指令,又獨立于具體機器。常用的中間代碼有三元式和四元式。表達式3+abc*128可譯成如下四元式:
(*,&abc,&128,&T1) (+,&3,&T1,&T2)其中,
&abc表示標識符abc在符號表中入口(即地址);
T1和T2是在翻譯過程中由編譯程序引入的臨時變量,&T1和&T2分別表示T1和T2在符號表中入口;而&128表示常數(shù)128在常數(shù)表中的地址。19符號表(SymbolTable)
符號表用于記錄源程序中出現(xiàn)的標識符(Identifier),一個標識符往往具有一系列的語義值,它包括標識符的名稱、標識符的種屬、標識符的類型、標識符值的存放地址等等。每個標識符在符號表中有一項記錄,用于記錄標識符的各種語義值,而在四元式中填寫的是標識符在符號表中的記錄地址,通常稱為符號表入口。內(nèi)存地址符號名種屬類型…………未分配abc簡單變量整型未分配T1簡單變量整型未分配T2簡單變量整型…………符號表的結(jié)構(gòu)示意如下:20常數(shù)表(ConstantTable)
常數(shù)表用于記錄在源程序中出現(xiàn)的常數(shù)。假定,每個整常數(shù)在常數(shù)表中占2個字節(jié),每個實常數(shù)在常數(shù)表中占4個字節(jié)。常數(shù)的二進制值00000011(3)01000000(128)……常數(shù)表的結(jié)構(gòu)示意如下:21㈣目標代碼生成(CodeGeneration)
執(zhí)行目標代碼生成的程序稱為目標代碼生成器。任務(wù):中間代碼目標代碼(機器指令或匯編語言)依據(jù):目標機器的系統(tǒng)結(jié)構(gòu)假設(shè)模型機器的指令格式為:
opRi,M (Ri)op(M)→Ri
opRi,Rj (Ri)op(Rj)→Ri
opRi,C (Ri)opC→Ri
其中Ri表示寄存器,M表示內(nèi)存地址(可用符號表示),C表示常數(shù)。表達式3+abc*128最終形成的匯編語言程序示意如下:
LoadR0,abc MulR0,128 StoreR0,T1 LoadR0,3 AddR0,T1 StoreR0,T2//假設(shè)地址可以用符號名表示//暫且僅僅使用R022
編譯程序在工作過程中可發(fā)現(xiàn)源程序中各種錯誤,錯誤類型及錯誤處理對策簡述如下:㈠錯誤類型詞法錯誤(可在詞法分析階段發(fā)現(xiàn))語法錯誤(可在語法分析階段發(fā)現(xiàn))語義錯誤(可在語義分析階段發(fā)現(xiàn))1.4 出錯處理(ErrorHandle)㈡出錯處理一旦發(fā)現(xiàn)錯誤,暫停編譯程序工作,指出錯誤的地點和類型。在發(fā)現(xiàn)錯誤后,不中斷編譯程序工作。采取某些措施(例錯誤局部化、錯誤校正等),使得源程序的編譯工作可繼續(xù)下去,盡可能發(fā)現(xiàn)源程序中比較多的錯誤。231.5 編譯程序的前端和后端
由于在編譯程序的內(nèi)部引入了中間代碼,這樣可將編譯程序分為二個相互獨立部分。㈠編譯程序前
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 15561-2024數(shù)字指示軌道衡
- 農(nóng)業(yè)副產(chǎn)品高值化利用趨勢
- 高一化學教案:專題第二單元第一課時化學反應(yīng)中的熱量變化(一)
- 2024高中化學第四章生命中的基礎(chǔ)有機化學物質(zhì)1油脂課時作業(yè)含解析新人教版選修5
- 2024高中地理課時作業(yè)8區(qū)域工業(yè)化與城市化-以我國珠江三角洲地區(qū)為例含解析新人教版必修3
- 2024高中語文第1單元論語蚜第1課天下有道丘不與易也練習含解析新人教版選修先秦諸子蚜
- 2024高中語文第五單元散而不亂氣脈中貫文與可筼筜谷偃竹記訓練含解析新人教版選修中國古代詩歌散文欣賞
- 2024高中語文精讀課文一第2課3魯迅:深刻與偉大的另一面是平和三課堂練習含解析新人教版選修中外傳記蚜
- 2024高考地理一輪復習第七單元自然環(huán)境對人類活動的影響練習含解析
- 2025新人教版英語七年級下不規(guī)則動詞表
- 美的洗衣機MG60-N1003E使用說明書
- 人教版六年級語文上冊期末考試卷(完整版)
- 2023-2024學年第一學期期末質(zhì)量檢測九年級物理試題(帶答案)
- 建筑幕墻物理性能分級
- 河南省2024年道法中考熱點備考重難專題:發(fā)展航天事業(yè)建設(shè)航天強國(課件)
- 臨床診療規(guī)范與操作指南制度
- DLT 5285-2018 輸變電工程架空導線(800mm以下)及地線液壓壓接工藝規(guī)程
- 新員工入職培訓測試題附有答案
- 勞動合同續(xù)簽意見單
- 大學生國家安全教育意義
- 2024年保育員(初級)培訓計劃和教學大綱-(目錄版)
評論
0/150
提交評論