编译原理讲义 (第六章语义分析和 目标代码生成) 南京大学计算机系 赵建华
编译原理讲义 (第六章:语义分析和 目标代码生成) 南京大学计算机系 赵建华
概念 编译程序的作用是:将源程序转换为具有相同效果的 可运行程序。 所谓相同效果就是程序的语义。 并不是所有满足语法规则的程序都是有意义的(we form)的 所谓语义分析,就是确定程序是有意义的,分析程序 的含义,并做出相应的处理 程序的含义包括: 数据结构的含义:和标识符相关联的数据对象。 控制结构的含义:由语言定义。规定了每个语句的 执行效果
概念 • 编译程序的作用是:将源程序转换为具有相同效果的 可运行程序。 • 所谓相同效果就是程序的语义。 • 并不是所有满足语法规则的程序都是有意义的(wellform)的。 • 所谓语义分析,就是确定程序是有意义的,分析程序 的含义,并做出相应的处理。 • 程序的含义包括: – 数据结构的含义:和标识符相关联的数据对象。 – 控制结构的含义:由语言定义。规定了每个语句的 执行效果
基本功 ·确定类型:确定标识符所关联的数据对象的数 据类型。 类型检査:按照语言的类型规则,对运算及分 量进行类型检查,必要时做出相应类型转换。 识别含义:根据程序设计语言的语义定义,确 定各个构造部分组合后的含义,做出相应处理 (生成中间代码或者目标代码)。 其它静态语义检查:比如控制流检査,嵌套层 数检查
基本功能 • 确定类型:确定标识符所关联的数据对象的数 据类型。 • 类型检查:按照语言的类型规则,对运算及分 量进行类型检查,必要时做出相应类型转换。 • 识别含义:根据程序设计语言的语义定义,确 定各个构造部分组合后的含义,做出相应处理 (生成中间代码或者目标代码)。 • 其它静态语义检查:比如控制流检查,嵌套层 数检查
语义分析的输入输出 ·输入为前面语法分析的结果。 输出为中间表示代码(抽象语法树,三元式.)。 把生成中间代码和代码生成分开,可以使难 点分解。 对中间代码的分析比较容易,便于进行优化。 可以把编译程序分成机器独立部分和机器相 关部分 便于任务的分解,和开发人员的分组开发
语义分析的输入输出 • 输入为前面语法分析的结果。 • 输出为中间表示代码(抽象语法树,三元式…)。 – 把生成中间代码和代码生成分开,可以使难 点分解。 – 对中间代码的分析比较容易,便于进行优化。 – 可以把编译程序分成机器独立部分和机器相 关部分。 – 便于任务的分解,和开发人员的分组开发
属性文法 对于某个压缩了的文法,当把每个文法符号和 组属性相关联,并把重写规则附加以语义规 则的时候,就得到属性文法 语法制导的翻译过程:由于属性文法的规则和 重写规则是一一对应的关系。所以,由属性文 法的确定的语义分析可以在语法分析的过程中 进行。这个过程成为语法指导的翻译。 语法指导的定义/翻译方案:语法指导的定义比 较抽象,隐藏了实现细节,无需指明语义规则 的计算次序。翻译方案则指明的计算次序
属性文法 • 对于某个压缩了的文法,当把每个文法符号和 一组属性相关联,并把重写规则附加以语义规 则的时候,就得到属性文法。 • 语法制导的翻译过程:由于属性文法的规则和 重写规则是一一对应的关系。所以,由属性文 法的确定的语义分析可以在语法分析的过程中 进行。这个过程成为语法指导的翻译。 • 语法指导的定义/翻译方案:语法指导的定义比 较抽象,隐藏了实现细节,无需指明语义规则 的计算次序。翻译方案则指明的计算次序