編譯程序概論引論.ppt_第1頁
編譯程序概論引論.ppt_第2頁
編譯程序概論引論.ppt_第3頁
編譯程序概論引論.ppt_第4頁
編譯程序概論引論.ppt_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第1章 編譯程序概論,2019/7/2,第1章 編譯原理概論,Page 2,第1章 編譯原理概論,學(xué)習(xí)目標(biāo) 掌握:編譯的各個(gè)階段 理解:編譯程序的概念 了解:解釋器,編譯程序的結(jié)構(gòu)和組合,2019/7/2,第1章 編譯原理概論,Page 3,第1章 編譯原理概論,編譯是什么? 編譯有什么用/為什么需要編譯? 編譯怎么實(shí)現(xiàn)這個(gè)功能/作用?,2019/7/2,第1章 編譯原理概論,Page 4,第1章 編譯原理概論,回想使用VC 6.0運(yùn)行程序的過程: 編譯 鏈接 執(zhí)行,檢查詞法是否正確,檢查語法是否正確,將正確的高級(jí)語言生成機(jī)器能理解的目標(biāo)代碼,機(jī)器語言 匯編語言,2019/7/2,第1章 編譯原理概論,Page 5,第1章 編譯原理概論,1.1 什么是編譯程序 1.2 編譯過程概述 1.3 編譯程序的結(jié)構(gòu) 1.4 編譯階段的組合 1.5 編譯技術(shù)和軟件工具,2019/7/2,第1章 編譯原理概論,Page 6, 1.1 什么是編譯程序,1、翻譯程序: 2、編譯程序: 3、匯編程序:,Fortran, Pascal, C,匯編語言,機(jī)器語言,2019/7/2,第1章 編譯原理概論,Page 7, 1.1 什么是編譯程序,4高級(jí)語言程序的處理過程,(1)編譯的方式,由“編譯程序”把源程序全部翻譯成二進(jìn)制代碼,可反復(fù)執(zhí)行。,2019/7/2,第1章 編譯原理概論,Page 8, 1.1 什么是編譯程序,4高級(jí)語言程序的處理過程,(2)解釋的方式,一句一句地讀進(jìn)高級(jí)語言源程序; 邊翻譯邊執(zhí)行; 翻譯完成即得出執(zhí)行結(jié)果; 下次再執(zhí)行時(shí)重新翻譯。,2019/7/2,第1章 編譯原理概論,Page 9, 1.1 什么是編譯程序,4高級(jí)語言程序的處理過程,(3)解釋器(interpreter)與編譯器,共同點(diǎn):都是語言的一個(gè)實(shí)現(xiàn)系統(tǒng) 不同點(diǎn):,解釋器是源程序的一個(gè)執(zhí)行系統(tǒng),工作結(jié)果得到源程序的執(zhí)行結(jié)果; 編譯器是源程序的轉(zhuǎn)換系統(tǒng),工作結(jié)果得到等價(jià)于源程序的某種目標(biāo)程序,2019/7/2,第1章 編譯原理概論,Page 10, 1.1 什么是編譯程序,5編譯程序的發(fā)展 以機(jī)器語言、匯編語言為工具 以高級(jí)語言為工具 編譯程序自動(dòng)生成工具 自編譯技術(shù) 并行編譯技術(shù),2019/7/2,第1章 編譯原理概論,Page 11, 1.2 編譯過程,2019/7/2,第1章 編譯原理概論,Page 12, 1.2 編譯過程,1、詞法分析階段 從左到右一個(gè)字符一個(gè)字符地讀入源程序,對(duì)構(gòu)成源程序的字符流進(jìn)行掃描和分解,從而識(shí)別出一個(gè)個(gè)單詞(Token)。 單詞:語法上具有獨(dú)立意義的最小單位(標(biāo)識(shí)符,基本字,算符,界符等) 識(shí)別規(guī)則:詞法規(guī)則,在數(shù)中出現(xiàn)非數(shù)字字符 標(biāo)識(shí)符不是以字母和下劃線打頭,詞法錯(cuò)誤, 1.2 編譯過程,2019/7/2,第1章 編譯原理概論,Page 13,詞法錯(cuò)誤,2019/7/2,第1章 編譯原理概論,Page 14, 1.2 編譯過程,例:源程序 begin var sum,first,count:real; sum:=first+count*10 end.,2019/7/2,第1章 編譯原理概論,Page 15, 1.2 編譯過程,2、語法分析階段 任務(wù):在詞法分析的基礎(chǔ)上,將單詞序列分解成各類語法短語,表示成語法樹。 識(shí)別規(guī)則:語法規(guī)則。 判斷輸入串是否構(gòu)成一個(gè)語法上正確的程序,并生成語法樹。,else沒有匹配的if 表達(dá)式缺少分號(hào)結(jié)尾,語法錯(cuò)誤, 1.2 編譯過程,2019/7/2,第1章 編譯原理概論,Page 16,語法錯(cuò)誤,2019/7/2,第1章 編譯原理概論,Page 17, 1.2 編譯過程,例:賦值語句 sum:=first+count*10 賦值語句規(guī)則 :=“:=” :=“+” :=“*” :=“(”“)” := := :=,2019/7/2,第1章 編譯原理概論,Page 18, 1.2 編譯過程,3、語義分析階段 任務(wù):審查源程序有無語義錯(cuò)誤,為代碼生成階段收集類型信息。 識(shí)別規(guī)則:語義規(guī)則 識(shí)別結(jié)果進(jìn)行類型轉(zhuǎn)換或報(bào)告類型錯(cuò)誤 類型審查(靜態(tài)語義): 上下文相關(guān)性 類型匹配 類型轉(zhuǎn)換,數(shù)組下標(biāo)越界 聲明和使用的函數(shù)沒有定義 零作除數(shù),語義錯(cuò)誤, 1.2 編譯過程,2019/7/2,第1章 編譯原理概論,Page 19,語義錯(cuò)誤,2019/7/2,第1章 編譯原理概論,Page 20, 1.2 編譯過程,例:源程序:sum := first + count * 10經(jīng)語義分析發(fā)現(xiàn)整數(shù)10必須轉(zhuǎn)換成實(shí)數(shù)才能與實(shí)形變量count相乘。因此在分析樹上增加一語義處理結(jié)點(diǎn),2019/7/2,第1章 編譯原理概論,Page 21, 1.2 編譯過程,4、中間代碼生成 從這里開始真正做翻譯工作 任務(wù):把源程序翻譯成中間代碼(如四元式) 四元式的形式: (運(yùn)算符,運(yùn)算對(duì)象1,運(yùn)算對(duì)象2,結(jié)果) 例: 源程序:sum := first + count * 10 翻譯成四元式 (1) (inttoreal 10 - T1 ) (2) (* count T1 T2) (3) (+ first T2 T3) (4) (:= T3 - sum),2019/7/2,第1章 編譯原理概論,Page 22, 1.2 編譯過程,5、代碼優(yōu)化 任務(wù):對(duì)中間代碼進(jìn)行等價(jià)變換,以便生成更高效的目標(biāo)代碼,即省時(shí)間和省空間。 舉例: (1) (inttoreal 10 - T1 ) (2) (* count T1 T2) (3) (+ first T2 T3) (4) (:= T3 - sum) 簡化后: (* count 10.0 T1) (+ first T1 sum),2019/7/2,第1章 編譯原理概論,Page 23, 1.2 編譯過程,6、目標(biāo)代碼生成 任務(wù):把中間代碼變換成特定機(jī)器上的絕對(duì)指令代碼或可重定位的指令代碼或匯編指令代碼,它的工作與硬件系統(tǒng)和指令含義有關(guān).,例如: (* count 10.0 T1 ) (+ first T1 sum),生成匯編代碼如下: MOVF count, R2 MULF #10.0, R2 MOVF first, R1 ADDF R1, R2 MOV R1, sum,源程序: sum := first + count * 10,2019/7/2,第1章 編譯原理概論,Page 24, 1.3 編譯程序的結(jié)構(gòu),2019/7/2,第1章 編譯原理概論,Page 25, 1.3 編譯程序的結(jié)構(gòu),表格管理和出錯(cuò)處理 表格保留編譯過程中源程序的各種信息 出錯(cuò)處理處理編譯過程中發(fā)現(xiàn)的源程序錯(cuò)誤(詞法錯(cuò)誤、語法錯(cuò)誤、語義錯(cuò)誤),2019/7/2,第1章 編譯原理概論,Page 26, 1.4 編譯階段的組合,1分析與綜合 分析階段: 詞法分析、語法分析、語義分析 只對(duì)程序進(jìn)行識(shí)別和檢查,未作實(shí)質(zhì)翻譯。 綜合階段: 中間代碼生成、代碼優(yōu)化、目標(biāo)代碼生成 對(duì)源程序進(jìn)行翻譯,生成目標(biāo)代碼。,2019/7/2,第1章 編譯原理概論,Page 27, 1.4 編譯階段的組合,2前端與后端 前端: 詞法分析、語法分析、語義分析和中間代碼的生成、中間代碼優(yōu)化。 前端的工作只依賴于源語言,與機(jī)器無關(guān)。 后端: 目標(biāo)代碼生成。 后端工作依賴于目標(biāo)機(jī),而與源語言無關(guān)(只與中間代碼有關(guān))。,2019/7/2,第1章 編譯原理概論,Page 28, 1.4 編譯階段的組合,3一遍與多遍 一個(gè)編譯程序可由一遍、兩遍或多遍完成。 “遍”是對(duì)源程序或中間語言程序從頭到尾掃視并完成規(guī)定任務(wù)的過程。 影響分遍的因素:源語言結(jié)構(gòu),目標(biāo)機(jī)資源,開發(fā)人員編程習(xí)慣。,2019/7/2,第1章 編譯原理概論,Page 29, 1.5 編譯技術(shù)和軟件工具,1、語言的結(jié)構(gòu)化編輯器 引導(dǎo)用戶在語言的語法制導(dǎo)下編制程序。 2、語言程序的調(diào)試工具 幫助編程人員檢查程序的算法和運(yùn)行結(jié)果是否符合原意, 與語法分析和語義處理關(guān)系密切。 3、語言程序的測(cè)試工具 靜態(tài)分析器:檢查變量的定值與引用關(guān)系。 動(dòng)態(tài)測(cè)試器:用測(cè)試用例記錄程序運(yùn)行時(shí)實(shí)際路徑。,2019/7/2,第1章 編譯原理概論,Page 30, 1.5 編譯技術(shù)和軟件工具,4高級(jí)語言之間的轉(zhuǎn)換工具 把一種高級(jí)語言轉(zhuǎn)換成另一種高級(jí)語言。 匯編語言轉(zhuǎn)換成高級(jí)語言(反編譯)。 5并行編譯技術(shù) 并行機(jī)和多處理機(jī)的發(fā)展要求軟件并行處理; 運(yùn)用重構(gòu)技術(shù)從串行程序中分析出并行成分; 用并行語言編寫并行處理程序。,2019/7/2,第1章 編譯原理概論,Page 31,小結(jié),內(nèi)容: 什么是編譯程序 編譯的各個(gè)階段 為什么要學(xué)習(xí)編譯程序 重點(diǎn): 對(duì)編譯程序的功能和結(jié)構(gòu)有總體認(rèn)識(shí) 理解編譯程序各個(gè)階段的邏輯關(guān)系 以及他們?cè)鯓幼鳛橐粋€(gè)整體完成編譯任務(wù),2019/7/2,第1章 編譯原理概論,Page 32,練習(xí),1、什么是翻譯程序,編譯程序,匯編程序?它們之間是什么關(guān)系?,2019/7/2,第1章 編譯原理概論,Page 33,練習(xí),1、翻譯程序: 2、編譯程序: 3、匯編程序:,2019/7/2,第1章 編譯原理概論,Page 34,練習(xí),2、填空,在詞法分析的基礎(chǔ)上,將單詞序列分解成各類語法短語。( ) 把源程序翻譯成中間代碼。 ( ) 從左到右一個(gè)字符一個(gè)字符地讀入源程序,對(duì)構(gòu)成源程序的字符流進(jìn)行掃描和分解,從而識(shí)別出一個(gè)個(gè)單詞。 ( ) 把中間代碼變換成特定機(jī)器上的絕對(duì)指令代碼或可重定位的指令代碼或匯編指令代碼。 ( ) 對(duì)中間代碼進(jìn)行等價(jià)變換,以便生成更高效的目標(biāo)代碼。 ( ) 審查源程序有無語義錯(cuò)誤,為代碼生成階段收集類型信息。 ( )

溫馨提示

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