第六章

属性文法

是在上下文无关文法的基础上为每个文法符号(终结符或非终结符)配备若干个相关的“值”(称为属性)。

语义规则
  
属性计算的过程即是语义处理的过程

对于文法的每一个产生式配备一组属性的计算规则,则称为语义规则。

输入串语法树依赖图语义规则计算次序计算结果这种由源程序的语法结构所驱动的处理办法就是语法制导翻译法。


如果在一棵语法树中一个结点的属性b依赖于属性c,那么这个结点处计算b的属性规则必须在确定c的语义规则之后使用

在一颗语法树中的结点的继承属性和综合属性之间的相互依赖关系可以用称作依赖图的一个有向图来描述。


在为一棵语法树构造依赖图以前,我们为每一个包含过程调用的语义规则引入一个虚综合属性b,这样把每一个语义规则都写成  

b:= f(c1,c2, …ck) 

依赖图中为每一个属性设置一个结点,如果属性b依赖属性c,则从属性c的结点有一条有向边连到属性b的结点。

树遍历的属性计算方法:假设语法树已经建立起了,并且树中已带有开始符号的继承属性和终结符的综合属性。然后以某种次序遍历语法树,直至计算出所有的属性。
最常用的遍历方法是深度优先,从左到右的遍历方法

如果需要,可使用多次遍历


一遍扫描的处理方法:与树遍历的属性计算方法不同,一遍扫描的处理方法是在语法分析的同时计算属性值,而不是语法分析构造语法树之后进行属性的计算,而且无需构造实际的语法树。

因为一遍扫描的处理方法与语法分析器的相互作用,它与下面两个因素密切相关:
所采用的语法分析方法

属性的计算次序


在抽象语法树中,操作符和关键字都不作为叶结点出现,而是把它们作为内部结点,即这些叶结点的父结点。


翻译模式 

1. 定义
翻译模式是语法制导定义的一种便于翻译的书写形式。其中属性与文法符号相对应,语义规则或语义动作用花括号{ }括起来,可被插入到产生式右部的任何合适的位置上。
这是一种语法分析和语义动作交错的表示法,他表达在按深度优先遍历分析树的过程中何时执行语义动作。

翻译模式给出了使用语义规则进行计算的顺序。可看成是分析过程中翻译的注释。

2. 设计翻译模式(根据语法制导定义)
条件:语法制导定义是L-属性定义


保证语义动作不会引用还没有计算的属性值。
(1)只需要综合属性的情况

(2)既有综合属性又有继承属性

自顶向下的翻译 :从翻译模式中消除左递归  
对于一个翻译模式,若采用自顶向下分析,必须消除左递归和提取左公因子,在改写基本文法时考虑属性值的计算。

展开阅读全文

没有更多推荐了,返回首页