属性文法是上下文无关文法在语义上的扩展,可定义为如下三元组:
A = (G , V , E) ; G(文法);V(属性集);E(语义规则集)。
⑴ 属性 代表与文法符号相关的信息,这里主要指语义信息(类型、种类、值和值地址…);文法产生式中的每个文法符号都附有若干个这样的属性。
(2) 属性集 V是有穷的属性集,每个属性与文法的一个终结符或非终结符关联,属性加工的过程即是语义处理的过程。
⑶ F是关于属性的属性断言或一组属性的计算规则(称为语义规则)。
属性分两类(按属性求值规则区分):
综合属性:其值由子女属性值来计算(自底向上求值);
继承属性:其值由父兄属性值来计算(自顶向下求值)
属性文法构造示例:
算术表达式的属性文法
※ 设:X.val 为文法符号 X 的值属性;
※下述属性文法用于算术表达式的求值运算:
E -> E1 + T ; || E.val:= E1.val + T.val
E -> E1 - T ; || E.val:= E1.val - T.val
E -> T ; || E.val:= T.val
T -> T1 * F ; || T.val:= T1.val * F.val
T -> T1 / F ; || T.val:= T1.val / F.val