編譯原理第7-9章_第1頁(yè)
編譯原理第7-9章_第2頁(yè)
編譯原理第7-9章_第3頁(yè)
編譯原理第7-9章_第4頁(yè)
編譯原理第7-9章_第5頁(yè)
已閱讀5頁(yè),還剩45頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第七章第七章 語(yǔ)義分析語(yǔ)義分析第七章第七章 語(yǔ)義分析與語(yǔ)義分析與中間代碼產(chǎn)生中間代碼產(chǎn)生 第六章介紹的屬性文法和語(yǔ)法制導(dǎo)翻譯第六章介紹的屬性文法和語(yǔ)法制導(dǎo)翻譯方法和技術(shù)應(yīng)用于語(yǔ)義分析和中間代碼方法和技術(shù)應(yīng)用于語(yǔ)義分析和中間代碼產(chǎn)生;中間代碼的種類(lèi);各類(lèi)語(yǔ)法單位產(chǎn)生;中間代碼的種類(lèi);各類(lèi)語(yǔ)法單位翻譯成中間代碼的方法翻譯成中間代碼的方法第七章第七章 語(yǔ)義分析語(yǔ)義分析7.0 引言引言一、本章主要內(nèi)容:一、本章主要內(nèi)容: 靜態(tài)語(yǔ)義檢查和翻譯中間代碼;靜態(tài)語(yǔ)義檢查和翻譯中間代碼; 二、靜態(tài)語(yǔ)義檢查的內(nèi)容:二、靜態(tài)語(yǔ)義檢查的內(nèi)容: 類(lèi)型檢查、控制流檢查、一致性檢查、相關(guān)名字檢查、類(lèi)型檢查、控制流檢查、一致

2、性檢查、相關(guān)名字檢查、 名字的作用域分析等;名字的作用域分析等; 三、翻譯產(chǎn)生中間代碼的優(yōu)點(diǎn):三、翻譯產(chǎn)生中間代碼的優(yōu)點(diǎn): 便于進(jìn)行與機(jī)器無(wú)關(guān)的代碼優(yōu)化工作、使編譯程序改變目標(biāo)便于進(jìn)行與機(jī)器無(wú)關(guān)的代碼優(yōu)化工作、使編譯程序改變目標(biāo) 機(jī)更容易、使編譯程序的結(jié)構(gòu)在邏輯上更為簡(jiǎn)單明確;機(jī)更容易、使編譯程序的結(jié)構(gòu)在邏輯上更為簡(jiǎn)單明確; 四、靜態(tài)語(yǔ)義檢查和中間代碼產(chǎn)生在編譯程序中的地位:四、靜態(tài)語(yǔ)義檢查和中間代碼產(chǎn)生在編譯程序中的地位: 第七章第七章 語(yǔ)義分析語(yǔ)義分析7.1 中間語(yǔ)言中間語(yǔ)言(中間代碼的種類(lèi)中間代碼的種類(lèi))一、后綴式一、后綴式( (逆波蘭逆波蘭) ) 1 1、表達(dá)式、表達(dá)式E E的后綴式形

3、式的后綴式形式E E的定義:的定義: 若若E E是變量或常量:是變量或常量:E E為為E E; 若若E E是是E E1 1 op Eop E2 2:E E為為E E1 1E E2 2opop; 若若E E是(是(E1E1):):E E為為E E1 1; 2 2、中綴形式的表達(dá)式翻譯為后綴式的語(yǔ)義規(guī)則:、中綴形式的表達(dá)式翻譯為后綴式的語(yǔ)義規(guī)則: (E.Code:E.Code:構(gòu)成構(gòu)成E E后綴式;后綴式;| | :捻接后綴式;:捻接后綴式;op :op :二元算符)二元算符) EE1 op E2 E.Code := E1.Code|E2 .Code|opEE1 op E2 E.Code := E

