综合属性 综合属性在实际中被广泛应用。在语法树中,一个 结点的综合属性的值由其子结点的属性值确定。因为, 通常使用自底向上的方法在每一个结点处使用语义规 则计算综合属性的值。仅仅使用综合属性的属性文法 称S属性文法。 下面的简单例子说明综合属性的使用和计算过程。 说明:非终结符E,T,F都有一个综合属性val的整 数值。符号digit有一个综合属性lexval,由词法分析器提 供。产生式L→E对应的语法规则为打印由E产生的算术 表达式的值的过程
③ 综合属性 综合属性在实际中被广泛应用。在语法树中,一个 结点的综合属性的值由其子结点的属性值确定。因为, 通常使用自底向上的方法在每一个结点处使用语义规 则计算综合属性的值。仅仅使用综合属性的属性文法 称S-属性文法。 下面的简单例子说明综合属性的使用和计算过程。 说明:非终结符E,T,F都有一个综合属性val的整 数值。符号digit有一个综合属性lexval,由词法分析器提 供。产生式L→En对应的语法规则为打印由E产生的算术 表达式的值的过程
※例二※ 假设表达式是3×5十4,后跟换行符n 产生式 画出语法树,并根据语义规则加注释 语义规则 L-→En Print (E.val) L n E->E1+T E.val:=E1.val+T.val E.val=19 E→T E.val:=T.val T→T1*F T.val:=T1.val*F.val E.val=15 + T.val=4 T-→F T.val:=F.val F→(E) F.val:=E.val F→digit F.val:=digit.lexval T.val=15 F.val=4 T.val=3 F.val=5 Digit.vexval=4 表一一个简单计算器的属性文法 入 F.val=3 Digit.lexval=5 Digit.lexval=3
产生式 语义规则 L→En E→E1+T E→T T→T1*F T→F F →(E) F→digit Print ( E.val ) E.val:=E1.val+T.val E.val:=T.val T.val:=T1.val*F.val T.val:=F.val F.val:=E.val F.val:=digit.lexval 表一 一个简单计算器的属性文法 假设表达式是3×5+4,后跟换行符n 画出语法树,并根据语义规则加注释 Digit.lexval=3 F.val=3 T.val=3 Digit.lexval=5 T.val=15 * F.val=5 E.val=15 E.val=19 T.val=4 F.val=4 Digit.vexval=4 L n + ※例二※
继承属性 语法树中,一个结点的继承属性由此结点的父结点和或兄弟 结点的某些属性确定。 用继承属性来表示程序设计语言结构中的上下文依赖关系很 方便。 举例说明:此例为继承属性在说明中为各种标识符提供类型信息 非终结符T有一个综合属性ype,它的值由说明中的关键字 确定.与产生式D-→TL相应的语义规则L.in:=T.type把说明中的类 型赋值给继承属性L.in.然后,利用语义规则把继承属性L.in沿着语 法树往下传.addtype:把每个标志符的类型填入符号表的相应项中
④ 继承属性 语法树中,一个结点的继承属性由此结点的父结点和或兄弟 结点的某些属性确定。 用继承属性来表示程序设计语言结构中的上下文依赖关系很 方便。 举例说明:此例为继承属性在说明中为各种标识符提供类型信息 非终结符T有一个综合属性type,它的值由说明中的关键字 确定.与产生式D→TL相应的语义规则L.in:=T.type把说明中的类 型赋值给继承属性L.in.然后,利用语义规则把继承属性L.in沿着语 法树往下传.addtype把每个标志符的类型填入符号表的相应项中
必例三X 给出句子real id1,id2,id3,看 看它的带注释的语法树 D 产生式 语义规则 D→TL L.in:=T.type T-→int T.type:=integer T.type=real L.in=real T-→real T.type:=real L-→L1,id L1.in:=L.in real L.in=real id3 Addtype(id.entry,L.in) L→id Addtype(id.entry,L.in) L.in=real id2 id1
给出句子real id1,id2,id3,看 看它的带注释的语法树 ※例三※ 产生式 语义规则 D→TL T→int T→real L→L1,id L→id L.in:=T.type T.type:=integer T.type:=real L1.in:=L.in Addtype(id.entry,L.in) Addtype(id.entry,L.in) real T.type=real D L.in=real L.in=real L.in=real , , id1 id2 id3
8.2语法制导翻译概说 概念 在语法分析过程中,随着分析的步步进展,根 据每个产生式所对应的语义子程序(语义动作) 进行翻译(产生中间代码)的办法
在语法分析过程中,随着分析的步步进展,根 据每个产生式所对应的语义子程序(语义动作) 进行翻译(产生中间代码)的办法。 概念