2017-09-17 106 views

回答

0

r *是包含來自r的所有串聯0,1,2,3,4,...字符串的語言。所以對r *而言,明顯的FA就是能夠運行D 0,1,2,3,4,...次的DFA,並在這些運行中的任何一個之後接受。從任何接受狀態到開始狀態的lambda/empty轉換將實現1次或多次運行。產生的自動機不再是確定性的。您可以使用標準方法來確定它。這種構造不會將空字符串添加到自動機的語言中。如果它已經存在於r中,這不是必需的。否則,您需要添加一種接受r *的自動機中空字符串的方法,例如使用新的開始狀態。

在消除空過渡方面有一點經驗,您還可以更簡單地構建DFA。

+1

要小心 - 只要從每個接受狀態向開始狀態添加一個epsilon,就不會*創建一個接受輸入語言的明星的NFA。 (我通常會給出一個例子,說明爲什麼在我的理論課程中,這對我的學生來說是失敗的。) – templatetypedef

+0

謝謝@templatetypedef,我在這裏有點倉促,不記得那個。我希望現在的答案更好。 –

+0

這裏還有一個問題。這是一個可行的結構:添加一個可接受的新開始狀態。添加一個從它到舊開始狀態的epsilon轉換,並將每個舊接受狀態的epsilons添加到新的開始狀態。 – templatetypedef