1. 有窮自動機的概念:
有窮自動機(fa)是詞法分析的重要理論基礎。系統根據自己的有窮狀態和離散的輸入資訊決定系統的後序行為。每處理乙個輸入,系統內部狀態也可能發生改變。
其轉換圖表示法如下所示:
其中start指向的表示初始態,箭頭上面的表示輸入,有向邊就是變化,圓圈內表示狀態。多加了乙個圈(雙圈,狀態3),表示結束態。在這種狀態下就不接受輸入了。
如果乙個串x,如果存在乙個對應串x從開始狀態到結束狀態的轉換序列,則稱串x被該有窮自動機吸收。比如說上面的有窮自動機,對於串abbaabb,就是可以吸收的,串的對應的狀態轉換序列分別是:0000123.
乙個有窮自動機m接收的所有串的集合稱為fa定義的語言,記為l(m). 上面的自動機能夠接收的語言,如果用正規表示式來表示的話,應該是(a|b)* abb.
2. 有窮自動機的分類:
有窮自動機分為確定有窮自動機(dfa)和非確定有窮自動機(nfa).
dfa 確定有窮自動機可以用五元組來表示:
需要注意的是,對於確定的有窮自動機,乙個輸入決定的狀態轉移只可能有乙個狀態,這一點從根本上與非確定的有窮自動機相區別。確定和非確定的區別由此而來。我們來看乙個確定有窮狀態機的例子:
從狀態轉換表我們能看到,對應的乙個狀態,和乙個輸入,只能轉換成其他另乙個狀態,而不是其他多個狀態。比如狀態0遇到a則變成狀態1,遇到b的時候還是狀態0.
我們再來看看非確定的有窮自動機:
只有δ的描述有區別,也就是說對於乙個狀態,和乙個輸入,可能有多種狀態轉移。 來看乙個nfa的例子:
我們來看狀態0,狀態0遇到a的時候,既可能轉移到狀態1,也有可能保持狀態0不變。這就是nfa。空集這裡面表示這個狀態不接受這個輸入。
那麼有窮狀態機是如何進行詞法分析的呢?我們知道詞法分時首要任務是如何從原始檔中的ascii碼序列依次分離出單詞,即如何判定新單詞的開始、如何判定乙個單詞的結束以及如何判定是什麼類的單詞的問題。所以對於乙個輸入的字串,我們將其扔進不同的型別單詞的有窮狀態機,當這個狀態機能夠匹配這個輸入的單詞的時候,我們就知道這個單詞是什麼型別了。
字串匹配了某一種型別的狀態機,我們就知道了單詞是什麼型別,或者屬於什麼關鍵字,這就為下一步進行語法分析打下了基礎。
有窮自動機
problem description adfa 證明 adfa是可判定的。實驗方法 編寫乙個演算法 程式,對於任意給定的輸入,可以判定adfa。input 有多個測試序列,測試結束於測試檔案結束 每個測試序列的第一行為幾個正整數n m t a分別表示有n個狀態,從a開始m個小寫字母組成的字符集,第...
有窮狀態自動機
有窮狀態自動機 fa finite automaton 是乙個五元組 m q,q0,f q 狀態的非空有窮集合.q q,q稱為m的乙個狀態.輸入字母表.狀態轉移函式,有時又叫作狀態轉換函式或者移動函式,q q,q,a p.q0 m的開始狀態,也可叫作初始狀態或啟動狀態.q0 q.f m的終止狀態集合...
實驗三 有窮自動機
實驗三 有窮自動機 一 實驗目標 1 掌握有窮狀態自動機的概念 2 掌握有窮狀態自動機的儲存及表示方法 3 掌握有窮狀態自動機與正則式之間的關係。二 實驗要求 1 輸入正規式 2 構造該正規式的有窮狀態自動機 3.以五元組形式輸出。三 演算法 參見教材的轉換規則。練習 a b abb l l d 1...