編譯原理--正規式和有限自動機
正規式:
正規式:正則表示式,表示正規集的工具。
一個正規式對應一個正規文法(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的轉換。
如果不懂可以從網上找一個例子進行理解。
正規式與有限自動機之間的轉換:
任意的正規式都可以轉換為上述三種的表現形式。
在一個有限自動機轉換為正規式時,就是考慮從初態到終態可以輸入哪些資料到達。而這些資料可以用哪種正規式概括進來。