Monkey 是什么
Monkey 是 Thorsten Ball 在《Writing an Interpreter in Go》里从零实现的一门玩具语言。它的语法像一小块 JavaScript 或 Go:
let square = fn(x) { x * x };
map([1, 2, 3, 4], square)
[1, 4, 9, 16]
本站 bin/ 里的 Monkey 是这个解释器的一个 Go 实现,额外做了一点 CLI 化改造:支持 -e、脚本文件、管道和真正的 pty 交互。
它能做什么
- 整数、字符串、布尔值、数组、哈希
let绑定、fn函数、闭包、递归if表达式、return- 宏:
macro、quote、unquote - 一批内置函数,以及预置的
map/reduce/sum/fibonacci/unless
它不是生产语言:没有浮点数、没有循环(用递归代替),标识符只能是字母和下划线,标准库里也只有几个函数。但它足够小,适合拿来做实验、讲解释器,或者在这个博客的终端里随手算点东西。
这个实现的小脾气
- 交互模式按行解析:
fn、if这类结构要写在一行里;多行程序放进脚本文件。 - 标识符不能带数字:
addOne可以,add1不行。 //是注释,没有块注释。- 整数除法会截断:
5 / 2得到2。 puts把每个参数单独打印一行,并返回null。
想继续看语法,可以读 Monkey 基本语法;想知道怎么在这个站点里调用它,看 在 ssh-blog 里使用 Monkey。