計算機第四章 語法制導(dǎo)翻譯生成中間代碼_第1頁
計算機第四章 語法制導(dǎo)翻譯生成中間代碼_第2頁
計算機第四章 語法制導(dǎo)翻譯生成中間代碼_第3頁
計算機第四章 語法制導(dǎo)翻譯生成中間代碼_第4頁
計算機第四章 語法制導(dǎo)翻譯生成中間代碼_第5頁
已閱讀5頁,還剩140頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

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

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

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

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

方法的利譽。

;要向密包括:

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

<2><間代雞簡介

<5>符號表簡介

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

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

4.1語法制導(dǎo)翻譯簡介

4.1.1語法與語義

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

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

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

對于語法和語義:

?語義系犍離開德法獨更腐森;

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

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

?語法與語義之間沒1朗確的界俵。

倒乙貓一老鼠號老鼠吃貓

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

1.caseconditionis

2.switch(condition){

easel:statl;

casecondition1:statl;break;

case2:stat2;

casecondition2:stat2;break;

endcase;

)

2

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

V2>語文今折的兩個作用

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

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

表達(dá)式索值

符號表確寫

中間代雞皮鼠等

VM>語文今折的方法

語法制導(dǎo)翻律

3

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

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

逾俗地講;。語法令折,基砒,伴成語法今新的各個步驟,

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

具體方法/

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

號的屬楹表東,

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

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

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

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

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

中出錯信息等。

4

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

V2>屬槌的抽象表赤

.attr

例電:E.val(假)

E.type(類型)

E.code(代碼4列)

E.place(商儲變間)

V3>對次法的的貢

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

臺新。

名了簡單,本章的女法一解,二義次法。默欣解決二義

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

5

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

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

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

2.旅SLR⑴次法

?二義交法

?熊二義女法

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

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

?語法與語義

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

6

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

VM>屬但的是義**

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

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

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

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

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

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

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

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

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

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

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

上儂蟻盛位O

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

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

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

7

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

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

用抽象的屬槌和運真符號衰東的語義規(guī)則公式,做什么,

<2>耕律方案

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

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

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

8

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

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

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

L.p:=print(E.post)

