




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第五章語法制導翻譯和中間代碼產生03二月20231第五章語法制導翻譯和中間代碼產生第五章語法制導翻譯和中間代碼產生03二月20232語義分析的任務:根據語法成分的結構,分析其含義,并用一種內部形式(中間代碼)或直接用目標語言表示出來。具體:靜態語義檢查和翻譯包括:類型檢查(操作符是否相容,例如%) 控制流檢查(break是否有switch和for,while) 一致性檢查(inta;floata;) 相關名字檢查、等等第五章語法制導翻譯和中間代碼產生03二月202335.1一般原理和樹變換5.2簡單SDTS和自上而下翻譯器5.3簡單后綴SDTS和自下而上翻譯器5.4抽象語法樹的構造5.5屬性文法5.6中間代碼形式5.7屬性翻譯文法的應用第五章語法制導翻譯和中間代碼產生03二月202345.1一般原理和樹變換語法制導翻譯法SDTS是一個五元組
T=(VT,VN,△,R,S)。VT是一個有窮的輸入字母表,包含源語言中的符號;VN是一個有窮的非終結符號集合;△是一個有窮的輸出字母表,包含出現在翻譯串中的那些符號;R是形如A→w,y的規則的有窮集合,w是由終結符或非終結符組成的串,y是由VN或△中的符號組成的串;S∈VN是一個開始符號。第五章語法制導翻譯和中間代碼產生03二月20235例如:SDTST1=({a,b,c,+,-,[,]},{E,T,A},{ADD,SUB,NEG,x,y,z},R,E),其中R由下列翻譯規則組成:
E→E+T,TEADDE→E-T,ETSUBE→–T,TNEGE→T,TT→[E],ET→A,AA→a,xA→b,yA→c,zT1的基礎源文法是E→E+T|E-T|-T|TT→[E]|AA→a|b|cT1的基礎目標文法是E→TEADD|ETSUB|TNEG|TT→E|AA→x|y|z第五章語法制導翻譯和中間代碼產生03二月20236一個翻譯模式是一個形如(u,v)的串對,其中,u是SDTS基礎源文法的一個句型,而v稱為與其對應的翻譯,它是由VN和△中元素組成的串。翻譯模式的定義如下:(S,S)是一個翻譯模式,且這兩個S是相關的(S是SDTS的開始符號)。(aAb,a’Ab’)是一個翻譯模式,且兩個A是相關的;此外,若A→g,g’是R中的一條規則,那么(agb,a’g’b’)也是一個翻譯模式。規則中g和g’的非終結符之間的相關性也必須帶進這種翻譯模式之中。表示法(aAb,a’Ab’)=>(agb,a’g’b’)表示一種翻譯模式到另一種翻譯模式的變換。第五章語法制導翻譯和中間代碼產生03二月20237樹變換語法制導的翻譯過程也可用語法樹變換來說明。從中剪掉終結符號節點;根據適當的翻譯規則,重排每個中間結點的孩子;添加對應于輸出符號集中的中間符節點。第五章語法制導翻譯和中間代碼產生03二月202385.2簡單SDTS和自上而下翻譯器
如果在每一規則的翻譯成分中,非終結符出現的次序與它們在源成分中出現的次序相同,則稱一個SDTS是簡單的(simple);但是,如果A→A1+A2,A2A1ADD是SDTST的一個規則,那么,該SDTST就是不簡單的。第五章語法制導翻譯和中間代碼產生03二月20239如果T=(VN,VT,△,R,S)是其基礎源文法為LL(k)的簡單SDTS,那么,存在一個自上而下的確定的下推翻譯器PDT(Push-DownTranslater),它接受T的輸入語言中的任何符號串并產生對應的輸出串。PDTP的定義如下:P的一個構形是一個四元組(q,x,y,z),其中,q是它的有窮控制器的狀態,x是尚待掃描的輸入串,y是下推棧,z是此時被打印出的輸出符號串。于是,在某次移動中,便有(q,ax,Yy’,z)┟(r,x,gy’,zz’)即,在狀態q面臨輸入符號a且棧頂符號為Y時,P才允許移動到狀態r,這一移動的結果是:輸入符號a被去掉,棧頂符號Y被g所替換,而且串z’已作為輸出串打印出。第五章語法制導翻譯和中間代碼產生03二月202310稱w是關于x的輸出,如果對于某個狀態q和棧符號串u,存在(q0,x,Z0,ε)┟(q,ε,u,w)其中,q0是初態;Z0是棧的初始內容,ε為空串。若u=ε,則稱P停止于空棧;若q是某個終態,則稱P停止于終態。如果P滿足下述兩個條件,則稱P是確定的:對所有的狀態q,輸入串a和棧符號Z,δ(q,a,Z)至多只包含一個元素;若δ(q,ε,Z)非空,則不存在符號a(a≠ε)使得δ(q,a,Z)非空,即對于某個狀態和棧符號,在空移動和非空移動之間不應存在沖突。第五章語法制導翻譯和中間代碼產生03二月202311PDTP的操作為:①在一應用移動中,非終結符A已位于棧頂,借助于分析表,選定產生式A→w來進行歸約。假定R中的翻譯規則為A→w,z其中,w=a0B1a1B2a2…Bkak,而z=b0B1b1B2…Bkbk。其中,Bi是非終結符,ai是輸入符號串,bi是輸出符號串。位于棧頂的A由下面的復合串b0a0B1b1a1B2…Bkbkak
所替代,而b0稱為新棧頂符號。②若棧頂符號是輸出字母表的一個元素,則從棧中彈出,并將其作為輸出符號打印出。③若棧頂符號是輸入字母表VT的一個元素,則它應與當前輸入符號匹配。從棧頂彈出它,輸入指針后移。第五章語法制導翻譯和中間代碼產生03二月2023125.3簡單后綴SDTS和自下而上翻譯器如果一個SDTS是簡單的,而且它的每個翻譯規則都有下述形式:A→a0B1a1B2a2…Bkak,B1B2…Bkw也就是說,除了最右邊的w之外,(輸出)終結符不可能出現在翻譯成分之中,那么,稱這個SDTS為簡單后綴的(SimplePostFix)。定理:對其基礎源文法為LR(k)的每一簡單后綴的SDTS,存在一確定的LR(k)PDT:它接受從該基礎源文法可推導出的每一句子;它將這種句子的翻譯作為輸出。后綴翻譯
IF-THEN-ELSE控制語句函數調用第五章語法制導翻譯和中間代碼產生03二月2023135.4抽象語法樹的構造抽象語法樹AST(Abstract-Syntaxtree)是某個語言結構的一種簡潔的樹形表示形式,它只需包含該結構尚須轉換或歸約的信息。語法樹簡化成一個AST:去掉于單非產生式(即右部為單一終結符的產生式)相關的子樹,并上提相關分支上的終結符號節點。對于直接包含運算符的多個子樹,上提運算符并讓它取代其父節點。去掉括號,并上提運算符,讓它取代其節點。最后得到的語法樹便是一個AST。第五章語法制導翻譯和中間代碼產生03二月202314§5.5屬性文法
一、屬性一、屬性:一般用來描述客觀存在的事物或人的特性。例如,學生的姓名、年齡、性別等;商品的顏色、重量、單價等。編譯技術中用屬性來描述計算機處理對象的特征。例如:X.Type,X.Place,X.val等分別描述X的類型,存儲位置、值等不同的特征。 屬性分兩類: 綜合屬性:一般用于“自下而上”傳遞信息。 繼承屬性:一般用于“自上而下”傳遞信息。第五章語法制導翻譯和中間代碼產生03二月202315二、屬性文法
對于某個壓縮了的上下文無關文法,當為每個文法符號引進一組屬性,且讓該文法中的重寫規則附加以語義規則時,稱該上下文無關文法為屬性文法。
形式定義:一個屬性文法形式上定義為一個三元組AG,AG=(G,V,E)。其中G表示一個上下文無關文法;V表示屬性的有窮集;E表示屬性的斷言或謂詞的有窮集。第五章語法制導翻譯和中間代碼產生03二月202316三、綜合屬性
從語法分析樹的角度來看,如果一個結點的某一屬性,其值由子結點的屬性之值來計算,則稱該屬性為綜合屬性。
綜合屬性用于“自下而上”傳遞信息。第五章語法制導翻譯和中間代碼產生03二月202317例1:算術表達式求值的屬性文法。規則式 語義規則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
與規則式關聯的每一個語義規則的左部符號E,T,F等的屬性值的計算由右部非終結符決定,這種屬性稱為綜合屬性。第五章語法制導翻譯和中間代碼產生03二月202318LE.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第五章語法制導翻譯和中間代碼產生03二月202319四、繼承屬性 語法樹分析中,若一個結點的某個屬性之值由該結點的兄弟結點和/或父結點的屬性之值來計算,則此結點的屬性稱為繼承屬性。 繼承屬性用于“自上而下”傳遞信息。第五章語法制導翻譯和中間代碼產生03二月202320例2、說明語句中簡單變量類型信息的屬性文法。 規則式 語義規則 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繼承)登錄在符號表的相關項id.entry中。DTLintL,ididT有一個綜合屬性type,其值為integer或real。L.in由T.type確定后逐步傳遞到下邊有關結點使用。這種屬性稱為繼承屬性。第五章語法制導翻譯和中間代碼產生03二月202321五、屬性的初始值①終結符號只有綜合屬性,它們由詞法分析器提供。②非終結符號既有綜合屬性也可有繼承屬性,文法開始符號的所有繼承屬性作為屬性計算前的初始值。第五章語法制導翻譯和中間代碼產生03二月202322§5.6
語法制導翻譯法語法制導翻譯法的基本思想:對文法的每一條產生式,設計語義子程序。在語法分析的過程中,當使用一條產生式推導或歸約時,調用該語義子程序進行屬性計算,完成預定的翻譯工作。
語法制導翻譯法:在語法分析的過程中,依隨分析過程,根據每個產生式添加的語義動作進行翻譯的方法。第五章語法制導翻譯和中間代碼產生03二月202323語義子程序語義子程序也稱為翻譯子程序,語義動作。它描述了有關產生式所對應的翻譯工作。語義動作一方面指出了產生式所對應的符號串的意義;另一方面又按照這種意義規定了對應的屬性計算加工動作。 語義動作: 查填各種表格 計算某變量的值 生成某種中間代碼 打印錯誤信息等等第五章語法制導翻譯和中間代碼產生03二月202324LR分析制導的具體實現方法1、為文法產生式設計語義子程序。2、為文法構造一張無沖突的LR分析表。3、修改總控程序,歸約時調用語義子程序。4、擴充LR分析棧,用來存放各文法符號對應的語義信息。例如:(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}第五章語法制導翻譯和中間代碼產生03二月202325#第五章語法制導翻譯和中間代碼產生03二月202326擴充的LR分析棧:???S0???#???-狀態棧文法符號棧語義值棧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}第五章語法制導翻譯和中間代碼產生03二月202327步驟狀態棧語義棧符號棧輸入符號動作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第五章語法制導翻譯和中間代碼產生03二月202328§5.7中間語言常用的中間語言有:一、逆波蘭式二、三元式與間接三元式三、樹形表示法四、四元式第五章語法制導翻譯和中間代碼產生03二月202329一、逆波蘭式1、逆波蘭式(后綴式):每一運算符都置于其運算對象之后。(無括號表達式)
中綴表示 后綴表示
A*B AB* A+B*C ABC*+ (A+B)*(C+D) AB+CD+*
(a==0&&b>3)||(e&&x!=y) a0==b3>&&exy!=&&|| 第五章語法制導翻譯和中間代碼產生03二月2023302、LR分析制導生成逆波蘭式文法: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}步驟狀態棧符號棧輸入符號輸出區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*+第五章語法制導翻譯和中間代碼產生03二月202331二、三元式與間接三元式一般形式:(op,AG1,AG2)例如:a:=-b*(c+d)三元式為:①(-,b,
)②(+,c,d)③(*,①,②)④(:=,③,a)第五章語法制導翻譯和中間代碼產生03二月202332間接三元式例如:語句 X:=(A+B)*C Y:=D^(A+B)間接代碼⑴⑵⑶⑴⑷⑸opAG1AG2⑴+AB⑵*⑴C⑶:=X⑵⑷^D⑴⑸:=Y⑷第五章語法制導翻譯和中間代碼產生03二月202333三、樹形表示法抽象語法樹:在語法樹中去掉那些對翻譯不必要的信息,從而獲得更有效的源程序中間表示。這種變換后的語法樹稱為抽象語法樹。+* 43 5 3*5+4的抽象語法樹
第五章語法制導翻譯和中間代碼產生03二月202334樹形表示
A*B+C*D+C*A*BD末端結點表示一個運算對象,每一個內結點表示一個一元或二元運算符。樹形表示是三元式的翻版(3)+(1)*(2)*CABD第五章語法制導翻譯和中間代碼產生03二月202335四、四元式
一般形式:(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第五章語法制導翻譯和中間代碼產生03二月202336
采用自下而上的語法制導翻譯法語義動作的設計(1)搞清楚源結構和目標結構(2)自下而上的語法制導翻譯特點:棧頂形成句柄,歸約時執行相應語義動作(3)給出從源結構到目標結構的變換方法§5.8自底向上語法制導翻譯第五章語法制導翻譯和中間代碼產生03二月202337例.設文法及其相應的語義動作如下:S→a{print“2”}S→bTc{print“1”}T→R{print“3”}R→R/S{print“4”}R→S{print“5”}采用自下而上語法制導翻譯,給出輸入串bR/bTc/bSc/ac的翻譯結果第五章語法制導翻譯和中間代碼產生03二月202338分析:首先對輸入串bR/bTc/bSc/ac畫出語法樹:ScTbRS/R/RS/RcTbaScTbRS再考慮歸約時執行相應語義動作第五章語法制導翻譯和中間代碼產生03二月202339ScTbRS/R/RS/RcTbaScTbRSS→bTc{print“1”}S→a{print“2”}T→R{print“3”}R→R/S{print“4”}R→S{print“5”}14翻譯結果為:53142431第五章語法制導翻譯和中間代碼產生03二月202340一、簡單算術表達式和賦值語句的翻譯定義幾個過程和函數:lookup():檢查是否出現在符號表中,如果在,則返回其指針;否則,返回NULL表示沒有找到。emit(result:=AG1opAG2):產生一個四元式,并填入四元式表中。newtemp():該函數返回一個新的臨時變量。第五章語法制導翻譯和中間代碼產生03二月202341文法: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();}第五章語法制導翻譯和中間代碼產生03二月202342 算術表達式a+b*c翻譯到三地址語句的過程:
030$$a01$E014$E+0143$E+b-a-a--a--狀態棧符號棧語義棧輸入串a+b*c$+b*c$+b*c$b*c$*c$---第五章語法制導翻譯和中間代碼產生03二月202343*c$c$$$$$t1=b*ct2=a+t1
狀態棧符號棧語義棧輸入串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第五章語法制導翻譯和中間代碼產生03二月202344二、布爾表達式的翻譯 1、E→E∨E 2、E→E∧E 3、E→E 4、E→(E) 5、E→idropid 6、E→id第五章語法制導翻譯和中間代碼產生03二月2023451、類似算術表達式的翻譯方法 (求每個因子,再求表達式的值)例如: 布爾表達式: a∨b∧c
三地址序列: T1:=c T2:=b∧T1 T3:=a∨T2第五章語法制導翻譯和中間代碼產生03二月2023461.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;}第五章語法制導翻譯和中間代碼產生03二月202347EE∨Ea<bE∧Ec<de<f第五章語法制導翻譯和中間代碼產生03二月2023482、根據布爾表達式的特殊性采取某種優化措施A∨B ifAthentrunelseBA∧B ifAthenBelsefalseA ifAthenfalseelsetrue①對非終結符E賦予兩個出口真出口:布爾表達式為真時,需轉移的四元式地址。假出口:布爾表達式為假時,需轉移的四元式地址。第五章語法制導翻譯和中間代碼產生03二月202349②設置兩個語義變量:E.ture:用來記錄表達式E對應的四元式需回填真出口的四元式的地址所構成的鏈。E.false:用來記錄表達式E對應的四元式需回填假出口的四元式的地址所構成的鏈。③定義三個函數:第五章語法制導翻譯和中間代碼產生03二月202350鏈接函數merge(P1,P2):把以P1和P2為鏈首的兩條鏈合并為一,返回合并后的鏈首(當P2=0時,返回P1;當P2≠0時,返回P2)。
intmerge(intP1,intP2){ intP; if(!P2)returnP1; else{ P=P2; while(P.result<>0) P=P.result; P.result=P1; returnP2;}第五章語法制導翻譯和中間代碼產生03二月202351回填函數backpatch(p,t):把p所鏈接的每個四元式的第四分量都回填為t。 voidBP(intp,intt){ intq=p; while(q){ intq1=q.result; q.result=t; q=q1; } return; }建鏈函數makelist(i):創建一個僅含i的新鏈表。第五章語法制導翻譯和中間代碼產生03二月202352④定義三種四元式:(jnz,a,-,p) ifagotop(當a為真時轉向第p四元式)(jrop,x,y,p) ifxropygotop(j,-,-,p) gotop(無條件轉向第p四元式)⑤四元式表的指針nextquad(nextq):每執行一次emit后,nextq自動加1。⑥E.code:為及時回填轉移地址,使用語義變量E.code記錄表達式E的第一個四元式語句序號。第五章語法制導翻譯和中間代碼產生03二月2023531.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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 白酒銷售2025年度工作方案
- 2025年疫情應急管理工作方案
- PHP程序設計項目化教程(微課版) 課件全套 臧金梅 項目1-7 啟程探索PHP世界-學生信息管理系統
- 2025年學校學雷鋒活動策劃方案
- 《電子技術項目化教程》課件 項目三 溫度控制器的制作與調試
- 《PHP開發技術》考試題(4)及答案
- PHP程序設計項目化教程電子教案15 問卷統計器-文件和目錄操作
- 2025年電動吊飛圣誕老人項目可行性研究報告
- 2025年照相機閃光線路板組件項目可行性研究報告
- 云南省江川第二中學2025年高三下學期第三次月考英語試題文試題含解析
- AQ/T 2053-2016 金屬非金屬地下礦山監測監控系統通 用技術要求(正式版)
- 火龍罐綜合灸技術課件
- SJG 36-2017 深圳市巖土工程勘察報告數字化規范-高清現行
- 《新媒體運營》課件(完整版)
- 專利檢索ppt課件(PPT 54頁)
- 建筑立面十八式,你用過幾個?
- 三只小豬的真實故事
- (高清正版)T-CAGHP 031—2018 地質災害危險性評估及咨詢評估預算標準(試行)
- 第九章 放射線對人體影響
- 屋面防水翻新改造工程施工方案(全面完整版)
- 教案(餐巾折花)
評論
0/150
提交評論