编泽原理 具使文洁和语法制导制译 属性通常分为两类: 综合属性和继承属性。 综合属性用于“自下而上”传递信息,而继承属性用于“自上 而下”传递信息。 在一个属性文法中,对应于每个产生式A→α都有一套与之相 关联的语义规则,每条规则的形式为 b:=f(c1,c2,,ck)这里,是一个函数,而且或者 (1)b是A的一个综合属性并且c1,c2,,ck是产生式右边 文法符号的属性;或者 (2)b是产生式右边某个文法符号的一个继承属性并且c1, c2,,ck是A或产生式右边任何文法符号的属性。 在两种情况下,我门都说属性b依赖于属性c1,c2,.,ck 第6列
编译原理 第6页 属性文法和语法制导翻译 属性通常分为两类: 综合属性和继承属性。 综合属性用于“自下而上”传递信息,而继承属性用于“自上 而下”传递信息。 在一个属性文法中,对应于每个产生式A→α都有一套与之相 关联的语义规则,每条规则的形式为 b:=f(c1,c2,…,ck)这里,f是一个函数,而且或者 (1)b是A的一个综合属性并且c1,c2,…,ck 是产生式右边 文法符号的属性;或者 (2) b是产生式右边某个文法符号的一个继承属性并且c1, c2,…,ck 是A或产生式右边任何文法符号的属性。 在两种情况下,我们都说属性b依赖于属性 c1,c2,…,ck
编泽原理 马位文洁和语洁制导制译 (1)终结符只有综合属性,它们由词法分析器提供; (2) 非终结符既可有综合属性也可有继承属性,文法开始符 号的所有继承属性作为属性计算前的初始值。 售对出现在产生式右边的继承属性和出现在产生式左边的综 合属性都必须提供一个计算规则。 属性计算规则中只能使用相应产生式中的文法符号的属性, 这有助于在产生式范围内“封装”属性的依赖性。然而, 出现在产生式左边的继承属性和出现在产生式右边的综合 属性不由所给的产生式的属性计算规则进行计算,它们由 其它产生式的属性规则计算或者由属性计算器的参数提供。 第7页
编译原理 第7页 属性文法和语法制导翻译 (1)终结符只有综合属性,它们由词法分析器提供; (2)非终结符既可有综合属性也可有继承属性,文法开始符 号的所有继承属性作为属性计算前的初始值。 对出现在产生式右边的继承属性和出现在产生式左边的综 合属性都必须提供一个计算规则。 属性计算规则中只能使用相应产生式中的文法符号的属性, 这有助于在产生式范围内“封装”属性的依赖性。然而, 出现在产生式左边的继承属性和出现在产生式右边的综合 属性不由所给的产生式的属性计算规则进行计算,它们由 其它产生式的属性规则计算或者由属性计算器的参数提供
编泽原理 属文法和语法制导翻译 语义规则所描述的工作可以包括属性计算、静态语义检查、 符号表操作、代码生成等等。 第8列
编译原理 第8页 属性文法和语法制导翻译 语义规则所描述的工作可以包括属性计算、静态语义检查、 符号表操作、代码生成等等
编译原理 马位文洁和语洁制导制译 重例如,考虑非终结符A,B和C,其中,A有一个继承 属性a和一个综合属性b,B有综合属性c,C有继承 属性d。产生式A→BC可能有规则 C.d:=B.c+1 A.b:=A.a+B.c 而属性A.a和B.c在其它地方计算。 第9页
编译原理 第9页 属性文法和语法制导翻译 例如,考虑非终结符A,B和C,其中,A有一个继承 属性a和一个综合属性b,B有综合属性c,C有继承 属性d。产生式A→BC可能有规则 C .d:=B.c+1 A .b:=A.a+B.c 而属性A .a和B.c在其它地方计算
编泽原理 风歧文洁和语法制导翻译 表6.1一个简单台式计算器的属性文法 产生式 语义规则 L→Ea point (E.val) E→E1+T E.val:=E1.val+T.val E→T E.val:=T.val T→+T护 T.al:=T1.val*柙.al F+(E) T.val:=F.val F→digit F.val:=digit.lexval 第10觉
编译原理 第10页 属性文法和语法制导翻译