编译原理概述
1.1 计算机语言
机器语言: 0、1代码
汇编语言: 0、1代码与助记符:接近计算机硬件指令系统
高级语言: 语句定义数据、描述算法(程序)
如:C、SQL(数据定义、数据操作)
命令语言: 以功能封装为特征
翻译程序:将某一种语言描述的程序(源程序SP)翻译成等价的另一种语言描述的程序(目标程序OP)的程序
编译程序:高级语言程序→汇编/机器语言程序
1.2 编译程序总体结构
- 词法分析:词法分析器又叫做扫描器完成词法分析
功能:从左到右扫描源程序(字符串),并将其转换成单词(符号/记号—Token)串;同时查词法错误,进行标识符登记——符号表管理
输入:字符串
输出:(种别码,属性值)——序对
属性值——token的机内表示
- 语法分析:语法分析器 完成语法分析
功能:实现“组词成句”:发现各级语法成分的组成和结构,指出语法错误,制导翻译
输入:Token序列
输出:语法成分
- 语义分析:功能:分析由语法分析器给出的语法单位的语义
获取标识符的属性:类型、作用域等
语义检查:运算的合法性、取值范围等
子程序的静态绑定:代码的相对地址
变量的静态绑定:数据的相对地址
- 中间代码生成:中间代码的特点:简单规范,机器无关,易于优化与转换
- 代码优化:对代码进行等价变换以求提高效率——提高运行速度和节省存储空间
- 目标代码生成:将中间代码转换成目标机上的机器指令代码或汇编代码
- 表格管理:管理各种符号表(常数、标号、变量、过程、结构……),查、填(登记、查找)源程序中出现的符号和编译程序生成的符号,为编译的各个阶段提供信息,辅助语法检查、语义检查,完成静态绑定、管理编译过程
- 错误处理:进行各种错误的发现、报告、纠正,以及相应的续编译处理(如:错误的定位与局部化)
词法:拼写、定义、……
语法:语句结构、表达式结构、……
语义:类型不匹配、……
模块分类:
- 分析:词法分析,语法分析 ,语义分析
- 翻译:中间代码生成,代码优化,目标代码生成
- 辅助:符号表管理,出错处理
翻译的遍:根据系统资源的状况、运行目标的要求等,可以将一个编译程序设计成多遍扫描的形式,在每一遍扫描中,完成不同任务。遍可以和阶段相对应,也可无关