摘要: 不知道什么是epsilon-NFA的話先看這里。
從正則表達(dá)式生成epsilon-NFA其實(shí)跟將一棵樹(shù)變換成另一棵樹(shù)是類(lèi)似的。epsilon轉(zhuǎn)換提供了一種工具讓我們可以把一個(gè)圖表達(dá)成漂亮的形式,看起來(lái)就有典型的遞歸結(jié)構(gòu)。因此這個(gè)工作依然可以用RegexExpressionAlgorithm這個(gè)visitor模式的產(chǎn)物來(lái)解決:
閱讀全文
posted @
2009-10-24 00:23 陳梓瀚(vczh) 閱讀(2274) |
評(píng)論 (5) |
編輯 收藏
摘要: 解引用指的是對(duì)命名表達(dá)式的處理。這跟C++的宏差不多,留個(gè)名字在那里,然后就擴(kuò)展它。舉個(gè)例子,我們寫(xiě)一個(gè)正則表達(dá)式判斷一個(gè)字符串是否ip地址。判斷一個(gè)字符串是否小于256的數(shù)字還是很麻煩的:\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5]。但是如果要判斷是否X.X.X.X就要將這個(gè)表達(dá)式復(fù)制四次(至少兩次),這會(huì)導(dǎo)致正則表達(dá)式很長(zhǎng)。如何解決呢?
閱讀全文
posted @
2009-10-20 06:36 陳梓瀚(vczh) 閱讀(2042) |
評(píng)論 (2) |
編輯 收藏
摘要: 字符集的正規(guī)化指的是讓正則表達(dá)式的表達(dá)式樹(shù)的所有節(jié)點(diǎn)中記錄的字符集合的最小單元都是互不交叉的。舉個(gè)例子,[a-g][h-n]沒(méi)有交叉,但是[a-g][g-n]就交叉了。所以對(duì)[a-g][g-n]做字符集正規(guī)化的結(jié)果就是將表達(dá)式修改為([a-f]|g)(g|[h-n])。這樣表達(dá)式里面出現(xiàn)的字符集合的最小單元[a-f]、g和[h-n]就沒(méi)有交叉了。下面是正規(guī)化的代碼:
閱讀全文
posted @
2009-10-17 20:43 陳梓瀚(vczh) 閱讀(1885) |
評(píng)論 (1) |
編輯 收藏
摘要: 雖然說(shuō)分析語(yǔ)法樹(shù)依賴于遞歸,但是你真的去寫(xiě)遞歸那是一件很煩的事情,個(gè)人覺(jué)得煩事煩在你每次都要去RegexExpression.h里面聲明所有的虛函數(shù)之后復(fù)制過(guò)來(lái)一一運(yùn)行。有沒(méi)有辦法僅編輯.cpp文件就能做到呢?也就是說(shuō),在如何不修改Expression一系列類(lèi)的接口的情況下給Expression添加算法?一般來(lái)說(shuō)對(duì)付樹(shù)形結(jié)構(gòu)都是使用Visitor模式的。
(內(nèi)附代碼)
閱讀全文
posted @
2009-10-17 17:34 陳梓瀚(vczh) 閱讀(2016) |
評(píng)論 (0) |
編輯 收藏
摘要: 這幾天正在著手開(kāi)發(fā)一個(gè)基于Vczh Library++ 3.0基礎(chǔ)之上的新的正則表達(dá)式引擎。這個(gè)東西跟以前的功能沒(méi)什么大變化,只是最基礎(chǔ)的那一層被全部改了,而且還不兼容,所以要重寫(xiě)。不過(guò)都是自己的東西,無(wú)所謂了,不兼容也沒(méi)什么問(wèn)題。
下面介紹正則表達(dá)式引擎的語(yǔ)法分析過(guò)程。
閱讀全文
posted @
2009-10-15 05:53 陳梓瀚(vczh) 閱讀(3137) |
評(píng)論 (4) |
編輯 收藏
摘要: 之前因?yàn)榉浅C?,加上無(wú)聊開(kāi)發(fā)什么類(lèi)似WCF和WPF的東西,最近終于找到了新的目標(biāo)了,于是之前那些就不做了。隔了這么久沒(méi)法文章主要是因?yàn)樽罱鼪](méi)寫(xiě)出什么完整的東西。國(guó)慶玩了9天,之前在計(jì)劃VL++3.0。
VL++3.0被定位為一個(gè)為了數(shù)據(jù)處理而開(kāi)發(fā)的C++庫(kù)。這個(gè)庫(kù)不的特點(diǎn)在于“其他語(yǔ)言的味道很濃”。C++的庫(kù)用起來(lái)不爽主要是因?yàn)槔鲜且野聪聞澗€,而且大量應(yīng)用非OOP特性導(dǎo)致IDE的自動(dòng)補(bǔ)全無(wú)法發(fā)揮作用。所以為了彌補(bǔ)這個(gè)缺陷我做了一個(gè)很不一樣的東西,也就是VL++了。經(jīng)過(guò)了三年多的開(kāi)發(fā),1.0和2.0已經(jīng)相繼出爐,每一次打翻新都解決了一些前一個(gè)版本解決不了的問(wèn)題。
閱讀全文
posted @
2009-10-09 07:17 陳梓瀚(vczh) 閱讀(3438) |
評(píng)論 (11) |
編輯 收藏
摘要: 這一次制作的按鈕模板具有通過(guò)模板屬性動(dòng)態(tài)配置圖形的功能。模板的屬性一共有6個(gè):x、y、w、h、state、content,其中state有normal、hot和press三個(gè)取值。XML、代碼和截圖如下:
閱讀全文
posted @
2009-08-20 05:38 陳梓瀚(vczh) 閱讀(4244) |
評(píng)論 (7) |
編輯 收藏
摘要: 這篇文章描述的一個(gè)圖形元素模板終于通過(guò)了冒煙測(cè)試。下面將展示模板的XML代碼、調(diào)用模板的代碼以及截圖。
閱讀全文
posted @
2009-08-19 03:29 陳梓瀚(vczh) 閱讀(3529) |
評(píng)論 (5) |
編輯 收藏
摘要: 我們知道制作控件的時(shí)候,其實(shí)最困難的不是定出那個(gè)支撐整個(gè)系統(tǒng)的架構(gòu),而是為各種空間寫(xiě)繪制的代碼(囧)。為了解決這個(gè)問(wèn)題,我在這套渲染庫(kù)上設(shè)計(jì)了一種XML寫(xiě)成的模板,然后在模板內(nèi)部提供一個(gè)簡(jiǎn)單的語(yǔ)言來(lái)進(jìn)行簡(jiǎn)單但是強(qiáng)大的運(yùn)算。這樣的話,不僅可以省略很多代碼,還為控件的換膚提供了強(qiáng)有力的支持。
閱讀全文
posted @
2009-08-07 07:29 陳梓瀚(vczh) 閱讀(3005) |
評(píng)論 (1) |
編輯 收藏
摘要: 做完了小型WCF之后,就是小型的WPF了。之前那個(gè)完全避免用戶大部分的錯(cuò)誤使用導(dǎo)致的死鎖的方案還有一點(diǎn)點(diǎn)的問(wèn)題,所以先休息一下,做做別的。為了在C++上重現(xiàn)一套類(lèi)似WPF的工具,首先要解決繪圖部分。
繪圖的設(shè)備當(dāng)然是需要可切換的,于是用bridge模式定義了大量的接口,這些接口用來(lái)創(chuàng)建畫(huà)筆、畫(huà)刷、字體和圖形,然后圖形用樹(shù)的形式組織起來(lái),最后放到一塊跟窗口鏈接的畫(huà)板上面,有需要的時(shí)候自動(dòng)繪制。為了最快速地開(kāi)始工作,我實(shí)現(xiàn)了一個(gè)GDI的繪圖設(shè)備,以后有空再做DirectX的。但是我們知道GDI對(duì)alpha的支持是很弱的,只有一個(gè)叫alphablend的API用來(lái)貼bitmap,因此為了讓畫(huà)刷和畫(huà)筆都能夠支持alpha漸變、alpha位圖和alpha顏色,做了很多的工作。
閱讀全文
posted @
2009-08-02 02:41 陳梓瀚(vczh) 閱讀(6412) |
評(píng)論 (3) |
編輯 收藏