語(yǔ)法制導(dǎo)翻譯與中間代碼生成實(shí)用教案_第1頁(yè)
語(yǔ)法制導(dǎo)翻譯與中間代碼生成實(shí)用教案_第2頁(yè)
語(yǔ)法制導(dǎo)翻譯與中間代碼生成實(shí)用教案_第3頁(yè)
語(yǔ)法制導(dǎo)翻譯與中間代碼生成實(shí)用教案_第4頁(yè)
語(yǔ)法制導(dǎo)翻譯與中間代碼生成實(shí)用教案_第5頁(yè)
已閱讀5頁(yè),還剩82頁(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、會(huì)計(jì)學(xué)1語(yǔ)法制導(dǎo)語(yǔ)法制導(dǎo)(zhdo)翻譯與中間代碼生成翻譯與中間代碼生成第一頁(yè),共87頁(yè)。8.1 8.1 屬性屬性(shxng)(shxng)文文法法 語(yǔ)法分析后的源程序=語(yǔ)義處理(chl) 靜態(tài)語(yǔ)義是對(duì)程序約束的描述,這些約束無(wú)法通過(guò)抽象語(yǔ)法規(guī)則來(lái)妥善地描述,實(shí)質(zhì)上就是語(yǔ)法規(guī)則的良形式條件,它可以分為(fn wi)類型規(guī)則和作用域/可見(jiàn)性規(guī)則兩大類 動(dòng)態(tài)語(yǔ)義 程序單位描述的計(jì)算編譯程序的語(yǔ)義處理工作 1 靜態(tài)語(yǔ)義審查,即驗(yàn)證語(yǔ)法結(jié)構(gòu)合法的程序是否有意義 2 生成中間代碼第1頁(yè)/共87頁(yè)第二頁(yè),共87頁(yè)。靜態(tài)語(yǔ)義審查 (1)類型檢查。根據(jù)類型相容性要求,驗(yàn)證程序中執(zhí)行的每個(gè)操作是否遵守語(yǔ)言的類

2、型系統(tǒng)的過(guò)程(guchng),編譯程序必須報(bào)告不符合類型系統(tǒng)的信息。 (2)控制流檢查。控制流語(yǔ)句必須使控制轉(zhuǎn)移到合法的地方。例如,在C語(yǔ)言中break語(yǔ)句使控制跳離包括該語(yǔ)句的最小while、for或switch語(yǔ)句。如果不存在包括它的這樣的語(yǔ)句,則就報(bào)錯(cuò)。第2頁(yè)/共87頁(yè)第三頁(yè),共87頁(yè)。 (3)一致性檢查。在很多場(chǎng)合要求對(duì)象只能被定義一次。例如Pascal語(yǔ)言規(guī)定(gudng)同一標(biāo)識(shí)符在一個(gè)分程序中只能被說(shuō)明一次,同一case語(yǔ)句的標(biāo)號(hào)不能相同,枚舉類型的元素不能重復(fù)出現(xiàn)等等。 (4)上下文相關(guān)性檢查。比如,變量名字必須先聲明后引用; (5)名字的作用域分析解釋執(zhí)行動(dòng)態(tài)語(yǔ)義 (計(jì)算)生

3、成代碼(中間代碼或目標(biāo)代碼)第3頁(yè)/共87頁(yè)第四頁(yè),共87頁(yè)。例:有文法GE: E T1+T2 | T1 or T2 T num|true|false對(duì)輸入(shr)串 2+6 語(yǔ)法樹如圖:ET+T26ET1.t=T2.tT+26TT2.t=intT1.t=int第4頁(yè)/共87頁(yè)第五頁(yè),共87頁(yè)。類型檢查的屬性(shxng)文法:E T1+T2 T1.t=int AND T2.t=intE T1 or T2 T1.t=bool AND T2.t=boolT num T.t:=intT true T.t:=boolT false T.t:=bool第5頁(yè)/共87頁(yè)第六頁(yè),共87頁(yè)。第6頁(yè)/共87

4、頁(yè)第七頁(yè),共87頁(yè)。第7頁(yè)/共87頁(yè)第八頁(yè),共87頁(yè)。第8頁(yè)/共87頁(yè)第九頁(yè),共87頁(yè)。第9頁(yè)/共87頁(yè)第十頁(yè),共87頁(yè)。語(yǔ) 義 規(guī) 則 L EE E1+TE TT T1 * FT FF (E)F digitPrint(E.val) E.val:=E1.val+T.val E.val:=T.val T.val:=T1.val F.val T.val:=F.valF.val:=E.valF.val:=digit.lexval產(chǎn) 生 式第10頁(yè)/共87頁(yè)第十一頁(yè),共87頁(yè)。LE.val=19E.val=15T.val=4T.val=15F.val=4T.val=3F.val=3F.val=5dig

5、it.lexval=4digit.lexval=5digit.lexval=3+*3*5+4的帶注釋的帶注釋(zhsh)的分析樹的分析樹第11頁(yè)/共87頁(yè)第十二頁(yè),共87頁(yè)。產(chǎn)生(chnshng)式語(yǔ) 義 規(guī) 則D TL T int T real L L1,idL idL.type:=T.typeT.type=integerT.type:=real L1.type:=L.type addtype(id.entry,L.type) addtype(id.entry,L.type)第12頁(yè)/共87頁(yè)第十三頁(yè),共87頁(yè)。DL.type= realL.type= realL.type= realT.t

6、ype=realrealid2id1id3.繼承屬性繼承屬性(shxng)(續(xù))(續(xù))Real id1,id2,id3的帶注釋的語(yǔ)法樹的帶注釋的語(yǔ)法樹,第13頁(yè)/共87頁(yè)第十四頁(yè),共87頁(yè)。 8.2 語(yǔ)法制導(dǎo)(zhdo)概論 屬性文法:描述語(yǔ)義規(guī)則。一個(gè)屬性文法包含一個(gè)上下文無(wú)關(guān)文法和一系列語(yǔ)義規(guī)則,這些語(yǔ)義規(guī)則附在文法的每一個(gè)產(chǎn)生式上。 語(yǔ)法制導(dǎo)翻譯:在語(yǔ)法分析的同時(shí),執(zhí)行語(yǔ)義子程序: 1 檢查靜態(tài)語(yǔ)義 2 翻譯(生成)中間(目標(biāo)(mbio)代碼第14頁(yè)/共87頁(yè)第十五頁(yè),共87頁(yè)。 基于屬性文法的處理過(guò)程即語(yǔ)法制導(dǎo)翻譯是這樣的: 對(duì)符號(hào)串進(jìn)行語(yǔ)法分析,構(gòu)造語(yǔ)法樹,然后根據(jù)(gnj)需要構(gòu)造

7、屬性依賴圖,遍歷語(yǔ)法樹并在語(yǔ)法樹的各結(jié)點(diǎn)按語(yǔ)義規(guī)則進(jìn)行計(jì)算。 8.2.1 計(jì)算語(yǔ)義規(guī)則 屬性依賴圖是一個(gè)有向圖,用于描述分析樹中的屬性和屬性間的互相依賴關(guān)系。 對(duì)于編譯程序來(lái)講,在單遍掃描中完成語(yǔ)義翻譯(fny)工作非常重要。第15頁(yè)/共87頁(yè)第十六頁(yè),共87頁(yè)。 8.2.2 S-屬性文法和自下而上翻譯(fny) 一般的屬性文法的翻譯(fny)器很難建立,然而L-屬性文法的翻譯(fny)器很容易建立。 L-屬性(shxng)文法的一個(gè)特例叫S-屬性(shxng)文法。S-屬性(shxng)文法是只含有綜合屬性(shxng)的屬性(shxng)文法。8.2.3 L-屬性文法在自下而上(z xi

8、r shn)分析中實(shí)現(xiàn) L-屬性文法允許一次遍歷就計(jì)算出所以的屬性值。第16頁(yè)/共87頁(yè)第十七頁(yè),共87頁(yè)。8.3 8.3 中間代碼的形式中間代碼的形式(xngsh)(xngsh) 編譯程序的總?cè)蝿?wù)是把源語(yǔ)言的程序代碼(源代碼)翻譯成目標(biāo)(mbio)語(yǔ)言的程序代碼(目標(biāo)(mbio)代碼)。 有些編譯程序直接把源代碼翻譯目標(biāo)代碼,而有些編譯程序首先把源代碼翻譯成一種(y zhn)中間語(yǔ)言的程序代碼(中間代碼),再生成目標(biāo)代碼。第17頁(yè)/共87頁(yè)第十八頁(yè),共87頁(yè)。翻譯方法(fngf)可分為語(yǔ)法(yf)制導(dǎo)非語(yǔ)法(yf)制導(dǎo)中間代碼的特點(diǎn): 中間代碼與機(jī)器無(wú)關(guān),編譯程序易于移植。 中間代碼級(jí)進(jìn)行優(yōu)

