第6章屬性文法和語(yǔ)法制導(dǎo)翻譯_第1頁(yè)
第6章屬性文法和語(yǔ)法制導(dǎo)翻譯_第2頁(yè)
第6章屬性文法和語(yǔ)法制導(dǎo)翻譯_第3頁(yè)
第6章屬性文法和語(yǔ)法制導(dǎo)翻譯_第4頁(yè)
第6章屬性文法和語(yǔ)法制導(dǎo)翻譯_第5頁(yè)
已閱讀5頁(yè),還剩65頁(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ǔ)義分析”是編譯程序最實(shí)質(zhì)性的工作。語(yǔ)義分析程序在整個(gè)編譯過(guò)程中,首次對(duì)源程序的語(yǔ)義做出解釋,引起源程序發(fā)生質(zhì)的變化,而詞法分析和語(yǔ)法分析僅是對(duì)源程序形式上的識(shí)別和處理。高級(jí)程序語(yǔ)言結(jié)構(gòu)的形式化描述已經(jīng)有比較成熟的技術(shù),由于這種形式化描述的完善,使分析器的構(gòu)造甚至自動(dòng)構(gòu)造是比較容易的。1編譯程序的語(yǔ)義分析涉及到語(yǔ)言的語(yǔ)義,語(yǔ)義形式化是個(gè)專門的研究課題.形式語(yǔ)義學(xué)(如指稱語(yǔ)義學(xué)、公理語(yǔ)義學(xué)、操作語(yǔ)義學(xué)等)的研究從20世紀(jì)60年代已經(jīng)開(kāi)始,并且在理論研究方面也有了重要的進(jìn)展。但不論哪種方法,其本身的符號(hào)系統(tǒng)比較繁雜,其描述文本不易讀,尚不便借助這些形式系統(tǒng)自動(dòng)完成語(yǔ)義處理任務(wù)。并且在工程實(shí)現(xiàn)和應(yīng)用方面還有一定的差距。2目前實(shí)際應(yīng)用中較流行的語(yǔ)義描述和語(yǔ)義處理方法主要還是屬性文法和語(yǔ)法制導(dǎo)翻譯方法。但它仍不是一種形式系統(tǒng),只是比較接近形式化。語(yǔ)法制導(dǎo)翻譯方法的實(shí)質(zhì)是在語(yǔ)法分析過(guò)程中同時(shí)進(jìn)行語(yǔ)義處理的翻譯技術(shù)。這種方法使用屬性文法為工具來(lái)說(shuō)明程序設(shè)計(jì)語(yǔ)言的語(yǔ)義。3第六章屬性文法和語(yǔ)法制導(dǎo)翻譯6.1屬性文法6.2基于屬性文法的處理方法6.3S—屬性文法的自下而上計(jì)算6.4L—屬性文法和自頂向下翻譯6.5自下而上計(jì)算繼承屬性46.1屬性文法一、基本概念1、屬性廣義:用以描述事物或人的特征、性質(zhì)、品質(zhì)等等。屬性文法中:代表與文法符號(hào)相關(guān)的信息,其信息值即為屬性值。例如:其類型、值、代碼序列、符號(hào)表內(nèi)容等。56.1屬性文法(1)屬性與變量一樣,可以進(jìn)行計(jì)算和傳遞。(2)屬性加工的過(guò)程即是語(yǔ)義處理的過(guò)程。(3)屬性 綜合屬性:用于“自下而上”傳遞信息。 繼承屬性:用于“自上而下”傳遞信息。66.1屬性文法2、語(yǔ)義規(guī)則

為文法的每一個(gè)產(chǎn)生式配備的屬性的計(jì)算規(guī)則,稱為語(yǔ)義規(guī)則。3、屬性文法

上下文無(wú)關(guān)文法+語(yǔ)義規(guī)則=屬性文法76.1屬性文法二、基本規(guī)則1、語(yǔ)義規(guī)則的形式:產(chǎn)生式Aα的語(yǔ)義規(guī)則的一般形式為b:=f(c1,c2,…,ck)其中:(1)f是一個(gè)函數(shù);

(2)或者b—A的綜合屬性,且c1,c2,…,ck是α中文 法符號(hào)的屬性;

(3)或者b—α中某個(gè)文法符號(hào)的繼承屬性,且

