Aleph es un lenguaje de programación experimental diseñado como una herramienta educativa para aprender los fundamentos del diseño de lenguajes de programación.
Está orientado a estudiantes y desarrolladores interesados en entender los conceptos fundamentales detrás de los intérpretes y la teoría de lenguajes formales.
Para obtener más información sobre la sintaxis, la semántica y las características de Aleph, consulta la documentación.
Puedes descargar el intérprete listo para usar en Windows aquí.
El único requisito para compilar el intérprete es tener un compilador de C
(recomendado: gcc
).
Clona o descarga el repositorio. Luego ejecuta el comando del archivo
_gcc.cmd
.
Si se modifican los archivos
scanner.l
o
parser.y
se
debe ejecutar flex
o bison
respectivamente.
Para facilitar la compilación se puede usar make
.
Por defecto se usa el modo REPL (Read-Eval-Print Loop). Permite escribir el
código directamente en la consola y ejecutarlo al presionar Enter
.
Para ejecutar el contenido de un archivo se debe indicar la ruta (absoluta o relativa) del mismo al final de los argumentos del intérprete.
aleph.exe otros_argumentos archivo
La opción -g
permite visualizar el AST con todas las sentencias ejecutadas una
vez que el intérprete finaliza.
En principio se genera un archivo .dot
con la descripción del AST en lenguaje
DOT. Si
Graphviz está instalado y accesible en el
PATH
, se usa para crear una imagen en formato .png
. También se puede usar el
contenido del archivo .dot
en algún intérprete online como
este o
este.
Por ejemplo, para el código:
let a = -5
a + 48/6 * (15 + 5)
Se genera el AST:
-h
Muestra un mensaje de ayuda con las opciones disponibles.-c
Deshabilita el color en los mensajes de error y depuración.-d MODOS
Establece los modos de depuración.MODOS
puede contener:e
Muestra dónde se crean los mensajes de error.i
Activa mensajes de depuración del intérprete.b
Activa la depuración incluida en Bison.
-t N
Establece la capacidad máxima de la tabla de símbolos.-s N
Establece la cantidad máxima de "scopes" activos a la vez.-p F
Convierte el AST de vuelta a código y lo guarda enF
(no implementado).
print("Hola mundo!")
// Python?
// Funciones recursivas
fn Fib(n) {
if n <= 1 { return n }\
else { return Fib(n - 2) + Fib(n - 1) }
}
println(Fib(20))
// Funciones como argumento
fn map(f, iter) {
let new = []
for e in iter { new += [f(e)] }
return new
}
fn doble(elem) { return elem * 2 }
let lista = [1, 2, 3, 4]
let dobles = map(doble, lista)
println(dobles)