构建简单的解释器
文章平均质量分 93
从零开始构建自己的解释器
D___H
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Part6_编写自己的解释器
保存上面的代码,自己去运行,并且看一看结果,验证一下在计算算术表达式时,是否能够在按照操作符的不同优先级进行计算的同时也能够正确处理括号表达式。在那篇文章中,表达式的基本组织单元只有整数。今天,我们要添加另外一个基本组织单元:括号表达式。首先,让我们修改BNF,使其支持带括号的表达式。我们的新BNF有一个有趣的特性:递归。)的解释器,从而基本结束我们对算术表达式的讨论。生成式和Part5中的完全一样,唯一的变化发生在。好了,让我们将最新版本的BNF翻译为代码吧!下面是修改后的带有分支选项的。原创 2026-01-03 11:45:42 · 98 阅读 · 0 评论 -
Part5_编写自己的解释器
如果你足够有毅力坚持下去,最后你一定会灵光一现,这是我对你的承诺(举个例子,如果我每天将25美分存下来,虽然当时我并不知道这有什么用,但是长久下去,我会变得富有。关于构建一个解释器或者编译器方面我能够给你的最恰到的建议就是:阅读文章中的解释、阅读代码、并且自己再去实现一遍代码,通过一段时间对相同代码的实现,你已经对所学内容和代码觉得自然之后,再去学习心得内容。在这种情况下,操作符的结合律对我们没有丝毫用处,因为结合律的作用范围必须是同种类型的操作符:要么是可加的(+, -),要么是可乘的(*, /)。原创 2026-01-02 10:00:33 · 645 阅读 · 0 评论 -
Part1_编写自己的解释器
在这个系列的最后,你将会拥有一个可以正常工作的Pascal解释器,以及一个源代码级别的调试器(类似于Python的pdb)。无论你是软件开发的新手还是经验丰富的老鸟,有一个规则都适用:如果你不知道编译器和解释器是如何工作的,那你就是不知道计算机是如何工作的。Pascal解释器的实现语言将会使用Python,但是你可以使用任何你想用的语言,这是因为原理是不依赖于具体语言的。的目标就是将用高等语言编写的源程序翻译为其它形式的语言。好了,现在我们该去探究你的解释器是如何工作的,以及它是怎样去计算算数表达式的。原创 2025-12-25 21:16:51 · 960 阅读 · 0 评论 -
Part2_编写自己的解释器
即使你对你现在使用的工具或者框架非常熟悉,去了解它们背后的原理也是非常重要的。python源代码中的一个符号实例对象就是符号的一个词素,比如Token(INTEGER, 2)是整数符号(INTEGER TOKEN)的一个词素。但是如果你学习了方法背后的原理,你就能发明属于自己的方法。得到的符号流中搜寻特定结构,然后将该结构解释为之前提到的短语,最后生成算术表达式的结果。在符号流中搜寻特定结构的过程,或者换一种说法,从符号流中识别一个短语的过程,该过程称之为。到了现在,你应该知道了,你编写的解释器的。原创 2025-12-27 21:01:02 · 483 阅读 · 0 评论 -
Part3_编写自己的解释器
你能够花费大量的时间去阅读数以百计的游泳数据,也能够和经验老道的游泳者和教练交流个把小时,还能够观看搜的到的所有训练视频,但是当你第一次跃入泳池的时候,你依旧像一块笨石头一样沉入水底。由于不同编程语言中对算术表达式的语法规则是非常相似的,因此我们可以使用Python shell去“测试”我们的语法示意图。语法示意图能够直观的向你展现,在你的编程语言中,哪些语句是被允许的,哪些语句是不被允许的。原则是:你对一个领域的知识不管理解、知晓的有多棒,为了能够训练出在该领域可行的技能,你必须要讲知识应用到实践中。原创 2025-12-28 16:12:16 · 949 阅读 · 0 评论 -
Part4_编写自己的解释器
你有没有热情地去学习本系列的内容呢?或者你有没有在学完之后很积极的去进行练习呢?我希望你已经积极的练习过了。我真的这么希望。还记得荀子说过的一句话吗?在之前的文章中,你已经学习了如何去解析和解释出现任意数量加号或减号操作符的算术表达式,例如:"7−3+2−1""7 - 3 + 2 - 1""7−3+2−1"。你也学习了语法示意图,以及怎样用语法示意图去定义具体的编程语言语法。今天,你将要学习如何去解析和解释出现任意数量乘号或除号操作符的算术表达式,例如:"7∗4。2∗1""7 * 4 。 2 * 1""7∗原创 2025-12-30 22:24:21 · 735 阅读 · 0 评论
分享