el analisis sintactico descendente y ascendente

11
El análisis sintáctico descendente (ASD) intenta encontrar entre las producciones de la gramática la derivación por la izquierda del símbolo inicial para una cadena de entrada. (Top-Down-Parser): un analizador puede empezar con el símbolo inicial e intentar transformarlo en la entrada, intuitivamente esto sería ir dividiendo la entrada progresivamente en partes cada vez más pequeñas, de esta forma funcionan los analizadores LL, un ejemplo es el javaCC . • Ejemplo: – analizar la cadena de entrada “cad” dada la gramática siguiente: S c A d

Upload: ulisses-morales

Post on 16-Sep-2015

93 views

Category:

Documents


3 download

DESCRIPTION

compiladores

TRANSCRIPT

El anlisis sintctico descendente (ASD) intenta encontrar entre las producciones de la gramtica la derivacin por la izquierda del smbolo inicial para una cadena de entrada. (Top-Down-Parser): un analizador puede empezar con el smbolo inicial e intentar transformarlo en la entrada, intuitivamente esto sera ir dividiendo la entrada progresivamente en partes cada vez ms pequeas, de esta forma funcionan los analizadores LL, un ejemplo es el javaCC. Ejemplo: analizar la cadena de entrada cad dada la gramtica siguiente: S c A d A a b | a

El analizador sintctico LL es un analizador sintctico descendente, por un conjunto de gramtica libre de contexto. En ste analizador las entradas son de izquierda a derecha, y construcciones de derivaciones por la izquierda de una sentencia o enunciado. La clase de gramtica que es analizable por ste mtodo es conocido como gramtica LL. La recursividad va a implicar: Algoritmos de reconocimiento ms complejos, que hagan uso de llamadas recursivas o usen explcitamente una pila, la pila de anlisis sintctico. La estructura de datos usada para representar la sintaxis del lenguaje ha de ser tambin recursiva (el rbol de anlisis sintctico), en vez de lineal (caso de un vector de caracteres para almacenar los lexemas en el analizador lxico). Es del tipo LL1 porque empezamos a derivando por la izquierda, y los carcteres son leidos de izquierda a derecha, el 1 por que se lee 1 solo elemento de entrada. Tambin se puede considerar como un intento de construir un rbol de anlisis sintctico para la entrada comenzando desde la raz y creando los nodos del rbol en orden previa. Bueno primeramente para trabajar el anlisis sintctico descendente se debe realizar primeramente algunas operaciones para que la gramtica sea LL1 las cuales son: Eliminar Ambiguedad Eliminar Recursividad por la Izquierda Factorizar Primeros y siguientes Ambigedad Una gramtica es ambigua cuando genera ms de un rbol de derivacin. Para eliminar la ambigedad se debe reescribir la gramtica. Ejemplo: Recursividad por la Izquierda Una gramtica es recursiva por la izquierda si tiene un no Terminal A tal que existe una derivacin A->A para alguna cadena . Es decir por simple observacin podemos identificar. Para eliminar la recursividad por la izquierda se utiliza la siguiente formula. Ejemplo:

Gramtica Recursiva El trabajo del analizador sobre una cadena de gramtica particular. El anlisis consiste de: una bfer de entrada, una cadena de gramtica una pila sobre la cual se almacenan los smbolos terminales y no-terminales de la gramtica an sin analizar una tabla de anlisis

