目录
计算机语言发展
机器语言 machine language
汇编语言 assemble language
高级语言 high level language
高级语言分类
命令式语言 imperative language
函数(应用)式语言
逻辑式语言
面向对象式语言
翻译系统
翻译程序 Translator
翻译程序解释程序 Interpreter
解释程序编译程序 compiler
编译程序其他
- 诊断编译
- 优化编译
- 交叉编译
- 可变目标
- 并行编译
- 汇编程序
- 交叉汇编
- 反汇编
编译系统功能分析
分析
词法、语法、语义
翻译
语句的翻译、代码生成
编译程序总体结构
编译程序总体结构1.词法分析
- 输入:字符串
- 输出:(种别码,属性值)——序对属性值——token的机内表示
2.语法分析
- 输入:Token序列
- 输出:语法成分
3.语义分析
4.中间代码生成 intermediate code
- 输入:语法成分
- 输出:中间代码
5.代码优化
对中间代码的优化处理:对代码进行等价变换以求提高执行效率——提高运行速度和节省存储空间。
与机器无关的优化
- 局部优化
- 常量合并:常数运算在编译期间完成,如8+5
- 公共子表达式的提取:基本块内
- 循环优化
- 强度削减
- 代码外提
与机器有关的优化
-
寄存器的利用
将常用量放入寄存器,以减少访问内存的次数 -
体系结构
MIMD、SIMD、SPMD、向量机、流水机 -
存储策略
根据算法访存的要求安排:Cache、并行存储体系——减少访问冲突 -
任务划分
按运行的算法即体系结构,划分子任务(MPMD)
- 输入:中间代码
- 输出:优化过的中间代码
6.目标代码生成
将中间代码转换成目标机上的机器指令代码或汇编代码
- 输入:中间代码
- 输出:指令代码或汇编代码
7.表格管理
管理各种符号表(常数、标号、变量、过程、结构……)
8.错误处理
进行各种错误的检查、报告、纠正,以及相应的续编译处理(如:错误的定位与局部化)
编译程序的生成
如何实现编译器?