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

下載本文檔

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

文檔簡(jiǎn)介

1、第八章第八章 符號(hào)表符號(hào)表 第八章第八章 符號(hào)表符號(hào)表 n符號(hào)表的作用和地位符號(hào)表的作用和地位n符號(hào)的主要屬性及作用符號(hào)的主要屬性及作用n符號(hào)表的組織符號(hào)表的組織第八章第八章 符號(hào)表符號(hào)表 一、符號(hào)表的作用和地位一、本章主要內(nèi)容:一、本章主要內(nèi)容: 靜態(tài)語義檢查和翻譯中間代碼;靜態(tài)語義檢查和翻譯中間代碼; 二、靜態(tài)語義檢查的內(nèi)容:二、靜態(tài)語義檢查的內(nèi)容: 類型檢查、控制流檢查、一致性檢查、相關(guān)名字檢查、類型檢查、控制流檢查、一致性檢查、相關(guān)名字檢查、 名字的作用域分析等;名字的作用域分析等; 三、翻譯產(chǎn)生中間代碼的優(yōu)點(diǎn):三、翻譯產(chǎn)生中間代碼的優(yōu)點(diǎn): 便于進(jìn)行與機(jī)器無關(guān)的代碼優(yōu)化工作、使編譯程序

2、改變目標(biāo)便于進(jìn)行與機(jī)器無關(guān)的代碼優(yōu)化工作、使編譯程序改變目標(biāo) 機(jī)更容易、使編譯程序的結(jié)構(gòu)在邏輯上更為簡(jiǎn)單明確;機(jī)更容易、使編譯程序的結(jié)構(gòu)在邏輯上更為簡(jiǎn)單明確; 四、靜態(tài)語義檢查和中間代碼產(chǎn)生在編譯程序中的地位:四、靜態(tài)語義檢查和中間代碼產(chǎn)生在編譯程序中的地位: 第八章第八章 符號(hào)表符號(hào)表 7.1 中間語言中間語言(中間代碼的種類中間代碼的種類)一、后綴式一、后綴式( (逆波蘭逆波蘭) ) 1 1、表達(dá)式、表達(dá)式E E的后綴式形式的后綴式形式E E的定義:的定義: 若若E E是變量或常量:是變量或常量:E E為為E E; 若若E E是是E E1 1 op Eop E2 2:E E為為E E1 1

