综合和继承的属性

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-属性产生式。

让我们看看计算器

制作

  1. L ->E $
  2. E ->E1 + T
  3. E ->T
  4. T ->T1 * F
  5. T ->F
  6. F ->(E)
  7. F ->数字

语义规则

  1. 打印(E.val)
  2. E.val := E1.val + T.val
  3. E.val := T.val
  4. T.val := T1.val * F.val
  5. T.val := F.val
  6. F.val := E.val
  7. F.val := number.lexval