




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
教案
2006-2007學(xué)年第1學(xué)期
課程名稱:編譯原理
課程編號(hào):________________
學(xué)院、專業(yè)、年級(jí):計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院
任課教師:________________
教師所在單位:計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院
泰山學(xué)院
《編譯原理》教案
課程簡(jiǎn)介
編譯原理是計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)的一門重要專業(yè)課程。該課程的目的是讓學(xué)生掌握程序設(shè)計(jì)語言編譯
程序構(gòu)造的一般原理、基本設(shè)計(jì)方法、主要實(shí)現(xiàn)技術(shù)和一些自動(dòng)構(gòu)造工具,從而讓學(xué)生了解將高級(jí)程序設(shè)計(jì)
語言源程序翻譯成計(jì)算機(jī)能處理的目標(biāo)代碼語言的整個(gè)過程。該課程是理論性很強(qiáng)的課程,對(duì)于計(jì)算機(jī)專業(yè)
學(xué)生的進(jìn)一步深造有較大的促進(jìn)作用。同時(shí),該課程還可以提高學(xué)生計(jì)算機(jī)的專業(yè)素質(zhì),培養(yǎng)他們的軟件開
發(fā)能力和抽象思維能力,為進(jìn)一步深造打下基礎(chǔ)。課程主要內(nèi)容有:詞法分析、自頂向下語法分析、自底向
上語法分析、屬性文法和語法制導(dǎo)翻譯、存儲(chǔ)器管理、符號(hào)表的組織與管理、中間代碼優(yōu)化、代碼生成等內(nèi)
容。課程要求:了解編譯程序的構(gòu)造技術(shù):理解編譯原理的理論基礎(chǔ)即文法與形式語言概念;掌握各種詞法
分析、語法分析、語法制導(dǎo)翻譯、代碼優(yōu)化、存儲(chǔ)管理的方法和技巧;具備一定的設(shè)計(jì)相關(guān)語法分析器的能
力。
該課程是計(jì)算機(jī)專業(yè)中較難得一門專業(yè)課,有如下四個(gè)重點(diǎn),也是難點(diǎn):(1)自動(dòng)機(jī)理論(2)語法分
析(3)語法制導(dǎo)的翻譯(4)代碼優(yōu)化。
《編譯原理》教案
教學(xué)大綱
《編譯原理》教學(xué)大綱
課程名稱:編譯原理
英文名稱:ThePrincipleofCompilerDesign
課程編號(hào):
課程類別:專業(yè)課
學(xué)時(shí)數(shù):80學(xué)時(shí)
學(xué)分?jǐn)?shù):4
先修課程:高級(jí)程序設(shè)計(jì)語言、數(shù)據(jù)結(jié)構(gòu)、離散數(shù)學(xué)等
適用年級(jí):四年級(jí)
適用專業(yè):計(jì)算機(jī)科學(xué)與技術(shù)
一、內(nèi)容簡(jiǎn)介
該課程的研究對(duì)象是編譯程序構(gòu)造的一般原理、基本設(shè)計(jì)方法、主要實(shí)現(xiàn)技術(shù)和一些自動(dòng)構(gòu)造工具,從
而讓學(xué)生掌握將高級(jí)程序設(shè)計(jì)語言翻譯成計(jì)算機(jī)能處理的目標(biāo)代碼語言的整個(gè)過程。該課程的主要內(nèi)容為:
詞法分析、自頂向下語法分析、自底向上語法分析、屬性文法和語法制導(dǎo)翻譯、存儲(chǔ)器管理、符號(hào)表的組織
與管理、中間代碼優(yōu)化、代碼生成等內(nèi)容。
二、本課程的性質(zhì)、目的和任務(wù)
編譯原理是計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)的一門重要專業(yè)課程,其研究對(duì)象是編譯程序構(gòu)造的一般原理、基本
設(shè)計(jì)方法、主要實(shí)現(xiàn)技術(shù)和一些自動(dòng)構(gòu)造工具,從而讓學(xué)生掌握將高級(jí)程序設(shè)計(jì)語言翻譯成計(jì)算機(jī)能處理的
目標(biāo)代碼語言的整個(gè)過程。
通過該課程的學(xué)習(xí),使學(xué)生掌握編譯原理的基本理論和編譯程序的構(gòu)造技術(shù),為進(jìn)一步學(xué)習(xí)和深造打下
基礎(chǔ)。該課程的主要內(nèi)容有:詞法分析、自頂向下語法分析、自底向上語法分析、屬性文法和語法制導(dǎo)翻譯、
存儲(chǔ)器管理、符號(hào)表的組織與管理、中間代碼優(yōu)化、代碼生成等內(nèi)容。
通過各個(gè)教學(xué)環(huán)節(jié),逐步培養(yǎng)學(xué)生的抽象思維能力、程序設(shè)計(jì)能力和自學(xué)能力,培養(yǎng)學(xué)生運(yùn)用所學(xué)知識(shí)、
獨(dú)立解決較復(fù)雜問題的能力。
三、本課程與其它課程的關(guān)系
本課程是計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)的重要專業(yè)課。其先行課有高級(jí)程序設(shè)計(jì)語言、數(shù)據(jù)結(jié)構(gòu)、離散數(shù)學(xué)、
計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)、操作系統(tǒng)等。
課程基礎(chǔ)性、理論性強(qiáng),與相關(guān)課程的學(xué)習(xí)聯(lián)系密切,是計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)學(xué)生進(jìn)一步提高的基本
課程。
四、本課程的基本要求
了解編譯程序的構(gòu)造技術(shù);理解編譯原理的理論基礎(chǔ)即文法與形式語言概念;掌握各種詞法分析、語法
分析、語法制導(dǎo)翻譯、代碼優(yōu)化、存儲(chǔ)管理的方法和技巧;具備一定的設(shè)計(jì)相關(guān)語法分析器的能力。
五、課程內(nèi)容與學(xué)時(shí)分配
(一)編譯原理概論2學(xué)時(shí)
1、教學(xué)內(nèi)容:
什么是編譯原理
編譯過程概述
編譯程序的結(jié)構(gòu)
編譯階段的組合
編譯技術(shù)和軟件工具
2、教學(xué)要求:
了解:編譯技術(shù)和軟件工具。
掌握:什么是編譯原理,編譯程序的結(jié)構(gòu),編譯過程和六個(gè)階段的任務(wù)和組合。
(二)PL/O編譯程序的實(shí)現(xiàn)4學(xué)時(shí)
1、教學(xué)內(nèi)容:
PL/O語言描述:PL/O語言的語法描述圖;PL/O語言文法的EBNF表示
PL/O編譯程序的結(jié)構(gòu)
PL/O編譯程序的詞法分析
PL/O編譯程序的語法分析
PL/O編譯程序的目標(biāo)代碼結(jié)構(gòu)和代碼生成
PL/O編譯程序的語法錯(cuò)誤處理
PL/O編譯程序的目標(biāo)代碼解釋執(zhí)行時(shí)的存儲(chǔ)分配
2、教學(xué)要求:
了解:PL/O編譯程序的詞法分析、語法分析、目標(biāo)代碼結(jié)構(gòu)和代碼生成、語法錯(cuò)誤處理及目標(biāo)代碼解釋
執(zhí)行時(shí)的存儲(chǔ)分配。
掌握:PL/O語言的語法描述圖及文法的EBNF表示,PL/O編譯程序的結(jié)構(gòu)。
(三)文法和語言4學(xué)時(shí)
1、教學(xué)內(nèi)容:
文法的直觀概念
符號(hào)和符號(hào)串
文法和語言的形式定義
文法的類型
上下文無關(guān)文法及其語法樹
句型的分析:自上而下的分析方法;自下而上的分析方法;句型分析的有關(guān)問題
有關(guān)文法實(shí)用中的一些說明:有關(guān)文法的實(shí)用限制;上下文無關(guān)文法中的e規(guī)則
2、教學(xué)要求:
了解:文法的直觀概念,符號(hào)和符號(hào)串,上下文無關(guān)文法中的€規(guī)則。
掌握:文法和語言的形式定義。
熟練掌握:文法的類型,上下文無關(guān)文法及其語法樹,句型的分析。
(四)詞法分析8學(xué)時(shí)
1、教學(xué)內(nèi)容:
詞法分析程序的設(shè)計(jì):詞法分析程序與語法分析程序的接口方式;詞法分析程序的輸出;將詞法分析工
作分離的考慮
單詞的描述工具:正規(guī)文法;正規(guī)式;正規(guī)文法到正規(guī)式
有窮自動(dòng)機(jī):確定的有窮自動(dòng)機(jī)(DFA);不確定的有窮自動(dòng)機(jī)(NFA);DFA-NFA的轉(zhuǎn)換;確定有
窮自動(dòng)機(jī)的化簡(jiǎn)
正規(guī)式和有窮自動(dòng)機(jī)的等價(jià)性
正規(guī)式和有窮自動(dòng)機(jī)間的轉(zhuǎn)換
詞法分析程序的自動(dòng)構(gòu)造工具:LEX語言(選講內(nèi)容)
2、教學(xué)要求:
了解:詞法分析程序與語法分析程序的接口方式和輸出;詞法分析工作分離的考慮,LEX語言。
掌握:正規(guī)文法;正規(guī)式;正規(guī)文法到正規(guī)式。
熟練掌握:確定的有窮自動(dòng)機(jī)(DFA);不確定的有窮自動(dòng)機(jī)(NFA);DFA-NFA的轉(zhuǎn)換;確定有窮
自動(dòng)機(jī)的化簡(jiǎn),正規(guī)式和有窮自動(dòng)機(jī)的等價(jià)性,正規(guī)式和有窮自動(dòng)機(jī)間的轉(zhuǎn)換。
(五)自頂向下語法分析方法6學(xué)時(shí)
1、教學(xué)內(nèi)容:
確定的自頂向下分析思想
LL(1)文法的判別
某些非LL(1)文法到LL(1)文法的等價(jià)變換
不確定的自頂向下分析思想
確定的自頂向下分析方法:遞歸子程序法;預(yù)測(cè)分析法
2、教學(xué)要求:
了解:不確定的自頂向下分析思想。
掌握:確定的自頂向下分析思想,LL(1)文法的判別,遞歸子程序法,預(yù)測(cè)分析法。
熟練掌握:某些非LL(1)文法到LL(1)文法的等價(jià)變換。
(六)自底向上優(yōu)先分析法6學(xué)時(shí)
1、教學(xué)內(nèi)容:
自底向上優(yōu)先分析法概述
簡(jiǎn)單優(yōu)先分析法:優(yōu)先關(guān)系;簡(jiǎn)單優(yōu)先文法的定義;簡(jiǎn)單優(yōu)先分析法
算符優(yōu)先分析法:直觀算符優(yōu)先分析法;算符優(yōu)先分析法的定義;算符優(yōu)先關(guān)系表的構(gòu)造;算符優(yōu)先分
析法;優(yōu)先函數(shù);算符優(yōu)先分析法的局限性
2、教學(xué)要求:
掌握:簡(jiǎn)單優(yōu)先分析法。
熟練掌握:算符優(yōu)先分析法。
(七)LR分析法10學(xué)時(shí)
1、教學(xué)內(nèi)容:
LR分析概述
LR(0)分析:可歸前綴和子前綴;識(shí)別活前綴的有限自動(dòng)機(jī);活前綴及其可歸前綴的一般計(jì)算方法;LR(0)
項(xiàng)目集規(guī)范族的構(gòu)造
SLR⑴分析
LR(1)分析:LR(1)項(xiàng)目集族的構(gòu)造;LR(1)分析表的構(gòu)造
LALR(l)分析
二義性文法在LR分析中的應(yīng)用
2、教學(xué)要求:
掌握:SLR⑴分析,LALR⑴分析。
熟練掌握:LR(O)分析,LR(1)分析。
(八)語法制導(dǎo)翻譯和中間代碼生成10學(xué)時(shí)
1、教學(xué)內(nèi)容:
屬性文法
語法制導(dǎo)翻譯概論
中間代碼的形式:逆波蘭記號(hào);三元式和樹形表示;四元式
簡(jiǎn)單賦值語句的翻譯
布爾表達(dá)式的翻譯:布爾表達(dá)式的翻譯方法;控制語句中布爾表達(dá)式的翻譯
控制結(jié)構(gòu)的翻譯:條件轉(zhuǎn)移;開關(guān)語句;for循環(huán)語句;出口語句;goto語句;過程調(diào)用語句的四元式
產(chǎn)生。
說明語句的翻譯:簡(jiǎn)單說明句的翻譯;過程中的說明
數(shù)組和結(jié)構(gòu)的翻譯:數(shù)組說明和數(shù)組元素的引用;結(jié)構(gòu)(記錄)說明和引用的翻譯
2、教學(xué)要求:
掌握:中間代碼的形式逆波蘭記號(hào)、三元式和樹形表示、四元式。
熟練掌握:簡(jiǎn)單賦值語句、布爾表達(dá)式、控制結(jié)構(gòu)、說明語句、數(shù)組和結(jié)構(gòu)的翻譯。
(九)符號(hào)表4學(xué)時(shí)
1、教學(xué)內(nèi)容:
符號(hào)表的作用和地位
符號(hào)的主要屬性機(jī)作用
符號(hào)表的組織:符號(hào)表的總體組織:符號(hào)表項(xiàng)的排列;關(guān)鍵字域的組織;其它域的組織;下推鏈域的組
織
符號(hào)表的管理:符號(hào)表的初始化;符號(hào)的登錄;符號(hào)的查找;符號(hào)表中分程序結(jié)構(gòu)層次的管理
2、教學(xué)要求:
掌握:符號(hào)的主要屬性機(jī)作用。
熟練掌握:符號(hào)表的組織。
(十)目標(biāo)程序運(yùn)行時(shí)的存儲(chǔ)組織6學(xué)時(shí)
1、教學(xué)內(nèi)容:
數(shù)據(jù)空間的三種不同使用方法和管理方法:靜態(tài)存儲(chǔ)分配;動(dòng)態(tài)存儲(chǔ)分配;棧式動(dòng)態(tài)存儲(chǔ)分配;堆式動(dòng)
態(tài)存儲(chǔ)分配
棧式存儲(chǔ)分配的實(shí)現(xiàn):簡(jiǎn)單的棧式存儲(chǔ)分配的實(shí)現(xiàn);嵌套過程語言的棧式實(shí)現(xiàn);分程序結(jié)構(gòu)的存儲(chǔ)管理
參數(shù)傳遞:傳值;傳地址;過程參數(shù)
2、教學(xué)要求:
了解:堆式動(dòng)態(tài)存儲(chǔ)分配、過程調(diào)用、過程進(jìn)入和過程返回
掌握:靜態(tài)存儲(chǔ)分配,參數(shù)的傳值、傳地址和過程參數(shù)
熟練掌握:簡(jiǎn)單的棧式存儲(chǔ)分配的實(shí)現(xiàn);嵌套過程語言的棧式實(shí)現(xiàn);分程序結(jié)構(gòu)的存儲(chǔ)管理
(+-)代碼優(yōu)化8學(xué)時(shí)
1、教學(xué)內(nèi)容:
優(yōu)化技術(shù)簡(jiǎn)介
局部?jī)?yōu)化:基本塊的劃分;基本塊的變換;基本塊的DAG表示;DAG的應(yīng)用;DAG構(gòu)造算法討論
控制流分析和循環(huán)優(yōu)化:出現(xiàn)域循環(huán);循環(huán);循環(huán)的查找;可規(guī)約流圖;循環(huán)優(yōu)化
數(shù)據(jù)流的分析與全局優(yōu)化:一些主要的概念;數(shù)據(jù)流方程的一般形式;到達(dá)一定值數(shù)據(jù)流方程;可用表
達(dá)式及其數(shù)據(jù)流方程;活躍變量數(shù)據(jù)流方法;復(fù)寫傳播
2、教學(xué)要求:
了解:數(shù)據(jù)流的分析與全局優(yōu)化。
掌握:局部?jī)?yōu)化、控制流分析和循環(huán)優(yōu)化。
十二、代碼生成6學(xué)時(shí)
1、教學(xué)內(nèi)容:
代碼生成概述
一個(gè)計(jì)算機(jī)模型
一個(gè)簡(jiǎn)單的代碼生成器:寄存器分配的原則;待用信息鏈表法;代碼生成算法
代碼生成研究現(xiàn)狀:中間語言的選擇;代碼生成的自動(dòng)化研究
2、教學(xué)要求:
了解:代碼生成研究現(xiàn)狀。
掌握:寄存器分配的原則;待用信息鏈表法;代碼生成算法。
五、主要參考書目
考試教材:《編譯原理》,呂映芝、張素琴等編著清華大學(xué)出版社。
主要參考書目有;
《Compilers:Principles,Techniques,andTools/編譯原理技術(shù)與工具(英文版)》ALFREDV.AHO,
RAVISETHI,JEFFREYD.ULLMAN.
《程序設(shè)計(jì)語言編譯原理》陳火旺,國(guó)防工業(yè)出版社,2000
《編譯原理及編譯程序構(gòu)造》高仲儀、金茂忠,北京航空學(xué)院出版社,1990.12
《編譯原理》胡倫駿、徐蘭芳、劉建農(nóng)編,電子工業(yè)出版社.2002年
《編譯程序原理與技術(shù)》李贛生、王華民編著,清華大學(xué)出版社
《編譯原理技術(shù)》陳意云,中國(guó)科技大學(xué)出版社
《編譯原理習(xí)題精選》陳意云、張昱著,中國(guó)科技大學(xué)出版社
《編譯原理》教案
授課時(shí)間第一周第1次課
課程的性質(zhì)與任務(wù)
第1章引論
1.1什么是編譯程序
任課教師
授課章節(jié)1.2編譯過程、編譯程序的結(jié)構(gòu)馮玲講師
及職稱
1.3編譯程序和軟件工具
1.4程序設(shè)計(jì)語言范型
教學(xué)方法
多媒體課堂教學(xué)課時(shí)安排節(jié)課
與手段2
《編譯原理》(第2版)張素琴,呂映芝等著,清華大學(xué)出版社
《Compilers:Principles,Techniques,andTools/編譯原理技術(shù)與工具(英文版)》
ALFREDV.AHO.RAVISETHI,JEFFREYD.ULLMAN.
《程序設(shè)計(jì)語言編譯原理》陳火旺,國(guó)防工業(yè)出版社,2000
使用教材和
《編譯原理及編譯程序構(gòu)造》高仲儀、金茂忠,北京航空學(xué)院出版社,1990.12
主要參考書
《編譯原理》胡倫駿、徐蘭芳、劉建農(nóng)編,電子工業(yè)出版社.2002年
《編譯程序原理與技術(shù)》李贛生、王華民編著,清華大學(xué)出版社
《編譯原理技術(shù)》陳意云,中國(guó)科技大學(xué)出版社
《編譯原理習(xí)題精選》陳意云、張昱著,中國(guó)科技大學(xué)出版社
教學(xué)目的與要求:
本章重點(diǎn)對(duì)編譯程序的功能和結(jié)構(gòu)做了綜合概述,要求學(xué)生了解編譯程序各個(gè)成分在編譯階段的邏輯關(guān)系以
及它們?cè)鯓幼鳛橐粋€(gè)整體完成編譯任務(wù)的。
1了解課程的性質(zhì)與任務(wù)
2理解什么是編譯程序
3了解編譯過程和編譯程序的結(jié)構(gòu)
4為什么要學(xué)習(xí)編譯程序
教學(xué)重點(diǎn),難點(diǎn):
1.理解理解什么是編譯程序
2.了解編譯過程和編譯程序的結(jié)構(gòu)
教學(xué)內(nèi)容:
課程的性質(zhì)與任務(wù)
?本課程地位屬于計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)的一門重要的專業(yè)必修課。
?本課程的學(xué)習(xí)有助于對(duì)語言的執(zhí)行系統(tǒng)、程序語言的理解。
?通過本課程的學(xué)習(xí),要掌握編譯程序的一般構(gòu)造原理,包括語言基礎(chǔ)知識(shí)、詞法分析程序設(shè)計(jì)原理和構(gòu)造
方法。各種語法分析技術(shù)和中間代碼生成符號(hào)表的構(gòu)造、代碼優(yōu)化、并行編譯技術(shù)常識(shí)及運(yùn)行時(shí)存儲(chǔ)空間的
組織等基本方法和主要實(shí)現(xiàn)技術(shù)。
語言的發(fā)展
?機(jī)器語言
?匯編語言
?高級(jí)語言
?查詢語言、標(biāo)注語言
第1章編譯程序概論
1.1什么是編譯程序
1.1.1語言處理程序
語言處理程序:把較高級(jí)語言編寫的程序語義等價(jià)地變換成較低級(jí)語言程序的程序。
/匯編程序
語言處理程序《解釋程序
、編譯程序
(0)語言的執(zhí)行方式
解釋方式(Basic)口譯
編譯方式(C,pascal)筆譯
(1)匯編程序
匯編程序:把用匯編語言編寫的程序翻譯成機(jī)器語言的程序。
匯編語言是為特定的計(jì)算機(jī)或計(jì)算機(jī)系統(tǒng)設(shè)計(jì)的面向機(jī)器的語言。如8086/8088PC、Z-80、VAX匯編語言。
匯編的過程就是對(duì)匯編指令逐行進(jìn)行處理,最終得到機(jī)器代碼的過程。
—A|匯編程序]―定藐))
⑵解釋程序
解釋程序:對(duì)用高級(jí)語言編寫的程序進(jìn)行逐句分析并立即得到結(jié)果。
解釋程序按源程序中語句的動(dòng)態(tài)順序逐句進(jìn)行分析翻譯,并立即予以執(zhí)行,它不產(chǎn)生目標(biāo)代碼。
BASICAPLLISPJava等語言就是采用解釋方法實(shí)現(xiàn)的。
高級(jí)語言解釋系統(tǒng)(interpreter)
功能:讓計(jì)算機(jī)執(zhí)行高級(jí)語言(basic,lisp,prolog)
與編譯程序的不同:1)不生成目標(biāo)代碼2)能支持交互環(huán)境(同增量式編譯系統(tǒng))
源程序|解釋程序
計(jì)算結(jié)果
初始數(shù)據(jù)
解釋系統(tǒng)
直接對(duì)源程序中的語句進(jìn)行分析,執(zhí)行其隱含的操作。
《編譯原理》教案
如:....
b:=2;
lnt2
a:=b+2;i-------y編譯程刃-----〉
Stb
writea;
Ldb
add2
Sta
解釋程序直接將4的值輸出(顯示)
⑶編譯程序
編譯程序:把用高級(jí)語言編寫的源程序翻譯成等價(jià)的低級(jí)語言(稱作目標(biāo)語言)程序。
編譯系統(tǒng)是編譯程序和運(yùn)行系統(tǒng)的合稱。
一個(gè)編譯程序把一個(gè)高級(jí)語言源程序翻譯成目標(biāo)程序的工作可分為前后銜接的六個(gè)階段:詞法分析、語
法分析、語義分析、中間代碼生成、代碼優(yōu)化及目標(biāo)代碼生成。大多數(shù)高級(jí)語言是采用編譯的方法實(shí)現(xiàn)的。
如:PASCAL>FORTRAN.ADA、C、C++、PL/1、ALGOL60、ALGOL68,等等。
1.1.2什么是編譯程序(compiler)
編譯程序是現(xiàn)代計(jì)算機(jī)系統(tǒng)的基本組成部分.
從功能上看,一個(gè)編譯程序就是一個(gè)語言翻譯程序,它把一種語言(稱作源語言)書寫的程序翻譯成另--種語言
(稱作目標(biāo)語言)的等價(jià)的程序.
編譯程序的功能
術(shù)語:編譯程序的源語言(源程序);
編譯程序的目標(biāo)語言(目標(biāo)程序);
編譯程序的實(shí)現(xiàn)語言;
軟件:計(jì)算機(jī)系統(tǒng)中的程序及其文檔;
系統(tǒng)軟件:居于計(jì)算機(jī)系統(tǒng)中最靠近硬件的一層,其他軟件一般都通過系統(tǒng)軟件發(fā)揮作用。他和具體
的應(yīng)用領(lǐng)域無關(guān),如編譯系統(tǒng)和操作系統(tǒng)等。
處理系統(tǒng):把軟件語言書寫的各種程序處理成可在計(jì)算機(jī)上執(zhí)行的程序。
軟件語言:用于書寫軟件的語言。它主要包括需求定義語言,功能性語言,設(shè)計(jì)性語言,程序設(shè)計(jì)語
言以及文檔語言
編譯程序(compiler);
編譯程序的源語言(源程序)(sourcelanguage)(sourceprogram);
編譯程序的目標(biāo)語言(目標(biāo)程序)(objectortargetlanguage)(objectortargetprogram);
編譯程序的實(shí)現(xiàn)語言(implementationlanguage);
語言處理程序(languageprocessor);
語言轉(zhuǎn)(變)換(languagetransformation)
—源程序一
?
I預(yù)處理器I
《編譯原理》教案
1.2編譯過程和結(jié)構(gòu)
1.2.1編譯邏輯過程
(1)詞法分析這個(gè)階段的任務(wù)是從左至右、從上到下一個(gè)字符一個(gè)字符地讀入源程序,對(duì)構(gòu)成源程序的字符
流進(jìn)行掃描和分解,從而識(shí)別出一個(gè)個(gè)單詞。
詞法分析后可能返回:
單詞類型單詞值
保留字int
標(biāo)識(shí)符(變量名)a
界符;
標(biāo)識(shí)符(變量名)a
算符(賦值)=
標(biāo)識(shí)符(變量名)a
算符(加)+
整數(shù)2
界符;
有關(guān)術(shù)語
詞法分析--從左到右讀字符流的源程序、識(shí)別(拼)單詞。
單詞--具有獨(dú)立意義的基本語法單位。
保留字-一具有特殊規(guī)定的意義,不允許用戶將它們作為別用,是用戶定義標(biāo)識(shí)符的禁區(qū)。
標(biāo)識(shí)符--用來表示程序、過程、函數(shù)、類型、常量和變量等名稱的符號(hào)。
(2)語法分析
在詞法分析的基礎(chǔ)上,根據(jù)語言的語法規(guī)則(文法規(guī)則),把單詞符號(hào)串分解成各類語法單位,如“短語”、
“句子”、“程序段”和“程序”。通過語法分解,確定整個(gè)輸入串是否構(gòu)成一個(gè)語法上正確的程序.
例:符號(hào)串X+0.168*Y,經(jīng)語法分析就可識(shí)別出這個(gè)字符串屬于算術(shù)表達(dá)式。
Y:=X+0.168*Y;
語法分析所依循的是語言的語法規(guī)則,用產(chǎn)生式描述。語法分析器讀入單詞,將它們組合成按產(chǎn)生式規(guī)
定的各類語法單位。
sum:=first+count*10
規(guī)則
〈賦值語句>::=<標(biāo)識(shí)符>":=”〈表達(dá)式》
〈表達(dá)式》:=〈表達(dá)式>“+”(表達(dá)式〉
〈表達(dá)式》:=<表達(dá)式>“*”〈表達(dá)式》
〈表達(dá)式》:=“(”〈表達(dá)式》“)”
(表達(dá)式》:=〈標(biāo)識(shí)符>
〈表達(dá)式》:=〈整數(shù)》
〈表達(dá)式》:=<實(shí)數(shù)>
《編譯原理》教案
賦值語句
表達(dá)式
標(biāo)識(shí)符
術(shù)語
語法:定義語言各語法成分的形式或結(jié)構(gòu)。
語法分析:依據(jù)源程序的語法規(guī)則把源程序的單詞序列組成語法短語(表示成語法樹)。
語法樹(推導(dǎo)樹):表示句型推導(dǎo)(或歸約)的樹型結(jié)構(gòu)。語法樹有助于理解一個(gè)句子語法結(jié)構(gòu)的層次0
(3)語義分析
語義審查(靜態(tài)語義)
類型匹配
類型轉(zhuǎn)換
例:Programp();
Varrate:real;
procedureinitial;
position:=initial+rate*60
/*error*//*error*//*warning*/;
語義分析的一個(gè)重要內(nèi)容是類型檢查,對(duì)表達(dá)式及語句中的各語法成分作類型檢查和分析.
如:
Varcount:real;
Varfirst:real;
Varsum:real;
sum:=first+count*10
術(shù)語
語法:用來定義語言中各語法成份的形式或結(jié)構(gòu)。
語義:用來規(guī)格各語法成份的含義和功能,即規(guī)定它們的屬性或在執(zhí)行時(shí)應(yīng)進(jìn)行的運(yùn)算或操作。
語義分析:檢查源程序是否包含語義錯(cuò)誤,并搜集類型,供后面的代碼生成階段使用,只有語法和語義正確
的源程序才可被翻譯成目標(biāo)代碼。語義分析程序需要進(jìn)行頻繁的造表和查表工作。
(4)中間代碼生成
語義分析之后生成一種介于源語言和目標(biāo)語言之間的中間語言代碼。中間代碼有多種形式:三元式、四
元式、逆波蘭表示、樹型結(jié)構(gòu)
《編譯原理》教案
例:a:=b*c
三元式:逆波蘭表示式:abc*:=
(1)(*,b,c)樹:,:=
(2)(:=,a,⑴)a*
四元式:bc
(*,b,c,a)
idl:=id2+id3*10
因運(yùn)算需要,需設(shè)置臨時(shí)變量tl,t2,t3來存放中間運(yùn)算結(jié)果。
四元式(算符第一運(yùn)算量第二運(yùn)算量運(yùn)算結(jié)果)
(1)(inttoreal,10,tl)
(2)(*,id3,tl,t2)
(3)(+,id2,t2,t3)
(4)(:=,t3,idl)
中間代碼的幾種形式
逆波蘭表示:運(yùn)算符在其運(yùn)算量之后的表達(dá)式。
三元式:(OP,ARG1,ARG2)
四元式:(OP,ARG1,ARG2,RESULT)
樹:根結(jié)點(diǎn)0P,左子樹ARG1,右子樹ARG2
(5)代碼優(yōu)化
對(duì)前階段產(chǎn)生的中間代碼進(jìn)行加工變換,以期在最后階段能產(chǎn)生出更為高效(省時(shí)間和省空間)的目標(biāo)代碼
tl=b*ctl=b*c
t2=tl+0t2=tl+tl
t3=b*ca-t2
t4=t2+t3
a=t4
在本例中,b、c的值沒有改變,故tl=t3,由第二個(gè)表達(dá)式知道t2=tl。
(6)目標(biāo)代碼生成
將前階段產(chǎn)生的中間代碼翻譯為機(jī)器語言或匯編語言形式的目標(biāo)程序。目標(biāo)程序總是按某一具體計(jì)算機(jī)的機(jī)
器語言或匯編語言來產(chǎn)生的。
目標(biāo)代碼生成
(*,id310.0tl)
(+,id2tlidl)
1
I
movfid3,R2
mulf#10.0,R2
movfid2,R1
addfR2,R1
movfRI,idl
《編譯原理》教案
(7)符號(hào)表管理
符號(hào)表管理:記錄源程序中使用的名字,收集每個(gè)名字的各種屬性信息:類型、作用域、分配存儲(chǔ)信息
在編譯過程中,源程序中的標(biāo)識(shí)符及其各種屬性都要記錄在符號(hào)表中,這些屬性可以提供標(biāo)識(shí)符的存儲(chǔ)分配
信息、類型信息、作用域信息等等。對(duì)于過程標(biāo)識(shí)符,還要有參數(shù)信息,包括參數(shù)的個(gè)數(shù)和類型、實(shí)參和形
參的結(jié)合方式等等。
符號(hào)表結(jié)構(gòu)
符號(hào)表是一種含記錄的數(shù)據(jù)結(jié)構(gòu),通常一個(gè)標(biāo)識(shí)符在符號(hào)表中占一個(gè)記錄,記錄中除了標(biāo)識(shí)符的名字域
之外,還有記錄該標(biāo)識(shí)符屬性的域。
(8)出錯(cuò)處理
編譯的每一個(gè)階段都會(huì)發(fā)現(xiàn)源程序的錯(cuò)誤,在發(fā)現(xiàn)錯(cuò)誤之后,一?般要對(duì)其有一定的處理措施,因而編譯
還可繼續(xù)執(zhí)行,不會(huì)一有錯(cuò)誤就停止編譯工作。
出錯(cuò)處理(errorhandling)(errorreportinganderrorrecovery)
在詞法分析中,能發(fā)現(xiàn)單詞拼寫錯(cuò)誤。
在語法分析中,檢查單詞串是否符合語法的結(jié)構(gòu)規(guī)則。
在語義分析中,編譯程序進(jìn)一步查出語法上雖正確但含有無意義的操作部分,如兩個(gè)標(biāo)識(shí)符相加,一個(gè)是數(shù)
組名,一個(gè)是過程名,雖然語法上允許,但語義上不允許,各種錯(cuò)誤,都應(yīng)在相應(yīng)的階段進(jìn)
行處理。
檢查錯(cuò)誤
報(bào)告出錯(cuò)信息(錯(cuò)誤種類及位置)
校錯(cuò)及排錯(cuò)
恢復(fù)編譯工作
1.2.2編譯程序的結(jié)構(gòu)(components)
A詞法分析程序k
出
錯(cuò)
處
理
】目標(biāo)代碼生成程序r
1.2.3編譯階段的組合
分析,綜合(synthesis)
源程序的分析
線性分析
層次分析
語義分析
目標(biāo)程序的綜合
編譯的前端(frontend):這些階段以來于源語言、與目標(biāo)機(jī)無關(guān)。
編譯的后端(backend):依賴于目標(biāo)機(jī)器的階段。
遍(趟)從頭到尾掃描源程序(各種形式)一遍(pass)
編譯階段和運(yùn)行階段存儲(chǔ)結(jié)構(gòu)
《編譯原理》教案
1.3編譯技術(shù)和軟件工具
編譯程序?qū)崿F(xiàn)方式:手工,機(jī)器語言,匯編,系統(tǒng)程序設(shè)計(jì)語言,自動(dòng)構(gòu)造工具lexyaccgcc
1.3.1編譯程序的發(fā)展
riented--------'編譯?,,Computer-
oriented
1,...---
計(jì)算模式,語言馮諾曼機(jī)體系
范式結(jié)構(gòu)并行體系
結(jié)構(gòu)嵌入系統(tǒng)
編譯程序的發(fā)展
(1)語言范型(支持的計(jì)算模式)
命令式(imperativelanguage)
應(yīng)用式(applicative),也成函數(shù)式
基于規(guī)則的(rule-based)
面向?qū)ο蟮?object-oriented)
(2)編譯程序執(zhí)行環(huán)境
批處理
交互環(huán)境
嵌入系統(tǒng)環(huán)境
1.3.2編譯技術(shù)和軟件工具
結(jié)構(gòu)化編輯器
程序調(diào)試工具
程序測(cè)試工具:1靜態(tài)分析2動(dòng)態(tài)分析3度量工具(結(jié)構(gòu)度量)
4分析工具(sourceinsight)
高級(jí)語言轉(zhuǎn)換工具
廣泛的語言領(lǐng)域
1.3.3研究領(lǐng)域
(1)并行化編譯技術(shù)
目的:提高并行計(jì)算機(jī)體系結(jié)構(gòu)的性能
(2)交叉編譯器
由于目標(biāo)機(jī)指令系統(tǒng)與宿主機(jī)的指令系統(tǒng)不同,編譯時(shí)將應(yīng)用程序的源程序在宿主機(jī)上生成目標(biāo)機(jī)代碼,稱
為交叉編譯。簡(jiǎn)單地說,就是在一個(gè)平臺(tái)上生成另一個(gè)平臺(tái)上的可執(zhí)行代碼。
嵌入式
(3)自展編譯技術(shù)用被編譯的語言來書寫該語言自身的編譯程序。
小結(jié)
《編譯原理》教案
復(fù)習(xí)思考題、作業(yè)題:
1.什么是編譯程序?
2.簡(jiǎn)要介紹編譯過程的六個(gè)階段,并給出編譯程序的結(jié)構(gòu)。
下次課預(yù)習(xí)要點(diǎn)
預(yù)習(xí)第二章PL/O編譯程序的結(jié)構(gòu)與詞法分析等內(nèi)容
實(shí)施情況及教學(xué)效果分析
授課時(shí)間分配合理;
編譯過程、編譯基本概念重點(diǎn)突出,
學(xué)生能夠掌握基本內(nèi)容;
教學(xué)效果良好。
學(xué)院審核意見
同意實(shí)施
學(xué)院負(fù)責(zé)人簽字
年月日
《編譯原理》教案
授課時(shí)間第一周__________第2次課
第2章PL/O編譯程序的實(shí)現(xiàn)
2.1PL/O語言描述
任課教師
授課章節(jié)2.2PL/O編譯程序的結(jié)構(gòu)馮玲講師
及職稱
2.3PL/O編譯程序的詞法分析
教學(xué)方法
多媒體課堂教學(xué)課時(shí)安排2節(jié)課
與手段
《編譯原理》(第2版)張素琴,呂映芝等著,清華大學(xué)出版社
《Compilers:Principles,Techniques,andTools/編譯原理技術(shù)與工具(英文版)》
ALFREDV.AHO,RAVISETHI,JEFFREYD.ULLMAN.
《程序設(shè)計(jì)語言編譯原理》陳火旺,國(guó)防工業(yè)出版社,2000
使用教材和
《編譯原理及編譯程序構(gòu)造》高仲儀、金茂忠,北京航空學(xué)院出版社,1990.12
主要參考書
《編譯原理》胡倫駿、徐蘭芳、劉建農(nóng)編,電子工業(yè)出版社.2002年
《編譯程序原理與技術(shù)》李贛生、王華民編著,清華大學(xué)出版社
《編譯原理技術(shù)》陳意云,中國(guó)科技大學(xué)出版社
《編譯原理習(xí)題精選》陳意云、張昱著,中國(guó)科技大學(xué)出版社
教學(xué)目的與要求:
以PL/O為實(shí)例,學(xué)習(xí)編譯程序?qū)崿F(xiàn)的基本步驟和相關(guān)技術(shù)。
教學(xué)重點(diǎn),難點(diǎn):
PL/O編譯程序的結(jié)構(gòu)與詞法分析
教學(xué)內(nèi)容:第2章PL/O編譯程序的實(shí)現(xiàn)
PL/O編譯系統(tǒng)的結(jié)構(gòu)框架
PL/O源程序
PL/O編譯程庠
類pcode代碼
類pcode解釋程序/
輸入▲輸出
2.1PL/0語言
⑴PL/0程序示例
CONSTA=10;(*常量說明部分*)
VARB,C;(*變量說明部分*)
PROCEDUREP;(*過程說明部分*)
VARD;
PROCEDUREQ;
VARX;
BEGIN
READ(X);
D:二X;
WHILEX#()
DOCALLP;
END;
BEGIN
WRITE(D);
CALLQ;
END;
BEGIN
CALLP;
END.
(2)PL/0的語法描述圖
程序一?分序口
口內(nèi)的文字表示非終結(jié)符v
O或O內(nèi)的文字或符號(hào)表示終結(jié)符
條件語法描述圖
表達(dá)式和項(xiàng)的語法描述圖
因子的語法圖
⑶PL/0語言文法的EBNF表示
EBNF引入的符號(hào)(元符號(hào)):
<>用左右尖括號(hào)括起來的語法成分為非終結(jié)符
::=(一)'定義為‘::=(一)的左部由右部定義
I喊,
{)表示花括號(hào)內(nèi)的語法成分可重復(fù)任意次或限定次數(shù)
[]表示方括號(hào)內(nèi)的語法成分為任選項(xiàng)
()表示圓括號(hào)內(nèi)的成分優(yōu)先
例:用EBNF描述〈整數(shù)〉的定義:
〈整數(shù)>::=[+■<數(shù)字>{<數(shù)字>}
〈數(shù)字>::=0|1|2|3|4|5|6|7|8|9
或更好的寫法
〈整數(shù)>::=[+卜]<非零數(shù)字〉{〈數(shù)字〉}10
〈非零數(shù)字>::=1|2|3|4|5|6|7|8|9
〈數(shù)字>::=0|〈非零數(shù)字〉
PL/0余言的文法表示見P15.
(4)PL/0語言是PASCAL語言的子集
同PASCAL作用域規(guī)則(內(nèi)層可引用包圍它的外層定義的標(biāo)識(shí)符),上下文約束,過程可嵌套定義,可遞歸調(diào)
用
子集
數(shù)據(jù)類型,只有整型
數(shù)據(jù)結(jié)構(gòu),只有簡(jiǎn)變和常數(shù)
數(shù)字最多為14位
標(biāo)識(shí)符的有效長(zhǎng)度是10
語句種類
過程最多可嵌套三層
⑸目標(biāo)代碼類pcode
目標(biāo)代碼類pcode是一種假想棧式計(jì)算機(jī)的匯編語言。指令格式:
目標(biāo)程序
《編譯原理》教案
(2)PL/O編譯程序的總體設(shè)計(jì)
其編譯過程采用一趟掃描方式,以語法、語義分析程序?yàn)楹诵?/p>
詞法分析程序和代碼生成程序都作為一個(gè)過程,當(dāng)語法分析需要讀單詞時(shí)就調(diào)用詞法分析程序,而當(dāng)語
法、語義分析正確,需要生成相應(yīng)的目標(biāo)代碼時(shí),則調(diào)用代碼生成程序。
表格管理程序?qū)崿F(xiàn)變量,常量和過程標(biāo)識(shí)符的信息的登錄與查找。
出錯(cuò)處理程序,對(duì)詞法和語法、語義分析遇到的錯(cuò)誤給出在源程序中出錯(cuò)的位置和與錯(cuò)誤性質(zhì)有關(guān)的編
號(hào),并進(jìn)行錯(cuò)誤恢復(fù)。
(3)編譯程序總體流程圖
(4)PL/O編譯程序過程一覽表(P17)
2.3PL/O編譯程序的詞法分析
(1)PI/O詞法分析程序Getsym
識(shí)別的單詞:(類別,值)
保留字:如:BEGIN,END、IF、THEN等
運(yùn)算符:如:+、-、*、/、:=、#、>=、<=等
標(biāo)識(shí)符:用戶定義的變量名、常數(shù)名、過程名
常數(shù):如:10、25、100等整數(shù)
界符:如—」、‘;‘、'('、)等
Getsym用到三個(gè)單元:
SYM:存放單詞類別
ID:存放標(biāo)識(shí)符的值
NUM:存放整數(shù)的值
(2)詞法分析過程GETSYM
流程圖(P19)
所要完成的任務(wù):
濾空格
識(shí)別保留字
識(shí)別標(biāo)識(shí)符
拼數(shù)
識(shí)別單字符單詞(<,>等)
拼雙字符單詞(<=,<>等)
輸出源程序
讀字符子程序(getch)(p20)
(3)進(jìn)一步的說明
z如何識(shí)別標(biāo)識(shí)符
y先查保留字表,建立保留字表
保留字內(nèi)部表示
beginbeginsym
callcallsym
writewritesym
查到時(shí)找到相應(yīng)的內(nèi)部表示
若不是保留字,則是用戶定義的標(biāo)識(shí)符,應(yīng)建立標(biāo)識(shí)符表。
類似地可以建立運(yùn)算符、常數(shù)、界符表
詞法分析程序的實(shí)現(xiàn)見附錄
《編譯原理》教案
復(fù)習(xí)思考題、作業(yè)題:P30,練習(xí)2
2.2若pl/O編譯程序運(yùn)行時(shí)的存儲(chǔ)分配策略采用棧式動(dòng)態(tài)分配,并用動(dòng)態(tài)鏈和靜態(tài)鏈的方式分別解決遞歸調(diào)用和非局部變量的
引用問題,試寫出下列程序執(zhí)行到賦值語句b:=10時(shí)運(yùn)行棧的布局示意圖。Varx,y;
Procedurep;
Vara;
Procedureq;
Varb;
Begin(q)
B:=10;
End(q);
Procedures;
Varc,d;
Procedurer;
Vare,f;
Begin(r)
Callq;
End(r);
Begin(s)
Callr;
End⑸;
Begin(p);
Calls;
End(p);
Begin(main)
Callp;
End(main).
下次課預(yù)習(xí)要點(diǎn)
復(fù)習(xí)PL/O編譯程序的結(jié)構(gòu)與詞法分析,預(yù)習(xí)2.4—2.7小節(jié)
實(shí)施情況及教學(xué)效果分析
授課時(shí)間分配合理;
PL/O語言、編譯各階段的功能為教學(xué)重點(diǎn),也是難點(diǎn);
學(xué)生能夠掌握基本內(nèi)容;
教學(xué)效果良好。
學(xué)院審核意見
同意實(shí)施
學(xué)院負(fù)責(zé)人簽字
年月日
《編譯原理》教案
授課時(shí)間第二周第2次課
第2章PL/O編譯程序的實(shí)現(xiàn)
2.4PL/O編譯程序的語法語義分析
2.5PL/O編譯程序的目標(biāo)代碼結(jié)構(gòu)和代碼生成
任課教師
授課章節(jié)2.6PL/O編譯程序的語法錯(cuò)誤處理馮玲講師
及職稱
2.7PL/O編譯程序的目標(biāo)代碼解釋執(zhí)行時(shí)的存
儲(chǔ)分配
教學(xué)方法
多媒體課堂教學(xué)課時(shí)安排2節(jié)課
與手段
《編譯原理》(第2版)張素琴,呂映芝等著,清華大學(xué)出版社
《Compilers:Principles,Techniques,andTools/編譯原理技術(shù)與工具(英文版)》
ALFREDV.AHO,RAVISETHI,JEFFREYD.ULLMAN.
《程序設(shè)計(jì)語言編譯原理》陳火旺,國(guó)防工業(yè)出版社,2000
使用教材和
《編譯原理及編譯程序構(gòu)造》高仲儀、金茂忠,北京航空學(xué)院出版社,1990.12
主要參考書
《編譯原理》胡倫駿、徐蘭芳、劉建農(nóng)編,電子工業(yè)出版社.2002年
《編譯程序原理與技術(shù)》李贛生、王華民編著,清華大學(xué)出版社
《編譯原理技術(shù)》陳意云,中國(guó)科技大學(xué)出版社
《編譯原理習(xí)題精選》陳意云、張昱著,中國(guó)科技大學(xué)出版社
教學(xué)目的與要求:
以PL/O為實(shí)例,學(xué)習(xí)編譯程序?qū)崿F(xiàn)的基本步驟和相關(guān)技術(shù)。
教學(xué)重點(diǎn),難點(diǎn):
1掌握PL/O編譯程序的語法語義分析與目標(biāo)代碼結(jié)構(gòu)和代碼生成
2了解PL/O編譯程序的語法錯(cuò)誤處理
3理解PL/O編譯程序的目標(biāo)代碼解釋執(zhí)行時(shí)的存儲(chǔ)分配
《編譯原理》教案
教學(xué)內(nèi)容:
2.4PL/O編譯程序語法語義分析
2.4.1PL/O編譯程序語法分析的設(shè)計(jì)與實(shí)現(xiàn)
自頂向下的語法分析
遞歸子程序法:對(duì)于每個(gè)非終結(jié)符,編寫一個(gè)子程序,由該子程序負(fù)責(zé)識(shí)別該語法單位是否正確。
先回憶PL/O的語法規(guī)定。
遞歸子程序法:對(duì)應(yīng)每個(gè)非終結(jié)符語法單元,編一個(gè)獨(dú)立的處理過程(或子程序),識(shí)別該終結(jié)符對(duì)應(yīng)的
句子。
語法分析從讀入第一個(gè)單詞開始,由非終結(jié)符(程序>(即開始符)出發(fā),沿語法描述圖箭頭所指出的方
向進(jìn)行分析。當(dāng)遇到非終結(jié)符時(shí),則調(diào)用相應(yīng)的處理過程,從語法描述圖看,也就進(jìn)入了一個(gè)語法單元,
再沿當(dāng)前所進(jìn)入的語法單元所指箭頭方向繼續(xù)進(jìn)行分析。當(dāng)遇到描述圖中是終結(jié)符時(shí),則判斷當(dāng)前讀入
的單詞是否與圖中的終結(jié)符相匹配,若匹配,再讀取下一個(gè)單詞繼續(xù)分析。遇到分支點(diǎn)時(shí),將當(dāng)前的單
詞與分支點(diǎn)上多個(gè)終結(jié)符逐個(gè)相比較,若都不匹配時(shí)可能是進(jìn)入下一個(gè)非終結(jié)符語法單位或是出錯(cuò)。
表達(dá)式的EBNF
〈表達(dá)式〉::=[+■〈項(xiàng)〉{(+I-)〈項(xiàng)〉}
〈項(xiàng)〉::=〈因子〉{(*|/)〈因子〉)
〈因子〉::=〈標(biāo)識(shí)符〉|〈無符號(hào)整數(shù)〉「(,〈表達(dá)式〉9'
〈表達(dá)式〉的遞歸子程序?qū)崿F(xiàn)
procedureexpr;
begin
ifsymin[plus,minus]then
begin
getsym;term;
end
elseterm;
whilesymin[plus,minus]do
begin
getsym;term;
end
end;
〈項(xiàng)〉的遞歸子程序?qū)崿F(xiàn)
〈項(xiàng)〉::=〈因子〉{(*|/)〈因子〉)
procedureterm;
begin
factor;
whilesymin[times,slash]do
begin
getsym;factor;
end
end;
〈因子〉的遞歸子程序?qū)崿F(xiàn)
procedurefactor;
begin
ifsym<>identthen
《編譯原理》教案
ifsym<>numberthen
ifsym='('then
begin
getsym;
expr;
ifsym=')'thengetsym
elseerror
end
elseerror
elsegetsym
elsegetsym
end;
(程序>::=<分程序>
begin(*main*)
…(*initialize*)
…(*r/wfileset*)
getsym;
block();
ifsym<>periodthenerror...
end.
2.4.2PL/0編譯程序語義分析的設(shè)計(jì)與實(shí)現(xiàn)
PL/O編譯程序語法、語義分析的的核心程序是BLOCK過程
(1)說明部分的分析與處理
對(duì)每個(gè)過程(含主程序)說明的對(duì)象(變量,常量和過程)造符號(hào)表,登錄標(biāo)識(shí)符的屬性。
標(biāo)識(shí)符的屬性:種類,所在層次,值和分配的相對(duì)位置。
登錄信息由ENTER過程完成。
注意:所有標(biāo)識(shí)符保存在Table中,TX表示索引表的指針
LEV表示層次
Dx表示局部變量分配的位置
常量說明語句的處理
語法:(常量說明部分〉::=const〈常量定義>{,〈常量定義>};
〈常量定義〉::=〈標(biāo)識(shí)符>=〈無符號(hào)整數(shù)》
〈無符號(hào)整數(shù))::=〈數(shù)字>{〈數(shù)字>}
ifsym=constsymthen
begin
getsym;(*獲取下一個(gè)token,正常應(yīng)為用作常量名的標(biāo)識(shí)符*)
repeat(*反復(fù)進(jìn)行常量聲明*)
constdeclaration;(*聲明以當(dāng)前token為標(biāo)識(shí)符的常量*)
whilesym=commado(*如果遇到了逗號(hào)則反復(fù)聲明下一常量*)
begin
getsym;(*獲取下一個(gè)token,這里正好應(yīng)該是標(biāo)識(shí)符*)
constdeclaration(*聲明以當(dāng)前token為標(biāo)識(shí)符的常量*)
end;
《編譯原理》教案
ifsym=semicolonthen(*如果常量聲明結(jié)束,應(yīng)遇到分號(hào)*)
getsym(*獲取下一個(gè)token,為下一輪循環(huán)做好準(zhǔn)備*)
else
error(5)(*提示5號(hào)錯(cuò)誤*)
untilsym<>ident(*如果遇到非標(biāo)識(shí)符,則常量聲明結(jié)束*)
end;
常量說明處理
procedureconstdeclaration;
begin
ifsym=identthen
begin
getsym;
ifsymin[eql,becomes]then(*如果是等號(hào)或賦值號(hào)*)
ifsym=becomesthen(*如果是賦值號(hào)(常量生明中應(yīng)該是等號(hào))*)
error(1);(*提示1號(hào)錯(cuò)誤*)
getsym;(*獲取下一個(gè)token,等號(hào)或賦值號(hào)后應(yīng)接上數(shù)字*)
ifsym=numberthen(*如果的確是數(shù)字*)
begin
enter(constant);(*把這個(gè)常量登陸到符號(hào)表*)
getsym(*獲取下一個(gè)token,為后面作準(zhǔn)備*)
end
elseerror(2)(*如果等號(hào)后接的不是數(shù)字,提示2號(hào)錯(cuò)誤*)
elseerror(3)(*如常量標(biāo)識(shí)符后不是等號(hào)或賦值號(hào),提示3號(hào)錯(cuò)誤*)
end
elseerror(4)
end(*constdeclaration*);
變量定義語句的處理
語法:〈變量說明部分》::二var〈標(biāo)識(shí)符>{,〈標(biāo)識(shí)符>};
程序:
ifsym=varsynithen
begin
getsym;
repeat
vardeclaration;(*變量說明處理*)
whilesym=commado
begin
getsym;
vardeclaration
end;
ifsym=semicolonthen
getsym
elseerror(5)
untilsymOident;
end;
《編譯原理》教案一
變量說明處理
procedureardeclaration;
begin
ifsym=identthen
begin
enter(variable);
getsym
end
elseerror(4)
end(*vardeclaration*);
過程定義語句的處理
程序:
whilesym=procsymdo(*循環(huán)聲明各子過程*)
begin
getsym;(*獲取下一個(gè)token,此處正常應(yīng)為作為過程名的標(biāo)識(shí)符*)
ifsym=identthen(*如果token確為標(biāo)識(shí)符*)
begin
enter(procedur);(*把這個(gè)過程登錄到名字表中*)
getsym(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公寓公司租房合同樣本
- 中介承租轉(zhuǎn)讓合同樣本
- 共同經(jīng)營(yíng)項(xiàng)目合同樣本
- 公司紙箱回收合同樣本
- 夏令營(yíng)藝術(shù)活動(dòng)的策劃與實(shí)施計(jì)劃
- 培養(yǎng)小學(xué)生的團(tuán)隊(duì)合作計(jì)劃
- 亮化安裝安全施工合同標(biāo)準(zhǔn)文本
- 怎樣才能成為一名合格的物業(yè)管理人員
- 書包外包加工合同樣本
- 借款5萬合同樣本
- 德能勤績(jī)廉個(gè)人總結(jié)的
- 中層干部崗位競(jìng)聘報(bào)名表格評(píng)分表格評(píng)分標(biāo)準(zhǔn)
- 思想道德與法治課件:第六章 第一節(jié) 社會(huì)主義法律的特征和運(yùn)行
- 有限空間作業(yè)及應(yīng)急物資清單
- 《個(gè)人信息保護(hù)法》解讀
- GB∕T 3216-2016 回轉(zhuǎn)動(dòng)力泵 水力性能驗(yàn)收試驗(yàn) 1級(jí)、2級(jí)和3級(jí)
- 電子電氣評(píng)估規(guī)范-最新
- 新疆高速公路建設(shè)工程季節(jié)性施工方案
- 新版(七步法案例)PFMEA
- 六、礦井通風(fēng)網(wǎng)絡(luò)中風(fēng)量分配與調(diào)節(jié)ppt課件
- 黑布林繪本 Dad-for-Sale 出售爸爸課件
評(píng)論
0/150
提交評(píng)論