随笔-341  评论-2670  文章-0  trackbacks-0
VL++3.0开发纪事
自己设计的具有非C++传统味道的C++库
三个星期没有更新博客了
posted @ 2010-08-06 18:31 陈梓瀚(vczh) 阅读(3131) | 评论 (12)  编辑
升级到Visual Studio 2010
posted @ 2010-05-19 19:27 陈梓瀚(vczh) 阅读(3360) | 评论 (18)  编辑
美帝出差最后一天
posted @ 2010-05-06 22:56 陈梓瀚(vczh) 阅读(3142) | 评论 (9)  编辑
Vczh Library++3.0之目前进度
posted @ 2010-01-09 23:37 陈梓瀚(vczh) 阅读(2400) | 评论 (1)  编辑
Vczh Library++ 3.0之可配置语法分析器(FpMacro及代码)      摘要: 上一篇文章基本上把分析的过程都讲完了,于是这次就把FpMacro作为一个Demo拿了出来。不第一次就发的原因主要是那个时候FpMacro刚刚写完,当然写完就要用的,于是后来就在Vczh Library++ 3.0的库里面大量使用了FpMacro作为代码生成的一个工具,用来代替一部分的宏的功能。当然最后我并没有写个插件安装到VC++里,而是写了一个批处理文件去调用FpMacro.exe。

代码内详  阅读全文
posted @ 2009-12-12 22:19 陈梓瀚(vczh) 阅读(4873) | 评论 (0)  编辑
Vczh Library++3.0之可配置语法分析器(分析器内核)      摘要: 在上一篇文章中,我们已经实现了在C++中直接写文法并转换成文法树的工作,现在要开始实现三个组合文法了。  阅读全文
posted @ 2009-12-11 22:49 陈梓瀚(vczh) 阅读(2963) | 评论 (1)  编辑
Vczh Library++ 3.0之可配置语法分析器(设计文法表达式)      摘要: 上一篇文章中我们看到了可配置语法分析器使用起来的样子,在这篇文章中我将告诉大家如何通过重载操作符的方法构造文法表达式树,从而使用递归向下法进行语法分析的工作。  阅读全文
posted @ 2009-12-04 23:43 陈梓瀚(vczh) 阅读(3171) | 评论 (1)  编辑
Vczh Library++3.0之可配置语法分析器(分析Demo:函数式宏)      摘要: 上一篇文章提到了我开发了可配置语法分析器之后做了一个FpMacro用来生成C++有规律的代码。这一篇文章就从FpMacro入手,分析可配置语法分析器所需要具备的功能。首先让我们来了解一下什么是FpMacro。  阅读全文
posted @ 2009-11-27 21:21 陈梓瀚(vczh) 阅读(3206) | 评论 (3)  编辑
Vczh Library++3.0之可配置语法分析器(前言)      摘要: 花了差不多两个星期的时间将一个可配置语法分析器写好了。这个语法分析器被设计来完成以下任务:

1、易于使用,并且在运行时可更改
2、提供对分析字符串和容器的支持
3、可使用正则表达式辅助定义分析器
4、如果觉得预定义的设备不满意,用户可以自行提供新的文法元素(譬如说增加一种使用通配符进行语法分析的元素)
5、提供可配置错误恢复策略,提供合理的错误发生位置信息,用户可根据自己的意愿来决定错误信息的内容。  阅读全文
posted @ 2009-11-27 10:01 陈梓瀚(vczh) 阅读(3097) | 评论 (2)  编辑
Vczh Library++3.0之正则表达式引擎(DFA与捕获、预查结合的匹配)      摘要: DFA与捕获和预查结合起来的话很麻烦,不能用一张表来迭代,而是要用回溯,然后在回溯的时候记下状态。至此正则表达式的所有算法都完成了,接下来是详细介绍。  阅读全文
posted @ 2009-11-14 19:13 陈梓瀚(vczh) 阅读(2454) | 评论 (1)  编辑
Vczh Library++3.0之正则表达式引擎(从NFA到DFA)      摘要: 今天花了一个晚上完成并测试了从NFA到DFA的代码。NFA到DFA的主要过程就是构造出一个等价于NFA的状态机,使得从任何一个状态出去的状态转换都不具有相同的条件。这个约束就是“确定性”的含义,给定一个状态和一个输入,最多只能跳转到一个目标状态。于是知道了这个过程,代码就很好写了:  阅读全文
posted @ 2009-11-03 08:34 陈梓瀚(vczh) 阅读(2712) | 评论 (8)  编辑
Vczh Library++3.0之正则表达式引擎(Epsilon-NFA到NFA)      摘要: 这篇文章的代码所描述的算法在这里有详细的说明。

