Informe Proyecto Analizador Sintactico

INFORME PROYECTO ANALIZADOR SINTACTICO PROFESOR AUTOMATAS GRAMATICALES INGENIERÍA DE SISTEMAS IX SEMESTRE FUNDACIÓN

Views 147 Downloads 1 File size 118KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

INFORME PROYECTO ANALIZADOR SINTACTICO

PROFESOR

AUTOMATAS GRAMATICALES

INGENIERÍA DE SISTEMAS IX SEMESTRE

FUNDACIÓN UNIVERSITARIA TECNOLÓGICO COMFENALCO CARTAGENA

INFORME PROYECTO ANALIZADOR SINTACTICO



MARCO TEÓRICO DEL ANÁLISIS LÉXICO

El compilador es un programa que se encarga de leer un archivo de determinado lenguaje de programación y "traducirlo" al lenguaje máquina que es el conjunto de instrucciones (en el caso de las computadoras, el lenguaje binario)

que

la

computadora

soporte

o

"interpreta".

Al leerse nuestro código fuente, el compilador comienza 3 procesos de análisis como lo son el Análisis Léxico; supongamos que mi sistema o programa es para automatizar la ventilación de una habitación; algo sencillo. Las acciones del ducto de ventilación son: abrir y cerrar. No se puede decir sólo abrir o cerrar ya que la ventilación (en éste caso) incluye un aire acondicionado (dejémoslo

en ventilador)

que

debe

encenderse

o

apagarse

independientemente de si nuestra ventilación está abierta o cerrada. Nuestras "palabras reservadas", que son únicamente las palabras que entiende nuestro compilador serán: abrir, cerrar, encender, apagar, ventilador y ventilación. El análisis léxico buscará entonces que esas palabras estén dentro de nuestro "código fuente". Si queremos crear una estructura para el código fuente, como en HTML o cualquier lenguaje, el programa debe determinar si la estructura se cumple. En caso contrario, no compilará. El segundo proceso es el Análisis Semántico; Tenemos entonces dos variables a resaltar: una acción y un accionado. El accionado es la parte de la acción sobre la que ésta se encuentra realizando sus operaciones; es el que realiza la operación por así llamarlo. Viéndolo desde éste punto, nos encontramos que las acciones son: encender, apagar, abrir, cerrar. Y los accionados serán: ventilador y ventilación. Nuestro

análisis

semántico

deberá

determinar

si

se

cumple

la

condición Acción-Accionado, en caso contrario, el programa no compilará. Y por último el Análisis Sintáctico; Aún cuando la lógica de Acción Accionado haya sido satisfactoria, no hay como la lógica de lo que se puede y lo que no. Éste análisis revisa que las palabras cumplan con una lógica de si se puede o no. Un ventilador puede encenderse y apagarse pero no abrirse ni cerrarse. Las ventilaciones no pueden apagarse ni prenderse, sólo abrirse y cerrarse. Simplemente, buscamos que haya ésta lógica dentro del programa.



JUSTIFICACIÓN DE LA ELECCIÓN DEL LENGUAJE DE PROGRAMACIÓN

Principalmente se escoge Java como lenguaje de programación porque fue el lenguaje con el que hemos trabajado durante todo este proceso de aprendizaje como estudiantes de Ingeniería de Sistemas. Además de esto se tuvo en cuenta que Java ofrece una cantidad ilimitada de funciones que logran la facilidad a la hora de programar, estas son unas de las principales características que este nos ofrece: Multiplataforma, posee una lista de librerías que a diario satisfacen las necesidades de los programadores, también cuenta con la instalación de su máquina virtual, su entorno de desarrollo o la facilidad de conectarse con bases de datos, desarrollar aplicación de escritorio, aplicaciones distribuidas, aplicación de web, etc. Por todos estos puntos mencionados anteriormente también decidimos trabajar con este Lenguaje de Programación Orientado a Objetos.



FUNCIÓN DE CADA ESTRUCTURA DE DATOS UTILIZADA 

Array List: la función de esta estructura de datos que se implementa en el código de este programa es principalmente ordenar y contener objetos de manera similar a un vector, pero a diferencia de este el array es de tamaño dinámico de manera que crecerá a medida que se le inserten elementos y además tiene la ventaja de que se ejecuta de forma mas rápida. De manera mas especifica en este código se utilizan los array para almacenar partes de código en su correspondiente tipo de lista, es decir, se tiene una lista para las palabras declaradas, otra para las palabras reservadas, y de igual manera con el resto de componentes.



OBJETIVO DE CADA PROCEDIMIENTO Y FUNCIÓN

Limpiar listas: el objetivo de esta función es limpiar el contenido de los Array List y de esta manera evitar posibles errores en próximas ejecuciones o en la misma ejecución. Recorrer archivo: por medio de esta función listamos el pseudocódigo compilado sin comentarios, y sin saltos de líneas. Crear archivo HTML: en esta función capturamos los datos que se escribieron sobre el área de texto y los convertimos en un archivo con la extensión .HTML y luego concatenamos la parte del encabezado en donde se encuentra almacenado los respectivos datos iniciales que debe contener este archivo. abrirHTML: mediante esta función logramos identificar la ubicación en donde se creó nuestro archivo .html y mediante la API de java (Desktop) la abrimos con el navegador por defecto. expresionRegular: por medio de esta función recibimos la expresión y el patrón de busque y lo analizamos en cada uno de los métodos en los que necesitamos evaluar las expresiones. Obtener código por línea: lo que hacemos en esta función es crear saltos de líneas para lograr dividir el código y luego asi mandarle el código partido en líneas a las funciones que se encargaran de validar las expresiones regulares utilizadas. recorrerArchivo: realizamos principalmente la creación del archivo .txt o archivo plano el cual va a ser utilizado para la verificación y validación de las expresiones regulares. recorrerListas: recorremos y llenamos las listas (listPalabrasRes, listVariablesDec,

listVariablesInv,

listVariablesNoDec)

con

sus

respectivos datos cada uno de sus listas correspondientes, es decir que las palabras reservadas utilizadas en un código se guardaran específicamente en la lista de palabras reservadas, esto además nos facilita listar los datos que se encuentren dentro de ella.



DIFICULTADES Y SOLUCIONES Algunas de las dificultades se presentaron al momento de definir con qué tipo de estructura de datos se iba a trabajar debido a que se necesitaba controlar el código que fuera escrito para poderlo analizar y generar un correcto resultado. También se presento una dificultad con el manejo de las

expresiones regulares a este nivel en lo que respecta a la definición e implementación de esta; este inconveniente fue solucionado investigando un poco y con la ayuda de unas librerías de Java destinadas al manejo de expresiones regulares.