// COMPILER_PRINCIPLES · INTERACTIVE_LAB

编译原理可视化实验室

从源代码到可执行文件,逐步可视化编译器的完整流水线。八个交互模块覆盖词法分析、语法分析、语义分析、中间表示、代码优化、寄存器分配、代码生成与链接加载,每个模块均包含 SVG 动画、实时控制与统计面板。

8 Modules SVG + Vanilla JS Zero Dependencies Single File
01LEXICAL_ANALYSIS

词法分析

将源代码字符流通过 DFA(确定性有限自动机)逐字符扫描,识别出关键字、标识符、数字、运算符等 token。可视化状态机转移与 token 生成过程。

DFA 状态机 / Token 流
02SYNTAX_ANALYSIS

语法分析

将 token 流按文法规则解析为抽象语法树(AST)。支持递归下降(LL)与移进归约(LR)两种模式,逐步展示语法树的构建过程。

语法树 / Parse Tree
03SEMANTIC_ANALYSIS

语义分析

遍历 AST 构建符号表,进行作用域解析与类型检查。类型信息自底向上传播,检测类型不匹配等语义错误。

符号表 / 类型推导
04INTERMEDIATE_REPRESENTATION

中间表示

将 AST 转换为三地址码(3AC)与静态单赋值形式(SSA),构建控制流图(CFG)。在基本块汇合点插入 phi 节点。

CFG / 三地址码 / SSA
05CODE_OPTIMIZATION

代码优化

在 IR 上执行优化遍:常量折叠、死代码消除、公共子表达式消除、循环不变量外提。对比优化前后的指令变化。

优化遍 / Before vs After
06REGISTER_ALLOCATION

寄存器分配

基于图着色的寄存器分配:构建活跃范围与干涉图,用 k 种颜色着色。无法着色的变量溢出到内存。

干涉图 / 活跃范围 / 图着色
07CODE_GENERATION

代码生成

将 IR 翻译为目标机器指令,执行指令选择与窥孔优化。支持 x86 与 ARM 两种目标架构。

指令选择 / 窥孔优化
08LINKING_AND_LOADING

链接与加载

链接器合并多个目标文件,解析跨文件符号引用,完成重定位。展示 ELF 段结构与符号解析过程,支持静态/动态链接切换。

ELF 结构 / 符号解析 / 重定位