9、化較為容易。常見(jiàn)的中間代碼形式有逆波蘭式,三元式,四元式,樹等。 第18頁(yè)/共87頁(yè)第十九頁(yè),共87頁(yè)。 在產(chǎn)生語(yǔ)法制導(dǎo)翻譯程序時(shí),完全根據(jù)文法的產(chǎn)生式來(lái)生成的,有時(shí)為了達(dá)到語(yǔ)法制導(dǎo)的目的,不得不對(duì)現(xiàn)有產(chǎn)生式做一些修改,這也是語(yǔ)法制導(dǎo)方法(fngf)的特點(diǎn)。 語(yǔ)法制導(dǎo)(zhdo)方法是一種形式化方法。它嚴(yán)格依賴于產(chǎn)生式結(jié)構(gòu)。第19頁(yè)/共87頁(yè)第二十頁(yè),共87頁(yè)。第20頁(yè)/共87頁(yè)第二十一頁(yè),共87頁(yè)。第21頁(yè)/共87頁(yè)第二十二頁(yè),共87頁(yè)。源語(yǔ)言源語(yǔ)言(高級(jí)語(yǔ)言)(高級(jí)語(yǔ)言)中間代碼中間代碼(高級(jí))(高級(jí))中間代碼中間代碼(中級(jí))(中級(jí))中間代碼中間代碼(低級(jí))(低級(jí))float a1020;

