欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

用于多正則表達(dá)式聯(lián)合搜索的擴(kuò)展有限狀態(tài)機(jī)及搜索方法

文檔序號:6339490閱讀:197來源:國知局
專利名稱:用于多正則表達(dá)式聯(lián)合搜索的擴(kuò)展有限狀態(tài)機(jī)及搜索方法
技術(shù)領(lǐng)域
本發(fā)明涉及一種用于實(shí)現(xiàn)多正則表達(dá)式聯(lián)合搜索的擴(kuò)展有限狀態(tài) 機(jī),也涉及利用該擴(kuò)展有限狀態(tài)機(jī)實(shí)現(xiàn)字符串搜索的方法,屬于計(jì)算機(jī) 技術(shù)領(lǐng)域。
背景技術(shù)
隨著IT技術(shù)的發(fā)展,信息量呈爆炸性增長趨勢,信息檢索占據(jù)了越 來越重要的地位。基于正則表達(dá)式的搜索方法,由于實(shí)現(xiàn)簡單、性能高 效,在字符串搜索中得到了廣泛應(yīng)用,并且出現(xiàn)了一大批成熟的支持工 具,grep、 egrep、 awk、 sed等就是其中的典型代表。
正則表達(dá)式(Regular Expression),又稱正規(guī)表達(dá)式或常規(guī)表達(dá)式, 常用來描述或匹配一系列符合某個句法規(guī)則的字符串。簡單地說, 一個 正則表達(dá)式是由普通字符(例如字符a到z)以及特殊字符(稱為元字符) 組成的文字模式,該模式描述在查找文字主體時待匹配的一個或多個字 符串。正則表達(dá)式及后文提及的有限狀態(tài)機(jī)等內(nèi)容,是計(jì)算機(jī)領(lǐng)域人員 的公共常識,此處及后文不再贅述。
基于正則表達(dá)式的搜索方法, 一般先把正則表達(dá)式轉(zhuǎn)換成對應(yīng)的有 限狀態(tài)機(jī),然后基于有限狀態(tài)機(jī)來完成搜索過程。有限狀態(tài)機(jī)有兩種基 本形態(tài)不確定性有限狀態(tài)機(jī)(NFA)和確定性有限狀態(tài)機(jī)(DFA)。不確定 性有限狀態(tài)機(jī)M是一個五元式,M=(Q, VtU{e}, S, qO, F),其中,Q 為有窮狀態(tài)集合,Vt為輸入字母表,e為空串,S為狀態(tài)轉(zhuǎn)換函數(shù),q0 為始態(tài),F(xiàn)為終止?fàn)顟B(tài)集。確定性有限狀態(tài)機(jī)M也是一個五元式,M-(Q, Vt, S, q0, F},其中,各個參數(shù)的含義與不確定性有限狀態(tài)機(jī)中對應(yīng)參數(shù) 的含義相同。二者的區(qū)別在于,NFA可以接受空串e作為輸入并且狀態(tài)轉(zhuǎn) 換函數(shù)允許是多值的,DFA不能接受空串e作為輸入并且狀態(tài)轉(zhuǎn)換函數(shù)必 須是單值的。不確定性有限狀態(tài)機(jī)和確定性有限狀態(tài)機(jī)的描述能力是等 價(jià)的,可以相互轉(zhuǎn)換,轉(zhuǎn)換的方法可以采用現(xiàn)在廣泛采用的子集構(gòu)造算 法。
目前流行的基于正則表達(dá)式的搜索方法,多以單個正則表達(dá)式為處
理對象。如果要同時搜索多個正則表達(dá)式, 一般有兩種處理方法 一種 是對每個子正則表達(dá)式分別進(jìn)行搜索,最后把各次得到的搜索結(jié)果合并; 另一種是通過選擇運(yùn)算把這些子正則表達(dá)式結(jié)合成一個新的正則表達(dá) 式,然后對新得到的正則表達(dá)式進(jìn)行搜索。無論采用哪種方法,均存在 一定不足。第一種方法弊病在于掃描遍數(shù)過多,速度太慢;第二種方法 搜索速度很快,然而卻損失了單個正則表達(dá)式的信息,如果不添加額外 處理,通過選擇運(yùn)算后得到的新正則表達(dá)式無法區(qū)分出組成它的各個子 正則表達(dá)式。這種"只見森林不見樹木"的處理方法,在很多場合都是 不方便的。比如,如果不對搜索過程添加特殊處理例程,該方法無法知 道搜索結(jié)果到底匹配了哪個子正則表達(dá)式。
如何高效地并行搜索多個正則表達(dá)式,同時又有效保留原有的單個 正則表達(dá)式的信息,是字符串搜索中的一個常見問題。實(shí)際中,多采用 上述提及的第二種方法,這樣可以獲得較快的搜索速度,但需要用戶手 工編寫特別的處理例程,給用戶帶來了額外的處理負(fù)擔(dān)。
字符串搜索另一個常見問題是字符串的回退。例如考慮從字符串 "This is a black box"中同時搜索"black"和"lack"兩個正則表 達(dá)式,在搜索到了 "black"之后,必須把匹配的字符串回退到源字符串 中,否則"lack"就不會得到匹配。在現(xiàn)有技術(shù)中,對于單個正則表達(dá) 式的回退處理比較容易,只需把已匹配的字符串全部回退到源字符串中, 同時把相應(yīng)的有限狀態(tài)機(jī)重置到開始狀態(tài)即可。對于同時搜索多個正則 表達(dá)式的回退,處理起來比較復(fù)雜,目前多是通過用戶編寫額外的處理 例程解決,加重了用戶的處理負(fù)擔(dān)。

