📜  语法定向翻译中的 S – 属性和 L – 属性 SDT

📅  最后修改于: 2021-09-27 15:00:27             🧑  作者: Mango

在讨论 S-attributed 和 L-attributed SDT 之前,这里是对合成或继承属性的简要介绍

属性类型 –
属性可能有两种类型——合成的或继承的。

  1. 综合属性——
    综合属性是产生式左侧的非终结符的属性。综合属性表示正在向上传递分析树的信息。该属性只能从其子项(产品 RHS 中的变量)获取值。

    例如。假设 A -> BC 是语法的产生式,并且 A 的属性依赖于 B 的属性或 C 的属性,那么它将是合成属性。

  2. 继承属性——
    产生式右侧的非终结符的属性称为继承属性。该属性可以从其父级或兄弟级(产品的 LHS 或 RHS 中的变量)获取值。

    例如,假设 A -> BC 是语法的产生式,而 B 的属性依赖于 A 的属性或 C 的属性,那么它将是继承属性。

现在,让我们讨论 S-attributed 和 L-attributed SDT。

  1. S 属性 SDT :
    • 如果 SDT 仅使用综合属性,则称为 S-attributed SDT。
    • S 属性 SDT 在自底向上解析中进行评估,因为父节点的值取决于子节点的值。
    • 语义动作放置在 RHS 的最右边。
  2. L 属性 SDT:
    • 如果一个 SDT 同时使用合成属性和继承属性,并限制继承属性只能从左兄弟节点继承值,则称为 L-attributed SDT。
    • L 属性 SDT 中的属性通过深度优先和从左到右的解析方式进行评估。
    • 语义动作放置在 RHS 中的任何位置。

      例如,

      A -> XYZ {Y.S = A.S, Y.S = X.S, Y.S = Z.S} 

      不是 L 属性文法,因为 YS = AS 和 YS = XS 是允许的,但 YS = ZS 违反了 L 属性 SDT 定义,因为属性从其右兄弟继承值。

      注-如果定义S-归因,那么它也是L-归咎于但不是反之亦然。

      示例 –考虑下面给出的 SDT。

      P1: S -> MN  {S.val= M.val + N.val}
      P2: M -> PQ  {M.val = P.val * Q.val  and P.val =Q.val} 

      选择正确的选项。
      A. P1 和 P2 都是 S 属性。
      B. P1 是 S 属性,P2 是 L 属性。
      C. P1 是 L 属性,但 P2 不是 L 属性。
      D. 以上都不是

      解释 –
      正确答案是选项C,因为在 P1 中,S 是合成属性,而在 L 属性定义中允许合成。所以 P1 遵循 L 属性定义。但是 P2 不遵循 L 属性定义,因为 P 取决于 Q,Q 是它的 RHS。