Ricorsione a sinistra - Linguaggi e traduttori
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.
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
[ 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.
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.