数据结构allocator内存池内存池V2traits,construct&destructvectorlistrbtreemap&sethashtablehash_map&hash_set算法 Read More
在沉默了数月之后,博主心血来潮想继续介绍QParserGenerator,在这里我们将不再继续介绍任何有关于LALR(1)的算法(那东西只会把你的脑子变成一团浆糊),让我们来看一下QParserGenerator的具体用法。说到ParserGenerator不得不提的是BNF,应此QParserGenerator也有它自己的BNF,这时有人会问BNF究竟是什么呢?简单的说BNF就是用来描述一种语法的东西,比如在Basic中If后面跟表达式然后是Then中间是语句块末尾必须要有End If等等的一系列描述,更专业的解释我们可以看一下维基百科上的解释。好了,说完了BNF那让我们来看一下QParse Read More
其实早就想写本文了,一直想缅怀一下过去的自己。说是说5年,其实在很久之前我已经用按键游侠(一个用VBS作为引擎的东西)开始写脚本了,说起编程还需要感谢猪哥,是他将我带入了编程这一领域(可悲的是现在都找不到QQ列表中的哪位了,猪哥希望您看到这篇文章之后能联系我)。5年前,我性质匆匆的买来了一本VC6和VS2005(好像是这个版本)入门的书打算开始学习C++(目前这两本书在某个妹子手里)。然后开始了漫长的C++学习之旅,记得当时我是一边摸索着学习C++的语法,一边在写按键娃娃(值得庆幸的是目前这货居然还能搜的到),下面我们来看一段有意思的代码。 可以看到当时的我是多么的稚嫩,居然把一个功能函数.. Read More
接上一篇,首先需要修正的是在DFA生成算法中的传播部分,应该需要有个循环一直传播到不能传播为止,在多次实验中表明,有些展望符是通过第2,3,4甚至更多次传播得来的。应此,相应的make函数变成了Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> boolLALR1::make(){vector<LALR1Production>v;v.push_back(inputProductions[begin][0]);pStart=closu Read More
以下所说的文法文件均为QParserGenerator的文法文件产生式我们将文法文件中形如Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->strings->strings"{String}"|"{String}";形式的式子称为产生式,它由它的左端非终结符(strings)和右端终结符和非终结符组成。非终结符:非终结符总是出现在产生式的左端,它表示这个条目是由右侧的一些终结符和非终结符推导而来的。 Read More
QCore/Library说明文档 李文超前言QCore/Library是一套类STL的类库,它在标准库的范围内删去了不常用的heap、deque等结构(至少我是不常用的)。并为一些容器提供了一些特殊的接口,比如vector中的push_back_unique、add和add_unique等。Library主要分为六部分,内存调试相关、容器、算法、正则、IO和Graphic,每个模块都有各自的分工,他们之间的耦合度极低,几乎每个模块都可以拆出来独立使用,下面来分别介绍各个模块。内存调试我们知道,在C/C++中内存相关的东西是极难控制的,在使用不当时可能造成各种错误,轻则内存泄漏,重则程序崩溃。 Read More
接上一篇我们已经得到了一个完整的ε-NFA,下面来说说如何将ε-NFA转换为DFA(确定有限自动机)。DFA的状态在DFA中,某个状态对应到ε-NFA中的若干状态,应此我们将会得到下面这样的一个结构。 struct DFA_State { set<EpsilonNFA_State*> content; bool bFlag;#ifdef _DEBUG uint idx;#endif DFA_State(con... Read More
自动机关于自动机的说明,这里不不再复述,请到http://zh.wikipedia.org/wiki/自动机查看。表达式首先,我们规定表达式中只允许输入Char_Type和String_Type类型的字符。template <typename Char_Type, typename String_Type>class Rule{};ε-NFA的状态对于一个状态来说,我们并不需要知道他的任何信息在上面的代码中,为了调试方便,我为其加入了idx域,并为每个状态分配了一个唯一的ID。 struct EpsilonNFA_State {#ifdef _DEBUG ... Read More
在上一篇中我们已经实现了一个简单的内存池,可以申请更大块的内存块来减少申请小块内存块时产生的内存碎片。在本篇中,我们需要为其加入内存泄漏的检测代码,以此来检测代码编写过程中的疏忽带来的内存泄漏。(callstack的显示暂时仅支持Windows)一、内存泄漏检测首先,改写obj和block结构,在obj中加入一个域released表示这个chunk是否被释放Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->1structobj2{3#ifdef Read More
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> template<typenameT1,typenameT2>inlineconstboolcompare_type(T1,T2){returnfalse;}template<>inlineconstboolcompare_type(int,int){returntrue;}template<>inlineconstboolcompare_type(floa Read More
在STL中list是以双向链表的方式来存储的,应此使用给定的下标值来找到对应的节点所需的时间复杂度为O(n),相比vector直接使用原生指针会慢一些。因为是双向链表的关系,那么必然有一种结构来表示链表中的节点。Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> template<typenameT>struct__list_node{__list_node<T>*prev;__list_node<T>*ne Read More