4、1.Code|E2 .Code|op E( E1 ) E.Code := E1.Code E( E1 ) E.Code := E1.Code E id E.Code :=id E id E.Code :=id 3 3、例:、例:a+b a+b : ab+ , aab+ , a* *b b : abab* *, abc+, abc+* * :a a* *(b+c) , (b+c) , ab+cd+ ab+cd+* * :(a+b) (a+b) * * (c+d) (c+d) 第七章第七章 語(yǔ)義分析語(yǔ)義分析二、圖表示法二、圖表示法 1 1、抽象語(yǔ)法樹(shù)。、抽象語(yǔ)法樹(shù)。 2 2、有向無(wú)環(huán)圖(、有向無(wú)環(huán)

5、圖(DAGDAG):): (1)(1)構(gòu)造:表達(dá)式的每個(gè)子表達(dá)式對(duì)應(yīng)構(gòu)造:表達(dá)式的每個(gè)子表達(dá)式對(duì)應(yīng)DAGDAG中一個(gè)結(jié)點(diǎn),內(nèi)部結(jié)中一個(gè)結(jié)點(diǎn),內(nèi)部結(jié) 點(diǎn)代表操作符,其孩子代表操作數(shù);點(diǎn)代表操作符,其孩子代表操作數(shù); (2)(2)與抽象語(yǔ)法樹(shù)區(qū)別:抽象語(yǔ)法樹(shù)描述源程序的自然層次結(jié)與抽象語(yǔ)法樹(shù)區(qū)別:抽象語(yǔ)法樹(shù)描述源程序的自然層次結(jié) 構(gòu),構(gòu),DAGDAG也可以,但可標(biāo)識(shí)出公共子表達(dá)式;也可以,但可標(biāo)識(shí)出公共子表達(dá)式; 例例: :第七章第七章 語(yǔ)義分析語(yǔ)義分析3 3、與后綴式的關(guān)系:表達(dá)式的抽象語(yǔ)法樹(shù)形式的中間代碼與后、與后綴式的關(guān)系:表達(dá)式的抽象語(yǔ)法樹(shù)形式的中間代碼與后 綴式等價(jià),后綴式是抽象語(yǔ)法樹(shù)的

6、線性表現(xiàn)形式,是樹(shù)的結(jié)點(diǎn)綴式等價(jià),后綴式是抽象語(yǔ)法樹(shù)的線性表現(xiàn)形式,是樹(shù)的結(jié)點(diǎn)序列序列( (每個(gè)結(jié)點(diǎn)都在其所有子結(jié)點(diǎn)之后立即出現(xiàn)每個(gè)結(jié)點(diǎn)都在其所有子結(jié)點(diǎn)之后立即出現(xiàn) ) )。第七章第七章 語(yǔ)義分析語(yǔ)義分析4 4、產(chǎn)生賦值語(yǔ)句抽象語(yǔ)法樹(shù)的屬性文法:、產(chǎn)生賦值語(yǔ)句抽象語(yǔ)法樹(shù)的屬性文法: S id:=E S id:=E S.nptr:= mknode(:=,mkleaf(id ,id.place),E.nptr) S.nptr:= mknode(:=,mkleaf(id ,id.place),E.nptr) E E E E1 1+E+E2 2 E.nptr:=mknode(+,E E.nptr:=m

7、knode(+,E1 1.nptr ,E.nptr ,E2 2.nptr) .nptr) E E E E1 1* *E E2 2 E.nptr:=mknode(E.nptr:=mknode(* *,E,E1 1.nptr ,E.nptr ,E2 2.nptr) .nptr) E -E E -E1 1 E.nptr:=mknode(E.nptr:=mknode(,E,E1 1.nptr) .nptr) E (E E (E1 1) ) E.nptr:=E E.nptr:=E1 1.nptr.nptr E id E id E.nptr:=mkleaf(id ,id.place) E.nptr:=mk

8、leaf(id ,id.place) 第七章第七章 語(yǔ)義分析語(yǔ)義分析5 5、抽象語(yǔ)法樹(shù)表示、抽象語(yǔ)法樹(shù)表示( (存儲(chǔ)結(jié)構(gòu)存儲(chǔ)結(jié)構(gòu)) ): 法法1:1:每個(gè)結(jié)點(diǎn)用一個(gè)記錄,每記錄含運(yùn)算符域和算量指針域;每個(gè)結(jié)點(diǎn)用一個(gè)記錄,每記錄含運(yùn)算符域和算量指針域; 法法2:2:所有結(jié)點(diǎn)信息安排在一個(gè)記錄數(shù)組中,結(jié)點(diǎn)的索引為指針。所有結(jié)點(diǎn)信息安排在一個(gè)記錄數(shù)組中,結(jié)點(diǎn)的索引為指針。第七章第七章 語(yǔ)義分析語(yǔ)義分析三、三地址代碼三、三地址代碼 1 1、含義:每條代碼最多可以有三個(gè)操作數(shù),是抽象語(yǔ)法樹(shù)或、含義:每條代碼最多可以有三個(gè)操作數(shù),是抽象語(yǔ)法樹(shù)或DAGDAG 的一種線性表示,為中間代碼的一種抽象形式的一種線

