domingo, 27 de agosto de 2017

Analizador Léxico-Sintáctico con Flex-Bison


Buen día colegasas, hoy en el curso de Autómatas y Compiladores desarrollaremos un Analizador léxico- sintáctico, usando Flex y Bison respectivamente, para el reconocimiento de lenguaje PHP.

¿Qué son Flex y Bison?

Flex y Bison son herramientas que ayudan a escribir analizadores muy rápidos para formatos de archivo casi arbitrario. Formalmente, implementan el análisis de las gramáticas sin ambigüedad libre de contexto (en contraposición a "lenguaje natural"). 



Como tu y yo, ya sabemos la teoría de como funcionan estos analizadores, vayamos directo a programar.


1er Paso
Debemos descargar los respectivos archivos para desarrollar el programa.

NetBeans 8.2 + JDK 8u111


DevC++


BisonFlex + GUI
Al descomprimirlas nos quedaran dos carpetas, una llamada "Bison" donde se encontrarán nuestras herramientas que nos ayuden a generar archivos que serán leídos por el DevC++; y otra carpeta llamada "GUICompilador", no es mas que la interfaz de usuario que sera usada para la ejecución del analizador en NetBeans.


2do Paso

-Copiamos la carpeta Bison al disco local C de nuestra computadora.



-Creamos un documento de texto dentro de la carpeta Bison, pero al momento de guardarlo le cambiamos la extensión a ".y", por ejemplo creamos un archivo "lexico.y", así como se muestra en el imagen:



-Aquí escribiremos la gramática del programa, si queremos cambiar a otro lenguaje que no sea PHP, lo único que se modificará, serán los Tokens y la regla de producción, no debemos modificar el resto, puesto que bison no reconocerá nuestro archivo.

-Una vez terminado, abrimos la ventana CMD, para generar archivos que sean leídos por el DevC++. En la ventana de comando ingresamos lo siguiente:

1: "cd C:\"
2: "cd Bison"
3: "bison -d -oanaLexico.c lexico.y"


Si al presionar la tecla  Enter luego de escribir lo del punto 3, no muestra ningún error, eso quiere decir que nuestra gramática está bien escrita.
En caso contrario, nos indicará la línea en donde se encuentra el error, corregimos y hacemos de nuevo el mismo procedimiento.
-Se nos creará dos archivos, "anaLexico.c" y "anaLexico.h", como ya se dijo anteriormente estos serán usados en el DevC++ posteriormente.



3er Paso

-Creamos un documento de texto dentro de la carpeta Bison, pero al momento de guardarlo le cambiamos la extensión a ".l", por ejemplo creamos un archivo "expresionesregulares.l", así como se muestra en el imagen:



-Aquí escribiremos las expresiones regulares del programa, si queremos cambiar a otro lenguaje que no sea PHP, lo único que se modificará, serán los Tokens y expresiones regulares, no debemos modificar el resto, puesto que flex no reconocerá nuestro archivo.

-Una vez terminado, abrimos la ventana CMD, para generar archivos que sean leídos por el DevC++. En la ventana de comando ingresamos lo siguiente:
1: "cd C:\>Bison"
2: "cd Bison"
3: "flex -osintactico.c expresionesregulares.l"


-Si al presionar la tecla  Enter luego de escribir lo del punto 3, no muestra ningún error, eso quiere decir que nuestras expresiones regulares están bien escritas.
En caso contrario, nos indicará la línea en donde se encuentra el error, corregimos y hacemos de nuevo el mismo procedimiento.
-Se nos creará un archivo "sintactico.c", como ya se dijo anteriormente este será usado en el DevC++ posteriormente.


4to Paso:
Abrimos el DevC++ y creamos un nuevo proyecto: Basic  -  Empty Project  -  C Project.
al trabajar con bison y flex debemos crear un Proyecto en lenguaje C.

Guardamos el proyecto en nuestra carpeta Bison junto con los demás archivos.

-Agregamos al proyecto nuestros tres archivos generados en el 2do y 3er paso.



5to paso
Crearemos un archivo de texto en donde escribiremos cualquier codigo en PHP, este trabajara como un archivo de prueba, al ejecutar nuestro anterior proyecto, lo guardamos en la carpeta Bison, en mi caso lo guarde con el nombre "pruebita.txt"





6to paso
Ejecutaremos nuestro proyecto del 4to Paso, nos pedirá el nombre de nuestro archivo de texto, ingresamos el nombre incluyendo la extensión de este, "pruebita.txt".


Si todo lo que hicimos está correctamente, la consola no nos mostrará ningún error de sintaxis.


TODO EL CODIGO DESARROLLADO EN ESTE BLOG, PODREMOS ENCONTRARLO EN EL SIGUIENTE ENLACE:



“No te preocupes si no funciona bien, para conocer el éxito, primero debemos conocer el fracaso”