編譯原理第一章_第1頁
編譯原理第一章_第2頁
編譯原理第一章_第3頁
編譯原理第一章_第4頁
編譯原理第一章_第5頁
已閱讀5頁,還剩51頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、 編 譯 原 理 制作制作 北京交通大學北京交通大學 計算機與信息技術學院計算機與信息技術學院 于雙元于雙元 聯(lián)系聯(lián)系 51688575 51688575 Compiler Principles 第一章 緒論 編譯原理 程序設計語言程序設計語言 編譯程序設計和構造的基本原理編譯程序設計和構造的基本原理一臺完整的計算機一臺完整的計算機 中央處理機中央處理機CPUCPU(單核、多核)(單核、多核) 輸入輸入/ /輸出輸出硬件部分硬件部分 存儲器存儲器 通信設備通信設備 數(shù)據(jù)庫管理程序(數(shù)據(jù)庫管理程序(DBMSDBMS) 系統(tǒng)軟件系統(tǒng)軟件 操作系統(tǒng)(操作系統(tǒng)(OSOS) 裝入、鏈接、編輯程序裝入、鏈

2、接、編輯程序 軟件部分軟件部分 辦公軟件辦公軟件 MS Office 應用軟件應用軟件 圖像處理軟件圖像處理軟件 AdobeAdobe 媒體播放器媒體播放器 暴風影音、千千靜聽暴風影音、千千靜聽 其它軟件其它軟件 QQQQ微信微信北京交通大學第一章 緒論4編譯程序? 用戶:要用basic, pascal ,c,c+,java 高級語言計算機:只識別二進制表示的指令和數(shù)據(jù)計算機:只識別二進制表示的指令和數(shù)據(jù) 低級語言 翻譯編譯程序(解釋程序)編譯程序(解釋程序)問題北京交通大學第一章 緒論5方法、技術、原理 編譯方法編譯方法:實現(xiàn)編譯過程的一些手段,即怎樣實現(xiàn)編譯過程的一些手段,即怎樣把源程序變

3、成目標程序,比較具體;把源程序變成目標程序,比較具體; 編譯技術編譯技術:介于方法和原理之間,在實際實現(xiàn)介于方法和原理之間,在實際實現(xiàn)時,編譯過程的實現(xiàn)往往與其編譯原理不能完時,編譯過程的實現(xiàn)往往與其編譯原理不能完全吻合,因機器的構造不完全相同全吻合,因機器的構造不完全相同; 編譯原理編譯原理:實現(xiàn)編譯過程的基本原理,即把源實現(xiàn)編譯過程的基本原理,即把源程序變成目標程序的理論基礎,比較抽象程序變成目標程序的理論基礎,比較抽象, ,會會涉及編譯程序實現(xiàn)技術;涉及編譯程序實現(xiàn)技術;北京交通大學第一章 緒論6 本課的重點在原理及相關技術方面; 編譯課程蘊涵著計算機科學中解決問題的思路、抽象問題的方法

4、、解決問題的方法;問題的由來?問題的解決?本課程可體會理論與實踐的結合,理論如何指導實踐;編譯原理指導編譯程序設計?利用編譯思想解決計算機領域相關問題;反病毒軟件 協(xié)議解析 軟件測試參考資料1 1、陳火旺等、陳火旺等 程序設計語言編譯原理程序設計語言編譯原理 國防工業(yè)出版社國防工業(yè)出版社2 2、呂映芝等、呂映芝等 編譯原理編譯原理 清華大學出版社清華大學出版社3 3、陳意云、陳意云 編譯原理編譯原理 高等教育出版社高等教育出版社4 4、Alfred V.Aho, Compilers:Principles Techniques,and Alfred V.Aho, Compilers:Princi

5、ples Techniques,and Tools (Tools (本科教學版)本科教學版) 機械工業(yè)出版社機械工業(yè)出版社5 5、Charles N.Fischer, Crafting A Compiler with CCharles N.Fischer, Crafting A Compiler with C 機械工業(yè)出版社機械工業(yè)出版社6 6、Dick Grume,Moden Compiler DesignDick Grume,Moden Compiler Design 人民郵電出版社人民郵電出版社北京交通大學第一章 緒論8課程總體安排課程總體安排l 總學時總學時6464學時學時l 課堂教學

6、課堂教學5050學時(含理論教學和習題課)學時(含理論教學和習題課)l 實驗教學實驗教學1414學時學時l 課程考核課程考核 期末考試期末考試70%70%(閉卷)(閉卷) 實驗專題實驗專題20%20% 作業(yè)、測驗與平時作業(yè)、測驗與平時10% 10% 理論教學主要內(nèi)容理論教學主要內(nèi)容第一章 緒論(2學時)第二章 上下文無關文法和語言(8學時)第三章 詞法分析(10學時)第四章 語法分析(14學時)第五章 語義分析和中間代碼生成(8學時)第九章 目標代碼生成(4學時)1.1 1.1 編譯技術發(fā)展簡史編譯技術發(fā)展簡史 1820182018501850美國美國Charles BabbageCharle

7、s Babbage研制了世界研制了世界上第一臺計算機上第一臺計算機 本世紀三十年代本世紀三十年代, ,英國數(shù)學家英國數(shù)學家Turing(Turing(圖靈圖靈) )提提出了圖靈機的概念,是現(xiàn)代計算機的數(shù)學模型出了圖靈機的概念,是現(xiàn)代計算機的數(shù)學模型. . 19441944年美國哈佛大學年美國哈佛大學A.AikenA.Aiken設計了設計了MARKIMARKI自動自動程序控制繼點器計算機程序控制繼點器計算機, ,是世界上第一臺自動是世界上第一臺自動計算機計算機. . 19461946年世界上第一臺電子計算機年世界上第一臺電子計算機(ENIAC)(ENIAC)誕生誕生于美國的賓夕法尼亞大學于美國的

8、賓夕法尼亞大學語言的產(chǎn)生n 世界上第一位程序員(媛)世界上第一位程序員(媛)(Ada Lovelace)(Ada Lovelace)n 機器語言與匯編語言機器語言與匯編語言機器語言機器語言 符號匯編語言符號匯編語言 宏匯編語言宏匯編語言 n FORTRANFORTRAN、ALGOLALGOL和和 COBOLCOBOL FORTRAN(FORmula TRANslation) FORTRAN(FORmula TRANslation) 公式翻譯語公式翻譯語言五十年代初期產(chǎn)生第一個實用的高級語言言五十年代初期產(chǎn)生第一個實用的高級語言 1954-19591954-1959年年 FORTRAN 0FOR

9、TRAN 0語言及編譯系統(tǒng)產(chǎn)語言及編譯系統(tǒng)產(chǎn)生標志著編譯技術開始形成生標志著編譯技術開始形成 ALGOL(ALGOkithmic Language)ALGOL(ALGOkithmic Language) 國際代數(shù)語言國際代數(shù)語言 ALGOL58 ALGOL60ALGOL58 ALGOL60 采用采用BNFBNF范式范式 形式化的語言描述體系形式化的語言描述體系 促進了語法分析及理論的研究促進了語法分析及理論的研究COBOL COBOL 引入獨立于機器的數(shù)據(jù)描述概念引入獨立于機器的數(shù)據(jù)描述概念 導致了數(shù)據(jù)庫管理系統(tǒng)的產(chǎn)生導致了數(shù)據(jù)庫管理系統(tǒng)的產(chǎn)生 PASCALPASCAL 由由ALGOL60AL

10、GOL60研究小組研制的用于教學與編寫系研究小組研制的用于教學與編寫系統(tǒng)軟件的語言統(tǒng)軟件的語言 繼承了繼承了ALGOL60ALGOL60的描述方法的描述方法 對程序驗證和結構化程序設計起重要作用對程序驗證和結構化程序設計起重要作用 AdaAda PROLOGPROLOG IDE(Interactive Development Environment)IDE(Interactive Development Environment) 交互開發(fā)環(huán)境交互開發(fā)環(huán)境 SIMULA 67SIMULA 67 ALGOL60ALGOL60的擴展,開發(fā)了類(的擴展,開發(fā)了類(class)class) 數(shù)據(jù)抽象的開

11、始。數(shù)據(jù)抽象的開始。 Smalltalk 72-80Smalltalk 72-80 建立了軟件用戶接口建立了軟件用戶接口- -視窗系統(tǒng)視窗系統(tǒng) 程序單元是對象,面向對象程序設計趨于成熟程序單元是對象,面向對象程序設計趨于成熟 C+C+ 命令式與面向對象的結合。命令式與面向對象的結合。 C C的編譯器物美價廉的編譯器物美價廉, ,安全性不足。安全性不足。 Java Java 萬維網(wǎng)程序設計語言萬維網(wǎng)程序設計語言 安全性增強,遠程訪問安全性增強,遠程訪問北京交通大學第一章 緒論15編程語言排行榜編程語言排行榜(TIOBE)北京交通大學第一章 緒論161.2 程序設計語言低級語言低級語言: 依賴于具

12、體的機器依賴于具體的機器(機器語言,匯編語言機器語言,匯編語言)高級語言高級語言: 不依賴具體機器不依賴具體機器 FORTRAN算法語言算法語言 BASIC會話語言會話語言 PASCAL結構程序化語言結構程序化語言 SQL 數(shù)據(jù)庫查詢語言數(shù)據(jù)庫查詢語言 HTML XML JAVA.中級語言中級語言: C語言語言 (既具有高級語言的功能,(既具有高級語言的功能, 又具有低級又具有低級 語言的功能)語言的功能)北京交通大學第一章 緒論171、高級程序設計語言優(yōu)點n 編程效率高,可移植性好;編程效率高,可移植性好;n 不必考慮與機器有關的問題;如存貯單不必考慮與機器有關的問題;如存貯單元的分配等。元

13、的分配等。n 豐富的數(shù)據(jù)結構;豐富的數(shù)據(jù)結構;n 接近自然語言,易掌握;接近自然語言,易掌握;北京交通大學第一章 緒論182、高級程序設計語言定義 高級程序設計至今還沒有嚴格的定義,這里高級程序設計至今還沒有嚴格的定義,這里沿用沿用IBMIBM公司公司J.E.SammetJ.E.Sammet所給出的定義所給出的定義: 高級程序設計語言,簡言之,就是易于高級程序設計語言,簡言之,就是易于為人們理解、掌握與使用的程序設計語言,為人們理解、掌握與使用的程序設計語言,或者說,它是具有如下四個特征的表示法、或者說,它是具有如下四個特征的表示法、約定與規(guī)則的集合。約定與規(guī)則的集合。北京交通大學第一章 緒論

14、192、高級程序設計語言定義(續(xù))(1 1) 高級語言不要求程序員掌握有關機器代碼的知高級語言不要求程序員掌握有關機器代碼的知識(如寄存器,數(shù)據(jù)的內(nèi)部表示,識(如寄存器,數(shù)據(jù)的內(nèi)部表示, I/OI/O通道,這一通道,這一特性沒有考慮效率因素)。特性沒有考慮效率因素)。(2 2) 高級語言本身應獨立于任何特定的計算機,高高級語言本身應獨立于任何特定的計算機,高級語言應易于編寫出能在多種計算機上運行的程序。級語言應易于編寫出能在多種計算機上運行的程序。(3 3) 用高級語言編寫出的源程序應能翻譯成可在多用高級語言編寫出的源程序應能翻譯成可在多種機器上運行的機器代碼程序。種機器上運行的機器代碼程序。

15、(4 4) 高級語言設施應能相當自然地表示所求解問題高級語言設施應能相當自然地表示所求解問題域,即應能用面向問題的方式編寫高級語言程序。域,即應能用面向問題的方式編寫高級語言程序。北京交通大學第一章 緒論203、編譯系統(tǒng)q高級語言的這些優(yōu)點是有代價的,必須有一個高級語言的這些優(yōu)點是有代價的,必須有一個“翻譯程序翻譯程序”,也就是說高級語言必須有相應,也就是說高級語言必須有相應的軟件支持系統(tǒng)的軟件支持系統(tǒng)“編譯程序編譯程序+ +相應的支持用戶相應的支持用戶程序程序”編譯系統(tǒng)。編譯系統(tǒng)。q 一般這種翻譯工作有二種途徑或兩種形式的一般這種翻譯工作有二種途徑或兩種形式的混合。混合。 編譯編譯編譯程序、

16、匯編程序編譯程序、匯編程序 解釋解釋解釋程序解釋程序北京交通大學第一章 緒論21一、翻譯程序一、翻譯程序 所謂所謂翻譯程序翻譯程序是這樣一種程序是這樣一種程序, ,它能夠把它能夠把用用甲語言甲語言書寫的程序翻譯成書寫的程序翻譯成與之等價的與之等價的用用乙語乙語言言書寫的程序書寫的程序. . 甲語言稱為該翻譯程序的甲語言稱為該翻譯程序的源語言源語言. . 乙語言稱為該翻譯程序的乙語言稱為該翻譯程序的目標語言目標語言. . 用源語言書寫的程序稱為用源語言書寫的程序稱為源程序源程序. . 用目標語言書寫的程序稱為用目標語言書寫的程序稱為目標程序目標程序. 1.3 1.3 編譯程序編譯程序 匯編程序匯

17、編程序 解釋程序解釋程序翻譯程序翻譯程序源程序源程序目標程序目標程序高級語言高級語言機器語言機器語言匯編語言匯編語言編譯程序編譯程序源語源語言言目標語目標語言言邏輯等價邏輯等價北京交通大學第一章 緒論23二、編譯程序二、編譯程序 如果翻譯程序的源語言是高級語言,目標語言如果翻譯程序的源語言是高級語言,目標語言是低級語言(機器語言或匯編語言),這種翻譯程是低級語言(機器語言或匯編語言),這種翻譯程序稱為序稱為編譯程序編譯程序。三、匯編程序三、匯編程序 如果翻譯程序的源語言是匯編語言,目標語言如果翻譯程序的源語言是匯編語言,目標語言是機器語言,這種翻譯程序稱為是機器語言,這種翻譯程序稱為匯編程序匯

18、編程序。北京交通大學第一章 緒論24說明:編譯程序是一個與源語言和計算機有關的概念。編譯程序是一個與源語言和計算機有關的概念。 不同的源語言有不同的編譯程序不同的源語言有不同的編譯程序 同一種源語言可以有不同的編譯程序(高同一種源語言可以有不同的編譯程序(高級語言或匯編語言書寫)級語言或匯編語言書寫)源程序的執(zhí)行分為兩個階段:源程序的執(zhí)行分為兩個階段: 編譯階段和運行階段編譯階段和運行階段編譯階段生成的目標程序不是機器代碼程序,而編譯階段生成的目標程序不是機器代碼程序,而是符號匯編程序,源程序的執(zhí)行分是符號匯編程序,源程序的執(zhí)行分三個階段:編三個階段:編譯階段、匯編階段和運行階段譯階段、匯編階

19、段和運行階段. . 編譯階段編譯階段計算機計算機編譯程序編譯程序源程序源程序目標程序目標程序*.c*.obj 運行階段運行階段計算機計算機目標程序目標程序運行程序運行程序初始數(shù)據(jù)初始數(shù)據(jù)計算結果計算結果北京交通大學第一章 緒論27四、解釋程序四、解釋程序 按源程序的動態(tài)順序逐句地進行分析解釋并按源程序的動態(tài)順序逐句地進行分析解釋并執(zhí)行直至結束。執(zhí)行直至結束。解釋程序邊翻譯邊執(zhí)行,不生成目標程序。交解釋程序邊翻譯邊執(zhí)行,不生成目標程序。交互式的工作方式,便于調(diào)試,但執(zhí)行效率低,互式的工作方式,便于調(diào)試,但執(zhí)行效率低,執(zhí)行時也要解釋。執(zhí)行時也要解釋。編譯程序生成目標程序,鏈接形成可執(zhí)行文件編譯程序

20、生成目標程序,鏈接形成可執(zhí)行文件運行,所有翻譯工作在運行之前完成,執(zhí)行效運行,所有翻譯工作在運行之前完成,執(zhí)行效率高。率高。 解釋程序解釋程序計算機計算機解釋程序解釋程序源程序源程序計算結果計算結果初始數(shù)據(jù)初始數(shù)據(jù)北京交通大學第一章 緒論29Java語言的翻譯北京交通大學第一章 緒論30跨平臺北京交通大學第一章 緒論31一、典型的編譯過程分以下五個階段一、典型的編譯過程分以下五個階段 詞法分析詞法分析 語法分析語法分析 語義分析及中間代碼生成語義分析及中間代碼生成 中間代碼優(yōu)化中間代碼優(yōu)化 目標代碼生成目標代碼生成 目標代碼優(yōu)化目標代碼優(yōu)化1.4 編譯過程概述源程序的分析源程序的分析(Anal

21、ysis)目標程序的綜合目標程序的綜合(Synthesis)北京交通大學第一章 緒論321 、詞法分析(Scanner) 構成詞法分析程序 詞法分析的主要任務是將符號串形式的詞法分析的主要任務是將符號串形式的源程序進行掃描,并分解為具有獨立意義的源程序進行掃描,并分解為具有獨立意義的最小語法單位最小語法單位單詞符號單詞符號。問題:問題:在語言中哪些是不可再分的最小語法單位?在語言中哪些是不可再分的最小語法單位?北京交通大學第一章 緒論33int add(int x, int y) int z; z=x+y; return(z);intadd(int ,intyx關鍵字關鍵字/標準標識符標準標識

22、符用戶標識符用戶標識符運算符運算符關鍵字關鍵字/標準標識符標準標識符標識符標識符關鍵字關鍵字/標準標識符標準標識符分隔符分隔符標識符標識符北京交通大學第一章 緒論34例例1 1 以下為以下為 PASCALPASCAL語言的一條語句語言的一條語句 if A=B then Xif A=B then X:=Y=Y; 詞法分析的結果詞法分析的結果 if A = B then X : = Y ; 關關 變變 運運 變變 關關 變量變量 運運 變量變量 分隔符分隔符 C C語言的語句語言的語句 if (x=y) z=20+a ; else z=90-b; if (x=y) z=20+a ; else z=

23、90-b; 北京交通大學第一章 緒論35說明說明 依據(jù)的規(guī)則是詞法規(guī)則。依據(jù)的規(guī)則是詞法規(guī)則。 單詞符號:常量、變量名、關鍵字、保留單詞符號:常量、變量名、關鍵字、保留字、運算符等。字、運算符等。 每一類單詞符號可用一整數(shù)表示,或其它每一類單詞符號可用一整數(shù)表示,或其它方式。方式。 詞法分析應指出單詞符號的詞法錯誤,詞法分析應指出單詞符號的詞法錯誤, 如非法字符如非法字符。 北京交通大學第一章 緒論362、語法分析(Parser) 構成語法分析程序 語法分析的主要任務是從詞法分析取語法分析的主要任務是從詞法分析取得單詞符號串形式的源程序,并將一個或得單詞符號串形式的源程序,并將一個或多個單詞組

24、合為語言的各種多個單詞組合為語言的各種語法類語法類。語法分析依據(jù)的是語言的語法規(guī)則。語法分析依據(jù)的是語言的語法規(guī)則。 語法類:表達式、語句語法類:表達式、語句 、子程序等。、子程序等。語法分析應指出語句的語法錯誤。語法分析應指出語句的語法錯誤。北京交通大學第一章 緒論37例例2 2 以下為以下為C C語言的一條語句語言的一條語句 w=(a+b)*c ; 詞法分析的結果詞法分析的結果 w = ( a + b ) * c ; 變量變量 運算符運算符 分隔符分隔符 變量變量 運算符運算符 變量變量 分隔符分隔符 運算符運算符 變量變量 分隔符分隔符語法分析的結果語法分析的結果 w = ( a + b

25、 ) * c ; 變量變量 運算符運算符 分隔符分隔符 變量變量 運算符運算符 變量變量 分隔符分隔符 運算符運算符 變量變量 分隔符分隔符 表達式表達式 賦值語句賦值語句北京交通大學第一章 緒論383、語義分析及中間代碼生成、語義分析及中間代碼生成(Semantic Routine) 語義分析程序語義分析程序 語義分析的主要任務是確定源程序的意義語義分析的主要任務是確定源程序的意義 ( (語語義義) ) ,對不同的語法類進行初步的翻譯工作,包括,對不同的語法類進行初步的翻譯工作,包括靜態(tài)語義檢查和中間代碼的生成。靜態(tài)語義檢查和中間代碼的生成。靜態(tài)語義檢查靜態(tài)語義檢查:對每種語法范疇進行靜態(tài)語

26、:對每種語法范疇進行靜態(tài)語義檢查(變量是否定義,類型一致性)。義檢查(變量是否定義,類型一致性)。中間代碼生成中間代碼生成:進行初步的翻譯,生成中間:進行初步的翻譯,生成中間代碼代碼(Intermediate Representation,IR ) 。北京交通大學第一章 緒論39說明說明語義分析依據(jù)的是語言的語義規(guī)則。語義分析依據(jù)的是語言的語義規(guī)則。中間代碼是一種結構簡單含義明確的記號系中間代碼是一種結構簡單含義明確的記號系統(tǒng),這種記號系統(tǒng)的特點是既獨立于具體的統(tǒng),這種記號系統(tǒng)的特點是既獨立于具體的硬件,又和計算機的指令系統(tǒng)有某種程度的硬件,又和計算機的指令系統(tǒng)有某種程度的聯(lián)系或相似之處,很容

27、易將中間代碼轉變成聯(lián)系或相似之處,很容易將中間代碼轉變成機器指令。機器指令。語義分析和語法分析是不同的概念,但在實語義分析和語法分析是不同的概念,但在實際完成編譯工作時,兩者又是緊密結合的,際完成編譯工作時,兩者又是緊密結合的,一般同時完成。一般同時完成。 北京交通大學第一章 緒論40例例3 3、上例的、上例的C C語言語句語言語句 w=(a+b)*c ; 語義分析及中間代碼生成確定先加后乘的語義分析及中間代碼生成確定先加后乘的操作,并生成中間代碼。操作,并生成中間代碼。例:以上語句的一種中間代碼三元式例:以上語句的一種中間代碼三元式(1) (+,a,b)(1) (+,a,b)(2) (2)

28、(* *,(1),c),(1),c)(3) (=,w,(2)(3) (=,w,(2)北京交通大學第一章 緒論41 中間代碼優(yōu)化(Optimizer) 代碼優(yōu)化程序 中間代碼優(yōu)化的主要任務是對中間代碼進中間代碼優(yōu)化的主要任務是對中間代碼進行算法的等價變換,以期得到行算法的等價變換,以期得到高效高效的目標代碼。的目標代碼。 高效是指時間和空間的高效;高效是指時間和空間的高效; 代碼優(yōu)化可以在目標代碼生成之前進行,也代碼優(yōu)化可以在目標代碼生成之前進行,也可以在目標代碼生成之后進行;可以在目標代碼生成之后進行; 代碼優(yōu)化要付出編譯代價;代碼優(yōu)化要付出編譯代價; 北京交通大學第一章 緒論425、代碼生成

29、(Code Generator) 代碼生成程序 代碼生成的主要任務是將源程序的中間代碼生成的主要任務是將源程序的中間代碼形式根據(jù)具體的機器硬件系統(tǒng)轉換成機器代碼形式根據(jù)具體的機器硬件系統(tǒng)轉換成機器語言或匯編語言。語言或匯編語言。說明說明并非所有的編譯程序都需要這五個階段。并非所有的編譯程序都需要這五個階段。完整的編譯程序還包括符號表的管理和出錯完整的編譯程序還包括符號表的管理和出錯處理。處理。北京交通大學第一章 緒論44二、編譯程序的組成 詞法分析詞法分析 語法分析語法分析 語義分析及中間代碼生成語義分析及中間代碼生成 代碼優(yōu)化代碼優(yōu)化 目標代碼生成目標代碼生成 符號表的管理符號表的管理 出錯

30、處理出錯處理北京交通大學第一章 緒論451、符號表的管理 符號表是用于保存源程序中所使用的每個符號表是用于保存源程序中所使用的每個標識符標識符的的屬性屬性的數(shù)據(jù)結構的數(shù)據(jù)結構, ,以便進行語法分析、以便進行語法分析、中間代碼生成和目標代碼生成。中間代碼生成和目標代碼生成。 標識符標識符:變量名、函數(shù)名、過程名等變量名、函數(shù)名、過程名等 屬性屬性:標識符的存貯分配、類型、作用域等標識符的存貯分配、類型、作用域等合理地設計和使用表格是編譯程序構造的一合理地設計和使用表格是編譯程序構造的一個重要問題。個重要問題。北京交通大學第一章 緒論462 、錯誤的檢測和處理 編譯的各個階段都能檢測到源程序中的錯

31、編譯的各個階段都能檢測到源程序中的錯誤,而且在檢測一個錯誤后,必須立即對該誤,而且在檢測一個錯誤后,必須立即對該錯誤進行處理,以便使錯誤進行處理,以便使編譯工作能繼續(xù)進行編譯工作能繼續(xù)進行下去下去,繼續(xù)對源程序中可能存在的其他錯誤,繼續(xù)對源程序中可能存在的其他錯誤進行檢測(局部化法)。進行檢測(局部化法)。通常在語法和語義分析階段能處理由編譯程通常在語法和語義分析階段能處理由編譯程序檢測出的大部分錯誤序檢測出的大部分錯誤一個好的編譯程序應能最大限度的發(fā)現(xiàn)源程一個好的編譯程序應能最大限度的發(fā)現(xiàn)源程序中的各種錯誤,并使其影響盡可能小序中的各種錯誤,并使其影響盡可能小。北京交通大學第一章 緒論47三

32、、遍 處理數(shù)據(jù)的一個完整周期。指對源程處理數(shù)據(jù)的一個完整周期。指對源程序或源程序的中間形式從頭到尾掃描一次,序或源程序的中間形式從頭到尾掃描一次,并作有關的加工處理,生成新的源程序中并作有關的加工處理,生成新的源程序中間形式或目標代碼這一過程。間形式或目標代碼這一過程。 可以將編譯程序的五個階段整體作為一遍可以將編譯程序的五個階段整體作為一遍;也可將五個階段每個作為一遍也可將五個階段每個作為一遍;如何分遍,有許多因素具體決定;如何分遍,有許多因素具體決定;表表格格處處理理語法分析程序語法分析程序出出錯錯處處理理源程序源程序詞法詞法分析分析代碼生成代碼生成程序程序目標程序目標程序主程序主程序子程

33、序子程序子程序子程序送送單單詞詞取取單單詞詞調(diào)調(diào)用用返返回回PL/0語言編譯程序結構圖語言編譯程序結構圖(單遍掃描單遍掃描)預處理器預處理器編譯程序編譯程序匯編程序匯編程序加載加載/ /鏈接鏈接源程序源程序可重定位的機器代碼可重定位的機器代碼目標程序目標程序絕對機器代碼絕對機器代碼前端處理前端處理后端處理后端處理宏替換宏替換#define#define文件包含文件包含#include#include預編譯預編譯#if#if語言擴充語言擴充SQLSQL庫庫可重定位的目標文件可重定位的目標文件x=2*x+y詞法分析詞法分析id1=2*id1+id2語法分析語法分析語義分析語義分析T1=int to real(2)T2=id1*T1T3=T2+id2id1=T3代碼優(yōu)化代碼優(yōu)化T1=id1*2.0id1=id2

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論