計(jì)算機(jī)第四章 語(yǔ)法制導(dǎo)翻譯生成中間代碼_第1頁(yè)
計(jì)算機(jī)第四章 語(yǔ)法制導(dǎo)翻譯生成中間代碼_第2頁(yè)
計(jì)算機(jī)第四章 語(yǔ)法制導(dǎo)翻譯生成中間代碼_第3頁(yè)
計(jì)算機(jī)第四章 語(yǔ)法制導(dǎo)翻譯生成中間代碼_第4頁(yè)
計(jì)算機(jī)第四章 語(yǔ)法制導(dǎo)翻譯生成中間代碼_第5頁(yè)
已閱讀5頁(yè),還剩140頁(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)介

第四章語(yǔ)法制導(dǎo)翻譯生成中間代碼

語(yǔ)法制導(dǎo)耕笄是處理語(yǔ)義的基域方法,它。語(yǔ)法令折,

基砒,森德法令折得到語(yǔ)言錯(cuò)構(gòu)的錯(cuò)累時(shí),對(duì)附房4此給構(gòu)

的語(yǔ)文進(jìn)行處理,電行爵表達(dá)式的假、皮鼠中間代雞等。

與語(yǔ)法今折郎今的商檢系同,域章的內(nèi)容更灌量4實(shí)際

方法的利譽(yù)。

;要向密包括:

</>德法喇導(dǎo)翻笄的基本梳念

<2><間代雞簡(jiǎn)介

<5>符號(hào)表簡(jiǎn)介

<4>典型聲明語(yǔ)句號(hào)可執(zhí)行語(yǔ)句的題鋅

<5>上機(jī)作業(yè)—第三4nl語(yǔ)法制導(dǎo)耕鐸松制晶劇囹彬

4.1語(yǔ)法制導(dǎo)翻譯簡(jiǎn)介

4.1.1語(yǔ)法與語(yǔ)義

</>語(yǔ)法S語(yǔ)文的關(guān)t

語(yǔ)法是指語(yǔ)言的秸構(gòu)、即語(yǔ)言的“陰3〃,,語(yǔ)文是指附房4

語(yǔ)言秸構(gòu)上的實(shí)際含意,即語(yǔ)言的“意義”。

對(duì)于語(yǔ)法和語(yǔ)義:

?語(yǔ)義系犍離開(kāi)德法獨(dú)更腐森;

?語(yǔ)義逐此語(yǔ)法復(fù)番:

?同一語(yǔ)言秸構(gòu)可包含多種含意,系同鑄■言給構(gòu)泰求相同含意,

?語(yǔ)法與語(yǔ)義之間沒(méi)1朗確的界俵。

倒乙貓一老鼠號(hào)老鼠吃貓

例2;程序微行語(yǔ)言中的合情就秸構(gòu):

1.caseconditionis

2.switch(condition){

easel:statl;

casecondition1:statl;break;

case2:stat2;

casecondition2:stat2;break;

endcase;

)

2

4.1.1語(yǔ)法與語(yǔ)義(續(xù)1)

V2>語(yǔ)文今折的兩個(gè)作用

檢全是否錯(cuò)構(gòu)正確的句3所衰赤的意思也合法,

執(zhí)行規(guī)定的語(yǔ)義劭作,虬;

表達(dá)式索值

符號(hào)表確寫

中間代雞皮鼠等

VM>語(yǔ)文今折的方法

語(yǔ)法制導(dǎo)翻律

3

4.1.2屬性與語(yǔ)義規(guī)則

v/>德法制導(dǎo)題笄的基本思穆

逾俗地講;。語(yǔ)法令折,基砒,伴成語(yǔ)法今新的各個(gè)步驟,

執(zhí)行相應(yīng)的語(yǔ)義劭作。

具體方法/

/,桁文法符號(hào)所代表的語(yǔ)言秸構(gòu)的意思,用附弟4該文法符

號(hào)的屬楹表東,

2,用箝且現(xiàn)觸規(guī)定產(chǎn)生式所代表的語(yǔ)言錯(cuò)構(gòu)之間的關(guān)系(即

屬但之間的關(guān)系),即用語(yǔ)文規(guī)則實(shí)現(xiàn)屬槌行案。

語(yǔ)義規(guī)則的㈱行;森語(yǔ)法今折的適劣時(shí)刻(電推導(dǎo)或歸釣)

執(zhí)行時(shí)房點(diǎn)對(duì)應(yīng)產(chǎn)皮式上的語(yǔ)義規(guī)則,心實(shí)現(xiàn)對(duì)語(yǔ)言秸

構(gòu)語(yǔ)義的處理,電行竄、全確符號(hào)表、女感中間代媽、農(nóng)

中出錯(cuò)信息等。

4

4.1.2屬性與語(yǔ)義規(guī)則(續(xù)1)

