




已閱讀5頁,還剩30頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第1章 編譯程序概論,2019/7/2,第1章 編譯原理概論,Page 2,第1章 編譯原理概論,學習目標 掌握:編譯的各個階段 理解:編譯程序的概念 了解:解釋器,編譯程序的結構和組合,2019/7/2,第1章 編譯原理概論,Page 3,第1章 編譯原理概論,編譯是什么? 編譯有什么用/為什么需要編譯? 編譯怎么實現(xiàn)這個功能/作用?,2019/7/2,第1章 編譯原理概論,Page 4,第1章 編譯原理概論,回想使用VC 6.0運行程序的過程: 編譯 鏈接 執(zhí)行,檢查詞法是否正確,檢查語法是否正確,將正確的高級語言生成機器能理解的目標代碼,機器語言 匯編語言,2019/7/2,第1章 編譯原理概論,Page 5,第1章 編譯原理概論,1.1 什么是編譯程序 1.2 編譯過程概述 1.3 編譯程序的結構 1.4 編譯階段的組合 1.5 編譯技術和軟件工具,2019/7/2,第1章 編譯原理概論,Page 6, 1.1 什么是編譯程序,1、翻譯程序: 2、編譯程序: 3、匯編程序:,Fortran, Pascal, C,匯編語言,機器語言,2019/7/2,第1章 編譯原理概論,Page 7, 1.1 什么是編譯程序,4高級語言程序的處理過程,(1)編譯的方式,由“編譯程序”把源程序全部翻譯成二進制代碼,可反復執(zhí)行。,2019/7/2,第1章 編譯原理概論,Page 8, 1.1 什么是編譯程序,4高級語言程序的處理過程,(2)解釋的方式,一句一句地讀進高級語言源程序; 邊翻譯邊執(zhí)行; 翻譯完成即得出執(zhí)行結果; 下次再執(zhí)行時重新翻譯。,2019/7/2,第1章 編譯原理概論,Page 9, 1.1 什么是編譯程序,4高級語言程序的處理過程,(3)解釋器(interpreter)與編譯器,共同點:都是語言的一個實現(xiàn)系統(tǒng) 不同點:,解釋器是源程序的一個執(zhí)行系統(tǒng),工作結果得到源程序的執(zhí)行結果; 編譯器是源程序的轉換系統(tǒng),工作結果得到等價于源程序的某種目標程序,2019/7/2,第1章 編譯原理概論,Page 10, 1.1 什么是編譯程序,5編譯程序的發(fā)展 以機器語言、匯編語言為工具 以高級語言為工具 編譯程序自動生成工具 自編譯技術 并行編譯技術,2019/7/2,第1章 編譯原理概論,Page 11, 1.2 編譯過程,2019/7/2,第1章 編譯原理概論,Page 12, 1.2 編譯過程,1、詞法分析階段 從左到右一個字符一個字符地讀入源程序,對構成源程序的字符流進行掃描和分解,從而識別出一個個單詞(Token)。 單詞:語法上具有獨立意義的最小單位(標識符,基本字,算符,界符等) 識別規(guī)則:詞法規(guī)則,在數(shù)中出現(xiàn)非數(shù)字字符 標識符不是以字母和下劃線打頭,詞法錯誤, 1.2 編譯過程,2019/7/2,第1章 編譯原理概論,Page 13,詞法錯誤,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、語法分析階段 任務:在詞法分析的基礎上,將單詞序列分解成各類語法短語,表示成語法樹。 識別規(guī)則:語法規(guī)則。 判斷輸入串是否構成一個語法上正確的程序,并生成語法樹。,else沒有匹配的if 表達式缺少分號結尾,語法錯誤, 1.2 編譯過程,2019/7/2,第1章 編譯原理概論,Page 16,語法錯誤,2019/7/2,第1章 編譯原理概論,Page 17, 1.2 編譯過程,例:賦值語句 sum:=first+count*10 賦值語句規(guī)則 :=“:=” :=“+” :=“*” :=“(”“)” := := :=,2019/7/2,第1章 編譯原理概論,Page 18, 1.2 編譯過程,3、語義分析階段 任務:審查源程序有無語義錯誤,為代碼生成階段收集類型信息。 識別規(guī)則:語義規(guī)則 識別結果進行類型轉換或報告類型錯誤 類型審查(靜態(tài)語義): 上下文相關性 類型匹配 類型轉換,數(shù)組下標越界 聲明和使用的函數(shù)沒有定義 零作除數(shù),語義錯誤, 1.2 編譯過程,2019/7/2,第1章 編譯原理概論,Page 19,語義錯誤,2019/7/2,第1章 編譯原理概論,Page 20, 1.2 編譯過程,例:源程序:sum := first + count * 10經(jīng)語義分析發(fā)現(xiàn)整數(shù)10必須轉換成實數(shù)才能與實形變量count相乘。因此在分析樹上增加一語義處理結點,2019/7/2,第1章 編譯原理概論,Page 21, 1.2 編譯過程,4、中間代碼生成 從這里開始真正做翻譯工作 任務:把源程序翻譯成中間代碼(如四元式) 四元式的形式: (運算符,運算對象1,運算對象2,結果) 例: 源程序: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)化 任務:對中間代碼進行等價變換,以便生成更高效的目標代碼,即省時間和省空間。 舉例: (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、目標代碼生成 任務:把中間代碼變換成特定機器上的絕對指令代碼或可重定位的指令代碼或匯編指令代碼,它的工作與硬件系統(tǒng)和指令含義有關.,例如: (* 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 編譯程序的結構,2019/7/2,第1章 編譯原理概論,Page 25, 1.3 編譯程序的結構,表格管理和出錯處理 表格保留編譯過程中源程序的各種信息 出錯處理處理編譯過程中發(fā)現(xiàn)的源程序錯誤(詞法錯誤、語法錯誤、語義錯誤),2019/7/2,第1章 編譯原理概論,Page 26, 1.4 編譯階段的組合,1分析與綜合 分析階段: 詞法分析、語法分析、語義分析 只對程序進行識別和檢查,未作實質翻譯。 綜合階段: 中間代碼生成、代碼優(yōu)化、目標代碼生成 對源程序進行翻譯,生成目標代碼。,2019/7/2,第1章 編譯原理概論,Page 27, 1.4 編譯階段的組合,2前端與后端 前端: 詞法分析、語法分析、語義分析和中間代碼的生成、中間代碼優(yōu)化。 前端的工作只依賴于源語言,與機器無關。 后端: 目標代碼生成。 后端工作依賴于目標機,而與源語言無關(只與中間代碼有關)。,2019/7/2,第1章 編譯原理概論,Page 28, 1.4 編譯階段的組合,3一遍與多遍 一個編譯程序可由一遍、兩遍或多遍完成。 “遍”是對源程序或中間語言程序從頭到尾掃視并完成規(guī)定任務的過程。 影響分遍的因素:源語言結構,目標機資源,開發(fā)人員編程習慣。,2019/7/2,第1章 編譯原理概論,Page 29, 1.5 編譯技術和軟件工具,1、語言的結構化編輯器 引導用戶在語言的語法制導下編制程序。 2、語言程序的調(diào)試工具 幫助編程人員檢查程序的算法和運行結果是否符合原意, 與語法分析和語義處理關系密切。 3、語言程序的測試工具 靜態(tài)分析器:檢查變量的定值與引用關系。 動態(tài)測試器:用測試用例記錄程序運行時實際路徑。,2019/7/2,第1章 編譯原理概論,Page 30, 1.5 編譯技術和軟件工具,4高級語言之間的轉換工具 把一種高級語言轉換成另一種高級語言。 匯編語言轉換成高級語言(反編譯)。 5并行編譯技術 并行機和多處理機的發(fā)展要求軟件并行處理; 運用重構技術從串行程序中分析出并行成分; 用并行語言編寫并行處理程序。,2019/7/2,第1章 編譯原理概論,Page 31,小結,內(nèi)容: 什么是編譯程序 編譯的各個階段 為什么要學習編譯程序 重點: 對編譯程序的功能和結構有總體認識 理解編譯程序各個階段的邏輯關系 以及他們怎樣作為一個整體完成編譯任務,2019/7/2,第1章 編譯原理概論,Page 32,練習,1、什么是翻譯程序,編譯程序,匯編程序?它們之間是什么關系?,2019/7/2,第1章 編譯原理概論,Page 33,練習,1、翻譯程序: 2、編譯程序: 3、匯編程序:,2019/7/2,第1章 編譯原理概論,Page 34,練習,2、填空,在詞法分析的基礎上,將單詞序列分解成各類語法短語。( ) 把源程序翻譯成中間代碼。 ( ) 從左到右一個字符一個字符地讀入源程序,對構成源程序的字符流進行掃描和分解,從而識別出一個個單詞。 ( ) 把中間代碼變換成特定機器上的絕對指令代碼或可重定位的指令代碼或匯編指令代碼。 ( ) 對中間代碼進行等價變換,以便生成更高效的目標代碼。 ( ) 審查源程序有無語義錯誤,為代碼生成階段收集類型信息。 ( )
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 干凈整潔面試題及答案
- 師德修養(yǎng)考試題及答案
- 河南舞蹈考試題庫及答案
- 護理崗面試題及答案
- oracle數(shù)據(jù)面試題及答案
- java填空題面試題及答案
- 中醫(yī)康復護理學
- 江蘇省南通市海門區(qū)2024-2025學年五年級下學期6月期末道德與法治試題(含答案)
- 2025年山東省威海市文登區(qū)城區(qū)重點中學八年級三校中考模擬生物試題(含答案)
- 品牌代理運營合作協(xié)議及質量保證承諾
- 高中化學核心素養(yǎng)(北師大王磊)
- 工程建筑物拆除、清運及建筑廢棄物綜合招投標書范本
- 保密管理與商業(yè)機密保護
- 【低保政策執(zhí)行過程中產(chǎn)生的消極效果及優(yōu)化建議分析11000字(論文)】
- 醫(yī)院護理培訓課件:《妊娠劇吐的護理查房》
- 幼兒園小班數(shù)學《圖形王國歷險記》課件
- GB/T 22461.1-2023表面化學分析詞匯第1部分:通用術語及譜學術語
- 造林(喬木林、灌木林、經(jīng)濟林)單元工程質量評定表(2023版)
- 必修2冊重點知識點提綱 高中地湘教版
- 2023春國開個人與團隊管理1-32章自測試題及答案
- 2023-2024學年四川省涼山州小學數(shù)學五年級下冊期末自測試卷
評論
0/150
提交評論