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