編譯原理課件 第6章 屬性文法及語法制導(dǎo)翻譯_第1頁
編譯原理課件 第6章 屬性文法及語法制導(dǎo)翻譯_第2頁
編譯原理課件 第6章 屬性文法及語法制導(dǎo)翻譯_第3頁
編譯原理課件 第6章 屬性文法及語法制導(dǎo)翻譯_第4頁
編譯原理課件 第6章 屬性文法及語法制導(dǎo)翻譯_第5頁
已閱讀5頁,還剩23頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

本章在編譯程序中的地位

表格管理詞法分析器語法分析器語義分析與中間代碼產(chǎn)生優(yōu)化器目標(biāo)代碼生成器源程序單詞符號(hào)語法單位中間代碼中間代碼目標(biāo)代碼出錯(cuò)處理1教學(xué)要求掌握:兩種屬性:綜合屬性,繼承屬性基于屬性文法的處理方法---語法制導(dǎo)翻譯方法2教學(xué)內(nèi)容6.1屬性文法綜合屬性,繼承屬性,語義規(guī)則,屬性文法6.2基于屬性文法的處理方法語法制導(dǎo)翻譯,依賴圖法計(jì)算屬性,樹遍歷計(jì)算屬性,一遍掃描的處理方法,抽象語法樹3

CH.6屬性文法和語法制導(dǎo)翻譯在分析-綜合模式的編譯器中,語義分析是分析過程的最后一個(gè)步驟,只有在這一步才真正開始考慮程序語言的意義,并著手把它們翻譯成某種中間代碼。這一過程通常采用的方法是屬性文法和語法制導(dǎo)翻譯方法。語法制導(dǎo)翻譯方法的基本思想是,根據(jù)翻譯的需要設(shè)置文法符號(hào)的屬性,用屬性描述語法結(jié)構(gòu)的語義,用屬性的計(jì)算完成翻譯。屬性文法使文法符號(hào)屬性值的計(jì)算和產(chǎn)生式相聯(lián)系。隨著語法分析的進(jìn)行,執(zhí)行屬性值的計(jì)算,從而完成語義分析和翻譯的任務(wù)。46.1屬性文法屬性文法,也稱屬性翻譯文法或語法制導(dǎo)定義,是Knuth在1968年首先提出來的。屬性:在上下文無關(guān)文法的基礎(chǔ)上為每個(gè)文法符號(hào)X(終結(jié)符或非終結(jié)符)配備若干個(gè)相關(guān)的“值”---這些“值”就稱為文法符號(hào)X的屬性。屬性值的設(shè)置和語法結(jié)構(gòu)的語義以及翻譯程序的需要有關(guān)。屬性代表與文法符號(hào)相關(guān)語義信息,如類型、值、代碼序列、符號(hào)表內(nèi)容等5屬性、語義規(guī)則、屬性文法屬性一般分為兩類:綜合屬性和繼承屬性。屬性和變量一樣,可以在語法分析過程中進(jìn)行計(jì)算和傳遞。語義規(guī)則:屬性的計(jì)算規(guī)則。屬性的加工和計(jì)算的過程即是語義處理的過程。屬性文法:以一個(gè)上下文無關(guān)文法為基礎(chǔ),為每個(gè)文法符號(hào)引進(jìn)一組屬性,對(duì)文法的每個(gè)產(chǎn)生式都配備一組與之相關(guān)聯(lián)的屬性的計(jì)算規(guī)則(語義規(guī)則),這樣得到的文法。屬性文法是對(duì)上下文無關(guān)文法的推廣。6屬性文法、語義規(guī)則(1)屬性文法的形式:產(chǎn)生式語義規(guī)則.

Ab:=f(c1,c2,…,ck)這里,f是一個(gè)函數(shù),表示屬性b依賴于屬性c1,c2,…,ck,而且規(guī)定b:(1)b是A的一個(gè)綜合屬性并且c1,c2,…,ck是產(chǎn)生式右部文法符號(hào)的屬性;或者(2)b是產(chǎn)生式右邊某個(gè)文法符號(hào)的一個(gè)繼承屬性并且

c1,c2,…,ck是A或產(chǎn)生式右部任何文法符號(hào)的屬性

。7屬性文法的說明(1)P136(1)終結(jié)符只有綜合屬性,它由詞法分析器提供例如digit.lexval

表示單詞符號(hào)“數(shù)”的詞法值

