南開(kāi)大學(xué)編譯原理第四章課件_第1頁(yè)
南開(kāi)大學(xué)編譯原理第四章課件_第2頁(yè)
南開(kāi)大學(xué)編譯原理第四章課件_第3頁(yè)
南開(kāi)大學(xué)編譯原理第四章課件_第4頁(yè)
南開(kāi)大學(xué)編譯原理第四章課件_第5頁(yè)
已閱讀5頁(yè),還剩7頁(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)介

深入淺出編譯原理編譯器是計(jì)算機(jī)科學(xué)的重要領(lǐng)域,掌握編譯原理是程序員必備技能之一。本課程將帶您了解編譯器中的關(guān)鍵概念、技術(shù)和工具。編譯過(guò)程概述編譯器把源代碼轉(zhuǎn)換成目標(biāo)代碼。編譯過(guò)程由多個(gè)階段組成,包括詞法分析、語(yǔ)法分析、代碼生成和優(yōu)化,每個(gè)階段都有不同的任務(wù)和挑戰(zhàn)。詞法分析Token一個(gè)源代碼中的最小單元,例如關(guān)鍵字、標(biāo)識(shí)符和運(yùn)算符。正則表達(dá)式和有限狀態(tài)自動(dòng)機(jī)詞法分析是在正則表達(dá)式和有限狀態(tài)自動(dòng)機(jī)之間進(jìn)行的。Lex工具一個(gè)生成詞法分析器的程序,可根據(jù)正則表達(dá)式自動(dòng)產(chǎn)生程序代碼。Flex工具與Lex類似的一個(gè)工具,但是更加快速、靈活和可定制化。語(yǔ)法分析Context-FreeGrammar一種用于描述編程語(yǔ)言結(jié)構(gòu)的形式語(yǔ)言。RecursiveDescentParsing一種簡(jiǎn)單但有效的分析方法,每個(gè)非終結(jié)符關(guān)聯(lián)一個(gè)子程序,當(dāng)然遞歸的調(diào)用子程序。LRParsing一種自底向上的分析器,在語(yǔ)法分析的過(guò)程中構(gòu)建一個(gè)抽象語(yǔ)法樹。Yacc和Bison類似于Lex和Flex的工具,用于自動(dòng)產(chǎn)生語(yǔ)法分析器程序代碼。自底向上語(yǔ)法分析1LRParsingLR分析器根據(jù)預(yù)讀的符號(hào)序列確定語(yǔ)法狀態(tài),然后根據(jù)狀態(tài)內(nèi)的一組規(guī)則進(jìn)行規(guī)約或移進(jìn)操作。2LALRParsingLALR分析器是一種LR分析器的擴(kuò)充,可以通過(guò)合并沖突狀態(tài)來(lái)消耗更少的內(nèi)存。3SLRParsingSLR分析器是一種更加簡(jiǎn)單的LR分析器,通常用于學(xué)習(xí)和教學(xué)。自頂向下語(yǔ)法分析LLParsingLL分析器從左到右掃描輸入,從左到右構(gòu)建分析樹。RecursiveDescentParsing遞歸下降解析器將語(yǔ)法規(guī)則分解為一組關(guān)聯(lián)的子程序。Top-DownParsing自頂向下分析器按照文法中符號(hào)的層級(jí)結(jié)構(gòu)進(jìn)行分析,從文法的開(kāi)始符號(hào)出發(fā),預(yù)測(cè)推導(dǎo)所需的符號(hào)串。PEGParsing基于語(yǔ)法規(guī)則的無(wú)上下文語(yǔ)法分析方法,接近于人類進(jìn)行語(yǔ)言理解的方式。語(yǔ)法制導(dǎo)翻譯SyntaxTree由語(yǔ)法分析器構(gòu)建的一種樹形結(jié)構(gòu),代表了源程序的結(jié)構(gòu)。屬性文法一種編譯器的中文化,定義了語(yǔ)法分析樹和屬性之間的關(guān)系。語(yǔ)義分析在語(yǔ)法分析的基礎(chǔ)上,進(jìn)一步檢查程序的語(yǔ)義是否正確,例如變量定義和類型檢查。代碼生成根據(jù)語(yǔ)法分析樹和屬性,將程序代碼轉(zhuǎn)換為中間代碼或目標(biāo)代碼。中間代碼名稱描述三地址碼一種緊湊和可讀性高的中間代碼表示方法。抽象語(yǔ)法樹一種更加結(jié)構(gòu)化和語(yǔ)義化的中間代碼表示方法。虛擬機(jī)代碼一種基于棧的中間代碼,通常用于解釋型語(yǔ)言和虛擬機(jī)實(shí)現(xiàn)。字節(jié)碼一種緊湊的中間代碼表示方法,通常用于Java和.NET平臺(tái)。代碼優(yōu)化性能優(yōu)化代碼優(yōu)化的主要目標(biāo)之一是提高程序的性能,減少時(shí)間和空間的開(kāi)銷。刪除冗余代碼在編譯過(guò)程中,可以刪除無(wú)意義的代碼和重復(fù)的代碼,減少運(yùn)行時(shí)的開(kāi)銷。常量折疊編譯器在編譯期間計(jì)算常量表達(dá)式的值,簡(jiǎn)化程序邏輯。寄存器分配將變量存儲(chǔ)在寄存器中,加快程序執(zhí)行速度。目標(biāo)代碼生成翻譯方案編譯器可以產(chǎn)生多種不同形式的目標(biāo)代碼,例如匯編語(yǔ)言、機(jī)器語(yǔ)言和中間代碼。代碼優(yōu)化在目標(biāo)代碼生成的前后,可以執(zhí)行大量的代碼優(yōu)化技術(shù),提高程序的性能和可讀性。鏈接方式目標(biāo)代碼可以靜態(tài)鏈接或動(dòng)態(tài)鏈接到程序中,可以減少可執(zhí)行文件的大小。目標(biāo)平臺(tái)編譯器需要根據(jù)目標(biāo)平臺(tái)的指令集架構(gòu)和操作系統(tǒng)要求生成相應(yīng)的目標(biāo)代碼。代碼生成器1llvm一套優(yōu)秀的編譯器基礎(chǔ)設(shè)施,在代碼生成和優(yōu)化方面表現(xiàn)優(yōu)異。2tvm一款基于自動(dòng)化的深度學(xué)習(xí)編譯器系統(tǒng),它可以自動(dòng)將深度學(xué)習(xí)模型映射到各種硬件設(shè)備上。3gcc/g++使用廣泛的開(kāi)源編譯器,支持多種編程語(yǔ)言和平臺(tái)。4clang基于llvm平臺(tái)的C語(yǔ)言和C++語(yǔ)言編譯器,支持多種目標(biāo)平臺(tái)。

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論