1. 程式人生 > >編譯原理--正規式和有限自動機

編譯原理--正規式和有限自動機

正規式:

正規式:正則表示式,表示正規集的工具。

一個正規式對應一個正規文法(3型文法)

之間能夠進行準換

三個基本規則:

A->xB,B->y  則 A=xy。

A->xA|y  則A=x*y  (x*代表x從0到無窮多個)

A->x,A->y 則A=x|y

正規式主要用到了遞迴的思想,無論遇到多複雜的正規式都可以拆分成上面這三種形式,然後進行解題。

有限自動機(有窮自動機):

DFA(Deterministic Finite Automation ):確定的有限自動機

表示式:M=(S,∑,f,So,Z)

1.S為一個有限狀態集合

2.∑是一個字母表,它所包含的的每個元素稱為一個輸入字元;

3.f是一個從SX∑(笛卡爾乘積)至S的單值部分對映。f(S,a)=s'意味著當現在的狀態為s,輸入字元a時,將轉換到下一狀態s'.s'為s的一個後繼狀態。

4.So∈S,是唯一的初態;

5.Z⊆S,是一個終態集。

NFA(Nondeterministic Finite Automata):不確定的有限自動機

如果理解了有限自動機,則無限自動機和它的區別就是上面的第四項。

So⊆S,它的初態不是唯一的,而是一個集合。

NFA向DFA的轉換:

這個轉換是一個比較簡單的過程。

1.如果有一個不確定的有限自動機,則可以轉化為圖的方式。此處不詳述怎樣轉圖的方式。

2.先將初態確定,然後根據輸入的每個元素可以得到哪些狀態,依次列表。

3.這些狀態集合可以稱為這個有限狀態集合n個子集。按0,1,2……的順序編號。

4.因為這些子集之間的關係是輸入一個確定值確定的,所以這些子集之間存在一些關係,即把這些子集的關係寫出來完成NFA向DFA的轉換。

如果不懂可以從網上找一個例子進行理解。

正規式與有限自動機之間的轉換:


任意的正規式都可以轉換為上述三種的表現形式。

在一個有限自動機轉換為正規式時,就是考慮從初態到終態可以輸入哪些資料到達。而這些資料可以用哪種正規式概括進來。