9、性表示,為中間代碼的一種抽象形式 2 2、基本格式:、基本格式:x := y op zx := y op z 3 3、代碼種類(lèi):、代碼種類(lèi): (1)(1)計(jì)算、賦值:計(jì)算、賦值:x:=y op z x:=y op z 、x:=op y x:=op y 、x:=y x:=y ; (2)(2)流程控制:流程控制:goto Lgoto L、if x relop y goto Lif x relop y goto L、if a goto L if a goto L ; (3)(3)過(guò)程調(diào)用:過(guò)程調(diào)用:param x param x 、call p ,ncall p ,n; (4)(4)數(shù)組元素引用:數(shù)

10、組元素引用:x:=yi x:=yi 、xi:=y xi:=y ; (5)(5)地址、指針:地址、指針:x:=&y x:=&y 、x:=x:=* *y y 、* *x:=y x:=y ;例例 為如下定義賦值語(yǔ)句和簡(jiǎn)單算術(shù)表達(dá)式的文法設(shè)計(jì)屬性文為如下定義賦值語(yǔ)句和簡(jiǎn)單算術(shù)表達(dá)式的文法設(shè)計(jì)屬性文 法,將賦值語(yǔ)句翻譯成三地址代碼法,將賦值語(yǔ)句翻譯成三地址代碼 Sid:=ESid:=E EE+E|E EE+E|E* *E|-E|(E)|idE|-E|(E)|id第七章第七章 語(yǔ)義分析語(yǔ)義分析例例( (續(xù)續(xù)):(1):(1)屬性:屬性:codecode對(duì)應(yīng)語(yǔ)法單位對(duì)應(yīng)語(yǔ)法單位( (非終結(jié)符

11、非終結(jié)符) )的三地址代碼的三地址代碼; ; E.placeE E.placeE的值的值( (存放位置存放位置: :臨時(shí)變量或符號(hào)表入口臨時(shí)變量或符號(hào)表入口);); id.placeid id.placeid的值的值( (存放位置存放位置:id:id的符號(hào)表入口的符號(hào)表入口); ); (2)(2)子程序:子程序:NewTempNewTemp分配一個(gè)新的臨時(shí)變量分配一個(gè)新的臨時(shí)變量 GenGen生成一個(gè)新的三地址代碼生成一個(gè)新的三地址代碼(3)(3)產(chǎn)生三地址代碼的屬性文法產(chǎn)生三地址代碼的屬性文法 Eid EidE.place:=id.place;E.code:=; E.place:=id.pl

12、ace;E.code:=; E(E E(E1 1) )E.place:=EE.place:=E1 1.place;E.code:=E.place;E.code:=E1 1.code;.code; E- E E- E1 1E.place:=NewTemp;E.place:=NewTemp;E.code:=EE.code:=E1 1.code|gen(E.place ,:=,.code|gen(E.place ,:=, ,E,E1 1.place); .place); EEEE1 1* *+E+E2 2E.place:=NewTemp;E.place:=NewTemp;E.code:=EE.cod

13、e:=E1 1.code|E.code|E2 2.code|.code|gen(E.palce ,:= ,Egen(E.palce ,:= ,E1 1.palce ,.palce ,* *+,E+,E2 2.palce);.palce); Sid:=ESid:=ES.code:=E.code|gen(id.place ,:=,E.place); S.code:=E.code|gen(id.place ,:=,E.place); 第七章第七章 語(yǔ)義分析語(yǔ)義分析4、三地址代碼的三地址代碼的具體實(shí)現(xiàn)形式具體實(shí)現(xiàn)形式 第七章第七章 語(yǔ)義分析語(yǔ)義分析7.2 說(shuō)明語(yǔ)句的翻譯說(shuō)明語(yǔ)句的翻譯一、過(guò)程中一、過(guò)程

14、中( (函數(shù)內(nèi)函數(shù)內(nèi)) )的說(shuō)明語(yǔ)句的翻譯的說(shuō)明語(yǔ)句的翻譯 1 1、任務(wù)、任務(wù): :在符號(hào)表中建立相應(yīng)表項(xiàng)并填入類(lèi)型、相對(duì)地址等在符號(hào)表中建立相應(yīng)表項(xiàng)并填入類(lèi)型、相對(duì)地址等; ; 2 2、相對(duì)地址:相對(duì)內(nèi)存數(shù)據(jù)區(qū)基地址的偏移量;、相對(duì)地址:相對(duì)內(nèi)存數(shù)據(jù)區(qū)基地址的偏移量; 3 3、翻譯模式中的屬性、翻譯模式中的屬性 type:type:類(lèi)型類(lèi)型 ; width:; width:存儲(chǔ)單元長(zhǎng)度存儲(chǔ)單元長(zhǎng)度 ; val:; val:常量的值常量的值 ; ; name: name:標(biāo)識(shí)符名字標(biāo)識(shí)符名字 ; pointer:; pointer:指針類(lèi)型構(gòu)造符指針類(lèi)型構(gòu)造符 ; ; array: array

15、:數(shù)組類(lèi)型構(gòu)造符數(shù)組類(lèi)型構(gòu)造符 4 4、變量與子程序:、變量與子程序: offset:offset:全局變量全局變量, ,跟蹤下一個(gè)相對(duì)地址值跟蹤下一個(gè)相對(duì)地址值 ; ; Enter: Enter:填表子程序填表子程序 5 5、基礎(chǔ)文法:、基礎(chǔ)文法:PDPD Did:T|D;D Did:T|D;D Tinteger|real|T|arraynum of T Tinteger|real|T|arraynum of T 第七章第七章 語(yǔ)義分析語(yǔ)義分析6 6、翻譯模式、翻譯模式第七章第七章 語(yǔ)義分析語(yǔ)義分析7 7、翻譯過(guò)程、翻譯過(guò)程( (語(yǔ)法制導(dǎo)翻譯語(yǔ)法制導(dǎo)翻譯) )第七章第七章 語(yǔ)義分析語(yǔ)義分析二

16、、保留作用域信息二、保留作用域信息( (不同過(guò)程中的說(shuō)明語(yǔ)句的翻譯不同過(guò)程中的說(shuō)明語(yǔ)句的翻譯) ) 1 1、方法:為每個(gè)過(guò)程建立一個(gè)獨(dú)立的符號(hào)表,各表通過(guò)指針、方法:為每個(gè)過(guò)程建立一個(gè)獨(dú)立的符號(hào)表,各表通過(guò)指針 鏈接。鏈接。 2 2、基礎(chǔ)文法:、基礎(chǔ)文法: P M DP M D M M D id:T|D;D|proc id;N D;SD id:T|D;D|proc id;N D;S N N Tinteger|real|T|arraynum of T Tinteger|real|T|arraynum of T ( (注注:_:_產(chǎn)生式產(chǎn)生式M M 與與N N 的作用是使語(yǔ)義子程序都添的作用是使語(yǔ)

17、義子程序都添 加在產(chǎn)生式最后而不影響屬性計(jì)算順序加在產(chǎn)生式最后而不影響屬性計(jì)算順序) )第七章第七章 語(yǔ)義分析語(yǔ)義分析例:例:pascalpascal快速排序程序中的說(shuō)明語(yǔ)句與翻譯結(jié)果快速排序程序中的說(shuō)明語(yǔ)句與翻譯結(jié)果( (符號(hào)表符號(hào)表) )第七章第七章 語(yǔ)義分析語(yǔ)義分析3 3、變量與子程序、變量與子程序 棧棧tblptrtblptr:保存各外層過(guò)程的符號(hào)表指針;:保存各外層過(guò)程的符號(hào)表指針; 棧棧offsetoffset:棧頂元素為當(dāng)前過(guò)程的下一個(gè)局部名相對(duì)地址;:棧頂元素為當(dāng)前過(guò)程的下一個(gè)局部名相對(duì)地址; mktablemktable:建新表;:建新表;enterenter:填表:填表(

18、(名字名字) ); addwidthaddwidth:填寬度;:填寬度;enterprocenterproc:填表:填表( (過(guò)程名過(guò)程名) ); 4 4、翻譯模式、翻譯模式 (1) PMD(1) PMD addwidth(top(tblptr),top(offset); addwidth(top(tblptr),top(offset); pop(tblptr); pop(tblptr); pop(offset) pop(offset) (2) M (2) M t:=mktable(nil);push(t,tblptr);push(0,offset) t:=mktable(nil);push(

19、t,tblptr);push(0,offset) (3) DD (3) DD1 1;D;D2 2第七章第七章 語(yǔ)義分析語(yǔ)義分析(4) D proc id;N D(4) D proc id;N D1 1;S;S t:=top(tblptr); t:=top(tblptr); addwidth(t,top(offset); addwidth(t,top(offset); pop(tblptr); pop(tblptr); pop(offset) ; pop(offset) ; enterproc(top(tblptr),,t) enterproc(top(tblptr),id.nam

20、e,t) (5) D id: T(5) D id: T enter(top(tblptr),,T.type,top(offset); enter(top(tblptr),,T.type,top(offset); top(offset):=top(offset)+T.width top(offset):=top(offset)+T.width (6) N (6) N t:=mktable(top(tblptr); t:=mktable(top(tblptr); push(t,tblptr); push(t,tblptr); push(0,offset) push(0,

21、offset) 第七章第七章 語(yǔ)義分析語(yǔ)義分析三、記錄中的域名三、記錄中的域名 1 1、方法:為記錄類(lèi)型建立符號(hào)表;、方法:為記錄類(lèi)型建立符號(hào)表; 2 2、基礎(chǔ)文法:、基礎(chǔ)文法:T record D end T record D end 3 3、翻譯模式:(記錄類(lèi)型構(gòu)造符)、翻譯模式:(記錄類(lèi)型構(gòu)造符) (1) T record L D end(1) T record L D end T.type:=record(top(tblptr); T.type:=record(top(tblptr); T.width:=top(offset); T.width:=top(offset); pop(tb

22、lptr); pop(tblptr); pop(offset) pop(offset) (2) L (2) L t:=mktable(nil); t:=mktable(nil); push(t,tblptr); push(t,tblptr); push(0,offset) push(0,offset)第七章第七章 語(yǔ)義分析語(yǔ)義分析7.3 賦值語(yǔ)句的翻譯賦值語(yǔ)句的翻譯 一、簡(jiǎn)單算術(shù)表達(dá)式及賦值語(yǔ)句一、簡(jiǎn)單算術(shù)表達(dá)式及賦值語(yǔ)句 1 1、基礎(chǔ)文法、基礎(chǔ)文法 S id := ES id := E E id | E + E | E E id | E + E | E * * E | - E | ( E )

23、 E | - E | ( E ) 2 2、屬性、屬性 place:place:值值( (存放位置存放位置);); name: name:標(biāo)識(shí)符名標(biāo)識(shí)符名( (變量名變量名) ) 3 3、子程序、子程序 lookup:lookup:查符號(hào)表,返回標(biāo)識(shí)符得表入口,若返回查符號(hào)表,返回標(biāo)識(shí)符得表入口,若返回nil(nil(空空 值值) ),表示不在符號(hào)表中;,表示不在符號(hào)表中; emit:emit:產(chǎn)生三地址代碼并輸出產(chǎn)生三地址代碼并輸出( (到文件到文件) ); error:error:錯(cuò)誤處理程序錯(cuò)誤處理程序第七章第七章 語(yǔ)義分析語(yǔ)義分析4 4、翻譯模式、翻譯模式第七章第七章 語(yǔ)義分析語(yǔ)義分析二

24、、包含數(shù)組元素的引用的賦值語(yǔ)句的翻譯二、包含數(shù)組元素的引用的賦值語(yǔ)句的翻譯 1 1、數(shù)組元素相對(duì)地址的計(jì)算、數(shù)組元素相對(duì)地址的計(jì)算( (按行存放方式按行存放方式) )(1)A:(1)A:數(shù)組名;數(shù)組名;base:base:首地址;首地址;w:w:單元長(zhǎng)度;單元長(zhǎng)度;i:i:下標(biāo);下標(biāo);l:l:下標(biāo)下屆;下標(biāo)下屆; h:h:下標(biāo)上屆;下標(biāo)上屆;n:n:下標(biāo)的長(zhǎng)度;下標(biāo)的長(zhǎng)度;&:&:元素的相對(duì)地址元素的相對(duì)地址( (相對(duì)首地址相對(duì)首地址) )(2)(2)一維數(shù)組一維數(shù)組:&Ai=base+(il)w = iw+(baselw):&Ai=base+(il)w = i

25、w+(baselw) (3)(3)二維數(shù)組二維數(shù)組: : &Ai &Ai1 1,i,i2 2 =base+ =base+ (i (i1 1-l-l1 1)n)n2 2+i+i2 2-l-l2 2)w)w =(i =(i1 1n n2 2+i+i2 2)w)w +(base-(l +(base-(l1 1n n2 2+l+l2 2)w) )w) 第七章第七章 語(yǔ)義分析語(yǔ)義分析(4)k(4)k維數(shù)組維數(shù)組: : &Ai &Ai1 1 ,i,i2 2 , ,i, ,ik k=(i(i1 1n n2 2+i+i2 2)n)n3 3+i+i3 3)n)nk k+i+ik

26、k)w )w +base-(l+base-(l1 1n n2 2+l+l2 2)n)n3 3+l+l3 3)n)nk k+l+lk k)w )w 令令(i(i1 1n n2 2+i+i2 2)n)n3 3+i+i3 3)n)nk k+i+ik k)w = V)w = V (l (l1 1n n2 2+l+l2 2)n)n3 3+l+l3 3)n)nk k+l+lk k)w = C)w = C 則則 &Ai&Ai1 1,i,i2 2,i,ik k = V + base C = V + base C ( (其中,其中,basebase、C C與與i i1 1 ,i,i2 2 ,i,

27、ik k無(wú)關(guān),可在翻譯說(shuō)明語(yǔ)句時(shí)計(jì)無(wú)關(guān),可在翻譯說(shuō)明語(yǔ)句時(shí)計(jì) 算出并填入符號(hào)表算出并填入符號(hào)表) )2 2、基礎(chǔ)文法、基礎(chǔ)文法第七章第七章 語(yǔ)義分析語(yǔ)義分析(3)(3)包含數(shù)組元素的賦值語(yǔ)句文法:包含數(shù)組元素的賦值語(yǔ)句文法: SL:=ESL:=EEE+E|(E)|LEE+E|(E)|L LElist|id LElist|idElistElist,E|idE ElistElist,E|idE 3 3、數(shù)組元素引用的三地址代碼、數(shù)組元素引用的三地址代碼 &Ai&Ai1 1 ,i,i2 2 , ,i, ,ik k=(i=(i1 1n n2 2+i+i2 2)n)n3 3+i+i3 3

