私はこの文法を使用してFAを定義する必要があります。CFGをNDPAに変換するルールはありますか?
S -> aSb
S -> c
S -> dA
A -> Sd
は、どのように私は最初のルールと最後の1を管理していますか? もう1つは、別の状態(最終状態)を作成し、Sとこの新しい状態をリンクしなければならないと思います。 3番目の代わりに、私は状態 "A"を作り、それを "d"を渡すことによってSにリンクしなければならないと思う。
私はこの文法を使用してFAを定義する必要があります。CFGをNDPAに変換するルールはありますか?
S -> aSb
S -> c
S -> dA
A -> Sd
は、どのように私は最初のルールと最後の1を管理していますか? もう1つは、別の状態(最終状態)を作成し、Sとこの新しい状態をリンクしなければならないと思います。 3番目の代わりに、私は状態 "A"を作り、それを "d"を渡すことによってSにリンクしなければならないと思う。
CFGからPDAを入手するためのアルゴリズムがあります。例えば、トップダウンとボトムアップのパーサーを調べます。私は、PDAがCFGによって生成された言語を受け入れ、逆もまた同様であるという通常の証拠として考えているのは、そのような構成を使用することです。
代わりに、文法によって生成された言語を理解し、直接そのためのPDAを設計することができます。これは機械的ではありませんが、より簡潔なPDAを生成する可能性があります。あなたはこのルートを移動したい場合は、まず安全にそのための唯一の生産のRHSに置き換えることができ非終端Aを認識することによって文法を簡略化することができます。
S -> aSb
S -> c
S -> dSd // removed A -> Sd and replaced here
はどのようにこの文法は動作しますか?
c
があります。c
の左右に一致するd
があります。a
は、b
の右側にあるc
と一致しています。
a
sおよびd
sはあなたがc
が表示されるまで、次のようA PDAは動作するはずです。スタックのすべてをプッシュします。 c
が表示されたら、次の状態に進みますが、c
は押さないでください。まで、スタックからa
sおよびd
の飛び出る
b
sおよびd
秒、:一番上のスタック記号が入力と一致していません
q s x q' s'
------------------------------
q0 a,d,Z a q0 aa,ad,aZ
q0 a,d,Z d q0 da,dd,dZ
q0 a,d,Z c q1 a,d,Z
q1 a b q1 -
q1 d d q1 -
:
はここ遷移表です。空のスタックを受け入れるか状態を受け入れる場合は、f(q1, Z, -) = (q2, Z)
のような遷移を追加してq2
を受け入れることができます。 PDAは非決定論的にそこに移行し、入力が枯渇しない限りクラッシュするだろう。
あなたの質問のタイトルは、あなたがLLGを持っていることを示していますが、確かにあなたはそうではありません。何を聞いていますか?あなたはその文法の有限オートマトンを作る方法を尋ねていますか?その文法は規則的ではありません。 –
こんにちは、私は最後の規則のために左の線形文法でした。 FAを作成するにはどうしたらいいですか? –
LLGは、_all_ルールが1つだけでなく、左側に1つの非終端記号を持つルールです。この文法でFAを作成することはできません。文法は規則的ではありません(最初の規則のため)。 FAは存在しない。言語が文脈自由なので、あなたはNDPAを作ることができます。この問題はどこで発生しましたか? –