id.entry表示單詞符號(hào)“標(biāo)識(shí)符”的符號(hào)表入口(2)非終結(jié)符既可以有綜合屬性也可以有繼承屬性,在屬性文法的語義規(guī)則中計(jì)算(3)關(guān)于屬性計(jì)算的規(guī)定①文法的開始符號(hào)的所有繼承屬性作為屬性計(jì)算前的初始值。②一般來講,對(duì)出現(xiàn)在產(chǎn)生式AX1X2…Xn左邊的非終結(jié)符A的綜合屬性和出現(xiàn)在產(chǎn)生式右部的符號(hào)Xi的繼承屬性都必須提供一個(gè)計(jì)算規(guī)則。8屬性文法的說明(2)③與產(chǎn)生式AX1X2…Xn

相關(guān)聯(lián)的屬性計(jì)算不能有A的繼承屬性和Xi的綜合屬性的計(jì)算規(guī)則。④出現(xiàn)在產(chǎn)生式左邊非終結(jié)符A的繼承屬性和出現(xiàn)在產(chǎn)生式右邊符號(hào)Xi的綜合屬性由其它產(chǎn)生式的屬性規(guī)則計(jì)算或者由屬性計(jì)算器的參數(shù)提供。9屬性文法、語義規(guī)則(2)屬性文法的形式:產(chǎn)生式語義規(guī)則.

Ab:=f(c1,c2,…,ck)例如P137.表6.1的屬性文法:

EE1+TE.val:=E1.val+T.val例如P139.表6.2的屬性文法:

DTLL.in:=T.typeLL1,idL1.in:=L.in綜合屬性綜合屬性繼承屬性繼承屬性繼承屬性10例,P137.

假設(shè):產(chǎn)生式語義規(guī)則ABCA.b:=A.a+B.cC.d:=B.c+1

A有綜合屬性b和繼承屬性aB有綜合屬性cC有繼承屬性d繼承屬性A.a和綜合屬性B.c在其他適當(dāng)?shù)牡胤接?jì)算。11語義規(guī)則所描述的工作語義規(guī)則所描述的工作可以是任何希望的翻譯工作,如:屬性計(jì)算、靜態(tài)語義檢查、符號(hào)表操作、中間代碼生成、報(bào)告出錯(cuò),等等。語義規(guī)則可能產(chǎn)生副作用(如產(chǎn)生代碼),也可能不是變?cè)膰?yán)格函數(shù)b:=f(c1,c2,…,ck),如某個(gè)規(guī)則給出可用的下一個(gè)數(shù)據(jù)單元的地址。這樣的語義規(guī)則通常寫成過程調(diào)用或過程段---這時(shí)認(rèn)為定義了一個(gè)虛屬性。12屬性文法舉例:P137.表6.1一個(gè)簡(jiǎn)單的臺(tái)式計(jì)算器的屬性文法。輸入一個(gè)含+、*、(、)和數(shù)字的算術(shù)表達(dá)式(文法的句子),計(jì)算并輸出其值,輸入行以n結(jié)束。產(chǎn)生式語義規(guī)則LEn

Print(E.val)

EE1+T

E.val:=E1.val+T.valET

E.val:=T.valTT1*FT.val:=T1.val*F.valTF

T.val:=F.valF(E)

F.val:=E.valFdigit

F.val:=digit.lexval1.

非終結(jié)符E,T,F有綜合屬性val---表達(dá)式值2.

終結(jié)符digit有綜合屬性lexval---數(shù)的二進(jìn)制值,由詞法分析器提供3.注:同一個(gè)產(chǎn)生式的相同非終結(jié)符加上下標(biāo),以區(qū)分這些非終結(jié)符的屬性值引用的二義性13兩種屬性:綜合屬性綜合屬性用于“自下而上”傳遞信息。綜合屬性:在語法樹中,一個(gè)結(jié)點(diǎn)的綜合屬性的值由其子結(jié)點(diǎn)的屬性值確定。通常結(jié)合使用自下而上的分析方法在每一個(gè)結(jié)點(diǎn)處使用語義規(guī)則計(jì)算綜合屬性的值---由下層子結(jié)點(diǎn)的屬性值計(jì)算上層父結(jié)點(diǎn)的綜合屬性值,隨著自下而上語法分析的進(jìn)行,最終可計(jì)算出開始符號(hào)的綜合屬性值。AX1X2…XnA.bX1.c1X2.c2…Xn.

