编译原理 —— 属性文法和语义规则

什么是属性文法

  • 一个属性文法是在上下文无关文法的基础上,允许每个文法符号 X X X(终结符或非终结符)根据处理的需要,定义与 X X X 相关的属性。
  • 对属性的处理有计算、传递信息等,属性处理的过程也就是语义处理过程。
  • 当然,处理时必须遵循一定的规则。为此,为每个文法规则式都定义一组属性的计算规则,称为语义规则。

属性文法的表示

一个属性文法形式上定义为一个三元组 A G AG AG

  • A G = ( G , V , E ) AG=(G,V,E) AG=G,V,E

其中, G G G 表示一个上下文无关文法。 V V V 表示属性的有穷集。 E E E 表示属性的断言(语义规则)或谓词的有穷集。


属性的类型

属性可以分为两类:综合属性用于自下而上传递信息、继承属性用于自上而下传递信息

综合属性

通常使用自底向上的方法,按照语义规则来计算各结点的综合属性值

编译原理 —— 属性文法和语义规则_第1张图片 编译原理 —— 属性文法和语义规则_第2张图片

继承属性

需要探讨计算次序
编译原理 —— 属性文法和语义规则_第3张图片
编译原理 —— 属性文法和语义规则_第4张图片


语义规则

编译原理 —— 属性文法和语义规则_第5张图片

示例:
编译原理 —— 属性文法和语义规则_第6张图片

注意:

  1. 终结符 a a a 只有综合属性,由词法分析器提供;
  2. 非终结符 A A A 既可有综合属性,也可有继承属性,文法开始符号 S S S 的所有继承属性作为属性计算前的初始值。
  3. 产生式左边符号的继承属性和产生式右边符号的综合属性,不由所给的产生式的属性计算规则来计算,而是由其他产生式的语义规则来计算。

参考链接:

https://www.icourse163.org/learn/HIT-1002123007#/learn/content?type=detail&id=1210383458

你可能感兴趣的:(编译原理)