Sei sulla pagina 1di 4

PONTIFICIA UNIVERSIDAD CATLICA DEL ECUADOR SEDE IBARRA ESCUELA DE INGENIERIA CARRERA DE SISTEMAS

NOMBRE: Grace Laguna NIVEL: Quinto FECHA: 03-05-2013

ANALIZADOR SINTCTICO
EL PAPEL DEL ANALIZADOR SINTCTICO
En este modelo de compilador, el analizador sintctico obtiene una cadena de componentes lxicos del analizador lxico, y comprueba si la cadena puede ser generada por la gramtica del lenguaje fuente. Se supone que el analizador sintctico informar de cualquier error de sintaxis de manera inteligible. Tambin debera recuperarse de los errores que ocurren frecuentemente para poder continuar procesando el resto de su entrada. Los mtodos empleados generalmente en los compiladores se clasifican como descendentes o ascendentes. Como sus nombres indican, los analizadores sintcticos descendentes construyen rboles de anlisis sintctico desde arriba (la raz) hasta abajo (las hojas), mientras que los analizadores sintcticos ascendentes comienzan en las hojas y suben hacia la raz. En ambos casos, se examina la entrada al analizador sintctico de izquierda a derecha, un smbolo a la vez.

ANLISIS SINTCTICO ASCENDENTE Y DESCENDENTE


Anlisis sintctico ascendente Los analizadores sintcticos ascendentes construyen el rbol sintctico a partir de las hojas, paso a paso hasta llegar a la raz. Es decir parten de los distintos tokens de la sentencia a analizar, y por medio de reducciones llegan al smbolo inicial de la gramtica. Se llaman reducciones, para indicar que se efectan en sentido contrario a las producciones de la gramtica. El principal problema que se plantea en el anlisis ascendente es el del retroceso, que se traduce en la eleccin de un pivote para realizar la reduccin. Para salvar este inconveniente se definieron distintos tipos de gramticas entre las cuales las ms utilizadas son las LR(k). Los analizadores sintcticos ascendentes que reconocen lenguajes descritos por gramticas LR(k), toman sus decisiones en funcin de los k tokens inspeccionados por delante (lookaheads) de cada vez en la cadena de

entrada, tomados de izquierda a derecha (Left to right), realizndose el anlisis por derivaciones ms a la derecha en sentido inverso (Rightmost). Las gramticas LR(k) describen la mayor parte de los lenguajes libres de contexto, y son mucho menos restrictivas que las gramticas LL(k). Sin embargo la complejidad de los analizadores sintcticos LR(k), hace que la mayor parte de estos se construyan por medio de herramientas software como por ejemplo el yacc incluido en el sistema operativo UNIX. Anlisis sintctico descendente Los analizadores sintcticos descendentes construyen el rbol sintctico a partir del smbolo inicial de la gramtica, hasta llegar a los distintos tokens, que constituyen la sentencia a analizar. Es decir, se parte del smbolo inicial de la gramtica y se van aplicando las distintas producciones hasta llegar a formar la sentencia. En el ejemplo de la figura 1, el rbol sintctico se obtiene a partir de las reglas de derivacin de <expresin> hasta llegar a la expresin. El orden de derivacin es importante, siempre se deriva primero el no terminal situado ms a la izquierda segn se mira el rbol (derivaciones ms a la izquierda). Los principales problemas que se plantean en el anlisis sintctico descendente son dos: el retroceso (en ingls backtracking) y la recursividad a izquierdas. El retroceso, se produce cuando se eligen mal las producciones para alcanzar la sentencia a analizar, y debe de darse marcha atrs en el proceso de anlisis, para elegir otra alternativa. El retroceso se repite hasta que se ha elegido la alternativa correcta; evidentemente esto ralentiza enormemente el proceso de anlisis. La recursividad a izquierdas, se deriva de que en general se elige el criterio de tomar siempre en primera opcin la alternativa ms a la izquierda. Si en la gramtica existen producciones de la forma: entonces el analizador sintctico se introduce en un bucle infinito, del que no puede salir. Para evitar la recursividad a izquierdas y el retroceso, las gramticas deben de cumplir unas determinadas propiedades, dando lugar a una clasificacin de las gramticas. Los lenguajes de programacin que se pueden describir mediante uno de estos tipos de gramticas, llamadas LL(k), se pueden analizar en forma descendente sin retroceso, y sin recursividad a izquierdas. Las gramticas LL(k) realizan el anlisis descendente determinista, por medio del reconocimiento de la cadena de entrada de izquierda a derecha (Left to right) y que va tomando las derivaciones ms a

