最新的毛片基地免费,国产国语一级毛片,免费国产成人高清在线电影,中天堂国产日韩欧美,中国国产aa一级毛片,国产va欧美va在线观看,成人不卡在线

基于帶記憶確定有限自動(dòng)機(jī)的正則表達(dá)式匹配加速方法

文檔序號(hào):6573577閱讀:249來(lái)源:國(guó)知局
專利名稱:基于帶記憶確定有限自動(dòng)機(jī)的正則表達(dá)式匹配加速方法
技術(shù)領(lǐng)域
本發(fā)明涉及信息處理領(lǐng)域,尤其涉及一種基于帶記憶確定有限自動(dòng)機(jī)的正 則表達(dá)式匹配加速方法。
背景技術(shù)
字符串匹配是信息處理領(lǐng)域最基本操作之一,是許多信息處理應(yīng)用的基礎(chǔ)。 字符串匹配是在某個(gè)輸入字符串(以下稱為目標(biāo)字符串)中找出與給定字符串 (以下稱為特征字符串)具有特定關(guān)系的子串的過(guò)程。字符串匹配可以分為字 符串精確匹配和字符串模糊匹配兩種,其中前者是在目標(biāo)字符串中找出與特征 字符串完全相同的子串,而后者則是在目標(biāo)字符串中找出與特征字符串相似的 特定子串(比如,目標(biāo)字符串的子串比特征字符串增加、減少或修改一個(gè)或數(shù) 個(gè)字符)。字符串的精確匹配應(yīng)用尤為廣泛。
正則表達(dá)式是由普通字符(例如字符a到z)和特殊字符(稱為元字符) 組成的文字模式,該模式可用于描述具有特定特征的一類字符串。比如 ",abc
S"描述了這樣一類字符串它的頭部具有任意個(gè)任意字符,并以abc 加一個(gè)數(shù)字結(jié)尾。正則表達(dá)式被廣泛應(yīng)用于字符串匹配,用來(lái)描述特征字符串。 例如,在網(wǎng)關(guān)部署的內(nèi)容過(guò)濾程序使用基于正則表達(dá)式的模式匹配查找并過(guò)濾 具有不當(dāng)內(nèi)容的網(wǎng)絡(luò)數(shù)據(jù);反病毒程序利用基于正則表達(dá)式的特征庫(kù)對(duì)病毒進(jìn) 行掃描;網(wǎng)絡(luò)入侵檢測(cè)與防御軟件利用基于正則表達(dá)式的模式匹配對(duì)入侵企圖 進(jìn)行識(shí)別。
基于正則表達(dá)式的模式匹配是計(jì)算密集型的任務(wù),需要大量的CPU計(jì)算。 例如,反病毒程序ClamAV的特征庫(kù)目前己經(jīng)具有超過(guò)11萬(wàn)條規(guī)則,但它需要 在盡可能短的時(shí)間內(nèi)判斷出給定文件是否具有特征庫(kù)中的特征。另外一個(gè)典型 應(yīng)用是部署在網(wǎng)關(guān)的內(nèi)容過(guò)濾程序,它需要實(shí)時(shí)地對(duì)通過(guò)的數(shù)據(jù)流進(jìn)行檢測(cè), 并根據(jù)內(nèi)容等級(jí)采取相應(yīng)的動(dòng)作。目前利用軟件進(jìn)行正則表達(dá)式匹配,吞吐率 在幾百M(fèi)bps到1Gbps之間,該性能在實(shí)際應(yīng)用中會(huì)下降數(shù)倍到數(shù)十倍,還遠(yuǎn)不 能滿足實(shí)時(shí)掃描的需要。
基于硬件加速的正則表達(dá)式匹配方法是解決該矛盾的其中一個(gè)辦法。利用 專用集成電路(ASIC)或現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)實(shí)現(xiàn)正則表達(dá)式匹配引擎, 可同樣完成模式匹配,但可根據(jù)需要進(jìn)行專門(mén)的優(yōu)化,成倍地提高性能。
正則表達(dá)式的硬件加速通常用自動(dòng)機(jī)實(shí)現(xiàn)。
重復(fù)操作符"(A){n,m}"是正則表達(dá)式中常見(jiàn)的一個(gè)操作符,它代表子表達(dá) 式(A)至少重復(fù)n次,至多重復(fù)m次。重復(fù)操作符有三種形式
今(A){n,m},表示子表達(dá)式(A)至少重復(fù)n次,至多重復(fù)m次。 今(A){n,},表示子表達(dá)式(A)至少重復(fù)n次。 今(A){n},表示子表達(dá)式(A)重復(fù)n次。
在通常的模式匹配軟件中,"(A){n,m}"操作符是不被直接支持的,通常會(huì) 轉(zhuǎn)換為連接操作符和選擇操作符,如第一種形式"(A){n,m}"會(huì)被轉(zhuǎn)換為
(A)(A). .(A)I(A)(A).. .(A)(A)I 1(A)(A)…(A).. .(A) _^_(n+l)個(gè)__
第二、三種形式的重復(fù)操作符相對(duì)簡(jiǎn)單,可分別展開(kāi)為:_
(A)(A)…(A) (A)*
ii個(gè)_
以及_
(A)(A)…(A)
n個(gè)_
上述的轉(zhuǎn)換方法雖然可以對(duì)重復(fù)操作符進(jìn)行支持,但是,在重復(fù)次數(shù)多、 范圍大的時(shí)候,會(huì)使正則表達(dá)式的狀態(tài)數(shù)急劇增加,造成對(duì)規(guī)則編譯器和模式 匹配引擎的巨大負(fù)擔(dān)。比如"a{l,3072}"展開(kāi)后會(huì)得到1+2+...+3072=4720128 個(gè)狀態(tài)!在重復(fù)的子表達(dá)式復(fù)雜時(shí)會(huì)形成狀態(tài)爆炸。本發(fā)明針對(duì)這個(gè)問(wèn)題提出 了使用帶記憶的狀態(tài)機(jī)對(duì)重復(fù)操作符進(jìn)行直接支持。
確定有限自動(dòng)機(jī)和非確定有限自動(dòng)機(jī)的定義、性能描述,以及從正則表達(dá) 式構(gòu)建非確定有限自動(dòng)機(jī)的Thompson算法和從非確定有限自動(dòng)機(jī)構(gòu)造確定有 限自動(dòng)機(jī)的s-閉包算法的描述,請(qǐng)參考Alfred V. Aho, Ravi Sethi和Jeffrey D. Ullman所著的《編譯器原理、技術(shù)與工具》 一書(shū);正則表達(dá)式的操作符及其 意義,請(qǐng)參考Jeffrey E. R Friedl所著的《掌握正則表達(dá)式》 一書(shū);軟件Lex和 Yacc的使用,請(qǐng)參考John Levine, Tony Mason, Doug Brown所著的《Lex與Yacc》 一書(shū)。

