正規表達式與有限自動機和LEX


正規式與有限自動機的等價性

一個正規式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的狀態轉換表和控制執行程序



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM