在介绍S属性和L属性SDT之前,这里是Synthesized或Inherited属性的简要介绍。
属性类型–
属性可能有两种类型-合成的或继承的。
- 综合属性–
合成属性是产品左侧非终端的属性。合成的属性表示在解析树上传递的信息。该属性只能从其子级获得价值(产品RHS中的变量)。例如。假设A-> BC是语法的产物,并且A的属性取决于B的属性或C的属性,那么它将被合成。
- 继承的属性–
生产右侧的非终结符的属性称为继承属性。该属性可以从其父级或其同级(产品的LHS或RHS中的变量)中获取值。例如,假设A-> BC是语法的产物,而B的属性取决于A的属性或C的属性,那么它将被继承。
现在,让我们讨论有关S属性和L属性的SDT。
- S特有的SDT:
- 如果SDT仅使用合成属性,则称为S属性SDT。
- 由于父节点的值取决于子节点的值,因此在S归因的SDT中进行自下而上的解析。
- 语义动作放在RHS的最右边。
- 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。