版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
編譯原理實踐及應用----清華大學出版社1教材及主要參考資料教材:編譯原理實踐及應用,黃賢英,清華大學出版社主要參考資料:(1)編譯原理,陳火旺,國防工業(yè)出版社程序設計語言編譯方法,肖軍模,大連理工大學出版社編譯原理,張素琴,呂映芝,清華大學出版社編譯原理,alfred
V.Aho等著,李建中等譯,人民郵電出版社2C語言程序voidmain(){int
x,y,z;x=3;y=2;z=x+y;}內(nèi)存地址內(nèi)存內(nèi)容單元名字………………200H3x:局部變量201H2y:局部變量202H5z:局部變量…………匯編語言程序……movax,3mov
x,axmovax,2mov
y,axmov
ax,xmov
bx,yaddax,bxmovz,ax......300302304306308……序言3為什么要學習編譯原理?1、有助于深刻理解和正確使用程序設計語言,加深對高級語言程序執(zhí)行過程的理解2、有助于加深對整個計算機系統(tǒng)的理解。3、設計開發(fā)編譯程序的軟件技術同樣可以用于其他軟件的設計開發(fā)。4、隨著微處理器技術的飛速發(fā)展,處理器性能在很大程度上取決于編譯器的質(zhì)量、編譯技術成為計算機的核心技術,地位變得越來越重要。4《編譯原理》課程在計算機科學中的重要地位
(1)學習編程最初是學習一門高級語言,C或Pascal,掌握編寫一些簡單程序的方法;(2)學習數(shù)據(jù)結構,建立“算法”的概念,對編程有更深入的理解。遇到問題的時候,能夠尋找相應的數(shù)據(jù)結構模型,設計適當?shù)乃惴▉斫鉀Q問題;(3)學習匯編語言,這門課程是我們真正深入了解計算機內(nèi)部工作的第一門課程。通過學習了解匯編語言如何變?yōu)闄C器語言,如何對應于一條指令;(4)計算機組成原理課程的學習使我們了解到計算機的硬件組成,以及機器指令程序如何在計算機中運行的過程。
(5)編譯原理課程幫助我們了解高級語言程序轉換成機器指令程序的過程??梢詭椭覀兏羁痰乩斫飧呒壵Z言程序運行的內(nèi)部機制。5《編譯原理》課程在計算機科學中的地位高級語言程序設計離散數(shù)學數(shù)據(jù)結構編譯原理操作系統(tǒng)系統(tǒng)軟件應用軟件軟件工程信息系統(tǒng)電子商務匯編語言計算機組成原理6學習本課程的目的和任務加深對編程語言設計和實現(xiàn)的理解,對和編程語言有關的理論有所了解,對宏觀上把握編程語言來說,起一個奠基的作用,提升自身的編程能力掌握編譯程序的基本結構,掌握常用的編譯技術和方法,將編譯原理的理論和方法應用于一般的軟件設計中培養(yǎng)團隊協(xié)作能力7本課程的特點(1)本課程理論性很強,學習時需要很強的邏輯思維能力(2)涉及的算法復雜,要深入地理解這些算法很困難(3)整個編譯程序的構造方法非常精妙,就像一部走時精確的時鐘,很多齒輪、部件協(xié)調(diào)地運轉,以驅動指針準確地旋轉;編譯程序也是如此,一邊掃描源程序,一邊經(jīng)過各個部件的運算,準確地輸出為目標語言。(4)編譯原理課程各個部分之間的獨立性很強,包括詞法分析、語法分析、存儲的組織與分配、中間語言、語法制導翻譯、代碼生成與優(yōu)化這幾大部分。詞法分析和語法分析是其中的重點,語言分析也是難點,需要掌握比較復雜的算法邏輯;其他部分相對來說知識性更強一些。各部分之間的方法也互相獨立,在學習時,便于逐個擊破。(5)考試考查的內(nèi)容相對來說是很穩(wěn)定的,絕大多數(shù)題目的解法都非常機械。8學習方法(1)盡可能地掌握編譯原理的思想,要站得高一點,盡可能理解算法的思想,而不是背固定的算法。應該盡力理解為什么要這樣做,逐漸在頭腦中建立起編譯器的整體概念,而不是零零散散的一些算法。(2)很多題目的解法比較固定,要熟練掌握相應的具體方法。(3)多做習題,對于編譯這樣的學科,題目的規(guī)模很大,步驟繁多,而且前面的步驟一旦出錯,后面都錯。(4)要扎扎實實地牢記重要算法,配合大量的習題進行練習,達到拿到題目就可以動手做的地步。(5)一邊學習,一邊總結,關鍵是找差異:同一問題可以用多種方法來求解,不同方法適用于不同的文法,對文法的限制和要求,相應的表格的構造、使用等,各個方面的差異都要關注。(6)親自動手實現(xiàn)書上的一些算法,完成實驗指導書上給出的一個簡單的編譯程序,或者編譯程序的一部分,這樣能更靈活地掌握編譯程序構造的精髓。
9編譯技術的發(fā)展1954年至1957年間,F(xiàn)ORTRAN語言及其編譯器的開發(fā)?;?8個人年。幾乎與此同時,NoamChomsky開始研究語言文法(grammar,結構規(guī)則)的難易程度以及識別它們所需的算法來為語言分類。在60年代和70年代進行的分析問題(parsingproblem,用于限定上下文無關語言的識別的有效算法)的研究。有窮自動機(finiteautomata)和正規(guī)式(regularexpression)的研究與喬姆斯基的研究幾乎同時開始,引出了表示程序設計語言的單詞的符號方式。接著又深化了生成有效的目標代碼的方法,這就是最初的編譯器,實際上應稱作代碼改進技術(codeimprovementtechnique)。當分析問題變得好懂起來時,人們就在開發(fā)程序上花費了很大的功夫來研究這一部分的編譯器的自動構造。Lex與Yacc。在70年代后期和80年代早期,大量的項目都關注于編譯器其他部分的生成自動化,這其中就包括了代碼生成。這些嘗試并未取得多少成功。
10編譯器設計最近的發(fā)展
與復雜的程序設計語言的發(fā)展結合在一起。如用于函數(shù)語言編譯的Hindley-Milner類型檢查的統(tǒng)一算法。編譯器已成為基于窗口的交互開發(fā)環(huán)境(IDE)的一部分,IDE的標準并沒有多少,但已對標準的窗口環(huán)境進行了開發(fā)。近年來對此進行了大量研究,但是基本的編譯器設計近20年來沒有多大的改變,現(xiàn)在正迅速地成為計算機科學課程中的中心一環(huán)。由多處理機的發(fā)展以及對并行處理的要求,最近的研究方向是并行編譯。隨著嵌入式應用的迅速增長,推動了交叉編譯技術的發(fā)展;對系統(tǒng)芯片設計方法和關鍵EDA技術的研究,也帶動了專用語言VHDL等及其編譯技術的不斷深化。11編譯技術的應用語言的結構化編輯器
:Turbo-Edit、editplus和Ultraedit等語言程序的調(diào)試工具語言程序的測試工具高級語言之間的轉換工具
交叉編譯程序
12引論第一章13本章要求主要內(nèi)容:各種翻譯程序的概念,編譯過程和階段劃分,編譯程序的組成和結構,編譯程序的構造方法重點掌握:編譯程序工作的基本過程及其各階段的基本任務,編譯程序總框。14機器語言(machinelanguage)C70600000002匯編語言(assemblerlanguage)
MOVX,2高級語言(high-levellanguage)
X=2為什么要使用編譯器?15計算機中的語言層次和轉換關系16高級語言語言處理程序操作系統(tǒng)匯編語言編譯程序所處的層次計算機硬件C編譯程序C語言Basic解釋程序Basic語言Fortran編譯程序Fortran語言............171.1什么叫編譯程序翻譯程序:能夠將某種語言寫的程序轉換成另一種語言的程序,而且后者與前者在邏輯上是等價的。編譯程序:是一種將高級語言程序(源程序)翻譯成低級語言(目標程序)的程序解釋程序:接受某高級語言的一個語句輸入,進行解釋并控制計算機執(zhí)行,馬上得到這句的執(zhí)行結果,然后再接受下一句。181.1什么叫編譯程序編譯程序(Compiler)——將高級程序設計語言程序翻譯成邏輯上等價的低級語言(匯編語言,機器語言)程序的翻譯程序。功能編譯程序源程序目標程序計算機運行輸入數(shù)據(jù)結果19解釋程序解釋程序(Interpreter)——將高級程序設計語言寫的源程序作為輸入,邊解釋邊執(zhí)行源程序本身,而不產(chǎn)生目標程序的翻譯程序。功能解釋程序源程序輸入數(shù)據(jù)結果20對編譯程序的一些說明編譯程序實質(zhì)上是一個翻譯程序,要注意等價變換本課程的任務就是講解在這個轉換過程中所涉及到的一些理論和方法,最后,使用這些理論和方法,自己編寫一個小的編譯器轉換是一個總體的功能,要抓住總體結構,逐層細分,寫編譯器時要體現(xiàn)軟件工程中軟件設計的原則,自頂向下,逐層分解。編譯器要完成的轉換任務相當復雜,實現(xiàn)編譯器時必須分步驟分階段實現(xiàn)。分階段實現(xiàn)的好處是能夠簡化程序的設計,當然也可以不分階段實現(xiàn)。21編譯程序的分類診斷編譯程序優(yōu)化編譯程序可變目標編譯程序交叉編譯程序22與編譯程序相關的程序解釋程序(Interpreter)匯編程序(assembler)連接程序(linker)連接系統(tǒng)函數(shù)與系統(tǒng)資源裝入程序(loader)重定位(relocation)預處理器(Preprocessor)編輯器(editor)Debugger,Profiler,ProjectManager23編譯原理是討論編譯程序設計的基本理論、基本概念、基本方法什么是編譯原理241.2編譯過程概述1、邏輯上分五個階段:詞法分析、語法分析、語義分析與中間代碼生成、代碼優(yōu)化、目標代碼生成
每個階段把源程序從一種表示變換成另一種表示詞法分析語法分析語義分析與中間代碼生成代碼優(yōu)化目標代碼生成25按照詞法分析、語法分析、語義分析等這種方式來劃分階段的原因是:每個階段的復雜程度不同,所依據(jù)的理論基礎不同,實現(xiàn)時采用的方法也不同。主要是方便理解和實現(xiàn)。劃分階段的依據(jù)是什么?每個階段所實現(xiàn)的功能相對獨立。26第一階段:詞法分析任務:從左到右掃描源程序,識別出每個單詞附加任務:a、濾掉空格b、識別單詞
單詞符號是語言的基本組成成分詞法分析的工作主要依據(jù)語言的詞法規(guī)則,描述詞法規(guī)則的有效工具是正規(guī)式和有限自動機。單詞的種類:(1)標識符(2)關鍵字(char、int、if、else、switch、while、for等)(3)運算符(即運算符號+、-、*、/、&等)(4)界符(常見的有;,:()等)(5)常數(shù)
27beginresult:=5+B*C+B*Cend;單詞類型內(nèi)部形式begin關鍵字$beginresult標識符id1:=界符:=5常數(shù)int1+算符+B標識符id1*算符*C標識符id2+算符+B標識符id2*算符*C標識符id3end關鍵字$end;界符;例:28第二階段:語法分析任務:在詞法分析的基礎上,根據(jù)語言的語法規(guī)則,將單詞符號串分解成各類語法短語(例:程序、語句、表達式)。確定整個輸入串是否構成語法上正確的程序。根據(jù)規(guī)則判定:賦值語句:標識符:=表達式表達式:標識符、常數(shù)是表達式;表達式的運算也是表達式
例:識別符號串id1:=int1+id2*id3+id2*id3(即result:=5+B*C+B*C)是一個賦值語句,而int1+id2*id3+id2*id3
(5+B*C+B*C)是一個表達式29語法分析所依據(jù)的是語言的語法規(guī)則,表示語法規(guī)則的工具是上下文無關文法,用下推自動機實現(xiàn)。id1:=int1+id2*id3+id2*id330第三階段:語義分析和中間代碼生成任務:對語法分析所識別出的各類語法范疇分析其含義,進行初步的翻譯(翻譯成中間代碼)。靜態(tài)語義審查變量定義類型匹配類型轉換例:C:=A*B(檢查C與A、B類型)中間代碼的翻譯
中間代碼有多種形式,如:
四元式:(運算符,運算對象1,運算對象2,結果)31例:對賦值語句:id1:=int1+id2*id3+id2*id3
1.檢查result、B、C是否定義、類型
2.生成中間代碼(運算符,運算對象1,運算對象2,結果)
(*,id2,id3,T1)(+,int1,T1,T2)(*,id2,id3,T3)(+,T2,T3,T4)(:=,T4,_,id1)id1:=int1+id2*id3+id2*id332第四階段:代碼優(yōu)化任務:對已產(chǎn)生的中間代碼進行加工變換,使生成的目標代碼更為高效(時間和空間)。優(yōu)化方法包括:公共子表達式的提取、循環(huán)優(yōu)化、刪除無用代碼等。代碼的優(yōu)化依據(jù)的是程序的等價變換規(guī)則。序號四元式1(*,id2,id3,T1)2(+,int1,T1,T2)3(*,id2,id3,T3)4(+,T2,T3,T4)5(:=,T4,_,id1)序號
四元式1(*,id2,id3,T1)2
(+,int1,T1,T2)3(+,T2,T1,id1)33第五階段:目標代碼的生成任務:把中間代碼(或經(jīng)優(yōu)化的中間代碼)變換成特定機器上的低級語言代碼。依賴于機器的硬件系統(tǒng)結構和機器指令的含義目標代碼可以是:絕對指令代碼、可重定位的指令代碼、匯編指令代碼序號
四元式1(*,id2,id3,T1)2
(+,int1,T1,T2)3(+,T2,T1,id1)(1)movAX,id2(2)mulAX,id3(3)movBX,AX(4)addAX,int1(5)addAX,BX(6)movid1,AX341.3編譯程序的結構
由左圖可以看出,詞法分析是實現(xiàn)編譯器的基礎,語法分析是實現(xiàn)編譯器的關鍵。因此按照這個順序來實現(xiàn)編譯器每一步的實現(xiàn)都依賴于一定的理論基礎。數(shù)學,尤其是離散數(shù)學是程序設計方法學的理論基礎351.3編譯程序的結構(續(xù))幾個概念符號表:登記源程序中出現(xiàn)的名字以及名字的各種屬性遍:對源程序或源程序的中間結果從頭到尾掃描一次,并作有關的加工處理,生成新的中間結果或目標程序。編譯前端:主要指與源語言有關,與目標語言無關的部分,通常包括詞法分析、語法分析、語義分析和中間代碼生成,與機器無關部分的代碼優(yōu)化編譯后端:指與目標機器有關的部分。如與機器有關的優(yōu)化、目標代碼生成36編譯階段的組合37為什么生成中間代碼381.3編譯程序的結構(續(xù))
(1)記號(token)
當掃描程序將字符收集到一個記號中時,它通常是以符號表示這個記號;這也就是說,作為一個枚舉數(shù)據(jù)類型的值來表示源程序的記號集。編譯程序中的主要數(shù)據(jù)結構:39編譯程序中的主要數(shù)據(jù)結構(2)語法樹(syntaxtree)如果分析程序確實生成了語法樹,它的構造通常為基于指針的標準結構,在進行分析時動態(tài)分配該結構,則整棵樹可作為一個指向根節(jié)點的單個變量保存。結構中的每一個節(jié)點都是一個記錄,它的域表示由分析程序和之后的語義分析程序收集的信息。40(3)符號表(symboltable)這個數(shù)據(jù)結構中的信息與標識符有關:函數(shù)、變量、常量以及數(shù)據(jù)類型。符號表幾乎與編譯器的所有階段交互:掃描程序、分析程序或將標識符輸入到表格中的語義分析程序;語義分析程序將增加數(shù)據(jù)類型和其他信息;優(yōu)化階段和代碼生成階段也將利用由符號表提供的信息選出恰當?shù)拇a。因為對符號表的訪問如此頻繁,所以插入、刪除和訪問操作都必須比常規(guī)操作更有效。盡管可以使用各種樹的結構,但雜湊表卻是達到這一要求的標準數(shù)據(jù)結構。有時在一個列表或棧中可使用若干個表格。編譯程序中的主要數(shù)據(jù)結構:41(4)常數(shù)表(literaltable)常數(shù)表的功能是存放在程序中用到的常量和字符串,因此快速插入和查找在常數(shù)表中也十分重要。但是,在其中卻無需刪除,這是因為它的數(shù)據(jù)全程應
溫馨提示
- 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è)技術學院《客艙服務操作與管理》2023-2024學年第一學期期末試卷
- 廣東建設職業(yè)技術學院《電子商務企業(yè)運營沙盤實訓》2023-2024學年第一學期期末試卷
- 廣東海洋大學《證券與投資》2023-2024學年第一學期期末試卷
- 廣東東軟學院《大數(shù)據(jù)處理與智能決策》2023-2024學年第一學期期末試卷
- 《課件工傷保險》課件
- SWOT分析培訓課件
- 《經(jīng)濟型連鎖酒店》課件
- 贛州師范高等??茖W?!督逃龜?shù)據(jù)挖掘理論與實踐》2023-2024學年第一學期期末試卷
- 贛東學院《生物工程進展與創(chuàng)業(yè)指導》2023-2024學年第一學期期末試卷
- 七年級科學上冊10.1.1身體降的標志學案無答案牛津上海版
- 血液科侵襲性真菌的治療
- 重點專科建設實施方案(四篇)
- 淺析巖溶地區(qū)工程地質(zhì)勘察手段及應用
- 2023-2024學年六年級上期末數(shù)學考試試卷附答案解析
- 羅伊模式個案護理
- 公益性崗位開發(fā)申請審批表
- 中國馬克思主義與當代知到章節(jié)答案智慧樹2023年西安交通大學
- 組織協(xié)同運用平衡計分卡創(chuàng)造企業(yè)合力
- 車輛剮蹭自愿和解協(xié)議書模板
- 兒科課件過敏性紫癜
- 學校安全事故應急處置流程圖
評論
0/150
提交評論