c1,c2,…,ck是A或α中任何文法符號(hào)的屬性。?屬性b依賴于屬性c1,c2,…,ck86.1屬性文法2、VT—VN的屬性(1)VT—只有綜合屬性,由詞法分析器提供。(2)VN—既可有綜合屬性也可有繼承屬性, 文法開(kāi)始符號(hào)S的所有繼承屬性作為屬性 計(jì)算前的初始值。96.1屬性文法3、屬性的計(jì)算/獲得(1)產(chǎn)生式右邊的繼承屬性產(chǎn)生式左邊的綜合屬性(2)產(chǎn)生式左邊的繼承屬性產(chǎn)生式右邊的綜合屬性由該產(chǎn)生式提供的計(jì)算規(guī)則計(jì)算獲得由其它產(chǎn)生式的屬性規(guī)則計(jì)算或由屬性計(jì)算器的參數(shù)提供106.1屬性文法例6.1:C.d:=B.c+1A.b:=A.a+B.c產(chǎn)生式ABC的規(guī)則:C.d—右部繼承屬性A.b—左部綜合屬性A.a—左部繼承屬性B.c—右部綜合屬性116.1屬性文法例6.2:一個(gè)簡(jiǎn)單臺(tái)式計(jì)算器的屬性文法產(chǎn)生式語(yǔ)義規(guī)則LEnEE1+TETTT1*FTFF(E)FdigitPrint(E.val)E.val:=E1.val+T.valE.val:=T.valT.val:=T1.val*F.valT.val:=F.valF.val:=E.valF.val:=digit.lexval12產(chǎn)生式語(yǔ)義規(guī)則DTLTintTrealLL1,idLidaddtype(id.entry,L.in)T.type:=integerT.type:=realL1.in:=L.inL.in:=T.typeaddtype(id.entry,L.in)13產(chǎn)生式語(yǔ)義規(guī)則SXYZXxYyZzZ.h:=S.aX.c:=Z.gS.b:=X.d-2Y.e:=S.bX.d:=2*X.cY.f:=Y.e*3Z.g:=Z.h+1146.1屬性文法二、綜合屬性1、語(yǔ)法樹(shù)中,一個(gè)結(jié)點(diǎn)的綜合屬性的值由其子結(jié)點(diǎn)的屬性值確定。2、通常使用自底向上的方法在每一個(gè)結(jié)點(diǎn)處使用語(yǔ)義規(guī)則計(jì)算綜合屬性的值。S—屬性文法:僅使用綜合屬性的屬性文法156.1屬性文法例6.3:例6.2的表中定義的屬性文法說(shuō)明了一個(gè)臺(tái)式計(jì)算器,該計(jì)算器讀入一個(gè)可含數(shù)字、括號(hào)和+、*運(yùn)算符的算術(shù)表達(dá)式,并打印表達(dá)式的值,每個(gè)輸入行以n作為結(jié)束。假設(shè)表達(dá)式為3*5+4,后跟一個(gè)換行符n。則程序打印數(shù)值19。其帶注釋的語(yǔ)法樹(shù)16三、繼承屬性1、語(yǔ)法樹(shù)中,一個(gè)結(jié)點(diǎn)的繼承屬性由此結(jié)點(diǎn)的父結(jié)點(diǎn)和/或兄弟結(jié)點(diǎn)的某些屬性確定。6.1屬性文法2、用繼承屬性來(lái)表示程序設(shè)計(jì)語(yǔ)言結(jié)構(gòu)中的上下文依賴關(guān)系很方便。176.1屬性文法例6.4:帶繼承屬性L.in的屬性文法產(chǎn)生式語(yǔ)義規(guī)則DTLTintTrealLL1,idLidaddtype(id.entry,L.in)T.type:=integerT.type:=realL1.in:=L.inL.in:=T.typeaddtype(id.entry,L.in)18輸入串:realid1,id2,id3的帶注釋的語(yǔ)法樹(shù)DT.type=realL.in=realrealL.in=realL.in=real,id2id3,id1191、構(gòu)造依賴圖的方法:輸入串 語(yǔ)法樹(shù) 依賴圖 語(yǔ)義規(guī)則的計(jì)算次序 進(jìn)行語(yǔ)義規(guī)則計(jì)算,得到翻譯結(jié)果6.2基于屬性文法的處理方法2、遍歷語(yǔ)法樹(shù)的方法單詞符號(hào)串語(yǔ)法分析語(yǔ)法分析樹(shù)遍歷計(jì)算3、可用一遍掃描實(shí)現(xiàn)屬性文法的語(yǔ)義規(guī)則計(jì)算。20一、依賴圖1、定義:一個(gè)表示一棵語(yǔ)法樹(shù)中結(jié)點(diǎn)的繼承 屬性和綜合屬性之間的相互依賴關(guān) 系的有向圖。6.2基于屬性文法的處理方法212、依賴圖的構(gòu)造方法(1)構(gòu)造依賴圖以前,先為每一個(gè)包含過(guò)程調(diào)

