Skip to content

编译基本流程

先通过预处理,然后通过前端->中端->后端的流程,得到最终结果

预处理

读取源码,并且过滤非法字符、注释等(或者展开宏,一起其他一些预处理

前端

  1. 词法分析:把源码转化成Token序列
  2. 语法分析:把Token序列生成语法树(只考虑结构是否正确,类型等不进行检查
  3. 语义分析:在语法树的基础上进行作用域、类型检查等

中端

将 IR 进行优化,讲语法树等转化成类似汇编的中间表示。 其中常见优化——

  • 循环展开
  • 全局值编号
  • 等 蛮多的

后端

接收优化后的 IR 后生成目标机器的可执行程序——

  • 直接生成机器码
  • 生成汇编语言,再通过一次汇编层转成可执行程序

指令选择,寄存器分配等都是在这个层实现的。还有链接过程也是发生在这里

总结

又是分层结构进行的解耦操作 —— 前端考虑当前语言转化到中间代码 中端只需要考虑如何优化 后端只需要考虑如何生成对应平台的可执行程序

所以在拥有 M 种编程语言和 N 种目标平台的情况下,只需要 M+N 个程序就可以实现所有的转化过程

Released under the MIT License.