UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA Escuela Técnica Superior de Ingeniería Informática Procesadores de Lenguajes Tema 4 Análisis Sintáctico Ascendente Javier Vélez Reyes [email protected] Javier Vélez Reyes [email protected] Objetivos del Tema Entender la estrategia de reducción-desplazamiento Presentar las gramáticas LR Entender la arquitectura de un analizador LR Entender el algoritmo de análisis LR Aprender a construir analizadores LR Presentar una clasificación general de gramáticas 1 Javier Vélez Reyes [email protected] Índice General Introducción Análisis ascendente reducción - desplazamiento Analizador ascendente SLR Clasificación de gramáticas Javier Vélez Reyes [email protected] Introducción Análisis sintáctico ascendente Parte de la cadena de entrada para construir la inversa de una derivación por la derecha. Genera el árbol de análisis sintáctico 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 ε 2 Javier Vélez Reyes [email protected] Índice General Introducción Análisis ascendente reducción – desplazamiento Tipos de gramáticas Analizadores por reducción – desplazamiento Algoritmo de análisis Analizador ascendente SLR Clasificación de gramáticas Javier Vélez Reyes [email protected] Tipos de gramáticas Gramáticas LR Tipos de gramáticas Conjunto más amplio de gramáticas que LL(1) Expresión más sencillas LR(1) LALR SLR Analizadores LR(1) Analizadores LALR Analizadores SLR SLR LALR (1) LR (1) Condiciones SLR Se comprueban al construir el analizador 3 Javier Vélez Reyes [email protected] Análizadores reducción-desplazamiento Análizadores por reducción – desplazamiento Los analizadores son tabulares Se diferencian por el algoritmo de construcción de la tabla Analizador LR Analizador LALR Analizador SLR El algoritmo de análisis es común id + id * id $ 0 Pila de estados Tabla (gramática) Javier Vélez Reyes [email protected] Análizadores reducción-desplazamiento Utiliza una tabla para decidir Un estado de pila por fila Una función Acción (s, a) = dj | rk dj. dj. Desplazar al siguiente token y apilar el estado j rk. Reducir por regla k. Una función IrA(si, IrA(si, A) = sj id + id * id $ 0 Pila de estados Tabla (gramática) Estados T ∪ {$} Desplazar j Reducir k Aceptar Error N Estados 4 Javier Vélez Reyes [email protected] Algoritmo de análisis Algoritmo de análisis push(0) (0) push a := token(); a := token(); REPEAT REPEAT Seasselelestado estadoen eneleltope topede delalapila pila Sea IF Acción [s, a] = dj IF Acción [s, a] = dj push(j) (j) push a := token (); a := token (); ELSEIF Acción [s,a] rk ELSEIF Acción [s,a] ==rk FOR i := 1 TO Longitud (Partederecha derechade dek) k) FOR i := 1 TO Longitud (Parte pop (); pop (); cima(); (); pp==cima Sea A parte izquierdade dekk Sea A parte izquierda push (irA [p, A]) push (irA [p, A]) ELSEIFAcción Acción[s,a] [s,a]==aceptar aceptar ELSEIF Terminar con éxito Terminar con éxito ELSEerror error ELSE UNTILtrue true UNTIL Javier Vélez Reyes [email protected] Índice General Introducción Análisis ascendente reducción - desplazamiento Analizador ascendente SLR Términos comunes Funciones comunes Colección Canónica del conjunto de elementos Autómatas reconocedores de prefijos viables Construcción de tablas SLR Conflictos en las tablas SLR Errores en analizadores SLR Clasificación de gramáticas 5 Javier Vélez Reyes [email protected] Analizador sintáctico SLR Términos comunes Elemento. Una regla de producción que incorpora en alguna posición de su parte derecha un punto B := a A B := . a A B := a . A B := a A . A := ε A := . Prefijo viable. La parte situada a la izquierda del punto de algún elemento Prefijo viable S := B A . end Javier Vélez Reyes [email protected] Analizador sintáctico SLR Funciones comunes Clausura (I) Clausura(I) (I)==II Clausura SI :=αα..Bβ BβєєClausura Clausura(I) (I)^^ SI AA:= BBєєNN^^ :=δ1 δ1||δ2 δ2||… …||δn δn BB:= ENTONCES ENTONCES Clausura(I) (I)==Clausura Clausura(I) (I)∪∪{B {B:= :=..δi} δi}i i==1..n 1..n Clausura Repetiresta estaregla reglahasta hastaque queno nose sepueda puedaaumentar aumentarII Repetir IrA (s, A) FORtodos todoslos loselementos elementosBB:= :=αα..Aβ AβєєIIDO DO FOR IrA (s, A) = IrA (s, A) ∪ Clausura({B :=ααA.β A.β}) }) IrA (s, A) = IrA (s, A) ∪ Clausura({B := 6 Javier Vélez Reyes [email protected] Analizador sintáctico SLR Colección Canónica del conjunto de elementos Colección de todos los conjuntos de elementos C = { I0, I1, …} Construcción Ampliarlalagramática gramáticacon conS’S’:= :=SS Ampliar Clausura({S’ ({S’:= :=.S}) .S})==II0 CC==Clausura 0 Paracada cadaconjunto conjuntoIiIiєєCCyypara paracada cadaAAєє{T {T∪∪N} N}para paraelel Para que exista en Ii un elemento de tipo B := α . Aβ que exista en Ii un elemento de tipo B := α . Aβ IrA(Ii, (Ii,A) A) CC==CC∪∪IrA Repetirelelpaso pasoanterior anteriorhasta hastaque queCCno nopueda puedaampliarse. ampliarse. Repetir Javier Vélez Reyes [email protected] Analizador sintáctico SLR Autómatas reconocedores de prefijos viables Los estados Sj del autómata son los conjuntos Ij de C Las transiciones son los símbolos N ∪ T ∪ {$} Construcción S0==Clausura Clausura({S’ ({S’:= :=.S}) .S}) S0 REPEAT REPEAT FORcada cadaAAєєNN∪∪TT//Existe ExisteBB:= :=αα..Aβ AβєєSiSiDO DO FOR Crear un estado nuevo Sn = IrA (Si, A) (sino noexiste) existe) Crear un estado nuevo Sn = IrA (Si, A) (si Crear una transición de Si a Sn etiquetada con Crear una transición de Si a Sn etiquetada con AA Encada cadaiteración iteraciónconsiderar considerarcomo comoSiSicada cadaSn Snnuevo nuevo En 7 Javier Vélez Reyes [email protected] Analizador sintáctico SLR Construcción de tablas SLR ObtenerCC=={I0, {I0,I1, I1,…, …,In} In} Obtener CadaIjIjєєCCse secorresponde correspondecon conelelestado estadojjdel delanalizador analizador Cada Construirlalatabla tablaIrA IrA[s, [s,A] A] Construir IrA(Ii, (Ii,A) A)==IjIjEntonces EntoncesIrA IrA[i, [i,A] A]==jj SiSiIrA Construirlalatabla tablaAcción Acción[s, [s,A] A] Construir Para todo A := α . aβ existeIjIj//irA irA(Ii, (Ii,a) a)==IjIjhacer hacer Para todo A := α . aβ єєIiIiexiste Acción [i,a] = dj Acción [i,a] = dj Paratodo todoAA:= :=β. β.ooAA:= :=.. єєIiIihacer hacer Para Calcular SIG (A) Calcular SIG (A) Paratodo todoaaєєSIG SIG(A) (A)hacer hacer Para Acción [i, a] = rk(k (k==número númerode deregla) regla) Acción [i, a] = rk :=S. S.ЄЄIiIiAcción Acción[i, [i,$] $]==Aceptar Aceptar SiSiS’S’:= Todaslas lasdemás demásentradas entradasde deAcción Acción[k, [k,s] s]==error error Todas Javier Vélez Reyes [email protected] Analizador sintáctico SLR Construcción de tablas SLR a partir del autómata Lastransiciones transicionesde deSiSiaaSj Sjetiquetas etiquetascon conAAhacen hacenIrA IrA[i, [i,A] A]==jj Las Lastransiciones transicionesde deSiSiaaSj Sjetiquetas etiquetascon conaahacen hacenAcción Acción[i, [i,a] a]==jj Las Lasreducciones reduccionesse secalculan calculancomo comoantes antessolo soloque quese seusan usanlos los Las estados del autómata estados del autómata 8 Javier Vélez Reyes [email protected] Analizador sintáctico SLR Conflictos en las tablas SLR Causas Existen múltiples entradas para la entrada acción La gramática No es SLR (LRA, LR(1) u otra) La gramática es ambigua Tipos Conflicto reducción – desplazamiento Forzar una elección S := if S S := if S else S Ij = {S := if S. , S := if S . else S} r1 dk S := other Javier Vélez Reyes [email protected] Analizador sintáctico SLR Conflictos en las tablas SLR Causas Existen múltiples entradas para la entrada acción La gramática No es SLR (LRA, LR(1) u otra) La gramática es ambigua Tipos Conflicto reducción - reducción S := id A | id B fin r3 r2 B := print A fin | ε Ij = {A := . , B := .} A := other | ε SIG (A) Λ SIG (B) ≠Ф 9 Javier Vélez Reyes [email protected] Analizador sintáctico SLR Errores en analizadores SLR Reducción de mensajes de error Cada celda vacía de la tabla de acción es un error En las casillas de error de los estados que reduzca siempre por la misma regla forzar la reducción. 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. Recuperación Eliminar el menor número posible de la entrada antes de reanudar el análisis Pasar a un estado consistente Javier Vélez Reyes [email protected] Índice General Introducción Análisis ascendente reducción - desplazamiento Analizador ascendente SLR Clasificación de gramáticas 10 Javier Vélez Reyes [email protected] Clasificación de gramáticas GramáticasIndependientes Independientesde decontexto contexto Gramáticas LL (k) LR (k) Lenguajes No Deterministas LR (1) LALR LR(0) LL (1) SLR Javier Vélez Reyes [email protected] Bibliografía [AJO] AHO, SETHI, ULLMAN: Compiladores: Principios, técnicas y herramientas,: Addison-Wesley Iberoamericana, 1990 [GARRIDO] A. Garrido, J. Iñesta, F. Moreno y J. Pérez. 2002. Diseño de compiladores. Universidad de Alicante. 11