Salvador Snchez, Daniel Rodrguez Departamento de Ciencias de la Computacin Universidad de Alcal Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Resumen Anlisis sintctico ascendente Analizadores ascendentes LR: LR(0) Analizador SLR(1) Analizador LALR(1) Recuperacin de errores Generadores automticos de analizadores sintcticos Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Recordatorio: tipos de analizador Analizadores sintcticos descendentes (Top-down) Construyen el rbol sintctico de la raz (arriba) a las hojas (abajo). Parten del smbolo inicial de la gramtica (axioma) y van expandiendo producciones hasta llegar a la cadena de entrada. Analizadores sintcticos ascendentes (Bottom-up) Construyen el rbol sintctico comenzando por las hojas. Parten de los terminales de la entrada y mediante reducciones llegan hasta el smbolo inicial. En ambos casos se examina la entrada de izquierda a derecha, tomando los smbolos de uno en uno. Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Analizadores sintcticos ascendentes Comprueban si una cadena de smbolos pertenece a un lenguaje aplicando reducciones sobre la entrada hasta alcanzar el axioma de la gramtica. En general son ms potentes que los mtodos descendentes. Pueden manejar gramticas recursivas a izquierdas. Los algoritmos de implementacin son ms complejos que los de los mtodos ascendentes. La implementacin a mano de estos algoritmos es demasiado compleja por lo que generalmente se utilizan generadores automticos. LL(1) LR(1) G. Libres de Contexto Gramticas Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Analizador ascendente: funcionamiento Busca aquellas subcadenas de la entrada que sean la parte derecha de una produccin y las sustituye por la parte izquierda correspondiente. S aAcBe AAb|b Bd Problema: varias subcadenas que coinciden en una parte derecha. No es lo mismo sustituir una u otra: una podra llevar al xito y la otra no abbcde aAbcde aAcde aAcBe S ( XITO ) Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Implementacin Dos formas de implementar los analizadores sintcticos ascendentes: Analizadores con retroceso: Prueban todas las posibilidades con un algoritmo de backtracking. Fciles de implementar. Los mismos defectos que el analizador descendente equivalente. Analizadores predictivos: Utilizan informacin de la cadena de entrada para predecir qu subcadena lleva al xito. Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Analizadores ascendentes predictivos LR(k) Leen la entrada de izquierda a derecha (Left to rigth) Aplican derivaciones por la derecha para cada entrada (Right) Utilizan k componentes lxicos de bsqueda hacia adelante. SLR(1) LR(1) Sencillo. Mejora el LR(1) pero hace uso de la bsqueda hacia delante. LALR(1) Look Ahead LR(1): Anlisis sintctico de bsqueda hacia adelante Ms potente que SLR(1) y ms sencillo que LR(1). Es un compromiso entre SLR(1) y LR(1) Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Analizadores ascendentes predictivos Se puede generar un analizador sintctico ascendente predictivo para prcticamente todas las gramticas de libre contexto. Inconveniente: requieren mucho ms trabajo de implementacin que los analizadores descendentes. Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca La pila en los analizadores predictivos Un analizador ascendente utiliza una pila similar a la utilizada por el analizador LL(1), que incluye: Smbolos terminales y no terminales Informacin de estado Estado de la pila: Al comenzar el anlisis la pila est vaca. Al final de un anlisis con xito contiene el smbolo inicial. Dos posibles acciones adems de xito: Desplazar: pasa un terminal de la entrada a la cima de la pila Reducir: sustituye una cadena en la pila por un no-terminal Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Ejemplo de uso de la pila S A A Aab | b XITO $ $S reducir SA $ $A reducir AAab $ $Aab desplazar b$ $Aa desplazar ab$ $A reducir Ab ab$ $b desplazar bab$ $ Accin Entrada Pila Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca La pila en los analizadores predictivos Anlisis del ejemplo anterior: Con un mismo valor en la pila $A se han realizado acciones diferentes: desplazar reducir SA El analizador desplaza terminales hasta que es posible aplicar una reduccin, pero esto no implica retrocesos. Algunas reducciones obligan a mirar no slo la cima de la pila, sino ms elementos: reducir AAab Conclusiones: Es necesaria una tabla de anlisis que permita hacer predicciones Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Anlisis sintctico LR(0) Elemento LR(0): Regla de produccin con una posicin distinguida por un punto en su lado derecho: S A.ab Un elemento registra un paso intermedio en el reconocimiento del lado derecho de una regla. A.xy (elemento LR(0) inicial) A xy (regla) Ax.y (elemento) Axy. (elemento LR(0) final) Elementos iniciales: Los que tienen la forma A.XY Elementos completos o finales: Los que tienen la forma AXY. Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Anlisis sintctico LR(0) Los elementos LR(0) se pueden emplear como estados de un autmata finito que mantienen informacin sobre: La pila de anlisis sintctico. El progreso del anlisis. Construccin del autmata finito no determinista: Para todo elemento AB.CD con BCD terminales o no-terminales, existe una transicin para el smbolo C: Para todo C no-terminal en una produccin AB.CD, para toda regla con C en la parte izquierda (C.XY) habr una transicin: AB.CD ABC.D C AB.CD C.XY
Procesadores de lenguaje Tema Anlisis sintctico (Parte II)
Salvador Snchez Alonso, Daniel Rodrguez Garca Anlisis sintctico LR(0) Estado inicial: En este estado la pila est vaca y falta por reconocer un estado S En principio cualquier elemento inicial S.X podra servir Si hay ms de uno cul elegir? SOLUCION: Ampliar la gramtica con una produccin SS Estado final: El autmata no tiene estados especficos de aceptacin El propsito del autmata es el seguimiento del anlisis, no el reconocimiento directo de las cadenas de entrada El autmata, por tanto, tiene informacin acerca de la aceptacin pero no estados de aceptacin El analizador LR(0) trabaja con una gramtica aumentada. Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Anlisis sintctico LR(0) Para una gramtica como: S(S)S | Tenemos los siguientes elementos: S.S SS. S.(S)S S(.S)S S(S.)S S(S).S S(S)S. S. Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Anlisis sintctico LR(0) El autmata finito no determinista es: Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Anlisis sintctico LR(0) Para una gramtica como: EE+n | n Tenemos los siguientes elementos: E.E EE. E.E+n EE.+n EE+.n EE+n. E.n En. Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Anlisis sintctico LR(0) El autmata finito no determinista es: Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Anlisis sintctico LR(0) Es posible construir un autmata finito determinista a partir del autmata no determinista mediante la cerradura de cada estado nuclear. Elementos de ncleo: los que se agregan a un estado tras una transicin que no es vaca (transicin no ). Elementos de cerradura: los que se agregan a un estado tras una transicin vaca (transicin ). Para cada estado nuclear (slo hay ncleo) se calcula la cerradura: Para todos aquellos elementos que tengan un no terminal a la derecha del punto, a ese no terminal le llamaremos smbolo de cerradura. Se aaden al conjunto cerradura y por tanto al estado todas los elementos LR(0) iniciales correspondientes al smbolo de cerradura. Por tanto, si aadimos A XY lo que se aade es el elemento: A .XY Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Anlisis sintctico LR(0) Algoritmo de construccin del autmata: 1. Se construye el ncleo del estado inicial con S.S 2. Para cada ncleo nuevo: a. Se hace la cerradura del ncleo b. Se repite la cerradura para los nuevos elementos aadidos hasta que no se aadan nuevos elementos al estado y se considera que el estado est completo. 3. Para cada estado completo n: a. Se crean nuevos ncleos de estados a partir de n mediante las transiciones no . (Las transiciones ya no se realizan porque estn representadas por la cerradura). a. Si el ncleo creado ya existe en otro estado no se aade y la transicin se dirige al estado existente. b. Se realizan las acciones descritas en el punto 2 c. Se realiza 3 hasta que no se puedan aadir nuevos estados al autmata. Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Anlisis sintctico LR(0) En el primer ejemplo anterior: Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Anlisis sintctico LR(0) En el segundo ejemplo anterior: Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Anlisis sintctico LR(0) Se puede generar la tabla de anlisis sintctico a partir del autmata finito determinista. Estados del autmata LR(0): De desplazamiento (sin elementos completos) De reduccin (un elemento completo) Las filas de la tabla se etiquetan con los estados. En cuanto a las columnas, 2 bloques: Parte de Entrada (una por terminal) se indican acciones de desplazamiento, reduccin o aceptacin Parte Ir_a con transiciones de no-terminales indican transiciones entre estados. Las entradas vacas de la tabla representan errores. Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Anlisis sintctico LR(0) AA A(A) | a Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Anlisis sintctico LR(0) AA A(A) | a Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Anlisis sintctico LR(0) Ejemplo anlisis: Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Conflictos en LR(0) Si un estado contiene un elemento completo (A.) : Si adems tiene un elemento no completo se produce un conflicto de reduccin por desplazamiento. Si adems contiene otros elementos completos (B.) hay un conflicto de reduccin- reduccin. Una gramtica es LR(0) si y slo si cada estado es un estado de desplazamiento (contiene nicamente elementos de desplazamiento) o un estado de reduccin (contiene nicamente un elemento completo). Es decir, en LR(0) no puede haber estados mixtos. Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Anlisis sintctico SLR(1) Anlisis sintctico LR(1) simple o SLR(1). Capaz de analizar prcticamente todas las construcciones que se presentan en un lenguaje No obstante, hay situaciones en las que no sirve y por tanto no es analizable. Un estado puede tener tanto reducciones como desplazamientos. Utiliza el autmata finito determinista del LR(0) con mayor potencia, empleando el token siguiente en la entrada para guiar sus acciones: Consulta el token de entrada antes de cada desplazamiento para asegurar que existe una transicin adecuada Utiliza el conjunto siguiente de un no terminal para decidir si se debera realizar una reduccin o no. Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Anlisis sintctico SLR(1) Construccin de la Tabla de Anlisis: Construir la tabla LR(0) teniendo en cuenta que un estado puede ahora tener desplazamientos y reducciones No son necesarias las columnas accin y regla El smbolo $ es un smbolo vlido de lectura adelantada, luego debe formar parte de las entradas. Poner en cada entrada de la tabla una etiqueta R o D Si es una reduccin con la forma AXYZ. , incluir la regla gramatical AXYZ para todas las entradas en el Siguiente (A) En un estado que contiene el elemento SS. hay que poner aceptacin cuando la entrada sea $ Si es un desplazamiento, poner el estado al que transita Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Anlisis sintctico SLR(1) Construccin de la tabla de anlisis para el siguiente autmata: Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Anlisis sintctico SLR(1) R: EE+n R: En Aceptar $ Ir a 1 E 4 3 2 1 0 R: EE+n D-4 R: En D-3 D-2 n + Siguiente(E) = { $ } Siguiente(E) = { + , $ } Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Anlisis de una entrada SLR(1) Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Anlisis sintctico SLR(1) Algoritmo SLR(1) para el estado actual E: Si E contiene un elemento de la forma A.X (X es un terminal) y X es el siguiente token de la entrada: Desplazar X a la pila El siguiente estado es AX. Si E contiene un elemento completo A. y el token siguiente de la entrada est en Siguiente(A): Reducir por la regla A El nuevo estado se calcula eliminando de la pila y todos sus estados Retroceder al estado donde comenz la construccin de Una reduccin por la regla SS con entrada=$ implica aceptacin. Si el siguiente token de la entrada no permite aplicar ninguna de las reglas anteriores, error sintctico. Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Anlisis sintctico SLR(1) Una gramtica es SLR(1) si y slo si: 1. Para cualquier elemento A.X en un estado E con un terminal X no hay elemento completo B. en E con X en Siguiente(B) 2. Para cualesquiera dos elementos completos A y B en un estado E, Siguiente(A) Siguiente(B) = Conflictos: Reduccin por desplazamiento: si se viola la regla 1. Reduccin-reduccin: si se viola la regla 2. No obstante, SLR(1) permite postponer la decisin hasta el ltimo momento: mayor potencia. Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Anlisis sintctico SLR(1) Los conflictos en SLR(1) pueden eliminarse mediante reglas de eliminacin de la ambigedad: Reduccin por desplazamiento: preferir el desplazamiento. Reduccin-reduccin: generalmente indican un error en el diseo de la gramtica, aunque no siempre. Preferir el desplazamiento en un conflicto D-R selecciona automticamente la regla de anidamiento ms cercana en sentencias if..then..else. sentencia sentencia_if | otro sentencia_if if (expresion) sentencia | if (expresion) sentencia else sentencia expresin true | false Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Anlisis sintctico SLR(1) Simplificada y aumentada: S S S I | otro I if (E) S | if (E) S else S E true | false Eliminando la condicin obtenemos una gramtica igualmente ambigua: S S S I | otro I if S | if S else S Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Anlisis sintctico SLR(1) Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Anlisis sintctico SLR(1) Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Anlisis sintctico LALR(1) Look Ahead LR: mtodo ms utilizado, especialmente por los generadores automticos como CUP o Yacc. SLR(1): aplica las bsquedas hacia delante despus de construir el autmata de elementos LR(0) Mismo autmata que LR(0), slo cambia la construccin de la tabla. El autmata ignora la bsqueda hacia delante. La capacidad de los mtodos LR(k) radica en la construccin de un autmata que integra las bsquedas hacia delante. Se utilizan nuevos elementos, denominados LR(1). Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Anlisis sintctico LALR(1) Cada elemento LR(1) incluye un token de bsqueda hacia delante: [A., a] En las transiciones entre estados tambin se tiene en cuenta la bsqueda hacia delante. Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Anlisis sintctico LALR(1) Transiciones no (entre estados) : Idnticas a las del autmata LR(0) Dado un elemento [A.X, a], donde X es cualquier smbolo, existe una transicin con X al elemento [AX., a] Estas transiciones no provocan la aparicin de nuevas bsquedas hacia delante, pues a aparece en ambos elementos. Transiciones (se hace la cerradura) segn (dentro del estado): Dado un elemento [A.B, a], donde B es un no terminal, se aade al estado elementos [B.,b] para cada produccin B y para cada token en Primero(a). Nota: a concatenado con a El elemento [A.B, a] indica que podramos querer reconocer una B pero slo si va seguida de una cadena derivable de a. El smbolo inicial es [S.S,$] Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Anlisis sintctico LALR(1) Gramtica: A(A)|a Estado 0: [ A .A, $ ] [ A .(A), $ ] [ A .a, $ ] Estado 1: (Estado 0 con transicin A) [ A A., $ ] Estado 2: (Estado 0 con transicin ( ) [ A (.A), $ ] [ A .(A), ) ] [ A .a, ) ] Estado 3: (Estado 0 con transicin a) [ A a., $ ] Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Anlisis sintctico LALR(1) Estado 4: (Estado 2 con transicin A) [ A (A.), $ ] Estado 5: (Estado 2 con transicin ( ) [ A (.A), ) ] [ A .(A), ) ] [ A .a, ) ] Estado 6: (Estado 2 con transicin a ) [ A a., ) ] Estado 7: (Estado 4 con transicin )) [ A (A)., $ ] Estado 8: (Estado 5 con transicin A) [ A (A.), ) ] Estado 9: (Estado 8 con transicin ) ) [ A (A)., ) ] Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Anlisis sintctico LALR(1) Autmata: Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Construccin del autmata LALR(1) El algoritmo de construccin del autmata ser: 1. Se construye el ncleo del estado inicial con S.S,$ 2. Para cada ncleo nuevo: a. Se hace la cerradura del ncleo segn lo visto para elementos LR(1). b. Se repite la cerradura para los nuevos elementos aadidos hasta que no se aadan nuevos elementos al estado y se considera que el estado est completo. 3. Para cada estado completo n: a. Se crean nuevos ncleos de estados a partir de n mediante las transiciones no . (Las transiciones ya no se realizan porque son representadas por la cerradura). a. Si el ncleo creado ya existe en otro estado no se aade y la transicin se dirige al estado existente. b. Se vuelve a 2 c. Se realiza 3 hasta que no se puedan aadir nuevos estados al autmata. Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Anlisis sintctico LALR(1) El anlisis LALR(1) se basa en que el tamao del autmata LR(1) puede simplificarse unificando todos los estados con igual ncleo para los que existen varios elementos de bsqueda hacia delante. Primer principio del anlisis LALR(1) : El ncleo de un estado del autmata de elementos LR(1) es un estado del autmata de elementos LR(0) Segundo principio del anlisis LALR(1) : Si hay dos estados S1 y S2 del autmata LR(1) con el mismo ncleo y, Si hay una transicin con un smbolo X desde S1 hasta T1, Entonces tambin hay una transicin con un smbolo X desde S2 hasta T2 y T1 y T2 tienen el mismo ncleo. Por tanto se unifican S1 y S2 y T1 y T2. Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Anlisis sintctico LALR(1) Ejemplo: Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Anlisis sintctico LALR(1) El algoritmo de anlisis es similar al SLR(1) pero utilizando los tokens de bsqueda hacia delante en lugar de los conjuntos Siguiente. Para el estado actual E: Si E contiene un elemento de la forma [A.X,a] y X es un terminal y X es el siguiente token de la entrada: Desplazar X a la pila El siguiente estado es [AX. ,a] Si E contiene un elemento completo [A.,a] y el token siguiente de la entrada es a: Reducir por la regla A El nuevo estado se calcula eliminando de la pila y todos sus estados Retroceder al estado donde comenz la construccin de Una reduccin por la regla SE con entrada=$ implica aceptacin. Si el siguiente token de la entrada no permite aplicar ninguna de las reglas anteriores, error sintctico. Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Anlisis sintctico LALR(1) Tabla de anlisis: Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Anlisis sintctico LALR(1) Conflictos: Desplazamiento-reduccin (en un estado): cuando el smbolo de look-ahead del elemento completo es tambin smbolo de transicin. Reduccin-reduccin (en un estado): cuando dos elementos completos tienen el mismo smbolo de look-ahead. Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Resumen de mtodos Una gramtica es LL(1) si y slo si los conjuntos de prediccin de las alternativas de produccin sobre el mismo smbolo son disjuntos. Si tiene recursividad por la izquierda no es LL(1). No obstante, que no sea LL(1) no significa necesariamente que sea recursiva por la izquierda. Gramtica LR(0) - Todos los estados del autmata son bien de reduccin o bien de desplazamiento. Una gramtica es SLR(1) si es posible construir una tabla de anlisis SLR sin entradas mltiples. Gramtica LR(1) No es usada en la prctica debido al gran nmero de estados que produce, sino que se utiliza una gramtica simplificada, LALR(1); ms potente que LR(0) pero menos que LR(1). . Una gramtica es LALR(1) si no incluye conflictos de anlisis. Es la ms importante y la que implementan la mayora de los generadores como CUP, Bison, y Yacc reconocen gramticas LALR(1). Una gramtica ambigua no es LL(1) ni SLR ni LR(1). Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Recuperacin de errores El anlisis sintctico es la fase de compilacin que contempla un mayor nmero de errores Los programadores suelen cometer un mayor nmero de errores sintcticos que de otro tipo. Objetivos principales de todo manejador de errores: Detectar los errores lo antes posible (mensajes de error ms significativos) Informar de los errores con claridad y exactitud. Recuperarse del error sintctico. No retrasar el procesamiento de programas correctos. Los compiladores a la hora de informar del error, muestran la lnea donde se comete el error y un mensaje explicativo del diagnstico. Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Recuperacin de errores Recuperacin en modo pnico: mtodo ms sencillo de recuperacin. Consiste en desechar componentes lxicos de la entrada hasta encontrar uno que permita continuar con el proceso de compilacin. Generalmente estructuras de cierre: punto y coma, end o delimitadores. Intenta aislar la frase que contiene el error, determinando qu cadena derivable de A tiene el error y asumiendo que se ha reconocido un A completo. Es un mtodo muy sencillo, y no puede producir bucles infinitos de recuperacin, pero desecha muchos smbolos de la entrada. Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Recuperacin de errores Recuperacin a nivel de frase: Este mtodo realiza una correccin local de la entrada restante. Sustituye parte de la entrada invlida por otra que permita continuar: = := Este nivel de recuperacin depende de las sustituciones implementadas por el diseador. Puede producir ciclos infinitos de recuperacin Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Recuperacin de errores Recuperacin por producciones de error: mtodo que aade a la gramtica reglas o producciones errneas, permitiendo trabajar en situaciones no locales. Produccin de error: A error Marca un contexto en el que los tokens de error pueden eliminarse hasta que se encuentre uno correcto. Se amplia la gramtica con reglas de error que aparezcan con frecuencia y en cada regla se aplica una recuperacin especifica. Principal mtodo disponible en YACC/CUP para la recuperacin de errores. Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Generadores automticos Un generador automtico de analizadores sintcticos es un programa que toma como entrada la especificacin de un lenguaje y proporciona un procedimiento de anlisis sintctico para el mismo. Histricamente denominados compiladores de compiladores: YACC: Yet another compiler-compiler Implementaciones de dominio pblico (GNU): Bison (C/C++) CUP (Java) Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Generadores automticos Esquema de funcionamiento combinado: Procesadores de lenguaje Tema Anlisis sintctico (Parte II) Salvador Snchez Alonso, Daniel Rodrguez Garca Bibliografa Bsica: Compiladores: principios, tcnicas y herramientas. A.V. Aho, R. Sethi, J.D. Ullman. Addison-Wesley Iberoamerica. 1990. Construccin de compiladores. Principios y prctica. Kenneth C. Louden. Thomson-Paraninfo. 2004. Complementaria: Modern Compiler Implementation in Java, A.W. Appel, Cambridge University Press, NY, ISBN 0-521-58388-8 Introduction to compiling techniques: a first course using ANSI C, LEX and YACC. Bennet. McGraw-Hill International (UK). 1990.