ckAX1X2…Xnb:=f(c1,c2,…,ck)帶注釋的語法樹14綜合屬性舉例:例6.1綜合屬性的使用及其自下而上的計(jì)算過程P137.表6.1臺(tái)式計(jì)算器的屬性文法,輸入一個(gè)表達(dá)式(以n結(jié)尾),計(jì)算并打印其值。例如:輸入表達(dá)式3*5+4n,輸出數(shù)值19。P138.圖6.1給出了輸入串3*5+4n的帶注釋的語法樹–屬性化的語法樹。綜合屬性X.val值隨著自下而上語法分析的進(jìn)行,自下而上的計(jì)算、傳遞和流動(dòng)---在每次歸約時(shí)執(zhí)行語義規(guī)則,計(jì)算屬性值,最終計(jì)算出開始符號(hào)的綜合屬性值,打印出來完成翻譯。見下頁圖15digitlexvaldigitlexvaldigitlexvalFvalT1valFvalTval*E1valFvalTval+EvalLnPrint(E.val)翻譯3*5+4n求表達(dá)式值=3=3=5=5=15=15=4=4=4=19=316兩種屬性:繼承屬性繼承屬性用于“自上而下”傳遞信息。繼承屬性:在語法樹中,一個(gè)結(jié)點(diǎn)的繼承屬性由此結(jié)點(diǎn)的父結(jié)點(diǎn)和(或)兄結(jié)點(diǎn)的某些屬性確定??梢杂美^承屬性來表示程序語言結(jié)構(gòu)中的上下文依賴關(guān)系。繼承屬性的計(jì)算可以結(jié)合自上而下的語法分析進(jìn)行。A

X1…X

…XnA.ck

X1.c1…X.b…XnAX1X2…Xnb:=f(c1,c2,…,ck)17表6.2帶有繼承屬性L.in的屬性文法

產(chǎn)生式語義規(guī)則

DTLLin:=TtypeTintTtype:=integerTrealTtype:=realLL1,idL1

in:=Linaddtype(identry,Lin)Lidaddtype(identry,Lin)

例6.2說明句的帶有繼承屬性計(jì)算的屬性文法T.type是綜合屬性---標(biāo)識(shí)符的類型L.in為繼承屬性---傳遞類型信息18繼承屬性的使用和計(jì)算:例6.2繼承屬性的使用及其自上而下的計(jì)算過程P137.表6.2的屬性文法,用繼承屬性L.in

為說明語句中的各個(gè)標(biāo)識(shí)符提供類型信息。例如:說明語句reala,b,c;inti,j,k;T.type是綜合屬性,由說明語句中的關(guān)鍵字real/int確定,結(jié)合產(chǎn)生式Tint或Treal

賦值T.type:=integer或real。TintT.type:=integerTreal

T.type:=realT.typeintT.typereal19繼承屬性的使用和計(jì)算:例6.2續(xù)例6.2,

P137.表6.2屬性文法,用繼承屬性in為說明語句中的各個(gè)標(biāo)識(shí)符提供類型信息。L.in繼承屬性,在DTLL.in:=T.typeLL1,id

L1.in:=L.in中計(jì)算。D

T.type

L.inL.inL1.in,id

依賴于兄依賴于父Addtype(id.entry,L.in)把標(biāo)識(shí)符的類型信息填入符號(hào)表,入口為id.entry---這個(gè)過程定義了一個(gè)虛屬性。20圖6.2說明語句

realid1,id2,id3

的帶有繼承屬性的語法樹繼承屬性in的值自上而下從左到右計(jì)算、傳遞和流動(dòng)。三個(gè)L結(jié)點(diǎn)的L.in分別給出標(biāo)識(shí)符id1、id2和id3的類型。過程addtype(id.entry,L.in)把id的類型填入符號(hào)表。id3T.type=realDL.in=realL.in=realrealL.in=real,id1id2,216.2基于屬性文法的處理方法屬性文法:產(chǎn)生式語義規(guī)則.

b:=f(c1,c2,…,ck)

