從正則表達式到NFA(Thompson算法)

正規式

定義

也叫正則表達式(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

                                                 

                                                 

                                        

                                   

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章