语法制导定义SDD

sd语义分割seg对照表 sd语义差异法_符号表

综合属性(合成属性)

这一部分比较好理解,直接看图就可以明白,简单点说,就是右部候选式的符号的属性计算左部被定义的符号。而对于终结符的综合属性,已经做出了具体的规定,因此SDD中是没有计算终结符属性值的语义规则的。

一般是自下而上传递语义信息。

sd语义分割seg对照表 sd语义差异法_属性值_02

继承属性

可以简单的理解,如果一个属性不是合成的,则可以称作继承属性。(书本原话)

对于继承属性需要清楚终结符是没有继承属性的。

继承属性就是通过右部候选式的符号的属性和左部被定义符号的属性,计算出右部候选是中的符号。

一般是自上而下的传递信息。

sd语义分割seg对照表 sd语义差异法_数据结构_03

语义规则通常是以表达式的形式来描述的。

示例

注释分析树:每个节点都带有属性值的分析树。

sd语义分割seg对照表 sd语义差异法_sd语义分割seg对照表_04

sd语义分割seg对照表 sd语义差异法_sd语义分割seg对照表_05

属性文法

也称为属性翻译文法,基于上下文无关文法。

产生式(上下文无关文法+语义规则) = 属性文法

为每个文法符号(终结符或非终结符)都配备若干相关的值,也就是属性,表示文法符号的相关信息,如:类型、值、代码序列、符号表内容等。
对于文法的每个产生式都会有一组(若干条)属性的语义规则,对属性进行计算或者传递。

注意下图的例子中,n作为终结符,属性已经由词法分析器给出,不需要SDD计算,所以没有列出。

sd语义分割seg对照表 sd语义差异法_属性值_06

S属性文法

一个属性文法都是合成属性,则称为 S 属性文法 。

sd语义分割seg对照表 sd语义差异法_数据结构_07

符号表

符号表用杂凑表这种数据结构实现,其实就是哈希表。

注意:桶的个数,也就是数组的大小,选择一个素数,可以让杂凑函数更好的运行。