编程 450 行 Go 写出一门编程语言:手写 Lexer、Parser 和解释器

2026-09-12 09:45:33

用 450 行 Go 代码手写 Lexer、Parser 和解释器

没有系统学过编译原理的话,可能会好奇编程语言的编译器、Lexer & Parser、虚拟机到底是怎么实现的,同时又觉得系统性教材过于枯燥。如果你之前用的是动态语言,可能不会想到这一层;用了 Go 之后想深入源码,往往会产生类似的想法:如何更好地掌握 Go?Go 编译器到底是怎么实现的?

GitHub 上有一个项目,用 450 行 Go 代码实现了一门简单的编程语言。它的语法是这样的:

$a = "pen pineapple apple pen."
print($a)

语法看上去不复杂,但它包含了一个手写的递归下降解析器和一个简单的解释器。

这门语言叫 Pineapple Lang,甚至不是图灵完备的。写这门语言和配套教程的主要目的,是让编译原理初学者有一个预热,简单了解一门编程语言是怎么构建出来的。

运行方式:

$ cd examples/pineapple/
$ go build
$ ./pineapple hello-world.pineapple
pen pineapple apple pen.

可以直接看用 Markdown 编写的原始版本教程。

通过 Pineapple Lang 还衍生出许多其他语言版本的实现,诸如 Python、Typescript、Dart、Java、Ruby 等。

Typescript 版本是将代码转成 JavaScript 的 AST,然后使用 JavaScript 的解释器 canjs 执行代码。

如果想了解编译器是怎么回事,可以通过这个项目入门。

项目地址:https://github.com/karminski/write-a-programming-language-in-450-lines

补充一句,这个项目的作者是国人,昵称叫「牙医」,并不是真的牙科医生,别误解了。

复制全文 生成海报 Go 编译原理 解释器 开源项目

推荐文章

程序员茄子在线接单