【问题标题】:Synthesized vs Inherited Attributes综合和继承的属性
【发布时间】:2015-04-11 10:35:53
【问题描述】:

如何确定一个属性是从语法产生中合成还是继承?

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

【问题讨论】:

  • 即必须将属性 t 预定义为 S 或 I。我能否从与产生式关联的语义规则中判断。请举个例子。

标签: parsing compiler-construction abstract-syntax-tree context-free-grammar semantic-analysis


【解决方案1】:

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

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

         **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 是综合属性


进一步阅读:Attribute Grammars.

【讨论】:

  • @user2047167-是的,val 是一个 syn。作为 T.val 的属性从其子节点 T'.syn 中获取值;你说的很对!
  • 如果有一个属性在一个规则中使用父属性进行评估,而在另一规则中使用其子属性进行评估,该怎么办
  • @user2047167- 您应该检查来自 (tutorialspoint.com/compiler_design/…) 的 [L-attributed SDT]。如果您还有其他问题,请在此处发表评论。
  • 是否有一个快速的经验法则可以用来对属性进行分类。我知道 syn 属性仅通过使用其生产主体中的值进行评估..我猜大多数涉及 syn 属性的规则在语义规则的 LHS 上具有生产的 LHS 非终结符,而涉及继承属性的规则具有 RHS 非终结符语义规则在 LHS 上的产生。我想通过这个我可以很容易地弄清楚属性的性质。我说的对吗?
  • @user2047167-再一次,我不清楚。我要求您提出一个新问题,并附上您的示例作为对此的后续问题。我会帮你的。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    让我们看看计算器

    生产

    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

    【讨论】:

    • 你的回答不清楚,要么添加更多细节,要么更改它以使其更直接地指向问题。
    猜你喜欢
    • 1970-01-01
    • 2012-09-23
    • 2020-09-30
    • 1970-01-01
    • 1970-01-01
    • 2015-08-21
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多