4.1语法制导的定义 4.1.5属性计算次序 2、属性计算次序:构造输入的分析树,构造属性依 赖图,对结点进行拓扑排序 type int id;3 entry id 2 entry id 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
4.1语法制导的定义 4.1.5属性计算次序 2、属性计算次序:构造输入的分析树,构造属性依 赖图,对结点进行拓扑排序,按拓扑排序的次序计 算属性 T type int id3 3 entry id,2 entry 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
4.1语法制导的定义 语义规则的计算方法 分析树方法:列才介绍的方法,动态确定计 算次序,效率低 概念上的一般方法 基于规则的方法: (编译器实现者)静态确 定(编译器设计者提供的)语义规则的计算 次序 适用于手工构造的方法 忽略规则的方法: (编译器实现者)事先确 定属性的计算策略(如边分析边计算),(编 译器设计者提供的)语义规则必须符合所选 分析方法的限制 适用于自动生成的方法
4.1 语法制导的定义 语义规则的计算方法 • 分析树方法:刚才介绍的方法,动态确定计 算次序,效率低 概念上的一般方法 • 基于规则的方法:(编译器实现者)静态确 定(编译器设计者提供的)语义规则的计算 次序 适用于手工构造的方法 • 忽略规则的方法:(编译器实现者)事先确 定属性的计算策略(如边分析边计算),(编 译器设计者提供的)语义规则必须符合所选 分析方法的限制 适用于自动生成的方法
4.2S属性定义的自下而上计算 4.2.1语法树 语法树是分析树的浓缩表示:算符和关键字是作为 内部结点 语法制导翻译可以基于分析树,也可以基于语法树 语法树的例子: if B then S else S2 8+5*2 if-then-else
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属性定义的自下而上计算 4.2.2构造语法树的语法制导定义 产生式 语义规则 E→E,+T E.nptr mkNode(+,E.nptr,T.nptr) E→T E.nptr T.nptr T→T,*F T.nptr mkNode(*'T.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)
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)