語義規(guī)則的計(jì)算可以執(zhí)行任何翻譯動(dòng)作。對(duì)輸入串的翻譯也就是根據(jù)語義規(guī)則進(jìn)行計(jì)算得出結(jié)果。屬性文法是比較抽象的翻譯說明,隱藏了一些實(shí)現(xiàn)細(xì)節(jié),主要是無須指明翻譯時(shí)語義規(guī)則的計(jì)算次序。本節(jié)討論語義規(guī)則的計(jì)算方法,指明屬性文法中語義規(guī)則的計(jì)算次序,從而把語義規(guī)則改造為計(jì)算屬性的語義程序,把靜態(tài)的語義規(guī)則改寫為可動(dòng)態(tài)執(zhí)行的語義動(dòng)作---語法制導(dǎo)翻譯方法。22語法制導(dǎo)翻譯法語法制導(dǎo)翻譯法:由源程序的語法結(jié)構(gòu)所驅(qū)動(dòng)的處理辦法。這種處理方法是基于屬性文法的處理過程:①對(duì)單詞符串進(jìn)行語法分析,構(gòu)造帶屬性的語法樹②根據(jù)需要遍歷語法樹,并在語法樹的各結(jié)點(diǎn)處按語義規(guī)則進(jìn)行計(jì)算即得翻譯結(jié)果。P139.圖6.3語法制導(dǎo)翻譯的輪廓:

輸入串語法樹(帶屬性注釋)語法分析深度優(yōu)先樹遍歷對(duì)輸入串的翻譯結(jié)果進(jìn)行計(jì)算拓?fù)渑判蛘Z義規(guī)則計(jì)算次序結(jié)點(diǎn)屬性間依賴關(guān)系的依賴圖構(gòu)造23所謂遍歷是指沿著某條搜索路線,依次對(duì)樹中每個(gè)結(jié)點(diǎn)均做一次且僅做一次訪問。訪問結(jié)點(diǎn)所做的操作依賴于具體的應(yīng)用問題。

24一遍掃描的語法制導(dǎo)翻譯一個(gè)具體的語法制導(dǎo)翻譯的實(shí)現(xiàn)不一定非要按圖6.3的輪廓不可。在某些情況下可用一遍掃描實(shí)現(xiàn)屬性文法的語義規(guī)則計(jì)算---即在語法分析的同時(shí)完成語義規(guī)則的計(jì)算。無須明顯地構(gòu)造語法樹或依賴圖。此節(jié)以后的各節(jié)以及CH7.都討論這種特殊方法---一遍掃描的語法制導(dǎo)翻譯方法。一遍掃描的語法制導(dǎo)翻譯輪廓:

輸入串───翻譯結(jié)果語法分析的同時(shí)完成語義規(guī)則的計(jì)算256.2.1依賴圖語義規(guī)則建立了屬性之間的依賴關(guān)系,這些關(guān)系可以用圖來表示,這樣的圖稱為屬性依賴圖。語法樹結(jié)點(diǎn)屬性的依賴圖是一個(gè)有向圖:結(jié)點(diǎn):語法樹結(jié)點(diǎn)的屬性(綜合屬性或繼承屬性)有向邊:屬性的依賴關(guān)系,如果屬性b依賴于屬性c,即b:=f(c),則:語義規(guī)則b:=f(c1,c2,…,ck),b可能是一個(gè)虛綜合屬性(即沒有b,f是一個(gè)過程),其依賴圖見右圖。依賴圖構(gòu)造方法見P140.bcbc1ckc2…26依賴圖:例6.3簡(jiǎn)例:下面屬性文法的依賴圖:AXYA.a:=f(X.x,Y.y)X.i:=g(A.a,Y.y)

例6.3:下面的屬性文法的依賴圖EE1+E2

E.val:=E1.val+E2.val語法樹EE1+E2依賴圖

P141.圖6.4E.valE1.valE2.valA.aX.iX.xY.yA

XY27例6.4圖6.5句子

realid1,id2,id3

的語法樹及依賴圖TLLid3Lid2Did1real,,4typein5L.in:=T.typein7L1.in:=L.inin9L1.in:=L.in3entry6addtype(id.entry,L.in)2entry8addtype(id.entry,L.in)1entry10addtype(id.entry,L.in)結(jié)點(diǎn)1、2、3是id.entry屬性結(jié)點(diǎn)6、8、10代表虛屬性有向邊表示屬性的依賴關(guān)系數(shù)字標(biāo)識(shí)結(jié)點(diǎn)表示計(jì)算次序28良定義的屬性文法對(duì)語義規(guī)則b:=f(c1,c2,…,ck)來說,只有在屬性c1,c2,…,ck均已知的情況才可以使用來計(jì)算b。但,有時(shí)會(huì)出現(xiàn)一個(gè)屬性對(duì)另一個(gè)屬性的循環(huán)依賴關(guān)系。如果一屬性文法不存在屬性之間的循環(huán)依賴關(guān)系,那么該屬性文法為良定義的。為了設(shè)計(jì)編譯程序,我們只處理良定義的屬性文法。例如設(shè)p,c1,c2都是屬性,以下計(jì)算規(guī)則就無法對(duì)p求值。p:=f1(c1)c1:=f2(c2)c2:=f3(p)DAG圖:良定義屬性文法的依賴圖,