Epsilon-NFA到NFA的目标主要是产生一个没有Epsilon边的,跟原状态图等价的新状态图。过程不复杂,首先从起始状态开始,寻找所有Epsilons边到达的对象的集合,然后复制这个集合的所有状态包含的非Epsilon状态。其实状态做完之后,寻找所有能够产生非Epsilon边的状态然后重复这个过程,最后NFA就出来了。代码如下:
  阅读全文
posted @ 2009-10-28 04:34 陈梓瀚(vczh) 阅读(2365) | 评论 (7)  编辑
Vczh Library++3.0之正则表达式引擎(生成epsilon-NFA)      摘要: 不知道什么是epsilon-NFA的话先看这里。

从正则表达式生成epsilon-NFA其实跟将一棵树变换成另一棵树是类似的。epsilon转换提供了一种工具让我们可以把一个图表达成漂亮的形式,看起来就有典型的递归结构。因此这个工作依然可以用RegexExpressionAlgorithm这个visitor模式的产物来解决:  阅读全文
posted @ 2009-10-24 00:23 陈梓瀚(vczh) 阅读(2244) | 评论 (5)  编辑
Vczh Library++3.0之正则表达式引擎(解引用)      摘要: 解引用指的是对命名表达式的处理。这跟C++的宏差不多,留个名字在那里,然后就扩展它。举个例子,我们写一个正则表达式判断一个字符串是否ip地址。判断一个字符串是否小于256的数字还是很麻烦的:\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5]。但是如果要判断是否X.X.X.X就要将这个表达式复制四次(至少两次),这会导致正则表达式很长。如何解决呢?  阅读全文
posted @ 2009-10-20 06:36 陈梓瀚(vczh) 阅读(2032) | 评论 (2)  编辑
Vczh Library++3.0之正则表达式引擎(字符集正规化)      摘要: 字符集的正规化指的是让正则表达式的表达式树的所有节点中记录的字符集合的最小单元都是互不交叉的。举个例子,[a-g][h-n]没有交叉,但是[a-g][g-n]就交叉了。所以对[a-g][g-n]做字符集正规化的结果就是将表达式修改为([a-f]|g)(g|[h-n])。这样表达式里面出现的字符集合的最小单元[a-f]、g和[h-n]就没有交叉了。下面是正规化的代码:  阅读全文
posted @ 2009-10-17 20:43 陈梓瀚(vczh) 阅读(1878) | 评论 (1)  编辑
Vczh Library++3.0之正则表达式引擎(使用Visitor模式访问语法树)      摘要: 虽然说分析语法树依赖于递归,但是你真的去写递归那是一件很烦的事情,个人觉得烦事烦在你每次都要去RegexExpression.h里面声明所有的虚函数之后复制过来一一运行。有没有办法仅编辑.cpp文件就能做到呢?也就是说,在如何不修改Expression一系列类的接口的情况下给Expression添加算法?一般来说对付树形结构都是使用Visitor模式的。

(内附代码)  阅读全文
posted @ 2009-10-17 17:34 陈梓瀚(vczh) 阅读(1994) | 评论 (0)  编辑
Vczh Library++3.0之正则表达式引擎(语法分析)      摘要: 这几天正在着手开发一个基于Vczh Library++ 3.0基础之上的新的正则表达式引擎。这个东西跟以前的功能没什么大变化,只是最基础的那一层被全部改了,而且还不兼容,所以要重写。不过都是自己的东西,无所谓了,不兼容也没什么问题。

下面介绍正则表达式引擎的语法分析过程。  阅读全文
posted @ 2009-10-15 05:53 陈梓瀚(vczh) 阅读(3082) | 评论 (4)  编辑