🧩

编译原理实战教程

用 TypeScript 从零实现 MiniLang 编译器

从 Token、AST、作用域和类型检查,到 IR、优化、字节码和虚拟机,沿着一条可运行的编译流水线学习编译原理。

从源码到运行结果

这个系列不只解释概念,而是围绕 MiniLang 实现一个小而完整的编译器。每章都保留术语边界,同时用 TypeScript 代码展示关键结构,让读者能理解真实编译器为什么要拆成这些阶段。

📖章节目录

共 10 章
🧭 已完成

第一章:语言与编译器全景

从 MiniLang 的第一段程序出发,理解源码如何经过 Token、AST、IR、字节码并在虚拟机中执行。

MiniLangASTVM
阅读章节
🔤 已完成

第二章:词法分析 Lexer

实现 MiniLang Lexer,把字符流切分为 TokenType、字面量和源码位置。

LexerTokenTypePosition
阅读章节
🌲 已完成

第三章:语法分析 Parser

用递归下降 Parser 处理语句、表达式、优先级和分组表达式。

Parser递归下降优先级
阅读章节
🧱 已完成

第四章:AST 与语义模型

设计 Expr、Stmt、CallExpr 和 IfStmt,让语义阶段能稳定遍历 MiniLang 程序。

ASTExprStmt
阅读章节
📚 已完成

第五章:作用域与符号表

用 Scope 和 SymbolInfo 处理声明、查找、重复声明与未定义变量诊断。

ScopeSymbolInfo诊断
阅读章节
已完成

第六章:类型检查

实现 TypeChecker,检查 number、boolean、字符串、二元运算和函数返回值。

TypeCheckernumberboolean
阅读章节
🔁 已完成

第七章:中间表示 IR

把 AST 降低为 IRInstruction 和 BasicBlock,显式表示标签、跳转与控制流。

IRBasicBlock控制流
阅读章节
⚙️ 已完成

第八章:基础优化

实现常量折叠、死代码删除和简单跳转清理,并坚持语义正确先于速度。

优化常量折叠死代码
阅读章节
🖥️ 已完成

第九章:字节码与虚拟机

生成 Instruction,并在基于操作数栈、CallFrame 和 VM 的虚拟机中运行。

字节码VMInstruction
阅读章节
🧪 已完成

第十章:诊断、运行时与下一步

整理诊断、运行时错误、测试编译器的方法,并规划 WebAssembly 等扩展路径。

诊断测试WebAssembly
阅读章节