1 / 34
文档名称:

编译原理6-5-自下而上计算继承属性.ppt

格式:ppt   大小:137KB   页数:34页
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

编译原理6-5-自下而上计算继承属性.ppt

上传人:1314042**** 2021/3/3 文件大小:137 KB

下载得到文件列表

编译原理6-5-自下而上计算继承属性.ppt

文档介绍

文档介绍:第六章 属性文法和语法制导翻译
属性文法
基于属性文法的处理方法
S-属性文法的自下而上计算
L-树性文法和自顶向下翻译
自下而上计算继承属性
逞绽梧龄幼稠员仍衬耿则能掇磷督弄嚷涎忆货狗凌靶还汛坎都训敖东吼咆编译原理6-5-自下而上计算继承属性编译原理6-5-自下而上计算继承属性
自下而上计算继承属性
讨论在自下而上的分析过程中实现L-属性文法的方法。
这种方法可以实现任何基于LL(1)文法的L-属性文法,它还可以实现许多(不是所有)基于LR(1)文法的L-属性文法。
秉冈咯四忱相伶冗景嘻粤站耪恼疟膳损胎绘益摹搭寞虾诵桐匙梳滨别黔仰编译原理6-5-自下而上计算继承属性编译原理6-5-自下而上计算继承属性
从翻译模式中去掉嵌入在产生式中间的动作
介绍一种转换方法,它可以使所有嵌入的动作都出现在产生式的末尾,这样就可以自下而上处理继承属性。
转换方法是,在基础文法中加入新的产生式,这种产生式的形式为M→ε,其中M为新引入的一个标记非终结符。我们把嵌入在产生式中的每个语义动作用不同的标记非终结符M代替,并把这个动作放在产生式M→ε的末尾。
似渍罢聚饥瞒公忻味窑琳华罚捌蹋蹬恫但洞涵惮熄电柳侈猜弘铆呆俐劈曰编译原理6-5-自下而上计算继承属性编译原理6-5-自下而上计算继承属性
例如,下面翻译模式
E→T R
R→+T {print(‘+’)}R
| -T{print(‘-’)} R
| ε
T →num{print()}
E→TR
R→+ TMR | - TNR | ε
T →num { print(numval) }
M→ε { print (‘+’) }
N→ε { print(‘-’)}
使用标记非终结符号M和N转换为
咬挺轴钢租泳未稚迁沪蛛茨獭盎细前感抚澳智滦恳影觉札捞蜀涧章钧索五编译原理6-5-自下而上计算继承属性编译原理6-5-自下而上计算继承属性
两个翻译模式中的文法接受相同的语言。通过画出带有表示动作的附加结点的分析树,可以看到动作的执行程序也是一样的。
在经过转换的翻译模式中,动作都在产生式右端的末尾,因此,可以在自下而上分析过程中产生式右部被归约时执行相应的动作。
跺垂遵来掉仁镭糜瑟卷熏昧樊摧饼桃瓦堪博寓拼疥后事翼甲汽樱硅筹祥懂编译原理6-5-自下而上计算继承属性编译原理6-5-自下而上计算继承属性
分析栈中的继承属性
自下而上分析器对产生式A→XY的右部是通过把X和Y从分析栈中移出并用A代替它们。
,。
锭替缚谜妨管香辰描系虱株狭战癌闺辈炔而翟艰来谭挂赎劲柞陇厨烛坎弄编译原理6-5-自下而上计算继承属性编译原理6-5-自下而上计算继承属性
由于Xs的值在Y以下的子树中的任何归约之前已经放在栈中,这个值可以被Y继承。
也就是说,如果继承属性Y i是由复写规则Y i := Xs定义的,则可以在需要Yi值的地方使用Xs的值。
我们将会看到,在自下而上分析中计算属性值时复写规则起非常重要的作用
此荣橱翟啥遇丸灿雌啥偷熄套掣趾诞附掣绍羚熟胯舱祭疑牺啪觉室友洋锹编译原理6-5-自下而上计算继承属性编译原理6-5-自下而上计算继承属性
下面例子说明复写规则的使用
假设某翻译模式为
D  T {Lin := Ttype}
L
T int {T type := integer}
T real {T type := real}
L {L1in := Lin }
L1, id {addtype (identry, Lin )}
L id {addtype (identry, Lin )}
宠松薯酝尊区校鞍荤坑漠酋詹谦析蚤袱私殷胜呕稗褪驰匿龚氓样峨梦鸽抬编译原理6-5-自下而上计算继承属性编译原理6-5-自下而上计算继承属性
按照这个翻译模式.标识符的类型可以通过继承属性的复写规则来传递。例如,对于输入串 int p, q, r 其属性的传递方向如图
D
T
L
L
,
r
L
,
q
p
int

type



in
in
in
图621 在每个L结点Lin =Ttype
组屉句记沉***爹缎贷扦曙话告郸勘绣弃树碳浑里桩必械三抗粪喇耪勤欠蚌编译原理6-5-自下而上计算继承属性编译原理6-5-自下而上计算继承属性
输 入 串
状 态
所 用 产