综合和继承的属性
Synthesized vs Inherited Attributes
如何确定某个属性是合成的还是从语法的产生式继承的?
我想这个属性必须在问题中预定义——如果它的值取决于子节点或父节点。但是有没有办法分析一个属性是从语法产生式中继承还是合成的。
综合属性:从附加到其非终结符的子项的属性中获取其值的属性。
继承属性:从附加到其非终结符的父项(或兄弟项)的属性中获取其值的属性。
**PRODUCTION** **SEMANTIC RULES**
T->FT’ T’.inh=F.val
T.val=T’.syn
T’->*FT1’ T1’.inh=T’.inh*F.val
T’.syn=T1’.syn
T’->Ɛ T’.syn=T’.inh
F->id F.val=id.lexval
从给定的语法规则(productions)可以看出,inh是继承属性,syn是合成属性。
进一步阅读:Attribute Grammars。
从其子节点获取数据值的属性称为合成属性。
这些也称为 s 属性生产。
从父节点或兄弟节点获取值的属性称为继承属性。具有继承属性的产生式规则(每个继承的属性仅限于从父或左兄弟继承)称为L-属性产生式。
让我们看看计算器
制作
- L ->E $
- E ->E1 + T
- E ->T
- T ->T1 * F
- T ->F
- F ->(E)
- F ->数字
语义规则
- 打印(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 := number.lexval
如何确定某个属性是合成的还是从语法的产生式继承的?
我想这个属性必须在问题中预定义——如果它的值取决于子节点或父节点。但是有没有办法分析一个属性是从语法产生式中继承还是合成的。
综合属性:从附加到其非终结符的子项的属性中获取其值的属性。
继承属性:从附加到其非终结符的父项(或兄弟项)的属性中获取其值的属性。
**PRODUCTION** **SEMANTIC RULES**
T->FT’ T’.inh=F.val
T.val=T’.syn
T’->*FT1’ T1’.inh=T’.inh*F.val
T’.syn=T1’.syn
T’->Ɛ T’.syn=T’.inh
F->id F.val=id.lexval
从给定的语法规则(productions)可以看出,inh是继承属性,syn是合成属性。
进一步阅读:Attribute Grammars。
从其子节点获取数据值的属性称为合成属性。
这些也称为 s 属性生产。 从父节点或兄弟节点获取值的属性称为继承属性。具有继承属性的产生式规则(每个继承的属性仅限于从父或左兄弟继承)称为L-属性产生式。
让我们看看计算器
制作
- L ->E $
- E ->E1 + T
- E ->T
- T ->T1 * F
- T ->F
- F ->(E)
- F ->数字
语义规则
- 打印(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 := number.lexval