属性文法

来源:互联网 发布:linux下怎么查找文件 编辑:程序博客网 时间:2024/05/01 08:09
 
利用L属性文法自上向下分析,输出四元式的翻译模式:
 
S->id=E {gen('=',E.place,__,entry(id))}
 
E->T {R.i = T.place}
   R {E.place = R.s}
R->+
   T  {R1.i= newtemp; gen('+',R.i,T.place,R1.i)}
   R1 {R.s =R1.s}
R->@(空串)
   {R.s =R.i}
T->F {P.i = F.place}
   P {T.place =P.s}
P->*
   F {P1.i =newtemp;gen('*',P.i,F.place,P1.i)}
   P1 {P.s =P1.s }
P->@ {P.s =P.i}
F->(E) {F.place =E.place}
F->id {F.place = entry(id)}
非终结符R和P的继承属性i用于自上而下传递信息。
根据该翻译模式很容易写出相应的递归下降分析程序,从而实现输出四元式的目的。
for example:
input :a = a+b*(c+d)/f-g/(a+b)/d-g*d*f/g-h;
output:
0:    +    c    d    T1
1:    *    b    T1    T2
2:    /    T2   f    T3
3:    +    a    T3    T4
4:    +    a    b    T5
5:    /    g    T5    T6
6:    /    T6   d    T7
7:    -    T4   T7    T8
8:    *    g    d    T9
9:    *    T9   f    T10
10:    /    T10  g    T11
11:    -    T8   T11   T12
12:    -    T12  h    T13
13:    =    T13  __    a
原创粉丝点击