版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1第1頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三教材:編譯原理,張素琴、呂映芝、蔣維杜,戴桂蘭,清華大學(xué)出版社,2005年出版參考書(shū):編譯原理學(xué)習(xí)與解題指南,伍春香,華中科技大學(xué)出版社編譯原理,陳意云、張昱,高等教育出版社, 2003編譯原理習(xí)題精選陳意云、張昱,中國(guó)科大出版社編譯原理-學(xué)習(xí)指導(dǎo)與典型題解析,劉春林等,國(guó)防出版社編譯原理基礎(chǔ)-習(xí)題與上機(jī)題解答,劉堅(jiān)等,西安電子科技大學(xué)出版社程序設(shè)計(jì)語(yǔ)言編譯原理,陳火旺,國(guó)防工業(yè)出版社,1994年出版2第2頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三編譯原理 Compilers: Principles, Techni
2、ques, and ToolsDragon book-a classic textbook3第3頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三課程簡(jiǎn)介學(xué)分:2學(xué)時(shí):周:2節(jié)課考核方法: 考試70%+平時(shí)成績(jī)30%期末考試: 筆試 90分鐘 百分制平時(shí)成績(jī): 作業(yè)、到課率、隨堂測(cè)驗(yàn)等 這是一門(mén)計(jì)算機(jī)專(zhuān)業(yè)學(xué)位課,計(jì)算機(jī)專(zhuān)業(yè)碩士學(xué)位知識(shí)點(diǎn)。大家可以學(xué)好,對(duì)將來(lái)的工作有用。4第4頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三對(duì)大家的希望上課:希望每次課都能到,每節(jié)課內(nèi)容都聽(tīng)完整課堂:認(rèn)真聽(tīng)課,積極思考,踴躍提問(wèn),不要影響別人作業(yè):先復(fù)習(xí)再做作業(yè),認(rèn)真獨(dú)立完成;及時(shí)交作業(yè)反饋:及
3、時(shí)反饋教學(xué)效果,以便提高教學(xué)質(zhì)量5第5頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三第一章引論6第6頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三【課前思考】 什么是編譯程序 編譯過(guò)程和編譯程序的結(jié)構(gòu) 為什么要學(xué)習(xí)編譯程序 【學(xué)習(xí)目標(biāo)】 明確編譯程序的功能及其在計(jì)算機(jī)系統(tǒng)中的作用。 了解源語(yǔ)言程序被編譯為目標(biāo)程序的整個(gè)過(guò)程,這個(gè)過(guò)程一般劃分為哪些階段。 知道編譯技術(shù)可用于哪類(lèi)軟件的設(shè)計(jì)和開(kāi)發(fā)。 7第7頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三【學(xué)習(xí)指南】編譯程序又稱為編譯器,編譯器產(chǎn)生于20世紀(jì)60年代,在計(jì)算機(jī)科學(xué)技術(shù)的發(fā)展歷史中發(fā)揮了巨大作用,是開(kāi)發(fā)
4、計(jì)算機(jī)應(yīng)用系統(tǒng)不可缺少的重要工具。編譯程序一般由詞法分析程序、語(yǔ)法分析程序、語(yǔ)義分析程序、中間代碼生成程序、目標(biāo)代碼生成程序、代碼優(yōu)化程序、表格管理程序和出錯(cuò)處理程序等成分構(gòu)成。通過(guò)課程的學(xué)習(xí)應(yīng)掌握各個(gè)成分的功能和設(shè)計(jì)原則,以及在編譯階段的邏輯關(guān)系。理解他們?cè)鯓幼鳛橐粋€(gè)整體完成編譯任務(wù)的。另外還應(yīng)該通過(guò)學(xué)習(xí)培養(yǎng)科學(xué)精神?!倦y重點(diǎn)】應(yīng)該說(shuō),本章沒(méi)有難以理解的內(nèi)容,主要對(duì)編譯程序的功能和結(jié)構(gòu)做一綜述。 【知識(shí)結(jié)構(gòu)】 8第8頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三9第9頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三這一章準(zhǔn)備講三個(gè)問(wèn)題: 什么是編譯程序 編譯程序工作的6
5、個(gè)階段 編譯程序?qū)崿F(xiàn)的途徑10第10頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三一:什么是編譯程序 簡(jiǎn)而言之, 編譯程序就是一種語(yǔ)言翻譯程序。定義:所謂翻譯程序,是指這樣一個(gè)程序,它能將高級(jí)程序設(shè)計(jì)語(yǔ)言程序翻譯成邏輯等價(jià)的低級(jí)語(yǔ)言(匯編語(yǔ)言,機(jī)器語(yǔ)言) 程序。源程序編譯程序目標(biāo)程序(*.C / *.PAS)(*.OBJ / *.EXE)11第11頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三 它把高級(jí)語(yǔ)言寫(xiě)的各種程序翻譯成為可以在計(jì)算機(jī)上執(zhí)行的程序。編譯程序作為一個(gè)語(yǔ)言翻譯軟件,也要在翻譯過(guò)程中檢查源程序的語(yǔ)法和語(yǔ)義,報(bào)告一些出錯(cuò)和警告信息,幫助程序員更正源程序。 編
6、譯程序?qū)儆谙到y(tǒng)軟件,居于計(jì)算機(jī)系統(tǒng)中最靠近硬件的一層。其它軟件一般都通過(guò)系統(tǒng)軟件發(fā)揮作用。12第12頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三為什么要學(xué)習(xí)編譯對(duì)編程語(yǔ)言的設(shè)計(jì)和實(shí)現(xiàn)有深刻的理解,才能寫(xiě)出更好的程序課程所介紹的許多概念和技術(shù)能應(yīng)用到一般的軟件設(shè)計(jì)之中本課程融合了數(shù)據(jù)結(jié)構(gòu)、算法、自動(dòng)機(jī)理論、程序設(shè)計(jì)、體系結(jié)構(gòu)等多門(mén)學(xué)科的知識(shí),有助于大家對(duì)計(jì)算機(jī)科學(xué)的理解13第13頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三T型圖:一個(gè)編譯軟件,實(shí)際涉及三種語(yǔ)言源語(yǔ)言:Source Language目標(biāo)語(yǔ)言:Target or Object Language實(shí)現(xiàn)語(yǔ)言:I
7、mplementation L常常使用T型圖來(lái)表示的一個(gè)編譯器涉及的三個(gè)語(yǔ)言14第14頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三二:編譯程序工作的6個(gè)階段詞法分析器語(yǔ)法分析器語(yǔ)義分析器源程序中間代碼生成器代碼優(yōu)化器代碼生成器目標(biāo)程序出錯(cuò)管理器符號(hào)表管理器 15第15頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三1:詞法分析階段的任務(wù)是: 輸入源程序,對(duì)形成源程序的字符串進(jìn)行掃描和分析,識(shí)別出一個(gè)個(gè)具有獨(dú)立意義的最小詞法單位單詞,為下一階段語(yǔ)法分析打基礎(chǔ)。單詞:最小的語(yǔ)義單位,包括:關(guān)鍵字(保留字或基本字),標(biāo)識(shí)符,常數(shù),運(yùn)算符,界限符等等。詞法分析程序工作過(guò)程,如下
8、圖所示: 字符串詞法分析程序記號(hào)流 符號(hào)表處理 出錯(cuò)處理16第16頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三符 號(hào) 表 positioninitialrate. . . . . . .123詞法分析器id1 := id2 + id3 * 60 position := initial + rate * 6017第17頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三2:語(yǔ)法分析階段 語(yǔ)法分析的任務(wù)是在詞法分析的基礎(chǔ)上將單詞串(詞法記號(hào)流)依照源語(yǔ)言的語(yǔ)法結(jié)構(gòu)(語(yǔ)法規(guī)則)按層次分組,以形成各種類(lèi)型的語(yǔ)法短語(yǔ)(如程序,語(yǔ)句 ,表達(dá)式等)因此語(yǔ)法分析也稱為層次分析。 簡(jiǎn)而言之語(yǔ)
9、法分析是依據(jù)源語(yǔ)言的語(yǔ)法規(guī)則,確定單詞串是否構(gòu)成一個(gè)形式上正確的程序。 18第18頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三根據(jù):語(yǔ)法規(guī)則任務(wù): 把單詞符號(hào)分解為各類(lèi)語(yǔ)法單位,以確定輸入串語(yǔ)法是否正確;對(duì)語(yǔ)法錯(cuò)誤,進(jìn)行出錯(cuò)處理。語(yǔ)法單位:我們最終感興趣的東西。如:表達(dá)式,子句,句子,程序段,程序等。19第19頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三任何一個(gè)標(biāo)識(shí)符都是表達(dá)式;任何一個(gè)數(shù)都是表達(dá)式;如果e1和e2都是表達(dá)式,那么 e1 + e2 e1 * e2 (e1)也都是表達(dá)式表達(dá)式表達(dá)式表達(dá)式標(biāo)識(shí)符表達(dá)式表達(dá)式(initial)標(biāo)識(shí)符(rate)數(shù)(60)*
10、+20第20頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三符 號(hào) 表 positioninitialrate. . . . . . .123語(yǔ)法分析器id1 := id2 + id3 * 60 :=+*60id1id2id321第21頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三3:語(yǔ)義分析階段 語(yǔ)義是程序設(shè)計(jì)語(yǔ)言中按照語(yǔ)法規(guī)則所構(gòu)成各個(gè)語(yǔ)法成分的意義,語(yǔ)義分析階段的任務(wù)是檢查源程序有無(wú)語(yǔ)義錯(cuò)誤,以保證程序各部分能有意義地組織在一起,并為以后的代碼生成階段收集類(lèi)型信息。22第22頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三符 號(hào) 表 positionini
11、tialrate. . . . . . .123語(yǔ)義分析器:=+*60id1id2id3:=+*60id1id2id3inttoreal23第23頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三Program p() var rate:real procedure initial . . . position:=initial+rate*60 /*error*/24第24頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三詞法分析器語(yǔ)法分析器語(yǔ)義分析器源程序中間代碼生成器代碼優(yōu)化器代碼生成器目標(biāo)程序出錯(cuò)管理器符號(hào)表管理器 前三個(gè)階段完成對(duì)源程序的分析25第25頁(yè),共86頁(yè),20
12、22年,5月20日,12點(diǎn)19分,星期三4: 中間代碼生成階段 所謂中間代碼是一種結(jié)構(gòu)簡(jiǎn)單含義明確的記號(hào)系統(tǒng),它有二個(gè)特點(diǎn): 易于產(chǎn)生 易于翻譯為目標(biāo)程序 常見(jiàn)的中間代碼有四元式,三元式,間接三元式,逆波蘭表示等記號(hào)系統(tǒng) 26第26頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三符 號(hào) 表 positioninitialrate. . . . . . .123中間代碼生成器temp1 := inttoreal(60)temp2 := id3 * temp1temp3 := id2 + temp2id1 := temp3:=+*60id1id2id3inttoreal27第27頁(yè),共8
13、6頁(yè),2022年,5月20日,12點(diǎn)19分,星期三5: 代碼優(yōu)化階段 代碼優(yōu)化階段試圖改進(jìn)中間代碼,對(duì)前一階段生成的中間代碼進(jìn)行處理工作 ,即優(yōu)化工作 .目的是為了最后產(chǎn)生更有效的目標(biāo)代碼6:目標(biāo)代碼生成階段 編譯的最后一個(gè)階段是目標(biāo)代碼生成。目標(biāo)代碼生成階段的任務(wù)是把中間代碼變換成特定機(jī)器上的指令代碼或匯編碼。28第28頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三符 號(hào) 表 positioninitialrate. . . . . . .123代碼優(yōu)化器temp1 := inttoreal(60)temp2 := id3 * temp1temp3 := id2 + temp2i
14、d1 := temp3temp1 := id3 * 60.0id1 := id2 * temp129第29頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三符 號(hào) 表 positioninitialrate. . . . . . .123temp1 := id3 * 60.0id1 := id2 * temp1代碼生成器MOVF id3, R2MULF #60.0, R2MOVF id2, R1ADDF R2, R1MOVF R1, id130第30頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三 目標(biāo)代碼生成階段的工作很復(fù)雜, 涉及到硬件系統(tǒng)功能部件的應(yīng)用,機(jī)器指令的選擇,
15、各種數(shù)據(jù)類(lèi)型變量的存儲(chǔ)空間分配以及寄存器管理。 編譯器另外兩個(gè)工作是表格管理和出錯(cuò)處理 31第31頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三詞法分析器語(yǔ)法分析器語(yǔ)義分析器源程序中間代碼生成器代碼優(yōu)化器代碼生成器目標(biāo)程序出錯(cuò)管理器符號(hào)表管理器 后三個(gè)階段對(duì)源程序進(jìn)行綜合32第32頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三詞法分析器語(yǔ)法分析器語(yǔ)義分析器源程序中間代碼生成器代碼優(yōu)化器代碼生成器目標(biāo)程序出錯(cuò)管理器符號(hào)表管理器 33第33頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三編譯程序的工作過(guò)程詞法分析:必要語(yǔ)法分析:必要語(yǔ)義分析:必要中間代碼生成:可選
16、優(yōu)化:可選目標(biāo)代碼生成:必要34第34頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三三:編譯器實(shí)現(xiàn)的途徑1:手工構(gòu)造:用機(jī)器語(yǔ)言,匯編語(yǔ)言或高級(jí)程序設(shè)計(jì)語(yǔ)言編寫(xiě)。2:自動(dòng)構(gòu)造工具:lex , yacc3:自展方式, 利用一系列自展途徑而形成編譯程序的過(guò)程。 自展方式舉例:C語(yǔ)言有二個(gè)子集C1屬于C2,用自展方式構(gòu)造PC機(jī)上的C語(yǔ)言的編譯程序。 第一步:三個(gè)任務(wù),用PC機(jī)的匯編語(yǔ)言構(gòu)造C1的編譯程序A;用C1語(yǔ)言構(gòu)造C2的編譯程序B;用C2構(gòu)造C的編譯程序C;A35第35頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三第二步:用B在A上編譯,得到C2的編譯程序D;BCD36
17、第36頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三第三步:用C在D上編譯,得到C的編譯程序E。完成自展,構(gòu)造了PC機(jī)上C語(yǔ)言的編譯程序。 4:移植方式:利用一個(gè)具有自編譯性的高級(jí)語(yǔ)言編輯另一個(gè)高級(jí)語(yǔ)言的編譯程序,例如在A機(jī)上已有C語(yǔ)言的編譯程序,希望實(shí)現(xiàn)PASCAL語(yǔ)言的編譯程序。已知:在A機(jī)上已有C語(yǔ)言的編譯程序E37第37頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三用C語(yǔ)言構(gòu)造PASCAL語(yǔ)言的編譯程序,然后將它在A機(jī)上編譯,就能得到PASCAL語(yǔ)言的編譯程序。已知 構(gòu)造移植38第38頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三四:補(bǔ)充講解幾個(gè)概念
18、 1:編譯器和解釋器的區(qū)別 編譯器:把源程序翻譯成計(jì)算機(jī)的機(jī)器指令代碼序列,生成目標(biāo)程序。解釋器:按源程序的邏輯流程邊解釋邊執(zhí)行,不生成目標(biāo)程序。 2:編譯器的前端與后端 前端只依賴于源語(yǔ)言,由幾乎獨(dú)立于目標(biāo)機(jī)器的階段或階段的一部分組成。39第39頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三 后端是指編譯器中依賴于目標(biāo)機(jī)器的部分,它們一般獨(dú)立于源語(yǔ)言,而與中間代碼有關(guān)。 前端:完成分析工作(機(jī)器無(wú)關(guān)) 詞法分析:識(shí)別各個(gè)最小語(yǔ)法單位。語(yǔ)法分析:識(shí)別出各個(gè)語(yǔ)法結(jié)構(gòu)。 語(yǔ)義分析:確定類(lèi)型,類(lèi)型/運(yùn)算合法性 檢查,識(shí)別含義和相應(yīng)處 理,靜態(tài)語(yǔ)義檢查。 中間代碼生成。 優(yōu)化:改善目標(biāo)代碼
19、質(zhì)量。 后端:完成綜合工作(機(jī)器相關(guān)) 目標(biāo)代碼生成40第40頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三3:遍的概念:簡(jiǎn)而言之遍是指對(duì)源程序從頭到尾掃描,并完成規(guī)定任務(wù)的過(guò)程。一“遍”: 對(duì)于源程序或目標(biāo)代碼程序,從頭到尾掃描一次并完成所規(guī)定的工作稱為一“遍”。每遍的工作,由從外存上獲得前一遍的工作結(jié)果開(kāi)始,到完成它所含的有關(guān)階段程序的工作,把結(jié)果紀(jì)錄于外存上為止。 影響分“遍”的因素:內(nèi)存,編譯功能,源語(yǔ)言繁簡(jiǎn),目標(biāo)代碼優(yōu)化程序等等。一遍編譯程序:同時(shí)駐留內(nèi)存,各部門(mén)之間“調(diào)用連接”。多遍編譯程序:每遍的輸出結(jié)果是下遍的輸入對(duì)象。本章作業(yè):1,2,3,441第41頁(yè),共86頁(yè)
20、,2022年,5月20日,12點(diǎn)19分,星期三【本章小結(jié)】1.從功能上說(shuō)編譯程序是一個(gè)翻譯程序,將高級(jí)語(yǔ)言的程序翻譯成低級(jí)語(yǔ)言的程序。2.以源程序在編譯過(guò)程中的不同表示形式初步理解編譯各階段的工作。3.不會(huì)有很多人會(huì)從事設(shè)計(jì)和編寫(xiě)編譯程序的工作的,但編譯技術(shù)會(huì)應(yīng)用在很多領(lǐng)域。4.有關(guān)術(shù)語(yǔ):源語(yǔ)言,源程序,目標(biāo)語(yǔ)言,目標(biāo)程序,語(yǔ)言轉(zhuǎn)換系統(tǒng),編譯程序的T型圖表示。42第42頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三5、課程特點(diǎn)強(qiáng)調(diào)對(duì)編譯原理和技術(shù)的宏觀理解,不偏向于某種源語(yǔ)言或目標(biāo)機(jī)器重視原理、算法和技術(shù),以及具體實(shí)現(xiàn)43第43頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星
21、期三1.1 What are compilers?C7 06 0000 0002machine languagemov X, 2Assembly languageX = 2C language程序設(shè)計(jì)語(yǔ)言高級(jí)語(yǔ)言匯編語(yǔ)言機(jī)器語(yǔ)言在計(jì)算機(jī)上如何執(zhí)行一個(gè)高級(jí)語(yǔ)言程序?把高級(jí)語(yǔ)言程序翻譯成機(jī)器語(yǔ)言程序運(yùn)行所得的機(jī)器語(yǔ)言程序求得計(jì)算結(jié)果44第44頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三Compile, compilercompile: collect (information) and arrange編譯器是一個(gè)程序,讀入源程序并將其翻譯成等價(jià)的目標(biāo)程序,并且能夠向用戶報(bào)告被編譯的源
22、程序中出現(xiàn)的錯(cuò)誤。CompilerSource programTarget programError message45第45頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三程序的等價(jià)程序的等價(jià):若兩個(gè)程序P1和P2所允許的輸入集合相同,且對(duì)相同的輸入,均產(chǎn)生相同的輸出,則稱程序P1和P2等價(jià)。狹義看法:通常,源程序是用某種高級(jí)語(yǔ)言編寫(xiě)的,而目標(biāo)程序是用目標(biāo)代碼或機(jī)器代碼編寫(xiě)的。廣義看法:程序變換,翻譯器(translator)C+C; Pascal C;46第46頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三翻譯器 translator翻譯:在不改變語(yǔ)義的條件下,把某種
23、語(yǔ)言的源程序轉(zhuǎn)換成另一種語(yǔ)言程序目標(biāo)語(yǔ)言程序,稱為翻譯。執(zhí)行翻譯的軟件,稱為翻譯程序。源程序 翻譯程序 目標(biāo)程序47第47頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三翻譯和解釋解釋在一種語(yǔ)言的機(jī)器上,直接執(zhí)行用另一種語(yǔ)言寫(xiě)的程序的過(guò)程,稱為解釋。實(shí)現(xiàn)解釋的軟件,稱為解釋程序。接受某高級(jí)語(yǔ)言的一個(gè)語(yǔ)句輸入,進(jìn)行解釋并控制計(jì)算機(jī)執(zhí)行,馬上得到這句的執(zhí)行結(jié)果,然后再接受下一句。48第48頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三解釋和編譯解釋以源程序作為輸入,不產(chǎn)生目標(biāo)程序,一邊解釋一邊執(zhí)行。優(yōu)點(diǎn):直觀易懂,結(jié)構(gòu)簡(jiǎn)單,易于實(shí)現(xiàn)人機(jī)對(duì)話缺點(diǎn):效率低編譯由高級(jí)語(yǔ)言轉(zhuǎn)換為低級(jí)
24、語(yǔ)言,然后對(duì)編譯出來(lái)的目標(biāo)程序進(jìn)行運(yùn)行計(jì)算49第49頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三翻譯程序與解釋程序的本質(zhì)區(qū)別本質(zhì)區(qū)別是輸出不同:翻譯程序的輸出是與源程序等價(jià)的目標(biāo)程序;解釋程序?qū)嶋H是一臺(tái)虛擬機(jī),其輸出是被執(zhí)行程序所定義的輸出結(jié)果。50第50頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三1.1.1 分析綜合模型Analysis-Synthesis ModelTwo parts of compilation:Analysis : Decompose Source into an intermediate representationSynthesis: T
25、arget program generation from representation51第51頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三1.1.2 The context of a compilerPreprocessorSkeletal source program 52第52頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三1.2 Analysis of the source programAnalysis consists of three phases詞法分析Lexical analysis / Linear analysis / Scanning語(yǔ)法分析S
26、yntax analysis / Hierarchical analysis / Parsing語(yǔ)義分析Semantic analysis53第53頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三詞法分析(Lexical analysis)詞法分析程序又稱掃描程序。是編譯過(guò)程的第一個(gè)階段,其任務(wù)是:讀源程序的字符流、識(shí)別單詞(如標(biāo)識(shí)符、整數(shù)、界限符等),并轉(zhuǎn)換成內(nèi)部形式。輸入:源程序中的字符流輸出:tokens(或稱為words)54第54頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三詞法分析舉例Pascal賦值語(yǔ)句position := initial + rate *
27、 60would be grouped into the following tokens:Identifier positionAssignment symbol :=Identifier initial Plus sign +Identifier rateMultiplication sign *Number 60分隔這些記號(hào)的空格被刪除。(注釋也可以在詞法分析中處理。)55第55頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三詞法分析舉例一個(gè)C源程序片段:int a;a=a+2;詞法分析后返回(如右圖): 單詞類(lèi)型 單詞值保留字 int標(biāo)識(shí)符 a界符 ;標(biāo)識(shí)符 a算符(賦值)
28、=標(biāo)識(shí)符 a算符(加) +整數(shù) 2界符;56第56頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三語(yǔ)法分析(Syntax analysis)語(yǔ)法分析程序又稱識(shí)別程序。功能:讀入由詞法分析程序識(shí)別出的符號(hào),根據(jù)給定語(yǔ)法規(guī)則,識(shí)別出各個(gè)語(yǔ)法結(jié)構(gòu)(檢查語(yǔ)法的正確性),并生成另一種內(nèi)部表示。輸入:由詞法分析程序識(shí)別出并轉(zhuǎn)換的符號(hào)輸出:另一種內(nèi)部表示,如語(yǔ)法分析樹(shù)或其它中間表示。57第57頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三assignment statementidentifier:=expressionpositionexpressionexpression+expr
29、essionexpression*identifiernumberrate60identifierinitialParse tree語(yǔ)法分析58第58頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三Syntax tree is a compressed representation of the parse tree.:=position+*rate60initial59第59頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三語(yǔ)義分析(Semantic analysis)對(duì)語(yǔ)法分析樹(shù)或其他內(nèi)部中間表示進(jìn)行靜態(tài)語(yǔ)義檢查,并生成目標(biāo)代碼或中間代碼。確定類(lèi)型類(lèi)型檢查識(shí)別含義與相應(yīng)的
30、語(yǔ)義處理其它靜態(tài)語(yǔ)義檢查為了優(yōu)化,往往先生成內(nèi)部中間表示代碼:如逆波蘭表示、三元式序列、四元式序列,或者抽象語(yǔ)法樹(shù)。60第60頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三語(yǔ)義分析錯(cuò)在哪里?例1: int arr2, c; c = arr1 * 10; 例2: Program p(input,output); Var rate: real; procedure initial; position := initial + rate*6061第61頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三Semantic analysis inserts a conversion f
31、rom integer to real.:=position+*rate60initialinttoreal插入語(yǔ)義處理結(jié)點(diǎn)的語(yǔ)法樹(shù)62第62頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三1.3 The phases of a compilerSource ProgramLexical AnalyzerSyntax AnalyzerSemantic AnalyzerIntermediate Code GeneratorCode OptimizerCode GeneratorTarget ProgramSymbol-table ManagerError Handler63第63頁(yè),共
32、86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三編譯程序的結(jié)構(gòu)框圖詞法分析器語(yǔ)法分析器語(yǔ)義分析器源程序中間代碼生成器代碼優(yōu)化器代碼生成器目標(biāo)程序出錯(cuò)管理器符號(hào)表管理器64第64頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三符 號(hào) 表 positioninitialrate. . . . . . .123詞法分析器id1 := id2 + id3 * 60 position := initial + rate * 60lexical analyzer65第65頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三符 號(hào) 表 positioninitialrate. . . .
33、 . . .123語(yǔ)法分析器id1 := id2 + id3 * 60 :=+*60id1id2id3Syntax Analyzer66第66頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三符 號(hào) 表 positioninitialrate. . . . . . .123語(yǔ)義分析器:=+*60id1id2id3:=+*60id1id2id3inttorealSemantic Analyzer67第67頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三符 號(hào) 表 positioninitialrate. . . . . . .123中間代碼生成器temp1 := inttore
34、al(60)temp2 := id3 * temp1temp3 := id2 + temp2id1 := temp3:=+*60id1id2id3inttorealIntermediate Code Generator68第68頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三符 號(hào) 表 positioninitialrate. . . . . . .123代碼優(yōu)化器temp1 := inttoreal(60)temp2 := id3 * temp1temp3 := id2 + temp2id1 := temp3temp1 := id3 * 60.0id1 := id2 + temp1
35、Code Optimizer69第69頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三符 號(hào) 表 positioninitialrate. . . . . . .123temp1 := id3 * 60.0id1 := id2 + temp1代碼生成器MOVF id3, R2MULF #60.0, R2MOVF id2, R1ADDF R2, R1MOVF R1, id1Code Generator70第70頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三分析 將源程序正文轉(zhuǎn)換為內(nèi)部表示,并收集和確定各結(jié)構(gòu)成分之間的相關(guān)信息。(1)詞法分析:將字符序列轉(zhuǎn)換為單詞序列。(2)
36、語(yǔ)法分析:將單詞序列重組為程序結(jié)構(gòu) (通常表示為分析樹(shù))。(3)語(yǔ)義分析:確定各語(yǔ)法成分之間的對(duì)應(yīng)關(guān)系和一致性,如標(biāo)識(shí)符的作用域、類(lèi)型匹配等等。71第71頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三綜合根據(jù)源程序的語(yǔ)法結(jié)構(gòu)和語(yǔ)義信息,生成目標(biāo)代碼。中間代碼生成:中間語(yǔ)言的形式與匯編語(yǔ)言相近,比較簡(jiǎn)單,且與具體機(jī)器無(wú)關(guān),便于代碼的優(yōu)化和移植。代碼優(yōu)化:改善代碼的時(shí)空效率,如常數(shù)表達(dá)式求值,公共子表達(dá)式優(yōu)化,循環(huán)語(yǔ)句中的不變表達(dá)式外提,削減運(yùn)算強(qiáng)度等等。代碼生成:生成等價(jià)的匯編或機(jī)器語(yǔ)言程序。 72第72頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三符號(hào)表管理符號(hào)表存放與
37、單詞有關(guān)的信息,如標(biāo)識(shí)符的類(lèi)型、地址,常數(shù)的值等等。符號(hào)表的管理包括表的生成、填寫(xiě)、查閱、刪除等。73第73頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三錯(cuò)誤處理單詞錯(cuò)語(yǔ)法錯(cuò)語(yǔ)義錯(cuò)(如多重定義、類(lèi)型不匹配)環(huán)境錯(cuò)(如數(shù)組太大、名字太長(zhǎng))溢出外設(shè)錯(cuò)誤(I/O錯(cuò))訪問(wèn)內(nèi)存越界編譯錯(cuò)誤運(yùn)行錯(cuò)誤邏輯錯(cuò)誤錯(cuò)誤分類(lèi)74第74頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三1.4 Compiler CousinsPreprocessors : Provide Input to CompilersMacro ProcessingFile InclusionRational PreprocessorsLanguage Extensions for a Database SystemAssemblersLoaders and Link-Editors75第75頁(yè),共86頁(yè),2022年,5月20日,12點(diǎn)19分,星期三1.5 The Grouping of Phases編譯各階段的組合相關(guān)概念:前端、后端遍(pass)76
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年廣西國(guó)際商務(wù)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)含答案詳解
- 2026年內(nèi)蒙古體育職業(yè)學(xué)院?jiǎn)握新殬I(yè)傾向性考試題庫(kù)附答案詳解
- 2026年陜西航天職工大學(xué)單招職業(yè)技能考試題庫(kù)及參考答案詳解1套
- 2026年湖南鐵道職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)帶答案詳解
- 2026年衡陽(yáng)幼兒師范高等專(zhuān)科學(xué)校單招職業(yè)技能測(cè)試題庫(kù)及參考答案詳解一套
- 2026年湖南高速鐵路職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫(kù)及答案詳解1套
- 2026年云南輕紡職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)及答案詳解一套
- 四川省南充市嘉陵一中2024-2025學(xué)年高二上學(xué)期第二次月考(11月)物理試題含答案物理試題
- 修理廠會(huì)計(jì)面試題及答案
- 小區(qū)地庫(kù)施工用電安全協(xié)議書(shū)范本
- 工地大門(mén)施工協(xié)議書(shū)
- 文史哲與藝術(shù)中的數(shù)學(xué)智慧樹(shù)知到期末考試答案章節(jié)答案2024年吉林師范大學(xué)
- 鐵血將軍、建軍元?jiǎng)?葉挺 (1)講解
- 2023年西門(mén)子PLC知識(shí)考試題(附含答案)
- 鼻鼽(變應(yīng)性鼻炎)診療方案
- 消防應(yīng)急疏散和滅火演習(xí)技能培訓(xùn)
- 流產(chǎn)診斷證明書(shū)
- 勞動(dòng)合同英文版
- 川瀘運(yùn)地塊土石方量勘察報(bào)告報(bào)告
- 威廉姆斯內(nèi)分泌學(xué) 內(nèi)分泌學(xué)書(shū)籍
- GB/T 20933-2021熱軋鋼板樁
評(píng)論
0/150
提交評(píng)論