V2>屬槌的抽象表赤

.attr

例電:E.val(假)

E.type(類型)

E.code(代碼4列)

E.place(商儲(chǔ)變間)

V3>對(duì)次法的的貢

本章關(guān)港的是語(yǔ)法今折的基砒上的語(yǔ)義處理,忽略語(yǔ)法

臺(tái)新。

名了簡(jiǎn)單,本章的女法一解,二義次法。默欣解決二義

的方法是規(guī)定希規(guī)意義下的優(yōu)先彼右秸合槌。

5

上次課主要內(nèi)容

1.SLR(l)臺(tái)折表的構(gòu)造

?由積別活端敘的DFA構(gòu)透action^agoto表

2.旅SLR⑴次法

?二義交法

?熊二義女法

5語(yǔ)法今析內(nèi)容復(fù)燈

4.語(yǔ)法刷導(dǎo)翻鐸的基存就念

?語(yǔ)法與語(yǔ)義

?屬但S語(yǔ)文規(guī)則

6

E-E1+E2E.val:=E1.val+E2.val4.1.2屬性與語(yǔ)義規(guī)則(續(xù)2)

VM>屬但的是義**

定義4.1對(duì)手產(chǎn)女式A-Q,其中Q是由次法符號(hào)X1X2...Xn祖感

的不列,它的登叢現(xiàn)則可。表示,4〃所亦關(guān)于屬槌的函烈:

b:=f(d,c2,...,ck)(4.1)

語(yǔ)義規(guī)則中的屬槌點(diǎn)點(diǎn)下述楹質(zhì)與關(guān)系。