用的語(yǔ)義規(guī)則引入一個(gè)虛綜合屬性b,在每 一個(gè)語(yǔ)義規(guī)則均寫成b:=f(c1,c2,…,

ck)的形式;(2)在依賴圖中為每一個(gè)屬性設(shè)置一個(gè)結(jié)點(diǎn);(3)若屬性b依賴于屬性c,則從屬性c的結(jié)點(diǎn)有 一條有向邊連到屬性b的結(jié)點(diǎn)。6.2基于屬性文法的處理方法22例6.5:AXY?A.a:=f(X.x,Y.y) X.i:=g(A.a,Y.y)6.2基于屬性文法的處理方法233、例題例6.6:將下面的產(chǎn)生式應(yīng)用于語(yǔ)法樹(shù)中產(chǎn)生式 語(yǔ)義規(guī)則EE1+E2 E.val:=E1.val+E2.valEE1+

E2

valval val?E.Val是從E1.val和E2.val綜合得出6.2基于屬性文法的處理方法24產(chǎn)生式語(yǔ)義規(guī)則DTLTintTrealLL1,idLidaddtype(id.entry,L.in)T.type:=integerT.type:=realL1.in:=L.inL.in:=T.typeaddtype(id.entry,L.in)25DTLrealLL,id2id3,id1a4:=reala5:=a4Addtype(id3.entry,a5);a7:=a5;addtype(id2.entry,a7);a9:=a7;Addtype(id1.entry,a9);拓?fù)湫蛄衋1,a2,a3,a4,a5,a6,a7,a8,a9,a1026二、樹(shù)遍歷的屬性計(jì)算方法1、方法 A、前提:假設(shè)語(yǔ)法樹(shù)已經(jīng)建立起來(lái)了,且樹(shù)中已 有如下信息:開(kāi)始符號(hào)—繼承屬性終結(jié)符——綜合屬性B、遍歷:以某種次序遍歷語(yǔ)法樹(shù),直至計(jì)算出所 有屬性。遍歷方法:深度優(yōu)先,從左到右6.2基于屬性文法的處理方法276.2基于屬性文法的處理方法2、算法 While還有未被計(jì)算的屬性do VisitNode(S) /*S是開(kāi)始符號(hào)*/procedureVisitNode(N:Node);beginIfN是一個(gè)非終結(jié)符then /*假設(shè)它的產(chǎn)生式為NX1…Xm*/ fori:=1tomdo ifnotXi∈VTthen/*即Xi是非終結(jié)符*/

begin

計(jì)算Xi的所有能夠計(jì)算的繼承屬性;

VisitNode(Xi) end;

計(jì)算N的所有能夠計(jì)算的綜合屬性end注:只要文法的屬性是非循環(huán)定義的,則每次掃描至少有一個(gè)屬性值被計(jì)算出來(lái)。28其中,S有繼承屬性a,綜合屬性b;X有繼承屬性c,綜合屬性d;Y有繼承屬性e,綜合屬性f;Z有繼承屬性h,綜合屬性g。3、舉例例6.9:考慮下表所給的屬性文法G。產(chǎn)生式語(yǔ)義規(guī)則SXYZXxYyZzZ.h:=S.aX.c:=Z.gS.b:=X.d-2Y.e:=S.bX.d:=2*X.cY.f:=Y.e*3Z.g:=Z.h+16.2基于屬性文法的處理方法29S:a=0XYZxy(a)zS:a=0XYZ:h=0g=1xy(b)z30S:a=0,b=0X:c=1d=2Y:e=0f=0Z:h=0g=1xy(d)zS:a=0,b=0X:c=1d=2YZ:h=0g=1xy(c)z316.2基于屬性文法的處理方法三、一遍掃描的處理方法1、特點(diǎn)在語(yǔ)法分析的同時(shí)計(jì)算屬性值,而不是語(yǔ)法分析構(gòu)造語(yǔ)法樹(shù)之后進(jìn)行屬性的計(jì)算,而且無(wú)需構(gòu)造實(shí)際的語(yǔ)法樹(shù)。注:采用該處理方法,當(dāng)一個(gè)屬性值不再用于計(jì)算其它屬性值時(shí),編譯程序就不必再保留這個(gè)屬性值。如果需要,可把語(yǔ)義值存到文件中。326.2基于屬性文法的處理方法2、相關(guān)因素:(1)所使用的語(yǔ)法分析方法 L-屬性文法—一遍掃描的自上而下分析

