JimLang 编译流水线
源代码
字符流输入
↓ 词法分析
Lexer
Token 流 · 手写状态机 · ANTLR4
↓ 语法分析
Parser
AST · 递归下降 · Pratt 解析
↓ 语义分析
Resolver
作用域 · 符号表 · 闭包分析
↓ 执行
Interpreter
树遍历 · Environment 链 · 闭包
↓ 编译优化
Bytecode Compiler
OpCode · Chunk · 跳转回填
↓ 运行时
Stack VM
操作数栈 · CallFrame · GC
Java 实战课程 · 30 章

从零写
编程语言

以 JimLang 开源项目为主线,亲手实现词法分析、递归下降 Parser、树遍历解释器、字节码编译器、栈式虚拟机与垃圾回收。不调黑盒,全程手写。

查看课程模块 GitHub 源码
30
章节
10
模块
2
执行引擎
Java 21
技术栈
这门课适合谁?

找到与你相似的学员

不同背景的学员,都能从这门课中获得价值

小李 - 编译原理苦手
大三/大四 · 编译原理课听不懂
痛点

不理解词法分析→语法分析→AST流程,面试被问解释器和编译器的区别答不上来

学完后

能用 Java 实现一个完整的脚本语言,理解 Lexer/Parser/Interpreter 原理,面试编译器岗不虚

小王 - DSL 设计者
工作 3 年 · 要设计配置 DSL
痛点

用 ANTLR4 但不懂原理,出错不会改,想自己实现一个轻量级解释器

学完后

能给公司设计并实现配置 DSL,能优化解析性能,能给团队做技术分享

老张 - 语言爱好者
想设计自己的编程语言
痛点

看过 Python/JavaScript 源码但太复杂,想从简单的解释器学起

学完后

能实现自己的脚本语言(支持变量、函数、闭包),发布到 GitHub,参与语言设计讨论

查看完整学习路径
课程模块

10 大模块,覆盖语言实现全栈

从词法分析到字节码虚拟机,两条执行路径(树遍历解释器 + 栈式 VM),每章配套可运行 Demo 和单元测试。

01
Ch01–02
破冰篇

编程语言是什么、不是什么。解释器 vs 编译器,代码的完整旅程,JimLang 整体架构导览。

Lexer→Parser→Resolver→Interpreter 流水线
02
Ch03–05
词法分析

Token 体系,手写状态机 Lexer,关键字/字符串/数字/注释处理,ANTLR4 词法规则对比。

手写 Lexer · ANTLR4 · Token 流可视化
03
Ch06–08
语法分析

CFG/BNF/EBNF,递归下降 Parser,Pratt 运算符优先级解析,AST 节点设计,ANTLR4 对比。

递归下降 · Pratt · AST 构建
04
Ch09–10
语义分析

词法作用域,符号表,变量解析,闭包分析,动态类型检查与类型错误报告。

作用域 · 符号表 · 闭包分析
05
Ch11–14
解释执行

Visitor 模式树遍历解释器,Environment 链,函数对象与闭包捕获,class/this/super 面向对象。

Visitor · Environment · 闭包 · OOP
06
Ch15–16
错误处理

try/catch/throw 异常传播,错误同步与恢复,友好错误信息,行号定位。

异常传播 · 错误恢复 · 行号定位
07
Ch17–19
标准库

内置函数(print/clock/len/type),list/map 集合类型,迭代器模式,字符串处理与格式化。

内置函数 · 集合 · 字符串
08
Ch20–24
字节码 VM

18 条 OpCode 指令集,字节码编译器(表达式+语句),栈式虚拟机,CallFrame 函数调用帧。

OpCode · Chunk · 栈式 VM · CallFrame
09
Ch25–26
运行时

标记清除 GC,可达性分析,循环引用,三色标记。REPL 实现:多行检测,错误恢复。

标记清除 GC · 三色标记 · REPL
10
Ch27–30
综合实战

完整语言演示,树遍历 vs VM 性能对比,常量折叠,扩展方向:静态类型、JIT、协程。

性能测试 · 扩展方向 · 学习路线
🔤
手写 Lexer + Parser

不依赖任何解析器生成工具,从字符流到 Token 流,再到 AST,全程手写。同时对比 ANTLR4 方案,理解工具背后的原理。

状态机递归下降Pratt 解析ANTLR4
🔄
两条执行路径

先实现树遍历解释器(直接遍历 AST 执行),再实现字节码编译器 + 栈式 VM。通过性能对比,深刻理解两种方案的权衡。

树遍历字节码栈式 VM性能对比
🗑️
垃圾回收

从零实现标记清除 GC:可达性分析,循环引用处理,三色标记算法。理解 JVM/V8 GC 的底层原理。

标记清除可达性分析三色标记循环引用
📦
闭包与面向对象

函数对象、Upvalue 捕获、高阶函数,class 定义、this 绑定、单继承、super 调用。完整实现现代脚本语言的核心特性。

闭包Upvalueclass继承
技术栈

现代 Java,全程手写

使用 Java 21 新特性(sealed interface、record、pattern matching)实现语言核心,ANTLR4 作为对比工具。

Java 21
sealed interface, record, pattern matching
ANTLR4
词法/语法分析对比工具
Maven
多模块构建,每章独立子模块
JUnit 5
每章内置单元测试
← 熵减智算