编译基本流程
先通过预处理,然后通过前端->中端->后端的流程,得到最终结果
预处理
读取源码,并且过滤非法字符、注释等(或者展开宏,一起其他一些预处理
前端
- 词法分析:把源码转化成Token序列
- 语法分析:把Token序列生成语法树(只考虑结构是否正确,类型等不进行检查
- 语义分析:在语法树的基础上进行作用域、类型检查等
中端
将 IR 进行优化,讲语法树等转化成类似汇编的中间表示。 其中常见优化——
- 循环展开
- 全局值编号
- 等 蛮多的
后端
接收优化后的 IR 后生成目标机器的可执行程序——
- 直接生成机器码
- 生成汇编语言,再通过一次汇编层转成可执行程序
指令选择,寄存器分配等都是在这个层实现的。还有链接过程也是发生在这里
总结
又是分层结构进行的解耦操作 —— 前端考虑当前语言转化到中间代码 中端只需要考虑如何优化 后端只需要考虑如何生成对应平台的可执行程序
所以在拥有