無環(huán)有向圖(DirectedAcyclicGraph)pc2c129依賴圖法:屬性的計(jì)算次序1.一個(gè)有向非循環(huán)圖(DAG圖)的拓?fù)湫?是圖中結(jié)點(diǎn)的任何順序m1,m2,…,mk,使得有向邊必須是從序列中前面的結(jié)點(diǎn)指向后面的結(jié)點(diǎn)。也就是說,如果mimj

是mi

到mj

的一條邊,那么在序列中mi必須出現(xiàn)在mj

之前。2.一個(gè)依賴圖(DAG圖)的任何拓?fù)渑判蚨冀o出一個(gè)語法樹中結(jié)點(diǎn)的語義規(guī)則計(jì)算的有效順序。這就是說,在拓?fù)渑判蛑?,在一個(gè)結(jié)點(diǎn)上,語義規(guī)則b:=f(c1,c2,…ck)中的屬性c1,c2,…ck在計(jì)算b以前都是可用的。30例6.5

P141.圖6.5的依賴圖的一個(gè)拓?fù)渑判蚴牵?/p>

1,2,3,4,5,6,7,8,9,10由此拓?fù)湫蚩梢缘玫较旅娴某绦?an代表與n有關(guān)的屬性),該程序把3個(gè)標(biāo)識(shí)符a,b,c的類型信息(real)填入符號(hào)表中每個(gè)標(biāo)識(shí)符對(duì)應(yīng)的符號(hào)表項(xiàng)中。程序

a4:=real;語義規(guī)則

T.type:=reala5:=a4;L.in:=T.typeaddtype(id3entry,a5);虛屬性6a7:=a5;L1.in:=L.inaddtype(id2entry,a7);虛屬性8a9:=a7;L1.in:=L.inaddtype(id1entry,a9);虛屬性10依賴圖法屬性的計(jì)算次序:例

31屬性文法說明的語法制導(dǎo)翻譯是很精確的:(1)基礎(chǔ)文法用于建立輸入串的語法分析樹(可帶屬性注釋);(2)構(gòu)造對(duì)應(yīng)語法樹的依賴圖;(3)對(duì)依賴圖進(jìn)行拓?fù)渑判?(4)從拓?fù)湫虻玫接?jì)算語義規(guī)則的次序;(5)按此次序計(jì)算語義規(guī)則便得到輸入串的翻譯結(jié)果。依賴圖法屬性的計(jì)算次序:說明

326.2.2樹遍歷的屬性計(jì)算方法通過語法樹遍歷計(jì)算屬性值的方法有很多種。這些方法都假設(shè):1.語法樹已經(jīng)建立起來了,并且樹中已帶有開始符號(hào)的繼承屬性和終結(jié)符的綜合屬性。2.然后以某種次序遍歷語法樹,直至計(jì)算出所有結(jié)點(diǎn)的屬性值。最常用的遍歷方法是深度優(yōu)先,對(duì)語法樹自上而下從左到右遍歷的方法。對(duì)遍歷到的結(jié)點(diǎn)計(jì)算其所有能夠計(jì)算的屬性值??赡苄枰褂枚啻螛浔闅v,直到把所有的結(jié)點(diǎn)的所有屬性都計(jì)算出來。P142.有一個(gè)深度優(yōu)先樹遍歷的算法,對(duì)任何良定義的屬性文法進(jìn)行屬性的計(jì)算。用例子說明。33深度優(yōu)先樹遍歷計(jì)算屬性:例6.6

P143.表6.3的屬性文法。屬性S.a(=0)繼,S.b綜;X.c繼,X.d綜;Y.e繼,Y.f綜;Z.h繼,Z.g綜圖6.6產(chǎn)生式語義規(guī)則SXYZX.c:=Z.gY.e:=S.bZ.h:=S.aS.b:=X.d-2Xx

X.d:=2*X.cYy

Y.f:=Y.e*3Zz

Z.g:=Z.h+1xyz.h=0第一次遍歷S.a=0

