属性文法举例 num,num, digit num, val if digit. val-error or num. val-error then error else numa. val*num,. basetdigit val num2 base=numj base digit base=num, base
属性文法举例 num1→num2 digit num1.val= if digit.val=error or num2.val=error then error else num2.val*num1.base+digit.val num2.base=num1.base digit.base=num1.base
属性文法举例 num→ digit num. val=digit. val digit base=num base digit→0 digit. val=o digit→ digit. val=1 digit→7 digit. val=7 g1t→8 digit. val=if digit base=8 then error else 8 digit→9 digit. val=if digit base=8 then error else 9
属性文法举例 num→digit num.val=digit.val digit.base=num.base digit→0 digit.val=0 digit→1 digit.val=1 . . . . . . digit→7 digit.val=7 digit→8 digit.val=if digit.base=8 then error else 8 digit→9 digit.val=if digit.base=8 then error else 9
属性和属性文法 345o属性计算的语法树 base 229) basestar (wa=28*8+5=229) (base (base 8) n digit wa!=3·8+4=28) (val= 5) (base 8) 8) wa!=3) va=斗 =8 di, (val 3 base 8)
属性和属性文法 345o属性计算的语法树
●属性 合成属性:“下而上”传递信息 ●继承属性:“自上而下”传递信息 属性a是合成的,如果以其对应结构为左 部的文法规则A→X1X2X,左边仅有 个a的相关属性等式有以下形式: 317a Aa=f(X 1 在语法树中,一个结点的合成属性的值由其子结点 的属性值确定。 ●使用自底向上的方法在每一个结点处使用语义规则 计算合成属性的值 ●不是合成属性的属性都是继承属性
属性 ⚫ 合成属性:“自下而上”传递信息 ⚫ 继承属性:“自上而下”传递信息 一个属性a 是合成的,如果以其对应结构为左 部的文法规则A →X1 X2 . . . Xn ,左边仅有一 个a 的相关属性等式有以下形式: ⚫ A.a = f (X1 .a1,. . . ,X1 .ak,. . . ,Xn .a1,. . . , Xn .ak ) ⚫ 在语法树中,一个结点的合成属性的值由其子结点 的属性值确定。 ⚫ 使用自底向上的方法在每一个结点处使用语义规则 计算合成属性的值 不是合成属性的属性都是继承属性
个属性文法中所有的属性都是合成的,就称作S属 性文法(S- attributed grammar) S属性文法的属性值可以通过对树进行简单的自底向 上或后序遍历来计算。 procedure PostEval(T: treenode begin for each child C oft do PostEvalC compute all synthesized attributes of T en d
一个属性文法中所有的属性都是合成的,就称作S属 性文法(S-attributed grammar)。 S属性文法的属性值可以通过对树进行简单的自底向 上或后序遍历来计算。 procedure PostEval(T: treenode); begin for each child C of T do PostEval(C); compute all synthesized attributes of T; end;