




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
語義分析和中間代碼產(chǎn)生第一頁,共四十九頁,編輯于2023年,星期三第五章語法制導(dǎo)翻譯和中間代碼產(chǎn)生14六月20232語義分析的任務(wù):根據(jù)語法成分的結(jié)構(gòu),分析其含義,并用一種內(nèi)部形式(中間代碼)或直接用目標語言表示出來。具體:靜態(tài)語義檢查和翻譯包括:類型檢查(操作符是否相容,例如%) 控制流檢查(break是否有switch和for,while) 一致性檢查(inta;floata;) 相關(guān)名字檢查、等等第二頁,共四十九頁,編輯于2023年,星期三第五章語法制導(dǎo)翻譯和中間代碼產(chǎn)生14六月20233§5.1屬性文法
一、屬性一、屬性:一般用來描述客觀存在的事物或人的特性。例如,學(xué)生的姓名、年齡、性別等;商品的顏色、重量、單價等。編譯技術(shù)中用屬性來描述計算機處理對象的特征。例如:X.Type,X.Place,X.val等分別描述X的類型,存儲位置、值等不同的特征。 屬性分兩類: 綜合屬性:一般用于“自下而上”傳遞信息。 繼承屬性:一般用于“自上而下”傳遞信息。第三頁,共四十九頁,編輯于2023年,星期三第五章語法制導(dǎo)翻譯和中間代碼產(chǎn)生14六月20234二、屬性文法
對于某個壓縮了的上下文無關(guān)文法,當(dāng)為每個文法符號引進一組屬性,且讓該文法中的重寫規(guī)則附加以語義規(guī)則時,稱該上下文無關(guān)文法為屬性文法。
形式定義:一個屬性文法形式上定義為一個三元組AG,AG=(G,V,E)。其中G表示一個上下文無關(guān)文法;V表示屬性的有窮集;E表示屬性的斷言或謂詞的有窮集。第四頁,共四十九頁,編輯于2023年,星期三第五章語法制導(dǎo)翻譯和中間代碼產(chǎn)生14六月20235三、綜合屬性
從語法分析樹的角度來看,如果一個結(jié)點的某一屬性,其值由子結(jié)點的屬性之值來計算,則稱該屬性為綜合屬性。
綜合屬性用于“自下而上”傳遞信息。第五頁,共四十九頁,編輯于2023年,星期三第五章語法制導(dǎo)翻譯和中間代碼產(chǎn)生14六月20236例1:算術(shù)表達式求值的屬性文法。規(guī)則式 語義規(guī)則1.L→E print(E.val)2.E→E1+T E.val:=E1.val+T.val3.E→T E.val:=T.val4.T→T1*F T.val:=T1.val*F.val5.T→F T.val:=F.val6.F→(E) F.val:=E.val7.F→digit F.val:=digit.lexval
與規(guī)則式關(guān)聯(lián)的每一個語義規(guī)則的左部符號E,T,F等的屬性值的計算由右部非終結(jié)符決定,這種屬性稱為綜合屬性。第六頁,共四十九頁,編輯于2023年,星期三第五章語法制導(dǎo)翻譯和中間代碼產(chǎn)生14六月20237LE.val=19F.val=5+T.val=4T.val=15F.val=4digit.lexval=4E.val=15T.val=3digit.lexval=5F.val=3digit.lexval=3*n求:3*5+4第七頁,共四十九頁,編輯于2023年,星期三第五章語法制導(dǎo)翻譯和中間代碼產(chǎn)生14六月20238四、繼承屬性 語法樹分析中,若一個結(jié)點的某個屬性之值由該結(jié)點的兄弟結(jié)點和/或父結(jié)點的屬性之值來計算,則此結(jié)點的屬性稱為繼承屬性。 繼承屬性用于“自上而下”傳遞信息。第八頁,共四十九頁,編輯于2023年,星期三第五章語法制導(dǎo)翻譯和中間代碼產(chǎn)生14六月20239例2、說明語句中簡單變量類型信息的屬性文法。 規(guī)則式 語義規(guī)則
1.D→TL L.in:=T.type 2.T→int T.type:=integer 3.T→real T.type:=real 4.L→L1,id L1.in:=L.in addtype(id.entry,L.in) 5.L→id addtype(id.entry,L.in)過程addtype把每一個標識符id的類型信息(由L.in繼承)登錄在符號表的相關(guān)項id.entry中。DTLintL,ididT有一個綜合屬性type,其值為integer或real。L.in由T.type確定后逐步傳遞到下邊有關(guān)結(jié)點使用。這種屬性稱為繼承屬性。第九頁,共四十九頁,編輯于2023年,星期三第五章語法制導(dǎo)翻譯和中間代碼產(chǎn)生14六月202310五、屬性的初始值①終結(jié)符號只有綜合屬性,它們由詞法分析器提供。②非終結(jié)符號既有綜合屬性也可有繼承屬性,文法開始符號的所有繼承屬性作為屬性計算前的初始值。第十頁,共四十九頁,編輯于2023年,星期三第五章語法制導(dǎo)翻譯和中間代碼產(chǎn)生14六月202311§5.2
語法制導(dǎo)翻譯法語法制導(dǎo)翻譯法的基本思想:對文法的每一條產(chǎn)生式,設(shè)計語義子程序。在語法分析的過程中,當(dāng)使用一條產(chǎn)生式推導(dǎo)或歸約時,調(diào)用該語義子程序進行屬性計算,完成預(yù)定的翻譯工作。
語法制導(dǎo)翻譯法:在語法分析的過程中,依隨分析過程,根據(jù)每個產(chǎn)生式添加的語義動作進行翻譯的方法。第十一頁,共四十九頁,編輯于2023年,星期三第五章語法制導(dǎo)翻譯和中間代碼產(chǎn)生14六月202312語義子程序語義子程序也稱為翻譯子程序,語義動作。它描述了有關(guān)產(chǎn)生式所對應(yīng)的翻譯工作。語義動作一方面指出了產(chǎn)生式所對應(yīng)的符號串的意義;另一方面又按照這種意義規(guī)定了對應(yīng)的屬性計算加工動作。 語義動作: 查填各種表格 計算某變量的值 生成某種中間代碼 打印錯誤信息等等第十二頁,共四十九頁,編輯于2023年,星期三第五章語法制導(dǎo)翻譯和中間代碼產(chǎn)生14六月202313LR分析制導(dǎo)的具體實現(xiàn)方法1、為文法產(chǎn)生式設(shè)計語義子程序。2、為文法構(gòu)造一張無沖突的LR分析表。3、修改總控程序,歸約時調(diào)用語義子程序。4、擴充LR分析棧,用來存放各文法符號對應(yīng)的語義信息。例如:(1).E→E1+E2 {E.val=E1.val+E2.val}(2).E→E1*E2 {E.val=E1.val*E2.val}(3).E→(E1) {E.val=E1.val}(4).E→digit {E.val=lex.digit}第十三頁,共四十九頁,編輯于2023年,星期三第五章語法制導(dǎo)翻譯和中間代碼產(chǎn)生14六月202314#第十四頁,共四十九頁,編輯于2023年,星期三第五章語法制導(dǎo)翻譯和中間代碼產(chǎn)生14六月202315擴充的LR分析棧:???S0???#???-狀態(tài)棧文法符號棧語義值棧E.val=7E.val=1+E.val=61E.val=2*E.val=323(1).E→E1+E2
{E.val=E1.val+E2.val}(2).E→E1*E2
{E.val=E1.val*E2.val}(3).E→(E1) {E.val=E1.val}(4).E→digit {E.val=lex.digit}第十五頁,共四十九頁,編輯于2023年,星期三第五章語法制導(dǎo)翻譯和中間代碼產(chǎn)生14六月202316步驟狀態(tài)棧語義棧符號棧輸入符號動作10-#1+2*3#S3203-#1+2*3#r4301-1#E+2*3#S44014-1-#E+2*3#S350143-1-#E+2*3#R460147-1-2#E+E*3#S5701475-1-2#E+E*3#S38014753-1-2-#E+E*3#R49014758-1-2-3#E+E*E#R2100147-1-6#E+E#R11101-7#E#acc第十六頁,共四十九頁,編輯于2023年,星期三第五章語法制導(dǎo)翻譯和中間代碼產(chǎn)生14六月202317§5.3中間語言常用的中間語言有:一、逆波蘭式二、三元式與間接三元式三、樹形表示法四、四元式第十七頁,共四十九頁,編輯于2023年,星期三第五章語法制導(dǎo)翻譯和中間代碼產(chǎn)生14六月202318一、逆波蘭式1、逆波蘭式(后綴式):每一運算符都置于其運算對象之后。(無括號表達式)
中綴表示 后綴表示
A*B AB* A+B*C ABC*+ (A+B)*(C+D) AB+CD+*
(a==0&&b>3)||(e&&x!=y) a0==b3>&&exy!=&&|| 第十八頁,共四十九頁,編輯于2023年,星期三第五章語法制導(dǎo)翻譯和中間代碼產(chǎn)生14六月2023192、LR分析制導(dǎo)生成逆波蘭式文法:0 E′→E {空}1 E→E(1)+E(2) {print+}2 E→E(1)*E(2) {print*}3 E→(E(1)) {空}4 E→i {printi}步驟狀態(tài)棧符號棧輸入符號輸出區(qū)10#a+b*c#203#a+b*c#301#E+b*c#a4014#E+b*c#a50143#E+b*c#a60147#E+E*c#ab701475#E+E*c#ab8014753#E+E*c#ab9014758#E+E*E#abc100147#E+E#abc*1101#E#abc*+第十九頁,共四十九頁,編輯于2023年,星期三第五章語法制導(dǎo)翻譯和中間代碼產(chǎn)生14六月202320二、三元式與間接三元式一般形式:(op,AG1,AG2)例如:a:=-b*(c+d)三元式為:①(-,b,
)②(+,c,d)③(*,①,②)④(:=,③,a)第二十頁,共四十九頁,編輯于2023年,星期三第五章語法制導(dǎo)翻譯和中間代碼產(chǎn)生14六月202321間接三元式例如:語句 X:=(A+B)*C Y:=D^(A+B)間接代碼⑴⑵⑶⑴⑷⑸opAG1AG2⑴+AB⑵*⑴C⑶:=X⑵⑷^D⑴⑸:=Y⑷第二十一頁,共四十九頁,編輯于2023年,星期三第五章語法制導(dǎo)翻譯和中間代碼產(chǎn)生14六月202322三、樹形表示法抽象語法樹:在語法樹中去掉那些對翻譯不必要的信息,從而獲得更有效的源程序中間表示。這種變換后的語法樹稱為抽象語法樹。+* 43 5 3*5+4的抽象語法樹
第二十二頁,共四十九頁,編輯于2023年,星期三第五章語法制導(dǎo)翻譯和中間代碼產(chǎn)生14六月202323樹形表示
A*B+C*D+C*A*BD末端結(jié)點表示一個運算對象,每一個內(nèi)結(jié)點表示一個一元或二元運算符。樹形表示是三元式的翻版(3)+(1)*(2)*CABD第二十三頁,共四十九頁,編輯于2023年,星期三第五章語法制導(dǎo)翻譯和中間代碼產(chǎn)生14六月202324四、四元式
一般形式:(op,AG1,AG2,result)
直觀形式:result:=AG1opAG2例如:求x:=a+b*c的四元式。(*,b,c,T1) 直觀式: T1:=b*c(+,a,T1,T2) T2:=a+T1(:=,T2,,x) x:=T2第二十四頁,共四十九頁,編輯于2023年,星期三第五章語法制導(dǎo)翻譯和中間代碼產(chǎn)生14六月202325
采用自下而上的語法制導(dǎo)翻譯法語義動作的設(shè)計(1)搞清楚源結(jié)構(gòu)和目標結(jié)構(gòu)(2)自下而上的語法制導(dǎo)翻譯特點:棧頂形成句柄,歸約時執(zhí)行相應(yīng)語義動作(3)給出從源結(jié)構(gòu)到目標結(jié)構(gòu)的變換方法§5.8自底向上語法制導(dǎo)翻譯第二十五頁,共四十九頁,編輯于2023年,星期三第五章語法制導(dǎo)翻譯和中間代碼產(chǎn)生14六月202326例.設(shè)文法及其相應(yīng)的語義動作如下:S→a{print“2”}S→bTc{print“1”}T→R{print“3”}R→R/S{print“4”}R→S{print“5”}采用自下而上語法制導(dǎo)翻譯,給出輸入串bR/bTc/bSc/ac的翻譯結(jié)果第二十六頁,共四十九頁,編輯于2023年,星期三第五章語法制導(dǎo)翻譯和中間代碼產(chǎn)生14六月202327分析:首先對輸入串
bR/bTc/bSc/ac畫出語法樹:ScTbRS/R/RS/RcTbaScTbRS再考慮歸約時執(zhí)行相應(yīng)語義動作第二十七頁,共四十九頁,編輯于2023年,星期三第五章語法制導(dǎo)翻譯和中間代碼產(chǎn)生14六月202328ScTbRS/R/RS/RcTbaScTbRSS→bTc{print“1”}S→a{print“2”}T→R{print“3”}R→R/S{print“4”}R→S{print“5”}14翻譯結(jié)果為:53142431第二十八頁,共四十九頁,編輯于2023年,星期三第五章語法制導(dǎo)翻譯和中間代碼產(chǎn)生14六月202329一、簡單算術(shù)表達式和賦值語句的翻譯定義幾個過程和函數(shù):lookup():檢查是否出現(xiàn)在符號表中,如果在,則返回其指針;否則,返回NULL表示沒有找到。emit(result:=AG1opAG2):產(chǎn)生一個四元式,并填入四元式表中。newtemp():該函數(shù)返回一個新的臨時變量。第二十九頁,共四十九頁,編輯于2023年,星期三第五章語法制導(dǎo)翻譯和中間代碼產(chǎn)生14六月202330文法:P2161.S→i=E{p=Lookup();if(p==NULL)error();elseemit(p’=’E.place}2.E→E(1)+E(2){E.place=newtemp();emit(E.place’=’E(1).place’+’E(2).place)}3.E→E(1)*E(2){E.place=newtemp();emit(E.place’=’E(1).place’*’E(2).place)}4.E→(E(1)){E.place=E(1).place;}5.E→i{p=Lookup();if(p!=NULL)E.place=p;elseerror();}第三十頁,共四十九頁,編輯于2023年,星期三第五章語法制導(dǎo)翻譯和中間代碼產(chǎn)生14六月202331 算術(shù)表達式a+b*c翻譯到三地址語句的過程:030$$a01$E014$E+0143$E+b-a-a--a--狀態(tài)棧符號棧語義棧輸入串a(chǎn)+b*c$+b*c$+b*c$b*c$*c$---第三十一頁,共四十九頁,編輯于2023年,星期三第五章語法制導(dǎo)翻譯和中間代碼產(chǎn)生14六月202332*c$c$$$$$t1=b*ct2=a+t1
狀態(tài)棧符號棧語義棧輸入串014750147$E+E$E+E*014753$E+E*c014758$E+E*E0147$E+E01$E-a-b---a-b-c-a-t1-a-b--a-b-t2acc第三十二頁,共四十九頁,編輯于2023年,星期三第五章語法制導(dǎo)翻譯和中間代碼產(chǎn)生14六月202333二、布爾表達式的翻譯 1、E→E∨E 2、E→E∧E 3、E→E 4、E→(E) 5、E→idropid 6、E→id第三十三頁,共四十九頁,編輯于2023年,星期三第五章語法制導(dǎo)翻譯和中間代碼產(chǎn)生14六月2023341、類似算術(shù)表達式的翻譯方法
(求每個因子,再求表達式的值)例如: 布爾表達式: a∨b∧c
三地址序列: T1:=c T2:=b∧T1 T3:=a∨T2第三十四頁,共四十九頁,編輯于2023年,星期三第五章語法制導(dǎo)翻譯和中間代碼產(chǎn)生14六月2023351.E→E(1)∨E(2){E.place=newtemp();
emit(E.place’=’E(1).place’∨’E(2).place)}2.E→E(1)∧E(2){E.place=newtemp();
emit(E.place’=’E(1).place’∧’E(2).place)}3.E→E(1){E.place=newtemp();
emit(E.place’=’’’
E(1).place}4.E→(E(1)){E.place=E(1).place;}5.E→i(1)ropi(2){E.place=newtemp();
emit(‘if’i(1).placerop.opi(2).place‘goto’next+3);emit(E.place’=’‘0’);emit(gotonext+2);emit(E.place’=’‘1’);}6.E→i
{E.place=i.place;}第三十五頁,共四十九頁,編輯于2023年,星期三第五章語法制導(dǎo)翻譯和中間代碼產(chǎn)生14六月202336EE∨Ea<bE∧Ec<de<f第三十六頁,共四十九頁,編輯于2023年,星期三第五章語法制導(dǎo)翻譯和中間代碼產(chǎn)生14六月2023372、根據(jù)布爾表達式的特殊性采取某種優(yōu)化措施A∨B ifAthentrunelseBA∧B ifAthenBelsefalseA ifAthenfalseelsetrue①對非終結(jié)符E賦予兩個出口真出口:布爾表達式為真時,需轉(zhuǎn)移的四元式地址。假出口:布爾表達式為假時,需轉(zhuǎn)移的四元式地址。第三十七頁,共四十九頁,編輯于2023年,星期三第五章語法制導(dǎo)翻譯和中間代碼產(chǎn)生14六月202338②設(shè)置兩個語義變量:E.ture:用來記錄表達式E對應(yīng)的四元式需回填真出口的四元式的地址所構(gòu)成的鏈。E.false:用來記錄表達式E對應(yīng)的四元式需回填假出口的四元式的地址所構(gòu)成的鏈。③定義三個函數(shù):第三十八頁,共四十九頁,編輯于2023年,星期三第五章語法制導(dǎo)翻譯和中間代碼產(chǎn)生14六月202339鏈接函數(shù)merge(P1,P2):把以P1和P2為鏈首的兩條鏈合并為一,返回合并后的鏈首(當(dāng)P2=0時,返回P1;當(dāng)P2≠0時,返回P2)。
intmerge(intP1,intP2){ intP; if(!P2)returnP1; else{ P=P2; while(P.result<>0) P=P.result; P.result=P1; returnP2;}第三十九頁,共四十九頁,編輯于2023年,星期三第五章語法制導(dǎo)翻譯和中間代碼產(chǎn)生14六月202340回填函數(shù)backpatch(p,t):把p所鏈接的每個四元式的第四分量都回填為t。
voidBP(intp,intt){ intq=p; while(q){ intq1=q.result; q.result=t; q=q1; } return; }建鏈函數(shù)makelist(i):創(chuàng)建一個僅含i的新鏈表。第四十頁,共四十九頁,編輯于2023年,星期三第五章語法制導(dǎo)翻譯和中間代碼產(chǎn)生14六月202341④定義三種四元式:(jnz,a,-,p) ifagotop(當(dāng)a為真時轉(zhuǎn)向第p四元式)(jrop,x,y,p) ifxropygotop(j,-,-,p) gotop(無條件轉(zhuǎn)向第p四元式)⑤四元式表的指針nextquad(nextq):每執(zhí)行一次emit后,nextq自動加1。⑥E.code:為及時回填轉(zhuǎn)移地址,使用語義變量E.code記錄表達式E的第一個四元式語句序號。第四十一頁,共四十九頁,編輯于2023年,星期三第五章語法制導(dǎo)翻譯和中間代碼產(chǎn)生14六月2023421.E→i {E.tr=next; E.fa=next+1; E.code=next;emit(ifi.placegoto-);emit(goto_);}2.E→i(1)ropi(2){E.tr=next; E.code=next; E.fa=next+1;emit(ifi(1).placerop.opi(2).placegoto_); emit(goto_);
}3.E→(E(1)){E.code=E(1).code; E.tr=E(1).tr; E.fa=E(1).fa; }4.E→E(1)
{E.tr=E(1).fa; E.fa=E(1).tr; }5.E→E(1)∨E(2){bp(E(1).fa,E(2).code); E.code=E(1).code;E.tr=merg(E(1).tr,E(2).tr); E.fa=E(2).fa;}6.E→E(1)∧E(2){bp(E(1).tr,E(2).code); E.code=E(1).code;E.tr=E(2).tr; E.fa=merg(E(1).
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 視覺傳達專業(yè)人才培養(yǎng)方案2022(最終版)
- 曹妃甸中心醫(yī)院建設(shè)項目 可行性研究報告
- 黑龍江省伊春二中2024-2025學(xué)年高三復(fù)習(xí)統(tǒng)一檢測試題歷史試題含解析
- 黑龍江省克東一中、克山一中等五校聯(lián)考2024-2025學(xué)年高三下學(xué)期押題卷第四套(全國統(tǒng)一考試考前訓(xùn)練3月2日)語文試題含解析
- 黑龍江綏化市一中2024-2025學(xué)年高三年級第三次月考試卷含解析
- 2024年份第2季度跨境外骨骼醫(yī)療設(shè)備租賃合同臨床數(shù)據(jù)歸屬協(xié)議
- 五大行業(yè)領(lǐng)域探析
- 探索考題趨勢:監(jiān)理工程師試題及答案
- 投資咨詢工程師在資本運營中的作用試題及答案
- 把握馬工學(xué)理論對管理的啟發(fā)試題及答案
- 2024年思政考試準備試題及答案
- 2024年婁底市公安局警務(wù)輔助人員招聘考試真題
- 總經(jīng)理聘任合同模板7篇
- PLC應(yīng)用技術(shù)課件 任務(wù)6. S7-1200 PLC控制電動機正反轉(zhuǎn)
- 福建省龍巖市2024屆高考一模地理試題(含答案)(含答案)
- 天津市和平區(qū)2023-2024學(xué)年八年級下學(xué)期期末物理試題【含答案、解析】
- 《教育強國建設(shè)規(guī)劃綱要(2024-2035年)》解讀與培訓(xùn) (五)
- 浙江首考2025年1月普通高等學(xué)校招生全國統(tǒng)考化學(xué)試題及答案
- 《中醫(yī)養(yǎng)生學(xué)》課件-八段錦
- 【2025年衛(wèi)生健康宣傳日】世界防治結(jié)核病日
- DBJ33T 1104-2022 建設(shè)工程監(jiān)理工作標準
評論
0/150
提交評論