S-屬性文法—一遍掃描的自下而上分析(2)屬性的計(jì)算次序 33上節(jié)課的內(nèi)容:屬性文法屬性綜合屬性繼承屬性產(chǎn)生式+屬性計(jì)算規(guī)則(語(yǔ)義規(guī)則)A→X1…XKA.a=……Xi.x=……

屬性計(jì)算方法123

S-屬性文法--------6.3L-屬性文法---------6.4346.2基于屬性文法的處理方法例2:構(gòu)造表達(dá)式產(chǎn)生抽象語(yǔ)法樹(shù)(AbstractSyntaxTree)的屬性文法1、定義:在語(yǔ)法樹(shù)中去掉那些對(duì)翻譯不必要 的信息,從而獲得更有效的源程序 中間表示,這種經(jīng)變換后的語(yǔ)法樹(shù) 稱之為抽象語(yǔ)法樹(shù)。注:抽象語(yǔ)法樹(shù)中,操作符和關(guān)鍵字都不作為葉結(jié)點(diǎn)出現(xiàn)。35抽象語(yǔ)法樹(shù)內(nèi)部結(jié)點(diǎn)外部結(jié)點(diǎn)操作符關(guān)鍵字標(biāo)識(shí)符常數(shù)如:a+3*b的抽象語(yǔ)法樹(shù)+a*3b366.2基于屬性文法的處理方法2、如何建立表達(dá)式的抽象語(yǔ)法樹(shù)(1)方法:通過(guò)為每一個(gè)運(yùn)算分量或運(yùn)算符號(hào)都建立一個(gè)結(jié)點(diǎn)來(lái)為子表達(dá)式建立子樹(shù); 運(yùn)算符號(hào)結(jié)點(diǎn)的各個(gè)子結(jié)點(diǎn)分別表示該運(yùn)算符號(hào)的各個(gè)運(yùn)算分量的子表達(dá)式組成的子樹(shù)的根。376.2基于屬性文法的處理方法(2)抽象語(yǔ)法樹(shù)中每個(gè)結(jié)點(diǎn)可由包含幾個(gè)域的記錄 來(lái)實(shí)現(xiàn)。運(yùn)算符號(hào)結(jié)點(diǎn):一個(gè)域—運(yùn)算符號(hào) 其它域—指向運(yùn)算符號(hào)分量的結(jié)點(diǎn)的指針

結(jié)點(diǎn):附加的域—存放結(jié)點(diǎn)的屬性值/指向?qū)傩灾档闹羔槨?86.2基于屬性文法的處理方法(3)建立帶有二目算符的表達(dá)式的抽象語(yǔ)法樹(shù)結(jié)點(diǎn) 的函數(shù):

mknode(op,left,right) mkleaf(id,entry) mkleaf(num,ral)

每個(gè)函數(shù)均返回一個(gè)指向新建立結(jié)點(diǎn)的指針。396.2基于屬性文法的處理方法例6.10:下面一系列函數(shù)調(diào)用建立了表達(dá)式a-4+c的抽象語(yǔ)法樹(shù)(如圖)。在這個(gè)序列中,p1,p2,…,p5是指向結(jié)點(diǎn)的指針,entrya和entryc分別是指向符號(hào)表中的標(biāo)識(shí)符a和c的指針。

id+-idnum4toentryforatoentryforc(1)p1:=mkleaf(id,entrya);(2)p2:=mkleaf(num,4);(3)p3:=mknode(‘-’,p1,p2);(4)p4:=mkleaf(id,entryc);(5)p5:=mknode(‘+’,p3,p4)(4)如何設(shè)計(jì)產(chǎn)生表達(dá)式抽象語(yǔ)法樹(shù)的屬性文法?E→E1+TE→E1-TE→TT→(E)T→idT→num41產(chǎn)生式語(yǔ)義規(guī)則E→E1+TE→E1-TE→TT→(E)T→idT→num為表達(dá)式建立抽象語(yǔ)法樹(shù)的屬性文法T.nptr:=mkleaf(num,num.val)T.nptr:=mkleaf(id,id.entry)T.nptr:=E.nptrE.nptr:=T.nptrE.nptr:=mkNode(‘+’,E1.nptr,T.nptr)E.nptr:=mkNode(‘-’,E1.nptr,T.nptr)42EnptrTnptrEnptrETnptrnumTnptrid+—id+●

