正規(guī)式轉(zhuǎn)化為nfa 正則表達(dá)式轉(zhuǎn)換成nfa如何實現(xiàn)?
正則表達(dá)式轉(zhuǎn)換成nfa如何實現(xiàn)?NFA是一種抽象的數(shù)據(jù)結(jié)構(gòu),其具體實現(xiàn)是可變的,它依賴于特定的語言……一種是字節(jié)碼的表達(dá),可以看作是一種線性化的NFA。代碼可以引用regex/regcomp。C在ma
正則表達(dá)式轉(zhuǎn)換成nfa如何實現(xiàn)?
NFA是一種抽象的數(shù)據(jù)結(jié)構(gòu),其具體實現(xiàn)是可變的,它依賴于特定的語言……
一種是字節(jié)碼的表達(dá),可以看作是一種線性化的NFA。代碼可以引用regex/regcomp。C在master·garyhouston/regex·GitHub上,逐字掃描正則表達(dá)式,直接生成字節(jié)碼,表示正則表達(dá)式的語法與嵌套詞相同,因此不需要進(jìn)行復(fù)雜的處理,如ast生成。。。Perl和oniguruma都是從這個古老的VM演變而來的
!但是字節(jié)碼不便于執(zhí)行諸如“轉(zhuǎn)換為DFA”之類的操作。讓我們從定義來看:NFA定義中最重要的是一組狀態(tài)轉(zhuǎn)換函數(shù)。然后你可以改變所有的轉(zhuǎn)換函數(shù)(邊)所有的建模都是可以的:
為了便于后續(xù)計算,你可以按edges鍵或輸入C,或按fromState鍵,或按to索引狀態(tài)并將其放入哈希表是相當(dāng)麻煩的
~]。如果必須這樣做,應(yīng)該首先將正則表達(dá)式轉(zhuǎn)換為NFA,然后再轉(zhuǎn)換為NFA->DFA->sdfa。如果兩個正則表達(dá)式相同,則它們應(yīng)該具有唯一的sdfa。如果是后一個問題,應(yīng)該是語法包含。目前,還沒有有效的解決辦法。
兩個正則表達(dá)式等價的判斷?
基于正則表達(dá)式的正則表達(dá)式轉(zhuǎn)換NFA算法:對于正則表達(dá)式應(yīng)用運(yùn)算符部分的構(gòu)造方法:1。符號棧,即操作的符號,其存儲方式為wchar_uut類型、連接方式、左括號