3、E E2 2opop; 若若E E是(是(E1E1):):E E為為E E1 1; 2 2、中綴形式的表達(dá)式翻譯為后綴式的語義規(guī)則:、中綴形式的表達(dá)式翻譯為后綴式的語義規(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 := E1.Code|E2 .Code|op E( E1 ) E.Code := E1.Code E( E1 ) E.Code := E1.Code E id E.Code :=

4、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) 第八章第八章 符號(hào)表符號(hào)表 二、圖表示法二、圖表示法 1 1、抽象語法樹。、抽象語法樹。 2 2、有向無環(huán)圖(、有向無環(huán)圖(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)代表操作符,其孩子代表

5、操作數(shù);點(diǎn)代表操作符,其孩子代表操作數(shù); (2)(2)與抽象語法樹區(qū)別:抽象語法樹描述源程序的自然層次結(jié)與抽象語法樹區(qū)別:抽象語法樹描述源程序的自然層次結(jié) 構(gòu),構(gòu),DAGDAG也可以,但可標(biāo)識(shí)出公共子表達(dá)式;也可以,但可標(biāo)識(shí)出公共子表達(dá)式; 例例: :第八章第八章 符號(hào)表符號(hào)表 3 3、與后綴式的關(guān)系:表達(dá)式的抽象語法樹形式的中間代碼與后、與后綴式的關(guān)系:表達(dá)式的抽象語法樹形式的中間代碼與后 綴式等價(jià),后綴式是抽象語法樹的線性表現(xiàn)形式,是樹的結(jié)點(diǎn)綴式等價(jià),后綴式是抽象語法樹的線性表現(xiàn)形式,是樹的結(jié)點(diǎn)序列序列( (每個(gè)結(jié)點(diǎn)都在其所有子結(jié)點(diǎn)之后立即出現(xiàn)每個(gè)結(jié)點(diǎn)都在其所有子結(jié)點(diǎn)之后立即出現(xiàn) ) )。

6、第八章第八章 符號(hào)表符號(hào)表 4 4、產(chǎn)生賦值語句抽象語法樹的屬性文法:、產(chǎn)生賦值語句抽象語法樹的屬性文法: 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:=mknode(+,E1 1.nptr ,E.nptr ,E2 2.nptr) .nptr) E E E E1 1* *E E2 2 E.nptr:=mknode(E.nptr:=

7、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:=mkleaf(id ,id.place) 第八章第八章 符號(hào)表符號(hào)表 5 5、抽象語法樹表示、抽象語法樹表示( (存儲(chǔ)結(jié)構(gòu)存儲(chǔ)結(jié)構(gòu)) ): 法法1:1:每個(gè)結(jié)點(diǎn)用一個(gè)記錄,每記錄含

8、運(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)的索引為指針。第八章第八章 符號(hào)表符號(hào)表 三、三地址代碼三、三地址代碼 1 1、含義:每條代碼最多可以有三個(gè)操作數(shù),是抽象語法樹或、含義:每條代碼最多可以有三個(gè)操作數(shù),是抽象語法樹或DAGDAG 的一種線性表示,為中間代碼的一種抽象形式的一種線性表示,為中間代碼的一種抽象形式 2 2、基本格式:、基本格式:x := y op zx := y op z 3 3、代碼種類:、代碼種類: (1)(1)計(jì)算、賦值:計(jì)算、賦值:x

9、:=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)過程調(diào)用:過程調(diào)用:param x param x 、call p ,ncall p ,n; (4)(4)數(shù)組元素引用:數(shù)組元素引用:x:=yi x:=yi 、xi:=y xi:=y ; (5)(5)地址、指針:地址、指針:x:=&y x:=&y 、x:=x:=* *y y 、* *x

10、:=y x:=y ;例例 為如下定義賦值語句和簡(jiǎn)單算術(shù)表達(dá)式的文法設(shè)計(jì)屬性文為如下定義賦值語句和簡(jiǎn)單算術(shù)表達(dá)式的文法設(shè)計(jì)屬性文 法,將賦值語句翻譯成三地址代碼法,將賦值語句翻譯成三地址代碼 Sid:=ESid:=E EE+E|E EE+E|E* *E|-E|(E)|idE|-E|(E)|id第八章第八章 符號(hào)表符號(hào)表 例例( (續(xù)續(xù)):(1):(1)屬性:屬性:codecode對(duì)應(yīng)語法單位對(duì)應(yīng)語法單位( (非終結(jié)符非終結(jié)符) )的三地址代碼的三地址代碼; ; E.placeE E.placeE的值的值( (存放位置存放位置: :臨時(shí)變量或符號(hào)表入口臨時(shí)變量或符號(hào)表入口);); id.place

11、id 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.place;E.code:=; E(E E(E1 1) )E.place:=EE.place:=E1 1.place;E.code:=E.place;E.code:=E1 1.code;

12、.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.code:=E1 1.code|E.code|E2 2.code|.code|gen(E.palce ,:= ,Egen(E.palce ,:= ,E1 1.palce ,.palce ,

13、* *+,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); 第八章第八章 符號(hào)表符號(hào)表 4、三地址代碼的三地址代碼的具體實(shí)現(xiàn)形式具體實(shí)現(xiàn)形式 第八章第八章 符號(hào)表符號(hào)表 7.2 說明語句的翻譯說明語句的翻譯一、過程中一、過程中( (函數(shù)內(nèi)函數(shù)內(nèi)) )的說明語句的翻譯的說明語句的翻譯 1 1、任務(wù)、任務(wù): :在符號(hào)表中建立相應(yīng)表項(xiàng)并填入類型、相對(duì)地址等在符號(hào)表中建立相應(yīng)表項(xiàng)并填入類型、相對(duì)地址等; ; 2 2

14、、相對(duì)地址:相對(duì)內(nèi)存數(shù)據(jù)區(qū)基地址的偏移量;、相對(duì)地址:相對(duì)內(nèi)存數(shù)據(jù)區(qū)基地址的偏移量; 3 3、翻譯模式中的屬性、翻譯模式中的屬性 type:type:類型類型 ; width:; width:存儲(chǔ)單元長度存儲(chǔ)單元長度 ; val:; val:常量的值常量的值 ; ; name: name:標(biāo)識(shí)符名字標(biāo)識(shí)符名字 ; pointer:; pointer:指針類型構(gòu)造符指針類型構(gòu)造符 ; ; array: array:數(shù)組類型構(gòu)造符數(shù)組類型構(gòu)造符 4 4、變量與子程序:、變量與子程序: offset:offset:全局變量全局變量, ,跟蹤下一個(gè)相對(duì)地址值跟蹤下一個(gè)相對(duì)地址值 ; ; Enter:

15、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 第八章第八章 符號(hào)表符號(hào)表 6 6、翻譯模式、翻譯模式第八章第八章 符號(hào)表符號(hào)表 7 7、翻譯過程、翻譯過程( (語法制導(dǎo)翻譯語法制導(dǎo)翻譯) )第八章第八章 符號(hào)表符號(hào)表 二、保留作用域信息二、保留作用域信息( (不同過程中的說明語句的翻譯不同過程中的說明語句的翻譯) ) 1 1、方法:為每個(gè)過程建立一個(gè)獨(dú)立的符號(hào)表,各表通過指針、方法:為每個(gè)過程建立一個(gè)獨(dú)立的符

16、號(hào)表,各表通過指針 鏈接。鏈接。 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 的作用是使語義子程序都添的作用是使語義子程序都添 加在產(chǎn)生式最后而不影響屬性計(jì)算順序加在產(chǎn)生式最后而不影響屬性計(jì)算順序) )第八章第八章 符號(hào)表符號(hào)表 例:例:pascalpascal快速排序程序中的說明語句與翻譯結(jié)果快速排序程

