risposta alternativa: La grammatica può produrre solo un numero finito di stringhe, ovvero 6.
S -> aabbbaab | aabbb | bbaab | bb | abbaab | abb.
È ora possibile condensare questo torna a Chomsky Normal Form a mano.
Per la sostituzione, si può trovare l'insieme di tutte le stringhe prodotte. Le regole iniziali:
S -> AB | aB.
A -> aab | lambda.
B -> bbA.
Prima dividere la S
regola:
S -> AB.
S -> aB.
Ora sostituire ciò che A e B espandersi in:
S -> AB
-> (aab | lambda) bbA
-> (aab | lambda) bb (aab | lambda).
S -> aB
-> abbA
-> abb (aab | lambda).
espandere questi di nuovo per ottenere:
S -> aabbbaab.
S -> aabbb.
S -> bbaab.
S -> bb.
S -> abbaab.
S -> abb.
Per modificare questo set finito su Chomsky Normal Form, è sufficiente farlo con la forza bruta senza alcun factoring intelligente. In primo luogo si introducono due regole terminali:
X -> a.
Y -> b.
Ora, per ogni stringa, che consumiamo la prima lettera con una variabile terminale e le restanti lettere con un nuove variabili. Ad esempio, in questo modo:
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.
Abbiamo appena passare attraverso questo processo per tutte le 6 corde, generando un sacco di nuove variabili intermedie.
La prima cosa da controllare è, hai letto [Wikipedia] (http://en.wikipedia.org/wi ki/Chomsky_normal_form)? – Nayuki
Richiesta di chiarimento: che cos'è lambda? È un simbolo terminale? – Nayuki
sì, perché? Non ho idea di cosa stia dicendo l'ultima regola. Lambda è l'Epsilon in wikipedia, va al numero zero – tehman