編譯原理-陳火旺版-第二章_第1頁(yè)
編譯原理-陳火旺版-第二章_第2頁(yè)
編譯原理-陳火旺版-第二章_第3頁(yè)
編譯原理-陳火旺版-第二章_第4頁(yè)
編譯原理-陳火旺版-第二章_第5頁(yè)
已閱讀5頁(yè),還剩21頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

編譯原理-陳火旺版-第二章目錄引言詞法分析語(yǔ)法分析中間代碼生成代碼優(yōu)化目標(biāo)代碼生成01引言編譯程序01將高級(jí)語(yǔ)言編寫的源程序轉(zhuǎn)換成等價(jià)的低級(jí)語(yǔ)言程序,并生成可執(zhí)行的目標(biāo)程序的程序。編譯程序分類02根據(jù)目標(biāo)語(yǔ)言和源語(yǔ)言的關(guān)系,編譯程序可以分為正向編譯和反向編譯。正向編譯是指將高級(jí)語(yǔ)言轉(zhuǎn)換成低級(jí)語(yǔ)言,而反向編譯是指將低級(jí)語(yǔ)言轉(zhuǎn)換成高級(jí)語(yǔ)言。編譯程序的組成03編譯程序通常由詞法分析、語(yǔ)法分析、語(yǔ)義分析、中間代碼生成、代碼優(yōu)化和目標(biāo)代碼生成等部分組成。編譯程序的基本概念詞法分析將源程序分解成一個(gè)個(gè)的單詞或符號(hào),并為其分配相應(yīng)的屬性。語(yǔ)法分析根據(jù)語(yǔ)法規(guī)則將單詞或符號(hào)序列組合成語(yǔ)法結(jié)構(gòu),并判斷其是否符合語(yǔ)法規(guī)則。語(yǔ)義分析對(duì)語(yǔ)法結(jié)構(gòu)進(jìn)行語(yǔ)義檢查,包括類型檢查、類型轉(zhuǎn)換等。中間代碼生成將源程序的語(yǔ)法結(jié)構(gòu)轉(zhuǎn)換成中間代碼,通常為三地址代碼。代碼優(yōu)化對(duì)中間代碼進(jìn)行優(yōu)化,以提高目標(biāo)代碼的執(zhí)行效率。目標(biāo)代碼生成將中間代碼轉(zhuǎn)換成目標(biāo)機(jī)器語(yǔ)言代碼,并生成可執(zhí)行文件。編譯程序的基本工作過(guò)程02詞法分析03詞法分析的結(jié)果是生成一個(gè)標(biāo)記(token)的序列,這些標(biāo)記對(duì)應(yīng)于源代碼中的關(guān)鍵字、標(biāo)識(shí)符、常量、運(yùn)算符等。01詞法分析是編譯過(guò)程的第一階段,負(fù)責(zé)將源代碼分解成一個(gè)個(gè)的單詞或符號(hào)。02詞法分析器通常被稱為掃描器或詞法器,它按照源代碼的字符順序逐個(gè)讀取字符,并識(shí)別出其中的單詞或符號(hào)。詞法分析概述狀態(tài)機(jī)用于實(shí)現(xiàn)識(shí)別函數(shù),根據(jù)當(dāng)前狀態(tài)和輸入字符確定下一個(gè)狀態(tài)和輸出的標(biāo)記。識(shí)別函數(shù)根據(jù)當(dāng)前讀取的字符和詞法規(guī)則,判斷下一個(gè)字符應(yīng)該屬于哪個(gè)單詞或符號(hào)。詞法規(guī)則定義了源代碼中可能出現(xiàn)的單詞或符號(hào),以及如何識(shí)別它們。輸入源代碼字符串。輸出標(biāo)記(token)序列。詞法分析程序的組成確定詞法規(guī)則和狀態(tài)機(jī),編寫識(shí)別函數(shù)。設(shè)計(jì)編寫代碼實(shí)現(xiàn)狀態(tài)機(jī),完成詞法分析器的構(gòu)建。實(shí)現(xiàn)對(duì)詞法分析器進(jìn)行測(cè)試,確保其能夠正確地識(shí)別源代碼中的單詞和符號(hào)。測(cè)試詞法分析程序的設(shè)計(jì)與實(shí)現(xiàn)03語(yǔ)法分析語(yǔ)法分析是編譯過(guò)程中的重要階段,其任務(wù)是將源程序分解成一系列的語(yǔ)法短語(yǔ),并確定這些短語(yǔ)之間的結(jié)構(gòu)關(guān)系。語(yǔ)法分析的目的是為了理解源程序的語(yǔ)法結(jié)構(gòu),從而生成相應(yīng)的中間代碼或目標(biāo)代碼。語(yǔ)法分析的方法可以分為自頂向下的分析和自底向上的分析兩種。010203語(yǔ)法分析概述自頂向下的語(yǔ)法分析01自頂向下的語(yǔ)法分析是從文法的起始符號(hào)出發(fā),逐步推導(dǎo)出目標(biāo)符號(hào)的過(guò)程。02常用的自頂向下的分析算法有預(yù)測(cè)分析、LR分析等。自頂向下的分析方法適合于左遞歸文法的處理,但在處理右遞歸文法時(shí)可能會(huì)出現(xiàn)問(wèn)題。03123自底向上的語(yǔ)法分析是從文法的最底層出發(fā),逐步歸約到起始符號(hào)的過(guò)程。常用的自底向上的分析算法有移進(jìn)-規(guī)約、LR(0)、SLR(1)、LALR(1)等。自底向上的分析方法適合于右遞歸文法的處理,但在處理左遞歸文法時(shí)可能會(huì)出現(xiàn)問(wèn)題。自底向上的語(yǔ)法分析04中間代碼生成

