版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1
編譯原理與技術(shù)2課程內(nèi)容簡(jiǎn)介
介紹編譯器(編譯程序)構(gòu)造的原理和實(shí)現(xiàn)方法理論知識(shí)包括:詞法分析方法(形式語(yǔ)言和自動(dòng)機(jī)理論)、語(yǔ)法分析方法(自頂向下、自底向上)、語(yǔ)義分析(語(yǔ)法制導(dǎo)的定義和屬性文法)、代碼優(yōu)化等強(qiáng)調(diào)形式化描述技術(shù)(涉及到很多數(shù)學(xué)定義)最終目的是要求掌握涉及編譯器的算法的核心思想,不偏向于某種源語(yǔ)言或某個(gè)目標(biāo)機(jī)器3學(xué)習(xí)意義
理解高級(jí)程序語(yǔ)言的運(yùn)行機(jī)制編譯器的設(shè)計(jì)原理和實(shí)現(xiàn)技術(shù)具有通用性(符號(hào)處理技術(shù)以及各類(lèi)分析算法)培養(yǎng)“計(jì)算機(jī)思維”:計(jì)算機(jī)怎么解決問(wèn)題?
如何讓計(jì)算機(jī)幫助我們?計(jì)算機(jī)專(zhuān)業(yè)特有課程其他專(zhuān)業(yè)的考研科目4考研試題舉例(1)1、試寫(xiě)出一個(gè)上下文無(wú)關(guān)文法G,它能產(chǎn)生配對(duì)的圓括號(hào)串(例如,(),(()),()(())等,甚至包含0對(duì)括號(hào)).使用文法G給出輸入串(())()#的自上而下分析過(guò)程。
5考研試題舉例(2)有如下一個(gè)C語(yǔ)言程序,實(shí)現(xiàn)了m和2的n次方的乘積運(yùn)算,試給出運(yùn)行時(shí)整個(gè)棧的內(nèi)容。棧內(nèi)數(shù)據(jù)區(qū)的活動(dòng)記錄結(jié)構(gòu)如圖所示.
┌──────┐┌─────┐
│函數(shù)f返回值││返回結(jié)果值│
├──────┤├─────┤
│局部變量區(qū)││局部變量區(qū)│
├──────┤├─────┤
│全局變量區(qū)││形參單元區(qū)│
├──────┤├─────┤
│主程序main││返回地址│
│數(shù)據(jù)區(qū)│├─────┤
└──────┘│
基SP
│
├─────┤
│函數(shù)數(shù)據(jù)區(qū)│
└─────┘
考研試題舉例(2)續(xù)intm;intn;
intf(n)
{intc;
if(n==0)c=m;
elsec=f(n-1)*2;
returnc;
}
voidmain()
{intn=2;
m=5;
printf("%d\n",f(n));
}67學(xué)習(xí)要求先修課程:
某一門(mén)高級(jí)程序設(shè)計(jì)語(yǔ)言、高等數(shù)學(xué)、數(shù)據(jù)結(jié)構(gòu)、匯編語(yǔ)言、離散數(shù)學(xué)本課程學(xué)習(xí)方法:勤畫(huà)圖既涉及算法,又聯(lián)系到程序設(shè)計(jì)語(yǔ)言,注重聯(lián)想考核方式:平時(shí)30%+期末考試70%8編譯原理呂映芝張素琴等清華大學(xué)出版社
程序設(shè)計(jì)語(yǔ)言編譯原理陳火旺等
國(guó)防工業(yè)出版社編譯原理及編譯程序構(gòu)造秦振松等東南大學(xué)出版社參考書(shū)籍參考書(shū)籍龍書(shū)Compilers:Principles,Techniques,andTools作者:AlfredV.Aho,RaviSethi,JeffreyD.Ullman.
鯨書(shū)AdvancedCompilerDesignandImplementation作者:StevenS.Muchnick虎書(shū)ModernCompilerImplementationinJava/C++/ML,SecondEdition作者:AndrewW.Appel,MaiaGinsburg9教學(xué)內(nèi)容目錄編譯基本概念形式語(yǔ)言描述詞法分析與有限自動(dòng)機(jī)自頂向下的語(yǔ)法分析自底向上的語(yǔ)法分析語(yǔ)義分析與目標(biāo)代碼生成中間代碼與代碼優(yōu)化10第一章編譯概述1.1編譯程序的基本概念1.2編譯程序的邏輯結(jié)構(gòu)1.3編譯程序的構(gòu)造1.4編譯技術(shù)的應(yīng)用1.5編譯技術(shù)的發(fā)展1.6解釋系統(tǒng)的定義11什么是編譯程序(compiler)?定義:一個(gè)語(yǔ)言翻譯程序作用:是把一種語(yǔ)言(稱(chēng)作源語(yǔ)言)書(shū)寫(xiě)的程序翻譯成另一種語(yǔ)言(稱(chēng)作目標(biāo)語(yǔ)言)書(shū)寫(xiě)的等價(jià)的程序.12為什么需要編譯(compiler)???13程序是按一定規(guī)則書(shū)寫(xiě)的一系列的符號(hào)串序列。程序設(shè)計(jì)語(yǔ)言是人工設(shè)計(jì)的、用來(lái)書(shū)寫(xiě)程序的符號(hào)語(yǔ)言。程序設(shè)計(jì)語(yǔ)言:從低級(jí)到高級(jí)分為三類(lèi)機(jī)器語(yǔ)言匯編語(yǔ)言高級(jí)程序設(shè)計(jì)語(yǔ)言知識(shí)回顧:14
機(jī)器語(yǔ)言程序100058201020C(1020)=>reg2100459201024C(reg2)~C(1024)100847C01014當(dāng)<=時(shí)goto1014100C50201028C(reg2)=>1028101047F0101Cgoto101C101458201024C(1024)=>reg2101850201028C(reg2)=>1028101C…15
匯編語(yǔ)言程序
L2,xx=>reg2C2,yreg2(x)~yBNGLESS當(dāng)<=時(shí)gotoLESSST2,maxreg2(x)=>maxBEXITgotoEXITLESSL2,yy=>reg2ST2,maxreg2(y)=>maxEXIT高級(jí)程序設(shè)計(jì)語(yǔ)言程序
if(x>y)max=x;elsemax=y;Q:編寫(xiě)好的程序能直接在計(jì)算機(jī)上執(zhí)行么???A:除非是機(jī)器語(yǔ)言編寫(xiě)的程序,否則就是
雞同鴨講,對(duì)牛彈琴,計(jì)算機(jī)無(wú)法理解、
識(shí)別指令,因此無(wú)法執(zhí)行程序。PS:
1)會(huì)用機(jī)器語(yǔ)言編寫(xiě)程序的程序猿已經(jīng)
絕種2)沒(méi)必要使用低級(jí)語(yǔ)言編程
1617
編譯器匯編器裝配連接編輯
源程序
目標(biāo)匯編程序
可重定位機(jī)器代碼
絕對(duì)機(jī)器碼可重定位目標(biāo)文件庫(kù)語(yǔ)言處理過(guò)程18編譯器的功能:
擔(dān)任翻譯、糾錯(cuò)角色
高級(jí)語(yǔ)言書(shū)寫(xiě)的程序編譯程序低級(jí)語(yǔ)言書(shū)寫(xiě)的程序出錯(cuò)信息19專(zhuān)業(yè)術(shù)語(yǔ)編譯程序、編譯器(compiler)編譯程序接受輸入的源語(yǔ)言(源程序)(source
language)(source
program)編譯程序輸出的目標(biāo)語(yǔ)言(目標(biāo)程序)(objectortargetlanguage)(objectortargetprogram)編譯程序的實(shí)現(xiàn)語(yǔ)言
(implementationlanguage)SOISTI20TheroleofacompilerinasystemKernelOSKernelOSShellDBMSApplicationProgramsACompiler編譯器的角色:
21編譯器的性質(zhì):從軟件的角度語(yǔ)言處理軟件:
把高級(jí)語(yǔ)言書(shū)寫(xiě)的各種程序處理成可在計(jì)算機(jī)上執(zhí)行的程序系統(tǒng)軟件:
居于計(jì)算機(jī)系統(tǒng)中最靠近硬件的一層,其他應(yīng)用軟件必須要通過(guò)系統(tǒng)軟件才能發(fā)揮作用。編譯系統(tǒng)和操作系統(tǒng)與具體的應(yīng)用領(lǐng)域無(wú)關(guān),所以都是系統(tǒng)軟件221.2編譯過(guò)程和編譯程序的結(jié)構(gòu)編譯邏輯過(guò)程詞法分析語(yǔ)法分析語(yǔ)義分析中間代碼生成代碼優(yōu)化目標(biāo)代碼生成23英譯漢與編譯的類(lèi)比1.識(shí)別出句子中的一個(gè)個(gè)單詞2.分析句子的語(yǔ)法結(jié)構(gòu)3.分析句子的語(yǔ)義4.初步翻譯5.譯文修飾6.寫(xiě)出最后譯文1.詞法分析2.語(yǔ)法分析3.語(yǔ)義分析4.中間代碼生成5.優(yōu)化6.目標(biāo)代碼生成24編譯程序總體結(jié)構(gòu)中間代碼目標(biāo)代碼生成器代碼優(yōu)化器語(yǔ)義分析中間代碼生成器語(yǔ)法分析器表格管理出錯(cuò)處理中間代碼目標(biāo)代碼語(yǔ)法單位單詞符號(hào)詞法分析器源程序25一、詞法分析從左至程右解析源程序(字符流)識(shí)別出單詞token詞法分析器(掃描器LexicalAnalyzer):1)從左到右掃描源程序(字符串序列)并將該字符串
轉(zhuǎn)換成單詞(記號(hào)串—Token)2)查詞法錯(cuò)誤并進(jìn)行標(biāo)識(shí)符登記
(符號(hào)表格管理)輸入:源程序(字符串)輸出:二元組(類(lèi)型碼,屬性值)26
詞法分析舉例:
從左往右詞法分析pascal語(yǔ)句
輸入:position:=initial+rate*60;
單詞類(lèi)型(類(lèi)型碼)單詞值標(biāo)識(shí)符1(id1) position運(yùn)算符(賦值符號(hào)):=標(biāo)識(shí)符2(id2) initial運(yùn)算符(加號(hào)) +標(biāo)識(shí)符3(id3) rate運(yùn)算符(乘號(hào)) *整型常量 60分界符 ;輸出27詞法分析舉例:一個(gè)C源程序片斷:inta;
a=a+2;單詞類(lèi)型
單詞值關(guān)鍵字int標(biāo)識(shí)符(變量名)
a分界符;標(biāo)識(shí)符(變量名)
a運(yùn)算符(賦值號(hào))=標(biāo)識(shí)符(變量名)a運(yùn)算符(加號(hào)) +整型常量 2分界符 ;輸出28總結(jié)conclusion:詞法分析(lexicalanalysisorscanning)--Thestreamofcharactersmakingupasourceprogramisreadfromlefttorightandgroupedintotokens,whicharesequencesofcharactersthathaveacollectivemeaning.單詞---token保留字、關(guān)鍵字---reservedword/keyword標(biāo)識(shí)符---identifier(user-definedname)29二、語(yǔ)法分析語(yǔ)法分析器(SyntaxAnalyzer、Parser解析器):依據(jù)源程序語(yǔ)言的語(yǔ)法規(guī)則把源程序的單詞序列組成語(yǔ)法短語(yǔ)(表示成語(yǔ)法樹(shù)),將詞組成各類(lèi)語(yǔ)法成分:表達(dá)式、短語(yǔ)、語(yǔ)句、子程序…構(gòu)造語(yǔ)法分析樹(shù)指出語(yǔ)法錯(cuò)誤指導(dǎo)語(yǔ)義翻譯(作為語(yǔ)義分析的基礎(chǔ))輸入:Token序列輸出:語(yǔ)法成分->表達(dá)式、短語(yǔ)、語(yǔ)句、子程序30語(yǔ)法分析舉例:position:=initial+rate*60根據(jù)pascal語(yǔ)法規(guī)則進(jìn)行語(yǔ)法分析<賦值表達(dá)式>::=<標(biāo)識(shí)符>“:=”<表達(dá)式>
<表達(dá)式>::=<表達(dá)式>“+”<表達(dá)式><表達(dá)式>::=<表達(dá)式>“*”<表達(dá)式><表達(dá)式>::=“(”<表達(dá)式>“)”
<表達(dá)式>::=<標(biāo)識(shí)符><表達(dá)式>::=<整數(shù)>
<表達(dá)式>::=<實(shí)數(shù)>
::=可以解釋為由。。。組成或者定義成。。。。31
賦值表達(dá)式標(biāo)識(shí)符表達(dá)式表達(dá)式+表達(dá)式表達(dá)式標(biāo)識(shí)符整數(shù)標(biāo)識(shí)符:=表達(dá)式*32C語(yǔ)句:res=fact*(term1+term2);根據(jù)C語(yǔ)法規(guī)則進(jìn)行語(yǔ)法分析<賦值語(yǔ)句>::=<標(biāo)識(shí)符>“=”<表達(dá)式>“;”<表達(dá)式>::=<表達(dá)式>“+”<表達(dá)式>
<表達(dá)式>::=<表達(dá)式>“*”<表達(dá)式><表達(dá)式>::=“(”<表達(dá)式>“)”<表達(dá)式>::=<標(biāo)識(shí)符><表達(dá)式>::=<整數(shù)>
<表達(dá)式>::=<實(shí)數(shù)>33C語(yǔ)句:res=fact*(term1+term2);*;賦值語(yǔ)句表達(dá)式=)(fact表達(dá)式res表達(dá)式表達(dá)式表達(dá)式表達(dá)式+term1term234總結(jié)conclusion:語(yǔ)法分析(syntaxanalysisorparsing)Thepurposeofsyntaxanalysisistodeterminethesourceprogram’sphrasestructure.
Thisprocessisalsocalledparsing.Thesourceprogramisparsedtocheckwhetheritconformstothesourcelanguage’ssyntaxandtoconstructasuitablerepresentationofitsphrasestructure:語(yǔ)法樹(shù)(推導(dǎo)樹(shù))(parsetreeorderivationtree).35三、語(yǔ)義分析功能:分析由語(yǔ)法分析器識(shí)別出的語(yǔ)法成分的語(yǔ)義語(yǔ)義審查(靜態(tài)語(yǔ)義)獲取標(biāo)識(shí)符的語(yǔ)義屬性:類(lèi)型、作用域等,填充符號(hào)表格語(yǔ)義檢查:運(yùn)算的合法性、取值范圍、類(lèi)型匹配、類(lèi)型轉(zhuǎn)換、上下文的相關(guān)性等子程序的靜態(tài)綁定:代碼的相對(duì)地址變量的靜態(tài)綁定:數(shù)據(jù)的相對(duì)地址36語(yǔ)義分析(基于語(yǔ)法樹(shù))
position:=initial+rate*60;
假設(shè)initial、rate是double類(lèi)型
60:=+*Id1positionId2initialId3rate類(lèi)型轉(zhuǎn)換37總結(jié)conclusion:語(yǔ)義分析(semanticanalysis)Theparsedprogramisfurtheranalyzedtodeterminewhetherit
conformstothesourcelanguage’scontextualconstraints:scoperules,typerulese.g.Torelateeachappliedoccurrenceofanidentifierinthesourceprogramtothecorrespondingdeclaration.38四、中間代碼生成源程序的另一種表示方式三元式、四元式、波蘭式、逆波蘭式簡(jiǎn)單規(guī)范與機(jī)器無(wú)關(guān)易于優(yōu)化與轉(zhuǎn)換成目標(biāo)代碼39例:源代碼id1+id2*id3后綴表示(逆波蘭Anti-PolishNotation)id1id2id3*
+前綴表示(波蘭PolishNotation)+id1*id2id3四元式表示(三地址碼)1(*,id2,id3,T1)2(+,id1,T1,T2)
三元式表示1(*,id2,id3)2(+,id1,(1))40四元式中間代碼:id1:=id2+id3*60
假設(shè)id1,id2,id3都是double類(lèi)型(1) (inttoreal, 60 - t1 )(2) (* , id3 t1 t2 )(3) (+ , id2 t2 t3 )(4) (:= , t3 - id1 )41總結(jié)conclusion:
中間代碼生成(intermediatecodegeneration)Wewantthisrepresentationtobeeasytogenerate,easytotranslateintothetargetprogram.Therepresentationcanhaveavarietyofforms,butacommononeiscalledthree-addresscodeor4-tuplecode.42五、代碼優(yōu)化目的:提高運(yùn)行速度(節(jié)省時(shí)間)和節(jié)省存儲(chǔ)空間
43代碼優(yōu)化例子:源代碼優(yōu)化t1=b*ct1=b*ct2=t1+0t2=t1+t1t3=b*ca=t2t4=t2+t3a=t4a=2*b*c44代碼優(yōu)化例子:中間代碼優(yōu)化id1:=id2+id3*60(1) (inttoreal 60 - t1 )(2) (*id3 t1 t2 )(3) (+ id2 t2 t3 )(4) (:= t3 - id1 )
(1)(* id3 60.0 t1 )(2)(+id2 t1 id1 )45與機(jī)器無(wú)關(guān)的優(yōu)化局部?jī)?yōu)化常量合并:常數(shù)運(yùn)算在編譯期間完成,如8+9*4,包括const符號(hào)常量公共子表達(dá)式的提?。ǚ种ЫY(jié)構(gòu)、循環(huán)結(jié)構(gòu)):
基本塊內(nèi)循環(huán)優(yōu)化強(qiáng)度削減用較快的操作代替較慢的操作比如+代替*代碼外提將循環(huán)不變計(jì)算移出循環(huán)46與機(jī)器有關(guān)的優(yōu)化寄存器的利用將常用量放入寄存器,以減少訪(fǎng)問(wèn)內(nèi)存的次數(shù)體系結(jié)構(gòu)MIMD、SIMD、SPMD、向量機(jī)、流水機(jī)、多核存儲(chǔ)策略根據(jù)算法訪(fǎng)存的要求安排:Cache、并行存儲(chǔ)體系——減少訪(fǎng)問(wèn)沖突任務(wù)劃分按運(yùn)行的算法及體系結(jié)構(gòu),劃分子任務(wù)(MPMD)47總結(jié)conclusion:代碼優(yōu)化(Intermediatecodeoptimization)1)Theoptimizeracceptsinputintheintermediaterepresentationandoutputaversionstillintheintermediaterepresentation.2)compilerattemptstoproducethesmallest,fastestandmostefficientrunningresultbyapplyingvarioustechniques.48六、目標(biāo)代碼生成將中間代碼轉(zhuǎn)換成目標(biāo)機(jī)上的機(jī)器指令代碼或匯編代碼。目標(biāo)代碼的多種形式具有絕對(duì)地址的機(jī)器指令模塊結(jié)構(gòu)的機(jī)器指令(需要鏈接程序)匯編語(yǔ)言形式的目標(biāo)匯編程序49目標(biāo)代碼生成舉例(* , id3 60.0 t1 )(+ , id2 t1 id1 )movfid3,R2mulf #60.0,R2movfid2,R1addf R2,R1movfR1,id150編譯過(guò)程:51表處理詞法分析源程序目標(biāo)程序錯(cuò)誤處理語(yǔ)法分析語(yǔ)義分析目標(biāo)代碼生成前端后端中間代碼優(yōu)化中間代碼生成52Structureofacompiler53前端與后端前端與源語(yǔ)言有關(guān)、與目標(biāo)機(jī)器無(wú)關(guān)的部分詞法分析、語(yǔ)法分析、語(yǔ)義分析與中間代碼生成、與機(jī)器無(wú)關(guān)的代碼優(yōu)化后端與目標(biāo)機(jī)器有關(guān)的部分與機(jī)器有關(guān)的代碼優(yōu)化、目標(biāo)代碼生成54符號(hào)表管理記錄源程序中使用的各種符號(hào)和名字收集每個(gè)名字的各種屬性信息類(lèi)型、作用域、分配存儲(chǔ)信息管理各種符號(hào)表(常數(shù)、標(biāo)號(hào)、變量、函數(shù)、結(jié)構(gòu)……),登記、查找源程序中出現(xiàn)的符號(hào)和編譯程序生成的符號(hào),為編譯的各個(gè)階段提供信息。輔助語(yǔ)法檢查、語(yǔ)義檢查完成靜態(tài)綁定、管理編譯過(guò)程Hash表、鏈表等各種查、填表技術(shù)(數(shù)據(jù)結(jié)構(gòu))55出錯(cuò)處理
進(jìn)行各種錯(cuò)誤的檢查、報(bào)告、糾正以及相應(yīng)的續(xù)編譯處理(如:錯(cuò)誤的定位與局部化)詞法:拼寫(xiě)錯(cuò)誤……語(yǔ)法:語(yǔ)句結(jié)構(gòu)、表達(dá)式結(jié)構(gòu)……語(yǔ)義:類(lèi)型不匹配……56程序錯(cuò)誤語(yǔ)法錯(cuò)誤語(yǔ)義錯(cuò)誤運(yùn)行57編譯程序結(jié)構(gòu)(components)設(shè)計(jì)詞法分析程序語(yǔ)法分析程序語(yǔ)義分析程序中間代碼生成程序代碼優(yōu)化程序目標(biāo)代碼生成程序符號(hào)表管理程序出錯(cuò)處理程序58根據(jù)系統(tǒng)資源的狀況、運(yùn)行目標(biāo)的要求等,將一個(gè)編譯程序設(shè)計(jì)成多遍掃描的形式,在每一遍掃描中,完成不同的任務(wù)。每遍的工作由從外存上獲得的前一遍的中間結(jié)果開(kāi)始(對(duì)于第一遍而言,從外存上獲得源程序),完成有關(guān)工作之后,把結(jié)果記錄于外存。既可以將幾個(gè)不同階段合為一遍,也可以把一個(gè)階段的工作分為若干遍。遍(Pass)編譯程序的架構(gòu)設(shè)計(jì)591)一遍的編譯程序
即對(duì)源程序進(jìn)行一遍掃描,就完成編譯程序的各項(xiàng)任務(wù)。該編譯程序的核心是不產(chǎn)生中間代碼。
工作過(guò)程如下:①當(dāng)語(yǔ)法分析器需要讀進(jìn)一個(gè)新的單詞符號(hào)時(shí),就調(diào)用詞法分析器,詞法分析器從源程序中依次讀入字符,并組合成單詞符號(hào),把其送回語(yǔ)法分析器;②當(dāng)語(yǔ)法分析器識(shí)別出一個(gè)語(yǔ)法短語(yǔ)時(shí),就調(diào)用語(yǔ)義分析程序進(jìn)行語(yǔ)義分析,并生成目標(biāo)程序;③當(dāng)源程序處理完后,轉(zhuǎn)善后處理,即整理目標(biāo)程序(如優(yōu)化等),并停機(jī)。詞法分析器語(yǔ)法分析器整理目標(biāo)程序停機(jī)語(yǔ)義分析及代碼生成取單詞返回單詞語(yǔ)法成分返回源程序目標(biāo)代碼編譯程序的架構(gòu)設(shè)計(jì)602)多遍編譯程序把編譯的5個(gè)階段應(yīng)完成的工作分遍來(lái)做,每一遍完成一個(gè)或相連幾個(gè)階段的工作。源程序詞法分析程序語(yǔ)法分析程序語(yǔ)義分析程序代碼優(yōu)化程序目標(biāo)代碼生成程序目標(biāo)程序表格處理程序出錯(cuò)處理程序編譯總控程序中間語(yǔ)言1,表中間語(yǔ)言2,表中間語(yǔ)言3,表優(yōu)化代碼,表工作過(guò)程如下:編譯程序的主程序調(diào)用詞法分析器掃描源程序,并將它轉(zhuǎn)換成一種內(nèi)部表示,稱(chēng)為中間語(yǔ)言1,同時(shí)產(chǎn)生有關(guān)的一些表,然后主程序再調(diào)用語(yǔ)法分析器,它以中間代碼1為輸入,進(jìn)行語(yǔ)法分析,產(chǎn)生中間語(yǔ)言2……最后主程序調(diào)用目標(biāo)代碼生成器,把輸入的中間代碼轉(zhuǎn)換為等價(jià)的目標(biāo)代碼。61編譯程序分遍的優(yōu)缺點(diǎn)優(yōu)點(diǎn):1.首先,減少對(duì)內(nèi)存容量的要求,分遍后,在編譯時(shí)以遍為單位分別調(diào)入編譯程序,各遍編譯程序在內(nèi)存中可以相互覆蓋;2.其次,可使各編譯程序功能獨(dú)立、單純,相互聯(lián)系簡(jiǎn)單,編譯程序結(jié)構(gòu)清晰;3.再次,能夠?qū)崿F(xiàn)充分地優(yōu)化工作,以獲得高質(zhì)量的目標(biāo)程序;4.最后,通過(guò)分遍將編譯程序的前端和后端分開(kāi),為編譯程序的移植創(chuàng)造條件。缺點(diǎn):增加了不少重復(fù)性工作,比如每一遍都有讀符號(hào)、送符號(hào)等工作,這就降低了編譯的效率。62編譯階段和運(yùn)行階段內(nèi)存存儲(chǔ)結(jié)構(gòu)
編譯時(shí)運(yùn)行時(shí)符號(hào)表中間代碼緩沖區(qū)目標(biāo)代碼緩沖區(qū)目標(biāo)代碼區(qū)數(shù)據(jù)區(qū)源程序緩沖區(qū)63編譯程序選擇什么語(yǔ)言來(lái)編寫(xiě)?設(shè)計(jì)目標(biāo)目標(biāo)程序小,執(zhí)行速度快。編譯程序小,執(zhí)行速度快。診斷能力強(qiáng),可靠性強(qiáng)。可移植性,可擴(kuò)充性。641.以匯編語(yǔ)言和機(jī)器語(yǔ)言為工具來(lái)構(gòu)造優(yōu)點(diǎn):可以針對(duì)具體的機(jī)器,充分發(fā)揮計(jì)算機(jī)的系統(tǒng)功能。生成的目標(biāo)程序效率高。缺點(diǎn):程序難讀、難寫(xiě)、易出錯(cuò)、難維護(hù)、生成編譯程序的效率低。652.高級(jí)語(yǔ)言書(shū)寫(xiě)用已有高級(jí)語(yǔ)言實(shí)現(xiàn)其它高級(jí)語(yǔ)言的編譯程序:例如用C寫(xiě)PASCAL語(yǔ)言的編譯器,然后編譯優(yōu)點(diǎn):程序易讀、易理解、容易維護(hù)、生產(chǎn)編譯程序的效率高。缺點(diǎn):難以充分發(fā)揮計(jì)算機(jī)的系統(tǒng)功能,生成的目標(biāo)程序效率低。663.利用工具,編譯程序自動(dòng)生成LEX
詞法分析程序產(chǎn)生器YACC語(yǔ)法分析程序產(chǎn)生器編譯程序自動(dòng)產(chǎn)生器L語(yǔ)言的語(yǔ)法描述語(yǔ)義描述目標(biāo)語(yǔ)言或機(jī)器描述L語(yǔ)言的編譯程序671.4編譯技術(shù)的發(fā)展功能:集成開(kāi)發(fā)環(huán)境下實(shí)現(xiàn)編譯程序?qū)崿F(xiàn)方式手工機(jī)器語(yǔ)言匯編語(yǔ)言高級(jí)程序設(shè)計(jì)語(yǔ)言自動(dòng)構(gòu)造工具lexyaccgcc68編譯程序的語(yǔ)言范型語(yǔ)言范型(paradigms)命令式(imperativelanguage)應(yīng)用式(applicative)基于規(guī)則的(rule-based)面向?qū)ο蟮模╫bject-oriented)69編譯程序的執(zhí)行環(huán)境批處理環(huán)境:將源程序作為整體處理排除程序錯(cuò)誤不能接受任何外部幫助交互環(huán)境:解釋增量式編譯嵌入式系統(tǒng)環(huán)境:交叉編譯分布并行環(huán)境:并行編譯集成式開(kāi)發(fā)環(huán)境:獨(dú)立編譯設(shè)計(jì)時(shí)同時(shí)考慮編譯和調(diào)試70集成化的程序開(kāi)發(fā)環(huán)境程序開(kāi)發(fā)環(huán)境編輯程序編譯程序連接程序調(diào)試工具。。。它將相互獨(dú)立的程序設(shè)計(jì)工具集成起來(lái),以便為程序員提供完整的、一體化的支持,從而進(jìn)一步提高程序開(kāi)發(fā)效率改善程序質(zhì)量。如Visualstudio.NetMyEclipse等
711.5
編譯技術(shù)的應(yīng)用語(yǔ)法制導(dǎo)的結(jié)構(gòu)化編輯器程序格式化工具軟件測(cè)試工具程序理解工具高級(jí)語(yǔ)言的翻譯工具……72編譯技術(shù)的應(yīng)用結(jié)構(gòu)化編譯器程序分析工具靜態(tài)分析動(dòng)態(tài)分析度量工具結(jié)構(gòu)度量模塊接口復(fù)雜度
c分析工具(sourceinsight)廣泛的語(yǔ)言領(lǐng)域數(shù)據(jù)庫(kù)系統(tǒng)查詢(xún)腳本語(yǔ)言置標(biāo)語(yǔ)言(SGML.HTML.XML)73源程序輸入數(shù)據(jù)計(jì)算結(jié)果解釋程序1.6解釋系統(tǒng)(解釋程序)74高級(jí)語(yǔ)言解釋系統(tǒng)(interpreter)功能:讓計(jì)算機(jī)執(zhí)行高級(jí)語(yǔ)言與編譯程序的不同1)不生成目標(biāo)代碼2)能支持交互環(huán)境源程序
初始數(shù)據(jù)解釋程序計(jì)算結(jié)果75對(duì)比編譯程序與解釋程序編譯程序:直接對(duì)源程序中的語(yǔ)句進(jìn)行分析,執(zhí)行其隱含的操作。如:……
b:=2;a:=b+2;編譯程序
writea;……解釋程序直接將4的值輸出(顯示)Int2StbLdbadd2Sta生成代碼76解釋系統(tǒng)存儲(chǔ)結(jié)構(gòu)解釋程序源程序符號(hào)表緩沖區(qū)(輸入輸出)棧區(qū)77編譯和解釋的區(qū)別:目標(biāo)程序源程序編譯程序初始數(shù)據(jù)計(jì)算結(jié)果源程序解釋程序初始數(shù)據(jù)計(jì)算結(jié)果語(yǔ)法的表示方法:78?口語(yǔ)?語(yǔ)法圖
?BNF表示法
79語(yǔ)法圖:函數(shù)定義函數(shù)首部函數(shù)體函數(shù)首部函數(shù)值類(lèi)型函數(shù)名(參數(shù)表列)
函數(shù)體{說(shuō)明部分控制部分}80巴科斯范式(BackusNourForm或BackusNormalForm,簡(jiǎn)記為
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 現(xiàn)代產(chǎn)品設(shè)計(jì)中的民族圖案與色彩研究
- 現(xiàn)代紋樣設(shè)計(jì)在商業(yè)品牌推廣中的應(yīng)用實(shí)踐
- 現(xiàn)代辦公環(huán)境下的AI餐廳服務(wù)應(yīng)用研究
- 現(xiàn)代物流行業(yè)的服務(wù)創(chuàng)新與升級(jí)
- 現(xiàn)代辦公環(huán)境下的報(bào)告制作技巧
- 2024年五年級(jí)語(yǔ)文上冊(cè) 第六單元 口語(yǔ)交際:父母之愛(ài)說(shuō)課稿 新人教版
- Module7 Unit2 This little girl can't walk(Period 1) (說(shuō)課稿) -2024-2025學(xué)年外研版(三起)英語(yǔ)五年級(jí)上冊(cè)
- 7《什么比獵豹的速度更快》說(shuō)課稿-2024-2025學(xué)年五年級(jí)上冊(cè)語(yǔ)文統(tǒng)編版001
- 13美麗的冬天 說(shuō)課稿-2024-2025學(xué)年道德與法治一年級(jí)上冊(cè)統(tǒng)編版
- 2024-2025學(xué)年高中化學(xué) 第1章 第4節(jié) 第2課時(shí) 有機(jī)物分子式與分子結(jié)構(gòu)的確定說(shuō)課稿 新人教版選修5
- 福建省泉州市晉江市2024-2025學(xué)年七年級(jí)上學(xué)期期末生物學(xué)試題(含答案)
- 醫(yī)美注射類(lèi)知識(shí)培訓(xùn)課件
- 2025年春新人教版物理八年級(jí)下冊(cè)課件 第十章 浮力 第4節(jié) 跨學(xué)科實(shí)踐:制作微型密度計(jì)
- 貨運(yùn)車(chē)輛駕駛員服務(wù)標(biāo)準(zhǔn)化培訓(xùn)考核試卷
- 財(cái)務(wù)BP經(jīng)營(yíng)分析報(bào)告
- 三年級(jí)上冊(cè)體育課教案
- 2024高考物理二輪復(fù)習(xí)電學(xué)實(shí)驗(yàn)專(zhuān)項(xiàng)訓(xùn)練含解析
- 2024年全國(guó)統(tǒng)一高考英語(yǔ)試卷(新課標(biāo)Ⅰ卷)含答案
- 高中英語(yǔ):倒裝句專(zhuān)項(xiàng)練習(xí)(附答案)
- 2025屆河北衡水?dāng)?shù)學(xué)高三第一學(xué)期期末統(tǒng)考試題含解析
- 2024年山東省青島市普通高中自主招生物理試卷(含解析)
評(píng)論
0/150
提交評(píng)論