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