產(chǎn)女式語法喇導(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語義規(guī)則的兩種形式(續(xù)2)

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

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

方法系唯一2.,屬,合一方儲變問;

,考慮行事法不。

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

(“43+5+8%的,歸的時翻呼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語義規(guī)則的兩種形式(續(xù)3)

VM>屬秋作與臺折樹的灌琴

將屬槌附房點今折樹對反次法符號上,彬成灌琴今折樹。

例4.23+5+8的合折樹布灌琴臺折樹:

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)幺式語法制導(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語義規(guī)則的兩種形式(續(xù)4)

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

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

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

提醵:除冰特別提醵,本章利信的語注制導(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è)計

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

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

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

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

V2>擴充臺折極:靖加一個與今折棧并列的語義錢,用于塔及

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

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

對于表達(dá)式:5+3輸入記號流

有歸為,龍部E時,

同時也得到了他8。

13

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

例4.33+5*8的語注制導(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è)計(續(xù)2)

(格局的變化)

今折棧輸入語文劭作

##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è)計

遞歸下降方法是用銀星實現(xiàn)對旅終秸符的展開和對終

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

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

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

2.犯何名次法符號的屬但核制點儲變用;

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

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

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

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

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

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

16

4.2.中間代碼商介

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

票種中間―東。

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

,中間代媽。

3中間代雞實際上應(yīng)起一個編鋅器端端S啟端臺水嶺的

作用O

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

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

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

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

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

17

4.2.1后綴式

V7>后徽式的特征

糅作劇在麻,搖作符紫成其后,無需用括號限喇運案的

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

例電:中徽式后徽式

3+5*2/7352*7/+

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

18

V2>行真后徽式的廢加機

算法4.1后徽式君爵

輸入后徽式

輸出行寓秸累

方法采用下述過程進行行算,景於給累留在錢中。

x:=first_token;

whilenotend_of_exp

I°°Pifxinoperators

thenpushx;一糅作照進錢

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

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

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;一猱作熬進校

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

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

endif;

next(x);

endIoop;

20

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

V分粉啟讖式推廣到其他語句

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

語句,只要遵守糅作劇點嘛,糅作符緊砥其后的原則即可。

對語句:ifethenxeIsey

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

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

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

ep1jezxp2jumpp1:yp2:(2)

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

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

p2jump表示無條件挎向p2。

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

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

21

4.2.2三地址碼

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

語法:

result:=arg1oparg2或

result:=oparg1或

oparg1

語義:

轉(zhuǎn)累點放在result中的二無運爵arg1oparg2

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

一無運爵oparg1

例如:

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

T1:二b*c

T2:=a+T1

x:=T2

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

22

V2>三地址碼的種類)

星號三地址媽四元式

(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>三地征鴻的實現(xiàn);三無式S四無式

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

三地址媽:(i):=arg1oparg2

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

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

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

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

它們在三完式表中的假置。

序號的摳堂含義:就代表此三無式,又代表三無式存放的給累。

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

給代碼的優(yōu)化帶來國雍。

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

位置,而一里進行了代媽的刪除或移劭,則衰東京三元式的星號

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

24

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

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

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

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

4.遞歸下海今折中翻律方案的核花:腐槌的點儲變間與語

義規(guī)則的花爵

5.中間代碼

?中間代碼的作用

?中間代碼的彬式

a.后徽式

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

25

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

1.次法符號屬槌的微行

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

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

26

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

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

或三無式表中的序號,

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

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

返?三無式的序號/

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

置或存儲假費。

生式:語義規(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>三地征雞的實現(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))三無式序列:

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>三地址雞的實現(xiàn)(族切

③四完式

四無式是對三無式的改進,特表示制算錯累的三無式

序號用一個晶式的變量衰赤,從而避免了三無式的值號三

無式點三無獨中的假黃相關(guān)的隔支。

四無式的語法:三完式;

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

所衰赤的祈靠;

result:=arg1oparg2(i):=arg1oparg2

29

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

7,四無式與三無式的唯一區(qū)別是將由本號所表赤的運算

待累改,了由臨忖變量來表示。

2,此改變使得四無式具有了運算秸零號四無式森四無式

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

大方便,因,送件可。刪除或移劭四無式而系會影響

運算秸累。

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

四完式;三地址碼:

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

30

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

1.屬僧.code:表示存放運靠秸累的變量,

2.2:newtemp:返回一個新的低時變量,電T1,T2,…等;

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

若名一無運算,則arg2可變。

產(chǎn)女式與語義規(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>樹作,中間代碼

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

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

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

三元坎;

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

(2)(+,a,b)

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

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

四無式;

abab

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

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

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

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

32

VZ>樹的語法制導(dǎo)翻鋅

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

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

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

的3樹??鄡H嗡一個就3,則nptr2四變;

3函卻三完式、四完式導(dǎo)相的語義規(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>樹的優(yōu)化衰示一DAG

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

指向同一個核3,彬朗一個有向無壞囹(DirectedAcycIic

Graph,DAG)。

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

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

:=T4/(4)

x*T2/(2)

x*T3/(3)

ababab

DAG的語法制導(dǎo)翻鋅馬樹的語法制導(dǎo)翻律和以需要點

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

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

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

34

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

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

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

,或者說后徽式是樹的一個假槌化本列,

3樹的每個南部節(jié)支和它的核3對應(yīng)一個三無式或四無式。

35

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

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

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

/

(1b

三無式;\(+,a,

x*T3/(3)z\

(2b

\7(+,a,

z\?\

3/2

(7f1

\(*,⑴,k7

/\z\

f43

l)(7

\/(:=,x,\

/\

(1bT

四無式:\7(+,a,

z\\

l2b2)

\7(+,a,?/

3\Tc3K

\)

7(*,T1,F/

/4\3\

(TX)

\7(:=,T4,/

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

36

4.3符號表簡介

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

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

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

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

速率確t我。

?正確存儲各類信息,

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

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

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

37

4.3.1符號表條目

■邃新上得.,每個聲明的名容點符號表中占據(jù)一桂,

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

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

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

?多個3表:系同類別的符號可。存放點系同的3表

中,的變量名表、過程名表、保留室表等。

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

38

4.3.1符號表條目(續(xù))

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

intx;

{doubIex;

structx{floaty,z;};

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

名有+作用域+類型

2,劣一個名莊x點同一作用域中允許/多于一個的聲明,則

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

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

朗,。簡化褊鐸時的處理。

39

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

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

直接卷放間接存放

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

(或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)成名字的字符串的存儲(續(xù))

?間接得儲的方法實際上解決了復(fù)點信息的希儲冏題

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

另辟變間

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

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

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

41

4.3.3名字的作用域

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

具嗡系同的意義。

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

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

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

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

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

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

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

。使得但何一個名有點值何范閶河涵義都是無二義的。

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

孩表示什么意義。

42

名室的作用域(族”

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

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

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

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

。在4塊,例,也適用4過程。

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

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

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

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

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

43

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

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

點名有引用處從向向外看,它處點所遢刎的第一個被名

有聲朗的作用域。

例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);/*錯累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)是一個棧,。正確反映名生的作用域,即符號的

加入和刪除,物在俵嘏表的一端進行。

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

俵槌表上的操作:

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

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

一?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)粉時;粉在同一作用域的名生同時精走,適冬保點;

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

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

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

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

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

n

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

Z=1

47

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

1.中間代碼

b.三地址雞馬三地址碼的實現(xiàn)一三無式號四無式

c.囹彬表示一制與DAG

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

2.符號表

?符號表的條目(名莊的特征J

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

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

?俵嘏表

48

4.3.5散列表

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

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

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

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

表要點表要破組中;

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

素,表決點作用域鏈中。

49

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

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

進入某個俵嘏表,在彼槌表中沿hashlink,蒙全找單鏈

表中的名莊一件全找。

2插入:首先

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論