Sunteți pe pagina 1din 3

Clase # 18 Ejemplo de Anlisis Lxico y Sintctico en Dev C++

COMPILADORES E INTRPRETES Practica 2 - Laboratorio


Despus de haber ejecutado con xito el analizador sintctico responda lo siguiente: 1. Coloque en el archivo prueba.txt algn carcter no reconocido por el lenguaje MiniUGB. Vuelva a ejecutar la aplicacin generada en C++. Qu observ en la ejecucin? cul es la razn del resultado?

El analizador lxico lee el token, pero el analizador sintctico no reconoce el token, dice que es un token desconocido.

2. Elimine el carcter ; de alguna de las instrucciones. Vuelva a ejecutar la aplicacin. Qu observ en la ejecucin? cul es la razn del resultado?

El analizador lxico se detiene, no sigue con la siguiente con la lectura del programa, dice que hace falta un token. Investigacin complementaria
a) Investigar cules son los tipos de anlisis sintctico y sus caractersticas. Tipos de Anlisis Sintcticos Desde el punto de vista de la teora de Anlisis Sintctico, hay dos estrategias para construir el rbol sintctico: a- Anlisis descendente: partimos de la raz del rbol (donde estar situado el axioma o smbolo inicial de la gramtica) y se van aplicando reglas por la izquierda de forma que se obtiene una derivacin por la izquierda de la cadena de entrada. Para decidir qu regla aplicar, se lee un token de la entrada. Recorriendo el rbol de anlisis sintctico resultante, en profundidad de izquierda a derecha, encontraremos en las hojas del rbol los tokens que nos devuelve el Analizador Lxico (A.L.) en ese mismo orden. Se considera un intento de encontrar una derivacin por la izquierda para una cadena 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 nodos del rbol en orden previo. b- Anlisis ascendente: partiendo de la cadena de entrada, se construye el rbol de anlisis sintctico empezando por las hojas (donde estn los tokens) y se van creando nodos intermedios hasta llegar a la raz (hasta el smbolo inicial), construyendo as el rbol de abajo a arriba. El recorrido del rbol se har desde las hojas hasta la raz. El orden en el que se van encontrando las producciones corresponde a la inversa de una derivacin por la derecha.

Por: Ing. Marvin Parada

Pgina 1

Clase # 18 Ejemplo de Anlisis Lxico y Sintctico en Dev C++

El anlisis sintctico ascendente intenta construir un rbol para la cadena de entrada que comienza por las hojas (el fondo) y avanza hacia la raz (la cima). Las dos estrategias recorren la cadena de entrada de izquierda a derecha una sola vez, y necesitan (para que el anlisis sea eficiente) que la gramtica no sea ambigua.

Caractersticas:
Lee componentes lxicos (tokens). Comprueba que el orden de estos corresponde a la sintaxis predeterminada. Genera errores en caso de que el flujo de tokens no respona a la sintaxis. Genera arboles de anlisis sintctico. Se suele conocer como Parser. El anlisis sintctico desarrolla el esqueleto de toda la fase del anlisis. El anlisis sintctico se especifica mediante una gramtica libre de contexto. El anlisis sintctico se implementa mediante un autmata de pila.

b) Investigar que es la notacin LL(K) y LLR, adems de la notacin EBNF y BNF. Un analizador sintctico LL analiza la entrada de izquierda a derecha, y construye una derivacin por la izquierda de la sentencia o enunciado, al contrario que LR. La clase de gramticas que son analizables por este mtodo son conocidas como gramticas LL. Las gramticas LL son una clase de gramticas libres de contexto an ms restrictiva que las gramticas LR. Sin embargo, son de gran inters para los escritores de compiladores, puesto que este analizador es simple y eficiente de implementar. Las gramticas LL(k) pueden ser analizadas por un analizador sintctico descendente recursivo, que es normalmente codificado a mano. Los LL(K), donde de nuevo la K indica el nmero de tokens que el parser necesita conocer para saber por dnde ir; tambin aqu lo interesante es que K=1, de modo que estudiaremos los LL(1) y como obtener la tabla a partir de ellos. La notacin de Backus-Naur, tambin conocida por sus denominaciones inglesas Backus-Naur form (BNF), Backus-Naur formalism o Backus normal form, es un metalenguaje usado para expresar gramticas libres de contexto: es decir, una manera formal de describir lenguajes formales. El BNF se utiliza extensamente como notacin para las gramticas de los lenguajes de programacin de la computadora, de los sistemas de comando y de los protocolos de comunicacin, as como una notacin para representar partes de las gramticas de la lengua natural (por ejemplo, el metro en la

Por: Ing. Marvin Parada

Pgina 2

Clase # 18 Ejemplo de Anlisis Lxico y Sintctico en Dev C++

poesa de Venpa). La mayora de los libros de textos para la teora o la semntica del lenguaje de programacin documentan el lenguaje de programacin en BNF. Algunas variantes, tales como la Augmented Backus-Naur Form (ABNF) y la Extended BackusNaur Form (EBNF).

Por: Ing. Marvin Parada

Pgina 3

S-ar putea să vă placă și