中間代碼生成概述中間代碼定義中間代碼是源代碼和目標(biāo)代碼之間的代碼,用于表示源程序的結(jié)構(gòu)和語(yǔ)義。中間代碼的作用中間代碼作為源代碼和目標(biāo)代碼之間的橋梁,可以方便編譯器進(jìn)行優(yōu)化和轉(zhuǎn)換,提高編譯效率和生成代碼的質(zhì)量。中間代碼的形式常見的中間代碼形式包括三地址代碼、抽象語(yǔ)法樹(AbstractSyntaxTree,AST)等。三地址代碼定義三地址代碼是一種中間代碼形式,由一系列的三元式(或四元式)組成,每個(gè)三元式包含操作符、操作數(shù)1、操作數(shù)2和結(jié)果四個(gè)部分。三地址代碼的特點(diǎn)三地址代碼具有高度規(guī)范化、結(jié)構(gòu)簡(jiǎn)單、易于分析和優(yōu)化等特點(diǎn),是編譯器設(shè)計(jì)中常用的中間表示形式。三地址代碼的生成方法常見的三地址代碼生成方法包括直接生成法、遍歷語(yǔ)法樹生成法等。010203三地址代碼的生成循環(huán)結(jié)構(gòu)的識(shí)別編譯器需要識(shí)別出源程序中的循環(huán)結(jié)構(gòu),以便進(jìn)行優(yōu)化。循環(huán)結(jié)構(gòu)的優(yōu)化方法常見的循環(huán)結(jié)構(gòu)優(yōu)化方法包括循環(huán)展開、循環(huán)合并、循環(huán)嵌套等,可以提高循環(huán)的執(zhí)行效率。循環(huán)結(jié)構(gòu)優(yōu)化的度量循環(huán)結(jié)構(gòu)優(yōu)化的度量標(biāo)準(zhǔn)包括執(zhí)行時(shí)間、空間復(fù)雜度、可讀性和可維護(hù)性等。循環(huán)結(jié)構(gòu)的優(yōu)化05代碼優(yōu)化010203代碼優(yōu)化是編譯器的一個(gè)重要組成部分,旨在改進(jìn)生成代碼的性能和質(zhì)量。代碼優(yōu)化的目的是在保持程序語(yǔ)義不變的前提下,通過(guò)修改程序的結(jié)構(gòu)和算法,以更高效的方式實(shí)現(xiàn)相同的功能。代碼優(yōu)化可以分為局部?jī)?yōu)化和全局優(yōu)化兩類。代碼優(yōu)化概述在編譯時(shí)計(jì)算常量表達(dá)式的值,避免在運(yùn)行時(shí)進(jìn)行計(jì)算。常量折疊將計(jì)算出的常量值傳播到程序的其他部分,以減少運(yùn)行時(shí)的計(jì)算。常量傳播通過(guò)共享計(jì)算結(jié)果來(lái)避免重復(fù)計(jì)算。減少冗余計(jì)算將函數(shù)體直接嵌入到調(diào)用點(diǎn),以減少函數(shù)調(diào)用的開銷。內(nèi)聯(lián)函數(shù)局部?jī)?yōu)化循環(huán)展開循環(huán)不變量代碼外提死代碼消除無(wú)用代碼刪除全局優(yōu)化將循環(huán)的迭代次數(shù)展開,以減少循環(huán)的開銷。刪除程序中永遠(yuǎn)不會(huì)被執(zhí)行的代碼。將循環(huán)中的某些代碼移到循環(huán)外部,以減少循環(huán)內(nèi)部的計(jì)算。刪除程序中不會(huì)產(chǎn)生任何輸出的代碼。06目標(biāo)代碼生成目標(biāo)代碼生成是編譯過(guò)程的核心環(huán)節(jié),其任務(wù)是將中間代碼轉(zhuǎn)換成等價(jià)的機(jī)器代碼或匯編代碼。目標(biāo)代碼應(yīng)具有良好的可移植性和可維護(hù)性,同時(shí)要充分利用目標(biāo)機(jī)器的指令集和體系結(jié)構(gòu)特點(diǎn)。目標(biāo)代碼生成需要考慮代碼優(yōu)化問(wèn)題,以提高生成代碼的執(zhí)行效率和減小程序體積。目標(biāo)代碼生成概述確定目標(biāo)代碼的格式根據(jù)目標(biāo)機(jī)器的指令集和體系結(jié)構(gòu),設(shè)計(jì)目標(biāo)代碼的指令格式和匯編語(yǔ)言格式。設(shè)計(jì)代碼生成算法根據(jù)中間代碼的特點(diǎn),選擇合適的算法將中間代碼轉(zhuǎn)換成目標(biāo)代碼。設(shè)計(jì)代碼優(yōu)化算法在生成目標(biāo)代碼的過(guò)程中,應(yīng)用各種優(yōu)化技術(shù)以提高代碼的執(zhí)行效率和減小程序體積。代碼生成器的設(shè)計(jì)030

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論