知识卡片
编译器三阶段
内容
编译器通常先理解源代码,再用中间表示承载优化,最后生成目标机器代码。Go 的前端、SSA 和后端也是这条路径;掌握它能把语法现象还原成编译时转换,而不是只记表层规则。
结构图:
flowchart LR
A[源代码] --> B[词法与语法分析]
B --> C[类型检查]
C --> D[SSA 优化]
D --> E[机器码生成]
E --> F[链接成可执行文件]
参考来源
- 位置:《Go语言底层原理剖析》第1章《深入Go语言编译器》1.2节《Go语言编译器的阶段》
- 结论依据:原文先给出编译原理中"编译器前端、优化器、编译器后端"的经典三阶段划分(并说明前端理解源码、中间阶段做优化、后端生成目标机器码),紧接着列出 Go 编译器细化后的具体阶段顺序(词法解析→语法解析→抽象语法树构建→类型检查→变量捕获→函数内联→逃逸分析→闭包重写→遍历函数→SSA生成→机器码生成),两段合并即是本卡片结构图的直接依据。
- 原始内容:在经典的编译原理中,一般将编译器分为编译器前端、优化器和编译器后端。这种编译器被称为三阶段编译器(three-phase compiler)。其中,编译器前端主要专注于理解源程序、扫描解析源程序并进行精准的语义表达……编译器后端专注于生成特定目标机器上的程序……Go语言编译器的执行流程可细化为多个阶段,包括词法解析、语法解析、抽象语法树构建、类型检查、变量捕获、函数内联、逃逸分析、闭包重写、遍历函数、SSA生成、机器码生成。