28、)n)nk k+i+ik k)w)w +base-(l +base-(l1 1n n2 2+l+l2 2)n)n3 3+l+l3 3)n)nk k+l+lk k)w = V + base C)w = V + base C 令令B=base CB=base C (1)Ai (1)Ai1 1 ,i,i2 2 , ,i, ,ik k=E=E譯成譯成:BV=E ,( = ,B ,V ,E):BV=E ,( = ,B ,V ,E) (2)x=Ai (2)x=Ai1 1 ,i,i2 2 , ,i, ,ik k 譯成譯成:x=BV ,(= ,B ,V ,x):x=BV ,(= ,B ,V ,x) 第七章第七

29、章 語(yǔ)義分析語(yǔ)義分析4 4、屬性、屬性 數(shù)組每維下標(biāo)的下界、長(zhǎng)度,數(shù)組元素存儲(chǔ)單元長(zhǎng)度,相對(duì)地?cái)?shù)組每維下標(biāo)的下界、長(zhǎng)度,數(shù)組元素存儲(chǔ)單元長(zhǎng)度,相對(duì)地 址計(jì)算公式中的址計(jì)算公式中的basebase、C C等可查符號(hào)表得到;等可查符號(hào)表得到; array:array:數(shù)組名的符號(hào)表入口;數(shù)組名的符號(hào)表入口; ndim:ndim:記錄下標(biāo)個(gè)數(shù)記錄下標(biāo)個(gè)數(shù)( (維數(shù)維數(shù)) ); 5 5、子程序、子程序(1)limit(1)limit:查符號(hào)表,返回每維長(zhǎng)度;:查符號(hào)表,返回每維長(zhǎng)度; (2)emit:(2)emit:生成并輸出中間代碼生成并輸出中間代碼( (三地址代碼三地址代碼););(3)NewTe

