这个开源项目牛逼:牙医教你用450行Go代码写出一个编程语言
共 1079字,需浏览 3分钟
·
2022-03-10 20:05
阅读本文大概需要 2 分钟。
没有系统学习过编译原理的同学可能会很好奇编程语言的编译器,Lexer & Parser,虚拟机是怎么实现的,同时又苦于系统性的教材过于枯燥。如果你之前用的动态语言,可能也不会想到这个层面,但用了 Go 后,想深入 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还衍生出许多Pineapple Lang的编程语言版本,诸如Python、Typescript、Dart、Java、Ruby等:
Typescript版本是将代码转成JavaScript的AST,然后使用javascript的解释器canjs执行代码。
简而言之,如果你想了解编译器是怎么回事,可以通过这个项目入门哦。最后附上项目地址:https://github.com/karminski/write-a-programming-language-in-450-lines
解释说明一下,这个项目的作者是国人,昵称叫「牙医」,并非真的是牙科医生哈,别误解了~
推荐阅读