《《編譯方法》第1章概述.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《《編譯方法》第1章概述.ppt(35頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、編譯方法,,,,1.3編譯技術(shù)的應(yīng)用,1.2編譯程序,1.1程序設(shè)計(jì)語言與程序,第1章編譯概述,1.1程序設(shè)計(jì)語言與程序,1.1.2程序設(shè)計(jì)語言的分類,1.1.3程序及其結(jié)構(gòu),1.1.4高級語言程序的處理過程,1.1.1程序設(shè)計(jì)語言的定義,1.1程序設(shè)計(jì)語言與程序,,,,程序設(shè)計(jì)語言,語義,語法,1.1.1程序設(shè)計(jì)語言的定義,1.1程序設(shè)計(jì)語言與程序,1.1.2程序設(shè)計(jì)語言的分類,1.1程序設(shè)計(jì)語言與程序,1.1.3程序及其結(jié)構(gòu),voidQ()Q的局部數(shù)據(jù)定義R();Q();,main()Main的局部數(shù)據(jù)定義,voidR()R的局部數(shù)據(jù)定義,1.1程序設(shè)計(jì)語言與程序,1.C語言一個(gè)主函數(shù)ma
2、in、若干(可以為0)個(gè)子函數(shù)。,1.1.3程序及其結(jié)構(gòu),1.1程序設(shè)計(jì)語言與程序,2.Pascal語言,嵌套過程語言特點(diǎn):程序的過程定義是嵌套的,內(nèi)層過層由外層過程調(diào)用,內(nèi)層過程執(zhí)行完畢將返回外層過程。允許內(nèi)層過程引用包圍它的任一外層過程說明的變量。,1.1.3程序及其結(jié)構(gòu),programA;A的數(shù)據(jù)說明procedureB(參數(shù)表);B的數(shù)據(jù)說明procedureC(參數(shù)表);C的數(shù)據(jù)說明beginend;beginC;end;,procedureD;D的數(shù)據(jù)說明beginB;end;beginB;D;end.,1.1程序設(shè)計(jì)語言與程序,絕對機(jī)器代碼程序,可再裝配的機(jī)器代碼程序,目標(biāo)匯編程
3、序,源程序,需預(yù)處理的源程序,1.1.4高級語言程序的處理過程,預(yù)處理,編譯,匯編,裝配連接,,,,,1.1程序設(shè)計(jì)語言與程序,1.2編譯程序,1.2.2編譯過程和編譯程序的結(jié)構(gòu),1.2.3編譯程序的生成,1.2.4編譯程序與程序設(shè)計(jì)環(huán)境,1.2.1編譯與解釋,1.2編譯程序,,,,編譯程序,源程序,目標(biāo)程序,錯(cuò)誤信息,高級語言程序的翻譯方式:解釋、編譯編譯:將高級語言程序翻譯成另一種語言的等價(jià)程序。源程序、目標(biāo)程序和編譯程序的關(guān)系:,1.2.1編譯與解釋,1.2編譯程序,解釋:翻譯一句執(zhí)行一句,邊翻譯邊執(zhí)行,直到程序結(jié)束。與編譯的區(qū)別:不生成等價(jià)的目標(biāo)代碼程序。優(yōu)點(diǎn):解釋方式便于程序的調(diào)試。
4、(編譯方式只需翻譯一次,且目標(biāo)程序的執(zhí)行速度快),1.2.1編譯與解釋,1.2編譯程序,詞法分析,語義分析和中間代碼生成,目標(biāo)代碼生成,目標(biāo)程序,代碼優(yōu)化,語法分析,源程序,,,出錯(cuò)處理,表格管理,,,,,,,,,,,1.2.2編譯過程和編譯程序的結(jié)構(gòu),1.2編譯程序,1.編譯過程,主要任務(wù):從左到右掃描源程序,逐一讀入構(gòu)成源程序的字符流,識(shí)別出其中的一個(gè)個(gè)單詞,識(shí)別出的單詞稱單詞符號(hào),也簡稱符號(hào)。單詞是高級語言程序中有實(shí)際意義的最小語法單位。單詞構(gòu)成規(guī)則詞法規(guī)則或構(gòu)詞法(單詞識(shí)別的依據(jù))單詞內(nèi)碼形式二元式(指出了單詞的類別和自身值),1.2.2編譯過程和編譯程序的結(jié)構(gòu),(1)詞法分析,1.2
5、編譯程序,(1)(標(biāo)識(shí)符,z)(2)(等號(hào),=)(3)(標(biāo)識(shí)符,x)(4)(加號(hào),+)(5)(標(biāo)識(shí)符,a)(6)(取余號(hào),%)(7)(整數(shù),3)(8)(乘號(hào),*)(9)(左括號(hào),()(10)(保留字,int)(11)(右括號(hào),)),(12)(左括號(hào),()(13)(標(biāo)識(shí)符,x)(14)(加號(hào),+)(15)(標(biāo)識(shí)符,y)(16)(右括號(hào),))(17)(取余號(hào),%)(18)(整數(shù),2)(19)(除號(hào),/)(20)(整數(shù)7)(21)(分號(hào);),例:z=x+a%3*(int)(x+y)%2/7;,1.2.2編譯過程和編譯程序的結(jié)構(gòu),1.2編譯程序,任務(wù)“組詞成句”,根據(jù)單詞分析出組成源程序的各類語法單位
6、,并指出其中的語法錯(cuò)誤。語法單位由源程序的單詞構(gòu)成(如表達(dá)式、語句、乃至整個(gè)程序。)語法單位的構(gòu)成規(guī)則語法規(guī)則。一個(gè)語言的詞法規(guī)則和語法規(guī)則定義了一個(gè)程序的形式結(jié)構(gòu)。語法單位的表示語法樹,(2)語法分析,1.2.2編譯過程和編譯程序的結(jié)構(gòu),1.2編譯程序,例:z=x+a%3*y,1.2.2編譯過程和編譯程序的結(jié)構(gòu),1.2編譯程序,任務(wù):分析出語法單位具體的動(dòng)作意義,進(jìn)行初步翻譯,生成與源程序等價(jià)的中間代碼程序。語義:定義一個(gè)程序所表示的意義,用語義規(guī)則描述。中間代碼:指令應(yīng)結(jié)構(gòu)簡單、含義明確,易于實(shí)現(xiàn)源程序中間代碼目標(biāo)代碼三者之間的轉(zhuǎn)換。中間代碼常用形式:逆波蘭式、三元式、四元式等。四元式:(
7、運(yùn)算符,對象1,對象2,結(jié)果),例:z=x+a%3*y(1)(%a3t1)(2)(*t1yt2)(3)(+xt2t3)(4)(=t3_z),(3)語義分析和中間代碼生成,1.2.2編譯過程和編譯程序的結(jié)構(gòu),1.2編譯程序,,任務(wù):對中間代碼進(jìn)行等價(jià)的加工變換,以便生成更有效更節(jié)省時(shí)間和空間的目標(biāo)代碼。例:z=x+a%3*y的四元式序列:(1)(%a3t1)(2)(*t1yt2)(3)(+xt2z)代碼優(yōu)化的技術(shù):刪除公共子表達(dá)式、強(qiáng)度削弱、代碼外提、合并已知量....注:此階段并非編譯程序所必需。,(1)(%a3t1)(2)(*t1yt2)(3)(+xt2t3)(4)(=t3_z),,(4)代
8、碼優(yōu)化,1.2.2編譯過程和編譯程序的結(jié)構(gòu),1.2編譯程序,任務(wù):將中間代碼程序變換成目標(biāo)代碼程序。目標(biāo)代碼:特定機(jī)器上的絕對指令代碼可重定位的指令代碼匯編指令代碼這一階段任務(wù)的實(shí)現(xiàn)與硬件系統(tǒng)的結(jié)構(gòu)、目標(biāo)指令的選擇、變量存儲(chǔ)空間的分配、寄存器、后緩寄存器的調(diào)度等均有關(guān)系。,(5)目標(biāo)代碼生成,1.2.2編譯過程和編譯程序的結(jié)構(gòu),1.2編譯程序,表格管理:為完成編譯而建立并使用一些表格,以記錄各種信息。信息登錄:編譯的各個(gè)階段(尤其是詞法語法、語義分析階段)。信息使用:各階段的分析和翻譯。,出錯(cuò)處理:若編譯過程中發(fā)現(xiàn)源程序有錯(cuò)誤,就應(yīng)進(jìn)行出錯(cuò)處理。,(6)表格管理和出錯(cuò)處理,涉及編譯的每個(gè)階段!
9、,遍布編譯的每個(gè)階段!,1.2.2編譯過程和編譯程序的結(jié)構(gòu),1.2編譯程序,以上為編譯過程的典型的處理模式。并非所有的編譯過程都有這些階段。(可以不生成中間代碼、不進(jìn)行代碼優(yōu)化)常將編譯的這五個(gè)階段劃分成兩大部分:前三個(gè)階段分析部分后兩個(gè)階段綜合部分,說明:,1.2.2編譯過程和編譯程序的結(jié)構(gòu),1.2編譯程序,詞法分析程序,語義分析和中間代碼生成程序,目標(biāo)代碼生成程序,目標(biāo)程序,代碼優(yōu)化程序,語法分析程序,源程序,,,出錯(cuò)處理程序,表格管理程序,,,,,,,,,,,1.2.2編譯過程和編譯程序的結(jié)構(gòu),1.2編譯程序,1.編譯程序結(jié)構(gòu),后端程序:由與源語言無關(guān),與中間代碼有關(guān),主要依賴于目標(biāo)機(jī)的
10、工作組合而成。(與目標(biāo)機(jī)有關(guān)的代碼優(yōu)化、目標(biāo)代碼生成、相關(guān)的表格管理和出錯(cuò)處理等。),前端程序:由那些主要依賴于源語言,而與目標(biāo)機(jī)無關(guān)的工作組合而成。(詞法分析、語法分析、語義分析與中間代碼生成、某些目標(biāo)機(jī)器無關(guān)的代碼優(yōu)化,以及此間的表格管理、和出錯(cuò)處理等。),1.“前后端”組合方式,1.2.2編譯過程和編譯程序的結(jié)構(gòu),1.2編譯程序,作用:,1.2.2編譯過程和編譯程序的結(jié)構(gòu),1.2編譯程序,“遍”:對源程序或等價(jià)的中間語言程序從頭到尾掃描,完成規(guī)定的任務(wù),并生成新的中間結(jié)果或目標(biāo)程序,稱一“遍”。在一“遍”中可完成編譯的一個(gè)或多個(gè)階段的任務(wù)。源語言的特征和機(jī)器的特征決定編譯程序究竟可以劃分
11、成幾“遍”。,2按“遍”組合方式,1.2.2編譯過程和編譯程序的結(jié)構(gòu),1.2編譯程序,第二遍,第一遍,第三遍,1.2.2編譯過程和編譯程序的結(jié)構(gòu),1.2編譯程序,PDP11C編譯程序結(jié)構(gòu),編譯程序的構(gòu)造與三個(gè)方面有關(guān)源語言結(jié)構(gòu)、含義和用途等。是準(zhǔn)確描述語言、構(gòu)造編譯程序的出發(fā)點(diǎn)。目標(biāo)語言結(jié)構(gòu)、指令系統(tǒng)、存儲(chǔ)分配方式、外設(shè)管理方式、文件管理方法等。是編譯過程中應(yīng)考慮的問題。編譯方法翻譯的具體方法。由源語言特性、目標(biāo)語言特性、對編譯程序性能要求等決定。,1.2.3編譯程序的生成,1.2編譯程序,1用機(jī)器語言編寫復(fù)雜,不實(shí)用。2匯編語言編寫對具體的硬件環(huán)境的依賴性較高,程序過長,也不常用。但有些編譯
12、程序的核心部分常用匯編語言編寫。3其他高級語言編寫最方便、最常用。,1.2.3編譯程序的生成,1.2編譯程序,目標(biāo)程序,CB,CA,,,,,例:某機(jī)器已有A語言的編譯程序CA,構(gòu)造B語言的編譯程序CB的過程為:,1.2.3編譯程序的生成,1.2編譯程序,L0,4采用自展技術(shù)構(gòu)造“自編譯”,用被編譯的語言來書寫該語言自身的編譯程序。,1.2.3編譯程序的生成,1.2編譯程序,5編譯工具自動(dòng)生成,詞法分析程序的生成系統(tǒng)LEX語法分析程序的生成系統(tǒng)YACC,1.2.3編譯程序的生成,1.2編譯程序,例:C語言的集成開發(fā)環(huán)境VisualC++,用戶界面,硬件系統(tǒng),操作系統(tǒng),,1.2.4編譯程序與程序設(shè)計(jì)環(huán)境,1.2編譯程序,1語言的結(jié)構(gòu)化編輯器2查詢解釋器3硅編譯器,1.3編譯技術(shù)的應(yīng)用,1.3編譯技術(shù)的應(yīng)用,ThankYou!,