CompilerMiniAda est un compilateur construit de zéro en partant uniquement d'une grammaire donnée reprenant la syntaxe du langage Ada.
La grammaire utilisée pour ce projet se trouve dans le dossier /doc/grammaire/grammaire_originale.png.
Elle a été transformée en une grammaire LL(1) à la main pour faciliter l'analyse syntaxique.
Les explications de la construction de cette dernière peuvent être retrouvées dans le rapport du projet.
Les fonctionnalités prises en charge par le compilateur sont les suivantes :
- Les déclarations de variables, avec et sans initialisation.
- Les affectations simples et les affectations d'expressions arithmétiques (addition, soustraction).
- Les expressions arithmétiques (avec variables, gestion des priorités, opérateurs logiques, etc.).
- Les définitions et les appels de fonctions et procédures avec paramètres.
- Les appels récursifs.
- Les constructions
if,whileetforimbriquées.
- L'opération
put(). - Les définitions de type.
- Les records et l'accès aux champs.
- Les opérations sur les records.
- Les records imbriqués.
- Les records en paramètres de fonctions.
- Les records en retour de fonctions.
Pour utiliser l'affichage en graphique, il est nécessaire d'installer les dépendances Python avec la commande suivante :
pip install -r ./python/requirements.txt
La classe principale du projet est org.trad.pcl.Main. Voici les différentes commandes possibles :
- Pour afficher tous les tokens du fichier en entrée :
java Main <file> -t
- Pour générer le graphe AST du fichier en entrée :
java Main <file> -g
- Pour lancer l'analyse sémantique et la génération de code ASM du fichier en entrée :
java Main <file>
Note : le fichier en entrée doit avoir l'extension .canAda.
Des classes de test sont disponibles dans le dossier src/tests/java :
LexerTest: teste la classeLexeren charge de l'analyse lexicale.ParserTest: teste la classeParseren charge de l'analyse syntaxique.SemanticTest: teste la classeSemanticAnalysisVisitoren charge de l'analyse sémantique.
Un dossier AstTest est également disponible avec les classes suivantes :
AstTest: teste la génération de l'arbre de syntaxe abstraite (AST).DeclarationTest: teste la génération des nœuds de déclaration de l'AST.StatementTest: teste la génération des nœuds d'instruction de l'AST.
Ces tests utilisent des fichiers .canAda en entrée qui se trouvent dans le dossier src/main/resources/tests.
Les programmes de démonstration sont disponibles dans le dossier src/main/resources/demo :
multiplicationTable.canAda: programme affichant la table de multiplication de 1 à 10.sumFirstIntegers.canAda: programme calculant la somme desnpremiers entiers.factorial.canAda: programme récursif calculant le factoriel d'un nombre.tictactoe.canAda: programme simulant un jeu de morpion.combatSimulator.canAda: programme simulant un combat entre deux personnages.
CompilerMiniAda est un logiciel open source sous licence MIT. Voir le fichier LICENSE pour plus de détails.
