Creación de un compilador de Ñ++ (lenguaje basado en C++) creado por Alejandro Paz, Lucas Vukotic y Enrique Queipo de Llano para la asignatura de Procesadores del Lenguaje (UCM) creado con Java, JLex, CUP y webassembly.
En la carpeta alex se encuentran los ficheros Java necesarios para el análisis léxico. En la carpeta asint ocurre lo mismo para el análisis sintáctico. Además se encuentra el fichero Main.java. En la carpeta ast se pueden encontrar todos los ficheros Java para la generación de dicho ast. Los ficheros AnalizadorLexicoTiny.l Tiny.cup se encuentra en la carpeta raíz.
Para compilar y ejecutar un ejemplo en concreto contamos con dos scrpits de Shell. En primer lugar se debe ejecutar el script compilarCodigo.sh seguido del archivo de ejemplo (en dirección relativa, esto es, ejemplos/archivo.txt) o con la opción -t para compilar todos. Una vez compilado, el script ejecutarCodigo.sh ejecutará el código webassembly generado por la última ejecución satisfactoria de compilarCodigo.sh
También hemos incluido un último script ejecutarEjemplos.sh que compila y ejecuta cada uno de los ejemplos de la carpeta ejemplos, mostrando todos los pasos de la compilación y el output de la ejecución para cada uno de ellos.
En la carpeta ejemplos incluimos varios ficheros de prueba para las distintas funcionalidades. Las explicamos a continuación.
alias.txtFuncionalidad de los alias en Ñ++. Alias definidos en términos de otros alias. Funciones definidas con tipos que son alias.arrays3d.txtInicialización y recorrido de arrays multidimensionales.bloques.txtUso de bloques anidados y ocultación de variables.combinacionTipos.txtCombinación de tipos definidos por el usuario. Se tiene un array de una estructura cuyos campos son enum.declaraciones.txtUso básico de declaraciones y tipos básicos.erroresSintacticos.txtRecuperación y print de distintos errores sintácticos en definiciones e instrucciones.erroresTipado.txtDetección de errores de tipado. Recuperación y muestra de los errores en asignaciones y expresiones.erroresVinculacion.txtDetección de errores de vinculacion. Recuperación y muestra de los errores.factorialIterativo.txtEjemplo clásico de cálculo del factorial iterativo.insercionBusquedaList.txtPaso de array a funciones por referencia. Implementación de funciones buscar e insertar sobre listas.llamadasFunciones.txtFunción recursiva y llamada a una función que recibe lo que devuelve otra.memDinamica.txtSe incluye a continuación. Uso de reserva de memoria dinámica para un puntero a una estructura. Paso de punteros a funciones.parametrosValorRef.txtPaso de parámetros a funciones por valor y por referencia.pointer.txtIntercambio de valores mediante punteros. Declaracion de punteros a partir de direcciones de variables.punterosStructFuncs.txtUso de punteros y structs sin memoria dinámica.stdio.txtPrueba de entrada/salida. Ver sección 5.8 deLexico y Sintaxis de Ñ++.switch.txtPrueba del switch con y sin breaks y con y sin casos por defecto.