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

📅  最后修改于: 2021-06-28 07:00:17             🧑  作者: Mango

在介绍S属性和L属性SDT之前,这里是Synthesized或Inherited属性的简要介绍。

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

  1. 综合属性–
    合成属性是产品左侧非终端的属性。合成的属性表示在解析树上传递的信息。该属性只能从其子级获得价值(产品RHS中的变量)。

    例如。假设A-> BC是语法的产物,并且A的属性取决于B的属性或C的属性,那么它将被合成。

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

    例如,假设A-> BC是语法的产物,而B的属性取决于A的属性或C的属性,那么它将被继承。

现在,让我们讨论有关S属性和L属性的SDT。

  1. S特有的SDT:
    • 如果SDT仅使用合成属性,则称为S属性SDT。
    • 由于父节点的值取决于子节点的值,因此在S归因的SDT中进行自下而上的解析。
    • 语义动作放在RHS的最右边。
  2. L属性SDT:
    • 如果SDT既使用合成属性又使用继承属性,但有一个限制,即继承属性只能从左同级继承值,则称为S属性。
    • 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} 

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

      解释 –
      正确的答案是选项C,因为在P1中,S是综合属性,在L属性定义中允许综合。因此,P1遵循L属性定义。但是P2没有遵循L归因的定义,因为P取决于Q,这就是它的RHS。