11

我怎样才能找到一个属性是从语法的产生中合成还是继承的?

我猜这个属性必须在问题中预定义——如果它的值取决于子节点或父节点。但是有没有办法分析一个属性是从语法产生中继承还是合成的。

4

3 回答 3

12

综合属性:从附加到其非终端子的属性中获取其值的属性。

继承属性:从附加到其非终端的父(或兄弟)的属性中获取其值的属性。

         **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

从给定的语法规则(产生式)中可以看出,inh 是继承属性, syn 是综合属性


进一步阅读:属性语法

于 2015-04-11T11:00:00.857 回答
1

从其子节点获取数据值的属性称为综合属性。

这些也称为 s 属性生产。从父节点或兄弟节点获取值的属性称为继承属性。具有继承属性的产生式规则(每个继承的属性仅限于从父级或左兄弟级继承)称为 L 属性产生式。

于 2015-12-07T01:41:16.307 回答
-2

让我们看看计算器

生产

  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
于 2018-12-26T09:09:03.800 回答