17、序中的說明語句與翻譯結(jié)果( (符號(hào)表符號(hào)表) )第八章第八章 符號(hào)表符號(hào)表 3 3、變量與子程序、變量與子程序 棧棧tblptrtblptr:保存各外層過程的符號(hào)表指針;:保存各外層過程的符號(hào)表指針; 棧棧offsetoffset:棧頂元素為當(dāng)前過程的下一個(gè)局部名相對(duì)地址;:棧頂元素為當(dāng)前過程的下一個(gè)局部名相對(duì)地址; mktablemktable:建新表;:建新表;enterenter:填表:填表( (名字名字) ); addwidthaddwidth:填寬度;:填寬度;enterprocenterproc:填表:填表( (過程名過程名) ); 4 4、翻譯模式、翻譯模式 (1) PMD(1)

18、 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(t,tblptr);push(0,offset) (3) DD (3) DD1 1;D;D2 2第八章第八章 符號(hào)表符號(hào)表 (4) D proc id;N D(4) D proc id;N D1

19、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),,t) (5) D id: T(5) D id: T enter(top(tblptr),,T.type,top(offset); enter(top(tblptr),

20、,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,offset) 第八章第八章 符號(hào)表符號(hào)表 三、記錄中的域名三、記錄中的域名 1 1、方法:為記錄類型建立符號(hào)表;、方法:為記錄類型建立符號(hào)表; 2 2、基礎(chǔ)文法:、基礎(chǔ)文法:T record D

21、end T record D end 3 3、翻譯模式:(記錄類型構(gòu)造符)、翻譯模式:(記錄類型構(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(tblptr); pop(tblptr); pop(offset) pop(offset) (2) L (2) L t:=mktable(nil); t:=mktable(nil); push(t,tbl

22、ptr); push(t,tblptr); push(0,offset) push(0,offset)第八章第八章 符號(hào)表符號(hào)表 7.3 賦值語句的翻譯賦值語句的翻譯 一、簡(jiǎn)單算術(shù)表達(dá)式及賦值語句一、簡(jiǎn)單算術(shù)表達(dá)式及賦值語句 1 1、基礎(chǔ)文法、基礎(chǔ)文法 S id := ES id := E E id | E + E | E E id | E + E | E * * E | - E | ( E ) E | - E | ( E ) 2 2、屬性、屬性 place:place:值值( (存放位置存放位置);); name: name:標(biāo)識(shí)符名標(biāo)識(shí)符名( (變量名變量名) ) 3 3、子程序、子程序

23、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ò)誤處理程序第八章第八章 符號(hào)表符號(hào)表 4 4、翻譯模式、翻譯模式第八章第八章 符號(hào)表符號(hào)表 二、包含數(shù)組元素的引用的賦值語句的翻譯二、包含數(shù)組元素的引用的賦值語句的翻譯 1 1、數(shù)組元素相對(duì)地址的計(jì)算、數(shù)組元素相對(duì)地址的計(jì)算( (按行存放方式按行存放方式) )(1)A:(1)A:數(shù)組名;數(shù)組名;ba

24、se:base:首地址;首地址;w:w:單元長度;單元長度;i:i:下標(biāo);下標(biāo);l:l:下標(biāo)下屆;下標(biāo)下屆; h:h:下標(biāo)上屆;下標(biāo)上屆;n:n:下標(biāo)的長度;下標(biāo)的長度;&:&:元素的相對(duì)地址元素的相對(duì)地址( (相對(duì)首地址相對(duì)首地址) )(2)(2)一維數(shù)組一維數(shù)組:&Ai=base+(il)w = iw+(baselw):&Ai=base+(il)w = iw+(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

25、 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) 第八章第八章 符號(hào)表符號(hào)表 (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 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

26、+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,ik k無關(guān),可在翻譯說明語句時(shí)計(jì)無關(guān),可在翻譯說明語句時(shí)計(jì) 算出并填入符號(hào)表算出并填入符號(hào)表) )2 2、基礎(chǔ)文法、基礎(chǔ)文法第八章第八章 符號(hào)表符號(hào)表 (3)(3)包含數(shù)組元素的賦值語句文法:包含數(shù)組元素的

27、賦值語句文法: 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)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 + b

