Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ricorsione sinistra
Y Y x1 | Y x2 | … | Y xn | v1 | v2 | … | vm
Y (v1 | v2 | … | vm)Y’
Y’ (x1 | x2 | … | xn )Y ’ | ε
Fattorizzazione sinistra
La fattorizzazione sinistra serve ad eliminare un eventuale prefisso comune a due parti destre
di regole associate allo stesso simbolo non terminale
A y v | y w,
A yA’
A’ v | w
Insiemi FIRST
- Se y y1 y2… yn con yi ∈ V:
Grammatiche LL(1)
Fattorizzazione:
S → aBbE | b | Db
B → BcA | A
A → dA’
A’ → fA’’ | ε
A’’ → Cg | ε
C → Ch | i | ε
D → Ah | ε
E → Ch | a
S → aBbE | b | Db
B → AB’
B’ → cAB’ | ε
A → dA’
A’ → fA’’ | ε
A’’ → Cg | ε
C → iC’ | C’
C’ → hC’ | ε
D → Ah | ε
E → Ch | a
Insiemi FIRST:
ESERCIZIO 2
Scrivere un parser discendente per il linguaggio definito dalla grammatica le cui produzioni
sono di seguito riportate:
Risoluzione :
La grammatica non è LL(1) a causa dell’ambiguità presente nella cella a sfondo grigio. Nella scrittura
del parser discendente in Java sceglieremo di considerare in corrispondenza di un’ambiguità una sola
regola, in particolare la prima, ottenendo così un parser di un sottoinsieme del linguaggio originario.