编译器的各阶段

序号  阶段 描述
1 词法分析 将源文件分解为一个个独立的单词符号
2 语法分析 分析程序的短语结构
3 语义动作 建立每个短语对应的抽象语法树
4 语义分析 确定每个短语的含义,建立变量和其声明的关联,检查表达式的类型,翻译每个短语
5 栈帧布局 按机器要求的方式将变量,函数参数等分配于活跃的记录(即栈帧)内
6 翻译 生成中间表示树(IR树),这是一种与任何特定程序设计语言和目标机器体系结构无关的表示
7 规范化 提取表达式中的副作用,整理条件分支,以方便下一阶段的处理
8 指令选择 将IR树节点组合成与目标机器指令相对应的块
9 控制流分析 分析指令的顺序并建立控制流程图,此图表示程序执行时可能流经的所用控制流
9 数据流分析 收集程序变量的数据流信息,例如,活跃分析(liveness analysis)计算每一个变量仍需要使用其值的地点(即他的活跃点)
10 寄存器分配 为程序中每一个变量和临时数据选择一个寄存器,不在同一个活跃的两个变量可以共享同一个寄存器
11 代码流出 用机器寄存器替代每一条机器指令中出现的临时变量名

猜你喜欢

转载自www.cnblogs.com/hulianxingkong/p/10568954.html