Practica 06

PRACTICA 06: “ANALISIS SINTACTICO EN C++” 1. OBJETIVOS   Conocer la función y características de un analizador sintá

Views 133 Downloads 7 File size 619KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

PRACTICA 06: “ANALISIS SINTACTICO EN C++”

1. OBJETIVOS  

Conocer la función y características de un analizador sintáctico. Estudiar el código fuente de un programa prototipo de análisis sintáctico.

2. FUNDAMENTO TEORICO ANALISIS SINTACTICO Es la fase del analizador que se encarga de chequear la secuencia de tokens que representa al texto de entrada, en base a una gramática dada. En caso de que el programa de entrada sea válido, suministra el árbol sintáctico que lo reconoce en base a una representación computacional. Este árbol es el punto de partida de la fase posterior de la etapa de análisis: el analizador semántico. “El analizador sintáctico obtiene una cadena de tokens del analizador léxico, y verifica que la cadena de nombres de los tokens pueda generarse mediante la gramática para el lenguaje fuente.” (Aho, Lam, Sethi, & Ullman, 2008) El analizador sintáctico tiene como objetivo encontrar las estructuras presentes en su entrada. Estas estructuras se pueden representar mediante el árbol de análisis sintáctico, que explica cómo se puede derivar la cadena de entrada en la gramática que especifica el lenguaje. Aunque en la práctica es habitual que el árbol de análisis no llegue a construirse, se trata de una abstracción que nos permite entender mejor todo el proceso. Para construir la especificación sintáctica de los lenguajes de programación, se suelen emplear gran áticas contextuales, generalmente restringidas para que el análisis se pueda realizar de manera eficiente. Para que sea posible construir el ´árbol de análisis, es necesario que la entrada no presente errores sintácticos. En caso de que los haya, el analizador debe informar de su presencia adecuadamente y, si es posible, intentar continuar el análisis.

3. PROCEDIMIENTO

CREACION DEL ANALIZADOR SINTACTICO Para crear el analizador sintáctico, debemos contar previamente con el Analizador Léxico, trabajado en una sesión anterior. La técnica a utilizar es la denominada “recursivo descendente sin retroceso”, para su utilización se deben de cumplir dos requisitos: El lenguaje fuente debe estar definido con una gramática LL(1). Con un solo token se decide la regla de la gramática que debe aplicarse.

Para programar el analizador sintáctico, desarrolle los siguientes pasos: a) Cargue Borland c++. b) Dar click en File > New > Proyect. c) Indique una ruta para su proyecto, y en Target model, seleccione “Console” y presiona el botón OK. d) En la barra lateral Proyect, crear un nuevo nodo y llámelo léxico.h.

A continuación, escriba el código de la practica anterior, e inserte todo el código, excepto la función main. Cree otro nodo(sintáctico.h) y plasme el código que se presenta a continuación: #ifndef sintacti_H #define sintacti_H #include "lexico.h" #include class Sintactico { void programa(void); void bloque(void); void sentencia(void); void otra_sentencia(void); void asignacion(void); void lectura(void); void escritura(void); void variable(void); void expresion(void); void termino(void); void mas_terminos(void); void factor(void); void mas_factores(void); void constante(void); void errores(int codigo); Lexico lexico; //objeto lexico miembro de la clase public: Sintactico(char *fuente, int traza); ~Sintactico(void); }; Sintactico::Sintactico(char *fuente, int traza):lexico(fuente,traza)

//se inicializa el contrsutor de la clase lexico { if(lexico.existeTraza()) cout