摘要: 不知道什么是epsilon-NFA的话先看这里。
从正则表达式生成epsilon-NFA其实跟将一棵树变换成另一棵树是类似的。epsilon转换提供了一种工具让我们可以把一个图表达成漂亮的形式,看起来就有典型的递归结构。因此这个工作依然可以用RegexExpressionAlgorithm这个visitor模式的产物来解决:
阅读全文
posted @
2009-10-24 00:23 陈梓瀚(vczh) 阅读(2262) |
评论 (5) |
编辑 收藏
摘要: 解引用指的是对命名表达式的处理。这跟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) 阅读(2037) |
评论 (2) |
编辑 收藏
摘要: 字符集的正规化指的是让正则表达式的表达式树的所有节点中记录的字符集合的最小单元都是互不交叉的。举个例子,[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) 阅读(1883) |
评论 (1) |
编辑 收藏
摘要: 虽然说分析语法树依赖于递归,但是你真的去写递归那是一件很烦的事情,个人觉得烦事烦在你每次都要去RegexExpression.h里面声明所有的虚函数之后复制过来一一运行。有没有办法仅编辑.cpp文件就能做到呢?也就是说,在如何不修改Expression一系列类的接口的情况下给Expression添加算法?一般来说对付树形结构都是使用Visitor模式的。
(内附代码)
阅读全文
posted @
2009-10-17 17:34 陈梓瀚(vczh) 阅读(2013) |
评论 (0) |
编辑 收藏
摘要: 这几天正在着手开发一个基于Vczh Library++ 3.0基础之上的新的正则表达式引擎。这个东西跟以前的功能没什么大变化,只是最基础的那一层被全部改了,而且还不兼容,所以要重写。不过都是自己的东西,无所谓了,不兼容也没什么问题。
下面介绍正则表达式引擎的语法分析过程。
阅读全文
posted @
2009-10-15 05:53 陈梓瀚(vczh) 阅读(3108) |
评论 (4) |
编辑 收藏
摘要: 之前因为非常忙,加上无聊开发什么类似WCF和WPF的东西,最近终于找到了新的目标了,于是之前那些就不做了。隔了这么久没法文章主要是因为最近没写出什么完整的东西。国庆玩了9天,之前在计划VL++3.0。
VL++3.0被定位为一个为了数据处理而开发的C++库。这个库不的特点在于“其他语言的味道很浓”。C++的库用起来不爽主要是因为老是要我按下划线,而且大量应用非OOP特性导致IDE的自动补全无法发挥作用。所以为了弥补这个缺陷我做了一个很不一样的东西,也就是VL++了。经过了三年多的开发,1.0和2.0已经相继出炉,每一次打翻新都解决了一些前一个版本解决不了的问题。
阅读全文
posted @
2009-10-09 07:17 陈梓瀚(vczh) 阅读(3407) |
评论 (11) |
编辑 收藏
摘要: 这一次制作的按钮模板具有通过模板属性动态配置图形的功能。模板的属性一共有6个:x、y、w、h、state、content,其中state有normal、hot和press三个取值。XML、代码和截图如下:
阅读全文
posted @
2009-08-20 05:38 陈梓瀚(vczh) 阅读(4212) |
评论 (7) |
编辑 收藏
摘要: 这篇文章描述的一个图形元素模板终于通过了冒烟测试。下面将展示模板的XML代码、调用模板的代码以及截图。
阅读全文
posted @
2009-08-19 03:29 陈梓瀚(vczh) 阅读(3505) |
评论 (5) |
编辑 收藏
摘要: 我们知道制作控件的时候,其实最困难的不是定出那个支撑整个系统的架构,而是为各种空间写绘制的代码(囧)。为了解决这个问题,我在这套渲染库上设计了一种XML写成的模板,然后在模板内部提供一个简单的语言来进行简单但是强大的运算。这样的话,不仅可以省略很多代码,还为控件的换肤提供了强有力的支持。
阅读全文
posted @
2009-08-07 07:29 陈梓瀚(vczh) 阅读(2995) |
评论 (1) |
编辑 收藏
摘要: 做完了小型WCF之后,就是小型的WPF了。之前那个完全避免用户大部分的错误使用导致的死锁的方案还有一点点的问题,所以先休息一下,做做别的。为了在C++上重现一套类似WPF的工具,首先要解决绘图部分。
绘图的设备当然是需要可切换的,于是用bridge模式定义了大量的接口,这些接口用来创建画笔、画刷、字体和图形,然后图形用树的形式组织起来,最后放到一块跟窗口链接的画板上面,有需要的时候自动绘制。为了最快速地开始工作,我实现了一个GDI的绘图设备,以后有空再做DirectX的。但是我们知道GDI对alpha的支持是很弱的,只有一个叫alphablend的API用来贴bitmap,因此为了让画刷和画笔都能够支持alpha渐变、alpha位图和alpha颜色,做了很多的工作。
阅读全文
posted @
2009-08-02 02:41 陈梓瀚(vczh) 阅读(6383) |
评论 (3) |
编辑 收藏