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 archivoLa 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:
-hMuestra un mensaje de ayuda con las opciones disponibles.-cDeshabilita el color en los mensajes de error y depuración.-d MODOSEstablece los modos de depuración.MODOSpuede contener:eMuestra dónde se crean los mensajes de error.iActiva mensajes de depuración del intérprete.bActiva la depuración incluida en Bison.
-t NEstablece la capacidad máxima de la tabla de símbolos.-s NEstablece la cantidad máxima de "scopes" activos a la vez.-p FConvierte 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)