發(fā)明內(nèi)容
本發(fā)明的目的是提供一種基于帶記憶確定有限自動(dòng)機(jī)的正則表達(dá)式匹配加 速方法。
基于帶記憶確定有限自動(dòng)機(jī)的正則表達(dá)式匹配加速方法包括正則表達(dá)式規(guī) 則編譯器和模式匹配引擎,正則表達(dá)式規(guī)則編譯器先把正則表達(dá)式轉(zhuǎn)換為解析
樹(shù),再分別把解析樹(shù)轉(zhuǎn)換為帶記憶的非確定有限自動(dòng)機(jī)和帶記憶的確定有限自 動(dòng)機(jī),模式匹配引擎使用編譯器生成的帶記憶確定有限自動(dòng)機(jī)實(shí)現(xiàn)對(duì)模式匹配 的加速。
其特征在于所述的正則表達(dá)式規(guī)則編譯器先把正則表達(dá)式轉(zhuǎn)換為解析樹(shù), 再分別把解析樹(shù)轉(zhuǎn)換為帶記憶的非確定有限自動(dòng)機(jī)和帶記憶的確定有限自動(dòng)
機(jī)借助Lex和Yacc軟件實(shí)現(xiàn)正則表達(dá)式上下文無(wú)關(guān)文法,對(duì)正則表達(dá)式規(guī)則 語(yǔ)法進(jìn)行解析,并在解析過(guò)程中根據(jù)匹配文法建立相應(yīng)相應(yīng)節(jié)點(diǎn)類型的子樹(shù), 最終形成完整的解析樹(shù);在Thompson算法支持操作符的基礎(chǔ)上,增加重復(fù)操作 符({n,m}),其對(duì)應(yīng)的非確定狀態(tài)機(jī)與所重復(fù)表達(dá)式的非確定狀態(tài)機(jī)相同,但 增加了重復(fù)范圍參數(shù),使用該算法將解析樹(shù)轉(zhuǎn)換為帶記憶的非確定有限自動(dòng)機(jī); 對(duì)于不含重復(fù)操作符的非確定有限自動(dòng)機(jī),按s-閉包算法生成確定有限自動(dòng)機(jī), 而對(duì)于含有重復(fù)操作符的非確定有限自動(dòng)機(jī),則先用帶有特殊標(biāo)記的簡(jiǎn)單字符 替換重復(fù)操作符,按e-閉包算法把它轉(zhuǎn)換為確定有限自動(dòng)機(jī),另外單獨(dú)把被替 換的部分按s-閉包算法轉(zhuǎn)換為另一個(gè)確定有限自動(dòng)機(jī);解析樹(shù)由對(duì)應(yīng)的正則表 達(dá)式經(jīng)解析生成,為一種每個(gè)節(jié)點(diǎn)分支不超過(guò)2的樹(shù),樹(shù)中非葉節(jié)點(diǎn)為操作符, 葉子節(jié)點(diǎn)為字符或集合,操作符包括連接操作符(" ")、選擇操作符("l")、重 復(fù)操作符("{n,m}")、 Kleen閉包操作符("*"),葉子節(jié)點(diǎn)是單個(gè)字符、集合、 集合的補(bǔ)集、代表集合的字符或代表集合補(bǔ)集的字符,集合與補(bǔ)集的轉(zhuǎn)義字符 序列符合IEEE POSIX 1003.2標(biāo)準(zhǔn)。
所述的編譯器編譯器以正則表達(dá)式規(guī)則文件為輸入,輸出正則表達(dá)式數(shù) 據(jù)庫(kù),它首先對(duì)規(guī)則文件進(jìn)行語(yǔ)法檢査并把它轉(zhuǎn)換為帶記憶的非確定有限自動(dòng) 機(jī),之后再轉(zhuǎn)換為帶記憶的確定有限自動(dòng)機(jī),帶記憶的確定有限自動(dòng)機(jī)存儲(chǔ)在 規(guī)則數(shù)據(jù)庫(kù)中。
所述的模式匹配引擎使用編譯器生成的帶記憶確定有限自動(dòng)機(jī)實(shí)現(xiàn)對(duì)模式 匹配的加速模式匹配引擎讀入編譯器生成的帶記憶確定有限自動(dòng)機(jī)和輸入字 符串,把輸入字符串跟每個(gè)有限自動(dòng)機(jī)進(jìn)行匹配,匹配的位置保存在匹配上下 文中;當(dāng)一個(gè)有限自動(dòng)機(jī)匹配完成,則根據(jù)該自動(dòng)機(jī)類型確定下一步動(dòng)作如 果該自動(dòng)機(jī)不包含重復(fù)操作符,且沒(méi)有后續(xù)自動(dòng)機(jī),則報(bào)告一個(gè)匹配;如果該 自動(dòng)機(jī)不包含重復(fù)操作符,但有后續(xù)有限自動(dòng)機(jī),則根據(jù)貪婪模式選項(xiàng)確定是 否報(bào)告一個(gè)匹配,并生成一個(gè)后續(xù)有限自動(dòng)機(jī)的匹配上下文;如果該自動(dòng)機(jī)包 含重復(fù)操作符,則增加匹配次數(shù),并根據(jù)匹配次數(shù)決定下一步動(dòng)作如果匹配 次數(shù)小于重復(fù)范圍下限,則把匹配位置調(diào)整到自動(dòng)機(jī)初始狀態(tài),繼續(xù)匹配;如
果匹配次數(shù)大于重復(fù)范圍上限,則生成后續(xù)狀態(tài)機(jī)的匹配上下文或報(bào)告一個(gè)匹 配;如果匹配次數(shù)位于重復(fù)范圍內(nèi),則把匹配位置調(diào)整到自動(dòng)機(jī)初始狀態(tài),繼 續(xù)匹配;模式匹配引擎可以由現(xiàn)場(chǎng)可編程門(mén)陣列或?qū)S眉呻娐穼?shí)現(xiàn),它實(shí)現(xiàn) 了正則表達(dá)式數(shù)據(jù)庫(kù)中的帶記憶確定有限自動(dòng)機(jī),可接受輸入數(shù)據(jù),判斷是否 存在與庫(kù)中正則表達(dá)式的匹配。
本發(fā)明的優(yōu)點(diǎn)是1)因?yàn)橹苯又С至酥貜?fù)操作符,編譯器可以不對(duì)重復(fù)表 達(dá)式進(jìn)行展開(kāi),大大降低了編譯器開(kāi)發(fā)難度,也降低了編譯器的內(nèi)存占用和編 譯時(shí)間;2)基于同樣的原因,編譯器生成的規(guī)則數(shù)據(jù)庫(kù)大小也可大大減小,降 低了模式匹配引擎的成本和復(fù)雜度。