30、mp:(3)NewTemp:分配臨時(shí)存儲(chǔ)單元;分配臨時(shí)存儲(chǔ)單元;第七章第七章 語(yǔ)義分析語(yǔ)義分析6 6、翻譯模式、翻譯模式第七章第七章 語(yǔ)義分析語(yǔ)義分析第七章第七章 語(yǔ)義分析語(yǔ)義分析第七章第七章 語(yǔ)義分析語(yǔ)義分析第七章第七章 語(yǔ)義分析語(yǔ)義分析第七章第七章 語(yǔ)義分析語(yǔ)義分析三、表達(dá)式中的類(lèi)型問(wèn)題:三、表達(dá)式中的類(lèi)型問(wèn)題: 1 1、屬性:、屬性:typetype屬性表示類(lèi)型信息,屬性表示類(lèi)型信息, inttorealinttoreal表示類(lèi)型轉(zhuǎn)換,表示類(lèi)型轉(zhuǎn)換, 2 2、產(chǎn)生式、產(chǎn)生式EEEE1 1+E+E2 2的語(yǔ)義規(guī)則如下的語(yǔ)義規(guī)則如下 E.place := newtemp;E.place :=

31、 newtemp; if E if E1 1.type=integer and E.type=integer and E2 2.type=integer then .type=integer then emit(E.place:=E emit(E.place:=E1 1.place ,int+,E2,place); .place ,int+,E2,place); E.type:=integer E.type:=integer else if E else if E1 1.type=real and E.type=real and E2 2.type=real then.type=real th