XYZ.g=1.d=2.c=1.b=0第二次遍歷.e=0.f=0第三次遍歷346.2.3一遍掃描的處理方法與樹遍歷的屬性計(jì)算方法不同,一遍掃描的處理方法是在語法分析的同時(shí)計(jì)算屬性值。這種屬性計(jì)算方法與兩個(gè)因素密切相關(guān):1.所采用的語法分析方法(自上而下或自下而上)。2.屬性的計(jì)算次序,即語法分析到什么時(shí)候計(jì)算屬性。一遍掃描的處理方法語義規(guī)則執(zhí)行的時(shí)間:1.在自上而下語法分析中,若一個(gè)產(chǎn)生式匹配輸入串成功時(shí)執(zhí)行與此產(chǎn)生式相應(yīng)的語義規(guī)則。2.在自下而上語法分析中,當(dāng)一個(gè)產(chǎn)生式被用于進(jìn)行歸約時(shí),此產(chǎn)生式相應(yīng)的語義規(guī)則就被計(jì)算。35一遍掃描的處理方法按一遍掃描的編譯程序模型來理解語法制導(dǎo)翻譯方法,直觀上說是為基礎(chǔ)文法的每個(gè)產(chǎn)生式配上一組語義規(guī)則,并且在語法分析的同時(shí)執(zhí)行這些語義規(guī)則。一遍掃描的屬性計(jì)算方法是語法分析工作和語義規(guī)則的計(jì)算穿插進(jìn)行。但以語法分析作主導(dǎo)。S-屬性文法(僅含綜合屬性的屬性文法)可用于一遍掃描的自下而上分析。L-屬性文法(含有繼承屬性的屬性文法)可用于一遍掃描的自上而下分析。366.2.4抽象語法樹語法制導(dǎo)翻譯以語法樹作基礎(chǔ),實(shí)際上,語法樹可以作為一種合適的中間語言形式?,F(xiàn)在對(duì)語法樹進(jìn)行改造,去掉那些對(duì)翻譯不必要的信息,將語法樹進(jìn)行抽象---抽象語法樹。在表達(dá)式的抽象語法樹中,運(yùn)算符、關(guān)鍵字不作葉子結(jié)點(diǎn)而作為內(nèi)部結(jié)點(diǎn),葉子結(jié)點(diǎn)只是運(yùn)算量。抽象語法樹也可以屬性化,給結(jié)點(diǎn)加上屬性變成帶附注的抽象語法樹。語法制導(dǎo)翻譯既可以基于語法分析樹也可以基于抽象語法樹進(jìn)行,采用的基本方法是一樣的。37抽象語法樹:簡(jiǎn)例例,為下面文法的句子a-4+c

建立抽象語法樹。EE+T|E-T|TT(E)Tid|num為每個(gè)運(yùn)算量或運(yùn)算符號(hào)都建立一個(gè)結(jié)點(diǎn)??梢愿鶕?jù)表達(dá)式的運(yùn)算順序自下而上的構(gòu)造---手工構(gòu)造。a-+c4抽象語法樹運(yùn)算符作內(nèi)部結(jié)點(diǎn)id(a)EE-TE+TTnum(4)id(c)語法樹38抽象語法樹的實(shí)現(xiàn)抽象語法樹中的每一個(gè)結(jié)點(diǎn)可以由包含幾個(gè)域的記錄來實(shí)現(xiàn);有向邊用指針實(shí)現(xiàn)。在一個(gè)運(yùn)算量對(duì)應(yīng)的結(jié)點(diǎn)(葉結(jié))中,一個(gè)域標(biāo)識(shí)運(yùn)算量,另一個(gè)域是該運(yùn)算量的屬性值(或指針)。在一個(gè)運(yùn)算符號(hào)對(duì)應(yīng)的結(jié)點(diǎn)中,一個(gè)域標(biāo)識(shí)運(yùn)算符號(hào),其它域包含指向運(yùn)算分量的結(jié)點(diǎn)的指針。運(yùn)算符號(hào)通常叫做這個(gè)結(jié)點(diǎn)的標(biāo)號(hào)。進(jìn)行翻譯時(shí),抽象語法樹中的結(jié)點(diǎn)可能會(huì)用附加域來存放結(jié)點(diǎn)的屬性值(或指向?qū)傩缘闹羔槪?。numvalid.op..Toentryofid右子樹根結(jié)左子樹根結(jié)39建立表達(dá)式的抽象語法樹使用的函數(shù),這些函數(shù)返回新建立結(jié)點(diǎn)的指針。1.mknode(op,left,right)

建立一個(gè)運(yùn)算符號(hào)結(jié)點(diǎn),標(biāo)號(hào)是op,兩個(gè)域

溫馨提示

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