资源描述:
《编译原理课程第14讲.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、4.3L属性定义的自上而下计算例左递归的消除引起继承属性产生式语义规则EE1+TE.nptr:=mknode(‘+’,E1.nptr,T.nptr)ETE.nptr:=T.nptrTT1*FT.nptr:=mknode(‘*’,T1.nptr,F.nptr)TFT.nptr:=F.nptrF(E)F.nptr:=E.nptrFidF.nptr:=mkleaf(id,id.entry)FnumF.nptr:=mkleaf(num,num.val)4.3L属性定义的自上而下计算ET{R.i:=T.np
2、tr}T+T+T+…R{E.nptr:=R.s}R+T{R1.i:=mknode(‘+’,R.i,T.nptr)}R1{R.s:=R1.s}R{R.s:=R.i}TF{W.i:=F.nptr}W{T.nptr:=W.s}W*F{W1.i:=mknode(‘*’,W.i,F.nptr)}W1{W.s:=W1.s}W{W.s:=W.i}消除左递归后文法RRR+T.nptr?4.3L属性定义的自上而下计算TF.nptrF.nptridiWF.nptridnumididnum5指向符号表中a的入口指
3、向符号表中b的入口iWsiW略去了ETRT部分使用继承属性构造a-4+c的抽象语法树ETRidToentryforaidT.nptr-Tnumnum4T.nptrR.i-R+TRidToentryforcidT.nptrR.i+R.iR.sR.sR.sE.nptrE→T{R.i:=T.nptr}R{E.nptr:=R.s}R→+T{R1.i:=mknode(‘+’,R.i,T.nptr)}R1{R.s:=R1.s}R→-T{R1.i:=mknode(‘-’,R.i,T.nptr)}R1{R.s:=R.s}
4、R→{R.s:=R.i}T→(E){T.nptr:=E.nptr}T→id{T.nptr:=mkleaf(id,id.entry)}T→num{T.nptr:=mkleaf(num,num.val)}4.3L属性定义的自上而下计算4.3.3预测翻译器的设计把预测分析器的构造方法推广到翻译方案的实现产生式R+TR
5、的分析过程procedureR;beginiflookahead=‘+’thenbeginmatch(‘+’);T;R;endelsebegin/*什么也不做*/endend4.3L属性定义的自上而
6、下计算functionR(i:syntax_tree_node):syntax_tree_node;varnptr,i1,s1,s:syntax_tree_node;addoplexeme:char;beginiflookahead=‘+’thenbegin/*产生式R+TR*/addoplexeme:=lexval;match(‘+’);nptr:=T();i1:=mknode(addoplexme,i,nptr);s1:=R(i1);s:=s1endelses:=i;/*产生式R*/returns
7、end;R+T{R1.i:=mknode(‘+’,R.i,T.nptr)}R1{R.s:=R1.s}产生式R+TR
8、的翻译方案过程4.3L属性定义的自上而下计算4.3.4(通过改写文法)用综合属性代替继承属性Pascal的声明,如m,n:integerDL:TTinteger
9、charLL,id
10、idD:L,idLidintegerT4.3L属性定义的自上而下计算4.3.4用综合属性代替继承属性Pascal的声明,如m,n:integerDL:TTinteger
11、charLL,id
12、id改成从右
13、向左归约DidLL,idL
14、:TTinteger
15、char4.3L属性定义的自上而下计算4.3.4用综合属性代替继承属性Pascal的声明,如m,n:integerDL:TTinteger
16、charLL,id
17、id改成从右向左归约DidLL,idL
18、:TTinteger
19、charD:L,idLidintegerT4.3L属性定义的自上而下计算DidL{addtype(id.entry,L.type)}L,idL1{L.type:=L1.Type;addtype(id.entry,L1.typ
20、e)}L:T{L.type:=T.type}Tinteger{T.type:=integer}Treal{T.type:=real}D:L,idLidintegerT10/374.4L属性的自下而上计算在自下而上语法分析的框架中实现L属性定义的方法,可以做到:实现任何基于LL(1)文法的L属性定义。实现许多(但不是所有的)基于LR(1)的L属性定义。4.4L属性的自