正規表示式轉NFA

2021-09-27 01:56:33 字數 2552 閱讀 8873

正規表示式有三種基本的運算:

連線(concatenation), 例如 abc, 由a, b, c組成

聯合(union), 例如 a|b|c, 表示a或者b或者c

kleene閉包(kleene *), 例如 (ab)*, 表示ab串不出現,或者出現1次或一次以上

其它的運算如+, {}等都可以用以上三種基本運算或者運算的組合來表示。

2)例題3.26:為正規表示式r=(a|b)*abb構造乙個nfa

①對於(a|b)中的a構造nfa

②對於(a|b)中的b構造nfa

③而(a|b)構造nfa,將上面兩個圖合併

④(a|b)*構造nfa

⑤對於abb中的a構造nfa,對於abb中的兩個b構造nfa同④類似

⑥將④⑤合併之後

⑦最終的nfa是

nfa是捏著正則式去比文字,吃掉乙個字元,就把它跟正則式比較,匹配就記下來:「某年某月某日在某處匹配上了!」,然後接著往下幹。一旦不匹配,就把剛吃的這個字元吐出來,乙個個的吐,直到回到上一次匹配的地方。

1.正規表示式字尾化《逆波蘭表示式&字尾表示式》,並將其中操作符進行修改

public static enum operator
2.構造nfa原始碼

public class nfaalgorithm  else }}

return regex;

}private static string e = "epsllon";

public static graph transformnfa(string suffixregex)

public static graph parse(object obj)

if(obj instanceof string)

return new graph((string)obj);

throw new illegalargumentexception("not support class["+obj.getclass()+"]");

}public void add(object obj)

if(obj instanceof graph)

throw new illegalargumentexception("not support class["+obj.getclass()+"]");

}public void divide(object obj)

if(obj instanceof graph)

throw new illegalargumentexception("not support class["+obj.getclass()+"]");

}public void multiply()

private void divide(graph graph)

private void add(string label)

private void add(graph graph));

this.edges.addall(graph.edges);

}@override

public string tostring()

return printstring;}}

//邊static class edge

@override

public string tostring()

}//節點

static class node

public int getid()

public static void reset()

@override

public string tostring() }}

正規表示式轉NFA

最近一直在忙著寫大作業,考試複習,複習演算法的時候寫了一些隨筆,現在忙起來都落下了部落格,這裡有乙個vc 寫的大作業,主要是正規表示式轉nfa並顯示。內容如下。介紹一下nfa在表示的結構設計,由於nfa本身是一種有向圖,所以這裡的儲存結構設計和鄰接表相似,圖中的每個節點後面是一些與其連線的節點的值,...

編譯原理 正規表示式轉NFA

從txt檔案中讀入正規表示式 include include include include include define max token 100 using namespace std 詞struct token int readtxt string filename,vector token...

正規表示式 轉

字元 描述 將下乙個字元標記為乙個特殊字元 或乙個原義字元 或乙個向後引用 或乙個八進位制轉義符。例如,n 匹配字元 n n 匹配乙個換行符。序列 匹配 而 則匹配 匹配輸入字串的開始位置。如果設定了regexp物件的multiline屬性,也匹配 n 或 r 之後的位置。匹配輸入字串的結束位置。如...