正則表達式的運算符
1、兩個語言L和M的並,記作L∪M,是只屬於L或屬於只屬於M,或者同時屬於二者的串的集合。這個運算符有時也記作L+M。

2、語言L和M的連接是以下形成的串的集合:取L中任意一個串,與M中任意一個串連接起來。一般用圓點或者根本不用任何運算符來表示兩個語言的連接。

3、語言L的閉包(或星,或克林閉包),記作L*,表示用以下方式形成的串的集合:從L中取任意多個串,可能有重復(即可以多次選同一個串),把所有這些串連接起來。更形式化的說,L*是無窮的並Ui≥0Li,其中L0={ε},L1=L,對於i>1,Li是i個L的連接。

正則語言

從RE到ε-NFA
對於正則語言:ε、Ø、a,對應的自動機依次如下

對於正則語言:R|S,對應的自動機如下

對於正則語言:R.S,對應的自動機如下

對於正則語言:R*,對應的自動機如下

下面給出一個例子:

將RE轉換成ε-NFA后,可以按照下面的路徑將ε-NFA轉換成為DFA
RE→ε-NFA→NFA→DFA
從DFA到RE
可以通過狀態消除的方法將一個FA轉換成為RE,狀態消除的方法如下:
合並:

消除順序狀態:

消除循環狀態:

下面給出一個例子:









從NFA到正則文法
正則文法:

在前面的博客也有給出文法的定義,在這里,N是指非終止符號集,Σ是指終止符號集。
一個語言L能夠被NFA接受,當且僅當這個語言有一個正則文法。
從一個NFA構造出一個等價的正則文法:

下面給出一個例子:

證明一個語言是正則語言
如果能構造出一個接受該語言的有限狀態自動機,則是正則語言。
證明一個語言不是正則語言
如果語言L不滿足泵引理,則不是正則語言。
泵引理的定義,其中n是一個與語言L相關的常數。

也就是說,我們總能在離w的開始處不太遠的地方找到一個非空的串y,然后可以把它作為“泵”,也就是說,重復y任意多次,或者去掉它(k=0的情況),而所得到的結果串依然屬於L。
下面給出一個例子:

DFA的最小化 - 填表算法
算法步驟:

下面給出一個例子,將下面的DFA最小化:

第一步,畫一個表,然沿對角線畫一條線,將對角線以上的部分丟掉(這是因為一個完整的表是沿對角線對稱的),同時也要丟掉對角線上的部分,因為對任意的(q, q),不可能有q屬於F並且q不屬於F。
第二步,將包含終止狀態的狀態對打上標記,如下

第三步,在狀態轉換圖中找出所有與終止狀態相鄰的狀態。依次檢查這些狀態,使用上述填表算法進行檢查,標記上符合要求的狀態對。檢查完畢后,再向外擴張,直到每個狀態對都被檢查過為止。


將所有等價的狀態進行合並,即可得到最小化的DFA:

正則語言的封閉性

判定性問題
- 給定一個字符串w和正則語言L,判斷w是否屬於L

- 給定一個正則語言L,判斷L是否為空

- 給定兩個正則語言L1和L2,判斷L1是否等於L2

