属性文法记号中常使用N.T的形式表示与非终结符N相联的属性t。比如可把对上面表达式的类型检查的属性文法写成图8.2的形式。与每个非终结符T相联的有属性t,t要么是int,要么是bool。与非终结符E的产生式相联的断言指明:两个T的属性必须相同。图8.1的(b)是图8.1(a)语法树结点带有语义信息的表示。
在一个属性文法中,对应于每个产生式A→a都有一套与之相关联的语义规则,每条规则的形式为 b := f (c1,c2,…ck) 这里,f是一个函数,而且或者 (1)b是A的一个综合属性并且c1,c2,…ck是产生式右边文法符号的属性:或者 (2)b是产生式右边某个文法符号的一个继承属性并且c1,c2,…ck是A或产生式右边任何文法符号的属性。 在两种情况下,我们都说属性b依赖于属性c1,c2,…ck。 我们不对属性文法进行理论上的研究而仅仅将它做为工具描述语义分析。在编译的许多实际应用中,属性和断言以多种形式出现,也就是说,与每个文法符号相联的可以是各种属性、断言、以及语义规则,或者某种程序设计语言的程序段等等。 |