优化
任务:对前阶段产生的中间代码进行加工变换,以期在最后阶段产生更高效的目标代码
原则:程序的等价变换原则
编译过程
任务:把中间代码变换成特定机器上的目标代码
依赖于硬件系统结构和机器指令的含义
目标代码三种形式:
汇编指令代码:需要进行汇编
绝对指令代码:可直接运行
可重新定位指令代码:需要链接
编译结构
词法分析器 单词符号
语法分析器 语法单位
语义分析与中间代码生成器 中间代码
优化段 中间代码
目标代码生成器
另外:符号表管理,出错处理模块
出错处理
出错处理程序: 发现错误,报告给用户
语法错误: 缺少括号等
语义错误:类型不一致等
遍
对源程序或源程序的中间表示从头到尾扫描一次
阶段与遍是不同的概念:
一遍可以有若干段组成
一个阶段也可以分若干遍来完成
编译前端与后端
编译前端:如词法分析 语法分析 语义分析与中间代码产生,与机器无关的优化
编译后端:与目标机有关,与目标机有关的优化,目标代码产生。
带来的好处:
程序逻辑结构清晰
有利于移植
编译程序生成
以机器语言和汇编语言为工具
优点:效率高
缺点: 难写
高级语言书写
程序易读
利用已有的某种语言的编译程序使用另一种语言的编译程序
移植方法
把一种机器上的编译程序移植到另一种机器上
自编译方式
编译程序自动生成
编译程序产生器
lex: 词法分析程序产生器
yacc: 语法分析程序产生器