正在加载图片...
(1)对终结符ⅹ,保存其综合属性ⅹ的值至专为ⅹⅹ而声明的变量;然后 调用匹配终结符( match token)和取下一输入符号( next token)的函数。 (2)对非终结符B,利用相应的函数调用产生赋值语句c=B(b,b,…,bk) 其中变量bl,b2,…,bk对应B的个继承属性,变量c对应B的综合属性。 (3)对语义规则集,直接copy其中每一语义规则(动作)来产生代码,只 是将对属性的访问替换为属性对应的变量。 10.继承属性的自下而上计算。本课程主要涉及到三种技术:(1)从翻译模式中 去掉嵌入在产生式中间的动作;(2)分析栈中的继承属性处理;(3)用综合属性 代替继承属性。对于(1)(3),通过教材176页824中的例子理解即可。对于 (2),课堂上没来及讲,要点是复写规则( copy rules)的处理及其应用,这里 对其进行一些简述 自下而上翻译程序根据产生式A→XY的归约过程中,假设ⅹ的综合属性 X.s已经出现在语义栈上。因为在Y以下子树的任何归约之前,X.s的值一直存 在,因此它可以被Y继承。如果用复写规则Yi=Xs来定义Y的继承属性Yi, 则在需要Yi时,可以使用ⅹs。这一点可以通过阅读课堂讲稿中的例子加以理 解。 下面补充两个这种复写规则处理的应用例子,以加深理解。 考虑如下翻译模式 S→>aA{Ci=As}C S→>bAB{Ci=A.s}C C→c{C.s=g(C.n) 若直接应用上述复写规则的处理方法,则在使用C→c迸行归约时,Ci的(1)对终结符 X,保存其综合属性 x 的值至专为 X.x 而声明的变量;然后 调用匹配终结符(match_token)和取下一输入符号(next_token)的函数。 (2) 对非终结符 B,利用相应的函数调用产生赋值语句 c:=B(b1, b2, …, bk), 其中变量 b1, b2, …, bk 对应 B 的个继承属性,变量 c 对应 B 的综合属性。 (3)对语义规则集,直接 copy 其中每一语义规则(动作)来产生代码,只 是将对属性的访问替换为属性对应的变量。 10.继承属性的自下而上计算。本课程主要涉及到三种技术:(1)从翻译模式中 去掉嵌入在产生式中间的动作;(2)分析栈中的继承属性处理;(3)用综合属性 代替继承属性。对于(1)、(3),通过教材 176 页 8.2.4 中的例子理解即可。对于 (2),课堂上没来及讲,要点是复写规则(copy rules)的处理及其应用,这里 对其进行一些简述: 自下而上翻译程序根据产生式 A→XY 的归约过程中,假设 X 的综合属性 X.s 已经出现在语义栈上。因为在 Y 以下子树的任何归约之前,X.s 的值一直存 在,因此它可以被 Y 继承。如果用复写规则 Y.i:=X.s 来定义 Y 的继承属性 Y.i, 则在需要 Y.i 时,可以使用 X.s。这一点可以通过阅读课堂讲稿中的例子加以理 解。 下面补充两个这种复写规则处理的应用例子,以加深理解。 考虑如下翻译模式: S → a A {C.i := A.s} C S → b A B {C.i := A.s} C C → c {C.s := g(C.i)} 若直接应用上述复写规则的处理方法,则在使用 C → c 进行归约时,C.i 的
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有