跳转至

编译原理概述

什么是编译原理

编译原理研究的是如何将高级编程语言翻译成机器能执行的指令。编译器就是完成这个翻译工作的程序。一个编译器通常分为几个阶段:词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成。

为什么要学编译原理

理解编程语言的本质。 学完编译原理,你不再只是"会用"一门语言,而是理解语言为什么这样设计。

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 工具 现代编译器基础设施