2.11.1 属性语法

属性语法中的语义子句假设生成树的每一个节点都有空间给一个或多个属性,这些属性就是放在生成树节点上的值(数字,字符串或其他东西)。为简单起见,我们限定这个属性语法每个节点只有一个属性。这种语法中一个规则的语义子句包含一个公式,用以计算一个规则(由生成树的节点展示)中的一些非终结符着这个规则的其他终结符。这些语义动作之和规则的本地属性关联:整体的语义由所有本地计算的结果构成。

如果规则R的语义子句计算R左侧的属性,这个属性会派生。如果它计算R的右侧非终结符的属性,例如A,那这个属性就被A继承。派生属性也被称为“合成属性”。我们例子的属性语法是:

图1

花括号中给出了语义子句。A0是左侧的(派生)属性;A1,...,An是右侧成员的属性。通常来说,右侧的终结符也计入A的索引,虽然它们(通常)不携带属性;规则2的Digit在位置3并且其属性值为A3。用于处理属性语法的大多数系统都少有重复的方式来通过3j表达3a。

3+5+1 的初始生成树在图Fig 2.31中给出。首先只有节点的属性的明确的,但是到生成树的一个右侧的所有属性都明确后,我们就能使用它的语义子句来计算它的左侧了。这种方式下,属性值(语义)渗透到树上,最后到达起始符号,并提供给我们全句的含义,如图Fig 2.32所示。属性语法是非常强大的操控语言语义的方式。这些将会在15.3.1节中详细讨论。

图2