32、en emit(E.place:=E emit(E.place:=E1 1.place ,real+,E.place ,real+,E2 2.place); .place); E.type:= real E.type:= real else if E else if E1 1.type=integer and E.type=integer and E2 2.type=real then.type=real then u:=newtemp; emit(u:= ,inttoreal,E u:=newtemp; emit(u:= ,inttoreal,E1 1.place);.place); emi

33、t( E.place:=u ,real+,E emit( E.place:=u ,real+,E2 2.place);.place); E.type:=real E.type:=real else if E else if E1 1.type=real and E.type=real and E2 2.type=integer then.type=integer then u:=newtemp; emit( u:=,inttoreal,E u:=newtemp; emit( u:=,inttoreal,E2 2.place);.place); emit(E.place:=E emit(E.pl

34、ace:=E1 1.place,real+,u );.place,real+,u ); E.type:=real E.type:=real else E.type:=type_error else E.type:=type_error 第七章第七章 語(yǔ)義分析語(yǔ)義分析7.4 布爾表達(dá)式的翻譯布爾表達(dá)式的翻譯一、布爾表達(dá)式的文法一、布爾表達(dá)式的文法 1 1、基礎(chǔ)文法:、基礎(chǔ)文法: EE or E|E and E|not E|( E )|id relop id|id EE or E|E and E|not E|( E )|id relop id|id 2 2、關(guān)系運(yùn)算符、關(guān)系運(yùn)算符reloprelo

