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

什么是属性文法

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

属性文法的表示

一个属性文法形式上定义为一个三元组 AGAG

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

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


属性的类型

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

综合属性

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

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

继承属性

需要探讨计算次序
编译原理 —— 属性文法和语义规则
编译原理 —— 属性文法和语义规则


语义规则

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

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

注意:

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

参考链接:

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