编译原理第六章 属性文法和语法制导翻译

知识总结

属性文法

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

2、属性:代表与文法符号相关的信息,和变量一样,可以进行计算和传递。

3、属性的分类

  • 综合属性:用于“自下而上”传递信息
  • 继承属性:用于“自上而下”传递信息。

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

  • 在一个属性文法中,对应于每个产生式A->α都有一套与之相关联的语义规则,每条语义规则的形式为:b:=f(c1,c2,…,ck) 

这里f是一个函数,而且:

或者(1)b是A的一个综合属性并且c1,c2,…ck是产生式右边文法符号的属性;

或者(2)b是产生式右边某个文法符号的一个继承属性并且c1,c2,…ck是A或产生式右边任何文法符号的属性;

在这两种情况下,我们都说属性b依赖于属性c1,c2,…,ck。

5、语义规则所描述的工作:属性计算、静态语义检查、符号表操作、代码生成等

基于属性文法的处理方法

  • 基于属性文法的处理过程:输入串®语法树®依赖图®语义规则计算次序®计算结果

1、树遍历的属性计算方法

假设语法树已经建立了并且树中已带有开始符号的继承属性和终结符的综合属性。以某种次序遍历语法树,直至计算出所有的属性。

  • 最常用的遍历方法是深度优先,从左到右的遍历方法。如果需要,可使用多次遍历

2、一遍扫描的处理方法

在语法分析的同时计算属性值,而不是语法分析构造语法树之后进行属性的计算,而且无需构造实际的语法树。

3、抽象语法树

从语法树中去掉对翻译不必要的信息,而获得更有效的源程序中间表示。这种经变换后的语法树称之为抽象语法树。

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

4、S-属性文法的自下而上计算

S—属性文法,它只含有综合属性。综合属性可以在分析符号串的同时由自上而下的分析器来构造。

5、L-属性文法的自顶向下翻译

如果每个产生式A->X1 X2 … Xn 的每条语义规则计算的属性是A的综合属性;或者是Xj 的继承属性,1<= j<= n, 但它仅依赖:

(1)该产生式中Xj左边符号X1, X2, …, Xj-1的属性;

(2)A的继承属性

S属性文法包含于L属性文法

翻译模式

是语法制导定义的一种便于翻译的书写形式。其中属性与文法符号相对应,语义规则或语义动作用花括号{}括起来,可被插入到产生式右部的任何合适的位置上。

  • 一种语法分析和语义动作交错的表示法
  • 表达在按深度优先遍历分析树的过程中何时执行语义动作
  • 给出了使用语义规则进行计算的顺序

总结感悟

      第六章我们重点学习了属性文法和语法制导翻译的基本思想,这一章有很多新的定义:属性文法,语法制导,翻译模式,自顶向下翻译,自底向上翻译等。其中如何通过属性来表达翻译是这里面难度比较大,不容易掌握。









你可能感兴趣的:(编译原理第六章 属性文法和语法制导翻译)