Mini C# Es un analizador léxico y sintáctico para una pequeña parte del lenguaje de programación C#. Su función se lleva acabo en 2 etapas, la primera parte es el análisis léxico y consiste en reconocer tokens segun el orden de lectura del archivo, y en base a expresiones regulares el programa separará los tokens como correctos o errores, la segunda parte es el análisis sintáctico, recibe como entrada el resultado del análisis léxico y en base a las reglas gramaticales definidas en la grámatica formal definida, el cual genera un analizador y tabla de simbolos, para lograr estas funcines se hizo uso de las herramientas JFLEX y CUP los cuales generan código en JAVA.
Para el correcto funcionamiento del programa Mini C# es necesario contar con la Virtual Machine de Java instalada en la PC:
- Si no se tiene instalado puede descargarlo de la página oficial https://www.java.com/en/download/
El algoritmo que describe el funcionamiento del software es el siguiente:
- Ejecutar la aplicación .Jar.
- Cargar un archivo con código Mini C# (.frag, .txt)
- Analizar el código para válidar los tokens.
- Analizar el resultado del análisis léxico y validar si los tokens cumplen las reglas sintácticas.
- Se mostrará en pantalla el resultado del análisis general.
Nota Es importante recalcar que previamente el analizador léxico tuvo que haber sido compilado.
Una vez tenga la carpeta del proyecto dirigase a la carpeta Lexical Scanner Mini C# , una vez este dentro de esta carpeta dirigase a la carpeta dist y dentro de esta carpeta encontrará el archivo llamado MiniC#.jar, para ejecutarlo pulse doble-click sobre este archivo.
La ruta relativa del archivo ejecutable es:
\Lexical Scanner Mini C#\dist\MiniC#.jar
Debe ubicarse donde se encuentre la carpeta del programa, una vez dentro de ella ejecute el siguiente comando:
java -jar Lexical Scanner Mini C#\dist\MiniC#.jar
Una vez se ejecutado el programa se mostrará la siguiente pantalla:
Para cargar un archivo con código de Mini C#:
- Dirigase al boton Cargar Archivo
- Presione click sobre este boton
Se mostrará el manejador de carpetas y archivos, en esta pantalla tendra que buscar y seleccionar el archivo (.frag, .txt) deseado.
Para analizar un archivo Mini C#:
- Dirigase al boton Analizar
- Presione click sobre este boton
Esto inicializará el análisis del archivo cargado anteriormente y una vez este finalice se mostrará el resultado del análisis en pantalla.
Cabe recalcar que esta función está unicamente disponible para el desarrollador, puesto que para la ejecución correcta del software es necesario que el analizador léxico y sintáctico se encuentren ya compilados. Por lo tanto el botón Compilar Analizador se encontrará deshabilitado.
Para el manejo de errores léxicos, se hizo uso de la expresion '.' de JFLEX, esta expresion regular se caracteriza por ejecutarse cuando ninguna expresion regular coincidio con el token actual por lo que esta fuera del lenguaje se podria decir. Además se diseñaron expresiones regulares que permiten capturar errores especificos. La acción que se realiza consiste en agregar el error como un token a la lista, detallando el token, numero de linea y numero de columna donde ocurrio el error y que tipo de error es.
{this.tokens.add(new Yytoken(yytext(), yyline, yycolumn, "Unrecognized char", true));}
Para el manejo de errores sintácticos, se hizo uso de las herramientas de CUP, para ello definio dentro de la gramatica formal, producciones que generaran el token error y cuando eso sucede se llama al método de error correspondiente y dentro de este método se agrega a una lista de errores para poder mostrarlos en pantalla más adelante, de igual forma que los errores léxicos, se detalla el numero de linea y numero de columna donde ocurrio el error y que tipo de error es.
Decl ::= VariableDecl
| FunctionDecl
| ClassDecl
| InterfaceDecl
| error pyc
| error ClosedCurlyBracket;
A mi criterio el software Mini C# desarrollado por mi persona, funciona de manera correcta puesto que se realizaron distintas pruebas para verificar que no generará problemas al momento de ejecutarlo en cualquier PC, además su correcto funcionamiento tambien abarca la exactitud léxica y sintáctica que posee para analizar los archivos escritos en Mini C#, se escribieron expresiones regulares bastante grandes que tratan de abarcar la mayor cantidad de casos posibles y se modifico la grámatica formal proporcionada para mejorar el funcionamiento de los analizadores, además se hizo una investigación profunda respecto a las herramientas JFLEX y CUP para su correcto uso.
Bryan Macario Coronado
Estudiante de ingeniería en informática y sistemas
Curso de Compiladores
Universidad Rafael Landivar