私たちのプログラミング言語の概念コースでは、最終状態が有限状態図の別の状態につながることは問題ないと私たちの講師は主張しました。
しかし、これは根本的に矛盾した概念のようです。定義により、最終状態は遷移を終了する状態です。つまり、最終状態に到達すると、他に何もする必要がなくなります。
それでも、彼はこのようなスライドを提示しました。最終状態は2つの円で表されています... B、D、E、およびHが明らかにそうでない場合に、最終状態になることができるのはなぜですか。
私たちのプログラミング言語の概念コースでは、最終状態が有限状態図の別の状態につながることは問題ないと私たちの講師は主張しました。
しかし、これは根本的に矛盾した概念のようです。定義により、最終状態は遷移を終了する状態です。つまり、最終状態に到達すると、他に何もする必要がなくなります。
それでも、彼はこのようなスライドを提示しました。最終状態は2つの円で表されています... B、D、E、およびHが明らかにそうでない場合に、最終状態になることができるのはなぜですか。
回答:
生成モデルと「認識」モデルを誤解しているようです。
右側の文法は、ルールを適用し、最初の変数から開始して、変数がなくなった後に停止することにより、単語を生成します。
ただし、オートマタは言語を次のように認識します。オートマトンに1文字ずつ単語を供給し、オートマトンはそれに与えられた文字に基づいて遷移します。
すべての文字を読んだ後、オートマトンが受け入れ可能な(別名final)状態になる場合、オートマトンは単語を受け入れると言います。
したがって、両方の用語が一般的に使用されますが、「最終的な」状態ではなく、「受け入れた」状態としてそれらを考える方が良いです。
定義による最終状態は、遷移を終了する状態です。つまり、いったんそれに到達すると、他に何もすることがなくなります。
混乱の原因は、これが定義ではないということです。「最終状態」は名前の選択としては不十分であり、ほとんどの著者は「受け入れ状態」を好むようです。定義は、オートマトンがその実行が最終/受け入れ状態で終了した場合に受け入れ、そうでない場合は拒否することです。
ご覧のように。与えられた文法はA-> aと言っています。したがって、オートマトンは文字列 "a"で終了することを受け入れます。ただし、A-> aB-> abD-> abcも許可されるため、文字列「abc」も受け入れられます。この時点で弦を完成させると、最終状態になり、弦が受け入れられます。ただし、「ab」という文字列を受け入れることもできます。したがって、{"a"、 "ab"、 "abc"}がすべてオートマトンによって受け入れられることを確認する必要があります。最終状態を入力した場合、それを決して出て行けないような状態として表示しないでください。現在の文字列が受け入れられるかどうかを示す状態として表示します。