Ricorsione a sinistra - Linguaggi e traduttori

Lauke
Ciao ragazzi, scusate per il disturbo, soprattutto perchè è la vigilia, ma vabè mentre v'appanzate tra oggi e domani vi posto qualkosa.
Allora ho la grammatica seguente.

$S \rarr S + S | S S | (S) | S* | a$

Di questa grammatica devo eliminarne la ricorsione a sinistra, le produzioni che presentano la ricorsione a sinistra, sono le prime tra quelle che vi elenco.

$S \rarr S + S | S S | S* | a$
$S \rarr (S) $

Ora per eliminare la ricorsione a sinistra ho fatto...

$S \rarr + S S' | S S' | *S'$
$S' \rarr sS$

Tuttavia se notate la seguente produzione

$S \rarr S S'$

la ricorsione è rimasta, ora mi domando come faccio a eliminarla? La ricorsione immediata si può eliminare se si hanno produzioni della forma.

$A \rarr A \alpha_1 | ... | A \alpha_n | \beta_1 | ... | \beta_m$

ma io non ho produzioni di questa natura mi mancano le $\beta_i$ per intenderci. Per cui come posso eliminare la ricorsione a sinistra in questo caso? So che c'è un algoritmo generale per l'eliminazione della ricorsione a sinistra, ma è inteso generale nel caso di "cicli" cosa che non credo qui vi sia.

Grazie a auguri di un sereno natale a tutti.

Risposte
Rggb1
[ Premessa: ma il simbolo $star$ c'è davvero? ]

Per eliminare la ricorsione a sinistra diretta direi di fare così
$S->(S)S'|aS'$
$S'->S+S'|SS'|star S'|epsilon$

e vediamo se rimane ricorsione sinistra indiretta. Volendo puoi eliminare la epsilon.

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