最近在手搓红黑树时遇到一个问题:类模板的派生类使用智能指针时的向下转换错误,总之,经过一番研究,智能指针无法实现类模板指针的向下转换,最终还是用裸指针手动管理内存更加灵活。 ...
最近在手搓红黑树时遇到一个问题:类模板的派生类使用智能指针时的向下转换错误,总之,经过一番研究,智能指针无法实现类模板指针的向下转换,最终还是用裸指针手动管理内存更加灵活。 ...
在上一章中,我们完成了一个符号表,作为一个基础工作,接下来,我们要利用这个基础实现一个功能:语义分析。 语义分析 什么是语义分析?形如这样的代码: 在词法和语法层面,它都没有...
OK,接下来我们需要面对更加严肃的问题:如何构建一个真正的解释器?前几章的内容已经足够的有趣,但是仅仅是添加grammar,然后一步一步实现Lexer,AST nodes,S...
好吧在上一章中的Pascal语法并不准确,接下来,我们要修正那些语法错误,并加入更多的Pascal语言特性,本章我们将更接近真正的Pascal解释器,完成形如以下代码的解释:...
接下来的内容将更加硬核,我们距离创造自己的编程语言更近一步——实现一个初步的Pascal解释器。 Pascal 好吧这是一门古老的语言,在很久很久以前,我还是个初中生的时候稍...
这一章,我们要接触一些稍微硬核点的知识,理解一个概念——抽象语法树。 抽象语法树和语法解析树 对于文法: 当输入2*7+3时,可以构造成如下语法解析树: 很容易理解吧,但是这...
本章,我们将继续扩展我们的解释器,使其支持乘除运算符和运算符优先级,我们将更加深入编译原理,加入文法分析( grammar analysis )。 文法与文法分析 等一下,什...
这一章,我们将实现形如"1+12+123-123"这样连续的多位数加减法实现,为此,我们需要一点点编译原理。 语法图与语法分析 对于上述表达式,我们可以构建一个简单的语法图 ...
在上一篇中,我们实现了一个简单的加法解释器,它仅支持一位数加法,接下来,我们向解释器添加以下特性: 支持多位整数 可以跳过空格 支持减法 处理多位整数 上一篇中,我们直接使用...
参考:Let’s Build A Simple Interpreter.[https://ruslanspivak.com/lsbasi-part1/]源代码:github[...
OCP(Open-Closed Principle),通常认为是Bertrand Meyer[https://en.wikipedia.org/wiki/Bertrand_M...
引用 计算机专业大一的基础内容之一,值传递和引用传递: 这里会输出两个2: 当然用指针可以达到类似的效果,但不完全等价: 用指针太容易出现内存问题了,引用更加安全,指针可能会...
最近遇到了一个问题,一个平时运行没有毛病的模块,被ASAN报heap use after free,问题出在堆内存,但是看上去全局变量没有哪里会被释放,唯一有风险的地方是在栈...
进行面向对象程序设计的时候,我们需要面对很多问题,比如: 什么时候需要一个类 一个类应该包含哪些功能,不包含哪些功能 类之间的依赖关系设计 还有很多其它的问题,如果不遵照一些...
一个常见的定义module的方法是写一个.py文件,除此以外,Python的底层实现是C/C++,所以你也可以使用C/C++来写module,当然这是比较高级的方法了,暂时不...
类和对象,作为面向对象编程的核心,在所有OOP语言里面都是重头戏,Python也不例外。Python中的类和对象定义如下: 以class关键字开头,定义了一个foo类,并使用...
Python的类内成员函数是method类型,而普通函数是function类型,精确地来说,类成员函数应该被称为方法。通过以下代码,可以看到它们各自的类型: 输出结果: 和很...
区别于C/C++, java等编程语言,python是一门弱类型语言,如果你接触过perl或者JS之类的弱类型语言,那么对这个特性应该不陌生。当然即使是动态类型语言,变量也是...
前言:因为嫌弃通过参数启动过于繁琐,并且对于需要进行分支选择的情况不好处理,想使用命令行按键菜单的形式给用户做选择,结果居然发现python没有提供现成的API,于是研究了一...
前言:Python很方便,平时工作偶尔用来做一些小工具,需要参考的时候百度搜出来的东西实在不靠谱,遂决定根据官网的文档系统地学习一下,顺便给中文Python学习资料增加一点内...