10、aij+2;t1 = ai, j+2t1 = j + 2t2 = i * 20t3 = t1 + t2t4 = 4 * t3t5 = addr at6 = t5 + t4t7 = *t6r1 = fp - 4r2 = r1 + 2r3 = fp - 8r4 = r3 * 20r5 = r4 + r2r6 = 4 * r5 r7 = fp 216f1 = r7 + r6第22頁(yè)/共87頁(yè)第二十三頁(yè),共87頁(yè)。8.3.1 8.3.1 逆波蘭逆波蘭(b (b ln)ln)式式 運(yùn)算符跟在所有運(yùn)算對(duì)象的后面(hu mian)的表示法寫出的式子稱為后綴法或逆波蘭法。例子(l zi): 中綴表示:a+b

11、后綴表示:ab+ 前綴表示:+ab 若用post(E)表示中綴式E的逆波蘭式則當(dāng)E=E1T時(shí)有:第23頁(yè)/共87頁(yè)第二十四頁(yè),共87頁(yè)。POS(E)=POS(E1)|POS(T)|其中(qzhng)“|”表示串的“捻接”。POS(F)=POS(E) F=(E) POS(F)=I F=I POS(T)=POS(T(1)|POS(F)|/ T=T(1)/F POS(T)=POS(T(1)|POS(F)|* T=T(1)*F POS(T)=POS(F) T=F POS(E) =POS(E(1)|POS(T)|- E=E(1)-T POS(E)=POS(E(1)|POS(T)|+ E=E(1)+T P

12、OS(E)=POS(T) E=T 逆波蘭式 中綴式 第24頁(yè)/共87頁(yè)第二十五頁(yè),共87頁(yè)。例子(l zi):pos(A+B*C)=pos(A)|pos(B*C)|+=ABC*+pos(A*B+c)=pos(A*B)|pos(C)|+=AB*C+ 處理原則: 運(yùn)算對(duì)象出現(xiàn)的順序與原來(lái)的相同 運(yùn)算符按實(shí)際運(yùn)算順序出現(xiàn)。 運(yùn)算符緊跟(jn n)在運(yùn)算對(duì)象的后面出現(xiàn),并且沒(méi)有括號(hào)。第25頁(yè)/共87頁(yè)第二十六頁(yè),共87頁(yè)。逆波蘭式的優(yōu)點(diǎn):轉(zhuǎn)換為逆波蘭式的語(yǔ)言(yyn)中間形式后,容易實(shí)現(xiàn)中間代碼的翻譯或目標(biāo)指令。 逆波蘭式的生成: 運(yùn)算對(duì)象向左移動(dòng) 運(yùn)算符與棧頂比較優(yōu)先數(shù) 括號(hào)(kuho)處理:左括號(hào)

13、(kuho)進(jìn)棧,起間隔作用;右括號(hào)(kuho)與左括號(hào)(kuho)匹配抵消。 第26頁(yè)/共87頁(yè)第二十七頁(yè),共87頁(yè)。.波蘭(b ln)表達(dá)式表達(dá)式運(yùn)算符棧運(yùn)算(yn sun)對(duì)象運(yùn)算符.進(jìn)棧.退棧第27頁(yè)/共87頁(yè)第二十八頁(yè),共87頁(yè)。a*(b+c/d)#.#例子(l zi):a*(b+c/d)abcd/+*的推導(dǎo)第28頁(yè)/共87頁(yè)第二十九頁(yè),共87頁(yè)。*(b+c/d)#.#a第29頁(yè)/共87頁(yè)第三十頁(yè),共87頁(yè)。(b+c/d)#.*#a第30頁(yè)/共87頁(yè)第三十一頁(yè),共87頁(yè)。b+c/d)#.(*#a第31頁(yè)/共87頁(yè)第三十二頁(yè),共87頁(yè)。+c/d)#.(*#ab第32頁(yè)/共87頁(yè)第三十三

14、頁(yè),共87頁(yè)。c/d)#.+(*#ab第33頁(yè)/共87頁(yè)第三十四頁(yè),共87頁(yè)。/d)#.+(*#abc第34頁(yè)/共87頁(yè)第三十五頁(yè),共87頁(yè)。d)#./+(*#abc第35頁(yè)/共87頁(yè)第三十六頁(yè),共87頁(yè)。)#./+(*#abcd第36頁(yè)/共87頁(yè)第三十七頁(yè),共87頁(yè)。)#.+(*#abcd/第37頁(yè)/共87頁(yè)第三十八頁(yè),共87頁(yè)。)#.(*#abcd/+第38頁(yè)/共87頁(yè)第三十九頁(yè),共87頁(yè)。#.*#abcd/+第39頁(yè)/共87頁(yè)第四十頁(yè),共87頁(yè)。#.#abcd/+*第40頁(yè)/共87頁(yè)第四十一頁(yè),共87頁(yè)。.abcd/+*第41頁(yè)/共87頁(yè)第四十二頁(yè),共87頁(yè)。動(dòng)畫演示(ynsh)第42頁(yè)

15、/共87頁(yè)第四十三頁(yè),共87頁(yè)。8.3.2 8.3.2 表達(dá)式的三元表達(dá)式的三元(sn (sn yun)yun)式和樹式和樹一、三元式 三元式的一般形式:i:(,OPR1,OPR2) i是三元式編號(hào),不同(b tn)三元式不能有相同編號(hào)。 是運(yùn)算符部分。 OPR1和OPR2是運(yùn)算對(duì)象部分。第43頁(yè)/共87頁(yè)第四十四頁(yè),共87頁(yè)。例子(l zi): a:=b*c+b*d的相應(yīng)三元組(*, b, c) b*c(*, b, d) b*d(+, (1),(2) b*c+b*d(:=,(3), a) a:=b*c+b*d例子(l zi):tri(A*B+C) =tri(A*B)|TRI(c)|2:(+,

16、C) =1:(*, A,B) A*B 2:(+,C) A*B+C 第44頁(yè)/共87頁(yè)第四十五頁(yè),共87頁(yè)。tri(A*B+C/D)= 1:(*, A, B) A*B 2:(/, C, D) C/D 3:(+,) A*B+C/Dtri(ABXY+1(X0B)D)=1:(+, Y, 1) Y+1 2:(,X,) XY+1 3:(,B,) BXY+1 4:(,A,) ABXY+1第45頁(yè)/共87頁(yè)第四十六頁(yè),共87頁(yè)。5:(, X, 0) X06:(, B) X0B7:(, D) (X0B)D8:(,)二、樹 二目運(yùn)算對(duì)應(yīng)二叉樹,多目運(yùn)算對(duì)應(yīng)多叉樹。三元(sn yun)式可以用二叉樹表示。第46頁(yè)/

17、共87頁(yè)第四十七頁(yè),共87頁(yè)。例: (a+b*(c-d)-e/f的樹。1)(-,c, d ) c-d2)(*,b,(1) b*(c-d)3)(+,a,(2) a+b*(c-d)4)(/,e, f ) e/f5)(-,(3),(4) 該題的樹結(jié)構(gòu)如下(rxi):第47頁(yè)/共87頁(yè)第四十八頁(yè),共87頁(yè)。cd-+/*-abef1234 該樹的根后序(hu x)為:abcd-*+ef/-,為該式的逆波蘭式。5第48頁(yè)/共87頁(yè)第四十九頁(yè),共87頁(yè)。8.3.3 8.3.3 四元四元(s yun)(s yun)式式 四元(s yun)式的一般形式是: (,OPR1,OPR2,RESULT) 其中是運(yùn)算符。

18、 OPR1和OPR2是第一,二分量, RESULT是運(yùn)算結(jié)果變量名。例: 求a:=b*c+b*d 的四元(s yun)式第49頁(yè)/共87頁(yè)第五十頁(yè),共87頁(yè)。1)(*,b,c,T1) b*c2)(*,b, d,T2)b*d3)(+,T1,T2,T3)b*c+b*d 4)(:=,T3,-,a)下面是表達(dá)式四元式的形式(xngsh)定義。 FOUR(T) RES(E)=RES(T)1E=T四元式中綴式FOUR(E1) 2E=E1+T 第50頁(yè)/共87頁(yè)第五十一頁(yè),共87頁(yè)。FOUR(T)(+,RES(E1),RES(T),TEMP)RES(E)=TEMP(臨時(shí)變量)空RES(F)=ID 7F=I

19、類似于2 6T=T1/F 類似于2 5.T=T1*F FOUR(F) RES(T)=RES(F) 4T=F 類似于2 3E=E1-T 第51頁(yè)/共87頁(yè)第五十二頁(yè),共87頁(yè)。FOUR(E)RES(F)=RES(E) 8F=(E) 例:設(shè)有表達(dá)式A*(B+C*(A-B)則有 1.(-,A,B,T1)A-B2.(*,C,T1,T2)C*(A-B)3.(+,B,T2,T3)B+C*(A-B)4.(*,A,T3,T4) 第52頁(yè)/共87頁(yè)第五十三頁(yè),共87頁(yè)。 引進(jìn)一過(guò)程GENQT: GENQT():BEGIN RESULT:=NEWTEMP; QTJ:=(,SEMS-2,SEMS-1,RESULT)

20、; SEMS-2:=RESULT; J:=J+1; S:=S-1 END 語(yǔ)法(yf)制導(dǎo)翻譯算法如下:第53頁(yè)/共87頁(yè)第五十四頁(yè),共87頁(yè)。 空 F-(E) SEMs:=EADDR(id);s:=s+1 F-I GENQT(/) T-T/F GENQT(*) T-T*F 空 T-F GENQT(-) E-E-T GENQT(+) E-E+T 空 E-T 語(yǔ)義子程序 產(chǎn)生式 第54頁(yè)/共87頁(yè)第五十五頁(yè),共87頁(yè)。例例 ; A + B * ( C - D ) + E / ( C - D ) N 逆波蘭逆波蘭 A B C D - * + E C D N / + 四元式四元式 (1) ( - C

21、 D T1 ) (2) ( * B T1 T2) (3) ( + A T2 T3) (4) ( - C D T4) (5) ( T4 N T5) (6) ( / E T5 T6) (7) ( + T3 T6 T7)第55頁(yè)/共87頁(yè)第五十六頁(yè),共87頁(yè)。8.4 8.4 類型類型(lixng)(lixng)檢查與類檢查與類型型(lixng)(lixng)轉(zhuǎn)換轉(zhuǎn)換例:a+b 3+5=8 3.2+5=3.2+5.0=8.2 3+T=?例:設(shè)有一表達(dá)式X*2+a*(i+1)/(j+1)其中i和j為整形(zhng xng)變量,其它為實(shí)型變量,則產(chǎn)生的四元式如下: 第56頁(yè)/共87頁(yè)第五十七頁(yè),共87頁(yè)

22、。1(tran,2, T1)2(r*, x,T1, T2) x*23(i+, i, 1, T3) i+14(tran,T3,T4)5(r*, a, T4,T5) a*(i+1)6(i+, j, 1, T6) j+17(tran,T6, T7)8(r/, T5, T7, T8)a*(i+1)/(j+1)9(r+, T2, T8, T9) 第57頁(yè)/共87頁(yè)第五十八頁(yè),共87頁(yè)。8.5 8.5 語(yǔ)句的中間代碼及其語(yǔ)法語(yǔ)句的中間代碼及其語(yǔ)法(yf)(yf)制導(dǎo)制導(dǎo)生成生成循環(huán)語(yǔ)句只考慮(kol)While型循環(huán)語(yǔ)句。所要考慮(kol)的語(yǔ)句文法如下:Gs:Si:=E | if E then S |

23、if E then S else S | while E do S | begin B end | goto l | l:S BS | B; S第58頁(yè)/共87頁(yè)第五十九頁(yè),共87頁(yè)。 下面(xi mian)是語(yǔ)句四元式的形式定義:four(E) (then, res(E),) four(S1) (ifend,,) Sif E then S1 four(E)(=:,res(E), ,i) Si:=E 四元式 源代碼 第59頁(yè)/共87頁(yè)第六十頁(yè),共87頁(yè)。(while,) Four(E) (do res(E),) four(S1) Swhile E do S1 four(E) (then,res

24、(E),,) four(S1) (else, ) four(S2) (ifend,,) Sif E then S1 else S2 第60頁(yè)/共87頁(yè)第六十一頁(yè),共87頁(yè)。four(S) BS (label,,l) four(S1)Sl:S1four(B1) Four(S) BB1;S (goto,l) Sgoto l four(B) Sbegin B end whend(,) 第61頁(yè)/共87頁(yè)第六十二頁(yè),共87頁(yè)。例:設(shè)有語(yǔ)句(yj) if X=Y+1 then X:=X*Y else while X0 do begin X:=X-1;Y:=Y+2 end則其四元式如下: 1.(+, Y,

25、 1, T1) Y+1 2.(=, X, T1, T2) X=Y+1 3.(then,T2, ,)4.(*, X, Y, T3) X*Y5.(=:, T3, , X ) X:=X*Y6.(else, , ) 第62頁(yè)/共87頁(yè)第六十三頁(yè),共87頁(yè)。 7.(while, , ) 8.(, X , 0, T4) X0 9.(do, T4, , )10.(-, X, 1, T5) X-111.(=:, T5, , X) X:=X-112.(+, Y, 2, T6) Y+2 13.(=:, T6, , Y) Y:=Y+2 14.(whend, , , ) 15.(ifend, , , ) 第63頁(yè)/共

26、87頁(yè)第六十四頁(yè),共87頁(yè)。語(yǔ)法制導(dǎo)用的新文法可設(shè)計(jì)(shj)如下:Gs:SAssig E | Ifthen S | Ifelse S | Whido S | begin B end | goto l | Label S Assigi:= Ifthenif E then 第64頁(yè)/共87頁(yè)第六十五頁(yè),共87頁(yè)。Ifelse Ifthen S elseWhido While E doWhile whileLabel l:BS| B; S第65頁(yè)/共87頁(yè)第六十六頁(yè),共87頁(yè)。8.6 8.6 復(fù)合變量的中間代碼復(fù)合變量的中間代碼及其語(yǔ)法制導(dǎo)及其語(yǔ)法制導(dǎo)(zhdo)(zhdo)生成生成在Pascal

27、中,變量形式定義是: Vid | VE | V.id稱后兩種為復(fù)合變量。其中V又可以是任意變量,因此復(fù)合變量的形式可能(knng)是很復(fù)雜的。首先考慮下標(biāo)變量VE情形。 ClASS POINT atp:LtpulLOW UP CTP ClEN第66頁(yè)/共87頁(yè)第六十七頁(yè),共87頁(yè)。 其中tp是成分類型的TYPEL地址(dzh),L是成分類型的長(zhǎng)度。若用typ(V)和addr(V)表示變量V的類型(TYPEL地址(dzh)和V的始地址(dzh),則有: addr(VE)=addr(V)+(E-l)*L 其中 l=AINFLTYPELtp.TPOINT.LOW L=AINFLTYPELtp.TPO

28、INT.CLEN 下面(xi mian)考慮域選擇變量V.id情形。第67頁(yè)/共87頁(yè)第六十八頁(yè),共87頁(yè)。 設(shè)tpy(V)=tp,且TYPELtp.TCLASS=d.這是tp指向(zh xin)一個(gè)記錄類型的內(nèi)部表示: ClASS POINT dtp:RINFL 若用V.id中的id去查RINFL部分可得到id關(guān)于(guny)該記錄的區(qū)距off。若用off (tp,id)表示id 關(guān)于(guny)tp記錄的區(qū)距,則有:addr(V.id)=addr(V)+off(typ(V),id)第68頁(yè)/共87頁(yè)第六十九頁(yè),共87頁(yè)。例:設(shè)有PASCAL說(shuō)明(shumng):TYPE at=ARRAY1

29、.10OF1.5OF integer; rt=RECORD d:real; a:at; b:at END;VAR c,g:at;r,u:rt; 則有:addr(ci)=c+(i-1)*5 addr(cij)=c+(i-1)*5+(j-1)*1 addr(u.a)=u+1 addr(u.ai)=u+1+(i-1)*5第69頁(yè)/共87頁(yè)第七十頁(yè),共87頁(yè)。下面考慮VE和V.id情形的四元式。變量目標(biāo)的任務(wù)是計(jì)算變量的地址,于是其四元式可描述如下:vfour(V): addr(V)=T其中vfour表示(biosh)變量的四元式。變量的目標(biāo)代碼不一定要徹底計(jì)算出變量的地址并將它存于臨時(shí)變量中。如果沒(méi)

30、有方便的目標(biāo)代碼,則計(jì)算X:=VE的過(guò)程大致是: 第70頁(yè)/共87頁(yè)第七十一頁(yè),共87頁(yè)。1) Addr(V)=T12) Value(E)T23) T1+ T2T3 4) T3X 但如果(rgu)有方便的目標(biāo)代碼,則計(jì)算過(guò)程可以是: 1) Addr(V)T1 2) Value(E)T2 3) T2T1T3第71頁(yè)/共87頁(yè)第七十二頁(yè),共87頁(yè)。VE的四元(s yun)式結(jié)構(gòu)可設(shè)計(jì)如下: vfour(VE):vfour(V) efour(E) (,eres(E),l,T1) (*,T1,L,T2) (,vres(V),T2,T)F eres(E)是表示E的結(jié)果變量。F vres(V)是表示V變量

31、的地址所在(suzi)的變量F l和L分別為數(shù)組的下界和成分類型長(zhǎng)度。 第72頁(yè)/共87頁(yè)第七十三頁(yè),共87頁(yè)。用efour(E)形式表示現(xiàn)在表達(dá)式的四元式,eres(E)也類似(li s)。其中的vres(v)和efour(E)分別為SEMs-2和SEMs-1,而l和L則可按下法求出:tp:=SYMBLSEMS-2.TYPE l:=AINFLTYPELtp.LOW L:=AINFLTYPELtp.CLEN 域選擇(xunz)變量V.id的四元式可設(shè)計(jì)如下: vfour(V.id) : vfour(V)(., vres(V),off,T) 第73頁(yè)/共87頁(yè)第七十四頁(yè),共87頁(yè)。例:假定(ji

32、dng)有前例的說(shuō)明,則有: vfour(ci) : 1.(, i, 1, T1) 2.(*, T1,5, T2) 3.(, c, T2,T3)vfour(cij): 1. vfour(ci) 4.(, j, 1,T4) 5.(*, T4,1,T5) 6.(, T3,T5,T6)vfour(u.ai): 1.(., u,off,T1) 2.(,i, 1, T2) 3.(*, T2,5, T3) 4.(,T1, T3,T4)第74頁(yè)/共87頁(yè)第七十五頁(yè),共87頁(yè)。例:設(shè)有說(shuō)明部分(b fen)VAR x,i,j:integer; B:boolean a:ARRAY1.10OF1.5OF inte

33、ger; b:ARRAY1.5 OF integer則下列語(yǔ)句 aij:=bbi ai:=b 的四元式部分(b fen)如下:I.1.(, i, l, T1) 2.(*, T1,5, T2) 3.(, a, T2,T3) ai第75頁(yè)/共87頁(yè)第七十六頁(yè),共87頁(yè)。 4.(, j, 1, T4) 5.(*, T4, 1, T5)可省 6.(, T3, T5, T6) aij 7.(, i, 1, T7) 8.(*, T7, 1, T8)可省 9.(, b, T8, T9) bi10.(, T9, 1, T10)11.(*, T10,1, T11)可省12.(, b, T11, T12) bbi

34、13.(=:, T12, T6)aij:=bbi 第76頁(yè)/共87頁(yè)第七十七頁(yè),共87頁(yè)。II. 1.(,i, 1, T1) 2.(*, T1,5, T2) 3.(,a, T2,T3) ai 4.(=:,b, ,T3) ai:=b第77頁(yè)/共87頁(yè)第七十八頁(yè),共87頁(yè)。8.7 8.7 過(guò)程語(yǔ)句的中間代碼及其語(yǔ)法制導(dǎo)過(guò)程語(yǔ)句的中間代碼及其語(yǔ)法制導(dǎo)(zhdo)(zhdo)生成生成過(guò)程(guchng)語(yǔ)句調(diào)用的四元式結(jié)構(gòu):g(E1,E2,En) efour(E1) efour(E2) .efour(En) (act,eres(E1), 1,OFF(X1)(act,eres(E2), 2,OFF(X2

35、)(act,eres(En), n,OFF(Xn)(call,EADDR(g),)第78頁(yè)/共87頁(yè)第七十九頁(yè),共87頁(yè)。 當(dāng)Xi為賦值形參時(shí),i部分為1,當(dāng)Xi為引用型形參時(shí), i部分為0 。 如果(rgu)是函數(shù)調(diào)用,那么最后一條為: (call,EADDR(g),,NEWT) 在上述四元式中,Xi(i=1,2,.,n)為g的形參名。OFF(Xi)表示形參Xi的off值。第79頁(yè)/共87頁(yè)第八十頁(yè),共87頁(yè)。例:設(shè)有如下說(shuō)明(shumng)部分 TYPE arr=ARRAY1.10 OF integer; VAR x,y:real; i:integer; a:arr; FUNCTION f(VAR.Y1:real; Y2:integer;Y3:real):real;BEGINEND;FUNCTION g(VAR Z:integer):integer;BEGINEND 則有:f(x,g(ai)*3,y+2.5) 第80頁(yè)/共87頁(yè)第八十一頁(yè),共87頁(yè)。 1.(, i, 1, T1) 2.(*. T1, 1, T2) 3.(, a, T2, T3) ai 4.(act, T3, 0, 4

溫馨提示

  • 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)論