本技術(shù)涉及計(jì)算機(jī),具體涉及一種自動(dòng)機(jī)構(gòu)建方法、裝置及電子設(shè)備。
背景技術(shù):
1、在計(jì)算機(jī)技術(shù)應(yīng)用領(lǐng)域,網(wǎng)絡(luò)流量深度檢測、防火墻、入侵檢測及入侵防御中,對(duì)正則表達(dá)式匹配的應(yīng)用較為廣泛,而用于實(shí)現(xiàn)正則表達(dá)式匹配的主流方式是自動(dòng)機(jī)技術(shù)。目前,用于實(shí)現(xiàn)正則表達(dá)式匹配的自動(dòng)機(jī)的實(shí)現(xiàn)方式,是依據(jù)正則文法先將正則表達(dá)式解析為抽象語法樹,再根據(jù)抽象語法樹構(gòu)造nfa(non-deterministic?finite?automata,非確定型有窮自動(dòng)機(jī)),最后根據(jù)nfa構(gòu)造dfa(deterministic?finite?automata,確定型有窮自動(dòng)機(jī)),用于正則表達(dá)式的匹配。
2、現(xiàn)有的dfa構(gòu)造方式,針對(duì)正則表達(dá)式中的有界重復(fù)語法進(jìn)行nfa展開,并進(jìn)一步將展開后的nfa進(jìn)行dfa構(gòu)造時(shí),會(huì)導(dǎo)致dfa狀態(tài)數(shù)的指數(shù)級(jí)爆炸,進(jìn)而會(huì)導(dǎo)致dfa運(yùn)行時(shí)的性能大幅降低,急劇消耗可用內(nèi)存等算力資源。
技術(shù)實(shí)現(xiàn)思路
1、本技術(shù)實(shí)施例提供一種自動(dòng)機(jī)構(gòu)建方法、裝置及電子設(shè)備,用以解決現(xiàn)有的構(gòu)造方式在根據(jù)nfa構(gòu)造dfa時(shí),會(huì)導(dǎo)致dfa狀態(tài)數(shù)的指數(shù)級(jí)爆炸,影響dfa運(yùn)行時(shí)的性能,急劇消耗算力資源的技術(shù)問題。
2、第一方面,本技術(shù)實(shí)施例提供一種自動(dòng)機(jī)構(gòu)建方法,包括:
3、獲取待處理的正則表達(dá)式集合,并基于所述正則表達(dá)式集合生成抽象語法樹;
4、將所述抽象語法樹轉(zhuǎn)換成全局nfa,并確定所述全局nfa的有界重復(fù)節(jié)點(diǎn);
5、基于所述全局nfa構(gòu)建全局dfa,并基于所述有界重復(fù)節(jié)點(diǎn)構(gòu)建所述全局dfa的子自動(dòng)機(jī)。
6、在一個(gè)實(shí)施例中,所述基于所述全局nfa構(gòu)建全局dfa,并基于所述有界重復(fù)節(jié)點(diǎn)構(gòu)建所述全局dfa的子自動(dòng)機(jī),包括:
7、采用預(yù)設(shè)的第一構(gòu)造算法對(duì)所述全局nfa進(jìn)行轉(zhuǎn)換,構(gòu)建全局dfa;
8、獲取所述有界重復(fù)節(jié)點(diǎn)在所述全局dfa中對(duì)應(yīng)的目標(biāo)重復(fù)節(jié)點(diǎn);
9、獲取所述目標(biāo)重復(fù)節(jié)點(diǎn)的語法復(fù)雜度,并基于所述語法復(fù)雜度,采用預(yù)設(shè)的第二構(gòu)造算法將所述目標(biāo)重復(fù)節(jié)點(diǎn)構(gòu)建為所述全局dfa的子自動(dòng)機(jī)。
10、在一個(gè)實(shí)施例中,所述基于所述語法復(fù)雜度,采用預(yù)設(shè)的第二構(gòu)造算法將所述目標(biāo)重復(fù)節(jié)點(diǎn)構(gòu)建為所述全局dfa的子自動(dòng)機(jī),包括:
11、采用所述第二構(gòu)造算法,將所述目標(biāo)重復(fù)節(jié)點(diǎn)中的語法樹構(gòu)造為子nfa;
12、確定任一所述目標(biāo)重復(fù)節(jié)點(diǎn)中是否存在多個(gè)子nfa,若是,對(duì)所述目標(biāo)重復(fù)節(jié)點(diǎn)中的多個(gè)子nfa進(jìn)行合并;
13、基于所述語法復(fù)雜度,確定所述目標(biāo)重復(fù)節(jié)點(diǎn)中的子nfa的狀態(tài)數(shù)量;
14、根據(jù)所述狀態(tài)數(shù)量構(gòu)建所述全局dfa的子自動(dòng)機(jī)。
15、在一個(gè)實(shí)施例中,所述子自動(dòng)機(jī)包括子dfa、加速型子dfa和加速型子nfa;所述根據(jù)所述狀態(tài)數(shù)量構(gòu)建所述全局dfa的子自動(dòng)機(jī),包括:
16、若所述狀態(tài)數(shù)量大于第一預(yù)設(shè)閾值,將所述目標(biāo)重復(fù)節(jié)點(diǎn)中的子nfa轉(zhuǎn)換為子dfa;
17、若所述狀態(tài)數(shù)量小于或等于第一預(yù)設(shè)閾值,且大于第二預(yù)設(shè)閾值,將所述目標(biāo)重復(fù)節(jié)點(diǎn)中的子nfa轉(zhuǎn)換為加速型子nfa;所述第一預(yù)設(shè)閾值大于所述第二預(yù)設(shè)閾值;
18、若所述狀態(tài)數(shù)量小于或等于第二預(yù)設(shè)閾值,對(duì)所述目標(biāo)重復(fù)節(jié)點(diǎn)中的子nfa進(jìn)行dfa轉(zhuǎn)化分析,以將所述子nfa轉(zhuǎn)換為加速型子dfa或加速型子nfa
19、在一個(gè)實(shí)施例中,所述對(duì)所述目標(biāo)重復(fù)節(jié)點(diǎn)中的子nfa進(jìn)行dfa轉(zhuǎn)化分析,以將所述子nfa轉(zhuǎn)換為加速型子dfa或加速型子nfa,包括:
20、對(duì)所述目標(biāo)重復(fù)節(jié)點(diǎn)中的子nfa進(jìn)行dfa轉(zhuǎn)化分析,以確定所述子nfa進(jìn)行dfa轉(zhuǎn)化后的目標(biāo)狀態(tài)數(shù)量;
21、若所述目標(biāo)狀態(tài)數(shù)量小于或等于第二預(yù)設(shè)閾值,則將所述子nfa轉(zhuǎn)換為加速型子dfa;
22、若所述目標(biāo)狀態(tài)數(shù)量大于第二預(yù)設(shè)閾值,則將所述子nfa轉(zhuǎn)換為加速型子nfa。
23、在一個(gè)實(shí)施例中,所述將所述目標(biāo)重復(fù)節(jié)點(diǎn)中的子nfa轉(zhuǎn)換為加速型子nfa,包括:
24、獲取所述目標(biāo)重復(fù)節(jié)點(diǎn)中的子nfa的狀態(tài)參數(shù);所述狀態(tài)參數(shù)包括狀態(tài)集合、狀態(tài)轉(zhuǎn)移字符、接受狀態(tài)和狀態(tài)轉(zhuǎn)移表;
25、對(duì)所述目標(biāo)重復(fù)節(jié)點(diǎn)中的子nfa的限制狀態(tài)數(shù)進(jìn)行字節(jié)劃分,并基于所述狀態(tài)參數(shù)為劃分后的每個(gè)字節(jié)建立后繼狀態(tài)掩碼集;
26、基于所述后繼狀態(tài)掩碼集將所述目標(biāo)重復(fù)節(jié)點(diǎn)中的子nfa轉(zhuǎn)換為加速型子nfa。
27、在一個(gè)實(shí)施例中,所述將所述目標(biāo)重復(fù)節(jié)點(diǎn)中的子nfa轉(zhuǎn)換為加速型子dfa,包括:
28、將所述目標(biāo)重復(fù)節(jié)點(diǎn)中的子nfa轉(zhuǎn)換為子dfa;
29、獲取所述子dfa的字母表,以及所述子dfa的查詢指令的輸入向量;所述輸入向量包括源向量和控制碼;
30、基于所述輸入向量構(gòu)建所述字母表的源碼查詢掩碼表;
31、根據(jù)所述源碼查詢掩碼表,將所述子dfa轉(zhuǎn)換為加速型子dfa。
32、在一個(gè)實(shí)施例中,所述基于所述全局nfa構(gòu)建全局確定型有窮自動(dòng)機(jī)dfa,并基于所述有界重復(fù)節(jié)點(diǎn)構(gòu)建所述全局dfa的子自動(dòng)機(jī)之后,還包括:
33、分析所述子自動(dòng)機(jī)能匹配的第i個(gè)正則表達(dá)式在所述有界重復(fù)節(jié)點(diǎn)的后繼節(jié)點(diǎn)中被連續(xù)匹配的第一匹配次數(shù);
34、當(dāng)所述子自動(dòng)機(jī)完成預(yù)設(shè)次數(shù)第i個(gè)子正則表達(dá)式的最大次數(shù)命中后,計(jì)算所述預(yù)設(shè)次數(shù)與所述第一匹配次數(shù)的差值;
35、若所述差值在預(yù)設(shè)的取值范圍內(nèi),獲取所述差值對(duì)應(yīng)的偏移量,并使用所述偏移量對(duì)應(yīng)位置的輸入語料字符進(jìn)行所述有界重復(fù)節(jié)點(diǎn)后繼的匹配;
36、若所述差值不在預(yù)設(shè)的取值范圍內(nèi),則基于所述取值范圍計(jì)算目標(biāo)值;其中,所述目標(biāo)值是取值集合中的最大值;所述預(yù)設(shè)次數(shù)與所述取值集合中的任一取值的差值,在所述取值范圍內(nèi);
37、獲取所述目標(biāo)值對(duì)應(yīng)的偏移量,并使用所述偏移量,并使用所述偏移量對(duì)應(yīng)位置的輸入語料字符進(jìn)行所述有界重復(fù)節(jié)點(diǎn)后繼的匹配。
38、第二方面,本技術(shù)實(shí)施例提供一種自動(dòng)機(jī)構(gòu)建裝置,包括:
39、第一構(gòu)建模塊,用于獲取待處理的正則表達(dá)式集合,并基于所述正則表達(dá)式集合生成抽象語法樹;
40、第二構(gòu)建模塊,用于將所述抽象語法樹轉(zhuǎn)換成全局機(jī)nfa,并確定所述全局nfa的有界重復(fù)節(jié)點(diǎn);
41、第三構(gòu)建模塊,用于基于所述全局nfa構(gòu)建全局dfa,并基于所述有界重復(fù)節(jié)點(diǎn)構(gòu)建所述全局dfa的子自動(dòng)機(jī)。
42、第三方面,本技術(shù)實(shí)施例提供一種電子設(shè)備,包括處理器和存儲(chǔ)有計(jì)算機(jī)程序的存儲(chǔ)器,所述處理器執(zhí)行所述程序時(shí)實(shí)現(xiàn)第一方面所述的自動(dòng)機(jī)構(gòu)建方法的步驟。
43、第四方面,本技術(shù)實(shí)施例提供一種非暫態(tài)的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其上存儲(chǔ)有計(jì)算機(jī)程序,所述計(jì)算機(jī)程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)第一方面所述的自動(dòng)機(jī)構(gòu)建方法的步驟。
44、第五方面,本技術(shù)實(shí)施例提供一種計(jì)算機(jī)程序產(chǎn)品,包括計(jì)算機(jī)程序,所述計(jì)算機(jī)程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)第一方面所述的自動(dòng)機(jī)構(gòu)建方法的步驟。
45、本技術(shù)實(shí)施例提供的自動(dòng)機(jī)構(gòu)建方法、裝置及電子設(shè)備,通過構(gòu)建兩層結(jié)構(gòu)的混合dfa,將正則表達(dá)式中的有界重復(fù)部分對(duì)應(yīng)的有界重復(fù)節(jié)點(diǎn)構(gòu)建為全局dfa下的子自動(dòng)機(jī),有效規(guī)避了在對(duì)nfa進(jìn)行確定化過程中,dfa狀態(tài)數(shù)的指數(shù)爆炸,實(shí)現(xiàn)了全局dfa狀態(tài)數(shù)的壓縮,提升了dfa運(yùn)行時(shí)的性能,減少了算力資源的消耗。