
编译原理
文章平均质量分 93
Dontla
这个作者很懒,什么都没留下…
展开
-
【编译原理】构建一个简单的解释器(Let’s Build A Simple Interpreter. Part 9.)(笔记)语法分析(未完,先搁置了!)
【编译原理】让我们来构建一个简单的解释器(Let’s Build A Simple Interpreter. Part 9.)文章目录spi.pyspi_lexer我记得当我在大学(很久以前)学习系统编程时,我相信唯一“真正”的语言是汇编和 C。而 Pascal 是——怎么说好一点——一种非常高级的语言不想知道幕后发生了什么的应用程序开发人员。那时我几乎不知道我会用 Python 编写几乎所有东西(并且喜欢它的每一点)来支付我的账单,而且我还会因为我在第一篇文章中提到的原因为 Pascal 编写解释器原创 2021-08-02 11:55:36 · 625 阅读 · 0 评论 -
【编译原理】构建一个简单的解释器(Let’s Build A Simple Interpreter. Part 8.)(笔记)一元运算符正负(+,-)
【编译原理】让我们来构建一个简单的解释器(Let’s Build A Simple Interpreter. Part 8.)文章目录C语言代码(作者没提供完整的python代码,关键的改动提供了,在上面,完整的python代码这里略掉)今天我们将讨论一元运算符,即一元加(+)和一元减(-)运算符。今天的很多资料都基于上一篇文章中的资料,因此如果您需要复习,请返回第 7 部分并再次阅读。请记住:重复是所有学习之母。话虽如此,这就是你今天要做的:扩展语法以处理一元加号和一元减号运算符添加一个新的原创 2021-07-30 10:51:03 · 741 阅读 · 1 评论 -
【编译原理】构建一个简单的解释器(Let’s Build A Simple Interpreter. Part 7.)(笔记)解释器 interpreter 解析器 parser 抽象语法树AST
【编译原理】让我们来构建一个简单的解释器(Let’s Build A Simple Interpreter. Part 7.)文章目录python代码正如我上次向您保证的那样,今天我将讨论我们将在本系列的其余部分中使用的中心数据结构之一,所以系好安全带,让我们开始吧。到目前为止,我们将解释器(interpreter )和解析器(parser )代码混合在一起,一旦解析器识别出某种语言结构,如加法、减法、乘法或除法,解释器就会对表达式求值。这种解释器被称为语法导向解释器。它们通常对输入进行一次传递,适用原创 2021-07-29 11:57:40 · 1609 阅读 · 0 评论 -
【编译原理】让我们来构建一个简单的解释器(Let’s Build A Simple Interpreter. Part 6.)(python/c/c++版)(笔记)
【编译原理】让我们来构建一个简单的解释器(Let’s Build A Simple Interpreter. Part 4.)文章目录python代码C语言代码总结今天是这一天:) “为什么?” 你可能会问。原因是今天我们结束了对算术表达式的讨论(好吧,几乎)通过在我们的语法中添加括号表达式并实现一个解释器,该解释器将能够评估具有任意深度嵌套的括号表达式,例如表达式 7 + 3 * (10 / (12 / (3 + 1) - 1))。让我们开始吧,好吗?首先,让我们修改语法以支持括号内的表达式。正如原创 2021-07-21 16:46:33 · 433 阅读 · 0 评论 -
【编译原理】让我们来构建一个简单的解释器(Let’s Build A Simple Interpreter. Part 5.)(python/c/c++版)(笔记)Lexer词法分析程序
【编译原理】让我们来构建一个简单的解释器(Let’s Build A Simple Interpreter. Part 5.)文章目录python代码C语言代码总结你如何处理像理解如何创建解释器或编译器这样复杂的事情?一开始,这一切看起来都像是一团乱七八糟的纱线,您需要将其解开才能获得完美的球。到达那里的方法是将它解开一根线,一次解开一个结。但是,有时您可能会觉得自己没有立即理解某些内容,但您必须继续前进。如果你足够坚持,它最终会“咔哒”一声,我向你保证(哎呀,如果我每次不明白某事时我就留出 25 美原创 2021-07-20 11:49:33 · 496 阅读 · 0 评论 -
【编译原理】让我们来构建一个简单的解释器(Let’s Build A Simple Interpreter. Part 4.)(python/c/c++版)(笔记)
【编译原理】让我们来构建一个简单的解释器(Let’s Build A Simple Interpreter. Part 4.)文章目录在上一篇文章中,您学习了如何解析(识别)和解释包含任意数量的加号或减号运算符的算术表达式,例如“7 - 3 + 2 - 1”。您还了解了语法图以及如何使用它们来指定编程语言的语法。今天,您将学习如何解析和解释包含任意数量的乘法和除法运算符的算术表达式,例如“7 * 4 / 2 * 3”。本文中的除法将是一个整数除法,所以如果表达式是“9 / 4”,那么答案将是一个整数:原创 2021-07-19 21:18:30 · 351 阅读 · 0 评论 -
【编译原理】让我们来构建一个简单的解释器(Let’s Build A Simple Interpreter. Part 3.)(python/c/c++版)(笔记)
【编译原理】让我们来构建一个简单的解释器(Let’s Build A Simple Interpreter. Part 3.)文章目录python代码calc3.pyC语言代码(calc3.cpp)(有bug,最后面数字后不能有空格,否则报错)C语言代码(修复版,跳空格放在判断结束符前执行,所以用户输入最后面可包含空格)总结到目前为止,您已经学习了如何解释对两个整数进行加减运算的算术表达式,例如“7 + 3”或“12 - 9”。今天我将讨论如何解析(识别)和解释包含任意数量的加号或减号运算符的算术表达式原创 2021-07-16 11:53:57 · 290 阅读 · 0 评论 -
【编译原理】让我们来构建一个简单的解释器(Let’s Build A Simple Interpreter. Part 2.)(python/c/c++版)(笔记)
【编译原理】让我们来构建一个简单的解释器(Let’s Build A Simple Interpreter. Part 2.)文章目录python代码c代码总结让我们再次深入研究解释器和编译器。今天,我将向您展示第 1 部分中计算器的新版本,它将能够:1、处理输入字符串中任意位置的空白字符2、从输入中使用多位整数3、两个整数相减(目前只能相加)与第 1 部分的版本相比,主要的代码变化 是:1、该get_next_token方法重构了一下。增加pos指针的逻辑被分解为一个单独的方法Advanc原创 2021-07-15 10:49:43 · 463 阅读 · 0 评论 -
【编译原理】让我们来构建一个简单的解释器(Let’s Build A Simple Interpreter. Part 1.)(python/c/c++版)(笔记)
原文:Let’s Build A Simple Interpreter. Part 1.文章目录【编译原理】让我们来构建一个简单的解释器(Let’s Build A Simple Interpreter. Part 1.)(python/c/c++版)(part 1)将输入字符串分解为token标记的过程称为词法分析(lexical analysis),词法分析器( lexical analyzer或 lexer )也叫扫描器(scanner )或标记器(tokenizer)。用c/c++实现【编译原理原创 2021-07-07 22:48:56 · 446 阅读 · 0 评论