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

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

一個正規式r與一個有限自動機M等價, L(r)=L(M)算法

FA ->正規式,對任何FA M,都存在一個正規式r,使得L(r)=L(M)。3d

正規式 -> FA, 對任何正規式r,都存在一個FA M,使得L(M)=L(r)blog

爲NFA構造正規式

對轉換圖概念拓廣,令每條弧可用一個正規式做標記,對Σ上任一NFA M,都存在一個Σ上的正規式r,使得L(r)=L(M)程序

假定NFA M=<S, Σ, δ, S 0 , F>,咱們對M的狀態轉換圖進行如下改造:im

在M的轉換圖上加進兩個狀態X和Y,從X用ε弧鏈接到M的全部初態結點,從M的全部終態結點用ε弧鏈接到Y,從而造成一個新的NFA,記爲M’,它只有一個初態X和一個終態Y,顯然L(M)=L(M’)。

d3

而後,反覆使用下面的三條規則,逐步消去結點,直到只剩下X和Y爲止。img

最後,X到Y的弧上標記的正規式即爲所構造的正規式rco

顯然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的狀態轉換表和控制執行程序


相關文章
相關標籤/搜索