(Bottom-Up-Parser): un analizador puede empezar con la entrada e intentar llegar hasta el smbolo inicial, intuitivamente el analizador intenta encontrar los smbolos ms pequeos y progresivamente construir la jerarqua de smbolos hasta el inicial, los analizadores LR funcionan as y un ejemplo es el Yacc. Los analizadores sintcticos LR, tambin conocidos como Parser LR, son un tipo de analizadores para algunas gramticas libres de contexto. Pertenece a la familia de los analizadores ascendentes, ya que construyen el rbol sintctico de las hojas hacia la raz. Utilizan la tcnica de anlisis por desplazamiento reduccin. Existen tres tipos de parsers LR: SLR (K), LALR (K) y LR (K) cannico. Un analizador LR consta de: 1. Un programa conductor 2. Una entrada 3. Una salida 4. Una tabla de anlisis sintctico, compuesta de 2 partes (ACCIN Y GOTO) Cabe acotar que el programa conductor es siempre igual, solo variando para cada lenguaje la tabla de anlisis sintctico. El algoritmo para reconocer cadenas es el siguiente: dado el primer carcter de la cadena y el estado inicial de la tabla, buscar qu accin corresponde en la tabla de accin. Si el estado es shift n (n N), se coloca el carcter y el nmero de estado n en la pila, se lee el siguiente carcter y repite el procedimiento, solo que esta vez buscamos en el estado correspondiente. SI ACCIN = REDUCE n (n N), se sacan de la pila tantas tuplas (estado, smbolo) como el largo de la cola de la produccin en el n-simo lugar, y se reemplaza por la cabeza de esta produccin. El nuevo estado sale de buscar en la tabla GOTO usando para ubicarlo el nmero de estado que quedo en el tope de la pila, y el no terminal en la cabeza. En la tabla accin tambin encontraremos ACEPTAR que se toma la cadena como valida y se termina el anlisis o ERROR que se rechaza la cadena. Algoritmo para generar un autmata LR(0)

Para generar un autmata LR(0) en base a una gramtica G, primero se debe definir: Gramtica ampliada: Dado una gramtica G, se define la gramtica ampliada G'a: 1. Se agrega una produccin S'->S# donde S es el smbolo inicial.(el # representa el fin de cadena) 2. Se pasan todas las producciones a tems de configuracin (veremos este concepto en un instante) con el punto al principio de la cola 3. Se define S' como el smbolo inicial de la gramtica. tem de configuracin: un tem de configuracin es una produccin que tiene un carcter especial (generalmente un punto) en algn lugar de la cola. Por ejemplo: la produccin S>ABC genera los siguientes tems,{ S->.ABC, S->A.BC, S->AB.C S->ABC.}. Como veremos en un instante, y hablando informalmente el punto representa el lugar actual en donde me puedo encontrar en un momento en el parseo en una produccin. Clausura de un tem: se define a la clausura de un tem (y de forma informal) a: dado un tem S->A.cB (A, B e V*, c e Vt unin VN) al conjunto formado por 1. S->A.cB 2. Si c es un no terminal, se agregan todos los tems que tengan a c como cabeza de la produccin y el punto al principio de la cola, 3. Si p es un tem que pertenece a la clausura, la clausura de p pertenece a la clausura, siempre y cuando ya no este agregada. En otras palabras, y para que se entienda el concepto, la clausura de un tem representa todas las producciones que se pueden aplicar a una cadena valida a partir del punto del tem. Finalmente, la construccin del autmata es as: 1. Se ampla la gramtica 2. Dado el smbolo inicial de la gramtica ampliada, se calcula su clausura y este se define como un estado inicial. 3. Para cada estado: se agrupan las producciones segn el carcter que est despus del punto, si todava no se defini el estado, se corre el punto un carcter a la derecha, se crea el nuevo estado con esta producciones, y la clausura de cada una de ellas, se define el carcter que estaba despus del punto en el estado de origen como el carcter de la transicin. 4. Si el estado tiene en alguna produccin el punto al final, este estado se marca como un estado final del autmata. 5. Se sigue hasta que ya no se tenga ms estados nuevos posibles. Estrictamente hablando, el autmata LR es un autmata determinista, aunque, en general, su utilidad radica en ser la base para la construccin de la tabla LR(0). La diferencia es que el Analizador sintctico Descendente se hace la derivacin por la izquierda y

en el Analizador sintctico Ascendente se construyen el rbol sintctico de las hojas hacia la raz. DESCENDENTE

ASCENDENTE BIBLIOGRAFA: Mora Fausto, Anlisis Sintctico Descendente. Disponible en URL: http://faustol.wordpress.com/2007/09/05/anlisis-sintctico-descendente-ll1/ Consultado 14/12/2010 Vlez Reyes Javier,Compiladores http://www.lsi.uned.es/procleng/apuntes/20062007/AnalisisSintacticoDescendente.pdf. Consultado 14/12/2010 Sierra y Glvez, Traductores,Compiladores e Interprtes. Disponible enURL:http://www.lcc.uma.es/~galvez/ftp/tci/tictema3.pdf. Consultado 14/12/2010