(〃若b是A的屬但,d,c2,...,ck是Q中次法符號(hào)的屬但,

或者A的其它屬槌,則稱b是A的然金&修。

⑵若b是Q中票文法符號(hào)Xi的屬楹,c1,c2,...,ck是A的

屬嘏,或者是Q中其它次法符號(hào)的屬槌,則稱b是Xi的犍星&修。

⑶稱4〃中屬但b儂獺立屬楹c1,c2,...,cko

⑨考語(yǔ)義規(guī)則的形式電下述4,劃,則可將其怨像,產(chǎn)眩式左

梯次法符號(hào)A的一個(gè)虛幽&帽。屬槌之間的保賴關(guān)系,點(diǎn)度料屬但

上儂蟻盛位O

f(d,c2,...,ck)(4.2)■

(4.1)中屬但之間的依賴關(guān)系,實(shí)質(zhì)上女缺了屬但必算的先后

法4,即所省屬槌ci被必算之后才怩刀一屬”?b。_____________

7

4.1.3語(yǔ)義規(guī)則的兩種形式

V7>語(yǔ)法制導(dǎo)定義

用抽象的屬槌和運(yùn)真符號(hào)衰東的語(yǔ)義規(guī)則公式,做什么,

<2>耕律方案

用具體屬但和運(yùn)算衰示的語(yǔ)義規(guī)則。(程本段,電何做)

?語(yǔ)義規(guī)則也被打慣上稱,語(yǔ)義劭作。

?忽略實(shí)現(xiàn)徇手,二者作用等價(jià)。(核行導(dǎo)實(shí)現(xiàn)J

8

4.1.3語(yǔ)義規(guī)則的兩種形式(續(xù)1)

例4.1桁中徽彬式的算術(shù)表達(dá)式挎換,后敘表聲的語(yǔ)法制

導(dǎo)定義和翩笄方案。成如屬槌print(E.post)可想象為

L.p:=print(E.post)

產(chǎn)女式語(yǔ)法喇導(dǎo)定又題律方嗓7

L-Eprint(E.post)print_post(post);

E-E1+E2E.post:=E1.postpost(k):二'+';k:=k+1;

||E2.post||'+'

E-numE.post:=num.IexvaIpost(k):=lexvaI;k:=k+1;

產(chǎn)金式翻呼方案2

l_fE

EfE1+E2print(+);

E-*numprint(IexvaI);

4.1.3語(yǔ)義規(guī)則的兩種形式(續(xù)2)

語(yǔ)法制導(dǎo)定文-算法翻鋅方案中需要考慮的同奧;

翻等方案一程本實(shí)現(xiàn),1.采用什么件的語(yǔ)法今折方法,

方法系唯一2.,屬,合一方儲(chǔ)變問(wèn);

,考慮行事法不。

耕笄方案7,自下而上行算,LR今新。L

(“43+5+8%的,歸的時(shí)翻呼J1

產(chǎn)皮式翻鐸方嗓7E^T^E

L-Eprint_post(post);I

F+Fa

E->E1+E2post(k)k:=k+1;??

E—numpost(k):=lexval;k:=k+1;35

post:(35+8+)

10

4.1.3語(yǔ)義規(guī)則的兩種形式(續(xù)3)

VM>屬秋作與臺(tái)折樹(shù)的灌琴

將屬槌附房點(diǎn)今折樹(shù)對(duì)反次法符號(hào)上,彬成灌琴今折樹(shù)。

例4.23+5+8的合折樹(shù)布灌琴臺(tái)折樹(shù):

L(print(35+8+))

I

E.post=35+8+

E.post=35++E.post=8

IE(print(3))+E(print(5))8

E.post=3+E.post=58

3535

產(chǎn)幺式語(yǔ)法制導(dǎo)定義翻錦方嚓

L-Eprint(E.post);

E-E1+E2E.post:=E1.postprint(+);

||E2.post|「十,

E-*numE.post:=num.lexval;print(IexvaI);ii

4.1.3語(yǔ)義規(guī)則的兩種形式(續(xù)4)

v分灌卷今新樹(shù)上看罐家屬性馬除合屬但

健豕屬槌是自上而下必算的

蹤合屬槌是自下而上必算的

提醵:除冰特別提醵,本章利信的語(yǔ)注制導(dǎo)翻鐸是稼合屬槌。

L(print(35+8+))

E.post=35+8+

E.post=35++E.post=8

I

E.post=3+E.post=58

35

12

4.1.4LR分析翻譯方案的設(shè)計(jì)

LR今折中的語(yǔ)法制導(dǎo)耕笄實(shí)質(zhì)上是對(duì)LR語(yǔ)法今折的獷克:

</>獷充LR臺(tái)新器的功惚;劣執(zhí)行歸的產(chǎn)攻式的劭作時(shí),也執(zhí)

行產(chǎn)女式對(duì)應(yīng)的語(yǔ)義劭作。由于是歸功時(shí)執(zhí)行語(yǔ)義劭作,因此

限制語(yǔ)義劭作奴犍放森產(chǎn)金式右部的景右邊/

V2>擴(kuò)充臺(tái)折極:靖加一個(gè)與今折棧并列的語(yǔ)義錢,用于塔及

合折棧中次法符號(hào)所對(duì)應(yīng)的屬但他。

例電:E-E1+E2vaI[top]:=vaI[top]+vaI[top+2];

對(duì)于表達(dá)式:5+3輸入記號(hào)流

有歸為,龍部E時(shí),

同時(shí)也得到了他8。

13

4.1.4LR分析翻譯方案的設(shè)計(jì)(續(xù)1)

例4.33+5*8的語(yǔ)注制導(dǎo)翻律。

產(chǎn)皮式融脩檄善是義

L-Eprint(RaW舌tbp]);

E—E1+E2Ea4<itopBlFvaI在如。含WaI[top+2];

E-E1*E2RaW&top曲=vaI*E2p。豺aI[top+2];

EfnEa>kitopOi.:tiKxai|;

14

4.1.4LR分析翻譯方案的設(shè)計(jì)(續(xù)2)

(格局的變化)

今折棧輸入語(yǔ)文劭作

##3+5*8#shift

#n#3+5*8#E-*n,val[top]:=lexval

#E#3+5*8#shift

#E+#3?5*8#shift

#E+n#3?5*8#E-*n,val[top]:二lexval

#E+E#3?5*8#shift

#E+E*#3?5?8#shift

#E+E*n#3?5?8#Efn,val[top]:=lexval

#E+E*E#3?5?8#EfE1*E2;val[top]:=val[top]*val[top+2];

#E+E#3?40#E—E1+E2,val[top]:=val[top]+val[top+2];

#E#43#acc

15

4.1.5遞歸下降分析翻譯方案的設(shè)計(jì)

遞歸下降方法是用銀星實(shí)現(xiàn)對(duì)旅終秸符的展開(kāi)和對(duì)終

秸符的匹配。翻鋅方案的核必需要解決兩個(gè)同奧:

1.電何森遢歸下海各程序中線人語(yǔ)義劭作;

產(chǎn)女式右部的值何假置,陽(yáng)裱;步貢的例房”

2.犯何名次法符號(hào)的屬但核制點(diǎn)儲(chǔ)變用;

西劇返?他、參恭、變量萼。

例電函核念囹語(yǔ)言解琴器語(yǔ)法制導(dǎo)翻律核花(第三法上機(jī)裸,:

I,遢歸3程星可心微花,茁熟,用于返?於要的屬槌值;

2,逐劣微行3程4中的低時(shí)變量,用于保存屬槌值:

3將語(yǔ)義劭作嵌入在3程格的途咨假置,正確必算屬槌值。

佃手上機(jī)作業(yè)裸利徐

16

4.2.中間代碼商介

7,編笄器各階段的黨整輸出,物可。被私名是源程本的

票種中間―東。

2,奉章神備的是中間代雞皮感器輸出的中間表示,稱之

,中間代媽。

3中間代雞實(shí)際上應(yīng)起一個(gè)編鋅器端端S啟端臺(tái)水嶺的

作用O

4.要求中間代媽具嗡犯干特槌,心便于編笄器的許發(fā)移

植茄代碼的優(yōu)化:

?便手語(yǔ)法制導(dǎo)翻笄:

?就與機(jī)器指令的錯(cuò)構(gòu)相近,又與具體機(jī)器無(wú)關(guān)。

5.中間代碼的2要彬式:樹(shù)、后徽式、三地址雞等。

17

4.2.1后綴式

V7>后徽式的特征

糅作劇在麻,搖作符紫成其后,無(wú)需用括號(hào)限喇運(yùn)案的

優(yōu)先行我給合但。

例電:中徽式后徽式

3+5*2/7352*7/+

(3+5)*(2/7)35+27/*

18

V2>行真后徽式的廢加機(jī)

算法4.1后徽式君爵

輸入后徽式

輸出行寓秸累

方法采用下述過(guò)程進(jìn)行行算,景於給累留在錢中。

x:=first_token;

whilenotend_of_exp

I°°Pifxinoperators

thenpushx;一糅作照進(jìn)錢

eIsepop(operators);一兵符,彈出糅作劇

push(evaIuate);一行算,弄渴給累進(jìn)錢

endif;

next(x);

endIoop;■

19

V3>后徽式必算4.2.1后綴式(續(xù)1)

尊木表達(dá)式3+5+8的后敘式,35+8+o

(#35+8+#pushu(3))

(#35+8+#pushu(3))

(#35+8+#pop(3和5),push((3+5)))

(#88+#pushu(8))

(#88+#pop(8和8),push(8+8))

(#16#)

x:=first_token;

whilenotend_of_exp

Ioopifxinoperators

thenpushx;一猱作熬進(jìn)校

eIsepop(operators);一喜符,禪出猱作劇

push(evaIuate);—/我彳蔣話:—一

endif;

next(x);

endIoop;

20

4.2.1后綴式(續(xù)2)

V分粉啟讖式推廣到其他語(yǔ)句

后做式并系局限于二無(wú)運(yùn)算的表達(dá)式,可。稚廣割但何

語(yǔ)句,只要遵守糅作劇點(diǎn)嘛,糅作符緊砥其后的原則即可。

對(duì)語(yǔ)句:ifethenxeIsey

后做式可“4號(hào)考:exyif-then-eIse(1)

上述表示中,e、x介y均需引?賓。

而實(shí)際上,根據(jù)條件e的取值,x?y系犍都花爵:

ep1jezxp2jumpp1:yp2:(2)

其中;p1介p2今別是標(biāo)號(hào):

p1jez表示e的給累,0(假)則挎向p1;

p2jump表示無(wú)條件挎向p2。

S⑴比較,(2)中的if-then-else被今解,首先引■豫e,根

據(jù)e的秸累是否,笈,決定君靠x迷是必算y。

21

4.2.2三地址碼

</>三地址碼的直吼表示

語(yǔ)法:

result:=arg1oparg2或

result:=oparg1或

oparg1

語(yǔ)義:

轉(zhuǎn)累點(diǎn)放在result中的二無(wú)運(yùn)爵arg1oparg2

轉(zhuǎn)累得數(shù)在result+一無(wú)運(yùn)案oparg1

一無(wú)運(yùn)爵oparg1

例如:

藏--x:=a+b*c的三地的法屋列:

T1:二b*c

T2:=a+T1

x:=T2

港意:直現(xiàn)表示昌源銀本中賦值句的區(qū)別。

22

V2>三地址碼的種類)

星號(hào)三地址媽四元式

(1)X:=yopz(op,y,Z,x)

(2)X:=opy(op,V、,X)

(3)X:=y(:二,y,,X)

(4)gotoL(j,,L)

(5)ifxgotoL(jnz,X,,L)

(6)?fxre1opygotoL(jrelop,X,y,L)

(7)paramx(param,1,x)

(8)ca11n,P(ca11,n,,P)

(9)returny(return,,y)

(10)x:=y[i](=□,y[i],,X)

(11)x[i]:二y(□=,y,1x[i])

(12)x:=&y(-&,y,,X)

(13)X:=*y(二*,y,,X)

(14)*x:=二y(*二,y,,X)

23

<3>三地征鴻的實(shí)現(xiàn);三無(wú)式S四無(wú)式

⑦三元式三無(wú)式:(i)(op,arg1,arg2)

三地址媽:(i):=arg1oparg2

例4.5表達(dá)式x:=a+b*c的三無(wú)式:

(1)(*,b,c)*標(biāo)鈉符a,b,c,x今別表

(2)(+,a,(1))求它們的落儲(chǔ)假置,

⑶(:=,x,(2))?4號(hào)⑴、⑵、⑶今別是

它們?cè)谌晔奖碇械募僦谩?/p>

序號(hào)的摳堂含義:就代表此三無(wú)式,又代表三無(wú)式存放的給累。

春及方式:鼎俎丘相,三完式在熟俎中的假置由下標(biāo)法定。

給代碼的優(yōu)化帶來(lái)國(guó)雍。

S名代碼優(yōu)化有使用的方法是刪除其也代碼或移劭菜也代雞

位置,而一里進(jìn)行了代媽的刪除或移劭,則衰東京三元式的星號(hào)

公安藝變化,從而使得其他三無(wú)式中對(duì)晨星號(hào)的引用無(wú)數(shù)。

24

上次課主要內(nèi)容

1.屬槌與語(yǔ)義規(guī)則

2語(yǔ)義規(guī)則的兩種衰示:語(yǔ)法制導(dǎo)定文與翻律方案

3.LR今折中翻笄方案的殘行;獷克語(yǔ)義核與獷充語(yǔ)法令折

4.遞歸下海今折中翻律方案的核花:腐槌的點(diǎn)儲(chǔ)變間與語(yǔ)

義規(guī)則的花爵

5.中間代碼

?中間代碼的作用

?中間代碼的彬式

a.后徽式

b.三地址媽與三地征碼的實(shí)現(xiàn)一三無(wú)式與四無(wú)式

25

語(yǔ)法制導(dǎo)翻鋅殘行的基域步驟:

1.次法符號(hào)屬槌的微行

2.於宴的基本糅作(西烈等)的微奸

3.語(yǔ)義規(guī)則的微行

26

②三無(wú)式的語(yǔ)法制導(dǎo)都鐸<M>三地址碼的實(shí)現(xiàn)(雨)

7,屬嵯.code;三無(wú)式代碼,猾示標(biāo)傭符的存儲(chǔ)單無(wú)

或三無(wú)式表中的序號(hào),

2.屬嵯.name/標(biāo)傭符的名莊;

3,笛微trip(op,arg1,arg2):女感一個(gè)三元式,

返?三無(wú)式的序號(hào)/

4,―劇entry(id.name):返回標(biāo)/符在符號(hào)表中的假

置或存儲(chǔ)假費(fèi)。

生式:語(yǔ)義規(guī)則:

z\

(1J

\/A-*id:=E{A.code:=trip(:=,entry(id.name),E.code))

z2\

(J

x/E-E1+E2{E.code:=trip(+,E1.code,E2.code)}

z\

f3

\7E-E1*E2{E.code:=trip(*,E1.code,E2.code))

z\

(4

x7E—(E1){E.code:=E1.code)

z\

f5)

\/E-—E1{E.code:=tripE1.code,))

z\

f6)

kzE-id{E.code:=entry(id.name)}

27

由、、VM>三地征雞的實(shí)現(xiàn)(^2)

例4.6女鼠x:=a+b*c的三完式d_R今折,

z\

(1)

\/Afid:二E{A.code:=trip(:=,entry(id.name),E.code)}

z2\

(1

\7E-E1+E2{E.code=trip(+,E1.code,E2.code)}

z\

z3

(1

\7E-E1*E2{E.code=trip(*,E1.code,E2.code)}

z\

(4

\7E-(E1){E.code=E1.code}

/\

(5)

\/E-E1{E.code=trip(@,E1.code,)}

z\

(6

\7E-id{E.code=entry(id.name)}

^^A^code=(3)(:=,x,(2))三無(wú)式序列:

x^^^E5^code=⑵(+,a,(1))(1)(*,b,c)

(2)(+,a,(1))

EI.code=a+E4.code=(1)(*,b,c)

I(3)(:=,x,(2))

aE2.code=b*E3.code二c

b

28

VM>三地址雞的實(shí)現(xiàn)(族切

③四完式

四無(wú)式是對(duì)三無(wú)式的改進(jìn),特表示制算錯(cuò)累的三無(wú)式

序號(hào)用一個(gè)晶式的變量衰赤,從而避免了三無(wú)式的值號(hào)三

無(wú)式點(diǎn)三無(wú)獨(dú)中的假黃相關(guān)的隔支。

四無(wú)式的語(yǔ)法:三完式;

(op,arg1,arg2,resuIt)(i)(op,arg1,arg2)

所衰赤的祈靠;

result:=arg1oparg2(i):=arg1oparg2

29

V5>三地址雞的實(shí)現(xiàn)(掾句

7,四無(wú)式與三無(wú)式的唯一區(qū)別是將由本號(hào)所表赤的運(yùn)算

待累改,了由臨忖變量來(lái)表示。

2,此改變使得四無(wú)式具有了運(yùn)算秸零號(hào)四無(wú)式森四無(wú)式

本列中的位置無(wú)關(guān)的特支,它,代雞的優(yōu)化提供了極

大方便,因,送件可。刪除或移劭四無(wú)式而系會(huì)影響

運(yùn)算秸累。

3.三地址碼與四元式形式的一致但。四元式的種類

四完式;三地址碼:

(op,arg1,arg2,result)result:=arg1oparg2

30

@四完式的語(yǔ)法刷導(dǎo)翻用<3>三地址媽的實(shí)現(xiàn)(續(xù)5)

1.屬僧.code:表示存放運(yùn)靠秸累的變量,

2.2:newtemp:返回一個(gè)新的低時(shí)變量,電T1,T2,…等;

3.逑濯,emit(op,arg1,arg2,result);皮感一個(gè)四無(wú)式,

若名一無(wú)運(yùn)算,則arg2可變。

產(chǎn)女式與語(yǔ)義規(guī)則:

⑴A-id:二E{A.code:=newtemp;

emit(:=,E.code,A.code,entry(id.name)))

⑵E-E1+E2{E.code:=newtemp;

emit(+,E1.code,E2.code,E.code))

⑶E-E1*E2{E.code:=newtemp;

emit(*,E1.code,E2.code,E.code))

(4)E-(E1){E.code:=E1.code}

(5)E-E1{E.code:=newtemp;emitE1.code,,E.code)}

⑹E-id{E.code:=entry(id.name))

31

4.2.3圖形表示

V7>樹(shù)作,中間代碼

語(yǔ)法制奠實(shí)反映句3秸構(gòu),對(duì)語(yǔ)法樹(shù)領(lǐng)加修改(加入德

義傳息J,即可。作辦中間代碼的一種彬式(灌琴語(yǔ)法樹(shù)九

例48賦值句x:=(a+b)*(a+b)的樹(shù)的中間代碼索東:

三元坎;

T4/(4)(1)(+,a,b)

(2)(+,a,b)

(3)(*,(1),(2))

(4)(:二,x,(3))

四無(wú)式;

abab

(1)(+,a,b,T1)

(2)(+,a,b,T2)

(3)(*,T1,T2,T3)

(4)(:=T3,T4,x)

32

VZ>樹(shù)的語(yǔ)法制導(dǎo)翻鋅

7,屬生nptr:猾向樹(shù)節(jié)支的猾針:

2.&^mknode(op,nptrl,nptr2):皮鼠一個(gè)根或內(nèi)部節(jié)

支,節(jié)支熬據(jù)是op,nptrl茄nptr2今別能向的左右就省

的3樹(shù)??鄡H嗡一個(gè)就3,則nptr2四變;

3函卻三完式、四完式導(dǎo)相的語(yǔ)義規(guī)則微行的病似喉

(1)A-id:二E

{A.nptr:=mknode(:=,mkleaf(entry(id.name)),E.nptr))

/\

(2)

\/E-E1+E2{E.nptr:二mknode(+,E1.nptr,E2.nptr)}

/\

(3

\7EfE1*E2{E.nptr:=mknode(*,E1.nptr,E2.nptr))

z\

(41

\7E—(E1){E.nptr:=E1.nptr)

/\

(5

\7E一一E1{E.nptr:=mknode(@,E1.nptr,)}

/\

(61

\7E-id{E.nptr:二mkIeaf(entry((id.name)))

33

V3>樹(shù)的優(yōu)化衰示一DAG

電黑樹(shù)上若干個(gè)節(jié)支嗡黨公相同的核3,則送也節(jié)支可。

指向同一個(gè)核3,彬朗一個(gè)有向無(wú)壞囹(DirectedAcycIic

Graph,DAG)。

DAG與樹(shù)的唯一區(qū)別是多個(gè)義親可。共享同一個(gè)核3,從而

達(dá)到資源(運(yùn)算、代雞等)共享的目的。:=T3/(3)

:=T4/(4)

x*T2/(2)

x*T3/(3)

ababab

DAG的語(yǔ)法制導(dǎo)翻鋅馬樹(shù)的語(yǔ)法制導(dǎo)翻律和以需要點(diǎn)

mknode^omkIeaf中懵加相應(yīng)的交詢功犍。

首先全看所要構(gòu)造的節(jié)支是否已經(jīng)卷芥,老卷點(diǎn)則無(wú)需構(gòu)

苴新的節(jié)支,直接返回指向已卷春節(jié)支的指針即可。

34

V分樹(shù)與其他中間代媽的關(guān)系

1.樹(shù)表示的中間代雞身后徽式和三地址雞之間嗡內(nèi)麻寐系;

2.對(duì)樹(shù)進(jìn)行睬度優(yōu)先后各遍歷,得到的俵槌本列就是后徽式

,或者說(shuō)后徽式是樹(shù)的一個(gè)假槌化本列,

3樹(shù)的每個(gè)南部節(jié)支和它的核3對(duì)應(yīng)一個(gè)三無(wú)式或四無(wú)式。

35

V分樹(shù)與其他中間代媽的關(guān)系(續(xù))

例4.9賦值句x:二(a+b)*(a+b)的港琴語(yǔ)法樹(shù):

?=T4/(4)啟獴式;xab+ab+*:=

/

(1b

三無(wú)式;\(+,a,

x*T3/(3)z\

(2b

\7(+,a,

z\?\

3/2

(7f1

\(*,⑴,k7

/\z\

f43

l)(7

\/(:=,x,\

/\

(1bT

四無(wú)式:\7(+,a,

z\\

l2b2)

\7(+,a,?/

3\Tc3K

\)

7(*,T1,F/

/4\3\

(TX)

\7(:=,T4,/

國(guó)此,現(xiàn)代的編笄器基砒架構(gòu)物用語(yǔ)法樹(shù)作卷中間表示。

36

4.3符號(hào)表簡(jiǎn)介

符號(hào)表的作用;速接聲明導(dǎo)引用的橋梁,祀傕每個(gè)

符號(hào)的相關(guān)信息,電作用域介郵足萼,蹄助編鋅的各個(gè)

階段正確】數(shù)地工作。

符號(hào)表毅行的基本要求:目標(biāo)是合理存放信息和快

速率確t我。

?正確存儲(chǔ)各類信息,

?適應(yīng)系同階段的南靠/

?便4嗡數(shù)地進(jìn)行全我、插入、刪除和修改萼糅作,

?安間可。劭態(tài)獷克。

37

4.3.1符號(hào)表?xiàng)l目

■邃新上得.,每個(gè)聲明的名容點(diǎn)符號(hào)表中占據(jù)一桂,

稱,一個(gè)條目,用手盛放名莊的相關(guān)信息。

?符號(hào)表中的內(nèi)客;保留有、標(biāo)/符、特殊符號(hào)(包

括算符、合隔符等J等等。

?多個(gè)3表:系同類別的符號(hào)可。存放點(diǎn)系同的3表

中,的變量名表、過(guò)程名表、保留室表等。

?點(diǎn)數(shù)方式:關(guān)桂室+屬槌。

38

4.3.1符號(hào)表?xiàng)l目(續(xù))

關(guān)4組合關(guān)健室:

intx;

{doubIex;

structx{floaty,z;};

7,怒C構(gòu)造的符號(hào)表中,俎合關(guān)桂莊至夕應(yīng)該包括三項(xiàng);

名有+作用域+類型

2,劣一個(gè)名莊x點(diǎn)同一作用域中允許/多于一個(gè)的聲明,則

對(duì)x引用時(shí)需要根據(jù)上千次確定x割友屬于哪個(gè)對(duì)彖。

M因此大多程序微行語(yǔ)言在語(yǔ)法上規(guī)定了系允許送件的聲

朗,。簡(jiǎn)化褊鐸時(shí)的處理。

39

4.3.2構(gòu)成名字的字符串的存儲(chǔ)

足衣熬據(jù)變衣劇提

直接卷放間接存放

名生(胤接商儲(chǔ))屬槌屬但

(或101/4)proc,...proc,

i06(或105/1)int,...int,...

#Q8dA融加6/9)proc,...proc,

由力8w(氧蹌e_fobQ?lb相bt_a..booIean,

sort#a#fldadaavdv#drawredr^(ilnAirfierfobjebijeata#

f101

40

4.3.2構(gòu)成名字的字符串的存儲(chǔ)(續(xù))

?間接得儲(chǔ)的方法實(shí)際上解決了復(fù)點(diǎn)信息的希儲(chǔ)冏題

?粉其推廣到屬但,則值何一個(gè)復(fù)點(diǎn)的屬楹,均可。,其

另辟變間

?變間本身可。是G何復(fù)東秸構(gòu)(電熬組的肉精向量等)

?而以需要粉指向此變間的猾針數(shù)在此屬楹在符號(hào)表中的

對(duì)應(yīng)假置即可。

41

4.3.3名字的作用域

程本微行語(yǔ)言的名莊可。出現(xiàn)點(diǎn)系同的范砌內(nèi),并且可。

具嗡系同的意義。

1,兩種刻合范閶的方式:并列的和錢套的。

2,系同的語(yǔ)言采用系同的方式:的Pascal的還錢定文可。

是錢套的,而C的過(guò)程定義是并列的,便是C允許程本塊

是嵌套的。(冏奧,過(guò)程與程序塊的2要區(qū)別7)

5名莊的作用域:名莊點(diǎn)哪個(gè)范詞內(nèi)越作用。并列的兩個(gè)

范詞內(nèi)的名莊作用域段系相不,但是令別點(diǎn)嵌套的兩個(gè)

范閶內(nèi)的名莊,其作用域的間奧就需要刷足規(guī)則未限定,

。使得但何一個(gè)名有點(diǎn)值何范閶河涵義都是無(wú)二義的。

Q名莊的作用域規(guī)則;視定一個(gè)名莊點(diǎn)什么件的范詞內(nèi)應(yīng)

孩表示什么意義。

42

名室的作用域(族”

</>靜態(tài)作用域規(guī)則(static-scoperule):

編笄時(shí)就可。確定名室的作用域,也可。說(shuō),俱從靜態(tài)裱

程序就可確定名生的作用域。

<2>景近城套規(guī)則(mostcloselynested):

。在4塊,例,也適用4過(guò)程。

⑦程本塊B卡聲明的作用域包括B,

②電黑名生x系在B4聲明,那么B中x的出現(xiàn)是在外閭程星塊

B,的x聲明的作用域中,使得

(a)B,市x的聲明,并且

(b)B'比其它但何含x聲明的隹星塊更摟近被城套的B

43

4,33名室的作用域(^2)

調(diào)俗地講,名莊聲明點(diǎn)離其景近的南層起作用,即

點(diǎn)名有引用處從向向外看,它處點(diǎn)所遢刎的第一個(gè)被名

有聲朗的作用域。

例3:找人

禰三:一班禰三:軟件學(xué)浣禰三:曲電禰三

44

例4.10符合作用域規(guī)則的C++福本。么33名室的作用域(^S)

voidmain()

{inta=0,b=0;/*BO層*/

{intb=1;/*B1層,被BO線套*/

{inta=2,c=4,d=5;/*B2層,被B1被套*/

printf(,z%d%d\n”,a,b);/*錯(cuò)累2,1*/

)

{intb=3;/*B3層,與B2并列*/

printf(,z%d%d\n〃,a,b);/*秸累,;0,3*/

printf(,z%d%d\n,z,a,b);/*秸累,;Qj_L*/

printf(,z%d%d\n”,a,b);/*秸累0,0*/

)聲闞作用域

聲明與作用域:inta二0B0-B2

intb=0B0-B1

intb=1B1-B3

inta=2B2

intb=3B345

工4

Vo

2{

3

4

7

100

*,

1..

俵嘏表應(yīng)是一個(gè)棧,。正確反映名生的作用域,即符號(hào)的

加入和刪除,物在俵嘏表的一端進(jìn)行。

關(guān)楠生/名莊+作用域:

俵槌表上的操作:

圭我:從表決(錢頂,許胎,遢物的第一個(gè)名莊:

插入:克上找,森插入在表決,

一?dB25—cB24+aB22''bB11+bBO0+aBO0#

46

1voidmain()么3"俵”?表(犢7)

2{inta=0,b=0;//BO

3{intbl;//B1

4{inta=2,c=4,d=5;}//B2

7{intb=3;_____________}//B3

11))

刪除;(a)粉時(shí);粉在同一作用域的名生同時(shí)精走,適冬保點(diǎn);

(b)永久;粉在同一作用域的名莊同時(shí)精走,系毒保腐。

修改;S至找類何,修改第一個(gè)遢到的名莊的信息。

修改可。用刪除+插入代替。

俵喉表上糅作的致率3個(gè)條目)/

一個(gè)名有的全找;鼠功全我(平的九(n+1)/2;系周功全找:n+1

n

建克n個(gè)條目的符號(hào)表(景懷九£i-(n+1)n/2

Z=1

47

上次課主要內(nèi)容

1.中間代碼

b.三地址雞馬三地址碼的實(shí)現(xiàn)一三無(wú)式號(hào)四無(wú)式

c.囹彬表示一制與DAG

?樹(shù)與后徽式和三地征鳴的關(guān)系

2.符號(hào)表

?符號(hào)表的條目(名莊的特征J

?名莊的兩種卷儲(chǔ)方式(施廣)

?名莊的作用域(靜態(tài)與素近線春源則J

?俵嘏表

48

4.3.5散列表

v/>微列表的構(gòu)閥

粉俵但表今鼠m個(gè)小表。構(gòu)造hash笛烈,使名有靖勺微布點(diǎn)m

個(gè)3表中。若微列靖勺,則時(shí)間復(fù)集盛會(huì)海烈晨俵槌表的1/m。

1.薇列鋌(hashlink九鏈接所嗡具疇相同hash值的無(wú)素,

表要點(diǎn)表要破組中;

2,作用域錠(scopelink'鏈接所有在同一作用域中的完

素,表決點(diǎn)作用域鏈中。

49

V2>微列表上的糅作4.35枚列表(陵7)

1.全找:首先行算微列函烈,影后從微列西劇所猾示的人口

進(jìn)入某個(gè)俵嘏表,在彼槌表中沿hashlink,蒙全找單鏈

表中的名莊一件全找。

2插入:首先

溫馨提示

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