note
note copied to clipboard
编译程序总体结构
翻译程序 一种语言的程序(源程序)翻译成等价的另一种语言程序(目标程序)
源程序是高级语言程序,目标程序是汇编或机器程序。
解释程序 源程序一句一句输入,翻译成目标程序
编译程序 源程序全部一次翻译成目标程序。
编译系统 编译系统 = 编译程序 + 运行系统(为程序运行提供环境,如运行库、链接等)
其它翻译程序
- 汇编 : 汇编-》机器
- 反汇编
- 交叉编译: 电脑上写的程序编译成 手机程序。
八大模块

词法分析

为了语法分析,需要把单词进行归类。
比如描述赋值语句: 标识符 + 赋值号 就是赋值语句
词法分析由词法分析器 ( Lexical Analyzer, 或 Scanner)完成。 词法分析器一个个扫描字符,输出一个个 token。
语法分析

将词组合成句子的过程。如汉语中的 主语 + 谓语 + 宾语 -》 句子

将 token 变成树。自底向上。
语义分析


中间代码生成

好处是没有括号,执行顺序和计算顺序一致。
可以用串表示,也可以用树表示。树结构清晰,但是串运算简单。
最后输出四元表达式。
中间代码特点:简单规范、与机器无关、易于优化和转换
代码优化

适当优化即可,越到后面花大力气优化提升的会很少。
机器无关的优化
局部优化
- 常量合并:常量运算在编译期间完成,如 8 + 9 * 4
- 公共子表达式的提取,在基本块内进行的
循环优化
- 强度削减:用较快的操作代替慢的操作
- 代码外提:循环不变计算移除循环
机器有关的优化
- 寄存器:将常量放入寄存器,减少访问内存的次数
- 体系结构:MIMD/SIMD /SPMD /向量机/流水机
- 存储策略:根据算法访问的要求安排:cache、并行存储体系 - 减少访问冲突



模块分类 分析:词法分析 语法分析 语义分析 综合:中间代码生成,代码优化,目标代码生成 辅助: 符号表管理,出错处理