Da linguaggio a grammatica context-free
Qual'è la grammatica libera dal contesto che genera il linguaggio ${a^i b^(3j) a^i | i, j \geq 0}$?
Secondo me è questa qui:
$S -> \epsilon | B | aAa$
$A -> aAa | \epsilon | B$
$B -> \epsilon | b b b B$
mentre nelle soluzioni c'è scritto:
$S -> aSa | B$
$B -> b b b B | \epsilon$
Però questa seconda grammatica non può generare la stringa: $\epsilon$ che invece è consentita dal linguaggio. Mi sbaglio?
Grazie
Secondo me è questa qui:
$S -> \epsilon | B | aAa$
$A -> aAa | \epsilon | B$
$B -> \epsilon | b b b B$
mentre nelle soluzioni c'è scritto:
$S -> aSa | B$
$B -> b b b B | \epsilon$
Però questa seconda grammatica non può generare la stringa: $\epsilon$ che invece è consentita dal linguaggio. Mi sbaglio?
Grazie
Risposte
Ciao vfldj 
Premetto che talvolta la soluzione riportata nei testi non è detto che sia l'unica possibile. Può capitare infatti che magari si scriva una grammatica un po' più complessa di quella riportata che però, se opportunamente semplificata, è del tutto equivalente a quella delle soluzioni.
Detto questo la grammatica proposta nelle soluzioni può generare la stringa vuota ($\epsilon$) mediante la riduzione seguente: $S \rightarrow B \rightarrow \epsilon$.
La tua grammatica mi sembra corretta comunque. Io ti posso dire soltanto che la semplificherei. Ti dirò, sinceramente non mi piace l'approccio come quello adottato nella soluzione del testo che fa la ricorsione sul simbolo iniziale $S$ (almeno io tendenzialmente cerco di evitare di usarlo). Se vuoi ti scrivo di seguito una versione semplificata della tua grammatica:
\[
S \rightarrow A | B\\
A \rightarrow aAa | B \\
B \rightarrow \epsilon | bbbB
\]

Premetto che talvolta la soluzione riportata nei testi non è detto che sia l'unica possibile. Può capitare infatti che magari si scriva una grammatica un po' più complessa di quella riportata che però, se opportunamente semplificata, è del tutto equivalente a quella delle soluzioni.
Detto questo la grammatica proposta nelle soluzioni può generare la stringa vuota ($\epsilon$) mediante la riduzione seguente: $S \rightarrow B \rightarrow \epsilon$.
La tua grammatica mi sembra corretta comunque. Io ti posso dire soltanto che la semplificherei. Ti dirò, sinceramente non mi piace l'approccio come quello adottato nella soluzione del testo che fa la ricorsione sul simbolo iniziale $S$ (almeno io tendenzialmente cerco di evitare di usarlo). Se vuoi ti scrivo di seguito una versione semplificata della tua grammatica:
\[
S \rightarrow A | B\\
A \rightarrow aAa | B \\
B \rightarrow \epsilon | bbbB
\]