




已閱讀5頁(yè),還剩30頁(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)介
第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)行程序的過(guò)程: 編譯 鏈接 執(zhí)行,檢查詞法是否正確,檢查語(yǔ)法是否正確,將正確的高級(jí)語(yǔ)言生成機(jī)器能理解的目標(biāo)代碼,機(jī)器語(yǔ)言 匯編語(yǔ)言,2019/7/2,第1章 編譯原理概論,Page 5,第1章 編譯原理概論,1.1 什么是編譯程序 1.2 編譯過(guò)程概述 1.3 編譯程序的結(jié)構(gòu) 1.4 編譯階段的組合 1.5 編譯技術(shù)和軟件工具,2019/7/2,第1章 編譯原理概論,Page 6, 1.1 什么是編譯程序,1、翻譯程序: 2、編譯程序: 3、匯編程序:,Fortran, Pascal, C,匯編語(yǔ)言,機(jī)器語(yǔ)言,2019/7/2,第1章 編譯原理概論,Page 7, 1.1 什么是編譯程序,4高級(jí)語(yǔ)言程序的處理過(guò)程,(1)編譯的方式,由“編譯程序”把源程序全部翻譯成二進(jìn)制代碼,可反復(fù)執(zhí)行。,2019/7/2,第1章 編譯原理概論,Page 8, 1.1 什么是編譯程序,4高級(jí)語(yǔ)言程序的處理過(guò)程,(2)解釋的方式,一句一句地讀進(jìn)高級(jí)語(yǔ)言源程序; 邊翻譯邊執(zhí)行; 翻譯完成即得出執(zhí)行結(jié)果; 下次再執(zhí)行時(shí)重新翻譯。,2019/7/2,第1章 編譯原理概論,Page 9, 1.1 什么是編譯程序,4高級(jí)語(yǔ)言程序的處理過(guò)程,(3)解釋器(interpreter)與編譯器,共同點(diǎn):都是語(yǔ)言的一個(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ī)器語(yǔ)言、匯編語(yǔ)言為工具 以高級(jí)語(yǔ)言為工具 編譯程序自動(dòng)生成工具 自編譯技術(shù) 并行編譯技術(shù),2019/7/2,第1章 編譯原理概論,Page 11, 1.2 編譯過(guò)程,2019/7/2,第1章 編譯原理概論,Page 12, 1.2 編譯過(guò)程,1、詞法分析階段 從左到右一個(gè)字符一個(gè)字符地讀入源程序,對(duì)構(gòu)成源程序的字符流進(jìn)行掃描和分解,從而識(shí)別出一個(gè)個(gè)單詞(Token)。 單詞:語(yǔ)法上具有獨(dú)立意義的最小單位(標(biāo)識(shí)符,基本字,算符,界符等) 識(shí)別規(guī)則:詞法規(guī)則,在數(shù)中出現(xiàn)非數(shù)字字符 標(biāo)識(shí)符不是以字母和下劃線打頭,詞法錯(cuò)誤, 1.2 編譯過(guò)程,2019/7/2,第1章 編譯原理概論,Page 13,詞法錯(cuò)誤,2019/7/2,第1章 編譯原理概論,Page 14, 1.2 編譯過(guò)程,例:源程序 begin var sum,first,count:real; sum:=first+count*10 end.,2019/7/2,第1章 編譯原理概論,Page 15, 1.2 編譯過(guò)程,2、語(yǔ)法分析階段 任務(wù):在詞法分析的基礎(chǔ)上,將單詞序列分解成各類語(yǔ)法短語(yǔ),表示成語(yǔ)法樹。 識(shí)別規(guī)則:語(yǔ)法規(guī)則。 判斷輸入串是否構(gòu)成一個(gè)語(yǔ)法上正確的程序,并生成語(yǔ)法樹。,else沒(méi)有匹配的if 表達(dá)式缺少分號(hào)結(jié)尾,語(yǔ)法錯(cuò)誤, 1.2 編譯過(guò)程,2019/7/2,第1章 編譯原理概論,Page 16,語(yǔ)法錯(cuò)誤,2019/7/2,第1章 編譯原理概論,Page 17, 1.2 編譯過(guò)程,例:賦值語(yǔ)句 sum:=first+count*10 賦值語(yǔ)句規(guī)則 :=“:=” :=“+” :=“*” :=“(”“)” := := :=,2019/7/2,第1章 編譯原理概論,Page 18, 1.2 編譯過(guò)程,3、語(yǔ)義分析階段 任務(wù):審查源程序有無(wú)語(yǔ)義錯(cuò)誤,為代碼生成階段收集類型信息。 識(shí)別規(guī)則:語(yǔ)義規(guī)則 識(shí)別結(jié)果進(jìn)行類型轉(zhuǎn)換或報(bào)告類型錯(cuò)誤 類型審查(靜態(tài)語(yǔ)義): 上下文相關(guān)性 類型匹配 類型轉(zhuǎn)換,數(shù)組下標(biāo)越界 聲明和使用的函數(shù)沒(méi)有定義 零作除數(shù),語(yǔ)義錯(cuò)誤, 1.2 編譯過(guò)程,2019/7/2,第1章 編譯原理概論,Page 19,語(yǔ)義錯(cuò)誤,2019/7/2,第1章 編譯原理概論,Page 20, 1.2 編譯過(guò)程,例:源程序:sum := first + count * 10經(jīng)語(yǔ)義分析發(fā)現(xiàn)整數(shù)10必須轉(zhuǎn)換成實(shí)數(shù)才能與實(shí)形變量count相乘。因此在分析樹上增加一語(yǔ)義處理結(jié)點(diǎn),2019/7/2,第1章 編譯原理概論,Page 21, 1.2 編譯過(guò)程,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 編譯過(guò)程,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) 簡(jiǎn)化后: (* count 10.0 T1) (+ first T1 sum),2019/7/2,第1章 編譯原理概論,Page 23, 1.2 編譯過(guò)程,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ò)處理 表格保留編譯過(guò)程中源程序的各種信息 出錯(cuò)處理處理編譯過(guò)程中發(fā)現(xiàn)的源程序錯(cuò)誤(詞法錯(cuò)誤、語(yǔ)法錯(cuò)誤、語(yǔ)義錯(cuò)誤),2019/7/2,第1章 編譯原理概論,Page 26, 1.4 編譯階段的組合,1分析與綜合 分析階段: 詞法分析、語(yǔ)法分析、語(yǔ)義分析 只對(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ǔ)法分析、語(yǔ)義分析和中間代碼的生成、中間代碼優(yōu)化。 前端的工作只依賴于源語(yǔ)言,與機(jī)器無(wú)關(guān)。 后端: 目標(biāo)代碼生成。 后端工作依賴于目標(biāo)機(jī),而與源語(yǔ)言無(wú)關(guān)(只與中間代碼有關(guān))。,2019/7/2,第1章 編譯原理概論,Page 28, 1.4 編譯階段的組合,3一遍與多遍 一個(gè)編譯程序可由一遍、兩遍或多遍完成。 “遍”是對(duì)源程序或中間語(yǔ)言程序從頭到尾掃視并完成規(guī)定任務(wù)的過(guò)程。 影響分遍的因素:源語(yǔ)言結(jié)構(gòu),目標(biāo)機(jī)資源,開發(fā)人員編程習(xí)慣。,2019/7/2,第1章 編譯原理概論,Page 29, 1.5 編譯技術(shù)和軟件工具,1、語(yǔ)言的結(jié)構(gòu)化編輯器 引導(dǎo)用戶在語(yǔ)言的語(yǔ)法制導(dǎo)下編制程序。 2、語(yǔ)言程序的調(diào)試工具 幫助編程人員檢查程序的算法和運(yùn)行結(jié)果是否符合原意, 與語(yǔ)法分析和語(yǔ)義處理關(guān)系密切。 3、語(yǔ)言程序的測(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í)語(yǔ)言之間的轉(zhuǎn)換工具 把一種高級(jí)語(yǔ)言轉(zhuǎn)換成另一種高級(jí)語(yǔ)言。 匯編語(yǔ)言轉(zhuǎn)換成高級(jí)語(yǔ)言(反編譯)。 5并行編譯技術(shù) 并行機(jī)和多處理機(jī)的發(fā)展要求軟件并行處理; 運(yùn)用重構(gòu)技術(shù)從串行程序中分析出并行成分; 用并行語(yǔ)言編寫并行處理程序。,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ǔ)上,將單詞序列分解成各類語(yǔ)法短語(yǔ)。( ) 把源程序翻譯成中間代碼。 ( ) 從左到右一個(gè)字符一個(gè)字符地讀入源程序,對(duì)構(gòu)成源程序的字符流進(jìn)行掃描和分解,從而識(shí)別出一個(gè)個(gè)單詞。 ( ) 把中間代碼變換成特定機(jī)器上的絕對(duì)指令代碼或可重定位的指令代碼或匯編指令代碼。 ( ) 對(duì)中間代碼進(jìn)行等價(jià)變換,以便生成更高效的目標(biāo)代碼。 ( ) 審查源程序有無(wú)語(yǔ)義錯(cuò)誤,為代碼生成階段收集類型信息。 ( )
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 供暖期間值班管理制度
- 供水公司財(cái)產(chǎn)管理制度
- 供水管道公司管理制度
- 供熱公司發(fā)票管理制度
- 供熱公司節(jié)能管理制度
- 供熱電氣設(shè)備管理制度
- 供電公司企業(yè)管理制度
- 供電公司環(huán)境管理制度
- 保利發(fā)展費(fèi)用管理制度
- 保安公司員工管理制度
- 特種設(shè)備“日管控、周排查、月調(diào)度”表格
- 設(shè)計(jì)質(zhì)量管理和保證措施及設(shè)計(jì)質(zhì)量管理和質(zhì)量保證措施
- 國(guó)家級(jí)社會(huì)體育指導(dǎo)員理論考試試題及答案
- 小學(xué)科學(xué)學(xué)法指導(dǎo)
- 充電樁建設(shè)項(xiàng)目可行性研究報(bào)告
- 第七屆全國(guó)急救技能大賽(醫(yī)生組)理論考試題庫(kù)大全-下部分
- 分級(jí)護(hù)理制度培訓(xùn)
- 初中物理核心素養(yǎng)培養(yǎng)
- 安全應(yīng)急管理培訓(xùn)
- 寰樞關(guān)節(jié)錯(cuò)位
- 公司股權(quán)投資管理制度
評(píng)論
0/150
提交評(píng)論