35、p的的opop屬性值為:、屬性值為:、 3 3、語(yǔ)義處理方法、語(yǔ)義處理方法 (1)(1)求值求值: : 法一:同算術(shù)表達(dá)式;法一:同算術(shù)表達(dá)式; 法二:優(yōu)化辦法,即法二:優(yōu)化辦法,即 A or BA or B解釋為解釋為 If A Then TRUE Else B If A Then TRUE Else B A and B A and B解釋為解釋為 If A Then B Else FALSE If A Then B Else FALSE not A not A解釋為解釋為 If A Then FALSE Else TRUE If A Then FALSE Else TRUE (2) (2)

36、做條件控制做條件控制: :控制選擇語(yǔ)句和循環(huán)語(yǔ)句的執(zhí)行。控制選擇語(yǔ)句和循環(huán)語(yǔ)句的執(zhí)行。第七章第七章 語(yǔ)義分析語(yǔ)義分析二、對(duì)布爾表達(dá)式求值的語(yǔ)義處理二、對(duì)布爾表達(dá)式求值的語(yǔ)義處理 1 1、數(shù)值表示法:用、數(shù)值表示法:用1 1表示表示TRUETRUE,0 0表示表示FALSEFALSE; 2 2、語(yǔ)義處理方法:、語(yǔ)義處理方法: (1)(1)布爾表達(dá)式直接翻譯為能表示布爾運(yùn)算的中間代碼;類(lèi)似布爾表達(dá)式直接翻譯為能表示布爾運(yùn)算的中間代碼;類(lèi)似 算術(shù)表達(dá)式的處理方法。算術(shù)表達(dá)式的處理方法。 (2)(2)關(guān)系表達(dá)式根據(jù)關(guān)系是否成立確定值為關(guān)系表達(dá)式根據(jù)關(guān)系是否成立確定值為1 1或或0 0。 例:例:第七章

