资源描述:
《《语义分析IV》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、编译原理和技术大连理工软件学院胡彦huyan.ssdut@gmail.com本讲纲要模拟继承属性计算继承属性在栈上的位置确定继承属性在栈上的位置不确定4.4L属性的自下而上计算DTLL,rL,qpinttypeininin产生式代码段DTLTintval[top]:=integerTrealval[top]:=realLL1,idaddtype(val[top],val[top3])Lidaddtype(val[top],val[top1])继承属性在栈上某个确定位置的例子4.4L属性的自下而上计算DTLL,rL,qpinttype
2、ininin每个L结点上L.in=T.type状态输入所用产生式-intp,q,rintp,q,rTp,q,rTintTp,q,rTL,q,rLidTL,q,rTL,q,rTL,rLL,idTL,rTL,rTLLL.idDDTLLid{addtype(id.entry,L.in)}L{L1.in:=L.in}L1,id{addtype(id.entry,L.in)}L{L1.in:=L.in}L1,id{addtype(id.entry,L.in)}继承属性在栈上某个确定位置的例子4.4L属性的自下而上计算所依赖的属性在分析栈上的位置不能静态
3、确定SaACC.i:=A.sSbABCC.i:=A.sCcC.s:=g(C.i)考虑一下:当分析栈中出现符号C的时候,C.i可能存放在什么位置情况1:当前句柄是aAC,这时C.i可以用val[top-1]表示情况2:当前句柄是bABC,这时C.i可以用val[top-2]表示4.4L属性的自下而上计算所依赖的属性在分析栈上的位置不能静态确定SaACC.i:=A.sSbABCC.i:=A.sCcC.s:=g(C.i)处理办法:增加标记非终结符SaACC.i:=A.sSbABMCM.i:=A.s;C.i:=M.sCcC.s:=g(C.i)MM
4、.s:=M.i4.4L属性的自下而上计算所依赖的属性在分析栈上的位置不能静态确定SaACC.i:=A.sSbABCC.i:=A.sCcC.s:=g(C.i)处理办法:增加标记非终结符SaACC.i:=A.sSbABMCM.i:=A.s;C.i:=M.sCcC.s:=g(C.i)MM.s:=M.iSaACSbABMCCcval[top]=g(val[top-1])Mval[top+1]=val[top-1]4.4L属性的自下而上计算4.4.3一般情况:模拟继承属性的计算继承属性是某个综合属性的一个函数SaACC.i:=f(A.s)C
5、cC.s:=g(C.i)例如:f(x)=2*x或者x+3,…4.4L属性的自下而上计算4.4.3模拟继承属性的计算继承属性是某个综合属性的一个函数SaACC.i:=f(A.s)CcC.s:=g(C.i)增加标记非终结符,把f(A.s)的计算移到对标记非终结符归约时进行。SaANCN.i:=A.s;C.i:=N.sNN.s:=f(N.i)CcC.s:=g(C.i)这样,每次需要使用继承属性的时候,刚好都在本文法符号的正下方4.4L属性的自下而上计算例数学排版语言EQNS{B.ps:=10}B{S.ht:=B.ht}B{B1.ps:=B.ps}B1
6、{B2.ps:=B.ps}B2{B.ht:=max(B1.ht,B2.ht)}B{B1.ps:=B.ps}B1sub{B2.ps:=shrink(B.ps)}B2{B.ht:=disp(B1.ht,B2.ht)}Btext{B.ht:=text.hB.ps}语义分析复习在计算文本的字体和高度的时候,无法确定所依赖的继承属性值的位置例如:栈顶元素可能是text=>BBtext=>BBBsubtext=>BsubB语义分析复习SL{B.ps:=L.s}B{S.ht:=B.ht}L{L.s:=10}B{B1.ps:=B.ps}B1{M.i:=B.ps}
7、M{B2.ps:=M.s}B2{B.ht:=max(B1.ht,B2.ht)}M{M.s:=M.i}B{B1.ps:=B.ps}B1sub{N.i=B.ps}N{B2.ps:=shrink(N.s)}B2{B.ht:=disp(B1.ht,B2.ht)}N{N.s:=N.i}Btext{B.ht:=text.hB.ps}4.4L属性的自下而上计算产生式语义规则SLBB.ps:=L.s;S.ht:=B.htLL.s:=10BB1MB2B1.ps:=B.ps;M.i:=B.ps;B2.ps:=M.s;B.ht:=max(B1.ht,B2.ht
8、)MM.s:=M.iBB1sub