非確定的自動機NFA確定化為DFA

2022-05-02 18:48:09 字數 2251 閱讀 9934

在編譯系統中,詞法分析階段是整個編譯系統的基礎。對於單詞的識別,有限自動機fa是一種十分有效的工具。有限自動機由其對映f是否為單值而分為確定的有限自動機dfa和非確定的有限自動機nfa。在非確定的有限自動機nfa中,由於某些狀態的轉移需從若干個可能的後續狀態中進行選擇,故乙個nfa對符號串的識別就必然是乙個試探的過程。這種不確定性給識別過程帶來的反覆,無疑會影響到fa的工作效率。因此,對於乙個非確定的有限自動機nfa m,經常的做法是構造乙個確定的有限自動機dfa m』。

有窮自動機(也稱有限自動機)作為一種識別裝置,能準確地識別正規集,即識別正規文法所定義的語言和正規式所表示的集合。引入有窮自動機理論,正是為詞法分析程式的自動構造尋找特殊的方法和工具。

有窮自動機分為兩類:確定的有窮自動機(deterministic finite automata,dfa)和不確定的有窮自動機(nondeterministic finite automata,nfa)。下面分別給出確定的有窮自動機和不確定的有窮自動機的定義、與其有關的概念、不確定的有窮自動機的確定化以及確定的有窮自動機的化簡等演算法。

nfa轉換為等價的dfa:在有窮自動機的理論裡,有這樣的定理:設l為乙個由不確定的有窮自動機接受的集合,則存在乙個接受l的確定的有窮自動機。這裡不對定理進行證明,只介紹一種演算法,將nfa轉換成接受同樣語言的dfa,這種演算法稱為子集法。寶閥為乙個nfa構造相應的dfa的基本想法是讓dfa的每乙個狀態對應nfa的一組狀態。也就是讓dfa使用它的狀態去記錄在nfa讀入乙個輸入符號後可能達到的所有狀態,在讀入輸入符號串a1a2...an,之後,dfa處在那樣乙個狀態,該狀態表示這個nfa的狀態的乙個子集t,t是從nfa的開始狀態沿著某個標記為a1a2...an,的路徑可以到達的那些狀態構成的。

1.設有 nfa m=( , ,f,0, ),其中 f(0,a)=  f(0,b)=  f(1,b)=  f(2,b)=

畫出狀態轉換矩陣,狀態轉換圖,並說明該nfa識別的是什麼樣的語言。ab

語言:(a | b)*abb

2.nfa 確定化為 dfa

1.解決多值對映:子集法

1). 上述練習1的nfaab

abcd

dfa圖:

2). p64頁練習3

dfa狀態轉換矩陣01

abcd

e f   

g    

h     

dfa圖:

2.解決空弧:對初態和所有新狀態求ε-閉包

1). 發給大家的圖2

dfa狀態轉換矩陣01 

2 xε= ε= 

ε= ε=yε

ε=ε= zε 

ε=dfa圖:

語法:(0*11* | 0*)22* 

2).p50圖3.6

dfa狀態轉換矩陣ab

0ε=ε=ε=1 ε

ε=ε=2 ε

ε=ε= 3 ε

ε=ε=4 ε

ε=ε= 

dfa圖:

子集法:

f(q,a)=,狀態集的子集

將看做乙個狀態a,去記錄nfa讀入輸入符號之後可能達到的所有狀態的集合。

步驟:1).根據nfa構造dfa狀態轉換矩陣

①確定dfa的字母表,初態(nfa的所有初態集)

②從初態出發,經字母表到達的狀態集看成乙個新狀態

③將新狀態新增到dfa狀態集

④重複23步驟,直到沒有新的dfa狀態

2).畫出dfa

3).看nfa和dfa識別的符號串是否一致。

非確定的自動機NFA確定化為DFA

1.設有 nfa m f,0,其中 f 0,a f 0,b f 1,b f 2,b 畫出狀態轉換矩陣,狀態轉換圖,並說明該nfa識別的是什麼樣的語言ab 00,101 2233 語言 a b abb 轉換圖 2.nfa 確定化為 dfa 1.解決多值對映 子集法 1 上述練習1的nfaab 0012...

非確定的自動機NFA確定化為DFA

nfa 確定化為 dfa 子集法 f q,a 狀態集的子集 將看做乙個狀態a,去記錄nfa讀入輸入符號之後可能達到的所有狀態的集合。步驟 1.根據nfa構造dfa狀態轉換矩陣 確定dfa初態 nfa的所有初態集 字母表 從初態出發,經字母表到達的狀態集看成乙個新狀態 將新狀態新增到dfa狀態集 重複...

非確定的自動機NFA確定化為DFA

nfa 確定化為 dfa 子集法 f q,a 狀態集的子集 將看做乙個狀態a,去記錄nfa讀入輸入符號之後可能達到的所有狀態的集合。步驟 1.根據nfa構造dfa狀態轉換矩陣 確定dfa初態 nfa的所有初態集 字母表 從初態出發,經字母表到達的狀態集看成乙個新狀態 將新狀態新增到dfa狀態集 重複...