37、第七章 語(yǔ)義分析語(yǔ)義分析3 3、翻譯模式、翻譯模式( (屬性文法屬性文法) )第七章第七章 語(yǔ)義分析語(yǔ)義分析例:對(duì)布爾表達(dá)式例:對(duì)布爾表達(dá)式a b or c d and e fa b or c d and e c or bc or bd then S1 1 else S else S2 2 三地址代碼序列為三地址代碼序列為 第七章第七章 語(yǔ)義分析語(yǔ)義分析2 2、基礎(chǔ)文法、基礎(chǔ)文法( (變形以后變形以后) )EE or ME|E and ME|not E|(E)|id relop id| idEE or ME|E and ME|not E|(E)|id relop id| idM M 3 3、完

38、成轉(zhuǎn)移操作的四元式、完成轉(zhuǎn)移操作的四元式(1) (jnz , a , _ , p) (1) (jnz , a , _ , p) 表示表示 if a goto p if a goto p (2) (jrop , x , y , p) (2) (jrop , x , y , p) 表示表示 if x rop y goto p if x rop y goto p (3) (j , _ , _ , p) (3) (j , _ , _ , p) 表示表示 goto p goto p 4 4、回填操作、回填操作 (1)(1) 轉(zhuǎn)移操作轉(zhuǎn)移操作(goto L)(goto L)要轉(zhuǎn)移到要轉(zhuǎn)移到 的位置的位置(

39、L)(L)尚未確定,當(dāng)位尚未確定,當(dāng)位 置置(L)(L)確定后再填上;確定后再填上; (2)(2) 需回填同一位置的轉(zhuǎn)移需回填同一位置的轉(zhuǎn)移 操作多于一個(gè),用鏈表鏈接。操作多于一個(gè),用鏈表鏈接。第七章第七章 語(yǔ)義分析語(yǔ)義分析5 5、相關(guān)屬性、全局變量、子程序、相關(guān)屬性、全局變量、子程序第七章第七章 語(yǔ)義分析語(yǔ)義分析6 6、翻譯模式、翻譯模式第七章第七章 語(yǔ)義分析語(yǔ)義分析第七章第七章 語(yǔ)義分析語(yǔ)義分析第七章第七章 語(yǔ)義分析語(yǔ)義分析例例( (續(xù)續(xù)) ):ab or cd and efab or cd and ef的帶注釋的語(yǔ)法樹(shù)及翻譯結(jié)果的帶注釋的語(yǔ)法樹(shù)及翻譯結(jié)果第七章第七章 語(yǔ)義分析語(yǔ)義分析7.

40、5 控制語(yǔ)句的翻譯控制語(yǔ)句的翻譯 一、控制流語(yǔ)句一、控制流語(yǔ)句 1 1、語(yǔ)句種類(lèi)及對(duì)應(yīng)中間代碼的結(jié)構(gòu):、語(yǔ)句種類(lèi)及對(duì)應(yīng)中間代碼的結(jié)構(gòu):第七章第七章 語(yǔ)義分析語(yǔ)義分析2 2、基礎(chǔ)文法及其變換、基礎(chǔ)文法及其變換第七章第七章 語(yǔ)義分析語(yǔ)義分析3 3、翻譯模式、翻譯模式屬性屬性S.next(S.next(或或L.next):S(L.next):S(或或L)L)的四元式組中需回填同一個(gè)出的四元式組中需回填同一個(gè)出口的四元式鏈接成的鏈表表頭。口的四元式鏈接成的鏈表表頭。第七章第七章 語(yǔ)義分析語(yǔ)義分析第七章第七章 語(yǔ)義分析語(yǔ)義分析第七章第七章 語(yǔ)義分析語(yǔ)義分析二、標(biāo)號(hào)與二、標(biāo)號(hào)與gotogoto語(yǔ)句語(yǔ)句 1 1、基礎(chǔ)文法、基礎(chǔ)文法: S goto label|label S label i: : S goto

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論