Escolar Documentos
Profissional Documentos
Cultura Documentos
Tema 4
Anlisis Sintctico Ascendente
ndice General
Introduccin Anlisis ascendente reduccin - desplazamiento Analizador ascendente SLR Clasificacin de gramticas
Introduccin
Anlisis sintctico ascendente
Parte de la cadena de entrada para construir la inversa de una derivacin por la derecha. Genera el rbol de anlisis sintctico partiendo de las hojas hasta alcanzar el axioma
R1. E := E + E R2. E := id id + id r2 r2 r1
Cuando puede reducirse por una parte izquierda lo que parece ser la parte derecha de una regla?
Puede haber partes derechas comunes Puede haber producciones
ndice General
Introduccin Anlisis ascendente reduccin desplazamiento
Tipos de gramticas Analizadores por reduccin desplazamiento Algoritmo de anlisis
Tipos de gramticas
Gramticas LR
Conjunto ms amplio de gramticas que LL(1) Expresin ms sencillas
Tipos de gramticas
LR(1) LALR SLR Analizadores LR(1) Analizadores LALR Analizadores SLR
SLR LALR (1) LR (1)
Condiciones SLR
Se comprueban al construir el analizador
Anlizadores reduccin-desplazamiento
Anlizadores por reduccin desplazamiento
Los analizadores son tabulares Se diferencian por el algoritmo de construccin de la tabla
Analizador LR Analizador LALR Analizador SLR
0 Pila de estados
Tabla (gramtica)
Anlizadores reduccin-desplazamiento
Utiliza una tabla para decidir
Un estado de pila por fila Una funcin Accin (s, a) = dj | rk
dj. Desplazar al siguiente token y apilar el estado j rk. Reducir por regla k.
0 Pila de estados
Estados
Tabla (gramtica)
Estados
Algoritmo de anlisis
Algoritmo de anlisis
push (0) a := token(); REPEAT Sea s el estado en el tope de la pila IF Accin [s, a] = dj push (j) a := token (); ELSEIF Accin [s,a] = rk FOR i := 1 TO Longitud (Parte derecha de k) pop (); p = cima (); Sea A parte izquierda de k push (irA [p, A]) ELSEIF Accin [s,a] = aceptar Terminar con xito ELSE error UNTIL true
ndice General
Introduccin Anlisis ascendente reduccin - desplazamiento Analizador ascendente SLR
Trminos comunes Funciones comunes Coleccin Cannica del conjunto de elementos Autmatas reconocedores de prefijos viables Construccin de tablas SLR Conflictos en las tablas SLR Errores en analizadores SLR
Clasificacin de gramticas
IrA (s, A)
FOR todos los elementos B := . A I DO IrA (s, A) = IrA (s, A) Clausura({B := A. })
Construccin
Ampliar la gramtica con S := S C = Clausura ({S := .S}) = I0 Para cada conjunto Ii C y para cada A {T N} para el que exista en Ii un elemento de tipo B := . A C = C IrA (Ii, A) Repetir el paso anterior hasta que C no pueda ampliarse.
Construccin
S0 = Clausura ({S := .S}) REPEAT FOR cada A N T / Existe B := . A Si DO Crear un estado nuevo Sn = IrA (Si, A) (si no existe) Crear una transicin de Si a Sn etiquetada con A En cada iteracin considerar como Si cada Sn nuevo
Causas
La gramtica No es SLR (LRA, LR(1) u otra) La gramtica es ambigua
Tipos
Conflicto reduccin desplazamiento Forzar una eleccin
S := if S S := if S else S S := other Ij = {S := if S. , S := if S . else S} r1 dk
Causas
La gramtica No es SLR (LRA, LR(1) u otra) La gramtica es ambigua
Tipos
Conflicto reduccin - reduccin
S := id A | id B fin B := print A fin | A := other | r3 r2
Recuperacin
Eliminar el menor nmero posible de la entrada antes de reanudar el anlisis Pasar a un estado consistente
ndice General
Introduccin Anlisis ascendente reduccin - desplazamiento Analizador ascendente SLR Clasificacin de gramticas
Clasificacin de gramticas
Gramticas Independientes de contexto LR (k) LR (1) LALR LR(0) SLR LL (1) Lenguajes No Deterministas
LL (k)
Bibliografa
[AJO] AHO, SETHI, ULLMAN: Compiladores: Principios, tcnicas y herramientas,: Addison-Wesley Iberoamericana, 1990
[GARRIDO]