28、ase 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) 第八章第八章 符號(hào)表符號(hào)表 4 4、屬性、屬性 數(shù)組每維下標(biāo)的下界、長度,數(shù)組元素存儲(chǔ)單元長度,相對(duì)地?cái)?shù)組每維下標(biāo)的下界、長度,數(shù)組元素存儲(chǔ)單元長度,相對(duì)地 址計(jì)算公式中的址計(jì)算公式中的basebase、C C等可查符號(hào)

29、表得到;等可查符號(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)表,返回每維長度;:查符號(hào)表,返回每維長度; (2)emit:(2)emit:生成并輸出中間代碼生成并輸出中間代碼( (三地址代碼三地址代碼););(3)NewTemp:(3)NewTemp:分配臨時(shí)存儲(chǔ)單元;分配臨時(shí)存儲(chǔ)單元;第八章第八章 符號(hào)表符號(hào)表 6 6、翻譯模式、翻譯模式第八章第八章 符號(hào)表符號(hào)表 第八章第八章 符號(hào)表符號(hào)表 第八章第八章 符號(hào)表符號(hào)表 第八章第八

30、章 符號(hào)表符號(hào)表 第八章第八章 符號(hào)表符號(hào)表 三、表達(dá)式中的類型問題:三、表達(dá)式中的類型問題: 1 1、屬性:、屬性:typetype屬性表示類型信息,屬性表示類型信息, inttorealinttoreal表示類型轉(zhuǎn)換,表示類型轉(zhuǎn)換, 2 2、產(chǎn)生式、產(chǎn)生式EEEE1 1+E+E2 2的語義規(guī)則如下的語義規(guī)則如下 E.place := newtemp;E.place := newtemp; if E if E1 1.type=integer and E.type=integer and E2 2.type=integer then .type=integer then emit(E.plac

31、e:=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 then emit(E.place:=E emit(E.place:=E1 1.place ,real+,E.place ,real+,E2 2.place); .place); E.type:= real E.type:= r

32、eal 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); emit( 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

33、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.place:=E1 1.place,real+,u );.place,real+,u ); E.type:=real E.type:=real else E.type:=type_error else E.type:=type_

