终于,Dragonfly的1.5发布了,进入了稳定开发期,我也终于有空来照顾一下我这个博客了,距离上一篇文章已经有一个多月了,这下我打算开一个持续更新的专栏,就是自制解释器。

对于编译原理和解释器原理,有很多理论书籍专门论述,传说中的“龙书”“虎书”“鲸书”就是这一类,但是它们太过专业,事实上要自制解释器,能用到的知识是否有十分之一都说不定,所以,网上也出现了很多通俗易懂的教程,但是它们几乎都是零散的文章,大多都不全面,很多都只讲到了词法分析,连语法分析都够不着,这显然又太过肤浅了。于是,我寄希望于《两周自制脚本语言》《自制解释器》等实战书籍,但它们过于重视实用性,使用了第三方的词法分析和语法分析工具(如lex/yacc/bison),却忽略了最核心最灵魂的部分,而这部分正是我们所欠缺的。于是,我找到了这个教程:计算机自制解释器 ,这个专栏真的非常好,我照着学习之后就写出了Dragonfly,不过,还有很多内容是这个教程没有写到,我自己琢磨出来的,所以我打算自己写一个专栏,既是对原教程的阐释和补充说明,也是更进阶的提升。

比之原教程,我的这个专栏侧重于设计思想,对于理论知识没有过多的讲解,不过我也相信,这样的方式更能锻炼编程和设计能力,有助于在实践中掌握编译原理,所以,这个专栏看了之后你不一定能学会很多晦涩难懂的术语,也不能把什么公式挂在嘴边,只是一行又一行最朴实无华的代码,却凝聚着非常精炼的设计思想,相信看了之后也会大有裨益。

那么,在既有原教程,又有我正在写的这个专栏的情况下,究竟参考哪一个呢?对此,我的推荐是,优先阅读原教程,对于做什么怎么做有了了解之后,再来看我的教程,知道怎样才能做得好。原教程已经更新完成,而本专栏尚在持续更新中,所以,很多内容当然是原教程更为完整,另外,本专栏更新周期长,所以节奏快,可能会略去原教程中部分不必要的成分,而普通的一章就可能有原教程两三章的内容,所以,这需要你有坚实的Python基础和算法基础,如果你的基础并不十分好,那么建议你先彻底的阅读原教程后,再来阅读进阶的内容;如果你有很好的基础,并且想要挑战自己,那么,也不妨在没有读过原教程的情况下,直接学习本专栏。总而言之,本专栏适合于那些对编译原理和自制解释器感兴趣,有一定算法和Python基础,并且希望实际操作的人来学习。

如果你看完了上面的内容,并且对此很有兴趣,那么,让我们开始吧。下一章我们会讲:解释器的必要成分,这将是为数不多的理论教程之一。