文章目錄
I . 正則表達式 定義
1 . 正則表達式原子定義 :
如果 是
- 字符集 中的 個字符 ,
- 空字符串 , 或
- 空集 ,
那麼稱 是正則表達式 ;
2 . 正則表達式遞歸定義 :
如果 是正則表達式 , 那麼
- 是正則表達式 ;
- 是正則表達式 ;
- 是正則表達式 ;
上述是正則表達式的定義 , 這是一個結構歸納定義 ;
II . 正則表達式語言 原子定義
正則表達式語言表示方式 : 是正則表達式 , 是正則表達式代表的語言 ;
1 . 單個字符代表的語言 :
是字符集中的字符 , 那麼其所代表的的語言是 單元集 , 是由一個元素的字符構成的 ;
2 . 空字符串代表的語言 :
如果 是正則表達式 , 其所代表的的語言 , 是由空字符串組成的集合 ;
3 . 空集代表的語言 :
空集 所代表的的語言 , 就是空集 ;
III . 正則表達式語言 結構歸納定義
1 . 正則表達式並集 的 語言 :
是兩個正則表達式 , 其並集的語言 , 就是其 兩個語言的並集 ;
2 . 正則表達式串聯 的 語言 :
是兩個正則表達式 , 其串聯運算結果正則表達式的語言 , 就是其 兩個正則表達式語言的 串聯運算結果 ;
3 . 正則表達式星運算 的 語言 :
正則表達式 星運算 結果 正則表達式 的語言 , 就是 正則表達式的語言 進行 星運算的結果 ;
IV . 正則表達式語言 示例
字符集 : ;
正則表達式 : ;
正則表達式轉化成語言 :
上述 就是 有限個字符串組成的字符 ;
正則表達式表示的語言 , 剛好是自動機所識別的語言 ; 可以根據該語言將自動機設計出來 ;
V . 空集 與 空字符 差別
空集 是正則表達式 , 類似於數中的 ;
空字符 是正則表達式 , 類似於數中的 ;
( 後續待補充 )
VI . 正則表達式 定理
1 . 定理 : 一個語言如果是正則語言 , 當且僅當 , 該語言可以通過正則表達式表示出來 ;
2 . 有以下兩層含義 :
-
① 正則表達式 -> 自動機識別 :正則表達式 表達出的語言 剛好 能夠被自動機識別 ;
-
② 自動機識別 -> 正則表達式 : 自動機識別某個語言 , 那麼該語言可以被正則表達式表達出來 ;
3 . 定理證明 :
① 正則表達式 -> 自動機識別 證明 : 給定一個正則表達式 , 設計一個自動機 , 該自動機所 接受 ( 識別 / 認識 ) 的語言 , 剛好是該正則表達式所表達的語言 ;
下面的 " 根據 正則表達式 語言 構造 自動機 " 小節的示例 , 證明了正則表達式語言必有自動機識別 ;
② 自動機識別 -> 正則表達式 證明 : 給定一個自動機 , 找到其所識別的 正則表達式語言 ;
VII . 根據 正則表達式 語言 構造 自動機 ( 定理正向證明 )
1 . 需求 : 根據下面的 正則表達式 構造 非確定性有限自動機 ( NFA ) , 剛好能 識別上述正則表達式表示的語言 ;
構造能識別 語言 的 自動機 ;
VIII . 構造原子自動機
構造原子自動機 : 先構造能接收 單個字符 的自動機 ;
① 接收 字符的自動機 : 下面的自動機是可以識別 字符串的 ;
② 接收 字符的自動機 : 下面的自動機是識別 字符串的 ;
IX . 使用 原子自動機 拼裝 正則表達式對應的自動機
拼裝上述識別單個字符的 自動機 :
1 . 擺放自動機位置 : 將 個能識別 字符串的自動機 , 與 個能識別 字符串的自動機 , 按照如下排列放置 ;
2 . 對應自動機構造 :
① 自動機連接方式 : 正則表達式語言 自動機 與 正則表達式語言 自動機 是串聯在一起的 ;
② 串聯兩個自動機的狀態 : 使用 箭頭 , 串聯 對應自動機的接受狀態 -> 對應自動機的開始狀態 ;
③ 修改 前者 的狀態 : 同時將 對應自動機的接受狀態 改爲非接受狀態 ;
下面是 正則表達式 表達的語言 對應的自動機表示 :
3 . 對應自動機構造 :
① 添加新開始狀態 : 重新添加一個開始狀態 ;
② 連接並運算前者 : 使用 箭頭 從這個新添加的開始狀態 指向 自動機開始狀態 ;
③ 連接並運算後者 : 使用 箭頭 從這個新添加的開始狀態 指向 自動機開始狀態 ;
下面是 正則表達式 表達的語言 對應的自動機表示 :
4 . 對應自動機構造 :
① 構造方法 : 就是 在 對應自動機的基礎上 , 使用 箭頭 , 從 接受狀態 指向 開始狀態 ;
② 連接個數 : 所有的接受狀態 , 都 使用 箭頭 指向開始狀態 , 這裏有兩個接受狀態 , 需要都指向開始狀態 ;