1. Instituto Tecnol´ogico de Costa Rica
Ingenier´ıa en Computadores
Ver´onica Mora Lezcano
Lenguajes, compiladores e int´erpretes
Operaci´on primero y siguiente
• Primero (α): devuelve el conjunto de terminales que inician con las cadenas derivadas de α.
• Siguiente (α): devuelven el conjunto de terminales que pueden aparecen inmediatamente de la
derecha de α.
Ejemplo:
Suponga la gram´atica:
INICIO → jBGn
B → zf | h
G → o | ε
Primero (INICIO) = { j }
Primero (B) = { z, h }
Primero (G) = { o, ε }
Siguiente (INICIO) = { $ }
Siguiente (B) = { o, ε, n }
Siguiente (G) = { n }
Construcci´on de la TASP
Entrada: Una gram´atica G
Salida: La tabla de an´alisis sint´actico M
Para cada regla X → α de G
• Para terminal t de PRIMERO (α)
A˜nadir X → α a M[X, t]
• Si ε ∈ PRIMERO (α)
A˜nadir X → α a M[X, b], ∀ b ∈ SIGUIENTE (x)
Si ε ∈ PRIMERO (α) y ∈ SIGUIENTE (X)
A˜nadir X → α a M[X, $]
• Poner error en todas las entradas no definidas de M
An´alisis Ascendente por tablas (¿C´omo construir la tabla?)
Cerradura(E)= {E → .TE´’
T → .FT´’
F → .(E)
F → .id}
Ir A( I, X ) es la cerradura A → αX.β donde I es el conjunto { A → αX.β }
1
2. Ir A(E,() = { F → (.E)
E → .TE´’
T → .FT´’
F → .(E)
F → .id}
Gram´atica:
E → TE´’
E’ → +TE´’ | ε
T → FT´’
T’ → *FT´’ | ε
F → (E) | id
Reglas de Desplazar y Reducir
Conflictos
Shift-Reduce: Existe un problema entre saber si se debe hacer shift o reduce.
Por ejemplo:
CONDICION → if (EXP) SENTENCIA | if (EXP) SENTENCIA SENTENCIA
SENTENCIA → SENTENCIA print (id) | print (id)
Reduce-Reduce: Existe un problema porque no se sabe por cual producci´on se debe hacer reduce.
Expr → Expr Op Expr
Expr → Expr - Expr
Expr → (Expr)
Expr → Expr -
Expr → num
Op → -
2