圖1是基本操作符及其對(duì)應(yīng)的解析樹(shù);
圖2是規(guī)則"(a|(
XKl,30}c*d"對(duì)應(yīng)的解析樹(shù);
圖3是葉子節(jié)點(diǎn)(單字符)對(duì)應(yīng)的非確定有限自動(dòng)機(jī);
圖4是葉子節(jié)點(diǎn)(集合)對(duì)應(yīng)的非確定有限自動(dòng)機(jī);
圖5是連接操作符對(duì)應(yīng)的非確定有限自動(dòng)機(jī);
圖6是選擇操作符對(duì)應(yīng)的非確定有限自動(dòng)機(jī);
圖7是Kleen閉包操作符對(duì)應(yīng)的非確定有限自動(dòng)機(jī);
圖8是規(guī)則"(a|(
)){l,30}c*d"對(duì)應(yīng)的按照Thompson算法轉(zhuǎn)換成的非確 定有限自動(dòng)機(jī);
圖9是規(guī)則"(a|(
)){l,30}c*d"對(duì)應(yīng)的解析樹(shù)按改進(jìn)算法轉(zhuǎn)換成的非確 定有限自動(dòng)機(jī);
圖10是規(guī)則"(a|(
)){l,30}c*d"對(duì)應(yīng)的非確定有限自動(dòng)機(jī)按照經(jīng)典e-閉包算法轉(zhuǎn)換成的確定有限自動(dòng)機(jī);
圖11是規(guī)則"(a|(
)){l,30}C*d"對(duì)應(yīng)的非確定有限自動(dòng)機(jī)按改進(jìn)算法轉(zhuǎn) 換成的確定有限自動(dòng)機(jī);
圖12是本發(fā)明中模式匹配引擎結(jié)構(gòu)圖13是本發(fā)明模式匹配引擎中上下文調(diào)度流程圖; 圖14是本發(fā)明模式匹配引擎的主要執(zhí)行流程圖。
具體實(shí)施例方式
基于帶記憶確定有限自動(dòng)機(jī)的正則表達(dá)式匹配加速方法其核心是使用帶 記憶的確定有限自動(dòng)機(jī)對(duì)重復(fù)操作符(A(n,mp進(jìn)行直接支持,這樣在基本不 降低匹配性能的條件下,對(duì)于存在大量重復(fù)的規(guī)則,可大幅降低生成確定有限
自動(dòng)機(jī)(DFA)的規(guī)模,降低存儲(chǔ)代價(jià)。同時(shí),也可簡(jiǎn)化編譯器的設(shè)計(jì),大幅
減少規(guī)則處理時(shí)間。要使用帶記憶的確定有限自動(dòng)機(jī),規(guī)則編譯器和模式匹配 引擎必須同時(shí)對(duì)它提供支持。
所述的規(guī)則描述文件規(guī)則描述文件中包含了需要查找的特征字符串(正 則表達(dá)式)。規(guī)則描述文件中可以有任意條規(guī)則,每條規(guī)則由以下部分組成唯 一的標(biāo)識(shí),用于跟其他規(guī)則進(jìn)行區(qū)分;規(guī)則體,描述了一條正則表達(dá)式;規(guī)則 選項(xiàng),指定匹配規(guī)則時(shí)的選項(xiàng),比如是否忽略字母大小寫(xiě)。
規(guī)則編譯器規(guī)則編譯器完成規(guī)則到規(guī)則數(shù)據(jù)庫(kù)的轉(zhuǎn)換。在讀取規(guī)則描述 文件后,對(duì)其中的規(guī)則進(jìn)行語(yǔ)法檢査,然后,把符合語(yǔ)法定義的規(guī)則轉(zhuǎn)換為解 析樹(shù),并進(jìn)行預(yù)處理和必要的優(yōu)化;再把解析樹(shù)轉(zhuǎn)換為帶記憶的非確定有限自 動(dòng)機(jī)和確定有限自動(dòng)機(jī),并把所有確定有限自動(dòng)機(jī)寫(xiě)入規(guī)則數(shù)據(jù)庫(kù)供模式匹配 引擎使用。
模式匹配引擎實(shí)現(xiàn)正則表達(dá)式的模式匹配。讀入編譯器生成的規(guī)則數(shù)據(jù) 庫(kù),以待匹配的數(shù)據(jù)為輸入,匹配完成后輸出匹配結(jié)果。結(jié)果包括以下數(shù)據(jù) 是否有匹配;如果有匹配,匹配的特征字符串標(biāo)識(shí)、匹配的起始(結(jié)束)位置、
實(shí)際匹配長(zhǎng)度。
基于帶記憶確定有限自動(dòng)機(jī)的正則表達(dá)式匹配加速方法的具體步驟如下
1) 準(zhǔn)備正則表達(dá)式規(guī)則文件。
正則表達(dá)式規(guī)則文件中包含了正則表達(dá)式規(guī)則,以及相關(guān)的其他信息。每 行描述一條正則表達(dá)式規(guī)則及其相關(guān)信息,例如:_
<formula>formula see original document page 8</formula>
上面是一個(gè)規(guī)則文件的例子,其中有兩條規(guī)則,每條規(guī)則由三個(gè)部分構(gòu)成, 第一部分為規(guī)則標(biāo)識(shí)符,由ld^x給出;第二部分為規(guī)則體,由Rule—'…"給 出;第三部分為相關(guān)選項(xiàng),由Option」,…"給出。
規(guī)則體部分描述了特征正則表達(dá)式,其語(yǔ)法符合正EE POSIX 1003.2標(biāo)準(zhǔn)。
2) 用規(guī)則編譯器把規(guī)則文件編譯為規(guī)則數(shù)據(jù)庫(kù)。
規(guī)則編譯器完成規(guī)則文件到規(guī)則數(shù)據(jù)庫(kù)的轉(zhuǎn)換工作。該工作分四個(gè)步驟完

