这个开源项目牛逼:牙医教你用450行Go代码写出一个编程语言

Go语言精选

共 1079字,需浏览 3分钟

 ·

2022-03-10 20:05

阅读本文大概需要 2 分钟。

大家好,我是 polarisxu。


没有系统学习过编译原理的同学可能会很好奇编程语言的编译器,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


解释说明一下,这个项目的作者是国人,昵称叫「牙医」,并非真的是牙科医生哈,别误解了~



推荐阅读


福利

我为大家整理了一份从入门到进阶的Go学习资料礼包,包含学习建议:入门看什么,进阶看什么。关注公众号 「polarisxu」,回复 ebook 获取;还可以回复「进群」,和数万 Gopher 交流学习。

浏览 17
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报