编译原理-第二章 一个简单的语法指导编译器-2.4 语法制导翻译
语法制导翻译:
- 定义:语法制导翻译是通过向一个文法的产生式附加一些规则或程序片段而得到的
- 功能:给定词法单元流,通过向一个文法产生式附加一些语义动 作,语法制导分析产生语法分析树,并实现翻译动作
- 相关概念:
- 属性:表示与某个程序构造相关的任意的量,因为用文法符号(终结符号或非终结符号)来表示程序构造,所以可将属性的概念从程序构造扩展到表示这些构造的文法符号上
- 综合属性:如果某个属性在语法分析树节点N上的值由N的子节点和N本身的属性值确定,则该属性为综合属性,其性质为只需对语法分析树进行一次自底向上的遍历,就可以计算出属性的值
- 继承属性:如果某个属性由语法分析树中该节点本身、父节点以及兄弟节点的属性值决定,则该属性为继承属性
- 后缀表达式:
- 归纳定义:
- 书写规则:出现在头产生式中的非终结符号没有下标,而在产生式体中的非终结符号带有不同的下标,同一个非终结符的所有出现都按照这种方式区分,并且下标不是名字的组成部分
- 属性:表示与某个程序构造相关的任意的量,因为用文法符号(终结符号或非终结符号)来表示程序构造,所以可将属性的概念从程序构造扩展到表示这些构造的文法符号上
- 种类:
- 语法制导定义:
- 性质:
- 每个文法符号和一个属性集合相关联
- 每个产生式和一组语义规则相关联,这些规则用于计算与该产生式中符号相关联的属性值
- 相关概念:
- 注释语法分析树(注释分析树):各个结点标记了相应的属性值的语法分析树,通过增加结点属性来获取语义信息
- 例:
- 将表达式翻译为相应的后缀表示形式
- 其中属性t与非终结符号expr和term相关联
- 图中每个非终结符有一个值为字符串的属性t,它表示由该非终结符生成的表达式的后缀表示形式。语义规则中的符号 || 表示字符串的连接运算符。一个数位的后缀形式是该数位本身。
- 性质:
- 语法指导翻译方案:
- 定义:将程序片段附加到一个文法的各个产生式上的一种表示方法,通过增加结点获取语义信息
- 相关概念:
- 语义动作:被嵌入到产生式体中的程序片段,用花括号括起来
- 例1:
- 非终结符号rest代表:一个表达式中除第一个项之外的一切
- 在构造语法分析树时,为每个语义动作构造一个额外的子结点,并使用虚线将它和该产生式头部对应的结点相连,对应于语义动作的结点没有子结点,因此在第一次访问该结点时就会执行这个动作
- 例2:
- 将表达式翻译为相应的后缀表示形式
- 通过语义动作把翻译结果依增量方式打印出来
- 语法制导定义:
- 树的遍历:
- 作用:将用于描述属性的求值过程,以及描述一个翻译方案中的各个代码片段的执行过程
- 过程:一个树的遍历(traversal)从根结点开始,并按照某个顺序访问树的各个结点
- 例:
参考——《编译原理(第二版)》