Q:编译器从源代码到可执行程序经历哪些阶段?
来源:小红书 Agent 岗一面
新手答:“编译原理就是把高级语言翻译成机器语言。”
高手答:
编译原理研究的是如何把源语言程序转换成目标程序,并在转换过程中保证语义、发现错误和进行优化。典型编译管线包括:
- 词法分析:字符流变成 Token,如关键字、标识符、数字和运算符。
- 语法分析:根据文法把 Token 组织成 AST,并报告结构错误。
- 语义分析:做作用域、名称绑定、类型检查和控制流合法性检查。
- 中间代码生成:把 AST 降低成便于分析和跨平台处理的 IR,如 SSA。
- 优化:常量折叠、死代码删除、公共子表达式消除、循环优化等;必须保持可观察语义。
- 目标代码生成:指令选择、寄存器分配和指令调度,生成汇编或目标文件。
- 汇编与链接:生成机器码,解析符号和重定位,组合库得到可执行文件。
解释器、JIT 和 AOT 不是完全割裂的三套理论:都可能复用前端和 IR,只是代码生成时机与运行时参与程度不同。
差距在哪:高手不止背阶段名称,还能说明每层输入输出、错误类型以及 IR 为什么是前后端解耦的关键。