A.對(duì)規(guī)則文件進(jìn)行語(yǔ)法檢査,同時(shí)生成解析樹(shù)。
正則表達(dá)式的語(yǔ)法可以由上下文無(wú)關(guān)文法描述,因此可以使用Lex和Yacc 編譯工具生成語(yǔ)法解析器(Parser),對(duì)正則表達(dá)式的語(yǔ)法進(jìn)行檢査。例如正則 表達(dá)式頂層語(yǔ)法用Yacc可表述為
<regEx> :== <regxSpecial> 〃特殊匹酉己(比如'.') I <regxOneChar> 〃單個(gè)字符 I々egxPredef^〃預(yù)定義字符集合 I <regxCharClass〉〃用戶自定義字符集合 I <regEx> <regEx> 〃連接操作符 I <regEx> T <regEx> 〃選擇操作符 I <regEx> <repeatSpec>〃重復(fù)(比如'*') _I '(' <regEx> ')' 〃分組_
在進(jìn)行語(yǔ)法檢査的同時(shí),也可利用Yacc的動(dòng)作部分定義生成語(yǔ)法解析樹(shù) (Parse Tree)。解析樹(shù)為一種每個(gè)節(jié)點(diǎn)分支不超過(guò)2的樹(shù),樹(shù)中非葉節(jié)點(diǎn)為操作 符,葉子節(jié)點(diǎn)為字符或集合。操作符包括連接操作符(" ")、選擇操作符("l")、 重復(fù)操作符("{n,m}")、 Kleen閉包操作符("*")。葉子節(jié)點(diǎn)可以是單個(gè)字符(如 "a,,)、集合(如"[a-z]"、 "[abcl23]")、集合的補(bǔ)集(如"[Aa-z]"、 "[、bcl23]")、 代表集合的字符(如"\d",它代表"
")或代表集合補(bǔ)集的字符(如"\D", 它代表"[ -9]")等。集合與補(bǔ)集的轉(zhuǎn)義字符序列符合IEEE POSIX 1003.2標(biāo)準(zhǔn)。 連接操作符(" ,,)、選擇操作符("l")、重復(fù)操作符("{n,m}")、 Kleen閉包操 作符("*")生成解析樹(shù)的過(guò)程分別如圖l所示。
規(guī)則"(a|(
)){l,30}c*d"對(duì)應(yīng)的解析樹(shù)如圖2所示。圖中"{}"節(jié)點(diǎn)代 表"{n,m}"重復(fù)節(jié)點(diǎn),"[]"節(jié)點(diǎn)代表集合節(jié)點(diǎn)。具體的內(nèi)容(重復(fù)節(jié)點(diǎn)中的n 和m以及集合節(jié)點(diǎn)中集合的具體元素)由節(jié)點(diǎn)相關(guān)參數(shù)給出,即"{}"節(jié)點(diǎn)具 有參數(shù)(1,30),"[]"節(jié)點(diǎn)具有參數(shù)(0,1,2,3,4,5,6,7,8,9)。
B.對(duì)解析樹(shù)進(jìn)行必要的預(yù)處理和優(yōu)化。
到目前為止,解析樹(shù)中還包含了一些在后面步驟中不能直接支持的元素, 因此必須通過(guò)一定的處理使之變成可直接支持的元素。主要的預(yù)處理有
今"+"操作符的處理,"+ "操作符在后面步驟中不直接支持,需要轉(zhuǎn) 換為如"a+"需轉(zhuǎn)換為"aa*"。該預(yù)處理可通過(guò)在解析樹(shù)上增加節(jié)點(diǎn)并重 構(gòu)解析樹(shù)完成。
今預(yù)定義字符集合的處理。通過(guò)轉(zhuǎn)義字符定義的字符集合不被直接支 持,需要把其中的元素提取出來(lái),明確指定。如"\d"轉(zhuǎn)換為"
", "\D"轉(zhuǎn) 換為"[AQ-9]", "[:alphanum:]"轉(zhuǎn)換為"
"。該預(yù)處理可直接修改節(jié)
點(diǎn)參數(shù)實(shí)現(xiàn)。
今頂層選擇操作符的分割。如果解析樹(shù)的根為選擇節(jié)點(diǎn)"1",則該解析 樹(shù)可分割為兩棵解析樹(shù)而不影響匹配結(jié)果。該過(guò)程循環(huán)執(zhí)行直到根節(jié)點(diǎn)不再是
"1"。如"A問(wèn)C"處理后變?yōu)槿媒馕鰳?shù),分別為"A"、 "B"、 "C"。
除預(yù)處理外,還需進(jìn)行優(yōu)化操作。優(yōu)化操作的目的是在不改變解析樹(shù)語(yǔ)義的 情況下降低表達(dá)式的存儲(chǔ)或匹配代價(jià)。
c.把解析樹(shù)轉(zhuǎn)換為帶記憶的非確定有限自動(dòng)機(jī)。
把解析樹(shù)轉(zhuǎn)換為非確定有限自動(dòng)機(jī),借助改進(jìn)的Thompson算法。除 Thompson算法原來(lái)支持的操作符外,另外增加對(duì)重復(fù)操作符的支持。對(duì)解析樹(shù) 進(jìn)行一趟后續(xù)遍歷,即可完成非確定有限自動(dòng)機(jī)的生成。
對(duì)于不同類型節(jié)點(diǎn),其狀態(tài)機(jī)均由子樹(shù)的狀態(tài)機(jī)推導(dǎo)得出。
節(jié)點(diǎn)類型為葉子節(jié)點(diǎn)(單個(gè)字符)時(shí),對(duì)應(yīng)非確定有限自動(dòng)機(jī)如圖3所 示。
節(jié)點(diǎn)類型為葉子節(jié)點(diǎn)(集合)時(shí),對(duì)應(yīng)非確定有限自動(dòng)機(jī)如圖4所示。
節(jié)點(diǎn)類型為連接操作符,假設(shè)左右子樹(shù)對(duì)應(yīng)起始狀態(tài)分別為h、 12;對(duì)應(yīng)
終結(jié)狀態(tài)分別為Fh F2,對(duì)應(yīng)非確定有限自動(dòng)機(jī)如圖5所示。
節(jié)點(diǎn)類型為選擇操作符,假設(shè)左右子樹(shù)對(duì)應(yīng)起始狀態(tài)分別為L(zhǎng)、 12;對(duì)應(yīng)
終結(jié)狀態(tài)分別為F^ F2,對(duì)應(yīng)非確定有限自動(dòng)機(jī)如圖6所示。
節(jié)點(diǎn)類型為Kleen閉包操作符,假設(shè)子樹(shù)對(duì)應(yīng)起始狀態(tài)為11;對(duì)應(yīng)終結(jié)狀
態(tài)為F^對(duì)應(yīng)非確定有限自動(dòng)機(jī)如圖7所示。
節(jié)點(diǎn)類型為重復(fù)操作符時(shí),生成的非確定有限自動(dòng)機(jī)與子樹(shù)的非確定有
限自動(dòng)機(jī)相同,但需標(biāo)上特殊標(biāo)記,并存儲(chǔ)重復(fù)范圍。 另外,在遍歷過(guò)程中,每處理到一個(gè)新的重復(fù)節(jié)點(diǎn),就生成一個(gè)新的非確 定有限自動(dòng)機(jī),并記錄相關(guān)非確定有限自動(dòng)機(jī)間的連接關(guān)系。
規(guī)則"(a|(
)){l,30}c*d"對(duì)應(yīng)的解析樹(shù)按照Thompson算法轉(zhuǎn)換成的非確 定有限自動(dòng)機(jī)如圖8所示;同一規(guī)則按改進(jìn)算法轉(zhuǎn)換成的非確定有限自動(dòng)機(jī)如 圖9所示,圖中"EP"代表s邊,橢圓形和圓形節(jié)點(diǎn)代表狀態(tài),帶箭頭的邊表 示狀態(tài)轉(zhuǎn)換,邊所附的字符為轉(zhuǎn)換字符。如果箭頭為圓頭,則轉(zhuǎn)換條件為集合, 集合元素由關(guān)聯(lián)參數(shù)給出。
D.把帶記憶的非確定有限自動(dòng)機(jī)轉(zhuǎn)換為帶記憶的確定有限自動(dòng)機(jī)。 把非確定有限自動(dòng)機(jī)轉(zhuǎn)換為確定有限自動(dòng)機(jī),使用改進(jìn)的e-閉包方法。它 與經(jīng)典s-閉包方法不同之處有對(duì)于生成的自動(dòng)機(jī),增加參數(shù),記錄其類型是 否需要重復(fù)執(zhí)行;如果需要,還要記錄其重復(fù)范圍。生成的狀態(tài)機(jī)為"滿狀態(tài)
機(jī)",即在每個(gè)節(jié)點(diǎn)都存在對(duì)應(yīng)于0-255輸入字符的共256條轉(zhuǎn)換邊。如果在非 確定有限自動(dòng)機(jī)中不存在某個(gè)特定的轉(zhuǎn)換,則在確定有限自動(dòng)機(jī)中增加一條這 樣的轉(zhuǎn)換,轉(zhuǎn)入的狀態(tài)為新增的特殊狀態(tài)——REJECT (拒絕狀態(tài),表明匹配失 敗)。另外,由于前一步驟中,以重復(fù)操作符為邊界,把解析樹(shù)分為多個(gè)部分, 分別轉(zhuǎn)換為非確定有限自動(dòng)機(jī),并記錄了自動(dòng)機(jī)之間的關(guān)系,在該步驟中,用e-閉包方法把每個(gè)非確定有限自動(dòng)機(jī)轉(zhuǎn)換為確定有限自動(dòng)機(jī),同時(shí)也許記錄自動(dòng) 機(jī)之間的連接關(guān)系。
規(guī)則"(a|(
)){l,30}c*d"對(duì)應(yīng)的非確定有限自動(dòng)機(jī)按照經(jīng)典s-閉包算法轉(zhuǎn) 換成的確定有限自動(dòng)機(jī)如圖IO所示;同一規(guī)則按改進(jìn)算法轉(zhuǎn)換成的確定有限自 動(dòng)機(jī)如圖11所示。圖中橢圓形和圓形節(jié)點(diǎn)代表狀態(tài),帶箭頭的邊表示狀態(tài)轉(zhuǎn)換, 邊所附的字符為轉(zhuǎn)換字符。
3)使用模式匹配引擎對(duì)輸入字符串進(jìn)行匹配
模式匹配引擎完成輸入字符串與特征字符串(正則表達(dá)式生成的狀態(tài)自動(dòng) 機(jī))之間的匹配。模式匹配引擎可以由現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)或?qū)S眉?電路(ASIC)實(shí)現(xiàn),它實(shí)現(xiàn)了正則表達(dá)式數(shù)據(jù)庫(kù)中的帶記憶確定有限自動(dòng)機(jī), 可接受輸入數(shù)據(jù),判斷是否存在與庫(kù)中正則表達(dá)式的匹配。模式匹配引擎的結(jié) 構(gòu)如圖12所示,圖中
(1) 規(guī)則庫(kù),規(guī)則數(shù)據(jù)庫(kù)在模式匹配引擎中的保存形式,其中記錄了編譯 后的確定有限自動(dòng)機(jī),各自動(dòng)機(jī)之間的連接關(guān)系,以及以重復(fù)操作符為根的確 定有限自動(dòng)機(jī)的重復(fù)次數(shù)等。
(2) 執(zhí)行引擎,模式匹配的執(zhí)行單元,它負(fù)責(zé)讀入待匹配數(shù)據(jù),進(jìn)行快速 分類,創(chuàng)建匹配上下文,以及匹配上下文在各個(gè)狀態(tài)機(jī)之間的跳轉(zhuǎn)等。
(3) 快速分類引擎,根據(jù)輸入數(shù)據(jù)快速確定相關(guān)的確定有限自動(dòng)機(jī),并由 執(zhí)行引擎創(chuàng)建相應(yīng)的匹配上下文。
(4) 匹配上下文,記錄了當(dāng)前正在匹配的狀態(tài)機(jī),當(dāng)前所處的狀態(tài)等信息, 如果是處于重復(fù)操作符為根的狀態(tài)機(jī),還記錄己經(jīng)匹配的次數(shù)。
(5) 規(guī)則數(shù)據(jù)庫(kù),規(guī)則編譯器對(duì)規(guī)則進(jìn)行編譯后形成的、模式匹配引擎可 以讀入的二進(jìn)制文件,其中保存了各個(gè)確定有限自動(dòng)機(jī)的狀態(tài)、各個(gè)狀態(tài)的跳 轉(zhuǎn)關(guān)系等。如果是重復(fù)操作符為根的狀態(tài)機(jī),還記錄重復(fù)范圍參數(shù)。
(6) 輸入/輸出數(shù)據(jù),模式匹配引擎與外界交換的信息。輸入數(shù)據(jù)主要是指 待匹配的數(shù)據(jù)流,也可能包括部分配置模式匹配引擎的數(shù)據(jù);輸出數(shù)據(jù)是指模 式匹配引擎的匹配結(jié)果,包括匹配是否成功,匹配位置、匹配次數(shù)等。
模式匹配的執(zhí)行流程分別如圖13和圖14所示。其中圖13是上下文調(diào)度流
程,圖14是匹配引擎的主要執(zhí)行流程。
權(quán)利要求
1.一種基于帶記憶確定有限自動(dòng)機(jī)的正則表達(dá)式匹配加速方法,其特征在于包括正則表達(dá)式規(guī)則編譯器和模式匹配引擎,正則表達(dá)式規(guī)則編譯器先把正則表達(dá)式轉(zhuǎn)換為解析樹(shù),再分別把解析樹(shù)轉(zhuǎn)換為帶記憶的非確定有限自動(dòng)機(jī)和帶記憶的確定有限自動(dòng)機(jī),模式匹配引擎使用編譯器生成的帶記憶確定有限自動(dòng)機(jī)實(shí)現(xiàn)對(duì)模式匹配的加速。
2. 根據(jù)權(quán)利要求1所述的一種基于帶記憶確定有限自動(dòng)機(jī)的正則表達(dá)式匹配加速方法,其特征在于所述的正則表達(dá)式規(guī)則編譯器先把正則表達(dá)式轉(zhuǎn)換為 解析樹(shù),再分別把解析樹(shù)轉(zhuǎn)換為帶記憶的非確定有限自動(dòng)機(jī)和帶記憶的確定有限自動(dòng)機(jī)借助Lex和Yacc軟件實(shí)現(xiàn)正則表達(dá)式上下文無(wú)關(guān)文法,對(duì)正則表達(dá) 式規(guī)則語(yǔ)法進(jìn)行解析,并在解析過(guò)程中根據(jù)匹配文法建立相應(yīng)相應(yīng)節(jié)點(diǎn)類型的 子樹(shù),最終形成完整的解析樹(shù);在Thompson算法支持操作符的基礎(chǔ)上,增加重 復(fù)操作符({n,m}),其對(duì)應(yīng)的非確定狀態(tài)機(jī)與所重復(fù)表達(dá)式的非確定狀態(tài)機(jī)相 同,但增加了重復(fù)范圍參數(shù),使用該算法將解析樹(shù)轉(zhuǎn)換為帶記憶的非確定有限 自動(dòng)機(jī);對(duì)于不含重復(fù)操作符的非確定有限自動(dòng)機(jī),按s-閉包算法生成確定有 限自動(dòng)機(jī),而對(duì)于含有重復(fù)操作符的非確定有限自動(dòng)機(jī),則先用帶有特殊標(biāo)記 的簡(jiǎn)單字符替換重復(fù)操作符,按s-閉包算法把它轉(zhuǎn)換為確定有限自動(dòng)機(jī),另外 單獨(dú)把被替換的部分按s-閉包算法轉(zhuǎn)換為另一個(gè)確定有限自動(dòng)機(jī);解析樹(shù)由對(duì) 應(yīng)的正則表達(dá)式經(jīng)解析生成,為一種每個(gè)節(jié)點(diǎn)分支不超過(guò)2的樹(shù),樹(shù)中非葉節(jié) 點(diǎn)為操作符,葉子節(jié)點(diǎn)為字符或集合,操作符包括連接操作符(" ")、選擇操作 符("l")、重復(fù)操作符("{n,m}")、 Kleen閉包操作符("*"),葉子節(jié)點(diǎn)是單個(gè) 字符、集合、集合的補(bǔ)集、代表集合的字符或代表集合補(bǔ)集的字符,集合與補(bǔ) 集的轉(zhuǎn)義字符序列符合IEEE POSIX 1003.2標(biāo)準(zhǔn)。
3. 根據(jù)權(quán)利要求1所述的一種基于帶記憶確定有限自動(dòng)機(jī)的正則表達(dá)式匹 配加速方法,其特征在于所述的編譯器編譯器以正則表達(dá)式規(guī)則文件為輸入, 輸出正則表達(dá)式數(shù)據(jù)庫(kù),它首先對(duì)規(guī)則文件進(jìn)行語(yǔ)法檢查并把它轉(zhuǎn)換為帶記憶 的非確定有限自動(dòng)機(jī),之后再轉(zhuǎn)換為帶記憶的確定有限自動(dòng)機(jī),帶記憶的確定 有限自動(dòng)機(jī)存儲(chǔ)在規(guī)則數(shù)據(jù)庫(kù)中。
4. 根據(jù)權(quán)利要求1所述的一種基于帶記憶確定有限自動(dòng)機(jī)的正則表達(dá)式匹 配加速方法,其特征在于所述的模式匹配引擎使用編譯器生成的帶記憶確定有 限自動(dòng)機(jī)實(shí)現(xiàn)對(duì)模式匹配的加速模式匹配引擎讀入編譯器生成的帶記憶確定有限自動(dòng)機(jī)和輸入字符串,把輸入字符串跟每個(gè)有限自動(dòng)機(jī)進(jìn)行匹配,匹配的 位置保存在匹配上下文中;當(dāng)一個(gè)有限自動(dòng)機(jī)匹配完成,則根據(jù)該自動(dòng)機(jī)類型 確定下一步動(dòng)作如果該自動(dòng)機(jī)不包含重復(fù)操作符,且沒(méi)有后續(xù)自動(dòng)機(jī),則報(bào) 告一個(gè)匹配;如果該自動(dòng)機(jī)不包含重復(fù)操作符,但有后續(xù)有限自動(dòng)機(jī),則根據(jù) 貪婪模式選項(xiàng)確定是否報(bào)告一個(gè)匹配,并生成一個(gè)后續(xù)有限自動(dòng)機(jī)的匹配上下 文;如果該自動(dòng)機(jī)包含重復(fù)操作符,則增加匹配次數(shù),并根據(jù)匹配次數(shù)決定下 一步動(dòng)作如果匹配次數(shù)小于重復(fù)范圍下限,則把匹配位置調(diào)整到自動(dòng)機(jī)初始 狀態(tài),繼續(xù)匹配;如果匹配次數(shù)大于重復(fù)范圍上限,則生成后續(xù)狀態(tài)機(jī)的匹配 上下文或報(bào)告一個(gè)匹配;如果匹配次數(shù)位于重復(fù)范圍內(nèi),則把匹配位置調(diào)整到 自動(dòng)機(jī)初始狀態(tài),繼續(xù)匹配;模式匹配引擎可以由現(xiàn)場(chǎng)可編程門(mén)陣列或?qū)S眉?成電路實(shí)現(xiàn),它實(shí)現(xiàn)了正則表達(dá)式數(shù)據(jù)庫(kù)中的帶記憶確定有限自動(dòng)機(jī),可接受 輸入數(shù)據(jù),判斷是否存在與庫(kù)中正則表達(dá)式的匹配。
全文摘要
本發(fā)明公開(kāi)了一種基于帶記憶確定有限自動(dòng)機(jī)的正則表達(dá)式匹配加速方法。它包括正則表達(dá)式規(guī)則編譯器和模式匹配引擎,正則表達(dá)式規(guī)則編譯器先把正則表達(dá)式轉(zhuǎn)換為解析樹(shù),再分別把解析樹(shù)轉(zhuǎn)換為帶記憶的非確定有限自動(dòng)機(jī)和帶記憶的確定有限自動(dòng)機(jī),模式匹配引擎使用編譯器生成的帶記憶確定有限自動(dòng)機(jī)實(shí)現(xiàn)對(duì)模式匹配的加速。本發(fā)明的優(yōu)點(diǎn)是1)因?yàn)橹苯又С至酥貜?fù)操作符,編譯器可以不對(duì)重復(fù)表達(dá)式進(jìn)行展開(kāi),大大降低了編譯器開(kāi)發(fā)難度,也降低了編譯器的內(nèi)存占用和編譯時(shí)間;2)基于同樣的原因,編譯器生成的規(guī)則數(shù)據(jù)庫(kù)大小也可大大減小,降低了模式匹配引擎的成本和復(fù)雜度。
文檔編號(hào)G06F17/30GK101201836SQ20071007107
公開(kāi)日2008年6月18日 申請(qǐng)日期2007年9月4日 優(yōu)先權(quán)日2007年9月4日
發(fā)明者平玲娣, 潘雪增, 王繼民, 陸魁軍, 健 陳, 陳小平 申請(qǐng)人:浙江大學(xué)
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1