编译原理学习笔记14——属性文法与语法制导翻译1
- 14.1 属性文法
- 14.2 属性计算
14.1 属性文法
属性文法
综合属性
- 自下而上传递信息
- 语法规则:根据右 部候选式中的符号 的属性计算左部被 定义符号的综合属性
- 语法树:根据子结 点的属性和父结点 自身的属性计算父 节点的综合属性
继承属性
- 自上而下传递信息
- 语法规则:根据右部 候选式中的符号的属 性和左部被定义符号 的属性计算右部候选 式中的符号的继承属 性
- 语法树:根据父结点 和兄弟节点的属性计 算子结点的继承属性
属性依赖
属性依赖
语义规则
测试:语义规则
- 考虑非终结符A,B和C,其中,A有一个继承 属性a和一个综合属性b,B有综合属性c,C有 继承属性d。产生式A→BC不可能有规则
- A. C.d:=B.c+1
- B. A.b:=B.c +C.d
- C. B.c := A.a
答案:C
带注释的语法树
- 在语法树中,一个结点的综合属性的值由其子 结点和它本身的属性值确定
- 使用自底向上的方法在每一个结点处使用语义 规则计算综合属性的值
- 仅使用综合属性的属性文法称S-属性文法
- 在语法树中,一个结点的继承属性由其父结点、 其兄弟结点和其本身的某些属性确定
- 用继承属性来表示程序设计语言结构中的上下 文依赖关系很方便
14.2 属性计算
基于属性文法的处理方法
- 语义规则的计算
- 产生代码
- 在符号表中存放信息
- 给出错误信息
- 执行任何其它动作
- 对输入串的翻译就是根据语义规则进行计算
基于属性文法的处理方法
- 由源程序的语法结构所驱动的处理办法就是语 法制导翻译法
- 输入串-》 语法树 -》按照语义规则计算属性
基于属性文法的处理方法
- 依赖图
- 树遍历
- 一遍扫描
依赖图
依赖图的构建算法
依赖图示例
良定义的属性文法
- 如果一属性文法不存在属性之间的循环依赖关 系,则称该文法为良定义的
- 一个依赖图的任何拓扑排序都给出一个语法树 中结点的语义规则计算的有效顺序
属性的计算次序
树遍历的属性计算方法
一遍扫描的处理方法
抽象语法树
建立表达式的抽象语法树
建立抽象语法树的语义规则