合成属性和继承属性的区别
合成属性和继承属性都是语言语义的一部分,它们为语言的结构(如标记和语法结构)提供含义。语义有助于解释符号、它们的类型以及它们彼此之间的关系,并且语义分析判断源程序中构建的语法结构是否有意义。现在,根据属性的特征,我们可以区分合成属性和继承属性。
以下是合成属性和继承属性之间的一些重要区别。
序号 | 关键点 | 合成属性 | 继承属性 |
---|---|---|---|
1 | 定义 | 合成属性是一个属性,其语法树节点的值由子节点的属性值确定。例如,假设以下产生式 S → ABC,如果 S 从其子节点(A、B、C)获取值,则称其为合成属性,因为 ABC 的值被合成到 S 中。 | 另一方面,如果一个属性的语法树节点值由父节点和/或兄弟节点的属性值确定,则称其为继承属性。在 S → ABC 的情况下,如果 A 可以从 S、B 和 C 获取值,B 可以从 S、A 和 C 获取值,同样,C 可以从 S、A 和 B 获取值,则称 S 为继承属性。 |
2 | 设计 | 如上所述,对于合成属性,产生式必须以非终结符作为其头部。 | 另一方面,对于继承属性,产生式必须在其主体中包含非终结符作为符号。 |
3 | 评估 | 合成属性可以在语法树的单次自底向上遍历中进行评估。 | 而另一方面,继承属性可以在语法树的单次自顶向下和横向遍历中进行评估。 |
4 | 终结符 | 终结符和非终结符都可以包含合成属性。 | 另一方面,只有非终结符可以包含继承属性。 |
5 | 用法 | 合成属性被 S 属性 SDT 和 L 属性 STD 使用。 | 另一方面,继承属性仅被 L 属性 SDT 使用。 |
广告