属性文法

来源:互联网 发布:雷凌轮毂数据 编辑:程序博客网 时间:2024/05/01 06:52



属性文法是上下文无关文法在语义上的扩展,可定义为如下三元组: 

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 

T -> F ; || T.val:= F.val

F -> ( E ) ; || F.val:= E.val

F -> i ; || F.val:= i.val

【注】可以看出: X.val 属性是综合属性。

      属性文法的语法分析树是基于BNF文法的语法分析树,并且每一结点都附有一个可能为空的属性值集合。如果语法分析树上的所有属性值都已计算,就称这棵树是完全属性的。尽管实际上并不一定这样做,但可以方便地认为,属性值是在编译器构建好完全无属性的语法分析树后再计算的。



0 0
原创粉丝点击