编译原理概述
什么是编译原理
编译原理研究的是如何将高级编程语言翻译成机器能执行的指令。编译器就是完成这个翻译工作的程序。一个编译器通常分为几个阶段:词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成。
为什么要学编译原理
理解编程语言的本质。 学完编译原理,你不再只是"会用"一门语言,而是理解语言为什么这样设计。
AI 代码生成的基础。 做 AI 辅助编程、代码分析工具时,AST 是最核心的数据结构。
写出更好的代码。 理解编译器如何优化代码,你就能写出对编译器更友好的代码。
训练硬核的工程思维。 编译器是软件工程中最复杂的系统之一。
核心知识模块
词法分析
- 正则表达式、有限自动机(NFA/DFA)
- Lexer:将源代码字符流转换为 token 序列
语法分析
- 上下文无关文法(CFG)
- 自顶向下分析:递归下降、LL(1)
- 自底向上分析:LR(0)、SLR、LALR、LR(1)
- 抽象语法树(AST)
语义分析
- 类型系统:静态类型 vs 动态类型、类型检查、类型推断
- 符号表:管理标识符的作用域和属性
中间代码与优化
- 中间表示(IR):三地址码、SSA
- 优化技术:常量折叠、死代码消除、循环优化
目标代码生成
- 指令选择、寄存器分配、指令调度
运行时环境
- 栈帧管理、垃圾回收、闭包的实现
怎么学
先动手,再深入理论。 建议先跟着教程实现一个简单的编译器,建立感性认识。
推荐从 Crafting Interpreters 开始。 这本书从零实现两门编程语言,实践性极强。
做 Stanford CS143 实验。 实现一个完整的编译器(词法分析、语法分析、语义分析、代码生成)。
本模块资源
| 资源 | 类型 | 说明 |
|---|---|---|
| Stanford CS143 | 课程 | Stanford 编译原理课程,有完整实验 |
| Crafting Interpreters | 教程 | 从零实现两门编程语言,免费在线 |
| Engineering a Compiler | 教材 | 编译器设计经典教材 |
| LLVM | 工具 | 现代编译器基础设施 |