Está en la 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 LR(1) LALR SLR Analizadores LR(1) Analizadores LALR Analizadores SLR

Tipos de gramticas

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 id + id * id $

El algoritmo de anlisis es comn

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. dj. Desplazar al siguiente token y apilar el estado j rk. Reducir por regla k.

Una funcin IrA(si, 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) (0) push a := token(); a := token(); REPEAT REPEAT Seassel elestado estadoen enel eltope topede dela lapila pila Sea IF Accin [s, a] = dj IF Accin [s, a] = dj push(j) (j) push a := token (); a := token (); ELSEIF Accin [s,a] =rk rk ELSEIF Accin [s,a] = FOR i := 1 TO Longitud (Partederecha derechade dek) k) FOR i := 1 TO Longitud (Parte pop (); pop (); p= =cima cima(); (); p Sea A parte izquierdade dekk Sea A parte izquierda push ( irA [p, A] ) push (irA [p, A]) ELSEIFAccin Accin[s,a] [s,a]= =aceptar aceptar ELSEIF Terminar con xito Terminar con xito ELSEerror error ELSE UNTILtrue true UNTIL

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)= =II Clausura SI A:= := ..B B Clausura Clausura(I) (I)^ ^ SI A B N ^ BN^ B:= := 1|| 2|| || n B 1 2 n ENTONCES ENTONCES Clausura(I) (I)= =Clausura Clausura(I) (I) {B {B:= :=.. i}i i= =1..n 1..n Clausura i} Repetir esta regla hasta que no se pueda aumentar Repetir esta regla hasta que no se pueda aumentar II

IrA (s, A)
FORtodos todoslos loselementos elementosB B:= := ..A A IIDO DO FOR IrA (s, A) = IrA (s, A) Clausura({B := A. A. }) }) IrA (s, A) = IrA (s, A) Clausura({B :=

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
Ampliarla lagramtica gramticacon conS S:= :=S S Ampliar C= =Clausura Clausura({S ({S:= :=.S}) .S})= =II0 C
0

Paracada cadaconjunto conjuntoIi IiC Cyypara paracada cadaA A{T {T N} N}para parael el Para que exista en Ii un elemento de tipo B := . A que exista en Ii un elemento de tipo B := . A C= =C C IrA IrA(Ii, (Ii,A) A) C Repetirel elpaso pasoanterior anteriorhasta hastaque queC Cno nopueda puedaampliarse. ampliarse. Repetir

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 Clausura({S ({S:= :=.S}) .S}) S0 REPEAT REPEAT FORcada cadaA AN N T T//Existe ExisteB B:= := ..A A Si SiDO DO FOR Crearun unestado estadonuevo nuevoSn Sn= =IrA IrA(Si, (Si,A) A)(si (sino noexiste) existe) Crear Crearuna unatransicin transicinde deSi Sia aSn Snetiquetada etiquetadacon conA A Crear Encada cadaiteracin iteracinconsiderar considerarcomo comoSi Sicada cadaSn Snnuevo nuevo En

Javier Vlez Reyes jvelez@lsi.uned.es

Analizador sintctico SLR

Construccin de tablas SLR


ObtenerC C= ={I0, {I0,I1, I1,, ,In} In} Obtener CadaIj IjC Cse secorresponde correspondecon conel elestado estadojjdel delanalizador analizador Cada Construirla latabla tablaIrA IrA[s, [s,A] A] Construir Si IrA (Ii, A) = Ij EntoncesIrA IrA[i, [i,A] A]= =jj Si IrA (Ii, A) = Ij Entonces Construirla latabla tablaAccin Accin[s, [s,A] A] Construir Para todo A := . a Ii Iiexiste existeIj Ij//irA irA(Ii, (Ii,a) a)= =Ij Ijhacer hacer Para todo A := . a Accin [i,a] = dj Accin [i,a] = dj Paratodo todoA A:= := oA A:= :=.. Ii Iihacer hacer Para ..o Calcular SIG (A) Calcular SIG (A) Paratodo todoa aSIG SIG(A) (A)hacer hacer Para Accin [i, a] = rk(k (k= =nmero nmerode deregla) regla) Accin [i, a] = rk SiS S:= :=S. S. Ii IiAccin Accin[i, [i,$] $]= =Aceptar Aceptar Si Todaslas lasdems demsentradas entradasde deAccin Accin[k, [k,s] s]= =error error Todas

Javier Vlez Reyes jvelez@lsi.uned.es

Analizador sintctico SLR

Construccin de tablas SLR a partir del autmata


Lastransiciones transicionesde deSi Sia aSj Sjetiquetas etiquetascon conA Ahacen hacenIrA IrA[i, [i,A] A]= =j j Las Lastransiciones transicionesde deSi Sia aSj Sjetiquetas etiquetascon cona ahacen hacenAccin Accin[i, [i,a] a]= =j j Las Lasreducciones reduccionesse secalculan calculancomo comoantes antessolo soloque quese seusan usanlos los Las estados del autmata 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 La gramtica No es SLR (LRA, LR(1) u otra) La gramtica es ambigua 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

Tipos

Javier Vlez Reyes jvelez@lsi.uned.es

Analizador sintctico SLR

Conflictos en las tablas SLR

Existen mltiples entradas para la entrada accin La gramtica No es SLR (LRA, LR(1) u otra) La gramtica es ambigua Conflicto reduccin - reduccin
r3 r2

Causas

Tipos

S := id A | id B fin B := print A fin | A := other |

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 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. Eliminar el menor nmero posible de la entrada antes de reanudar el anlisis Pasar a un estado consistente

Reduccin de mensajes de error

Recuperacin

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
GramticasIndependientes Independientesde decontexto contexto Gramticas 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.

También podría gustarte