41语法制导的定义 41.5属性计算次序 2、属性计算次序:构造输入的分析树,构造属性依 赖图,对结点进行拓扑排序 D T 4 type in5 l 6 in7 8 id 33 entry in 9 10 id 2 2 entry id 1 entry
4.1 语法制导的定义 4.1.5 属性计算次序 2、属性计算次序:构造输入的分析树,构造属性依 赖图,对结点进行拓扑排序 D int T , id3 L L L id2 id1 , 1 entry 10 2 entry 3 entry in 9 in 7 8 4 type in 5 6
41语法制导的定义 41.5属性计算次序 2、属性计算次序:构造输入的分析树,构造属性依 赖图,对结点进行拓扑排序,按拓扑排序的次序计 算属性 D T 4 type in5 l 6 in7 8 id 33 entry in 9 10 id 2 2 entry id 1 entry
4.1 语法制导的定义 4.1.5 属性计算次序 2、属性计算次序:构造输入的分析树,构造属性依 赖图,对结点进行拓扑排序,按拓扑排序的次序计 算属性 D int T , id3 L L L id2 id1 , 1 entry 10 2 entry 3 entry in 9 in 7 8 4 type in 5 6
41语法制导的定义 语义规则的计算方法 分析树方法:刚才介绍的方法,动态确定计 算次序,效率低 概念上的一般方法 基于规则的方法:(编译器实现者)静态确 定(编译器设计者提供的)语义规则的计算 次序 适用于手工构造的方法 忽略规则的方法:(编译器实现者)事先确 定属性的计算策略(如边分析边计算),(编 译器设计者提供的)语义规则必须符合所选 分析方法的限制适用于自动生成的方法
4.1 语法制导的定义 语义规则的计算方法 • 分析树方法:刚才介绍的方法,动态确定计 算次序,效率低 概念上的一般方法 • 基于规则的方法:(编译器实现者)静态确 定(编译器设计者提供的)语义规则的计算 次序 适用于手工构造的方法 • 忽略规则的方法:(编译器实现者)事先确 定属性的计算策略(如边分析边计算),(编 译器设计者提供的)语义规则必须符合所选 分析方法的限制 适用于自动生成的方法
4,2S属性定义的自下而上计算 421语法树 ·语法树是分析树的浓缩表示:算符和关键字是作为 内部结点 语法制导翻译可以基于分析树,也可以基于语法树 语法树的例子: if B then s else s2 8+5*2 if-then-else 8 B 2
4.2 S属性定义的自下而上计算 4.2.1 语法树 • 语法树是分析树的浓缩表示:算符和关键字是作为 内部结点 • 语法制导翻译可以基于分析树,也可以基于语法树 • 语法树的例子: if B then S1 else S2 8 + 5 2 if-then-else B S1 S2 + * 5 2 8
4,2S属性定义的自下而上计算 422构造语法树的语法制导定义 产生式 语义规则 E→E1+TE.mp= mknodel(+’,E1npt,T.nptm) E→T E nptr=T nptr T>T*F Tnptr= mkNode(*,, T nptr, Fnptr) T→F Tnptr= Fnptr F→)(E)F,mp=E.pt F→)id Fnptr=mkleaf (id, identr F>num F nptr= mkLeaf(num, num. val)
4.2 S属性定义的自下而上计算 4.2.2 构造语法树的语法制导定义 产 生 式 语 义 规 则 E → E1 + T E.nptr = mkNode( ‘+’, E1 .nptr, T.nptr) E → T E.nptr = T.nptr T → T1 F T.nptr = mkNode( ‘’, T1 .nptr, F.nptr) T → F T.nptr = F.nptr F → (E) F.nptr = E.nptr F → id F.nptr = mkLeaf (id, id.entry) F → num F.nptr = mkLeaf (num, num.val)