正規式與有限自動機的等價性
一個正規式r與一個有限自動機M等價, L(r)=L(M)
FA ->正規式,對任何FA M,都存在一個正規式r,使得L(r)=L(M)。
正規式 -> FA, 對任何正規式r,都存在一個FA M,使得L(M)=L(r)
為NFA構造正規式
對轉換圖概念拓廣,令每條弧可用一個正規式作標記,對Σ上任一NFA M,都存在一個Σ上的正規式r,使得L(r)=L(M)
假定NFA M=<S, Σ, δ, S 0 , F>,我們對M的狀態轉換圖進行以下改造:
在M的轉換圖上加進兩個狀態X和Y,從X用ε弧連接到M的所有初態結點,從M的所有終態結點用ε弧連接到Y,從而形成一個新的NFA,記為M’,它只有一個初態X和一個終態Y,顯然L(M)=L(M’)。
然后,反復使用下面的三條規則,逐步消去結點,直到只剩下X和Y為止。
最后,X到Y的弧上標記的正規式即為所構造的正規式r
顯然L(r)=L(M’)=L(M),得證: 對Σ上任一NFA M,都存在一個Σ上的正規式r,使得L(r)=L(M)
為正規式構造NFA
定理:對任何正規式r,都存在一個FA M,使得L(M)=L(r)
定理: 對於Σ上的正規式r,都存在一個NFA M,使L(M)=L(r),並且M只有一個初態和一個終態,而且沒有從終態出發的箭弧
對給定正規式r中的運算符數目進行歸納:
- 驗證r中的運算符數目為0時,結論成立
- 假設結論對於運算符數目少於k(k≥1)的正規式成立
- 基於該假設,證明結論對於運算符數目為k的正規式成立
若r具有零個運算符,則r=ε或r=φ或r=a,其中a∈Σ
針對上述3類正規式r,分別按照下圖構造NFAM,M只有一個初態和一個終態,而且沒有從終態出發的箭弧,而且使L(M)和對應的L(r)相等。
假設對於運算符數目少於k(k≥1)的正規式成立
當r中含有k個運算符時,r有三種情形:
上述過程實質上是一個將正規表達式轉換為有限自動機的算法
構造Σ上的NFA M’ 使得 L(r)=L(M’),首先,把r表示成
按下面的三條規則對r進行分裂
逐步把這個圖轉變為每條弧只標記為Σ上的一個字符或ε,最后得到一個NFA M’,顯然L(M’)=L(r)
詞法分析器的自動產生--LEX
LEX的工作過程
- 對每條識別規則P i 構造一個相應的非確定有限自動機M i ;
- 引進一個新初態X,通過ε弧,將這些自動機連接成一個新的NFA;
- 把M確定化、最小化,生成該DFA的狀態轉換表和控制執行程序