la izquierda (Leftmost) con slo mirar los k tokens situados a continuacin de donde se halla. En general se utilizan las gramticas LL(1) para la descripcin de lenguajes, que slo miran un token. Tambin existe una herramienta denominada Jack para generar analizadores sintcticos descendentes en lenguaje Java, a partir de unas especificaciones gramaticales del estilo de las herramientas clsicas de anlisis sintctico ascendente lex y yacc. Se caracteriza por: Genera cdigo en lenguaje Java. Las especificaciones lxicas, sintcticas y semnticas van en un fichero nico Permite el uso de cualquier carcter Unicode. Realiza anlisis descendente utilizando una gramtica LL(k), donde se puede fijar K, es decir el nmero de tokens que tiene que mirar hacia adelante (lookahead) para determinar la regla de la gramtica que aplica. En el anlisis semntico utiliza tanto atributos sintetizados como heredados.

ANLISIS SEMNTICO Y TRATAMIENTO DE ERRORES


Anlisis semntico Se compone de un conjunto de rutinas independientes, llamadas por los analizadores morfolgico y sintctico. El anlisis semntico utiliza como entrada el rbol sintctico detectado por el anlisis sintctico para comprobar restricciones de tipo y otras limitaciones semnticas y preparar la generacin de cdigo. En compiladores de un solo paso, las llamadas a las rutinas semnticas se realizan directamente desde el analizador sintctico y son dichas rutinas las que llaman al generador de cdigo. El instrumento ms utilizado para conseguirlo es la gramtica de atributos. En compiladores de dos o ms pasos, el anlisis semntico se realiza independientemente de la generacin de cdigo, pasndose informacin a travs de un archivo intermedio, que normalmente contiene informacin sobre el rbol sintctico en forma linealizada (para facilitar su manejo y hacer posible su almacenamiento en memoria auxiliar). En cualquier caso, las rutinas semnticas suelen hacer uso de una pila (la pila semntica) que contiene la informacin semntica asociada a los operandos (y a veces a los operadores) en forma de registros semnticos.

Tratamiento de errores

Los errores encontrados en las distintas fases de anlisis se envan a un mdulo denominado manejo de errores. En el caso ms sencillo puede ser un subprograma al que se le invoca envindole el cdigo de error, y que se encarga de escribir un mensaje con el error correspondiente, y el nmero de lnea donde se ha producido, as como de cortar el proceso de traduccin. Si se desea construir un tratamiento de errores ms completo, por ejemplo detectando todos los errores del programa fuente, el mdulo se complica dado que los analizadores deben proseguir su trabajo con falta de datos.

RBOLES SINTCTICOS
rbol sintctico, para una oracin compuesta (el nio que me salud me odia) en la que la oracin subordinada es una oracin de relativo. Dada una oracin o construccin compleja esta puede dividirse en constituyentes sintcticos, cada uno de los cuales a su vez podra ser divisible o analizable en otros constituyentes. El conjunto de constituyentes sintcticos admite con la relacin binaria de inclusin (o "ser parte de") es un conjunto parcialmente ordenado. Un rbol sintctico es una representacin de las relaciones jerrquicas entre los constituyentes sintcticos. Ms formalmente, un rbol sintctico es un grafo que representa esta relacin de orden parcial. Cuando en una construccin un constituyente X es parte de un constituyente inmediato de otro constituyente ms grande Y, el rbol sintctico correspondiente tendr una lnea entre el nodo que representa a X y en nodo que representa a Y. Actualmente se acepta que toda lengua admite un anlisis mediante rboles sintcticos binarios. En los rboles grficos los ncleos sintcticos se suelen representar con una letra, por ejemplo X, seguida de un subndice (por ejemplo ), mientras que las estructuras ms complejas se sealan mediante una o dos barras superpuestas o mediante primas (por ejemplo, ) y si se trata de proyecciones mximas de un ncleo mediante la letras S antecediendo a la letra que designa al ncleo (por ejemplo SX).

Potrebbero piacerti anche