Da linguaggio a grammatica context-free

noipo
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

Risposte
onlyReferee
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
\]

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.