Você está na página 1de 11

UNIVERSIDAD NACIONAL DE EDUCACIN A DISTANCIA Escuela Tcnica Superior de Ingeniera Informtica Procesadores de Lenguajes

Tema 4
Anlisis Sintctico Ascendente

Javier Vlez Reyes jvelez@lsi.uned.es

Javier Vlez Reyes jvelez@lsi.uned.es

Objetivos del Tema


Entender la estrategia de reduccin-desplazamiento Presentar las gramticas LR Entender la arquitectura de un analizador LR Entender el algoritmo de anlisis LR Aprender a construir analizadores LR Presentar una clasificacin general de gramticas

Javier Vlez Reyes jvelez@lsi.uned.es

ndice General
Introduccin Anlisis ascendente reduccin - desplazamiento Analizador ascendente SLR Clasificacin de gramticas

Javier Vlez Reyes jvelez@lsi.uned.es

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

id + id <- E + id <- E + E <- E

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

Javier Vlez Reyes jvelez@lsi.uned.es

ndice General
Introduccin Anlisis ascendente reduccin desplazamiento
Tipos de gramticas Analizadores por reduccin desplazamiento Algoritmo de anlisis

Analizador ascendente SLR Clasificacin de gramticas

Javier Vlez Reyes jvelez@lsi.uned.es

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

Javier Vlez Reyes jvelez@lsi.uned.es

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

El algoritmo de anlisis es comn


id + id * id $

0 Pila de estados

Tabla (gramtica)

Javier Vlez Reyes jvelez@lsi.uned.es

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.

Una funcin IrA(si, A) = sj


id + id * id $ T {$} Desplazar j Reducir k Aceptar Error N

0 Pila de estados

Estados

Tabla (gramtica)

Estados

Javier Vlez Reyes jvelez@lsi.uned.es

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

Javier Vlez Reyes jvelez@lsi.uned.es

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

Javier Vlez Reyes jvelez@lsi.uned.es

Analizador sintctico SLR


Trminos comunes
Elemento. Una regla de produccin que incorpora en alguna posicin de su parte derecha un punto
B := a A A := B := . a A B := a . A B := a A . A := .

Prefijo viable. La parte situada a la izquierda del punto de algn elemento


Prefijo viable S := B A . end

Javier Vlez Reyes jvelez@lsi.uned.es

Analizador sintctico SLR


Funciones comunes
Clausura (I)
Clausura (I) = I A := . B Clausura (I) ^ BN^ B := 1 | 2 | | n ENTONCES Clausura (I) = Clausura (I) {B := . i} i = 1..n Repetir esta regla hasta que no se pueda aumentar I SI

IrA (s, A)
FOR todos los elementos B := . A I DO IrA (s, A) = IrA (s, A) Clausura({B := A. })

Javier Vlez Reyes jvelez@lsi.uned.es

Analizador sintctico SLR


Coleccin Cannica del conjunto de elementos
Coleccin de todos los conjuntos de elementos C = { I0, I1, }

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.

Javier Vlez Reyes jvelez@lsi.uned.es

Analizador sintctico SLR


Autmatas reconocedores de prefijos viables
Los estados Sj del autmata son los conjuntos Ij de C Las transiciones son los smbolos N T {$}

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

Javier Vlez Reyes jvelez@lsi.uned.es

Analizador sintctico SLR


Construccin de tablas SLR
Obtener C = {I0, I1, , In} Cada Ij C se corresponde con el estado j del analizador Construir la tabla IrA [s, A] Si IrA (Ii, A) = Ij Entonces IrA [i, A] = j Construir la tabla Accin [s, A] Para todo A := . a Ii existe Ij / irA (Ii, a) = Ij hacer Accin [i,a] = dj Para todo A := . o A := . Ii hacer Calcular SIG (A) Para todo a SIG (A) hacer Accin [i, a] = rk (k = nmero de regla) Si S := S. Ii Accin [i, $] = Aceptar Todas las dems entradas de Accin [k, s] = error

Javier Vlez Reyes jvelez@lsi.uned.es

Analizador sintctico SLR


Construccin de tablas SLR a partir del autmata
Las transiciones de Si a Sj etiquetas con A hacen IrA [i, A] = j Las transiciones de Si a Sj etiquetas con a hacen Accin [i, a] = j Las reducciones se calculan como antes solo que se usan los estados del autmata

Javier Vlez Reyes jvelez@lsi.uned.es

Analizador sintctico SLR


Conflictos en las tablas SLR
Existen mltiples entradas para la entrada accin

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

Javier Vlez Reyes jvelez@lsi.uned.es

Analizador sintctico SLR


Conflictos en las tablas SLR
Existen mltiples entradas para la entrada accin

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

Ij = {A := . , B := .} SIG (A) SIG (B)

Javier Vlez Reyes jvelez@lsi.uned.es

Analizador sintctico SLR


Errores en analizadores SLR
Cada celda vaca de la tabla de accin es un error

Reduccin de mensajes de error


En las casillas de error de los estados que reduzca siempre por la misma regla forzar la reduccin. El error se propaga hasta el siguiente desplazamiento. Expresar un mensaje de error por cada estado a partir de las acciones correctas de dicho estado.

Recuperacin
Eliminar el menor nmero posible de la entrada antes de reanudar el anlisis Pasar a un estado consistente

Javier Vlez Reyes jvelez@lsi.uned.es

ndice General
Introduccin Anlisis ascendente reduccin - desplazamiento Analizador ascendente SLR Clasificacin de gramticas

Javier Vlez Reyes jvelez@lsi.uned.es

Clasificacin de gramticas
Gramticas Independientes de contexto LR (k) LR (1) LALR LR(0) SLR LL (1) Lenguajes No Deterministas

LL (k)

Javier Vlez Reyes jvelez@lsi.uned.es

Bibliografa
[AJO] AHO, SETHI, ULLMAN: Compiladores: Principios, tcnicas y herramientas,: Addison-Wesley Iberoamericana, 1990

[GARRIDO]

A. Garrido, J. Iesta, F. Moreno y J. Prez. 2002. Diseo de compiladores. Universidad de Alicante.

Você também pode gostar