別の答え:文法は有限数の文字列、つまり6つしか生成できません。
S -> aabbbaab | aabbb | bbaab | bb | abbaab | abb.
これで、これを手作業でチョムスキー標準形に凝縮することができます。
代入することで、生成されたすべての文字列のセットを見つけることができます。あなたの最初のルール:
S -> AB | aB.
A -> aab | lambda.
B -> bbA.
S
最初にルールを分割します。
S -> AB.
S -> aB.
次に、AとBが展開するものに置き換えます。
S -> AB
-> (aab | lambda) bbA
-> (aab | lambda) bb (aab | lambda).
S -> aB
-> abbA
-> abb (aab | lambda).
これらをもう一度展開して、以下を取得します。
S -> aabbbaab.
S -> aabbb.
S -> bbaab.
S -> bb.
S -> abbaab.
S -> abb.
この有限集合をチョムスキー標準形に変更するには、インテリジェントな因数分解を行わずにブルートフォースで行うだけで十分です。まず、2つのターミナルルールを紹介します。
X -> a.
Y -> b.
ここで、各文字列について、最初の文字を終端変数で消費し、残りの文字を新しい変数で消費します。たとえば、次のようになります。
S -> aabbb. (initial rule, not in Chomsky Normal Form)
S -> XC, where X->a and C->abbb.
C -> XD, where X->a and D->bbb.
D -> YE, where Y->b and E->bb.
E -> YY, where Y->b and Y->b.
6つの文字列すべてに対してこのプロセスを実行し、多くの新しい中間変数を生成します。