2017-12-18 11 views
1

スクリプトでRegExを使ってDFA(確定的有限オートマトン)の状態図を見つけましたが、この図は説明のないサンプルです。そこで私はDFA状態図からRegExを自分で取得しようとしましたが、表現式はab+a+b(a*b)*です。私は元のRegEx (ab+a*)+ab+がどのようにスクリプトに記載されているかわかりません。ここに私の導出:状態図からRegExを引き出す方法は?

enter image description here

私は任意のヘルプ、リンク、参照とヒントのために感謝しています!

+1

後続の図は相互に「単純化」されていることを理解していますか?あなたはどこに踏み込んでいますか? – xtofl

+0

最初のものだけが与えられました、私は最後の3つを作ったので、そうです;)私は最後に詰まっています、 'ab + a + bから'(ab + a *)+ ab + (a * b)* '? – PatrickSteiner

答えて

1

ここで正しく正規表現を導き出しました。 ab+a+b(a*b)*という表現は(ab+a*)+ab+に相当します.DFA状態の消去が完了すると(開始状態から受け入れ状態への1回の遷移があります)、それ以上の派生はありません。しかし、状態を取り除いた順番によって異なる最終的な正規表現を得ることができます。そして、あなたが正しく取り消しを行ったと仮定すると、それらはすべて有効でなければなりません。状態の消去方法は、特定のDFAのすべての同等の正規表現を生成できるとは保証されていないため、元の正規表現に正確に到達していないことは間違いありません。 check the equivalence of two regular expressions hereでもかまいません。

このDFAが元の正規表現(ab+a*)+ab+と同等であることを示す特定の例では、この状態のDFA(上の2番目と3番目のステップの間)をご覧ください。

enter image description here

のは(ab+a*)(ab+a*)*ab+に私たちの表現(ab+a*)+ab+を拡大してみましょう。したがって、DFAでは、最初の(ab+a*)は、状態0から状態2と3の間の途中まで(a*a*a)、私たちを取得します。

次に、次の部分(ab+a*)*は、(ab+a*)の0以上のコピーを持つことが許可されていることを意味します。コピー数が0の場合は、ab+で終了し、a*aの後半から2番目と3番目の間にを入力し、3番目から4番目の遷移にbを入力して、状態4に入ります。我々は自己ループを取って、多くのものをbのものとして読んでもいい。

そうでなければ、我々は再び2 3からa*a遷移及び3~4遷移からb後半からaを読み出し、(ab+a*)の1つの以上のコピーを有しています。 a*は、状態4のa*ab自己ループの前半に由来し、後半abは、正規表現の最終ab+または(ab+a*)の別のコピーのいずれかです。私は、式(ab+a*)+ab+の式に正確に到達する状態除去があるかどうかはわかりませんが、それが価値があるとすれば、このDFAの構造をより明確に把握した正規表現が得られると思います。

関連する問題