编译原理语法制导翻译技术

语法制导翻译技术

编译程序要求源程序和目标程序具有等价语义,所以需要检查每个语法单位的静态语义.

实践证明,必须使用形式化的语言和方法精确解释程序设计语言,这种需求产生了形式语义学,分为操作语义,指称语义和公理语义三类

任何形式化说明方法都必须是完备和统一的

语法制导翻译技术:半结构化,属性文法,多数编译程序普遍采用

  1. 根据产生式包含的语义,分析文法中每个符号的语义
  2. 把这些语义以属性形式附加到相应文法符号上
  3. 根据产生式语义,给出符号间属性的求值规则,从而形成语法制导定义
  4. 在语法分析中使用该产生式时,根据语义规则对相应的属性进行求值,从而完成翻译

进一步 1. 用一个或多个子程序(称为语义动作)的功能来描述产生式语义 2. 把语义动作插入到适当位置形成翻译方案

常用的语法制导翻译过程:

  1. 根据基础文法对输入符号串进行语法分析,建立语法分析树
  2. 根据分析树构造描述各结点属性间依赖关系的有向图
  3. 对依赖图进行拓扑排序,得到语义规则的计算次序
  4. 按照此顺序对语义规则进行计算,完成预定翻译

某些语法制导定义可以在单遍扫描中完成,不需要显式的分析树和构造依赖图