编译原理 —— 属性文法和语义规则
什么是属性文法
- 一个属性文法是在上下文无关文法的基础上,允许每个文法符号 (终结符或非终结符)根据处理的需要,定义与 相关的属性。
- 对属性的处理有计算、传递信息等,属性处理的过程也就是语义处理过程。
- 当然,处理时必须遵循一定的规则。为此,为每个文法规则式都定义一组属性的计算规则,称为语义规则。
属性文法的表示
一个属性文法形式上定义为一个三元组
其中, 表示一个上下文无关文法。 表示属性的有穷集。 表示属性的断言(语义规则)或谓词的有穷集。
属性的类型
属性可以分为两类:综合属性用于自下而上传递信息、继承属性用于自上而下传递信息
综合属性
通常使用自底向上的方法,按照语义规则来计算各结点的综合属性值
继承属性
需要探讨计算次序
语义规则
示例:
注意:
- 终结符 只有综合属性,由词法分析器提供;
- 非终结符 既可有综合属性,也可有继承属性,文法开始符号 的所有继承属性作为属性计算前的初始值。
- 产生式左边符号的继承属性和产生式右边符号的综合属性,不由所给的产生式的属性计算规则来计算,而是由其他产生式的语义规则来计算。
参考链接:
https://www.icourse163.org/learn/HIT-1002123007#/learn/content?type=detail&id=1210383458