![編譯原理:第1章 編譯程序概論_第1頁](http://file4.renrendoc.com/view/c59120e43da14db2cd8b3d724de877f5/c59120e43da14db2cd8b3d724de877f51.gif)
![編譯原理:第1章 編譯程序概論_第2頁](http://file4.renrendoc.com/view/c59120e43da14db2cd8b3d724de877f5/c59120e43da14db2cd8b3d724de877f52.gif)
![編譯原理:第1章 編譯程序概論_第3頁](http://file4.renrendoc.com/view/c59120e43da14db2cd8b3d724de877f5/c59120e43da14db2cd8b3d724de877f53.gif)
![編譯原理:第1章 編譯程序概論_第4頁](http://file4.renrendoc.com/view/c59120e43da14db2cd8b3d724de877f5/c59120e43da14db2cd8b3d724de877f54.gif)
![編譯原理:第1章 編譯程序概論_第5頁](http://file4.renrendoc.com/view/c59120e43da14db2cd8b3d724de877f5/c59120e43da14db2cd8b3d724de877f55.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、1編 譯 原 理學(xué)習(xí)了編譯課,就不能說:“某一門語言沒有學(xué)過,所以不會”。2 課程簡介課程中文名稱:編譯原理課程英文名稱:Principles of Compiling( Compiler Principles )考核方式:閉卷考試開課學(xué)期:第三學(xué)年第2學(xué)期總學(xué)時:56總學(xué)分:3.5前續(xù)課程:程序設(shè)計語言,數(shù)據(jù)結(jié)構(gòu)3教材:編譯原理,張素琴、呂映芝、蔣維杜、戴桂蘭,清華大學(xué)出版社 2004參考書1:Compilers: Principles, Techniques, and Tools Alfred V.Aho, Ravi Sethi, Jeffrey D.Ullman, Addison-Wes
2、ley,1986. 影印版:人民郵電出版社,2001參考書2:(參考書1 的中譯本) 編譯原理 Alfred V.Aho, Ravi Sethi, Jeffrey D.Ullman, Addison-Wesley 著. 李建中,姜守旭 譯 機械工業(yè)出版社參考書3: 編譯原理和技術(shù), 丁文魁、杜淑敏,電子工業(yè)出版社,2008年3月參考書4: 編譯原理, 孫悅紅,清華大學(xué)出版社 2005教材及主要參考書4基本知識要求掌握課程教學(xué)大綱中規(guī)定的一些基本概念、基本理論和基本方法通過學(xué)習(xí),能夠?qū)@些基本概念和理論有更深入的理解,有能力將它們應(yīng)用到一些問題的求解中。教學(xué)要求5教學(xué)要求作業(yè)要求每章安排習(xí)題。學(xué)
3、生通過習(xí)題,復(fù)習(xí)課程內(nèi)容,深入研究有關(guān)問題。 另外,會有一些思考題。根據(jù)實際情況,將必要的習(xí)題講解安排在理論課的講授中。 6考核形式閉卷重點考查學(xué)生對基本概念、基本理論、基本方法掌握的程度期末 80%, 平時 20%。教學(xué)要求7課程性質(zhì)必修,專業(yè)基礎(chǔ)課程所含內(nèi)容既有便于抽象的問題,又有較成熟的理論,屬于軟件技術(shù)系列。涉及學(xué)科抽象、理論、設(shè)計3個形態(tài)繼程序設(shè)計、數(shù)據(jù)結(jié)構(gòu)等課程后,從系統(tǒng)級再認(rèn)識程序、算法8先修課程要求程序設(shè)計,數(shù)據(jù)結(jié)構(gòu)等掌握程序、數(shù)據(jù)結(jié)構(gòu)、算法的基本知識,能夠較熟練地用它們表達問題及求解修過離散數(shù)學(xué),對問題的符號表示、對符號表示形式的理解等有良好的基礎(chǔ)。即具有一定的計算思維能力、
4、程序設(shè)計與實現(xiàn)能力、算法設(shè)計能力修過形式語言與自動機理論更好 *9編譯是一個好課程“編譯”是將高級語言描述的程序變換成與之等價的另一種語言(面向硬件)表達的程序在這個系統(tǒng)的設(shè)計與實現(xiàn)中,用到計算機學(xué)科很多基本的技術(shù)、原理和方法Alfred V. Aho:“編寫編譯器的原理和技術(shù)具有十分普遍的意義,以至于在每個計算機科學(xué)家的研究生涯中,本書中的原理和技術(shù)都會反復(fù)用到?!?0瞄準(zhǔn)目標(biāo)編譯:掌握“編譯原理”中的基本概念、基本理論、基本方法,在系統(tǒng)級上再認(rèn)識程序和算法,提升計算機問題求解的水平,增強系統(tǒng)能力,體驗實現(xiàn)自動計算的樂趣 掌握程序變換基本概念、問題描述和處理方法(自頂向下、自底向上、逐步求精
5、、遞歸求解,目標(biāo)驅(qū)動,問題分析、問題的抽象與 形式化描述,算法設(shè)計與實現(xiàn),系統(tǒng)構(gòu)建、模塊化 )修養(yǎng)“問題、形式化描述、計算機化”問題求解典型過程,增強理論結(jié)合實際能力,獲得更多的“頂峰體驗”11第一章 編譯概述 1.1 編譯程序的定義 高級語言程序可看成是符號序列或稱為字符的序列,而計算機能直接接受、理解和運行的是由0、1代碼組成的二進制指令。 顯然需要一個系統(tǒng)軟件,能把一個用面向人的源語言表示的算法轉(zhuǎn)換到一個等價的用面向硬件的目標(biāo)語言表示的算法。 121編譯程序的定義 把高級程序設(shè)計語言書寫的源程序翻譯成邏輯上等價的低級語言形式的目標(biāo)程序的系統(tǒng)軟件稱為編譯程序。 編譯程序的重要性體現(xiàn)在用戶不
6、必考慮與機器有關(guān)的繁瑣細(xì)節(jié),編程獨立于機器。 132編譯理論和技術(shù)的應(yīng)用 編譯程序作為符號處理系統(tǒng),廣泛應(yīng)用到其它的軟件設(shè)計中。14 查詢解釋器:把含關(guān)系和布爾運算的謂詞翻譯成數(shù)據(jù)庫命令,在數(shù)據(jù)庫中查詢滿足該謂詞的記錄。數(shù)據(jù)庫管理系統(tǒng)可看成是一個編譯系統(tǒng)。硅編輯器: 硅編輯器的輸入是一個源程序,其書寫的高級程序設(shè)計語言類似傳統(tǒng)的程序設(shè)計語言。但該語言的變量不是內(nèi)存中的地址,而是開關(guān)電路中的邏輯符號(0或1)或符號組。硅編輯器的輸出是一個以適當(dāng)語言書寫的電路設(shè)計。文本格式器:輸入是含有排版命令的字符流,輸出對應(yīng)排版后的文本。15編譯思想用于通信協(xié)議的轉(zhuǎn)換:與計算機高級程序設(shè)計語言相比,一次通訊過
7、程的完整報文相應(yīng)于一個程序,而報文中的一個幀相當(dāng)于程序中的一個語句。用編譯原理中識別程序設(shè)計語言中的標(biāo)識符和數(shù)的識別原理,來進行協(xié)議幀內(nèi)部成分的識別。利用編譯中的逐層轉(zhuǎn)化思想,轉(zhuǎn)換協(xié)議幀為PC機內(nèi)部幀。編譯在反病毒中的應(yīng)用:對于高級文本語言類的文件(如網(wǎng)頁類文件),應(yīng)用編譯技術(shù)的詞法分析和語法分析原理,可準(zhǔn)確快速定位病毒代碼,從而可構(gòu)造反病毒程序。編譯在機器翻譯系統(tǒng)和文本分類中的應(yīng)用:機器翻譯系統(tǒng)又稱為語言翻譯系統(tǒng), 輸入是一種語言,輸出是功能上等價的另外一種語言。例如中文和日文的互翻譯。文本分類是把互聯(lián)網(wǎng)上的海量信息進行分類,便于閱讀。它們都離不開編譯中的詞法分析和語法分析技術(shù)。16 編譯程
8、序的功能編譯是指將一個用面向人的源語言表示的算法轉(zhuǎn)換到一個等價的用面向硬件的目標(biāo)語言表示的算法Compiler:編譯程序、編譯器源程序(高級語言) 編譯程序目標(biāo)程序(低級語言)17T型圖表示編譯程序SL OLWLSL(source language) 可以是Pascal、Fortran、C等高級語言O(shè)L (object language) 具體機器上的指令代碼(包括機器語言、匯編語言)WL or IL (written language or Implementation language) 書寫編譯程序的語言 18為什么要學(xué)習(xí)編譯?(高級語言的實現(xiàn)方法)通過了解編譯程序的構(gòu)造方法及實現(xiàn),有利
9、于對PL(Programming language)的理解,迅速掌握新的語言工具包含了許多軟件技術(shù)蘊含了計算機學(xué)科解決問題的思路 問題、形式化描述(實際問題抽象化)、計算機化可應(yīng)用于許多實際的軟件開發(fā)工作中,如軟件開發(fā)平臺、軟件自動生成、模式匹配等19編譯程序 (語言轉(zhuǎn)換系統(tǒng))大多數(shù) 計算機系統(tǒng)(microcomputer, minicomputer, mainframe, supercomputer)有不止一個高級語言的編譯程序。每推出一種高級語言,都必須配備各自的編譯程序。形式語言20發(fā)展階段1 20世紀(jì)50年代中期,出現(xiàn)了Fortran等高級語言,相應(yīng)的編譯程序開發(fā)成功。 50年代末開始
10、研究編譯程序的自動生成工具。它的功能是從任一語言的詞法規(guī)則、語法規(guī)則和語義解釋出發(fā),自動產(chǎn)生該語言的編譯程序。2 1972貝爾實驗室在Unix上首次實現(xiàn)詞法分析程序的生成系統(tǒng)LEX和語法分析程序的生成系統(tǒng)YACC。3 60年代起,開始使用自展技術(shù)來構(gòu)造編譯程序。1971年,PASCAL的編譯程序用自展技術(shù)生成后,影響越來越大。Compiler的發(fā)展211.2 翻譯程序 高級語言或匯編語言編制的程序不能直接在計算機上執(zhí)行,必須經(jīng)過“翻譯程序”轉(zhuǎn)化成機器語言才能執(zhí)行。翻譯程序掃描所輸入的源程序,然后將源程序轉(zhuǎn)換成等價的目標(biāo)程序。翻譯程序的源程序分高級語言源程序和匯編語言源程序兩種:1)如果要翻譯的
11、源程序是匯編語言編寫的,而目標(biāo)語言是機器語言,則翻譯程序稱為“匯編程序”;2)若要翻譯的源程序用高級語言編制,其翻譯后的目標(biāo)程序為某種具體機器的機器語言或匯編語言,那么這種翻譯程序稱為“編譯程序”。 221、編譯程序的目標(biāo)程序是機器語言在高級語言程序的編譯和運行過程中,源程序和數(shù)據(jù)是在不同時間處理的。源程序在編譯階段處理,而數(shù)據(jù)則在程序的運行階段處理。有的編譯程序的目標(biāo)程序是機器語言,則源程序從編譯到被執(zhí)行的過程如圖1.1所示 。高級語言源程序 編譯程序 機器語言目標(biāo)程序 目標(biāo)程序 +運行子程序 運行結(jié)果 數(shù)據(jù) 編譯階段 執(zhí)行階段 圖1.1 生成機器語言目標(biāo)程序的編譯方式 語言處理器的類型(l
12、anguage processor)232、編譯程序的目標(biāo)程序是匯編語言如果編譯程序翻譯得到的目標(biāo)程序是匯編語言程序,則還要經(jīng)過“匯編程序”翻譯成機器語言程序,這種編譯方式的源程序從編譯到被執(zhí)行的過程如圖1.2所示。 高級語言源程序 編譯程序 匯編語言目標(biāo)程序 匯編程序機器語言目標(biāo)程序 運行結(jié)果 目標(biāo)程序 +運行子程序 數(shù)據(jù) 編譯階段 匯編階段 運行階段 圖1.2 生成匯編語言目標(biāo)程序的編譯方式 語言處理器的類型243、從源程序的編譯到執(zhí)行只有一個階段解釋執(zhí)行階段如果翻譯程序同時處理源程序和數(shù)據(jù),按源程序中語句的動態(tài)順序,逐句的進行分析解釋,并立即予以執(zhí)行,這種翻譯程序稱為“解釋程序。在解釋方
13、式下,最終并不生成目標(biāo)程序,這是編譯方式與解釋方式的根本區(qū)別。源程序 數(shù)據(jù) 解釋程序 結(jié)果 圖1.3 高級語言的解釋方式 語言處理器的類型25兩類翻譯程序編譯程序:就是一個語言翻譯程序,把源語言書寫的程序翻譯成等價的目標(biāo)語言程序。解釋程序:集編譯與運行為一體,同時處理源程序與數(shù)據(jù),采取邊分析邊執(zhí)行的方式計算結(jié)果。提供兩種執(zhí)行方式:編譯方式、解釋方式混合策略 最常執(zhí)行的部分 編譯實現(xiàn) 其余 解釋實現(xiàn)26編譯、解釋對比編譯程序是將全部源程序翻譯成目標(biāo)程序,再執(zhí)行,可反復(fù)執(zhí)行,速度快解釋程序?qū)υ闯绦蛑鹁浞g執(zhí)行,目標(biāo)代碼只執(zhí)行一次,運行速度慢但解釋程序容易實現(xiàn)(與用戶的交互會話)人機對話,局部程序的
14、改動不需重新翻譯整個程序編譯過程類似筆譯結(jié)果可反復(fù)閱讀解釋過程類似即席翻譯別人說一句話,他就譯一句27編譯C+機器碼Java(只能在本地機上運行)編譯型:編譯成中間代碼(Byte-code 字節(jié)碼),即JVM代碼。 獨立于機器,可在任何具有JVM的機器上運行解釋型:JVM (解釋器)執(zhí)行字節(jié)碼 (JVM虛擬機,就是一個解釋程序)區(qū)別:Java一次編譯,(源代碼)平臺到處運行 (JVM)編譯型語言解釋型語言如BASIC, LISP , 數(shù)據(jù)庫查詢語言SQL, UNIX命令語言shell281.3 編譯程序的組成 按照編譯程序的執(zhí)行過程和所完成的任務(wù),編譯分成前后兩個階段:分析階段和綜合階段。分析
15、階段根據(jù)源語言的定義,分析源程序的結(jié)構(gòu),檢查源程序是否符合語言的規(guī)定,確定源程序所表示的對象和規(guī)定的操作,并以某種中間代碼形式表示出來。分析階段包括詞法分析、語法分析和語義分析。綜合階段根據(jù)分析結(jié)果構(gòu)造所要求的目標(biāo)代碼程序,包括中間代碼生成、代碼優(yōu)化和目標(biāo)代碼生成。為了記錄分析過程中識別出的標(biāo)識符及有關(guān)信息,還需要使用符號表。如果在編譯過程中發(fā)現(xiàn)源程序有錯誤,不僅要報告錯誤的類型、出錯地點,還要進行錯誤處理,使編譯能繼續(xù)進行。 291.3 編譯程序的組成 詞法分析 語法分析 語義分析 分析階段綜合階段 錯誤處理符號表 中間代碼生成目標(biāo)代碼生成代碼優(yōu)化30源程序(字符流)詞法分析中間代碼生成代碼
16、優(yōu)化目標(biāo)代碼生成目標(biāo)程序表格管理出錯處理單詞符號流語法分析語義分析語法樹語法樹四元式代碼或三地址碼四元式代碼或三地址碼31a=b+c*20詞法分析中間代碼生成代碼優(yōu)化目標(biāo)代碼生成語法分析語義分析(id,a) (=,=) (id b) (+,+) (id,c) (*,*) (num, 20)=(id,a)(id,b)20*(id,c)+=(id,a)(id,b)20*(id,c)+inttofloatt1=inttofloat(20)t2=c*t1t3=b+t2a=t3t1=c*20.0a=b+t1LDF R2, cMULF R2, #20.0LDF R1, bADDF R1, R2STF a
17、,R1一個賦值語句的翻譯32(1)詞法分析:識別單詞。從詞法分析的層面來看,語言是由字符組成的單詞的集合。進行詞法分析的程序稱為掃描器(scanner)。(2)語法分析:分析語法。從語法分析的層面來看,語言是由單詞組成的句子的集合。進行語法分析的程序稱為語法分析器(parser)。(3)語義分析:檢查源程序是否和語言定義的語義一致。 例如類型檢查和類型轉(zhuǎn)換(semantic analyzer)。(4)中間代碼生成:獨立具體機器的代碼,便于進一步優(yōu)化(intermediate code generator)。(5)代碼優(yōu)化:為生成更有效的目標(biāo)代碼進行的修飾工作(code optimizer)。(
18、6)目標(biāo)代碼生成:生成特定機器上的目標(biāo)代碼(target code generator)。1.3 編譯程序的組成 33編譯程序完成從源程序到目標(biāo)程序的翻譯工作,是分階段進行的,每個階段將源程序的一種表示形式轉(zhuǎn)換成另一種表示形式,各階段的操作在邏輯上是緊密相關(guān)的。根據(jù)源語言的不同,編譯過程的某些階段也可省略,如:中間代碼生成、代碼優(yōu)化。1.3 編譯程序的組成341.3.1 詞法分析程序 詞法分析又稱掃描器。詞法分析依次讀入源程序中的每個字符,依據(jù)語言的構(gòu)詞規(guī)則,識別出一個個具有獨立意義的最小語法單位,即“單詞”,例如:是標(biāo)識符、還是分界符、還是數(shù)等等。(字符串單詞串 )可采用整數(shù)碼或有意義的記號
19、表示單詞詞性。例如,表達式a=10+c*20經(jīng)詞法分析其結(jié)果如圖所示。整數(shù)碼記號單詞100IDa21=200NUM1022+100IDc25*200NUM20詞法分析結(jié)果 35詞法分析的數(shù)學(xué)模型是有窮狀態(tài)自動機和正則表達式a|b|z, =0|1|9(| )* , *1.3.1 詞法分析程序 361.3.2.語法分析程序 語法分析的功能是在詞法分析的基礎(chǔ)上,根據(jù)語言的語法規(guī)則,將一個個單詞符號組成語言的各種語法類。例如:算術(shù)表達式、賦值語句等。賦值語句的語法結(jié)構(gòu)定義為:賦值語句標(biāo)識符:=表達式表達式的語法結(jié)構(gòu)定義為:表達式表達式+表達式| 表達式-表達式| 標(biāo)識符 | 常數(shù)37單詞的詞性(種別)
20、在語法分析時使用。單詞的值在語義分析時使用。在語法分析時,賦值語句sum := ave+23的語法結(jié)構(gòu)應(yīng)表示為ID:= ID+NUM 1.3.2.語法分析程序 38單詞類別表示的串:ID:= ID+NUM 經(jīng)過語法分析后,ID:= ID+NUM 被識別出是賦值語句,識別過程相當(dāng)于建立一棵語法樹。 :=ID (sum) 表達式賦值語句表達式表達式+ID (ave) NUM (23) 1.3.2.語法分析程序 39語法分析的數(shù)學(xué)模型是下推自動機或上下文無關(guān)文法1.3.2.語法分析程序 401.3.3 語義分析及中間代碼生成程序 語義分析的功能是確定源程序的語義是否正確。語義分析主要能識別的語義錯誤
21、有變量沒聲明就使用、變量重復(fù)聲明、運算對象類型是否匹配、數(shù)組下標(biāo)是否整數(shù)等。例如分析表達式A+B時,當(dāng)分析到+操作時,語義分析程序就要分析A、B是否已經(jīng)聲明、是否具有兼容的類型、是否已經(jīng)有值。為了識別出這些語義錯誤,語義分析要使用編譯程序中建立的許多表。語義分析程序通常將源程序生成一種中間表示形式,即中間代碼。中間代碼具有易于產(chǎn)生、易于翻譯成目標(biāo)程序的特點,可看成是一種抽象機的指令代碼 41例如:a=b+c*20假設(shè)a、b、c已經(jīng)被聲明為浮點數(shù),則語義分析器的類型檢查程序發(fā)現(xiàn)運算符*被用于一個浮點數(shù)和一個整數(shù),則整數(shù)20將被轉(zhuǎn)換為浮點數(shù)。語義分析器輸出中會出現(xiàn)intofloat運算。=(id,
22、a)(id,b)20*(id,c)+inttofloat1.3.3 語義分析及中間代碼生成程序 42例如表達式 (a+b)*(c+d)翻譯成四元式的中間代碼如下:(+ , a , b , t1)(+ , c , d , t2)(* , t1 , t2 , t3)例如表達式 (a+b)*(c+d)翻譯成三地址碼的中間代碼如下:t1= a +b t2= c + d t3= t1 * t2 1.3.3 語義分析及中間代碼生成程序 43例如表達式 (a+b)*(c+d)翻譯成四元式的中間代碼如下:(+ , a , b , t1)(+ , c , d , t2)(* , t1 , t2 , t3)LOA
23、D a 將a的內(nèi)容加載到操作數(shù)棧LOAD b 將a的內(nèi)容加載到操作數(shù)棧ADD 將操作數(shù)棧頂?shù)膬蓚€單元的內(nèi)容相加STO t1 將操作數(shù)棧頂?shù)膬?nèi)容存入單元t1LOAD c 將c的內(nèi)容加載到操作數(shù)棧LOAD d 將d的內(nèi)容加載到操作數(shù)棧ADD 將操作數(shù)棧頂?shù)膬蓚€單元的內(nèi)容相加STO t2 將操作數(shù)棧頂?shù)膬?nèi)容存入單元t2LOAD t1 將t1的內(nèi)容加載到操作數(shù)棧LOAD t2 將t2的內(nèi)容加載到操作數(shù)棧MULT 將操作數(shù)棧頂?shù)膬蓚€單元的內(nèi)容相乘 STO t3將操作數(shù)棧頂?shù)膬?nèi)容存入單元t3 翻譯成某個抽象機的匯編指令代碼:1.3.3 語義分析及中間代碼生成程序 441.3.4 代碼優(yōu)化 經(jīng)過語義分析后,
24、編譯程序?qū)⒃闯绦蛏芍虚g代碼,這時的中間代碼往往有些重復(fù)和冗余。對代碼進行優(yōu)化的目的是提高目標(biāo)程序的執(zhí)行效率。代碼優(yōu)化首先在中間代碼上進行。在局部范圍可能做的優(yōu)化有常數(shù)表達式的計算或根據(jù)操作符的某些性質(zhì)如可結(jié)合性、可交換性和分配性以及檢測公共子表達式進行優(yōu)化 有四元式指令代碼如下:(*,3.14,2,t1)(=, t1, _, x)(*, 2, 5, t2)(*, t2, a, t3)(=, t3, _, y)(+, x, 1, t4)(=, t4, _, z) 而優(yōu)化后的代碼如下:(=, 6.28, _, x)(*, 10, a, y)(=, 7.28, _, z) 代碼優(yōu)化不是編譯程序的必
25、要組成部分,不同的編譯程序所進行的代碼優(yōu)化程度差別很大,能夠完成代碼優(yōu)化的編譯程序稱為“優(yōu)化編譯程序”。 451.3.5 目標(biāo)代碼生成 編譯的最后一步是將中間代碼生成特定機器上的低級語言代碼。這部分與機器類型有關(guān),對程序中的每個變量指定寄存器或內(nèi)存存貯單元,把中間代碼的指令翻譯成等價的某種類型機器的機器指令代碼或匯編指令代碼。 t1=c*20.0a=b+t1LDF R2, cMULF R2, #20.0LDF R1, bADDF R1, R2STF a ,R1461.3.6 符號表管理 編譯過程中要記錄源程序中出現(xiàn)的標(biāo)識符,并收集每個標(biāo)識符的各種屬性信息。在詞法分析中,對所有的標(biāo)識符都用一個統(tǒng)
26、一的符號表示,那么這個符號代表的標(biāo)識符是變量名、函數(shù)名還是其它對象名稱呢?如果是變量名,那么變量的類型是什么?如果是函數(shù)名,那么編譯程序怎么知道參數(shù)的個數(shù)、類型及函數(shù)返回值的類型等信息呢?為此需要建立一個符號表記錄有關(guān)標(biāo)識符的各種信息。標(biāo)識符的各種屬性是在編譯的不同階段填入符號表的。詞法分析階段只能分析出標(biāo)識符名,語法分析階段只能判斷標(biāo)識符在語句中出現(xiàn)是否合法,只有到了語義分析階段,才能將標(biāo)識符的各種屬性填入符號表并使用這些屬性生成中間代碼。 標(biāo)識符名標(biāo)識符類型 類型 地址 aaa1(表示變量) 1(表示整型) 0001 471.3.7 錯誤處理 編譯的各個階段都可能發(fā)現(xiàn)源程序中的錯誤。詞法分
27、析可以檢測出源程序中的非法符號,就好比自然語言語句中的出現(xiàn)的錯字、錯詞。語法分析能夠發(fā)現(xiàn)程序語句中的各種語法錯誤,如括號不匹配等等。語義分析能判斷運算對象的類型是否匹配、變量是否重復(fù)聲明或沒聲明就使用等錯誤。任意時刻發(fā)現(xiàn)錯誤,都應(yīng)該報告錯誤信息,包括錯誤出現(xiàn)的位置、錯誤性質(zhì)等,為程序員調(diào)試程序提供方便。481.4 編譯程序的結(jié)構(gòu) 在設(shè)計和實現(xiàn)編譯程序時,要考慮編譯程序分“遍”的問題。所謂一“遍”是指編譯程序在編譯時把源程序或中間形式從頭到尾掃描一遍,并做相關(guān)的處理,生成新的中間形式或目標(biāo)代碼。在一遍掃描中,可完成編譯程序五個任務(wù)中的一個或幾個。采用不同的分遍方式,編譯程序的結(jié)構(gòu)也有所不同。 4
28、91.4.1 單遍編譯程序 詞法分析 源程序 取單詞 目標(biāo)程序 開始 語法分析 語義分析及代碼生成 送單詞 圖單遍編譯程序結(jié)構(gòu) 501.4.1 單遍編譯程序 單遍編譯程序只對源程序進行一遍掃描,就完成編譯的各項任務(wù),產(chǎn)生目標(biāo)代碼。在單遍編譯程序中,往往以語法分析程序為中心,詞法分析和語義分析作為語法分析的子程序。其工作過程如下:當(dāng)語法分析需要讀進一個新單詞時,就調(diào)用詞法分析子程序。詞法分析子程序則從源程序中依次讀入字符,組合成單詞符號,并將單詞符號返回給語法分析程序。當(dāng)語法分析程序識別出一個語法成分時,就調(diào)用語義分析子程序進行語義分析,并生成目標(biāo)程序。當(dāng)源程序處理完后,進行善后處理,優(yōu)化目標(biāo)程序。511.4.2 多遍編譯程序詞法分析 語法分析 語義分析 代碼優(yōu)化目標(biāo)代碼生成分
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年外科護理工作計劃報告
- 2025屆重慶南開中學(xué)中考生物考試模擬沖刺卷含解析
- 山東省棗莊市山亭區(qū)重點達標(biāo)名校2025屆中考生物四模試卷含解析
- 江蘇省蘇州市張家港市梁豐中學(xué)2025屆中考沖刺卷生物試題含解析
- 電子商務(wù)產(chǎn)業(yè)園合作協(xié)議2024濟南
- 學(xué)校場地租用協(xié)議書
- 汽柴油銷售合同范本
- 登高作業(yè)服務(wù)合同年
- 的委托貸款合同
- 事業(yè)單位保密協(xié)議年
- 2025年上半年山東氣象局應(yīng)屆高校畢業(yè)生招考易考易錯模擬試題(共500題)試卷后附參考答案
- 第二單元 主題活動三《世界那么大我想去看看》(說課稿)-2023-2024學(xué)年六年級下冊綜合實踐活動內(nèi)蒙古版
- 人教版2024-2025學(xué)年八年級上學(xué)期數(shù)學(xué)期末壓軸題練習(xí)
- 【人教版化學(xué)】必修1 知識點默寫小紙條(答案背誦版)
- 江蘇省無錫市2023-2024學(xué)年八年級上學(xué)期期末數(shù)學(xué)試題(原卷版)
- 全國第三屆職業(yè)技能大賽(無人機駕駛(植保)項目)選拔賽理論考試題庫(含答案)
- 《奧特萊斯業(yè)態(tài)淺析》課件
- 2022年湖南省公務(wù)員錄用考試《申論》真題(縣鄉(xiāng)卷)及答案解析
- 國家安全教育課程教學(xué)大綱分享
- 紡織廠各工種考核細(xì)則
評論
0/150
提交評論