// COMPILER_PRINCIPLES · INTERACTIVE_LAB
编译原理可视化实验室
从源代码到可执行文件,逐步可视化编译器的完整流水线。八个交互模块覆盖词法分析、语法分析、语义分析、中间表示、代码优化、寄存器分配、代码生成与链接加载,每个模块均包含 SVG 动画、实时控制与统计面板。
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 结构 / 符号解析 / 重定位