Como parte de la asignatura de Compiladores e Interprétes, del Grado en Ingeniería Informática, se desarrolla un intérprete de comandos tipo shell, similar a las consolas de R, Python o Matlab.
El análisis léxico se realizará con Flex y el análisis sintáctico con Bison.
La sintaxis general de las asignaciones es variable = expresion y la de las llamada (comandos o funciones) es
llamada([argumentos]). Los comandos que no tienen argumentos pueden ser llamados como comando().
El intérprete matemático desarrollado en C incluye las siguientes funcionalidades:
-
Variables. El intérprete permite el uso de variables para almacenar valores numéricos.
-
Operaciones con variables. Se pueden realizar operaciones matemáticas con variables ya definidas.
-
Precedencia de operaciones y (). El intérprete respeta la precedencia de las operaciones matemáticas estándar y el uso de paréntesis para agrupar expresiones.
-
Funciones estáticas trigonométricas y exponenciales. Se incluyen funciones trigonométricas como
sin(),cos(),tan(), etc., y funciones exponenciales comoexp()ylog(). -
Constantes predefinidas. El valor de las constantes
EyPIestá predefinido y no puede ser reasignado. -
clear. La función
clear()elimina todas las variables almacenadas, mientras queclear(var)elimina una variable específica. -
workspace. La función
workspace()muestra una lista de todas las variables definidas en el intérprete. -
Las variables solo se almacenan en el espacio de trabajo si han sido definidas correctamente.
-
quit. La función
quit()termina la ejecución del intérprete. -
help. Los usuarios pueden obtener ayuda sobre cualquier comando usando
help(),help,?,?(), o? COMANDO. -
echo(on/off). Se puede activar o desactivar la visualización de resultados en las sentencias de asignación usando
echo(on)oecho(off), así como consultar el estado del echo conecho()oecho. -
load desde fichero
- El intérprete permite cargar comandos desde un archivo utilizando la función
load().
- El intérprete permite cargar comandos desde un archivo utilizando la función
-
Error sintáctico no termina el programa
- Los errores sintácticos no provocan la terminación del programa, permitiendo continuar con la ejecución después de un error.
-
Funciones con un array. Se incluyen funciones que operan sobre arrays de argumentos:, como
max(),min(),media(),var(),sum(),prod(),argmin()yargmax().- Nota. Los índices devueltos por estas funciones comienzan en 0.
-
Las funciones pueden ser usadas dentro de expresiones matemáticas como cualquier otro valor.
-
clear (probar por terminal). La función de limpiar la pantalla permite borrar el contenido de la terminal.
-
ANS. La palabra clave
ANSpuede ser utilizada para acceder al último resultado impreso por el intérprete. -
Loads recursivos. El intérprete permite ejecutar scripts que incluyen cargas recursivas de otros scripts, utilizando una pila para gestionar las llamadas. La sintaxis es
load(RUTA)oload(ARCHIVO)si el escript se encuentra en la carpeta del fichero ejecutable. -
Sentencias de verdad. Se incluyen sentencias de comparación lógica (
<,>,<=,>=,==,!=). -
Tolerancia con el 0. El intérprete cuenta con una tolerancia de
1.e-6para todas las comparaciones con el valor 0, que se puede consultar en la constanteTOL. -
Import de librería dinámico. Se permite importar librerías de forma dinámica para ejecutar funciones sin argumentos, funciones con un argumento de tipo
double, o funciones que toman un array que termina enNAN, devolviendo un valor de tipodouble. La sintaxis esimport(RUTA). Las funciones de una libreríaLIBque se carga de forma dinámica son accesibles mediante la sintaxisLIB/funcion([argumentos]. Esto diferenciar posibles funciones con el mismo nombre definidas en librerías distintas.
-
Para compilar todo, colócate en la carpeta con los archivos y ejecuta:
make. -
Para ejecutar sin script de entrada inicial, escribe:
P3_Bison. -
Para ejecutar con
<nombre_fichero>, haz:./P3_Bison <nombre_fichero>. -
Si quieres verificar el buen uso de memoria, ejecuta, con valgrind previamente instalado:
valgrind ./P3_Bison <nombre_fichero>. -
Para borrar los archivos objeto y el ejecutable, en la misma carpeta, haz:
make clean.