![編譯原理清華大學導論_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-6/6/50c224e5-7d2f-4e52-bf9b-b5f597670e71/50c224e5-7d2f-4e52-bf9b-b5f597670e711.gif)
![編譯原理清華大學導論_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-6/6/50c224e5-7d2f-4e52-bf9b-b5f597670e71/50c224e5-7d2f-4e52-bf9b-b5f597670e712.gif)
![編譯原理清華大學導論_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-6/6/50c224e5-7d2f-4e52-bf9b-b5f597670e71/50c224e5-7d2f-4e52-bf9b-b5f597670e713.gif)
![編譯原理清華大學導論_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-6/6/50c224e5-7d2f-4e52-bf9b-b5f597670e71/50c224e5-7d2f-4e52-bf9b-b5f597670e714.gif)
![編譯原理清華大學導論_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-6/6/50c224e5-7d2f-4e52-bf9b-b5f597670e71/50c224e5-7d2f-4e52-bf9b-b5f597670e715.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、課程簡介課程簡介 總學時:總學時: 72學時學時 4.5學分學分 課堂教學:課堂教學: 52學時學時 ; 課內(nèi)實驗:課內(nèi)實驗: 8學時學時課內(nèi)實踐:課內(nèi)實踐: 12學時學時 主講:林泓主講:林泓課程內(nèi)容課程內(nèi)容 v介紹編譯器構造的一般原理和基本實現(xiàn)方法介紹編譯器構造的一般原理和基本實現(xiàn)方法v理論知識:形式語言和自動機理論、語法制導翻譯的定理論知識:形式語言和自動機理論、語法制導翻譯的定義和屬性文法等義和屬性文法等v形式化描述技術形式化描述技術v對編譯原理和技術的宏觀理解,注意力無需分散到枝節(jié)對編譯原理和技術的宏觀理解,注意力無需分散到枝節(jié)算法,無需偏向于某種源語言或目標機器算法,無需偏向于某種
2、源語言或目標機器學習的意義學習的意義 v 對編程語言的設計和實現(xiàn)有深刻的理解,對和編程語言對編程語言的設計和實現(xiàn)有深刻的理解,對和編程語言有關的理論有所了解,對宏觀上把握編程語言來說,起有關的理論有所了解,對宏觀上把握編程語言來說,起一個奠基的作用。一個奠基的作用。v 從軟件工程看,編譯器是一個很好的實例,所介紹的概從軟件工程看,編譯器是一個很好的實例,所介紹的概念和技術能應用到一般的軟件設計之中。念和技術能應用到一般的軟件設計之中。v 大多數(shù)程序員同時是簡單語言的設計者,有助于提高對大多數(shù)程序員同時是簡單語言的設計者,有助于提高對這些語言的設計水平。這些語言的設計水平。v 在軟件逆向工程、軟
3、件的設計方法、程序理解和軟件安在軟件逆向工程、軟件的設計方法、程序理解和軟件安全等方面有著廣泛的應用。全等方面有著廣泛的應用。課程要求課程要求v講課進展較快,平時要復習并加深理解。講課進展較快,平時要復習并加深理解。v作業(yè)較多,要求獨立完成。作業(yè)較多,要求獨立完成。v實驗和課內(nèi)實踐,每次驗收檢查。實驗和課內(nèi)實踐,每次驗收檢查。v學期總評成績學期總評成績 = = 考試成績考試成績60% + 60% + 平時成績平時成績40%40% 平時成績平時成績40% = 40% = 作業(yè)實驗考勤作業(yè)實驗考勤30% + 30% + 課內(nèi)實踐課內(nèi)實踐10%10% 編譯系統(tǒng)是現(xiàn)代計算機系統(tǒng)的基本組成之一,編譯程序
4、編譯系統(tǒng)是現(xiàn)代計算機系統(tǒng)的基本組成之一,編譯程序構造的基本原理和技術不僅應用于編譯程序的設計,也廣泛構造的基本原理和技術不僅應用于編譯程序的設計,也廣泛應用于一般軟件的設計和實現(xiàn)。本課程是計算機類專業(yè)的一應用于一般軟件的設計和實現(xiàn)。本課程是計算機類專業(yè)的一門重要的核心專業(yè)課。門重要的核心專業(yè)課。先修課程:先修課程: 高級程序設計語言、匯編語言、高級程序設計語言、匯編語言、 離散數(shù)學、數(shù)據(jù)結構離散數(shù)學、數(shù)據(jù)結構學習要求:學習要求:不曠課,上課認真聽講,課上保持安靜;不曠課,上課認真聽講,課上保持安靜; 課后即時復習,認真完成作業(yè);課后即時復習,認真完成作業(yè); 實驗課內(nèi)實踐程序獨立設計及實現(xiàn)實驗課
5、內(nèi)實踐程序獨立設計及實現(xiàn) 。學習目標學習目標 通過本課程的學習,旨在使同學們掌握程序設計語言的形通過本課程的學習,旨在使同學們掌握程序設計語言的形式化描述和編譯的基本理論、原理和技術,并對編譯程序有較式化描述和編譯的基本理論、原理和技術,并對編譯程序有較為具體的認識。使同學們能運用所學過的基本知識、著手開發(fā)為具體的認識。使同學們能運用所學過的基本知識、著手開發(fā)系統(tǒng)程序,為今后的工作(理論研究和技術開發(fā))打下基礎。系統(tǒng)程序,為今后的工作(理論研究和技術開發(fā))打下基礎。具體為:具體為:(1 1)掌握編譯程序基本結構及構造的基本原理和技術;)掌握編譯程序基本結構及構造的基本原理和技術;(2 2)掌握
6、文法、形式語言及自動機的基本概念和在編譯程序構造中的應用;)掌握文法、形式語言及自動機的基本概念和在編譯程序構造中的應用;(3 3)掌握典型的幾種語法分析方法的基本原理和實現(xiàn)方法;)掌握典型的幾種語法分析方法的基本原理和實現(xiàn)方法;(4 4)掌握語法制導方法在語義分析中的應用和中間代碼生成方法;)掌握語法制導方法在語義分析中的應用和中間代碼生成方法;(5 5)掌握存儲分配的基本思想和實現(xiàn)方法;)掌握存儲分配的基本思想和實現(xiàn)方法;(6 6)掌握代碼優(yōu)化及代碼生成的方法。)掌握代碼優(yōu)化及代碼生成的方法。學習向導學習向導 編譯原理編譯原理課程是理論性較強的課程。其特點是概念多、課程是理論性較強的課程。
7、其特點是概念多、內(nèi)容抽象。尤其是文法、形式語言及自動機的概念是計算機專內(nèi)容抽象。尤其是文法、形式語言及自動機的概念是計算機專業(yè)的理論學習和研究的基礎。掌握這些基本理論、原理和技術,業(yè)的理論學習和研究的基礎。掌握這些基本理論、原理和技術,對于培養(yǎng)同學們對事物的抽象能力以及分析問題和解決問題的對于培養(yǎng)同學們對事物的抽象能力以及分析問題和解決問題的能力大有幫助。能力大有幫助。 編譯原理與方法對于深刻理解程序設計語言、深入了解程編譯原理與方法對于深刻理解程序設計語言、深入了解程序在計算機中的運行機制、掌握程序設計語言的翻譯方法起到序在計算機中的運行機制、掌握程序設計語言的翻譯方法起到不可替代的作用。同
8、時不可替代的作用。同時編譯原理編譯原理課程也是實踐性很強的課課程也是實踐性很強的課程,要求同學們在基本掌握了編譯理論和技術的基礎上,綜合程,要求同學們在基本掌握了編譯理論和技術的基礎上,綜合應用先修課程及本課程的知識,完成課程的實驗和課程設計。應用先修課程及本課程的知識,完成課程的實驗和課程設計。參考資料參考資料 教材:教材:11 編譯原理編譯原理(第三版)(第三版) 主編:王生原、董淵、張素琴、呂映芝主編:王生原、董淵、張素琴、呂映芝 出版社:清華大學出版社出版社:清華大學出版社 出版時間:出版時間:20152015年年參考書:參考書:11編譯原理編譯原理 主編:何炎祥主編:何炎祥 出版社:
9、華中理工大學出版社出版社:華中理工大學出版社 出版時間:出版時間:20102010年年1010月月22 程序設計語言編譯原理(第程序設計語言編譯原理(第3 3版)版) 主編:陳火旺、劉春林、譚慶平、趙克佳、劉越主編:陳火旺、劉春林、譚慶平、趙克佳、劉越 出版社:國防工業(yè)出版社出版社:國防工業(yè)出版社 出版時間:出版時間:2001220012年年8 8月月33編譯原理技術與工具(英文版)編譯原理技術與工具(英文版) Compilers:Principles,Techniques,and Compilers:Principles,Techniques,and ToolsTools 主編:主編:Alf
10、redAlfred V.Aho,RaviV.Aho,Ravi Sethi,JeffreySethi,Jeffrey D.UllmanD.Ullman 出版社:人民郵電出版社出版社:人民郵電出版社 出版時間:出版時間:20022002年年2 2月月 參考資料參考資料44編譯原理與技術編譯原理與技術(第二版)(第二版) 主編:陳意云主編:陳意云 出版社:中國科學技術大學出版社出版社:中國科學技術大學出版社 出版時間:出版時間:20022002年年1 1月月55編譯程序構造原理和實現(xiàn)技術編譯程序構造原理和實現(xiàn)技術 主編:金成植主編:金成植 出版社:高等教育出版社出版社:高等教育出版社 出版時間:出版
11、時間:20022002年年7 7月月66編譯原理及編譯程序構造編譯原理及編譯程序構造 主編:高仲儀、金茂忠主編:高仲儀、金茂忠 出版社:北京航空航天大學出版社出版社:北京航空航天大學出版社 出版時間:出版時間:20012001年年3 3月月77編譯原理編譯原理( (第第2 2版版) ) 主編:蔣立源主編:蔣立源, , 康慕寧康慕寧 出版社:西北工業(yè)大學出版社出版社:西北工業(yè)大學出版社 出版時間:出版時間:19991999年年4 4月月88編譯原理編譯原理 主編:張幸兒主編:張幸兒 出版社:科學出版社出版社:科學出版社 出版時間:出版時間:19991999年年4 4月月 第第1 1章章 引論引論
12、 本章主要內(nèi)容:本章主要內(nèi)容: v什么是編譯程序什么是編譯程序v編譯過程和編譯程序的結構編譯過程和編譯程序的結構v為什么要學習編譯程序為什么要學習編譯程序 本章的重點:本章的重點: 本章沒有難以理解的內(nèi)容本章沒有難以理解的內(nèi)容,主要主要是對編譯程序的功能和結構做一綜是對編譯程序的功能和結構做一綜合描述合描述1.1 1.1 什么叫編譯程序什么叫編譯程序 使用過現(xiàn)代計算機的人都知道,多數(shù)用戶是應用高級語言使用過現(xiàn)代計算機的人都知道,多數(shù)用戶是應用高級語言來實現(xiàn)他們所需要的計算的?,F(xiàn)代計算機系統(tǒng)一般都含有不止來實現(xiàn)他們所需要的計算的。現(xiàn)代計算機系統(tǒng)一般都含有不止一個的高級語言編譯程序,對有些高級語言
13、甚至配置了幾個不一個的高級語言編譯程序,對有些高級語言甚至配置了幾個不同性能的編譯程序,供用戶按不同需要進行選擇。同性能的編譯程序,供用戶按不同需要進行選擇。 要在計算機上執(zhí)行用高級語言(或匯編語言)編寫的程序,要在計算機上執(zhí)行用高級語言(或匯編語言)編寫的程序,必須通過特定的途徑來進行,也就是要通過翻譯程序把用高級必須通過特定的途徑來進行,也就是要通過翻譯程序把用高級語言(或匯編語言)編寫的程序語言(或匯編語言)編寫的程序翻譯翻譯成為機器語言構成的程序,成為機器語言構成的程序,計算機才能執(zhí)行。計算機才能執(zhí)行。 在計算機上執(zhí)行一個高級語言程序一般要分為兩步:在計算機上執(zhí)行一個高級語言程序一般要
14、分為兩步: 第一步,用一個編譯程序把高級語言翻譯成機器語言程序;第一步,用一個編譯程序把高級語言翻譯成機器語言程序; 第二步,運行所得的機器語言程序求得計算結果。第二步,運行所得的機器語言程序求得計算結果。 (1 1)翻譯程序()翻譯程序(TranslatorTranslator) 通常所說的翻譯程序是指這樣的一個程序,它能夠把某通常所說的翻譯程序是指這樣的一個程序,它能夠把某一種語言程序(稱為一種語言程序(稱為源語言程序或源程序源語言程序或源程序)轉換成另一種語)轉換成另一種語言程序(稱為言程序(稱為目標語言程序或目標程序目標語言程序或目標程序),而后者與前者在),而后者與前者在邏輯上是等價
15、的。邏輯上是等價的。 源程序源程序(source program)翻譯程序翻譯程序目標程序目標程序(target program)輸入輸入輸出輸出圖圖1.1 翻譯程序翻譯程序 翻譯程序根據(jù)所處理的對象和實現(xiàn)的途徑不同又分為:翻譯程序根據(jù)所處理的對象和實現(xiàn)的途徑不同又分為:匯編程序、編譯程序和解釋程序。匯編程序、編譯程序和解釋程序。 (2 2). . 匯編程序(匯編程序(AssemblerAssembler) 如果源語言是某種匯編語言,而目標語言是某種計算機的機如果源語言是某種匯編語言,而目標語言是某種計算機的機器語言,這樣的一個翻譯程序就稱為匯編程序。器語言,這樣的一個翻譯程序就稱為匯編程序。
16、源程序源程序(匯編語言)(匯編語言)翻譯程序翻譯程序(匯編程序)(匯編程序)目標程序目標程序(機器語言)(機器語言)輸入輸入輸出輸出圖圖1.2 匯編程序匯編程序(3 3). . 編譯程序(編譯程序(CompilerCompiler) 如果源語言是某種高級語言,而目標語言是某種低級語言如果源語言是某種高級語言,而目標語言是某種低級語言(匯編語言或機器語言),這樣的一個翻譯程序就稱為編譯程(匯編語言或機器語言),這樣的一個翻譯程序就稱為編譯程序。序。 源程序源程序(高級語言)(高級語言)翻譯程序翻譯程序(編譯程序)(編譯程序)目標程序目標程序(低級語言)(低級語言)圖圖1.3 編譯程序編譯程序輸入
17、輸入輸出輸出(4 4). . 解釋程序(解釋程序(Interpreter) 這是另外一種類型的翻譯程序,在翻譯過程它按照高級語這是另外一種類型的翻譯程序,在翻譯過程它按照高級語言源程序在計算機上執(zhí)行的動態(tài)順序對源程序的語句逐條翻譯言源程序在計算機上執(zhí)行的動態(tài)順序對源程序的語句逐條翻譯(解釋),邊解釋邊執(zhí)行直至結束,它不產(chǎn)生目標程序,它的(解釋),邊解釋邊執(zhí)行直至結束,它不產(chǎn)生目標程序,它的工作結果就是源程序的執(zhí)行結果,這樣的一個翻譯程序就稱為工作結果就是源程序的執(zhí)行結果,這樣的一個翻譯程序就稱為解釋程序。解釋程序。 源程序源程序(高級語言)(高級語言)翻譯程序翻譯程序(解釋程序)(解釋程序)計
18、算結果計算結果輸入輸入輸出輸出圖圖1.4 解釋程序解釋程序初始數(shù)據(jù)初始數(shù)據(jù)根據(jù)不同的用途,編譯程序可進一步分類根據(jù)不同的用途,編譯程序可進一步分類:(1)診斷編譯程序()診斷編譯程序(Diagnostic Compiler):): 專門用于幫助程序開發(fā)和調(diào)試的編譯程序。專門用于幫助程序開發(fā)和調(diào)試的編譯程序。(2)優(yōu)化編譯程序()優(yōu)化編譯程序(Optimizing Compiler):): 著重于提高目標代碼效率的編譯程序。著重于提高目標代碼效率的編譯程序。(3)交叉編譯程序)交叉編譯程序(Cross Compiler): 如果一個編譯程序產(chǎn)生不同于其宿主機的機器代碼。如果一個編譯程序產(chǎn)生不同于
19、其宿主機的機器代碼。(4)可變目標編譯程序(可變目標編譯程序(Retargetable Compiler):): 不需重寫編譯程序中與機器無關的部分就能改變目標機。不需重寫編譯程序中與機器無關的部分就能改變目標機。 宿主機宿主機(host machine):):運行編譯程序的計算機。運行編譯程序的計算機。目標機目標機(object machine) :運行編譯程序所產(chǎn)生目標代碼的計算機。運行編譯程序所產(chǎn)生目標代碼的計算機。1.2 1.2 編譯過程概述編譯過程概述 編譯程序的工作,從輸入源程序開始到輸出目標程序為止的編譯程序的工作,從輸入源程序開始到輸出目標程序為止的整個過程,是非常復雜的。整個
20、過程,是非常復雜的。一段英文翻譯為中文時,通常需經(jīng)下列步驟:一段英文翻譯為中文時,通常需經(jīng)下列步驟:(1)識別出句子中的一個個單詞;)識別出句子中的一個個單詞;(2)分析句子的語法結構;)分析句子的語法結構;(3)根據(jù)句子的含義進行初步翻譯;)根據(jù)句子的含義進行初步翻譯;(4)對譯文進行修飾;)對譯文進行修飾;(5)寫出最后的譯文。)寫出最后的譯文。 類似地,編譯程序的工作過程一般也可以劃分為五個階段:類似地,編譯程序的工作過程一般也可以劃分為五個階段:詞法分析、語法分析、語義分析與中間代碼產(chǎn)生、優(yōu)化、目標詞法分析、語法分析、語義分析與中間代碼產(chǎn)生、優(yōu)化、目標代碼生成。代碼生成。 第一階段第一
21、階段: : 詞法分析詞法分析 (Lexical analysisLexical analysis)詞法分析的任務:詞法分析的任務: 輸入源程序,對構成源程序的字符串進行掃描和分解,輸入源程序,對構成源程序的字符串進行掃描和分解,識別出一個個的單詞。識別出一個個的單詞。 保留字(保留字(beginbegin、endend、ifif、forfor、whilewhile等)、等)、 標識符(標識符(x1x1、s s等變量名)、等變量名)、 常數(shù)常數(shù)(3.14(3.14、100100等等) )、 算符(算符(+ +、- -、andand、oror等)、等)、 界符(標點符號、左右括號等)。界符(標點符
22、號、左右括號等)。 例如,對于例如,對于PascalPascal的循環(huán)語句:的循環(huán)語句: for I for I:1 to 100 do1 to 100 do詞法分析的結果是識別出如下的單詞符號:詞法分析的結果是識別出如下的單詞符號: 保留字保留字 forfor 標識符標識符 I I 賦值號:賦值號: := = 整常數(shù)整常數(shù) 1 1 保留字保留字 toto 整常數(shù)整常數(shù) 100100 保留字保留字 dodo 單詞符號是語言的基本組成成分,是人們理單詞符號是語言的基本組成成分,是人們理解和編寫程序的基本要素。識別和理解這些要素解和編寫程序的基本要素。識別和理解這些要素無疑也是翻譯的基礎。無疑也是
23、翻譯的基礎。 如同將英文翻譯成中文的情形一樣,如果你如同將英文翻譯成中文的情形一樣,如果你對英語單詞不理解,那就談不上進行正確的翻譯。對英語單詞不理解,那就談不上進行正確的翻譯。 在詞法分析階段的工作中所依循的是語言在詞法分析階段的工作中所依循的是語言的詞法規(guī)則(或稱構詞規(guī)則)。描述詞法規(guī)則的的詞法規(guī)則(或稱構詞規(guī)則)。描述詞法規(guī)則的有效工具是有效工具是正規(guī)式和有限自動機。正規(guī)式和有限自動機。第二階段,語法分析第二階段,語法分析(Syntax Analysis)(Syntax Analysis) 語法分析的任務是:語法分析的任務是: 在詞法分析的基礎上,根據(jù)語言的語法規(guī)則,把單詞符號在詞法分析
24、的基礎上,根據(jù)語言的語法規(guī)則,把單詞符號串分解成各類語法單位(語法范疇),如串分解成各類語法單位(語法范疇),如“短語短語”、“子句子句”、“句子句子”(“語句語句”)、)、“程序段程序段”和和“程序程序”等。等。通過語法通過語法分析,確定整個輸入串是否構成語法上正確的分析,確定整個輸入串是否構成語法上正確的“程序程序”。 語法分析所依循的是語言的語法分析所依循的是語言的語法規(guī)則語法規(guī)則。語法規(guī)則通常用上。語法規(guī)則通常用上下文無關文法描述。下文無關文法描述。 詞法分析是一種線性分析,而語法分析是一種層次結構分析。詞法分析是一種線性分析,而語法分析是一種層次結構分析。例如,在很多語言中,符號串例
25、如,在很多語言中,符號串 z:=X十十0.618*Y代表一個代表一個“賦值語句賦值語句”,而其中的,而其中的 X0.618*Y代表一個代表一個“算術算術表達式表達式”。因而,語法分析的任務就是識別。因而,語法分析的任務就是識別 X0.618*Y為算術為算術表達式,同時,識別上述整個符號串屬于賦值語句這個范疇。表達式,同時,識別上述整個符號串屬于賦值語句這個范疇。 第三階段,語義分析與中間代碼產(chǎn)生第三階段,語義分析與中間代碼產(chǎn)生(Semantic (Semantic Analysis and Intermediate Generator)Analysis and Intermediate Gen
26、erator) 此階段的任務是:此階段的任務是: 對語法分析所識別出的各類語法范疇,分析其含義,并進對語法分析所識別出的各類語法范疇,分析其含義,并進行初步翻譯(產(chǎn)生中間代碼)。行初步翻譯(產(chǎn)生中間代碼)。 中間代碼中間代碼是一種獨立于具體硬件的記號系統(tǒng)。是一種獨立于具體硬件的記號系統(tǒng)。 常用的中間代碼:三地址碼,四元式,三元式、間接三常用的中間代碼:三地址碼,四元式,三元式、間接三元式、逆波蘭式,樹形表示等。元式、逆波蘭式,樹形表示等。 所謂所謂“中間代碼中間代碼”是一種含義明確、便于處理的記號系統(tǒng),它通常是一種含義明確、便于處理的記號系統(tǒng),它通常獨立于具體的硬件。這種記號系統(tǒng)或者與現(xiàn)代計算
27、機的指令形式有某種獨立于具體的硬件。這種記號系統(tǒng)或者與現(xiàn)代計算機的指令形式有某種程度的接近,或者能夠比較容易地把它變換成現(xiàn)代計算機的機器指令。程度的接近,或者能夠比較容易地把它變換成現(xiàn)代計算機的機器指令。 四元式的形式是:四元式的形式是: ( 算符算符 左操作數(shù)左操作數(shù) 右操作數(shù)右操作數(shù) 結果)結果) 它的意義是:對它的意義是:對“左、右操作數(shù)左、右操作數(shù)”進行某種運算(由進行某種運算(由“算符算符”指明),把運算所得的值作為指明),把運算所得的值作為“結果結果”保留下來。保留下來。 例如例如 賦值語句賦值語句 Z:(:(X0.418)*YW 翻譯為四元式序列:翻譯為四元式序列: 序號序號 算
28、符算符 左操作數(shù)左操作數(shù) 右操作數(shù)右操作數(shù) 結果結果 1 十十 X 0.418 T1 2 * T1 Y T2 3 T2 W Z第四階段,優(yōu)化第四階段,優(yōu)化 (Optimization)(Optimization)優(yōu)化的任務優(yōu)化的任務: : 對產(chǎn)生的中間代碼進行加工變換,以期在最后階段能產(chǎn)生出更為高效對產(chǎn)生的中間代碼進行加工變換,以期在最后階段能產(chǎn)生出更為高效(省時間和空間)的目標代碼。(省時間和空間)的目標代碼。 優(yōu)化的主要方面有:優(yōu)化的主要方面有: 公共子表達式提取、循環(huán)優(yōu)化、刪除無用代碼等等。有時,為了便于公共子表達式提取、循環(huán)優(yōu)化、刪除無用代碼等等。有時,為了便于“并行運算并行運算”,還
29、可以對代碼進行并行化處理。,還可以對代碼進行并行化處理。優(yōu)化所依循的原則優(yōu)化所依循的原則: : 程序的等價變換規(guī)則。程序的等價變換規(guī)則。例如,有程序片斷例如,有程序片斷 for K:1 to 100 dobegin M:=I+10*K N:=J+10*Kend其中間代碼為:其中間代碼為: 序號序號OPARG1ARG2RESULT注注 解解(1)(2)(3)(4)(5)(6)(7)(8)(9):=j*+*+j 110010I10JK KKT1KT21 K(9)T1MT2NK(2) K:1若若100K轉至第轉至第(9)個四元式個四元式T1 :二二10*K; T1為臨時變量為臨時變量M :IT1T2
30、 :10*k; T2為臨時變量為臨時變量N :J十十T2K :K十十1轉至第(轉至第(2)個四元式)個四元式 轉換成如下的等價代碼:轉換成如下的等價代碼: 序號序號OPARG1ARG2RESUL注注 解解(1)(2)(3)(4)(5)(6)(7)(8)(9):=:=:=j+j IJ1100MNK K10101MNK(9)MNK(4) M:IN:JK:lif(100k)goto(9)M:M10N:N十十 10K:Klgoto(4) 優(yōu)化后目標程序的執(zhí)行效率提高很多。因為,對于前者,在循環(huán)中需優(yōu)化后目標程序的執(zhí)行效率提高很多。因為,對于前者,在循環(huán)中需做做300次加法和次加法和200乘法乘法;對于
31、后者,在循環(huán)中只需做;對于后者,在循環(huán)中只需做300次加法。次加法。第第五階段,目標代碼生成五階段,目標代碼生成(Code Generation)(Code Generation)這一階段的任務是:這一階段的任務是: 把中間代碼(或經(jīng)優(yōu)化處理之后)變換成特定機器上的低級語言代把中間代碼(或經(jīng)優(yōu)化處理之后)變換成特定機器上的低級語言代碼。碼。 例例 (*, id3, 10.0, t1) (+, id2, , t1, id1 )目標代碼:目標代碼: (1)MOV id3, R2 (2)MUL #10.0, R2 (3)MOV id2, R1 (4)ADD R1, R2 (5)MOV R1, id1
32、 上述編譯過程的五個階段是一種典型的分法。上述編譯過程的五個階段是一種典型的分法。 事實上,并非所有編譯程序都分成這五階段。事實上,并非所有編譯程序都分成這五階段。 有些編譯程序對優(yōu)化沒有什么要求,優(yōu)化階段就可省去。有些編譯程序對優(yōu)化沒有什么要求,優(yōu)化階段就可省去。在某些情況下,為了加快編譯速度,中間代碼產(chǎn)生階段也可以在某些情況下,為了加快編譯速度,中間代碼產(chǎn)生階段也可以去掉。去掉。 有些最簡單的編譯程序是在語法分析的同時產(chǎn)生目標代碼。有些最簡單的編譯程序是在語法分析的同時產(chǎn)生目標代碼。但是,多數(shù)實用編譯程序的工作過程大致都像上面所說的那五但是,多數(shù)實用編譯程序的工作過程大致都像上面所說的那五
33、個階段。個階段。1.3 1.3 編譯程序的結構編譯程序的結構 1.3.1 1.3.1 編譯程序總框編譯程序總框 上述編譯過程的五個階段是編譯程序工作時的動態(tài)特征。編譯程序的上述編譯過程的五個階段是編譯程序工作時的動態(tài)特征。編譯程序的結構可以按照這五階段的任務分模塊進行設計。結構可以按照這五階段的任務分模塊進行設計。圖圖1.5 編譯程序總框編譯程序總框詞法分析器詞法分析器語法分析器語法分析器語義分析與中間代碼生成器語義分析與中間代碼生成器中間代碼優(yōu)化器中間代碼優(yōu)化器目標代碼生成器目標代碼生成器表表格格管管理理出出錯錯處處理理目標代碼程序目標代碼程序源程序源程序單詞符號串單詞符號串語法單位語法單位
34、中間代碼串中間代碼串中間代碼串中間代碼串 (1)詞法分析器)詞法分析器(lexical analyzer),也稱掃描器:,也稱掃描器: 輸入源程序,進行詞法分析,輸出單詞符號。輸入源程序,進行詞法分析,輸出單詞符號。 (2)語法分析器)語法分析器(syntax analyzer),簡稱分析器:,簡稱分析器: 對單詞符號串進行語法分析(根據(jù)語法規(guī)則進行推導或對單詞符號串進行語法分析(根據(jù)語法規(guī)則進行推導或歸約),識別出各類語法單位,最終判斷輸入串是否構成語法上歸約),識別出各類語法單位,最終判斷輸入串是否構成語法上正確的正確的“程序程序”。 (3)語義分析與中間代碼產(chǎn)生器)語義分析與中間代碼產(chǎn)生
35、器(semantic analyzer and intermediate code generator): 按照語義規(guī)則對語法分析器歸約出(或推導出)的語法按照語義規(guī)則對語法分析器歸約出(或推導出)的語法單位進行語義分析并把它們翻譯成一定形式的中間代碼。單位進行語義分析并把它們翻譯成一定形式的中間代碼。 有的編譯程序在識別出各類語法單位后,構造并輸出一棵表示語法有的編譯程序在識別出各類語法單位后,構造并輸出一棵表示語法結構的語法樹,然后,根據(jù)語法樹進行語義分析和中間代碼產(chǎn)生。結構的語法樹,然后,根據(jù)語法樹進行語義分析和中間代碼產(chǎn)生。 (4)代碼優(yōu)化器)代碼優(yōu)化器(code optimizer)
36、: 對中間代碼進行優(yōu)化處理,以便得到高質量的目標代對中間代碼進行優(yōu)化處理,以便得到高質量的目標代碼。碼。 (5)代碼生成器)代碼生成器(code generator): 將中間代碼翻譯成等價的目標程序。將中間代碼翻譯成等價的目標程序。 除了上述五個功能模塊外,一個完整的編譯程序還應包括除了上述五個功能模塊外,一個完整的編譯程序還應包括“表格管理表格管理”和和“出錯處理出錯處理”兩部分。兩部分。1.3.2 1.3.2 表格管理表格管理 (symbol-table manager)(symbol-table manager) 編譯程序在工作過程中需要保存一系列的表格,以登記源程序的各類編譯程序在工
37、作過程中需要保存一系列的表格,以登記源程序的各類信息和編譯各階段的進展狀況。信息和編譯各階段的進展狀況。 合理地設計和使用表格是編譯程序構造的一個重要問題。合理地設計和使用表格是編譯程序構造的一個重要問題。 在編譯程序使用的表格中,最重要的是符號表。它用來登記源程序中在編譯程序使用的表格中,最重要的是符號表。它用來登記源程序中出現(xiàn)的每個名字以及名字的各種屬性。出現(xiàn)的每個名字以及名字的各種屬性。 例如,一個名字是常量名、變量名,還是過程名等等;如果是變量名,例如,一個名字是常量名、變量名,還是過程名等等;如果是變量名,它的類型是什么、所占內(nèi)存是多大、地址是什么等等。它的類型是什么、所占內(nèi)存是多大
38、、地址是什么等等。 通常,編譯程序在處理到名字的定義性出現(xiàn)時,要把名字的各種屬性通常,編譯程序在處理到名字的定義性出現(xiàn)時,要把名字的各種屬性填入到符號表中;當處理到名字的使用性出現(xiàn)時,要對名字的屬性進行查填入到符號表中;當處理到名字的使用性出現(xiàn)時,要對名字的屬性進行查證。證。 當掃描器識別出一個名字(標識符)后,它把該名字填入到符號表中。當掃描器識別出一個名字(標識符)后,它把該名字填入到符號表中。但這時不能完全確定名字的屬性,它的各種屬性要在后續(xù)的各階段才能填但這時不能完全確定名字的屬性,它的各種屬性要在后續(xù)的各階段才能填入。入。 例如,名字的類型等要在語義分析時才能確定,而名字的地址可能要
39、例如,名字的類型等要在語義分析時才能確定,而名字的地址可能要到目標代碼生成才能確定。到目標代碼生成才能確定。由此可見,編譯各階段都涉及到構造、查找或更新有關的表格。由此可見,編譯各階段都涉及到構造、查找或更新有關的表格。 1.3.3 1.3.3 出錯處理出錯處理(error handler) (error handler) 一個編譯程序不僅應能對書寫正確的程序進行翻譯,而且應能對出現(xiàn)一個編譯程序不僅應能對書寫正確的程序進行翻譯,而且應能對出現(xiàn)在源程序中的錯誤進行處理。在源程序中的錯誤進行處理。 如果源程序有錯誤,編譯程序應設法發(fā)現(xiàn)錯誤,把有關錯誤信息報告如果源程序有錯誤,編譯程序應設法發(fā)現(xiàn)錯誤
40、,把有關錯誤信息報告給用戶。這部分工作是由專門的一組程序(叫做出錯處理程序)完成的。給用戶。這部分工作是由專門的一組程序(叫做出錯處理程序)完成的。 一個好的編譯程序應能最大限度地發(fā)現(xiàn)源程序中的各種錯誤,準確地一個好的編譯程序應能最大限度地發(fā)現(xiàn)源程序中的各種錯誤,準確地指出錯誤的性質和發(fā)生錯誤的地點,并且能將錯誤所造成的影響限制在盡指出錯誤的性質和發(fā)生錯誤的地點,并且能將錯誤所造成的影響限制在盡可能小的范圍內(nèi),使得源程序的其余部分能繼續(xù)被編譯下去,以便進一步可能小的范圍內(nèi),使得源程序的其余部分能繼續(xù)被編譯下去,以便進一步發(fā)現(xiàn)其它可能的錯誤。發(fā)現(xiàn)其它可能的錯誤。 如果不僅能夠發(fā)現(xiàn)錯誤,而且還能自
41、動校正錯誤,那當然就更好了。如果不僅能夠發(fā)現(xiàn)錯誤,而且還能自動校正錯誤,那當然就更好了。但是,自動校正錯誤的代價是非常高的。但是,自動校正錯誤的代價是非常高的。 編譯過程的每一階段都可能檢測出錯誤,其中,絕大多數(shù)編譯過程的每一階段都可能檢測出錯誤,其中,絕大多數(shù)錯誤可以在編譯的前三階段檢測出來。錯誤可以在編譯的前三階段檢測出來。 源程序中的錯誤通常分為語法錯誤和語義錯誤兩大類。源程序中的錯誤通常分為語法錯誤和語義錯誤兩大類。 語法錯誤語法錯誤是指源程序中不符合語法(或詞法)規(guī)則的錯誤,是指源程序中不符合語法(或詞法)規(guī)則的錯誤,它們可在詞法分析或語法分析時檢測出來。它們可在詞法分析或語法分析時
42、檢測出來。 例如,詞法分析階段能夠檢測出例如,詞法分析階段能夠檢測出“非法字符非法字符”之類的錯誤;之類的錯誤;語法分析階段能夠檢測出諸如語法分析階段能夠檢測出諸如“括號不匹配括號不匹配”、“缺少;缺少;”之之類的錯誤。類的錯誤。 語義錯誤語義錯誤是指源程序中不符合語義規(guī)則的錯誤,這些錯誤是指源程序中不符合語義規(guī)則的錯誤,這些錯誤一般在語義分析時檢測出來,有的語義錯誤要在運行時才能檢一般在語義分析時檢測出來,有的語義錯誤要在運行時才能檢測出來。測出來。 語義錯誤通常包括:說明錯誤、作用域錯誤、類型不一致語義錯誤通常包括:說明錯誤、作用域錯誤、類型不一致等等。關于錯誤檢測和處理方法,我們將穿插在
43、有關章節(jié)介紹。等等。關于錯誤檢測和處理方法,我們將穿插在有關章節(jié)介紹。1.3.4 1.3.4 遍遍 (Pass(Pass) 前面介紹的編譯過程的五個階段僅僅是邏輯功能上的一種劃前面介紹的編譯過程的五個階段僅僅是邏輯功能上的一種劃分。具體實現(xiàn)時,受不同源語言、設計要求、使用對象和計算機分。具體實現(xiàn)時,受不同源語言、設計要求、使用對象和計算機條件(如主存容量)的限制,往往將編譯程序組織為若干條件(如主存容量)的限制,往往將編譯程序組織為若干遍遍(Pass)。 所謂所謂“遍遍”就是對源程序或源程序的中間結果從頭到尾掃就是對源程序或源程序的中間結果從頭到尾掃描一次,并作有關的加工處理,生成新的中間結果
44、或目標程序。描一次,并作有關的加工處理,生成新的中間結果或目標程序。 通常,每遍的工作由從外存上獲得的前一遍的中間結果開始通常,每遍的工作由從外存上獲得的前一遍的中間結果開始(對于第一遍而言,從外存上獲得源程序),完成它所含的有關(對于第一遍而言,從外存上獲得源程序),完成它所含的有關工作之后,再把結果記錄于外存。工作之后,再把結果記錄于外存。 當一遍中包含若干階段時,各階段的工作是穿插進行的。當一遍中包含若干階段時,各階段的工作是穿插進行的。例如,我們可以把詞法分析、語法分析及語義分析與中間代碼例如,我們可以把詞法分析、語法分析及語義分析與中間代碼產(chǎn)生這三階段安排成一遍。產(chǎn)生這三階段安排成一
45、遍。 這時,語法分析器處于核心位置,當它在識別語法結構而這時,語法分析器處于核心位置,當它在識別語法結構而需要下一單詞符號時,它就調(diào)用詞法分析器,一旦識別出一個需要下一單詞符號時,它就調(diào)用詞法分析器,一旦識別出一個語法單位時,它就調(diào)用中間代碼產(chǎn)生器,完成相應的語義分析語法單位時,它就調(diào)用中間代碼產(chǎn)生器,完成相應的語義分析并產(chǎn)生相應的中間代碼。并產(chǎn)生相應的中間代碼。 一個編譯程序究竟應分成幾遍,如何劃分,是與源語言、一個編譯程序究竟應分成幾遍,如何劃分,是與源語言、設計要求。硬件設備等諸因素有關的,因此難于統(tǒng)一劃定。設計要求。硬件設備等諸因素有關的,因此難于統(tǒng)一劃定。 遍數(shù)多一點有個好處,即整個
46、編譯程序的邏輯結構可能清遍數(shù)多一點有個好處,即整個編譯程序的邏輯結構可能清晰一點。但遍數(shù)多勢必增加輸入輸出所消耗的時間。因此,晰一點。但遍數(shù)多勢必增加輸入輸出所消耗的時間。因此,在主存可能的前提下,一般還是遍數(shù)盡可能少一點為好。應當在主存可能的前提下,一般還是遍數(shù)盡可能少一點為好。應當注意的是,并不是每種語言都可以用單遍編譯程序實現(xiàn)。注意的是,并不是每種語言都可以用單遍編譯程序實現(xiàn)。 1.3.5 1.3.5 編譯前端與后端編譯前端與后端 前端前端主要由與源語言有關但與目標機無關的那些部分組成。主要由與源語言有關但與目標機無關的那些部分組成。這些部分通常包括詞法分析、語法分析、語義分析與中間代碼
47、這些部分通常包括詞法分析、語法分析、語義分析與中間代碼產(chǎn)生,有的代碼優(yōu)化工作也可包括在前端。產(chǎn)生,有的代碼優(yōu)化工作也可包括在前端。 后端后端包括編譯程序中與目標機有關的那些部分,如與目標包括編譯程序中與目標機有關的那些部分,如與目標機有關的代碼優(yōu)化和目標代碼生成等。通常,后端不依賴于源機有關的代碼優(yōu)化和目標代碼生成等。通常,后端不依賴于源語言而僅僅依賴于中間語言。語言而僅僅依賴于中間語言。 可以取編譯程序的前端,改寫其后端以生成不同目標機上可以取編譯程序的前端,改寫其后端以生成不同目標機上的相同語言的編譯程序。如果后端的設計是經(jīng)過精心考慮的,的相同語言的編譯程序。如果后端的設計是經(jīng)過精心考慮的
48、,那么后端的改寫將用不了太大工作量,這樣就可實現(xiàn)編譯程序那么后端的改寫將用不了太大工作量,這樣就可實現(xiàn)編譯程序的目標機改變。也可以設想將幾種源語言編譯成相同的中間語的目標機改變。也可以設想將幾種源語言編譯成相同的中間語言,然后為不同的前端配上相同的后端,這樣就可為同一臺機言,然后為不同的前端配上相同的后端,這樣就可為同一臺機器生成不同語言的編譯程序。然而,由于不同語言存在某些微器生成不同語言的編譯程序。然而,由于不同語言存在某些微妙的區(qū)別,因此在這方面所取得的成果還非常有限。妙的區(qū)別,因此在這方面所取得的成果還非常有限。 為了實現(xiàn)編譯程序可改變目標機,通常需要有一種定義良為了實現(xiàn)編譯程序可改變
49、目標機,通常需要有一種定義良好的中間語言支持。好的中間語言支持。 著名的著名的AdaAda程序設計環(huán)境程序設計環(huán)境APSEAPSE中,使用的是一種稱為中,使用的是一種稱為DianaDiana的樹形結構的中間語言。一個的樹形結構的中間語言。一個AdaAda源程序通過前端編譯轉換為源程序通過前端編譯轉換為DianaDiana中間代碼,由編譯后端把中間代碼,由編譯后端把DianaDiana中間代碼轉換為目標代碼。中間代碼轉換為目標代碼。編譯前端與不同的編譯后端以編譯前端與不同的編譯后端以DianaDiana為界面,實現(xiàn)編譯程序的為界面,實現(xiàn)編譯程序的目標機改變。目標機改變。 在在JavaJava語言
50、環(huán)境中,為了使編譯后的程序從一個平臺移到語言環(huán)境中,為了使編譯后的程序從一個平臺移到另一個平臺執(zhí)行,另一個平臺執(zhí)行,JavaJava定義一種虛擬機代碼定義一種虛擬機代碼BytecodeBytecode。 只要實際使用的操作平臺上實現(xiàn)了執(zhí)行只要實際使用的操作平臺上實現(xiàn)了執(zhí)行BytecodeBytecode的的JavaJava解解釋器,這個操作平臺就可以執(zhí)行各種釋器,這個操作平臺就可以執(zhí)行各種JavaJava程序。這就是所謂程序。這就是所謂JavaJava語言的操作平臺無關性。語言的操作平臺無關性。 1.4 1.4 編譯程序與程序設計環(huán)境編譯程序與程序設計環(huán)境 編譯程序無疑是實現(xiàn)高級語言的一個最重
51、要的工具。但支持程序設計編譯程序無疑是實現(xiàn)高級語言的一個最重要的工具。但支持程序設計人員進行程序開發(fā)通常還需要一些其它的工具如編輯程序;連接程序;調(diào)人員進行程序開發(fā)通常還需要一些其它的工具如編輯程序;連接程序;調(diào)試工具等。編譯程序與這些程序設計工具一起構成所謂的程序設計環(huán)境。試工具等。編譯程序與這些程序設計工具一起構成所謂的程序設計環(huán)境。 在高級語言發(fā)展的早期,這些程序設計工具往往是獨立的,缺乏整體在高級語言發(fā)展的早期,這些程序設計工具往往是獨立的,缺乏整體性,而且也缺乏對軟件開發(fā)全生命周期的支持。隨著軟件技術的不斷發(fā)展,性,而且也缺乏對軟件開發(fā)全生命周期的支持。隨著軟件技術的不斷發(fā)展,現(xiàn)在人
52、們越來越傾向于構造集成化的程序設計環(huán)境?,F(xiàn)在人們越來越傾向于構造集成化的程序設計環(huán)境。 一個集成化的程序設計環(huán)境的特點是,它將相互獨立的程序設計工具一個集成化的程序設計環(huán)境的特點是,它將相互獨立的程序設計工具集成起來,以便為程序員提供完整的、一體化的支持,從而進一步提高程集成起來,以便為程序員提供完整的、一體化的支持,從而進一步提高程序開發(fā)效率,改善程序質量。在一個好的集成化程序設計環(huán)境中,不僅包序開發(fā)效率,改善程序質量。在一個好的集成化程序設計環(huán)境中,不僅包含豐富的程序設計工具,而且還支持程序設計方法學,支持程序開發(fā)的全含豐富的程序設計工具,而且還支持程序設計方法學,支持程序開發(fā)的全生命周期
53、。有代表性的集成化程序設計環(huán)境有生命周期。有代表性的集成化程序設計環(huán)境有Ada語言程序設計環(huán)境語言程序設計環(huán)境APSE、LISP語言程序設計環(huán)境語言程序設計環(huán)境INTERLISP等。廣大讀者所熟悉的等。廣大讀者所熟悉的Turbo Pascal、Turbo C、Visual C+等語言環(huán)境也都可認為是集成化的程序設計環(huán)境。等語言環(huán)境也都可認為是集成化的程序設計環(huán)境。 下面以下面以Ada語言的程序設計環(huán)境語言的程序設計環(huán)境APSE為例,介紹程序設計環(huán)境的基本為例,介紹程序設計環(huán)境的基本構成和主要工具。構成和主要工具。 APSE是一個分層的程序設計環(huán)境,如圖是一個分層的程序設計環(huán)境,如圖1.6所示。
54、所示。 圖圖1.6 Ada程序設計環(huán)境程序設計環(huán)境 最內(nèi)層(第最內(nèi)層(第0層)是宿主計算機系統(tǒng),它包括硬件、宿主操作系統(tǒng)和其層)是宿主計算機系統(tǒng),它包括硬件、宿主操作系統(tǒng)和其它支持軟件。第一層是核心它支持軟件。第一層是核心APSE(KAPSE)。它包括環(huán)境數(shù)據(jù)庫、通信及運。它包括環(huán)境數(shù)據(jù)庫、通信及運行時支撐功能等。行時支撐功能等。 第二層,最小第二層,最小APSE(MAPSE)。它包括了。它包括了Ada程序開發(fā)及維護的基本工程序開發(fā)及維護的基本工具,這些工具包括編譯程序、編輯程序、連接程序、調(diào)試程序、命令解釋程具,這些工具包括編譯程序、編輯程序、連接程序、調(diào)試程序、命令解釋程序、配置管理程序、
55、美化打印程序、靜態(tài)分析工具,動態(tài)分析工具等等。序、配置管理程序、美化打印程序、靜態(tài)分析工具,動態(tài)分析工具等等。 第三層,第三層,APSE。在。在MAPSE外面再加上更廣泛的工具就構成了完整的外面再加上更廣泛的工具就構成了完整的APSE。對這一層沒有精確規(guī)定工具的類型,它通??梢园嫦驊玫墓?。對這一層沒有精確規(guī)定工具的類型,它通??梢园嫦驊玫墓ぞ吆椭С痔囟ǔ绦蛟O計方法的工具等??梢允侵С中枨蠓治觥⒃O計、實現(xiàn)、具和支持特定程序設計方法的工具等??梢允侵С中枨蠓治?、設計、實現(xiàn)、維護等軟件開發(fā)全生命周期的工具。維護等軟件開發(fā)全生命周期的工具。 在一個程序設計環(huán)境中,編譯程序起著中心的作用。連
56、接程序、調(diào)試程在一個程序設計環(huán)境中,編譯程序起著中心的作用。連接程序、調(diào)試程序、程序分析等工具的工作直接依賴于編譯程序所產(chǎn)生的結果,而其它工具序、程序分析等工具的工作直接依賴于編譯程序所產(chǎn)生的結果,而其它工具的構造也常常要用到編譯的原理、方法和技術。的構造也常常要用到編譯的原理、方法和技術。1.5 1.5 編譯程序的生成編譯程序的生成 以前人們構造編譯程序大多是用機器語言或匯編語言作工具以前人們構造編譯程序大多是用機器語言或匯編語言作工具的。為了充分發(fā)揮各種不同硬件系統(tǒng)的效率,為了滿足各種不的。為了充分發(fā)揮各種不同硬件系統(tǒng)的效率,為了滿足各種不同的具體要求,現(xiàn)在許多人仍然采用這種工具來構造編譯
57、程序同的具體要求,現(xiàn)在許多人仍然采用這種工具來構造編譯程序(或編譯程序的(或編譯程序的“核心核心”部分)。但是,越來越多的人已經(jīng)使部分)。但是,越來越多的人已經(jīng)使用高級語言作工具來編譯程序。因為,這樣可以大大節(jié)省程序用高級語言作工具來編譯程序。因為,這樣可以大大節(jié)省程序設計時間,而且所構造出來的編譯程序易于閱讀、維護和移植。設計時間,而且所構造出來的編譯程序易于閱讀、維護和移植。 為了便于說明,我們用一種為了便于說明,我們用一種T形圖來表示源語言形圖來表示源語言S S、目標語、目標語言言T和編譯程序實現(xiàn)語言和編譯程序實現(xiàn)語言I 之間的關系,如圖之間的關系,如圖1.7所示。所示。 STI圖圖1.
58、7 T型圖型圖 如果如果A機器上已有一個用機器上已有一個用A機器代碼實現(xiàn)的某高級語言機器代碼實現(xiàn)的某高級語言L1的的編譯程序,則我們可以用編譯程序,則我們可以用L1語言編寫另一種高級語言編寫另一種高級L2的編譯程序,的編譯程序,把寫好的把寫好的L2編譯程序經(jīng)過編譯程序經(jīng)過L1編譯程序編譯后就可得到編譯程序編譯后就可得到A機器代機器代碼實現(xiàn)的碼實現(xiàn)的L2編譯程序,如圖編譯程序,如圖1.8所示。所示。 圖圖1.8 用用L1語言編寫編譯程序語言編寫編譯程序L2AL1L1AAL2AAA機器有機器有C語言,希望實現(xiàn)語言,希望實現(xiàn)PASCAL語言的編譯器的語言的編譯器的T型圖如型圖如1.8 采用一種所謂的
59、采用一種所謂的“移植移植”方法,我們可以利用方法,我們可以利用A機器上已有的高級語言機器上已有的高級語言L編寫一個能夠在編寫一個能夠在B機器上運行的高級語言機器上運行的高級語言L的編譯程序。做法是,先用的編譯程序。做法是,先用L語語言編寫出在言編寫出在A機器上運行的產(chǎn)生機器上運行的產(chǎn)生B機器代碼的機器代碼的L編譯程序源程序,然后把該編譯程序源程序,然后把該源程序經(jīng)過源程序經(jīng)過A機器上的機器上的L編譯程序編譯后得到能在編譯程序編譯后得到能在A機器上運行的產(chǎn)生機器上運行的產(chǎn)生B機器機器代碼的編譯程序,用這個編譯程序再一次編譯上述編譯程序源程序就得到了代碼的編譯程序,用這個編譯程序再一次編譯上述編譯
60、程序源程序就得到了能在能在B機器上運行的產(chǎn)生機器上運行的產(chǎn)生B機器代碼的編譯程序。用機器代碼的編譯程序。用T形圖表示為圖形圖表示為圖1.9所示。所示。 圖圖1-9 編譯程序編譯程序“移植移植”LBLLAALBALBLLBB 我們還可以采用我們還可以采用“自編譯方式自編譯方式”產(chǎn)生編譯程序。方法是,產(chǎn)生編譯程序。方法是,先對語言的核心部分構造一個小小的編譯程序(可用低級語先對語言的核心部分構造一個小小的編譯程序(可用低級語言實現(xiàn)),再以它為工具構造一個能夠編譯更多語言成分的言實現(xiàn)),再以它為工具構造一個能夠編譯更多語言成分的較大編譯程序。如此擴展下去,就像滾雪球一樣,越滾越大,較大編譯程序。如此
溫馨提示
- 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學年第二學期期末試卷
- 贛南師范大學《數(shù)據(jù)倉庫原理及實踐》2023-2024學年第二學期期末試卷
- 四川大學錦江學院《武器發(fā)射流體力學》2023-2024學年第二學期期末試卷
- 西南政法大學《基礎攝影》2023-2024學年第二學期期末試卷
- 青海交通職業(yè)技術學院《福利經(jīng)濟學》2023-2024學年第二學期期末試卷
- 河北省2024七年級道德與法治上冊第四單元追求美好人生第十二課端正人生態(tài)度第1課時擁有積極的人生態(tài)度背記新人教版
- 六年級品德與社會下冊 第四單元 再見我的小學生活 1 我的成長足跡說課稿6 新人教版
- 八年級上冊歷史人教版同步聽課評課記錄第3課《太平天國運動》
- 新人教版七年級數(shù)學上冊1.5.1《乘方》聽評課記錄1
- 2025春季學期少先隊工作安排表
- 2024-2030年中國免疫細胞存儲行業(yè)市場發(fā)展分析及競爭形勢與投資戰(zhàn)略研究報告
- 工貿(mào)行業(yè)企業(yè)安全生產(chǎn)標準化建設實施指南
- T-CACM 1560.6-2023 中醫(yī)養(yǎng)生保健服務(非醫(yī)療)技術操作規(guī)范穴位貼敷
- 2024年全國統(tǒng)一考試高考新課標Ⅱ卷數(shù)學試題(真題+答案)
- 人教版小學數(shù)學一年級下冊第1-4單元教材分析
- JTS-215-2018碼頭結構施工規(guī)范
- 財務實習生合同
- 2024年長沙衛(wèi)生職業(yè)學院單招職業(yè)適應性測試題庫含答案
- 2024山西省文化旅游投資控股集團有限公司招聘筆試參考題庫附帶答案詳解
- 地質災害危險性評估的基本知識
- (正式版)SHT 3075-2024 石油化工鋼制壓力容器材料選用規(guī)范
評論
0/150
提交評論