34、error 第八章第八章 符號(hào)表符號(hào)表 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)算符reloprelop的的opop屬性值為:、屬性值為:、 3 3、語義處理方法、語義處理方法 (1)(1)求值求值: : 法一:同算術(shù)表達(dá)式;法一:同算術(shù)表達(dá)式; 法二:優(yōu)化辦法,即法二:優(yōu)化辦法,即 A or BA or B解釋為解釋為 If

35、 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)做條件控制做條件控制: :控制選擇語句和循環(huán)語句的執(zhí)行。控制選擇語句和循環(huán)語句的執(zhí)行。第八章第八章 符號(hào)表符號(hào)表 二、對(duì)布爾表達(dá)式求值的語義處理二、對(duì)布爾表達(dá)式求值的語義處理 1 1、數(shù)值表示法:用、數(shù)值表示法:用1 1表示表

36、示TRUETRUE,0 0表示表示FALSEFALSE; 2 2、語義處理方法:、語義處理方法: (1)(1)布爾表達(dá)式直接翻譯為能表示布爾運(yùn)算的中間代碼;類似布爾表達(dá)式直接翻譯為能表示布爾運(yùn)算的中間代碼;類似 算術(shù)表達(dá)式的處理方法。算術(shù)表達(dá)式的處理方法。 (2)(2)關(guān)系表達(dá)式根據(jù)關(guān)系是否成立確定值為關(guān)系表達(dá)式根據(jù)關(guān)系是否成立確定值為1 1或或0 0。 例:例:第八章第八章 符號(hào)表符號(hào)表 3 3、翻譯模式、翻譯模式( (屬性文法屬性文法) )第八章第八章 符號(hào)表符號(hào)表 例:對(duì)布爾表達(dá)式例:對(duì)布爾表達(dá)式a b or c d and e fa b or c d and e c or bc or

37、bd then S1 1 else S else S2 2 三地址代碼序列為三地址代碼序列為 第八章第八章 符號(hào)表符號(hào)表 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、完成轉(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) (

38、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)移到 的位置的位置(L)(L)尚未確定,當(dāng)位尚未確定,當(dāng)位 置置(L)(L)確定后再填上;確定后再填上; (2)(2) 需回填同一位置的轉(zhuǎn)移需回填同一位置的轉(zhuǎn)移 操作多于一個(gè),用鏈表鏈接。操作多于一個(gè),用鏈表鏈接。第八章第八章 符號(hào)表符號(hào)表 5 5、相關(guān)

39、屬性、全局變量、子程序、相關(guān)屬性、全局變量、子程序第八章第八章 符號(hào)表符號(hào)表 6 6、翻譯模式、翻譯模式第八章第八章 符號(hào)表符號(hào)表 第八章第八章 符號(hào)表符號(hào)表 第八章第八章 符號(hào)表符號(hào)表 例例( (續(xù)續(xù)) ):ab or cd and efab or cd and ef的帶注釋的語法樹及翻譯結(jié)果的帶注釋的語法樹及翻譯結(jié)果第八章第八章 符號(hào)表符號(hào)表 7.5 控制語句的翻譯控制語句的翻譯 一、控制流語句一、控制流語句 1 1、語句種類及對(duì)應(yīng)中間代碼的結(jié)構(gòu):、語句種類及對(duì)應(yīng)中間代碼的結(jié)構(gòu):第八章第八章 符號(hào)表符號(hào)表 2 2、基礎(chǔ)文法及其變換、基礎(chǔ)文法及其變換第八章第八章 符號(hào)表符號(hào)表 3 3、翻譯模式、翻譯模式屬性屬性S.next(S.next(或或L.next):S(L.next):S(或或L)L)的四元式組中需回填同一個(gè)出的四元式組中需回填同一個(gè)出口的四元式鏈接成的鏈表表頭??诘乃脑芥溄映傻逆湵肀眍^。第八章第八章 符號(hào)表符號(hào)表 第八章第八章 符號(hào)表符號(hào)表 第八章第八章 符號(hào)表符號(hào)表 二、標(biāo)號(hào)與二、標(biāo)號(hào)與gotogoto語句語句 1 1、基礎(chǔ)文法、基礎(chǔ)文法: S goto label|label S label i: : S goto label|labe

溫馨提示

  • 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. 人人文庫網(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)論