Este documento describe las operaciones primero y siguiente utilizadas para construir una tabla de análisis sintáctico ascendente (TASP). Explica que primero devuelve los terminales que inician cadenas derivadas y siguiente devuelve los terminales que pueden seguir inmediatamente. Luego, detalla el proceso de construcción de la TASP agregando reglas a la tabla basadas en los resultados de primero y siguiente. Finalmente, menciona dos tipos de conflictos que pueden ocurrir: shift-reduce cuando no se sabe si hacer shift o reduce, y reduce-reduce cuando no se sabe
Ingeniería en Sistemas Computacionales
Simulación
Algoritmo lineal
Programa que genera una serie de números pseudoaleatorios por medio del Algoritmo Lineal, al finalizar se aplica el método de ordenamiento Shell Sort para mostrar el conjunto ya ordenado.
Ingeniería en Sistemas Computacionales
Simulación
Algoritmo lineal
Programa que genera una serie de números pseudoaleatorios por medio del Algoritmo Lineal, al finalizar se aplica el método de ordenamiento Shell Sort para mostrar el conjunto ya ordenado.
Profundización y ejemplos sobre análisis sintáctico descendente predictivo, muestra el diagrama de transiciones que puede generarse a partir de la gramática.
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