課程名:形式語言與自動機
作者:Lupinus_Linn
許可證:CC-BY-NC-SA 3.0 創作共用-署名-非商業性-相同方式共享
- 署名(英語:Attribution,BY):您(用戶)可以複製、發行、展覽、表演、放映、廣播或通過信息網絡傳播本作品;您必須按照作者或者許可人指定的方式對作品進行署名。
- 非商業性使用(英語:Noncommercial,NC):您可以自由複製、散佈、展示及演出本作品;您不得爲商業目的而使用本作品。
- 相同方式共享(英語:Sharealike,SA):您可以自由複製、散佈、展示及演出本作品;若您改變、轉變或更改本作品,僅在遵守與本作品相同的許可條款下,您才能散佈由本作品產生的派生作品。(參見copyleft。)
引用:
- 本文中部分文字與圖片引用自北京郵電大學計算機學院王柏教授的《形式語言與自動機》課程課件。
- 緒論中的證明方法部分引自清華大學王生原老師課件。
- 部分題目插圖引用自北京郵電大學出版社《形式語言與自動機 第二版》教材。
在此一併表示感謝,並不做商業用途。
本筆記所有內容的傳送門
Part.1緒論, Part.2 語言與文法
Part 3.有限自動機
Part.4 正則語言,2DFA,Mealy&Moore機
Part.5 上下文無關語言與下推自動機(PDA)
Part.6 圖靈機
Part.4 正則語言
4.1 基本概念
- 正則語言:滿足正則語言的判定定理的語言。
- 正則(表達)式:用類似代數表達式的方法表示正則語言。
- 正則式的相等:表示的語言相同。
- 正則集:滿足正則式的字符串的集合。
- 正則式和語言的的聯合運算+,連接運算•,正閉包L+,星閉包L∗及運算性質。
注1:正則集是T* 的子集。(即正則集是T*上的語言)
注2:L+包含ε當且僅當L包含ε。
注3:每個正則集至少對應一個正則式(可有無窮多 個正則式)
4.2 右線性文法↔正則表達式
兩個等價
- 左線性文法和右線性文法等價。
- 右線性文法和正則式等價(右線性文法產生的語言都是正則語言,正則語言都可以用右線性文法產生)
從右線性文法導出正則式:設x→αx+β,α∈T∗,x∈N,then x=α∗β。不斷代入消元,最後得出S=<RE>
4.3 正則語言可以表示爲有限自動機、正則表達式和右線性文法
三者兩兩等價,都表示正則語言
例子:
G=({S,A},{0,1},P ,S)其中P:S—>1A,A—> 0A |1S|0
-
文法轉正則式:解方程
A→0A∣1S∣0,即A→0A∣11A∣0,解得A=(0+11)∗0,得S=1(0+11)∗0
-
正則式轉文法:按照運算順序,按基本運算還原。
1,(0+11)∗,0是依次連接的,對應文法的連接,則S→1A0,A→(0+11)∗
閉包運算的文法是A→aA∣ϵ,所以A→0A∣11A∣ϵ
-
文法轉自動機:生成一個喫一個,生成終結符串的,轉移到一個新增的接受狀態。
因爲mermaid語法的限制,用方形框表示接受。
S→1A,則狀態qS用字符1轉移到狀態qA,其他以此類推。
A可以推出終結符串0,則qA通過0轉移到新的接受狀態qH
-
自動機轉文法:每一個轉移,對應一個產生式。轉移到接受狀態的,額外增加推出終結符串。
qS接受1轉移到qA,所以文法有產生式qS→1qA,其他以此類推。
最後可能要做三消(消單消空消遞歸)。
qS→1qAqA→1qSqA→0qAqA→0qH∣0
-
自動機轉正則式:狀態消去法
要消去狀態qA,入射qA的有{qS},出射qA的有{qH,qS},所以對qS到qH,qS到$q_S $有影響。
此時已經是基本結構,一舉寫出
S=(10∗1)∗10∗0
-
正則式轉自動機:按照運算順序,按基本運算還原。
用S=1(0+11)∗0來還原,5.裏那個比較複雜。
1,(0+11)∗,0是依次連接的,對應自動機某一些狀態區域的空轉移。
空閉包的結構是,要麼空轉移,要麼在原地轉圈後轉移。
0+11的結構是,兩條並行線。
11結構是,順序執行。
4.4 有限自動機→正則表達式:狀態消去法
精髓:將正則表達式作爲轉移弧的標記。不斷刪去狀態,刪去狀態時將其前驅和後繼的轉移弧標記修改。刪到基本結構時寫出最終表達式。
刪除方法:
基本結構:
對於q∈F
- q=q0,則正則表達式爲(R+SU∗T)∗SU∗,即觀察從q0到q的可能路徑。
爲到達q0,可以在q0自環轉任意次或者q0和q之間反覆橫跳任意次。
之後要到達q,一定會單獨經過一次S,然後在q又可以自環轉任意次。
- q=q0,最後可以刪到只剩下一個狀態。正則表達式爲R∗.
- 當有∣F∣>1,即有多個狀態被接受時,將到達每個終態的正則表達式加起來。
技巧:刪去的順序不一定,可以先局部再整體。
例子:
- 另有狀態消去法的形式化方法– CONVERT(G),但其不適合手工操作,略去不表。
4.5 正則表達式→有限自動機
精髓:將正則表達式的匹配過程寫成一個二叉樹,然後中序遍歷,按照幾種基本結構將其畫成自動機。
其實大多數時候是隨手畫。
基礎:
歸納:
4.6 右線性文法→有限自動機
精髓:因爲右線性文法每次會產生一個非終結符合一個終結符,將生成終結符作爲自動機的轉移條件,產生的非終結符作爲下一個狀態。
因爲只產生終結符時應該是接受狀態,但是文法中沒有這個符號,所以就新建一個符號H,讓終結符指向H,H被接受。
爲了不引入空轉移,根據是否能由S推出空串決定S的可接受性。
方法:設右線性文法G=(N,T,P,S),構造一個與G等
價的有限自動機NFA M=(Q,T,δ,q0,F),其中: Q=N∪H,H爲一個新增加的狀態, H∈/N, q0=S.
F={{H,S},if S→ϵ∈P{H}
δ:
B∈δ(A,a) if A→aB∈PH∈δ(A,a) if A→a∈Pδ(H,a)=∅
例子:
4.7 有限自動機→右線性文法
精髓:把δ函數的轉移看成是一個個生成式。
方法:設NFA M=(Q,T,δ,q0,F),構造一個右線性文法G=(N,T,P,S),其中N=Q, S=q0
P:
A→aB ∈P if δ(A,a)=B, then if B∈F, add A→a to P
例子:
4.8 DFA的最小化:填表算法
- 最小化:對DFA M的極小化是找出一個狀態數比M少的
DFA M1,使滿足 L(M) = L(M1)。若DFA M不存在互爲等價狀態及不可達狀態,則稱 DFA M是最小化的.
- 狀態偶對:兩個狀態的有序二元組稱爲狀態偶對。
- 狀態的等價和可區分:兩者是對立的。對於某一DFA M,如果兩個狀態q0,q1通過任意的串ω都可以轉移接收狀態(不一定是同一個接收狀態),則兩者等價。反之兩者可區分。
即:設DFA M=(Q,T,δ,q0,F),若qx,qy∈Q,對於∀ω∈T∗,若(qx,ω)┣∗(qx,ϵ)↔(qy,ω)┣∗(qy,ϵ),則qx,qy等價,反之兩者可區分。
- 不可達狀態:即無法從q0輸入任何字符串ω到達的狀態。
4.8.1 刪除不可達狀態
可以減小填表算法的負擔。
從q0開始,迭代尋找(bfs)可以到達的狀態Q可達,則Q−Q可達即爲不可達狀態,刪除不可達狀態即含有其的轉移條目。
4.8.2 填表算法
精髓:因爲狀態的等價關係是傳遞的,可以通過兩兩判斷等價性來找出所有等價的狀態。又因爲是自反的、對稱的,所以只需要一個n×n表格的下三角部分來記錄,且不需要對角線。
如果沒有理由認爲兩個狀態是可區分的,那麼就認爲他們是等價的。
方法:
- 基礎:所有的終態和非終態是可區分的。
- 歸納:如果某兩個狀態qx,qy可以通過符號a轉移到兩個可區分的狀態,那麼他們是可區分的。
例子:
4.8.3 等價狀態的合併
將所有的狀態根據等價性構成一個劃分,將劃分塊用其等價類代替。
用等價類作爲狀態標記構造一個新的DFA,其轉移關係爲:如果原來不同劃分之間至少有一種轉移,那麼這兩個等價類增加一條轉移。
即:設待最小化的DFA爲DFA A=(Q,T,δ,q0,F) ,最小化的自動機爲DFA B=(QB,T,δB,[q0],FB) , 其中 QB={[q]∣q∈Q}, δB([q],a)=[δ(q,a)]},FB={[q]∣q∈F}
4.8.4 例子
4.9 正則語言的泵引理
精髓:因爲正則語言對應的是有限自動機,其狀態數是有限的,那麼由Pigeonhole Rule,對於無限的語言(有限語言可以通過“並”構成正則語言),如果其爲正則語言,那麼一定會在自動機的某一段繞圈來達到無限。
泵引理:正則語言中足夠長的句子一定能拆成三段,並且中間一段重複0次或任意多次得到的句子仍然屬於正則語言(可以Pumping in和Pumping out)。泵引理成立是正則語言的一個必要條件。
用泵引理來證明某語言不是正則語言
證明步驟
- 選任意的n.
- 找到一個滿足以下條件的串w∈L (長度至少爲n).
- 任選滿足w=xyz∧y=ϵ∧∣xy∣≤n 的x,y,z
- 找到一個 k≥0, 使 xykz=L.
例子:利用泵引理證明下述語言不是正則語言:
L={1n2∣n≥0}
答:
- 假設L是正則語言。
- 那麼,存在N∈Z+,對於∀ω∈L(∣ω∣≥N)滿足泵引理。
- 取ω=1N2,顯然ω∈L且∣ω∣=N2≥N。
- 那麼,ω可以被分爲ω=xyz,且∣xy∣≤N,∣y∣>0.
- 那麼,y只能是1m(m>0),x爲1l(l≥0),z爲1N2−l−m,且滿足m+l≤N。
- 那麼xy2z=1l12m1N2−l−m=1N2+m。
- 因爲m>0所以N2+m>N2;因爲m+l≤N且l≥0,得m≤N,所以N2+m≤N2+N<N2+2N+1=(N+1)2,所以N2<N2+m<(N+1)2,即新串的長度嚴格位於兩個完全平方數之間,所以其不是完全平方數。
- 則xy2z∈/L,而由泵引理xy2z∈L,所以假設不成立,L不是正則語言。
例子:由文法G產生的語言L(G),其中P:S→aSbS∣c.
語言的描述有很多種,用類似anbn的公式化描述的只有一部分。還有用敘述性描述(比如a和b的數量一樣多)和文法描述的(本題)。這些描述有時候很難寫出完全等價的公式化描述,其實只需要其中的一個句子即可。
- 假設L是正則語言,則存在正整數N,對於任意L內的字符串ω成立∣ω∣≥N時,可以應用泵引理。
- 對於L,不妨取ω=aNc(bc)N=ω1ω0ω2,則∣ω0∣>0,∣ω1ω0∣≤N,顯然ω0=ai(i>0)。
- 則對於ω′=ω1ω02ω2=aN+ic(bc)N,其不屬於L(注意是文法那個L,不是取的句子),而與泵引理矛盾,所以L不是正則語言。
4.10 雙向有限自動機(2DFA)
雙向有限自動機:讀入一個字符之後,讀頭既可以左移一格, 也可以右移一格,或者不移動的有限自動機。
確定的雙向有限自動機: 每讀入一字符,必須向左或右移動,不考慮不移動的情況.
4.10.1 2DFA的五要素
2DFA M=(Q,T,δ,q0,F)
δ:Q×T→Q×{L,R}
δ(q,a)=(p,R) or δ(q,a)=(p,L)
其他與DFA相同。即每次除了狀態轉移之外還要移動讀頭(左移或右移一格)。
4.10.2 2DFA的格局
-
2DFA的格局和DFA的不同,要把字符串整個列出來。
-
δ(q,am+1)=(p,R)的格局表示:a1a2…amqam+1…an┣a1a2…am+1pa+m+2…an
-
δ(q,am+1)=(p,L)的格局表示: a1a2…amqam+1…an┣a1a2…am−1pamam+1…an
4.10.3 2DFA接受的語言
- 2DFA接受的語言是L(M)={ω∣qω┣ω∗q,q∈F}
4.11 有輸出的有限自動機(Mealy&Moore)
有輸出的有限自動機是有限自動機的一個類型.
這類自動機在有字符輸入時,不僅存在狀態轉換, 同時引起字符輸出.
根據輸入字符,自動機狀態,輸出字符三者之 間關係,可有兩類有輸出的自動機:
米蘭機(Mealy): 輸出字符與輸入字符及狀態有關.
摩爾機(Moore): 輸出字符僅與狀態有關.
最大優點: 節省狀態
4.11.1 Mealy機
-
M=(Q,T,R,δ,g,q0)
相比DFA,多了輸出函數g:Q×T→R
δ和g函數共同描述Mealy機的工作情況。
-
繪圖:
{δ(p,a)=qg(p,a)=b
繪製爲
-
例子:
4.11.2 Moore機
-
M=(Q,T,R,δ,g,q0)
相比DFA,多了轉移函數g
相比Mealy機,Moore機的轉移函數g是個一元函數,只與當前狀態有關。
-
繪圖:
⎩⎪⎨⎪⎧δ(p,a)=qg(p)=b1g(q)=b2
繪製爲
因爲輸出只與狀態有關,所以把輸出寫在狀態圈裏。
-
例子:
4.11.3 Moore機→Mealy機
- Moore機比較簡單,所以轉換成Mealy機很方便。
- 將Moore機中某個狀態q的輸出b,作爲新的Mealy機任何到達q狀態的轉移時的輸出。
即:設摩爾機M=(Q,T,R,δ,g,q0) 米蘭機M’=(Q,T,R,δ,g’,q0) 如果中有δ(q,a)=p,$ g§ = b$ 則M’中有g’(q,a)=b=g(δ(q,a))
例子:
4.11.4 不做要求:Mealy機→Moore機
略去不表。