正規式
定義
也叫正則表達式(regular expression,常簡寫爲RE或regex)。是計算機科學標準化的成就之一。描述了一種字符串的模式。
形式上正則表達式是用於表徵一組字符串的代數表示法。
構建
由較小的正則表達式按照特定規則遞歸地構建。
每個正則表達式r定義一個語言。這個語言也是根據r的子表達式所表示的語言遞歸定義的。
正規式與正規集
字母表∑上的正規式和正規集遞歸定義如下:
歸納基礎
ε和φ都是∑上的正規式,它們所表示的正規集分別爲{ε}和 φ。其中:ε爲空字符串,φ爲空集。
任意元素a∈∑,a是∑上的一個正規式,它所表示的正規集是{a}。
歸納步驟:假定R和S都是∑上的正規式,所表示的正規集記爲L(R)和L(S),由小正則表達式生成大的正則表達式的規則如下。
選擇:(R | S) 是正規式,正規集爲L(R)∪L(S)
連接:(R · S) 是正規式,正規集爲L(R)L(S)
閉包:(R)* 是正規式,正規集爲(L(R))*
(U) 是正規式,正規集爲L(U)
僅由有限次使用上述步驟得到的表達式纔是∑上的正規式,它們表示的集合是∑上的正規集。
注:n正則式是一個表達式,正規集是一個集合。
例:已知∑={a, b} ,下列正規式相應的正規集是什麼?
正規式 |
正規集 |
ba* |
所有以b爲首,後跟任意多個a的字符串 |
a(a|b)* |
所有以a爲首的字符串 |
(a|b)*(aa|bb)(a|b)* |
所有含有兩個連續的a或連續的b的字符串 |
非確定的有限自動機——NFA
定義
一個非確定的有限自動機(NFA)M 是一個五元組: M = ( S, Σ, δ, S0, F ),其中:
(1)S和 Σ的定義同前;
(2)δ: S × {Σ ∪ ε} →2S(狀態子集);
對於某個狀態s ⊆ S 和一個輸入字母a:
δ(s, a)=S’⊆ S
(3)S0 ⊆ S爲非空初態集;
(4)F ⊆ S爲終態集
Thompson算法 : RE -->NFA
基礎規則
1. 對於 ε,構造爲
2. 對於a (輸入的字符以a爲例),構造爲
一個圓圈前加一個箭頭表示初始狀態,兩個圓圈表示終結狀態,中間用箭頭連接,箭頭上標明要輸入的字符
歸納規則
1. 對於 a | b,構造爲
2. 對於 ab,構造爲
3. 對於 a* = a^n | ε,構造爲
1.增加一個新的開始狀態和一個新的結束狀態。
2.將新的開始狀態指向原來所有的開始狀態。原來的終結狀態指向新的終結狀態。弧上爲 ε 。
例題
設正則表達式 1*0(0|1)*, 構造等價的NFA