博客园 - lwch
uuid:24b78886-0ed1-41c2-8670-e3f31dcf42c4;id=147616
2018-04-23T00:20:15Z
lwch
https://www.cnblogs.com/lwch/
feed.cnblogs.com
https://www.cnblogs.com/lwch/p/3358793.html
QParserGenerator的文法文件介绍 - lwch
在沉默了数月之后,博主心血来潮想继续介绍QParserGenerator,在这里我们将不再继续介绍任何有关于LALR(1)的算法(那东西只会把你的脑子变成一团浆糊),让我们来看一下QParserGenerator的具体用法。说到ParserGenerator不得不提的是BNF,应此QParserGenerator也有它自己的BNF,这时有人会问BNF究竟是什么呢?简单的说BNF就是用来描述一种语法的东西,比如在Basic中If后面跟表达式然后是Then中间是语句块末尾必须要有End If等等的一系列描述,更专业的解释我们可以看一下维基百科上的解释。好了,说完了BNF那让我们来看一下QParse
2013-10-09T03:19:00Z
2013-10-09T03:19:00Z
lwch
https://www.cnblogs.com/lwch/
【摘要】在沉默了数月之后,博主心血来潮想继续介绍QParserGenerator,在这里我们将不再继续介绍任何有关于LALR(1)的算法(那东西只会把你的脑子变成一团浆糊),让我们来看一下QParserGenerator的具体用法。说到ParserGenerator不得不提的是BNF,应此QParserGenerator也有它自己的BNF,这时有人会问BNF究竟是什么呢?简单的说BNF就是用来描述一种语法的东西,比如在Basic中If后面跟表达式然后是Then中间是语句块末尾必须要有End If等等的一系列描述,更专业的解释我们可以看一下维基百科上的解释。好了,说完了BNF那让我们来看一下QParse <a href="https://www.cnblogs.com/lwch/p/3358793.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lwch/p/3141437.html
5年编程之旅 - lwch
其实早就想写本文了,一直想缅怀一下过去的自己。说是说5年,其实在很久之前我已经用按键游侠(一个用VBS作为引擎的东西)开始写脚本了,说起编程还需要感谢猪哥,是他将我带入了编程这一领域(可悲的是现在都找不到QQ列表中的哪位了,猪哥希望您看到这篇文章之后能联系我)。5年前,我性质匆匆的买来了一本VC6和VS2005(好像是这个版本)入门的书打算开始学习C++(目前这两本书在某个妹子手里)。然后开始了漫长的C++学习之旅,记得当时我是一边摸索着学习C++的语法,一边在写按键娃娃(值得庆幸的是目前这货居然还能搜的到),下面我们来看一段有意思的代码。 可以看到当时的我是多么的稚嫩,居然把一个功能函数..
2013-06-17T15:24:00Z
2013-06-17T15:24:00Z
lwch
https://www.cnblogs.com/lwch/
【摘要】其实早就想写本文了,一直想缅怀一下过去的自己。说是说5年,其实在很久之前我已经用按键游侠(一个用VBS作为引擎的东西)开始写脚本了,说起编程还需要感谢猪哥,是他将我带入了编程这一领域(可悲的是现在都找不到QQ列表中的哪位了,猪哥希望您看到这篇文章之后能联系我)。5年前,我性质匆匆的买来了一本VC6和VS2005(好像是这个版本)入门的书打算开始学习C++(目前这两本书在某个妹子手里)。然后开始了漫长的C++学习之旅,记得当时我是一边摸索着学习C++的语法,一边在写按键娃娃(值得庆幸的是目前这货居然还能搜的到),下面我们来看一段有意思的代码。 可以看到当时的我是多么的稚嫩,居然把一个功能函数.. <a href="https://www.cnblogs.com/lwch/p/3141437.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lwch/archive/2013/05/30/3109433.html
QParserGenerator代码分析二(A fix&An example) - lwch
接上一篇,首先需要修正的是在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
2013-05-30T15:07:00Z
2013-05-30T15:07:00Z
lwch
https://www.cnblogs.com/lwch/
【摘要】接上一篇,首先需要修正的是在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 <a href="https://www.cnblogs.com/lwch/archive/2013/05/30/3109433.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lwch/archive/2013/05/12/3074658.html
QParserGenerator代码分析一(生成LALR1 DFA) - lwch
以下所说的文法文件均为QParserGenerator的文法文件产生式我们将文法文件中形如Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->strings->strings"{String}"|"{String}";形式的式子称为产生式,它由它的左端非终结符(strings)和右端终结符和非终结符组成。非终结符:非终结符总是出现在产生式的左端,它表示这个条目是由右侧的一些终结符和非终结符推导而来的。
2013-05-12T14:37:00Z
2013-05-12T14:37:00Z
lwch
https://www.cnblogs.com/lwch/
【摘要】以下所说的文法文件均为QParserGenerator的文法文件产生式我们将文法文件中形如Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->strings->strings"{String}"|"{String}";形式的式子称为产生式,它由它的左端非终结符(strings)和右端终结符和非终结符组成。非终结符:非终结符总是出现在产生式的左端,它表示这个条目是由右侧的一些终结符和非终结符推导而来的。 <a href="https://www.cnblogs.com/lwch/archive/2013/05/12/3074658.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lwch/archive/2013/04/30/3052389.html
QCore/Library说明文档 - lwch
QCore/Library说明文档 李文超前言QCore/Library是一套类STL的类库,它在标准库的范围内删去了不常用的heap、deque等结构(至少我是不常用的)。并为一些容器提供了一些特殊的接口,比如vector中的push_back_unique、add和add_unique等。Library主要分为六部分,内存调试相关、容器、算法、正则、IO和Graphic,每个模块都有各自的分工,他们之间的耦合度极低,几乎每个模块都可以拆出来独立使用,下面来分别介绍各个模块。内存调试我们知道,在C/C++中内存相关的东西是极难控制的,在使用不当时可能造成各种错误,轻则内存泄漏,重则程序崩溃。
2013-04-30T12:36:00Z
2013-04-30T12:36:00Z
lwch
https://www.cnblogs.com/lwch/
【摘要】QCore/Library说明文档 李文超前言QCore/Library是一套类STL的类库,它在标准库的范围内删去了不常用的heap、deque等结构(至少我是不常用的)。并为一些容器提供了一些特殊的接口,比如vector中的push_back_unique、add和add_unique等。Library主要分为六部分,内存调试相关、容器、算法、正则、IO和Graphic,每个模块都有各自的分工,他们之间的耦合度极低,几乎每个模块都可以拆出来独立使用,下面来分别介绍各个模块。内存调试我们知道,在C/C++中内存相关的东西是极难控制的,在使用不当时可能造成各种错误,轻则内存泄漏,重则程序崩溃。 <a href="https://www.cnblogs.com/lwch/archive/2013/04/30/3052389.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lwch/archive/2013/02/23/2923870.html
词法分析器2(ε-NFA到DFA的转换) - lwch
接上一篇我们已经得到了一个完整的ε-NFA,下面来说说如何将ε-NFA转换为DFA(确定有限自动机)。DFA的状态在DFA中,某个状态对应到ε-NFA中的若干状态,应此我们将会得到下面这样的一个结构。 struct DFA_State { set<EpsilonNFA_State*> content; bool bFlag;#ifdef _DEBUG uint idx;#endif DFA_State(con...
2013-02-23T15:34:00Z
2013-02-23T15:34:00Z
lwch
https://www.cnblogs.com/lwch/
【摘要】接上一篇我们已经得到了一个完整的ε-NFA,下面来说说如何将ε-NFA转换为DFA(确定有限自动机)。DFA的状态在DFA中,某个状态对应到ε-NFA中的若干状态,应此我们将会得到下面这样的一个结构。 struct DFA_State { set<EpsilonNFA_State*> content; bool bFlag;#ifdef _DEBUG uint idx;#endif DFA_State(con... <a href="https://www.cnblogs.com/lwch/archive/2013/02/23/2923870.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lwch/archive/2013/02/15/2912916.html
词法分析器1(正则表达式到ε-NFA的转换) - lwch
自动机关于自动机的说明,这里不不再复述,请到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 ...
2013-02-15T12:33:00Z
2013-02-15T12:33:00Z
lwch
https://www.cnblogs.com/lwch/
【摘要】自动机关于自动机的说明,这里不不再复述,请到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 ... <a href="https://www.cnblogs.com/lwch/archive/2013/02/15/2912916.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lwch/archive/2013/01/19/2868000.html
山寨STL实现之内存池V2 - lwch
在上一篇中我们已经实现了一个简单的内存池,可以申请更大块的内存块来减少申请小块内存块时产生的内存碎片。在本篇中,我们需要为其加入内存泄漏的检测代码,以此来检测代码编写过程中的疏忽带来的内存泄漏。(callstack的显示暂时仅支持Windows)一、内存泄漏检测首先,改写obj和block结构,在obj中加入一个域released表示这个chunk是否被释放Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->1structobj2{3#ifdef
2013-01-19T12:16:00Z
2013-01-19T12:16:00Z
lwch
https://www.cnblogs.com/lwch/
【摘要】在上一篇中我们已经实现了一个简单的内存池,可以申请更大块的内存块来减少申请小块内存块时产生的内存碎片。在本篇中,我们需要为其加入内存泄漏的检测代码,以此来检测代码编写过程中的疏忽带来的内存泄漏。(callstack的显示暂时仅支持Windows)一、内存泄漏检测首先,改写obj和block结构,在obj中加入一个域released表示这个chunk是否被释放Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->1structobj2{3#ifdef <a href="https://www.cnblogs.com/lwch/archive/2013/01/19/2868000.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lwch/archive/2012/08/25/2656712.html
如何比较两个变量的类型是否相同 - lwch
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
2012-08-25T08:14:00Z
2012-08-25T08:14:00Z
lwch
https://www.cnblogs.com/lwch/
【摘要】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 <a href="https://www.cnblogs.com/lwch/archive/2012/08/25/2656712.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lwch/archive/2012/08/09/2630917.html
山寨STL实现之list - lwch
在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
2012-08-09T13:23:00Z
2012-08-09T13:23:00Z
lwch
https://www.cnblogs.com/lwch/
【摘要】在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 <a href="https://www.cnblogs.com/lwch/archive/2012/08/09/2630917.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lwch/archive/2012/07/15/2592653.html
山寨STL实现之vector - lwch
首先是vector的定义 template <typename T> class vector { };让我们先来看看vector中的一些别名 public: typedef T value_type; typedef T* pointer; typedef T& reference; typedef const T& const_reference; typedef s...
2012-07-15T12:25:00Z
2012-07-15T12:25:00Z
lwch
https://www.cnblogs.com/lwch/
【摘要】首先是vector的定义 template <typename T> class vector { };让我们先来看看vector中的一些别名 public: typedef T value_type; typedef T* pointer; typedef T& reference; typedef const T& const_reference; typedef s... <a href="https://www.cnblogs.com/lwch/archive/2012/07/15/2592653.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lwch/archive/2012/07/15/2592640.html
山寨STL实现之traits,construct&destruct - lwch
traits技术被广泛应用于STL中,通过它您可以轻松的萃取出一个对象的特性。在STL中也是通过它来实现性能的最优化,比如一个对象是个POD对象(Plain Old Data),则在拷贝过程中直接可以通过memcpy等函数拷贝,而无需调用拷贝构造函数或operator=。先来看看STL中最基本的对象iterator template <typename T, typename Size = size_t, typename Difference = ptrdiff_t> struct iterator { typedef T ...
2012-07-15T12:15:00Z
2012-07-15T12:15:00Z
lwch
https://www.cnblogs.com/lwch/
【摘要】traits技术被广泛应用于STL中,通过它您可以轻松的萃取出一个对象的特性。在STL中也是通过它来实现性能的最优化,比如一个对象是个POD对象(Plain Old Data),则在拷贝过程中直接可以通过memcpy等函数拷贝,而无需调用拷贝构造函数或operator=。先来看看STL中最基本的对象iterator template <typename T, typename Size = size_t, typename Difference = ptrdiff_t> struct iterator { typedef T ... <a href="https://www.cnblogs.com/lwch/archive/2012/07/15/2592640.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lwch/archive/2012/07/15/2592634.html
山寨STL实现之内存池 - lwch
内存池的作用:减少内存碎片,提高性能。首先不得不提的是Win32和x64中对于指针的长度是不同的,在Win32中一个指针占4字节,而在x64中一个指针占8字节。也正是不清楚这一点,当我在x64中将指针作为4字节修改造成其他数据异常。首先我们先来定义三个宏 #define ALIGN sizeof(void*) #define MAX_BYTES 128 #define MAX_COUNT (MAX_BYTES / ALIGN)正如前面所说的,为了兼容Win32与x64应此我们将要申请的内存按void*的大小来对齐。正如前...
2012-07-15T12:09:00Z
2012-07-15T12:09:00Z
lwch
https://www.cnblogs.com/lwch/
【摘要】内存池的作用:减少内存碎片,提高性能。首先不得不提的是Win32和x64中对于指针的长度是不同的,在Win32中一个指针占4字节,而在x64中一个指针占8字节。也正是不清楚这一点,当我在x64中将指针作为4字节修改造成其他数据异常。首先我们先来定义三个宏 #define ALIGN sizeof(void*) #define MAX_BYTES 128 #define MAX_COUNT (MAX_BYTES / ALIGN)正如前面所说的,为了兼容Win32与x64应此我们将要申请的内存按void*的大小来对齐。正如前... <a href="https://www.cnblogs.com/lwch/archive/2012/07/15/2592634.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lwch/archive/2012/07/15/2592609.html
山寨STL实现之allocator - lwch
作为一个山寨的STL,那么不得不提的是其中的allocator(空间配置器)。顾名思义,它是负责空间分配用的,下面代码十分简单,仅对C函数malloc和free进行了薄薄的一层封装,同时给定了自定义函数free_handler用于在空间分配时候由于内存被占满了而导致的分配失败。这里值得注意的是:这个释放函数的函数指针应该是由调用方来负责指定,并且它仅有一个参数表明至少需要释放多少字节的内存。下面来看代码,代码非常简单,应此这里就不逐一展开说明了。 template <typename T> class allocator { public...
2012-07-15T11:35:00Z
2012-07-15T11:35:00Z
lwch
https://www.cnblogs.com/lwch/
【摘要】作为一个山寨的STL,那么不得不提的是其中的allocator(空间配置器)。顾名思义,它是负责空间分配用的,下面代码十分简单,仅对C函数malloc和free进行了薄薄的一层封装,同时给定了自定义函数free_handler用于在空间分配时候由于内存被占满了而导致的分配失败。这里值得注意的是:这个释放函数的函数指针应该是由调用方来负责指定,并且它仅有一个参数表明至少需要释放多少字节的内存。下面来看代码,代码非常简单,应此这里就不逐一展开说明了。 template <typename T> class allocator { public... <a href="https://www.cnblogs.com/lwch/archive/2012/07/15/2592609.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lwch/archive/2012/07/15/2592608.html
山寨STL实现笔记 - lwch
数据结构allocator内存池内存池V2traits,construct&destructvectorlistrbtreemap&sethashtablehash_map&hash_set算法
2012-07-15T11:34:00Z
2012-07-15T11:34:00Z
lwch
https://www.cnblogs.com/lwch/
【摘要】数据结构allocator内存池内存池V2traits,construct&destructvectorlistrbtreemap&sethashtablehash_map&hash_set算法 <a href="https://www.cnblogs.com/lwch/archive/2012/07/15/2592608.html" target="_blank">阅读全文</a>