Professional Documents
Culture Documents
Analizador lxico
Representacin intermedia
Los mtodos empleados generalmente en los compiladores se clasifican como ascendentes y descendentes. Los analizadores sintcticos descendentes construyen rboles desde la raz hasta las hojas, mientras que los analizadores sintcticos ascendentes comienzan en las hojas y suben hacia la raz. En ambos casos examina la entrada al analizador sintctico de izquierda a derecha, uno a la vez. Los mtodos ascendente y descendente ms eficientes trabajan slo con subclases de gramticas, pero varias de estas subclases, como las gramticas LL y LR, son lo suficientemente expresivas para describir la mayora de las construcciones sintcticas de los lenguajes de programacin. NOTA: Se asume que la salida de un analizador sintctico es una representacin del rbol de anlisis sintctico para la cadena de componentes lxicos producida por el analizador lxico.
2. Recuperacin
a nivel de frase. Al descubrirse un error, el analizador sintctico puede realizar una correccin local de la entrada restante; es decir, puede sustituir un prefijo de la entrada restante por alguna cadena que permita continuar el anlisis sintctico. (como sustituir una como por un punto y coma, eliminar un punto y coma sobrante, o insertar uno que falte)
3. Producciones de error. Si se tiene una buena idea de los errores comunes que
pueden encontrarse, se puede aumentar la gramtica del lenguaje con producciones que generen las construcciones errneas. Se usa entonces esta gramtica aumentada con las producciones de error para construir el analizador sintctico. Si el analizador sintctico usa una produccin de error, se pueden generar diagnsticos de error apropiados para indicar la construccin errnea reconocida en la entrada.
4. Correccin
global. Idealmente, sera deseable que un compilador hiciera el mnimo de cambios posibles al procesar una cadena de entrada incorrecta y obtener una correccin global de menor costo (aunque siempre es demasiado costoso en trminos de espacio y tiempo). Se debe sealar que un programa correcto ms parecido al original puede no ser lo que el programador tena en mente.
Convenciones de notacin para una gramtica: 1) Estos smbolos son terminales: a, b, c, +, -, *, (, ), , , 0, 1, .., 9, id 2) Estos smbolos son no terminales: A, B, C, S, expr, op 3) X, Y, Z representan smbolos gramaticales, es decir terminales o no terminales 4) u, v, w, x, y, z representan cadenas de smbolos terminales 5) las letras griegas , representan cadenas de smbolos gramaticales 6) si A , A 2, A n son todas producciones de A, A 1 2 . . n 7) el lado izquierdo de la primera produccin es el smbolo inicial E E A E (E) E Id A+ / DERIVACIONES Hay varias formas de considerar el proceso mediante el cual una gramtica define un lenguaje. La idea central es que se considera una produccin como una regla de reescritura, donde el no terminal de la izquierda es sustituido por la cadena del lado derecho de la produccin: E E + E E * E (E) E Id Por lo que, E == > E E == > (E) (E deriva E derivacin de E a partir de E)
rboles de anlisis sintctico y derivaciones: Un rbol de anlisis sintctico se puede considerar como una representacin grfica de una derivacin que no muestra la eleccin relativa al orden de sustitucin:
Escritura de una gramtica Las gramticas son capaces de describir la mayora, pero no todas, las sintaxis de los lenguajes de programacin: Un analizador lxico efecta una cantidad limitada del analizador sintctico conforme produce la secuencia de componentes lxicos a partir de los caracteres de la entrada. Ciertas limitaciones de la entrada, como el requisito de que los id se declaren antes de ser utilizados, no pueden describirse mediante una gramtica regular. Por lo tanto, las secuencias de componentes lxicos aceptados por un analizador sintctico forman un subconjunto de un lenguaje de programacin; las fases posteriores deben analizar la salida del analizador sintctico para garantizar la obediencia a reglas que el analizador sintctico no comprueba. Expresiones Regulares VS Gramticas de Contexto Libre Toda construccin que se deba describir mediante una expresin regular, tambin se puede describir mediante una GCL, P. ej.: la expresin regular (a b)*abb describe el mismo lenguaje que la GCL: A0 a A0 b A0 a A1 A1 b A2 A2 b A3 A3 Las expresiones regulares son muy tiles para describir la estructura de las construcciones lxicas como identificadores, constantes, nmeros, pal-res, etc Las GCL, por otra parte, son muy tiles para describir estructuras anidadas, como parntesis equilibrados, concordancia de las pal-res como BEGIN-END, los correspondientes IF-THEN-ELSE, etc. Por lo que estas estructuras anidadas no se pueden describir con expresiones regulares. Comprobacin del lenguaje generado por una gramtica
As, un conjunto dado de producciones genera un lenguaje determinado. Las< construcciones problemticas se pueden estudiar escribiendo una gramtica abstracta concisa y estudiando el lenguaje que genera. Una prueba de que una gramtica G genera un lenguaje L tiene 2 partes: se debe demostrar que toda cadena generada por G esta en L, y lo opuesto, que toda cadena de L puede de hecho ser generada por G. Ambigedad Se dice que una gramtica que produce ms de un rbol de anlisis sintctico para alguna cadena es ambigua. Por lo tanto, una gramtica ambigua es la que produce ms de una derivacin por la izquierda o por la derecha para la misma frase (cadena). Para algunos tipos de analizadores sintcticos es preferible que una gramtica no sea ambigua, ya que no se podra determinar de manera exclusiva qu rbol de anlisis sintctico seleccionar para una cadena. Supresin de la ambigedad A veces, una gramtica ambigua se puede rescribir para eliminar la ambigedad. P. eje. Se eliminar la ambigedad de la siguiente gramtica con ELSE ambiguo: Prop IF exp. THEN prop p. ej. IF E1 THEN S1 ELSE IF E2 THEN S2 ELSE S3 IF exp. THEN prop ELSE prop
Uso de gramticas ambiguas: Es un teorema que toda gramtica ambigua no es LR, por lo que no est en ninguna de las clases de gramticas estudiadas. Ciertos tipos de gramticas ambiguas son tiles en la especificacin e implantacin del lenguaje. Para construcciones de lenguajes como las expresiones, una gramtica ambigua proporciona una especificacin ms natural y corta que cualquier gramtica no ambigua equivalente. Otro uso de las gramticas ambiguas est en el aislamiento de construcciones sintcticas habituales para la optimizacin en casos especiales. Con una gramtica ambigua se pueden especificar las construcciones de casos especiales aadiendo cuidadosamente nuevas producciones a la gramtica. Se debe insistir en que, aunque las gramticas utilizadas son ambiguas, en todos los casos se especifican reglas para eliminar ambigedades que permiten slo un rbol de anlisis sintctico para cada cadena o frase. De esta manera, la especificacin total del lenguaje sigue siendo no ambigua. Hay que sealar tambin que las construcciones ambiguas se deben usar raramente y de una manera estrictamente controlada, de lo contrario, no se puede conocer con seguridad el lenguaje que reconoce el analizador.
METODOS DE ANALISIS SINTACTICO (Segunda parte) METODOS DE ANALISIS SINTACTICO DESCENDENTE Introduccin: 1. predictivo (pg 44-47) 2. recursividad por la izquierda (pg 47-48) 3. factorizacin por la izquierda (pg 182-183) Mtodos: 4. por descenso recursivo (pg 186-187) 5. predictivo (pg 187-190) 6. predictivo no recursivo (pg 190-193) 7. Primero y Siguiente (193-200) METODOS DE ANALISIS SINTACTICO ASCENDENTE 1. por desplazamiento y reduccin (incluye mangos y poda pg 200208) 2. por precedencia de operadores (pg 209-221) 3. LR L: por el examen de la entrada de izq a der (left-toright) R: por construir una derivacin por la derecha (pg 221-227)