Compilateur du langage LOOC (Langage Orienté Objet pour la Compilation) produisant du code assembleur microPIUP/ASM
Projet de Compilation TELECOM Nancy 2016-2017
-
Auteurs
- DUBOIS Nicolas
- GARCIA Guillaume
- HINSBERGER Laure
- ZAMBAUX Gauthier
-
Dépendances
- bash
- default-jdk (Java Development Kit)
- antlr-3.3-complete.jar (fourni dans le git)
- graphviz (pour visualiser les AST)
- freeglut3 libgraphviz4 libgts-0.7-5 libgts-bin libgd2-xpm (pour graphviz, conseil : utiliser gdebi)
- eog (ouvrir des png en ligne de commande)
-
Build & execute
- Lancez le script analyseurs/createLexParsCompile.sh
- cd analyseurs/
- java Clooc <path/du/programme/à/compiler>
-
Problèmes connus
- Avec une version de java supérieure à 8, une erreur récurrente (error(10) : NullPointerException ...) se produit.
- Pour la résoudre, un patch a été mis au point pour corriger le jar d'ANTLR. Suivez les instructions :
cd patch/
./patch-antlr.sh
-
Forge TNCY
- Un dépôt du projet est également présent sur la forge de TELECOM Nancy sous Projets Divers >> COMPIL 2017 >> garcia62 (accès autorisé seulement pour les développeurs pour le moment)
- L'adresse du dépôt local sur le réseau de l'école est : http://forge.telecomnancy.univ-lorraine.fr/git/garcia62u
-
Manipulations préalables pour ANTLR
- A la fin du fichier ~/.bashrc, ajouter la ligne
export CLASSPATH=/chemin/vers/antlr-3.3-complete.jar:.:$CLASSPATH
- Assurez vous que votre terminal utiliser le shell bash avec la commande :
bash
- A la fin du fichier ~/.bashrc, ajouter la ligne
-
Compiler une grammaire .g : Produit un Lexer.java et un Parser.java
java org.antlr.Tool grammaire.g
- OU
java -jar antlr-3.3-complete.jar grammaire.g
-
Compiler une classe Test.java avec les Lexer et Parser précédents
javac grammaireLexer.java grammaireParser.java Test.java
-
Lancer la classe Test
java Test
-
Dans nos exemples sous ANTLR/
- Test reconnait des expressions de calculs simples telles que x=1 ou x*y. TestArbre reconnait des arbres, vus en TD de TRAD, tels que (1.2) ou (1,5,(1.8)).
- Pour utiliser ces tests, rentrer les mots à tester avec un retour à la ligne à chaque fois, puis appuyer sur Ctrl+D pour lancer la vérification. Si l'un des mots n'appartient pas à la grammaire, Test/TestArbre renverra une erreur pointée.
-
Solution simple : le script clooc
- Lancer
./clooc path/fichier.looc
où fichier.looc est le fichier à traiter. - Laissez-vous guider par le script qui ajustera tout automatiquement ou sur demande.
- Veillez à avoir graphiz et eog d'installé sur votre distrib.
- Lancer
-
Solution pas-à-pas : Lire les étapes suivantes
- Passer en bash avec
bash
- A la fin du fichier ~/.bashrc, ajouter la ligne
export CLASSPATH=/chemin/vers/antlr-3.3-complete.jar:.:$CLASSPATH
- Effectuez
source ~/.bashrc
- Passez à la suite :
- Passer en bash avec
-
Build du compilateur
cd analyseurs/
- Si ce n'est pas déjà le cas, rendre exécutable le builder
chmod +x createLexParsCompile.sh
./createLexParsCompile.sh
-
Vérifier un programme Looc
cd analyseurs/
java Clooc path/du/programme/à/compiler
-
Construire l'AST au format DOT d'un programme Looc
cd analyseurs/
java Clooc -T path/du/programme/à/compiler path/vers/AST.dot
-
Convertir les AST au format DOT en image PNG
cd AST/
-
- Si ce n'est pas déjà le cas, rendre exécutable le script
chmod +x exportpng.sh
- Si ce n'est pas déjà le cas, rendre exécutable le script
./exportpng.sh
-
Visualiser un AST au format .dot avec ZGRViewer
- Lancez ZGRViewer (
./run.sh
dans son dossier d'installation) - Si ce n'est pas déjà fait, allez dans View > Préférences pour choisir les dossiers tmp/ et graphs/, ainsi que l'endroit où se situe l'exécutable dot (usuellement sous /usr/bin/dot)
- File > Open > dot > AST.dot
- Vous pouvez exporter l'arbre au format .svg ou .png avec File > Export to ...
- Lancez ZGRViewer (
-
Exporter un AST au format DOT en image PNG en ligne de commande
dot -Tpng AST.dot -o ASTimage.png
-
Demander aux profs pour la ligne "for ..." dans la grammaire, elle est étrange (expression..expression)=> Réglé. La grammaire officielle sera corrigée prochainement par les profs, la nôtre l'est déjà. -
Rendre la règle expression non-récursive gauche=> Réglé. Voir pour corriger les deux warning restant. -
Préparer le terrain pour analyse syntatixe (analyse lexical presque OK)=> OK. Grammaire fonctionnelle, reste à la roder sur des tests poussés. -
Enfin, faire la construction de l'AST=> OK dans les grandes lignes, reste à le simplifier, et à le tester de façon poussée aussi. -
Demander aux profs où est ce git local (l'adresse locale donnée n'existe pas)=> C'est OK le git de github a été mirroré sur celui de la forge. -
Finir complètement la construction de l'AST (voir plus bas)
*Revoir les opérateurs (+ ) Revoir opérateurs de comparaison TRAITER LA PRIORITE DES OPERATEURS => règles à revoir pour TDS
-
Commencer la construction de table des symboles => Commencée, attendre la fin de construction de l'AST pour pouvoir implémenter complètement la TDS (surtout niveaux opérations arithmétiques/logiques)