
从0自制解释器
文章平均质量分 83
aluluka
这个作者很懒,什么都没留下…
展开
-
从0开始自制解释器——重构代码
在上一篇文章中,完成了对括号的支持,这样整个程序就可以解析普通的算术表达式了。但是在解析两个括号的过程中发现有大量的地方需要进行索引的回退操作,索引的操作应该保证能得到争取的token,这个步骤应该放在词法分析的阶段,如果在语法分析阶段还要考虑下层词法分析的过程,就显得有些复杂了。而且随着后续支持的符号越来越多,可能又得在大量的地方进行这种索引变更的操作,代码将难以理解和维护。因此这里先停下来进行一次代码的重构。原创 2023-04-08 18:49:44 · 596 阅读 · 1 评论 -
从0开始自制解释器——添加对括号的支持
在上一篇我们添加了对乘除法的支持,也介绍了BNF范式,并且针对当前的算术表达式写出了对应的范式,同时根据范式给出相应的代码实现。这篇我们将继续为算数表达式添加对括号的支持。原创 2023-03-24 17:50:48 · 410 阅读 · 0 评论 -
从0开始自制解释器——添加对乘除法的支持
在上一篇中,我们实现了对减法的支持,并且介绍了语法图。针对简单的语法进行描述,用语法图描述当然是没问题的。但是针对一些复杂的语法进行描述,如果每个部分都通过语法图来描述就显得有些繁琐了。这篇我们先介绍另一种描述语法的方式,并进一步介绍一些关于语法分析的知识。原创 2023-03-22 16:51:42 · 340 阅读 · 0 评论 -
从0开始自制解释器——实现多个整数的加减法
在上一篇我们实现了一个可以计算两个多位整数加减法的计算器。本章我们继续来给这个计算器添加功能,这次要给它添加可以连续计算多个整数相加减的功能。例如我们可以计算1 + 2 + 3这样的表达式。原创 2023-03-14 17:42:20 · 305 阅读 · 0 评论 -
从0开始自制解释器——实现多位整数的加减法计算器
最后来一个总结。本篇我们对上一次的加法计算器进行了简单的改造,支持加减法、能跳过空格并且能够计算多位整数。在上一篇文章中,我们提到了Token,并且说过,像这样给字符串每个部分打上Token的过程就是词法分析。这部分代码可以被称之为词法分析器。这篇我们再来介绍一下其他的概念。词位(lexeme):词位的中文解释是语言词汇的基本单位。例如汉语的词位是汉字,英语的词位是基本的英文字母。对于我们这个加法计算器来说基本的词位就是数字以及+\-这两个符号。原创 2023-03-08 13:13:30 · 510 阅读 · 2 评论 -
从0开始自制解释器——实现简单的加法计算器
程序我们已经写完了,你可能觉得这个程序太简单了,只能做这点事情。别着急,后面将会逐步的去完善这个程序。以便它能实现更加复杂的运算。我们将输入内容按照一定规则打上的标记被称之为Token上述get_next_token函数体现的将一段字符串分割并打上有意义的标签的过程被称为词法分析。解释器工作的第一步就是将输入的字符串按照一定的规则转换为一系列有意义的标记。完成这个工作的组件被称之为词法分析器,也可以被称为扫描器或者分词器。原创 2023-03-07 11:42:30 · 568 阅读 · 0 评论 -
从0开始自制解释器——综述
当初看过《疯狂的程序员》这本书,书里说,真正能学会编译原理并不是靠看各种书然后通过相关考试,而是有一天你的领导找到你对你说:“小X啊,你是我们公司技术能力最强的人,咱们现在用的编译器性能有点跟不上,要不你看看能不能改进一下”。之前也看过类似的教你如何自制编译器,但是他们有一个共同的问题就是在很大程度上都借助第三方工具,隐藏了一些底层的细节。我希望的是每一行代码都是自己的完成的。而且根据我之前写的Vim专栏的经验来说,将它已专栏的形式发布出来之后鸽的可能性更小,更有动力来完成它。,我打算实用最纯粹的。原创 2023-03-04 11:10:35 · 480 阅读 · 0 评论