發(fā)明內(nèi)容
本發(fā)明的首要目的在于提供一種用于實(shí)現(xiàn)多正則表達(dá)式聯(lián)合搜索的 擴(kuò)展有限狀態(tài)機(jī)。該擴(kuò)展有限狀態(tài)機(jī)通過對傳統(tǒng)有限狀態(tài)機(jī)的功能擴(kuò)展, 可以一遍掃描同時搜索多個正則表達(dá)式,同時又可以有效保留單個正則 表達(dá)式的信息。
本發(fā)明的另外一個目的是提供上述擴(kuò)展有限狀態(tài)機(jī)實(shí)現(xiàn)字符串搜索 的方法。
為實(shí)現(xiàn)上述的發(fā)明目的,本發(fā)明采用下述的技術(shù)方案
一種用于多正則表達(dá)式聯(lián)合搜索的擴(kuò)展有限狀態(tài)機(jī),包括有窮狀態(tài) 集合、輸入字母表、狀態(tài)轉(zhuǎn)換函數(shù)、始態(tài)和終止?fàn)顟B(tài)集,其特征在于還包括
狀態(tài)標(biāo)識集合,用于給狀態(tài)機(jī)中的每一個狀態(tài)加一個標(biāo)識; 狀態(tài)與狀態(tài)標(biāo)識的映射函數(shù),用于通過該函數(shù)計(jì)算出一個給定狀態(tài) 的狀態(tài)標(biāo)識;
狀態(tài)轉(zhuǎn)換函數(shù)的標(biāo)識集合,用于給狀態(tài)機(jī)中的每一個狀態(tài)轉(zhuǎn)換關(guān)系都引入一個唯一的標(biāo)識;
狀態(tài)轉(zhuǎn)換函數(shù)與狀態(tài)轉(zhuǎn)換函數(shù)標(biāo)識的映射函數(shù),用于計(jì)算與一條狀態(tài)轉(zhuǎn)換關(guān)系對應(yīng)的標(biāo)識。
所述擴(kuò)展有限狀態(tài)機(jī)分為擴(kuò)展非確定性有限狀態(tài)機(jī)和擴(kuò)展確定性有限狀態(tài)機(jī);
其中,擴(kuò)展非確定性有限狀態(tài)機(jī)中的狀態(tài)轉(zhuǎn)換函數(shù)允許是多值的, 擴(kuò)展確定性有限狀態(tài)機(jī)不接受空串作為輸入并且狀態(tài)轉(zhuǎn)換函數(shù)必須是單 值的。
一種基于擴(kuò)展有限狀態(tài)機(jī)的多正則表達(dá)式聯(lián)合搜索方法,其特征在于
(1) 構(gòu)造同時識別多個正則表達(dá)式的擴(kuò)展非確定性有限狀態(tài)機(jī)或擴(kuò) 展確定性有限狀態(tài)機(jī);
(2) 分配一個足夠大的狀態(tài)轉(zhuǎn)換函數(shù)標(biāo)識空間S,該空間中的每一個 元素用來存放一個狀態(tài)轉(zhuǎn)換函數(shù)標(biāo)識,用變量flag標(biāo)識該空間的使用狀 況,置flag-O;記當(dāng)前狀態(tài)標(biāo)識集合U= P (q。),其中q。為自動機(jī)的始 態(tài);
(3) 正向搜索時,每當(dāng)調(diào)用一次狀態(tài)轉(zhuǎn)換函數(shù)δ (p, a)=q,則自動 執(zhí)行下面三個步驟
u=un p (q),
S[flag] = w (p, a, q),
flag=flag+l,
(4) 逆向回退字符時
(4. l)如果只沿著某個特定的正則表達(dá)式回退,若該正則表達(dá)式 的標(biāo)識為i,執(zhí)行如下步驟記狀態(tài)機(jī)當(dāng)前狀態(tài)為m,若i∈p(m),則可 以回退字符,否則停止回退,若可以回退字符,則査找狀態(tài)轉(zhuǎn)換函數(shù)標(biāo) 識空間對應(yīng)的狀態(tài)轉(zhuǎn)換標(biāo)識函數(shù)ω(p, a, m),然后把字符a回退回輸入串中,同時把p設(shè)為當(dāng)前狀態(tài),執(zhí)行flag=flag-l,即flag自動減l,釋放標(biāo)識空間,若繼續(xù)回退字符,則重復(fù)本步驟,否則結(jié)束回退;
(4. 2)如果不沿著某個特定的正則表達(dá)式回退,則執(zhí)行如下步驟 記狀態(tài)機(jī)當(dāng)前狀態(tài)為m,査找狀態(tài)轉(zhuǎn)換函數(shù)標(biāo)識空間對應(yīng)的狀態(tài)轉(zhuǎn)換標(biāo)識 函數(shù)w(p, a, m),然后把字符a回退回輸入串中,同時把p設(shè)為當(dāng)前狀 態(tài),執(zhí)行flag=flag-1,若繼續(xù)回退字符,則重復(fù)本步驟,否則結(jié)束回 退。
所述步驟(l)中,構(gòu)造同時識別多個正則表達(dá)式的擴(kuò)展非確定性有限 狀態(tài)機(jī)E-NFA包括如下步驟
(11) 為多個子正則表達(dá)式的每一個分別構(gòu)造相應(yīng)的擴(kuò)展非確定性 有限狀態(tài)機(jī)E-NFA ;
(12) 增加一個新的始態(tài)s作為E-NFA的始態(tài),從s到(ll)中構(gòu)造的 各個E-NFAm的始態(tài)分別引一條e弧,把s作為E-NFA的始態(tài);增加一個 新的終態(tài)e作為E-NFA的終態(tài),從各個E-NFA,的終態(tài)分別引入一條e弧 到e;
(13) 計(jì)算狀態(tài)集,該狀態(tài)集為各個E-NFAm的狀態(tài)集加上步驟(ll)新
生成的始態(tài)和終態(tài);
(14) 計(jì)算狀態(tài)轉(zhuǎn)換函數(shù),各個E-NFl的狀態(tài)轉(zhuǎn)換關(guān)系均為E-NFA中 有效的狀態(tài)轉(zhuǎn)換函數(shù)關(guān)系,步驟(11)中新添加的狀態(tài)轉(zhuǎn)換關(guān)系也是E-NFA 中有效的狀態(tài)轉(zhuǎn)換函數(shù)關(guān)系;
(15) 計(jì)算狀態(tài)標(biāo)識集合,該集合為各個E-NFl的狀態(tài)標(biāo)識集合的合
集;
(16) 計(jì)算狀態(tài)與狀態(tài)標(biāo)識的映射函數(shù),其中E-NFA的始態(tài)s的狀態(tài) 標(biāo)識為各個E-NFA^的始態(tài)的狀態(tài)標(biāo)識之和,E-NFA的終態(tài)e的狀態(tài)標(biāo)識為 各個E-NFAm的終態(tài)集的狀態(tài)標(biāo)識之和,各個E-NFA^中每個映射函數(shù)關(guān)系 都是E-NFA中的有效映射函數(shù)關(guān)系;
(17) 計(jì)算狀態(tài)轉(zhuǎn)換函數(shù)與狀態(tài)轉(zhuǎn)換函數(shù)標(biāo)識的映射函數(shù),其中各個 E-NFAm中的每個映射函數(shù)關(guān)系都是E-NFA中的有效映射函數(shù)關(guān)系;對步驟 (ll)新添加的每一個狀態(tài)轉(zhuǎn)換函數(shù),生成一個唯一的標(biāo)識,將該標(biāo)識加 入到集合N,中,并且在映射函數(shù)中記錄;
(18) 計(jì)算狀態(tài)轉(zhuǎn)換函數(shù)標(biāo)識集合,E-NFA的狀態(tài)轉(zhuǎn)換函數(shù)標(biāo)識集合 為各個E-NFAm的狀態(tài)轉(zhuǎn)換函數(shù)標(biāo)識集與步驟(16)新生成的N^的合集;
(19) 計(jì)算字母表,E-NFA的字母表為各個E-NFm字母表的合集;
(20)計(jì)算終態(tài)集合,E-NFA的終態(tài)集合為各個E-NFA,終態(tài)集合之和 加上步驟(ll)新生成的終態(tài)e。
所述步驟(1)中,首先按照上述的方法構(gòu)造識別多個正則表達(dá)式的 擴(kuò)展非確定性有限狀態(tài)機(jī),然后按照確定化方法將其構(gòu)造成擴(kuò)展確定性 有限狀態(tài)機(jī)。
本發(fā)明通過擴(kuò)展傳統(tǒng)的有限狀態(tài)機(jī),給狀態(tài)引入標(biāo)識,同時給狀態(tài) 轉(zhuǎn)換函數(shù)也引入標(biāo)識,從而可以有效解決上述提及的串搜索中的兩個常 見問題,用戶無需編寫額外例程即可實(shí)現(xiàn)高效的多正則表達(dá)式的并行搜 索,又可以保留單個正則表達(dá)式的信息,同時可以有效處理字符串回退。
具體實(shí)施例方式
本發(fā)明的核心技術(shù)思想在于擴(kuò)充了傳統(tǒng)的非確定性有限狀態(tài)機(jī)和確 定性有限狀態(tài)機(jī),給其引入了狀態(tài)標(biāo)識和狀態(tài)轉(zhuǎn)換函數(shù)標(biāo)識,本發(fā)明人 將其分別命名為擴(kuò)展非確定性有限狀態(tài)機(jī)和擴(kuò)展確定性有限狀態(tài)機(jī),它 們的定義如下
定義1擴(kuò)展非確定性有限狀態(tài)機(jī)(E-NFA)
擴(kuò)展非確定性有限狀態(tài)機(jī)M是一個九元式,M=(Q, P, N, VtU{ε}, rho , ω , δ , q0, F)。其中
Q、 Vt、 ε、 δ、 q0、 F的含義與非確定性有限狀態(tài)機(jī)中對應(yīng)參數(shù)含義相同;
P表示有窮狀態(tài)標(biāo)識集合;
N表示有窮狀態(tài)轉(zhuǎn)換函數(shù)標(biāo)識集合;
rho表示狀態(tài)與狀態(tài)標(biāo)識的映射函數(shù),為Q->2P,其中2P表示P的 冪集;
ω表示狀態(tài)轉(zhuǎn)換函數(shù)與狀態(tài)轉(zhuǎn)換函數(shù)標(biāo)識的映射函數(shù),為QX (Vt
U { ε } ) XQ->N的映射。
定義2 擴(kuò)展確定性有限狀態(tài)機(jī)(E-DFA)
擴(kuò)展確定性有限狀態(tài)機(jī)M是一個九元式,M=(Q, P, N, VtU{ε}, rho , ω , δ , q0, F),其中
Q、 Vt、 δ、 q0、 F、 P、 N、 rho的含義與確定性有限狀態(tài)機(jī)中對應(yīng) 參數(shù)含義相同;
ω表示狀態(tài)轉(zhuǎn)換函數(shù)與狀態(tài)轉(zhuǎn)換函數(shù)標(biāo)識的映射函數(shù),為QXVt XQ-〉N的映射。
定義3令P是一狀態(tài)機(jī)M的狀態(tài)集的子集,定義P (P)為<formula>see original document page 10</formula>
同時搜索多個正則表達(dá)式時,傳統(tǒng)方法一般通過選擇運(yùn)算先把各個 子正則表達(dá)式結(jié)合成一個新的正則表達(dá)式,然后基于新得到的正則表達(dá) 式完成搜索過程。這樣做的不足之處在于新得到的正則表達(dá)式中見不 到組成它的各個子正則表達(dá)式的信息。因此,即使某個字符串匹配了新 得到的正則表達(dá)式,也無法獲知到底匹配了哪個子正則表達(dá)式,除非人 工編寫特定例程去記錄這些信息。為了彌補(bǔ)這個不足,本發(fā)明在傳統(tǒng)的 五元有限狀態(tài)機(jī)的基礎(chǔ)上引入了兩個新的參數(shù)P和P ,相當(dāng)于給有限狀 態(tài)機(jī)的每一個狀態(tài)都加一個標(biāo)簽,該標(biāo)簽可以記錄一些附加信息,如該 狀態(tài)屬于原來的哪個子正則表達(dá)式等。
有限狀態(tài)機(jī)在進(jìn)行狀態(tài)轉(zhuǎn)換時有一個特點(diǎn)即使正向的狀態(tài)轉(zhuǎn)換都 是單值的,逆向回退時也可能是多值的。比如,對于狀態(tài)轉(zhuǎn)換關(guān)系δ(m, a)=q、 δ (n, a)=q,狀態(tài)m和n在遇到字符a時都轉(zhuǎn)移到狀態(tài)q,正向的 狀態(tài)轉(zhuǎn)移都是單值的,可在狀態(tài)q逆向回退時卻有兩條不同的回退路徑。 對于此類情況,試探每一條回退路徑是可能的,但這樣做一來速度太慢, 二來選擇的回退路徑可能根本就是錯誤的。因此,有必要記下正向搜索 時所用過的狀態(tài)轉(zhuǎn)換函數(shù)序列,這樣,就可以唯一地確定正向搜索時的 運(yùn)行軌跡,從而可以有效的沿著該軌跡回退回去。本質(zhì)上,這是一種以 空間換時間的策略。因此,本發(fā)明給傳統(tǒng)的有限狀態(tài)機(jī)引入了另外兩個 參數(shù)N和ω,給每個狀態(tài)轉(zhuǎn)換函數(shù)都打上一個唯一標(biāo)識(標(biāo)簽),所有這 些標(biāo)識(標(biāo)簽)就構(gòu)成了集合N,ω定義了狀態(tài)轉(zhuǎn)換函數(shù)與狀態(tài)轉(zhuǎn)換函數(shù)標(biāo) 識(標(biāo)簽)的映射關(guān)系。
根據(jù)所基于狀態(tài)機(jī)的不同形態(tài)(NFA或DFA),擴(kuò)展后的狀態(tài)機(jī)也包括 兩種擴(kuò)展非確定性有限狀態(tài)機(jī)和擴(kuò)展確定性有限狀態(tài)機(jī),分別記為 E-NFA和E-DFA。
E-NFA和E-DFA是本發(fā)明所述的多正則表達(dá)式聯(lián)合搜索的基礎(chǔ),下面 的算法說明了如何構(gòu)造E-NFA和E-DFA。
算法l:構(gòu)造識別單個正則表達(dá)式的E-NFA
算法輸入 一個單個的正則表達(dá)式Reg
算法輸出Reg對應(yīng)的E-NFA=(Q, P, N, VtU { ε }, p, ω, δ , q。,
F)
算法步驟
(1) 給正則表達(dá)式Reg生成一個唯一的編號標(biāo)識i;
(2) 置集合P二U),置集合N為空集;
(3) 以Thompson結(jié)構(gòu)為基礎(chǔ),構(gòu)造識別Reg的標(biāo)準(zhǔn)NFA,這樣可以得 到Q、 Vt、 S, q。, F五個參數(shù)。(由正則表達(dá)式構(gòu)造其對應(yīng)的標(biāo)準(zhǔn)NFA的 算法可參考編譯原理教科書);
(4) 對狀態(tài)集合Q中的每一個狀態(tài)q,加入p(q)二i;
(5) 對每一個狀態(tài)轉(zhuǎn)換函數(shù)S (p, a)=q,生成一個唯一的標(biāo)識j,把 j加入到集合N中,并且記w(p, a, q)二j。
構(gòu)造可以同時識別K個正則表達(dá)式的E-NFA時,首先按照算法1構(gòu) 造識別每個子正則表達(dá)式的E-NFAm(l《ra《K, K>1),然后執(zhí)行算法2。
算法2:構(gòu)造同時識別K個正則表達(dá)式的E-NFA
算法輸入K個正則表達(dá)式對應(yīng)的E-NFA =(Qm Pm, Nm, VtmU{e}, p m, " m, 5 m, q0m, Fm)
算法輸出同時識別K個正則表達(dá)式的E_NFA=(Q, P, N, VtU{e}, P , co , S , q0, F)
算法步驟
(1) 增加一個新的始態(tài)s作為E-NFA的始態(tài),從s到各個E-NFAb的始 態(tài)分別引一條e弧,置q。-s;增加一個新的終態(tài)e作為E-NFA的終態(tài), 從各個E-NFAm的終態(tài)分別引入一條e弧到e。
(2) 計(jì)算狀態(tài)集Q。 Q-Q!UQ2U…UQhUQkU {s, e},即E-NFA的狀 態(tài)集為各個E-NFAm的狀態(tài)集加上步驟(l)新生成的始態(tài)和終態(tài)。
(3) 計(jì)算狀態(tài)轉(zhuǎn)換函數(shù)5 。各個E-NFA^的狀態(tài)轉(zhuǎn)換關(guān)系"均為E-NFA 中有效的5關(guān)系,步驟(l)中新添加的狀態(tài)轉(zhuǎn)換關(guān)系也是E-NFA中有效的 S關(guān)系。
(4) 計(jì)算狀態(tài)標(biāo)識集合P。 P = P,UP2U…UPhUPk,即E-NFA的狀態(tài) 標(biāo)識集合P為各個E-NFAm的狀態(tài)標(biāo)識集合的合集。
(5) 計(jì)算狀態(tài)與狀態(tài)標(biāo)識的映射函數(shù)P 。
P (s) = P (q。J U p (q。2) U…U p (q。k—,) U p (q。k),即E-NFA的始態(tài)s的狀態(tài)標(biāo)識為各個E-NFAm 的始態(tài)的狀態(tài)標(biāo)識之和。p (e)=p (F》u p (F2)u…u p (Fk—,)u p (Fk), 即E-NFA的終態(tài)e的狀態(tài)標(biāo)識為各個E-NF^的終態(tài)集的狀態(tài)標(biāo)識之和。 此外,各個E-NFA^中每個p m關(guān)系都是E-NFA中的有效p關(guān)系。
(6) 計(jì)算狀態(tài)轉(zhuǎn)換函數(shù)與狀態(tài)轉(zhuǎn)換函數(shù)標(biāo)識的映射函數(shù)co。各個 E-NFAm中的每個"m關(guān)系都是E-NFA中的有效co關(guān)系;對步驟(l)新添加的 每一個狀態(tài)轉(zhuǎn)換函數(shù)S (p, a)=q,生成一個唯一的標(biāo)識j,把j加入到 集合N^中,并且記co(p, a, q)=j。
(7) 計(jì)算狀態(tài)轉(zhuǎn)換函數(shù)標(biāo)識集合N。 N-^UNsU…UNhUNkUN^,即 E-NFA的狀態(tài)轉(zhuǎn)換函數(shù)標(biāo)識集合N為各個E-NFAm的狀態(tài)轉(zhuǎn)換函數(shù)標(biāo)識集與 步驟(6)新生成的&。 的合集。
(8) 計(jì)算字母表Vt。 Vt = VtlUVtlU…UVtHUVtK,艮卩E-NFA的字母表 為各個E-NFAm字母表的合集。
(9) 計(jì)算終態(tài)集合F。 E-NFA的終態(tài)集合F為各個E-NFAm終態(tài)集合之 和加上步驟(l)新生成的終態(tài)e。
'如果想獲得更快的處理速度,可以對E-NFA做確定化處理,得到E-NFA 對應(yīng)的E-DFA,然后基于新產(chǎn)生的E-DFA來進(jìn)行字符串搜索。算法3以經(jīng) 典的子集構(gòu)造算法為骨架,給出了由E-NFA構(gòu)造對應(yīng)的E-DFA的方法。
算法3:由E-NFA構(gòu)造E-DFA的確定化方法
算法輸入 一個E-NFA=(Q, P, N, VtU{e}, p, co , S, q。, F)
算法輸出E-NFA對應(yīng)的E-DFA=(q, , P, , N, , Vt, , p,,",, S , , q。, , F,)
算法步驟
(1) 初始化。
(1. l)計(jì)算e -closure(q。)。初始時,e-closure (qQ)是Q,的唯—— 個狀態(tài),并且把該狀態(tài)標(biāo)記為未處理狀態(tài);(e -closure為狀態(tài)的e閉包 計(jì)算操作)
(1. 2)利用定義3計(jì)算P ( e -closure (q。)); (1.3)置P, =P, Vt, =Vt, q。, = e -closure (q0)
(2) 當(dāng)Q'存在一個未處理的狀態(tài)T,把狀態(tài)T標(biāo)識為已處理狀態(tài),檢 查字母表中的每一個字符在狀態(tài)T下所能轉(zhuǎn)移到的狀態(tài)集合U,如果U不 在集合Q'中,按照定義3計(jì)算P' (U),把U標(biāo)記為未處理狀態(tài)并加入
到集合Q'中。不斷重復(fù)本步驟直到Q'中的每一個狀態(tài)都為已處理狀態(tài)。
(3) 對(2)中得到的每一個狀態(tài)轉(zhuǎn)換關(guān)系S ' (p, a)=q(p、 qEQ' , a
EVt,),生成一個唯一的標(biāo)識j,把j加入到集合N'中,并且記o)' (p, a, q)=j。
(4)把E-DFA中包含E-NFA終態(tài)的所有狀態(tài)都加入E-DFA的終態(tài)集合 F'。
上面介紹了能同時識別多個正則表達(dá)式的擴(kuò)展有限狀態(tài)機(jī)(E-NFA或 E-DFA)的構(gòu)造過程,下面進(jìn)一步介紹如何基于擴(kuò)展的有限狀態(tài)機(jī)來同時 搜索多個正則表達(dá)式。
(1) 利用算法2或算法3構(gòu)造同時識別多個正則表達(dá)式的E-NFA或 E-DFA。
(2) 初始化搜索過程。分配一個足夠大的狀態(tài)轉(zhuǎn)換函數(shù)標(biāo)識空間S, 該空間中的每一個元素用來存放一個狀態(tài)轉(zhuǎn)換函數(shù)標(biāo)識。用變量flag標(biāo) 識該空間的使用狀況,置flag = 0;記當(dāng)前狀態(tài)標(biāo)識集合U= P (q。)( q。 為自動機(jī)的始態(tài))。
(3) 正向搜索時,每當(dāng)調(diào)用一次狀態(tài)轉(zhuǎn)換函數(shù)5 (p, a)=q,則自動
調(diào)用下面三條語句
u=un p (q) /*將新狀態(tài)標(biāo)識與已有狀態(tài)標(biāo)識集合
*的交集放入當(dāng)前狀態(tài)標(biāo)識集合U中, *用于確定目前匹配的正則表達(dá)式集合*/
S[flag]="(p, a, q) /*記錄當(dāng)前所用的狀態(tài)轉(zhuǎn)換函數(shù),
*把其標(biāo)識存入空間s*/
flag = flag+l /*空間的使用數(shù)目加1*/
(4) 逆向回退字符時
(4. l)如果只沿著某個特定的正則表達(dá)式回退,若該正則表達(dá)式的 標(biāo)識為i,執(zhí)行如下步驟記狀態(tài)機(jī)當(dāng)前狀態(tài)為m,若iep(m),則可以 回退字符,否則停止回退。若可以回退字符,則查找S[flag]對應(yīng)的狀態(tài) 轉(zhuǎn)換標(biāo)識函數(shù)co(p, a, ra),然后把字符a回退回輸入串中,同時把p設(shè) 為當(dāng)前狀態(tài),執(zhí)行flag=flag-1,即flag自動減l,釋放標(biāo)識空間。若 繼續(xù)回退字符,則重復(fù)本步驟,否則結(jié)束回退;
(4.2)如果不沿著某個特定的正則表達(dá)式回退,則執(zhí)行如下步驟 記狀態(tài)機(jī)當(dāng)前狀態(tài)為ra,查找S[flag]對應(yīng)的狀態(tài)轉(zhuǎn)換標(biāo)識函數(shù)"(p, a, m),然后把字符a回退回輸入串中,同時把p設(shè)為當(dāng)前狀態(tài),執(zhí)行flag -flag-1。若繼續(xù)回退字符,則重復(fù)本步驟,否則結(jié)束回退。
上述步驟中的變量U記錄了當(dāng)前所匹配的狀態(tài)標(biāo)識的集合,根據(jù)這 個參數(shù),就可以獲知該狀態(tài)屬于哪一個子正則表達(dá)式,從而可以獲知哪個正則表達(dá)式得到了匹配。同時,借助于P、 co,可以有效記錄正向的 執(zhí)行軌跡,從而可以方便的處理回退。這樣,用戶無需添加額外的處理 例程,就可有效解決前文提及的串搜索中的兩個常見問題。
需要指出的是
(1) 如果要基于E-DFA來搜索,不一定要把正則表達(dá)式先轉(zhuǎn)換成 E-NFA,然后再把E-NFA轉(zhuǎn)換成E-DFA。實(shí)際上,存在由正則表達(dá)式直接 構(gòu)造其對應(yīng)的DFA的算法,因此,理論上講,可以由正則表達(dá)式直接構(gòu) 造其對應(yīng)的E-DFA。
(2) 上述給出的搜索執(zhí)行流程只是一個總體框架,實(shí)際中可以做進(jìn)一 步的優(yōu)化,比如,如果U中只包含一個元素,則后續(xù)步驟中不必再計(jì)算U =un p (q)。
以上對本發(fā)明的具體實(shí)施方式
進(jìn)行了詳細(xì)的解說。對于本技術(shù)領(lǐng) 域的一般技術(shù)人員來說,在不背離本發(fā)明所述方法的精神和權(quán)利要求 范圍的情況下對它進(jìn)行的各種顯而易見的改變都在本發(fā)明的保護(hù)范圍 之內(nèi)。
權(quán)利要求
1.一種用于多正則表達(dá)式聯(lián)合搜索的擴(kuò)展有限狀態(tài)機(jī),包括有窮狀態(tài)集合、輸入字母表、狀態(tài)轉(zhuǎn)換函數(shù)、始態(tài)和終止?fàn)顟B(tài)集,其特征在于還包括狀態(tài)標(biāo)識集合,用于給狀態(tài)機(jī)中的每一個狀態(tài)加一個標(biāo)識;狀態(tài)與狀態(tài)標(biāo)識的映射函數(shù),用于通過該函數(shù)計(jì)算出一個給定狀態(tài)的狀態(tài)標(biāo)識;狀態(tài)轉(zhuǎn)換函數(shù)的標(biāo)識集合,用于給狀態(tài)機(jī)中的每一個狀態(tài)轉(zhuǎn)換關(guān)系都引入一個唯一的標(biāo)識;狀態(tài)轉(zhuǎn)換函數(shù)與狀態(tài)轉(zhuǎn)換函數(shù)標(biāo)識的映射函數(shù),用于計(jì)算與一條狀態(tài)轉(zhuǎn)換關(guān)系對應(yīng)的標(biāo)識。
2. 如權(quán)利要求l所述的用于多正則表達(dá)式聯(lián)合搜索的擴(kuò)展有限狀態(tài) 機(jī),其特征在于所述擴(kuò)展有限狀態(tài)機(jī)分為擴(kuò)展非確定性有限狀態(tài)機(jī)和擴(kuò)展確定性有 限狀態(tài)機(jī);其中,擴(kuò)展非確定性有限狀態(tài)機(jī)中的狀態(tài)轉(zhuǎn)換函數(shù)允許是多值的, 擴(kuò)展確定性有限狀態(tài)機(jī)不接受空串作為輸入并且狀態(tài)轉(zhuǎn)換函數(shù)必須是單 值的。
3. —種基于擴(kuò)展有限狀態(tài)機(jī)的多正則表達(dá)式聯(lián)合搜索方法,其特征在于-(1) 構(gòu)造同時識別多個正則表達(dá)式的擴(kuò)展非確定性有限狀態(tài)機(jī)或擴(kuò) 展確定性有限狀態(tài)機(jī);(2) 分配一個足夠大的狀態(tài)轉(zhuǎn)換函數(shù)標(biāo)識空間S,該空間中的每一個 元素用來存放一個狀態(tài)轉(zhuǎn)換函數(shù)標(biāo)識,用變量flag標(biāo)識該空間的使用狀況,置flag二0;記當(dāng)前狀態(tài)標(biāo)識集合U= P(qn),其中qη為自動機(jī)的始態(tài);(3)正向搜索時,每當(dāng)調(diào)用一次狀態(tài)轉(zhuǎn)換函數(shù)δ(p,a)=q,則自動 執(zhí)行下面三個步驟U=U∩P(q),S[flag] = ω(p, a, q),flag= flag+l , (4)逆向回退字符時(4. l)如果只沿著某個特定的正則表達(dá)式回退,若該正則表達(dá)式 的標(biāo)識為i,執(zhí)行如下步驟記狀態(tài)機(jī)當(dāng)前狀態(tài)為m,若iep(m),則可 以回退字符,否則停止回退,若可以回退字符,則査找狀態(tài)轉(zhuǎn)換函數(shù)標(biāo) 識空間對應(yīng)的狀態(tài)轉(zhuǎn)換標(biāo)識函數(shù)co(p, a, m),然后把字符a回退回輸入 串中,同時把P設(shè)為當(dāng)前狀態(tài),執(zhí)行flag = flag-1,即flag自動減l, 釋放標(biāo)識空間,若繼續(xù)回退字符,則重復(fù)本步驟,否則結(jié)束回退;(4.2)如果不沿著某個特定的正則表達(dá)式回退,則執(zhí)行如下步驟 記狀態(tài)機(jī)當(dāng)前狀態(tài)為m,査找狀態(tài)轉(zhuǎn)換函數(shù)標(biāo)識空間對應(yīng)的狀態(tài)轉(zhuǎn)換標(biāo)識 函數(shù)w(p, a, m),然后把字符a回退回輸入串中,同時把p設(shè)為當(dāng)前狀 態(tài),執(zhí)行flag=flag-1,若繼續(xù)回退字符,則重復(fù)本步驟,否則結(jié)束回 退。
4.如權(quán)利要求3所述的基于擴(kuò)展有限狀態(tài)機(jī)的多正則表達(dá)式聯(lián)合搜 索方法,其特征在于-所述步驟(l)中,構(gòu)造同時識別多個正則表達(dá)式的擴(kuò)展非確定性有限 狀態(tài)機(jī)E-NFA包括如下步驟(11) 為多個子正則表達(dá)式的每一個分別構(gòu)造相應(yīng)的擴(kuò)展非確定性 有限狀態(tài)機(jī)E-NFAra;(12) 增加一個新的始態(tài)s作為E-NFA的始態(tài),從s到(ll)中構(gòu)造的 各個E-NFAm的始態(tài)分別引一條ε弧,把s作為E-NFA的始態(tài);增加一個 新的終態(tài)e作為E-NFA的終態(tài),從各個E-NFAm的終態(tài)分別引入一條ε弧 到e;(13) 計(jì)算狀態(tài)集,該狀態(tài)集為各個E-NFAm的狀態(tài)集加上步驟(ll)新 生成的始態(tài)和終態(tài);(14) 計(jì)算狀態(tài)轉(zhuǎn)換函數(shù),各個E-NFAm的狀態(tài)轉(zhuǎn)換關(guān)系均為E-NFA中 有效的狀態(tài)轉(zhuǎn)換函數(shù)關(guān)系,步驟(ll)中新添加的狀態(tài)轉(zhuǎn)換關(guān)系也是E-NFA 中有效的狀態(tài)轉(zhuǎn)換函數(shù)關(guān)系;(15) 計(jì)算狀態(tài)標(biāo)識集合,該集合為各個E-NF。的狀態(tài)標(biāo)識集合的合集;(16) 計(jì)算狀態(tài)與狀態(tài)標(biāo)識的映射函數(shù),其中E-NFA。的始態(tài)s的狀態(tài) 標(biāo)識為各個E-NFAm的始態(tài)的狀態(tài)標(biāo)識之和,E-NFA的終態(tài)e的狀態(tài)標(biāo)識為各個E-NFAm的終態(tài)集的狀態(tài)標(biāo)識之和,各個E-NFAm中每個映射函數(shù)關(guān)系 都是E-NFA中的有效映射函數(shù)關(guān)系;(17) 計(jì)算狀態(tài)轉(zhuǎn)換函數(shù)與狀態(tài)轉(zhuǎn)換函數(shù)標(biāo)識的映射函數(shù),其中各個 E-NF&中的每個映射函數(shù)關(guān)系都是E-NFA中的有效映射函數(shù)關(guān)系;對步驟 (ll)新添加的每一個狀態(tài)轉(zhuǎn)換函數(shù),生成一個唯一的標(biāo)識,將該標(biāo)識加 入到集合1 中,并且在映射函數(shù)中記錄;(18) 計(jì)算狀態(tài)轉(zhuǎn)換函數(shù)標(biāo)識集合,E-NFA的狀態(tài)轉(zhuǎn)換函數(shù)標(biāo)識集合 為各個E-NFAm的狀態(tài)轉(zhuǎn)換函數(shù)標(biāo)識集與步驟(16)新生成的N^的合集;(19) 計(jì)算字母表,E-NFA的字母表為各個E-NFA,字母表的合集;(20) 計(jì)算終態(tài)集合,E-NFA的終態(tài)集合為各個E-NFA^終態(tài)集合之和 加上步驟(ll)新生成的終態(tài)e。
5. 如權(quán)利要求4所述的基于擴(kuò)展有限狀態(tài)機(jī)的多正則表達(dá)式聯(lián)合搜 索方法,其特征在于所述步驟(ll)中,構(gòu)造識別單個正則表達(dá)式的擴(kuò)展非確定性有限狀 態(tài)機(jī)E-NFA^包括如下的步驟(111) 給每一個正則表達(dá)式生成一個唯一的編號標(biāo)識i;(112) 置擴(kuò)展非確定性有限狀態(tài)機(jī)的狀態(tài)標(biāo)識集合P={i},置狀態(tài)轉(zhuǎn) 換函數(shù)標(biāo)識集合N為空集;(113) 以Thompson結(jié)構(gòu)為基礎(chǔ),構(gòu)造識別單個正則表達(dá)式的標(biāo)準(zhǔn)非 確定性有限狀態(tài)機(jī),得到擴(kuò)展非確定性有限狀態(tài)機(jī)的狀態(tài)集合、字母表、 狀態(tài)轉(zhuǎn)換函數(shù),開始狀態(tài)和結(jié)束狀態(tài);(114) 計(jì)算狀態(tài)與狀態(tài)標(biāo)識的映射函數(shù)P,對狀態(tài)集合中的每一個 狀態(tài)q,加入P (q) =i;(115) 計(jì)算狀態(tài)轉(zhuǎn)換函數(shù)的標(biāo)識集合及狀態(tài)轉(zhuǎn)換函數(shù)與狀態(tài)轉(zhuǎn)換函 數(shù)標(biāo)識的映射函數(shù),對每一個狀態(tài)轉(zhuǎn)換函數(shù),生成一個唯一的標(biāo)識,將 該標(biāo)識加入到標(biāo)識集合中,并且在映射函數(shù)中記錄。
6. 如權(quán)利要求3或4所述的基于擴(kuò)展有限狀態(tài)機(jī)的多正則表達(dá)式聯(lián) 合搜索方法,其特征在于所述步驟(1)中,首先按照如權(quán)利要求4所述的方法構(gòu)造識別多個正則表達(dá)式的擴(kuò)展非確定性有限狀態(tài)機(jī),然后按照確定化方法將其構(gòu)造 成擴(kuò)展確定性有限狀態(tài)機(jī)。
全文摘要
本發(fā)明公開了一種擴(kuò)展有限狀態(tài)機(jī),同時還公開了利用該擴(kuò)展有限狀態(tài)機(jī)實(shí)現(xiàn)對多個正則表達(dá)式同時進(jìn)行搜索的方法。該擴(kuò)展有限狀態(tài)機(jī)增加了狀態(tài)標(biāo)識集合、狀態(tài)轉(zhuǎn)換函數(shù)標(biāo)識集合、狀態(tài)與狀態(tài)標(biāo)識的映射函數(shù)、狀態(tài)轉(zhuǎn)換函數(shù)與狀態(tài)轉(zhuǎn)換函數(shù)標(biāo)識的映射函數(shù)等四個參數(shù),通過給狀態(tài)引入標(biāo)識,同時給狀態(tài)轉(zhuǎn)換函數(shù)也引入標(biāo)識,可以使用戶無需編寫額外例程即可實(shí)現(xiàn)高效的多正則表達(dá)式的并行搜索,可以保留單個正則表達(dá)式的信息,同時還可以有效處理字符串回退。
文檔編號G06F17/30GK101174261SQ20061011431
公開日2008年5月7日 申請日期2006年11月3日 優(yōu)先權(quán)日2006年11月3日
發(fā)明者超 劉, 虎 李, 福 許, 金茂忠 申請人:北京航空航天大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
枣庄市| 灵山县| 丰县| 家居| 永胜县| 泸溪县| 浦城县| 鄢陵县| 遵义市| 平度市| 乃东县| 阿克苏市| 威信县| 周至县| 遵义县| 盐城市| 桐城市| 阿拉善右旗| 合阳县| 青铜峡市| 河西区| 宁明县| 肃南| 和林格尔县| 庆城县| 东台市| 社旗县| 湘潭市| 民丰县| 雷波县| 什邡市| 武冈市| 金华市| 三都| 会同县| 阳春市| 洛南县| 涡阳县| 钟祥市| 休宁县| 临洮县|