语义分析
- 属性文法
- 定义
- 对于普通的上下文无关文法进行扩展,每个文法节点包括属性,得到分析树后可以再次遍历计算属性。
- 按照计算依赖顺序分类:
- 综合属性:产生式左部的属性基于右部的属性计算。
- 分析树中有子节点的属性计算。
- 继承属性:产生式右部的属性基于左部的属性或右部内其他部分的属性计算。
- 分析树中用父节点或兄弟节点的属性计算。
- 综合属性:产生式左部的属性基于右部的属性计算。
- 无限制属性的文法需要得出所有属性的依赖关系图,按照拓扑排序计算。
- S-属性文法
- 要求所有的属性都是综合属性,属性计算完全先计算子节点、再计算父节点。
- 可以应用于自下而上解析器,在规约过程中完成属性计算。
- L-属性文法
- 属性可以是综合属性或继承属性,但是继承属性只可以依赖父节点或左侧的兄弟节点。
- 先计算节点的继承属性,递归计算子节点的属性,回溯后计算自己的综合属性。
- 可以应用于自上而下解析器,推导过程中完成属性计算。
- 定义