文章目錄
- 推廣型的非確定性有限自動機 ( GNFA ) 引入
- 推廣型的非確定性有限自動機 ( GNFA ) 刪除狀態
- 確定性有限自動機 ( DFA ) 轉爲 正則表達式
- 確定性有限自動機 ( DFA ) 轉爲 正則表達式 ( 1 ) 添加開始狀態 和結束狀態
- 確定性有限自動機 ( DFA ) 轉爲 正則表達式 ( 2 ) 刪除 狀態 刪除方法
- 確定性有限自動機 ( DFA ) 轉爲 正則表達式 ( 2 ) 刪除 狀態 信息梳理
- 確定性有限自動機 ( DFA ) 轉爲 正則表達式 ( 2 ) 刪除 狀態 : -> -> 生成信息 ->
- 確定性有限自動機 ( DFA ) 轉爲 正則表達式 ( 2 ) 刪除 狀態 : -> -> 生成信息 ->
- 確定性有限自動機 ( DFA ) 轉爲 正則表達式 ( 2 ) 刪除 狀態 階段性結果
- 確定性有限自動機 ( DFA ) 轉爲 正則表達式 ( 3 ) 刪除 狀態 信息梳理
- 確定性有限自動機 ( DFA ) 轉爲 正則表達式 ( 3 ) 刪除 狀態 : -> -> 生成信息 ->
- 確定性有限自動機 ( DFA ) 轉爲 正則表達式 ( 3 ) 刪除 狀態 : -> -> 生成信息 ->
- 確定性有限自動機 ( DFA ) 轉爲 正則表達式 ( 2 ) 刪除 狀態 階段性結果
- 確定性有限自動機 ( DFA ) 轉爲 正則表達式 ( 4 ) 刪除 狀態 信息梳理
- 確定性有限自動機 ( DFA ) 轉爲 正則表達式 ( 4 ) 刪除 狀態 : -> -> 生成信息 ->
- 確定性有限自動機 ( DFA ) 轉爲 正則表達式 總結
推廣型的非確定性有限自動機 ( GNFA ) 引入
1 . 給定一個自動機 , 必有一個正則表達式可以表示其所識別的語言 ;
2 . 引入 推廣型的非確定性有限自動機 ( GNFA ) : 首先要構造一個推廣的一般型的非確定性有限自動機 , 每次消除一個狀態 , 最後只剩下兩個狀態 , 此時箭頭上的正則表達式就是最終的正則表達式 ;
上述自動機是一個 推廣型的非確定性有限自動機 ( GNFA ) , 箭頭上 不是單個字符 或 空字符 , 而是 正則表達式 ;
3 . 推廣型的非確定性有限自動機 ( GNFA ) 中的推廣的體現 :
① 非確定性有限自動機 ( NFA ) : 箭頭上 只能出現 字符 , 空字符串 , 種輸入 , 不能出現其它輸入內容 ;
② 推廣型的非確定性有限自動機 ( GNFA ) : 箭頭上 可以出現 字符 , 空字符串 , 空集 , 正則表達式 , 種輸入 ;
4 . 推廣型的非確定性有限自動機 ( GNFA ) 與 非確定性有限自動機 ( NFA ) 是等價的 ;
推廣型的非確定性有限自動機 ( GNFA ) 刪除狀態
給定一個 推廣型的非確定性有限自動機 ( GNFA ) , 找到一個正則表達式 , 代表給定自動機的語言 ;
1 . 需求描述 : 上述自動機中 , 都是正則表達式 ;
刪除 狀態 : 目前希望能刪除 自動機中的 狀態 , 刪除 之後 , 會省略一部分語言 , 這裏 省略了 ;
語言要求 : 將 狀態刪除後 , 不影響整個自動機所接受的語言 , 那麼需要將省略的部分語言 , 補充到 中 ;
2 . 關係分析 :
① 星運算 : 是一個循環 , 接受 後 , 仍然保持 狀態 , 這裏的該循環的正則表達式表示爲 ;
② 與 串聯運算 : 與 是串聯關係 , 表示爲
③ 與 的串聯運算 : 與 是串聯關係 , 表示爲 ;
3 . 並運算 : 與 是並集關係 , 都是 到 的輸入的正則表達式 ;
4 . 兩個正則表達式並運算表示爲 :
確定性有限自動機 ( DFA ) 轉爲 正則表達式
上圖中的自動機是一個 個狀態的 確定性有限自動機 ( DFA ) ;
將上述 確定性有限自動機 ( DFA ) 轉爲正則表達式 ;
確定性有限自動機 ( DFA ) 轉爲 正則表達式 ( 1 ) 添加開始狀態 和結束狀態
1 . 添加開始和結束狀態 :
① 添加開始狀態 : 添加新的開始狀態 , 使用 箭頭指向當前 確定性有限自動機 ( DFA ) 的 開始狀態 ;
② 添加結束狀態 : 再次添加一個 接受狀態 , 從 確定性有限自動機 ( DFA ) 的接受狀態 指向該新的結束狀態 , 該新添加的結束狀態 是 接受狀態 ;
2 . 確定性有限自動機 ( DFA ) 轉爲 正則表達式 思想 : 逐步刪除 狀態 , 每次刪除一個狀態 , 生成新的正則表達式 , 最後就剩下 開始狀態 , 和結束狀態 , 最後剩下的就是 到 狀態的正則表達式 , 也是自動機的正則表達式 ;
確定性有限自動機 ( DFA ) 轉爲 正則表達式 ( 2 ) 刪除 狀態 刪除方法
1 . 刪除 狀態 :
① 信息抽取轉移 : 找到 與 狀態 所有的相關的信息 , 添加到其它的箭頭上 , 如果沒有創建一個新的箭頭 ;
② 狀態的輸入和輸出 : 哪些狀態 有箭頭 輸入到 狀態 , 狀態 有哪些箭頭 輸出到了其它狀態 ;
③ 信息轉移 : 將每個輸入 和 每個輸出的信息全部轉移 , 一條信息也不能遺漏 ;
④ 狀態的輸入輸出統計 : 有 條輸入 , 條輸出 ; 其中有 一條輸入輸出是從 狀態輸出指向 它自己 , 共有 個箭頭信
息 ; 外部輸入有 2 條 , 外部輸出 有 條 , 需要生成的箭頭信息個數是 ;
2 . 狀態的循環 ( 輸入 輸出 ) : 狀態下讀取 , 仍然回到 狀態 ; 這 個輸入 , 個輸出 , 是從 狀態輸出到 狀態 , 這是一個 星計算 ; 使用 表示 ;
確定性有限自動機 ( DFA ) 轉爲 正則表達式 ( 2 ) 刪除 狀態 信息梳理
狀態 信息梳理如下 ;
1 . 狀態信息輸入 :
狀態 讀取 跳轉到 狀態 ;
狀態 讀取 跳轉到 狀態 ;
2 . 狀態信息輸出 :
狀態讀取 正則表達式 跳轉到 狀態 ;
3 . 箭頭信息生成個數 : 外部輸入有 2 條 , 外部輸出 有 條 , 需要生成的箭頭信息條數 :
確定性有限自動機 ( DFA ) 轉爲 正則表達式 ( 2 ) 刪除 狀態 : -> -> 生成信息 ->
1 . -> -> 狀態跳轉 :
狀態讀取 跳轉到 狀態 : 這裏是狀態 的一條輸入 , 使用 表示 ;
狀態讀取 跳轉到 狀態 : 這是無限的星計算 , 使用 表示 ;
狀態讀取 跳轉到 狀態 : 這裏是狀態 的一條輸出 , 使用 表示 ;
2 . 個正則表達式是串聯關係 ;
中間經歷的過程是 狀態輸入 跳轉到 狀態 , 本身可以有無限個星計算 , 狀態輸入 跳轉到 狀態 ;
使用正則表達式表示爲 ;
4 . 生成箭頭信息 :
狀態下 , 讀取 正則表達式 , 可以跳轉到 狀態 ;
將 正則表達式 與 到 跳轉箭頭上的 進行並計算 , 得到
這是 跳轉到 的正則表達式 ;
確定性有限自動機 ( DFA ) 轉爲 正則表達式 ( 2 ) 刪除 狀態 : -> -> 生成信息 ->
1 . -> -> 狀態跳轉 :
狀態讀取 跳轉到 狀態 : 這裏是狀態 的一條輸入 , 使用 表示 ;
狀態讀取 跳轉到 狀態 : 這是無限的星計算 , 使用 表示 ;
狀態讀取 跳轉到 狀態 : 這裏是狀態 的一條輸出 , 使用 表示 ;
2 . 個正則表達式是串聯關係 ;
中間經歷的過程是 狀態輸入 跳轉到 狀態 , 本身可以有無限個星計算 , 狀態輸入 跳轉到 狀態 ;
三者串聯關係 , 使用正則表達式表示爲 ;
即 狀態下 , 讀取 正則表達式 , 可以跳轉到 狀態 ;
3 . 生成箭頭信息 :
給 狀態添加一個箭頭指向它自身 , 箭頭的接收的正則表達式是
這是 跳轉到 的正則表達式 ; 表示 狀態下接收 正則表達式 , 仍然跳轉到 狀態 ;
確定性有限自動機 ( DFA ) 轉爲 正則表達式 ( 2 ) 刪除 狀態 階段性結果
刪除 狀態結果 :
確定性有限自動機 ( DFA ) 轉爲 正則表達式 ( 3 ) 刪除 狀態 信息梳理
狀態 信息梳理如下 ;
1 . 狀態信息輸入 :
狀態 讀取 跳轉到 狀態 ;
狀態 讀取 跳轉到 狀態 ;
2 . 狀態信息輸出 :
狀態讀取 正則表達式 跳轉到 狀態 ;
3 . 箭頭信息生成個數 : 外部輸入有 2 條 , 外部輸出 有 條 , 需要生成的箭頭信息條數 :
確定性有限自動機 ( DFA ) 轉爲 正則表達式 ( 3 ) 刪除 狀態 : -> -> 生成信息 ->
1 . -> -> 狀態跳轉 :
狀態 讀取 跳轉到 狀態 , 正則表達式 表示爲 ;
狀態 讀取 正則表達式 跳轉到 , 正則表達式 表示爲 ;
2 . 正則表達式 : 上述兩個正則表達式是串聯關係 , 正則表達式表示爲
3 . 生成新的箭頭信息 :
新增加的 狀態下讀取 跳轉到 ;
與原來的 讀取 跳轉到 是並聯關係 ,
最終的 讀取一個正則表達手 跳轉到 狀態 , 的正則表達式爲
確定性有限自動機 ( DFA ) 轉爲 正則表達式 ( 3 ) 刪除 狀態 : -> -> 生成信息 ->
1 . -> -> 狀態跳轉 :
狀態 讀取 跳轉到 狀態 , 正則表達式 表示爲 ;
狀態 讀取 正則表達式 跳轉到 , 正則表達式 表示爲 ;
上述兩個正則表達式是串聯關係 , 正則表達式表示爲 , 其中 可以省略 , 最終表示爲
2 . 新增加 狀態 到 狀態之間的跳轉 : 狀態下讀取 正則表達式 , 跳轉到 狀態 ;
確定性有限自動機 ( DFA ) 轉爲 正則表達式 ( 2 ) 刪除 狀態 階段性結果
確定性有限自動機 ( DFA ) 轉爲 正則表達式 ( 4 ) 刪除 狀態 信息梳理
狀態 信息梳理 :
1 . 狀態信息輸入 :
狀態 讀取 跳轉到 狀態 ;
狀態 讀取 跳轉到 狀態 ;
2 . 狀態信息輸出 :
狀態 讀取 跳轉到 狀態 ;
狀態讀取 正則表達式 跳轉到 狀態 ;
3 . 箭頭信息生成個數 : 自身循環有一個 , 從 狀態 自身輸出到輸入 , 外部輸入有 1 條 , 外部輸出 有 條 , 需要生成的箭頭信息條數 :
確定性有限自動機 ( DFA ) 轉爲 正則表達式 ( 4 ) 刪除 狀態 : -> -> 生成信息 ->
1 . -> -> 狀態跳轉 :
狀態 讀取 跳轉到 狀態 ;
狀態 讀取 跳轉到 狀態 , 星計算 , 表示成
狀態讀取 正則表達式 跳轉到 狀態 ;
上述 個正則表達式是串聯關係 , 正則表達式表示爲 :
2 . 新增加 狀態 到 狀態之間的跳轉 : 狀態下讀取 正則表達式 , 跳轉到 狀態 ;
確定性有限自動機 ( DFA ) 轉爲 正則表達式 總結
由上述示例可知 , 任何 確定性有限自動機 都可以轉爲 正則表達式 , 非確定性有限自動機 與 確定性有限自動機 又是等價的 , 因此 有限自動機 都可以轉爲 正則表達式 ;