分析树和属性值(2) ,输入a+b*c的语法分析树以及属性值 E.type=float EE.place=&tmp2 (1)假设a,b,c是已声 E.type float T.type=int 明的全局变量,a E.place=&a E T T.place &tmp1 的类型为float, T.type float T T 米 F.type=int b和c的类型为int T.place &a F.place =&c (2)中间未标明的T F.type=float F id 和F的type和place F.place=&a id.lexValue c 是int和&b id id id.lexValue a id.lex Value =b 6
分析树和属性值 (2) • 输入a + b * c的语法分析树以及属性值 6 (1) 假设a, b, c是已声 明的全局变量,a 的类型为float, b和c的类型为int (2) 中间未标明的T 和F的type和place 是int和&b E E + T T F id T * F F id id id.lexValue = a F.type = float F.place = &a T.type = float T.place = &a E.type = float E.place = &a T.type = int T.place = &tmp1 F.type = int F.place = &c id.lexValue = c id.lexValue = b E.type = float E.place = &tmp2 南大编译许畅
综合属性和继承属性 综合属性(Synthesized Attribute) 结点N的属性值由W的产生式所关联的语义规则来定义 通过N的子结点或N本身的属性值来定义 继承属性(Inherited Attribute) 结点N的属性值由N的父结点所关联的语义规则来定义 依赖于N的父结点、N本身和N的兄弟结点上的属性值 。几条约束 不允许N的继承属性通过N的子结点上的属性来定义, 但允许N的综合属性依赖于N本身的继承属性 终结符号有综合属性(来自词法分析),但无继承属性 7
综合属性和继承属性 • 综合属性 (Synthesized Attribute) – 结点N的属性值由N的产生式所关联的语义规则来定义 – 通过N的子结点或N本身的属性值来定义 • 继承属性 (Inherited Attribute) – 结点N的属性值由N的父结点所关联的语义规则来定义 – 依赖于N的父结点、N本身和N的兄弟结点上的属性值 • 几条约束 – 不允许N的继承属性通过N的子结点上的属性来定义, 但允许N的综合属性依赖于N本身的继承属性 – 终结符号有综合属性 (来自词法分析),但无继承属性 7 南大编译许畅
SDD的例子 计算表达式行L的值(属性val) 。 计算L的val值需要E的val值,E的val值又依赖于E1 和T的val值.. ·终结符号digit有综合属性lexval 产生式 语义规则 1) L→En L.val E.val 2) E→E1+T E.val E1.val+T.val 3) E→T E.val=T.val 4) T→T1*F T.val=T1.val×F.val 5) T→F T.val F.val 6) F→(E) F.val E.val 7) F→digit F.val digit.lexval 8
SDD的例子 • 计算表达式行L的值 (属性val) • 计算L的val值需要E的val值,E的val值又依赖于E1 和T的val值… • 终结符号digit有综合属性lexval 8 南大编译许畅
S属性的SDD ·只包含综合属性的SDD称为S属性的SDD 每个语义规则都根据产生式体中的属性值来计算头部 非终结符号的属性值 ·S属性的SDD可以和LR语法分析器一起实现 栈中的状态/文法符号可以附加相应的属性值 归约时,按照语义规则计算归约得到的符号的属性值 。语义规则不应该有复杂的副作用 要求副作用不影响其它属性的求值 没有副作用的SDD称为属性文法 9
S属性的SDD • 只包含综合属性的SDD称为S属性的SDD – 每个语义规则都根据产生式体中的属性值来计算头部 非终结符号的属性值 • S属性的SDD可以和LR语法分析器一起实现 – 栈中的状态/文法符号可以附加相应的属性值 – 归约时,按照语义规则计算归约得到的符号的属性值 • 语义规则不应该有复杂的副作用 – 要求副作用不影响其它属性的求值 – 没有副作用的SDD称为属性文法 9 南大编译许畅
语法分析树上的SDD求值(1) 实践中很少先构造语法分析树再进行SDD求值, 但在分析树上求值有助于翻译方案的可视化,便 于理解 注释语法分析树 包含了各个结点的各属性值的语法分析树 步骤 对于任意的输入串,首先构造出相应的分析树 给各个结点(根据其文法符号)加上相应的属性 按照语义规则计算这些属性的值 10
语法分析树上的SDD求值 (1) • 实践中很少先构造语法分析树再进行SDD求值, 但在分析树上求值有助于翻译方案的可视化,便 于理解 • 注释语法分析树 – 包含了各个结点的各属性值的语法分析树 • 步骤 – 对于任意的输入串,首先构造出相应的分析树 – 给各个结点 (根据其文法符号) 加上相应的属性 – 按照语义规则计算这些属性的值 10 南大编译许畅