Langage de programmation maison implémenté en Haskell, avec interpréteur Scheme/LISP et compilateur vers bytecode sur VM à pile.
Telecharger & tester
make && ./glados fichier.glados (interpreteur d'un langage fonctionnel type Lisp, ecrit en Haskell)
GLaDOS est un projet Epitech (Tek3, module de langages fonctionnels) qui consiste a concevoir et implementer, en Haskell, un langage de programmation complet, de l'interpreteur minimal jusqu'a un veritable pipeline de compilation. Le projet est volontairement structure en paliers progressifs : une phase de tests obligatoire (Partie 0), un interpreteur LISP minimal (Partie 1), puis une extension libre du langage sur quatre axes techniques (Partie 2).
La Partie 1 impose l'implementation d'un interpreteur de S-expressions au comportement proche de Chez-Scheme, lu depuis l'entree standard : atomes (entiers signes en base 10, symboles), listes entre parentheses, et gestion des erreurs qui doit interrompre l'execution avec le code de sortie 84. Le langage doit supporter des entiers 64 bits, des booleens (#t/#f), la liaison de valeurs via define, les lambdas et fonctions nommees recursives, une forme conditionnelle if, ainsi qu'un socle de fonctions natives (eq?, <, +, -, *, div, mod) traitees comme des symboles lies a des fonctions ordinaires.
La Partie 2 demande de faire evoluer ce coeur minimal selon quatre axes independants : la securite et la robustesse du typage, une syntaxe/grammaire propre (obligatoirement non basee sur des s-expressions, avec sucre syntaxique et operateurs infixes a priorites), l'evaluation et la compilation (implementation obligatoire d'une machine virtuelle avec son propre jeu d'instructions plates, et d'un compilateur traduisant le langage source vers cette VM, avec bytecode et desassemblage recommandes), et enfin une documentation complete et accessible (manuel utilisateur, grammaire formelle en BNF, description du processus de compilation, revue de securite).
Contrainte technique forte : seules une librairie de parsing personnelle ou parsec/megaparsec sont autorisees pour l'analyse syntaxique, et les constructions mutables ou unsafe sont strictement interdites, imposant une approche purement fonctionnelle. Le projet exige egalement une politique de tests unitaires et d'integration complete avec mesure de couverture, ainsi qu'un pipeline de CI/CD produisant automatiquement un binaire fonctionnel a chaque push, verifie via une reconstruction complete depuis un clone Git propre a chaque soutenance.
Les bonus couvrent un large spectre : types supplementaires (flottants, symboles-donnees, listes, chaines, structures), effets de bord (E/S, fichiers, FFI), inference de types, generation de backends additionnels (bytecode pour JVM, WebAssembly, ou code natif x86_64/ARM/RISC-V via LLVM), une seconde VM ecrite dans un autre langage, de la metaprogrammation façon macros, des constructs imperatifs (boucles, variables mutables), et des optimisations comme la tail-call optimization, chacune devant etre appuyee par des benchmarks.
Projet suivant
