合成属性和继承属性的区别


合成属性和继承属性都是语言语义的一部分,它们为语言的结构(如标记和语法结构)提供含义。语义有助于解释符号、它们的类型以及它们彼此之间的关系,并且语义分析判断源程序中构建的语法结构是否有意义。现在,根据属性的特征,我们可以区分合成属性和继承属性。

以下是合成属性和继承属性之间的一些重要区别。

序号关键点合成属性继承属性
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 使用。

更新于: 2020年6月9日

17K+ 浏览量

开启你的职业生涯

通过完成课程获得认证

开始学习
广告