【計算理論】正則語言 ( 正則表達式原子定義 | 正則表達式遞歸定義 | 正則表達式語言原子定義 | 正則表達式語言結構歸納 | 正則表達式語言示例 | 根據正則表達式構造自動機 )





I . 正則表達式 定義



1 . 正則表達式原子定義 :

如果 RR

  • 字符集 Σ\Sigma 中的 11 個字符 ,
  • 空字符串 ε\varepsilon , 或
  • 空集 {}\{ \varnothing \} ,

那麼稱 RR 是正則表達式 ;



2 . 正則表達式遞歸定義 :

如果 R1,R2R_1 , R_2 是正則表達式 , 那麼

  • R1R2R_1 \cup R_2 是正則表達式 ;
  • R1R2R_1 \circ R_2 是正則表達式 ;
  • R1R_1^* 是正則表達式 ;

上述是正則表達式的定義 , 這是一個結構歸納定義 ;





II . 正則表達式語言 原子定義



正則表達式語言表示方式 : RR 是正則表達式 , L(R)L(R) 是正則表達式代表的語言 ;



1 . 單個字符代表的語言 :

L(a)={a}L(a) = \{a\}

aa 是字符集中的字符 , 那麼其所代表的的語言是 {a}\{a\} 單元集 , 是由一個元素的字符構成的 ;



2 . 空字符串代表的語言 :

L(ε)={ε}L(\varepsilon) = \{ \varepsilon \}

如果 ε\varepsilon 是正則表達式 , 其所代表的的語言 L(ε)L(\varepsilon) , 是由空字符串組成的集合 {ε}\{ \varepsilon \} ;



3 . 空集代表的語言 :

L()=L(\varnothing) = \varnothing

空集 \varnothing 所代表的的語言 , 就是空集 ;





III . 正則表達式語言 結構歸納定義



1 . 正則表達式並集 的 語言 :

L(R1R2)=L(R1)L(R2)L(R_1 \cup R_2) = L(R_1) \cup L(R_2)

R1,R2R_1 , R_2 是兩個正則表達式 , 其並集的語言 , 就是其 兩個語言的並集 ;



2 . 正則表達式串聯 的 語言 :

L(R1R2)=L(R1)L(R2)L(R_1 \circ R_2) = L(R_1) \circ L(R_2)

R1,R2R_1 , R_2 是兩個正則表達式 , 其串聯運算結果正則表達式的語言 , 就是其 兩個正則表達式語言的 串聯運算結果 ;



3 . 正則表達式星運算 的 語言 :

L(R)=(L(R))L(R^*) = ( L(R) ) ^*

RR 正則表達式 星運算 結果 正則表達式 的語言 , 就是 RR 正則表達式的語言 進行 星運算的結果 ;







IV . 正則表達式語言 示例



字符集 : Σ={0,1}\Sigma = \{0, 1\} ;

正則表達式 : (01)10(01)( 0 \cup 1 )^* 1 0 ( 0 \cup 1 )^* ;


正則表達式轉化成語言 :

L((01)10(01))=L((01))L(1)L(0)L((01))={0,1}{1}{0}{0,1}\begin{array}{lcl} && L( ( 0 \cup 1 )^* 1 0 ( 0 \cup 1 )^* ) \\\\ &=& L( ( 0 \cup 1 )^* ) \circ L(1) \circ L(0) \circ L( ( 0 \cup 1 )^* ) \\\\ &=& \{0,1\}^* \circ \{ 1 \} \circ \{ 0 \} \circ \{ 0, 1 \}^* \end{array}


上述 {0,1}\{0,1\}^* 就是 0,10,1 有限個字符串組成的字符 ;


正則表達式表示的語言 , 剛好是自動機所識別的語言 ; 可以根據該語言將自動機設計出來 ;





V . 空集 \varnothing 與 空字符 ε\varepsilon 差別



空集 \varnothing 是正則表達式 , 類似於數中的 00 ;

空字符 ε\varepsilon 是正則表達式 , 類似於數中的 11 ;

( 後續待補充 )





VI . 正則表達式 定理



1 . 定理 : 一個語言如果是正則語言 , 當且僅當 , 該語言可以通過正則表達式表示出來 ;


2 . 有以下兩層含義 :

  • ① 正則表達式 -> 自動機識別 :正則表達式 表達出的語言 剛好 能夠被自動機識別 ;

  • ② 自動機識別 -> 正則表達式 : 自動機識別某個語言 , 那麼該語言可以被正則表達式表達出來 ;


3 . 定理證明 :


① 正則表達式 -> 自動機識別 證明 : 給定一個正則表達式 , 設計一個自動機 , 該自動機所 接受 ( 識別 / 認識 ) 的語言 , 剛好是該正則表達式所表達的語言 ;

下面的 " 根據 正則表達式 語言 構造 自動機 " 小節的示例 , 證明了正則表達式語言必有自動機識別 ;


② 自動機識別 -> 正則表達式 證明 : 給定一個自動機 , 找到其所識別的 正則表達式語言 ;





VII . 根據 正則表達式 語言 構造 自動機 ( 定理正向證明 )



1 . 需求 : 根據下面的 正則表達式 構造 非確定性有限自動機 ( NFA ) , 剛好能 識別上述正則表達式表示的語言 ;

(aba)( ab \cup a )^*

構造能識別 (aba)( ab \cup a )^* 語言 的 自動機 ;





VIII . 構造原子自動機



構造原子自動機 : 先構造能接收 單個字符 的自動機 ;


① 接收 aa 字符的自動機 : 下面的自動機是可以識別 aa 字符串的 ;

在這裏插入圖片描述


② 接收 bb 字符的自動機 : 下面的自動機是識別 bb 字符串的 ;

在這裏插入圖片描述





IX . 使用 原子自動機 拼裝 正則表達式對應的自動機



拼裝上述識別單個字符的 自動機 :


1 . 擺放自動機位置 : 22 個能識別 aa 字符串的自動機 , 與 11 個能識別 bb 字符串的自動機 , 按照如下排列放置 ;

在這裏插入圖片描述


2 . abab 對應自動機構造 :


① 自動機連接方式 : aa 正則表達式語言 自動機 與 bb 正則表達式語言 自動機 是串聯在一起的 ;

② 串聯兩個自動機的狀態 : 使用 ε\varepsilon 箭頭 , 串聯 aa 對應自動機的接受狀態 -> bb 對應自動機的開始狀態 ;

③ 修改 前者 的狀態 : 同時將 aa 對應自動機的接受狀態 改爲非接受狀態 ;


下面是 abab 正則表達式 表達的語言 對應的自動機表示 :

在這裏插入圖片描述


3 . abaab \cup a 對應自動機構造 :


① 添加新開始狀態 : 重新添加一個開始狀態 ;

② 連接並運算前者 : 使用 ε\varepsilon 箭頭 從這個新添加的開始狀態 指向 abab 自動機開始狀態 ;

③ 連接並運算後者 : 使用 ε\varepsilon 箭頭 從這個新添加的開始狀態 指向 aa 自動機開始狀態 ;


下面是 abaab \cup a 正則表達式 表達的語言 對應的自動機表示 :

在這裏插入圖片描述


4 . (aba)( ab \cup a )^* 對應自動機構造 :


① 構造方法 : 就是 在 (aba)( ab \cup a ) 對應自動機的基礎上 , 使用 ε\varepsilon 箭頭 , 從 接受狀態 指向 開始狀態 ;

② 連接個數 : 所有的接受狀態 , 都 使用 ε\varepsilon 箭頭 指向開始狀態 , 這裏有兩個接受狀態 , 需要都指向開始狀態 ;

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章