-●

id●id●num4帶注釋的語(yǔ)法分析樹(shù)ToentryforaToentryforc436.3S-屬性文法的自下而上計(jì)算1、S-屬性文法:只含綜合屬性的屬性文法。2、S-屬性文法的翻譯借助于LR分析器來(lái)實(shí)現(xiàn)輸入串 輸出 棧 分析表a1……ai……an#LR分析程序actiongotoSmXm…

…s1x1s0#LR分析器443、對(duì)分析棧改造

狀態(tài)棧符號(hào)棧屬性棧S0#---………Sm-1xx.valSmyy.val453、對(duì)分析棧改造自底向上分析法中: ?!娣乓呀?jīng)分析過(guò)的子樹(shù)的內(nèi)容 附加域—存放綜合屬性數(shù)組State:元素-一個(gè)指向LR(1)分析表的指針(索引),指向表中某個(gè)狀態(tài)

文法符號(hào)為隱含在State中而不需存在棧中 數(shù)組Val:符號(hào)的屬性值Stateval466.1屬性文法例6.2:一個(gè)簡(jiǎn)單臺(tái)式計(jì)算器的屬性文法產(chǎn)生式語(yǔ)義規(guī)則LEnEE1+TETTT1*FTFF(E)FdigitPrint(E.val)E.val:=E1.val+T.valE.val:=T.valT.val:=T1.val*F.valT.val:=F.valF.val:=E.valF.val:=digit.lexval47狀態(tài)棧符號(hào)棧屬性棧S0#---………Sm-2EE.valSm-1+---考慮:EE1+T

E.val:=E1.val+T.valSmTT.valS’EE.val轉(zhuǎn)換為:EE1+T

val[ntop]:=val[top-2]+val[top]48產(chǎn)生式語(yǔ)義規(guī)則LEnEE1+TETTT1*FTFF(E)FdigitPrint(E.val)E.val:=E1.val+T.valE.val:=T.valT.val:=T1.val*F.valT.val:=F.valF.val:=E.valF.val:=digit.lexval把下面文法的語(yǔ)義規(guī)則轉(zhuǎn)換為對(duì)屬性棧的操作:Print(val[top])Val[ntop]=val[top-2]+val[top]Val[ntop]=val[top-1]Val[ntop]=val[top-2]*val[top]496.11舉例L→EnE→E1+TE→TT→T1*FT→FF→(E)F→digit輸入串3*5+4n輸入stateval產(chǎn)生式3*5+4n??*5+4n33*5+4nF3F→digit*5+4nT3T→F5+4nT*3?+4nT*53?5+4nT*F3?5F→digit+4nT15T→T*F+4nE15E→T4nE+15?nE+415?4nE+F15?4F→digitnE+T15?4T→FnE19E→E+TEn19?L19L→En產(chǎn)生式語(yǔ)義規(guī)則E→E1+TE→E1-TE→TT→(E)T→idT→num為表達(dá)式建立抽象語(yǔ)法樹(shù)的屬性文法T.nptr:=mkleaf(num,num.val)T.nptr:=mkleaf(id,id.entry)T.nptr:=E.nptrE.nptr:=mkNode(‘+’,E1.nptr,T.nptr)E.nptr:=mkNode(‘-’,E1.nptr,T.nptr)E.nptr:=T.nptrnptr[ntop]:=mkNode(‘+’,nptr[top-2],nptr[top])nptr[ntop]:=mkNode(‘-’,nptr[top-2],nptr[top])nptr[ntop]=nptr[top-1]nptr[ntop]=mkleaf(id,id.entry)nptr[ntop]=mkleaf(num,num.val)516.4L-屬性文法和自頂向下翻譯

對(duì)語(yǔ)法分析樹(shù)進(jìn)行一次深度優(yōu)先遍歷就能計(jì)算出所有的屬性。即

在自上而下建立語(yǔ)法樹(shù)的過(guò)程中完成對(duì)屬性的計(jì)算。L-屬性文法52AX1……Xj……..XkA→X1...Xj…XkA.a=………Xj.x=………536.4L-屬性文法和自頂向下翻譯L-屬性文法:

對(duì)任意產(chǎn)生式A→X1X2…Xn,其每個(gè)語(yǔ)義規(guī)則中的屬性或者是綜合屬性,或者Xj是一個(gè)繼承屬性,且僅依賴與(1)X1X2…Xj-1;

