阅读本文大概需要 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
解释说明一下,这个项目的作者是国人,昵称叫「牙医」,并非真的是牙科医生哈,别误解了~
我是 polarisxu,北大硕士毕业,曾在 360 等知名互联网公司工作,10多年技术研发与架构经验!2012 年接触 Go 语言并创建了 Go 语言中文网!著有《Go语言编程之旅》、开源图书《Go语言标准库》等。
坚持输出技术(包括 Go、Rust 等技术)、职场心得和创业感悟!欢迎关注「polarisxu」一起成长!也欢迎加我微信好友交流:gopherstudio