想写个编程语言,从哪儿开始下手?
尝试开始写短点,多写点,类似#浴室沉思#也不嫌弃。
想写个编程语言,从哪儿开始下手?速答:打开编辑器就下手,写就对了。
如果不是想太helloworld的话,那做个编程语言,我理解就是两个基本需求:
- 能用
- 好用
能用:基础需求,一个语言要满足普通的编程需求,两点就够了:
- 图灵完备,化简一下:得有
for和if, 能读写变量,有简单的操作(+-*/) - 能做一些
syscall,化简一下:先得有个printf吧。
好用:nice-to-have需求,比如 function (subroutine) 、while、更多的sprintf、operators 等等。
至于为啥又是 nice-to-have 又是基本需求?因为没这些功能,很多测试用例你自己都不想写。
一些关键的 component 的实现 (in my option):
-
tokenizerlexer: 用库也行,手写也不复杂,其实就一个状态机,一点一点吃源码吐token。 parser:recursive descent parser还是很值得手写一次的,然后就是处理expression的各种经典算法了 (pratt parsing等)。execution(runtime): 可以直接当成 scripting 就解释执行了。有点追求就 emitting bytecode,当下最流行的就是编译成 wasm 了。最正经的肯定是用 LLVM backend,不过可能会搞错重点,想深入了解 LLVM 可以考虑。