CompilerMiniAda
Compilateur complet pour un sous-ensemble du langage Ada — lexer, parser, analyse sémantique et génération de code assembleur.
Rôle : Créateur
Le Projet
CompilerMiniAda est un compilateur complet pour "canAda", un sous-ensemble du langage Ada. Il implémente l'intégralité du pipeline de compilation : analyse lexicale, parsing, analyse sémantique et génération de code assembleur — avec exécution via une machine virtuelle.
Pipeline de Compilation
Analyse Lexicale
Tokenisation des fichiers source .canAda en un flux de tokens typés (mots-clés, identifiants, opérateurs, littéraux). Affichage optionnel des tokens pour le débogage.
Parsing & AST
Parser à descente récursive construisant un Arbre Syntaxique Abstrait complet. L'AST peut être exporté en JSON ou visualisé graphiquement via Graphviz.
Analyse Sémantique
Vérification des types, construction de la table des symboles et validation sémantique — assurant la cohérence des types, la résolution de portée des variables et la vérification des modes de paramètres (in, out, in out).
Génération de Code
Production de code assembleur (fichiers .s) ciblant une architecture de machine virtuelle PCL, avec gestion de l'allocation des registres et séquencement des instructions.
Fonctionnalités du Langage
- Procédures et fonctions avec paramètres (in, out, in out)
- Types record (similaires aux structs)
- Types de base : integer, character, boolean
- Structures de contrôle : if/elsif/else, boucles
- Fonctions récursives
- E/S intégrées : put(), putInt(), new_line()
Programmes d'Exemple
Le compilateur est livré avec plusieurs programmes : factorielle récursive, simulateur de combat RPG avec records, jeu de morpion et tables de multiplication — démontrant l'ensemble des fonctionnalités supportées.
Stack Technique
- Java 17 pour l'implémentation du compilateur
- Gradle (Kotlin DSL) pour le build
- AspectJ pour le logging au niveau méthode sur chaque phase
- JUnit 5 + Mockito pour les tests
- Python + Graphviz pour la visualisation de l'AST