(2)A的繼承屬性。S-屬性文法是L-屬性文法的一個(gè)特例。546.4L-屬性文法和自頂向下翻譯判定下面屬性文法是否是L-屬性文法。產(chǎn)生式語(yǔ)義規(guī)則A→LMA→QRL.i:=l(A.i)M.i:=m(L.s)R.i:=r(A.i)A.s:=f(Q.s)Q.i:=q(R.s)556.4.1翻譯模式屬性文法是語(yǔ)言翻譯的高級(jí)規(guī)范說(shuō)明。翻譯模式:

描述文法符號(hào)屬性的語(yǔ)義規(guī)則和計(jì)算次序。

E→TRR→addopT{pr(addop.lex)}

R1|ε

T→num{pr(num.val)}

56翻譯模式舉例E→TRR→addopT{pr(addop.lex)}

R1|ε

T

→num{pr(num.val)}

輸入:9-5+2ETRRR9Pr(‘9’)-TPr(‘-’)+TPr(‘+’)5Pr(‘5’)2Pr(‘2’)ε深度優(yōu)先遍歷后輸出:

95-2+建立翻譯模式的方法:1、產(chǎn)生式右邊的符號(hào)的繼承屬性必須在這個(gè)符號(hào)以前的動(dòng)作中計(jì)算出來(lái);2、一個(gè)動(dòng)作不能引用這個(gè)動(dòng)作右邊符號(hào)的綜合屬性;3、產(chǎn)生式左邊非終結(jié)符的綜合屬性只能在它所引用的所有屬性都計(jì)算出來(lái)以后才能計(jì)算。通常這類動(dòng)作可放在產(chǎn)生式右端的末尾。58例:把下面屬性文法修改為翻譯模式:產(chǎn)生式語(yǔ)義規(guī)則S→BB→B1B2B→B1subB2B→textB.ps=10S.ht=B.htB1.ps=B.psB2.ps=B.psB.ht=max(B1.ht,B2.ht)B1.ps=B.psB2.ps=shrink(B.ps)B.ht=disp(B1.ht,B2.ht)B.ht=text.h*B.ps59S→{B.ps=10} B{S.ht=B.ht}B→{B1.ps=B.ps} B1{B2.ps=B.ps}

B2{B.ht=max(B1.ht,B2.ht)}606.4.2自頂向下翻譯消除左遞歸:規(guī)則

P→P|

(1)P→P’

(2)

P’→P’|

直接左遞歸:

P

→P1|P2|…|Pm|1

|2

|…

|n

|(i≠

)消除方法:

P

1P’

|2P’

|…

|nP’

P’→1P’|2P’|…|mP’

|

在自頂向下分析過(guò)程中,在消除左遞歸的同時(shí)考慮屬性計(jì)算,這樣許多屬性文法可以使用自頂向下來(lái)實(shí)現(xiàn),適用綜合和繼承屬性的計(jì)算。61E→E1+T{E.val:=E1.val+T.val}E→E1-T{E.val:=E1.val-T.val}E→T{E.val:=T.val}T→(E){T.val:=E.val}T→num

{T.val:=num.val}E→T{R.i:=T.val}

R{E.val:=R.s}R→+T{R1.i:=R.i+T.val}

R1{R.s:=R1.s}R→-

T{R1.i:=R.i-T.val}

R1{R.s:=R1.s}R→ε

{R.s:=R.s}T→(E{T.val:=E.val})T→num

{T.val:=num.val}ETRRR9-T+T2ε5計(jì)算表達(dá)式9-5+2.val=9.val=5.val=263E→T{R.i:=T.val}R{E.val:=R.s}R→+T{R1.i:=R.i+T.val}R1{R.s:=R1.s}R→-T{R1.i:=R.i-T.val}R1{R.s:=R1.s}R→ε{R.s:=R.i}T→(E{T.val:=E.val})T→num{T.val:=num.val}ET.val=9R.i=9R.i=4R.i=6Num.val=9-T.val=5+T.val=2Num.val=2εNum.val=5計(jì)算表達(dá)式9-5+2遞歸過(guò)程:綜合屬性計(jì)算E.valR.sR.sR.s64轉(zhuǎn)換左遞歸翻譯模式的一般方法:A→A1Y{A.a=g(A1.a,Y.y}A→X{A.a=f(X.x)}A→X

溫馨提示

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