diff --git a/MVaP/ALIRE~ b/MVaP/ALIRE~ deleted file mode 100644 index 765a7fa..0000000 --- a/MVaP/ALIRE~ +++ /dev/null @@ -1,61 +0,0 @@ -add.mvap Un exemple simple de programme -3n+2.mvap Un exemple moins simple de programme -test.mvap Un exemple avec appel de fonction -MVaP.g4 Le parser du langage qui produit un analyseur ANTLR4 -MVaPAssemblerListener.java Méthode appelée par le parcours de l'arbre d'analyse - qui produit du code binaire (CB) -MVaPAssembler.java L'assembleur qui produit du code binaire -Pile.java Un gestionnaire de pile d'entiers -CBaP.java La machine virtuelle pour le code binaire à pile - - -** Pour compiler l'assembleur et le machine virtuelle, il faut : - - 1- Avoir antlr dans son CLASSPATH : - $ export CLASSPATH=.:/usr/local/java/antlr-4.4-complete.jar - ou ajouter aux commandes : -cp .:/usr/local/java/antlr-4.4-complete.jar - - 2- Lancer antlr sur MVaP.g4 - $ java -jar /usr/local/java/antlr-4.4-complete.jar MVaP.g4 - - 3- Compiler l'assembleur et la machine virtuelle (il suffit de demander la - compilation des fichiers contenant les main, javac compilera les autres - classes automatiquement...) - $ javac MVaPAssembler.java CBaP.java - - -** Pour exécuter du code mvap, il faut : - - 1- Assembler : - $ java MVaPAssembler add.mvap - ou avec des traces : - $ java MVaPAssembler -d add.mvap - ce qui produit le fichier add.mvap.cbap - - 2- Exécuter : - $ java CBaP add.mvap.cbap - ou pour mieux comprendre avec des traces : - $ java CBaP -d add.mvap.cbap - - -** Pour construire le jar, il faut : - 1- avoir un META-INF/MANIFEST pour inclure le jar antlr dans le CLASSPATH : -Manifest-Version: 1.0 -Version: 2.1 -Main-Class: CBaP -Class-Path: /usr/local/java/antlr-4.4-complete.jar - - 2- Contruire le jar avec : - $ jar cfm MVaP.jar META-INF/MANIFEST *.class - - - On peut aussi faire tout simplement : - $ make - -** Utilisation du jar : - - 1- Assembler : - $ java -cp .:/usr/local/java/antlr-4.4-complete.jar:MVaP.jar MVaPAssembler add.mvap - - 2- Exécuter : - $ java -jar MVaP.jar -d add.mvap.cbap diff --git a/MVaP/ExoVoyager.mvap b/MVaP/ExoVoyager.mvap index 19d7214..4272041 100644 --- a/MVaP/ExoVoyager.mvap +++ b/MVaP/ExoVoyager.mvap @@ -11,3 +11,61 @@ # # # On souhaite afficher 1 ou 2 selon que le parcours 1 ou parcours 2 est le plus court en temps. +# +# calcul du parcours 1 +# PUSHI 30 +# PUSHI 45 +# PUSHI 20 +# ADD +# ADD +# calcul du parcours 2 +# PUSHI 55 +# PUSHI 16 +# PUSHI 20 +# ADD +# ADD +# Comparons les deux durées +# INF +# 0 veut dire non, différent de 0 veut dire oui +# HALT + +### On a fait le test (30+45+20 < 55+16+20)? +### On veut vraiment faire +### if (30+45+20 < 55+16+20): +### write 1 +### else : +### write 2 +# calcul du parcours 1 +PUSHI 30 +PUSHI 45 +PUSHI 20 +ADD +ADD +# calcul du parcours 2 +PUSHI 55 +PUSHI 16 +PUSHI 20 +ADD +ADD +# Comparons les deux durées +INF +# 0 veut dire non, différent de 0 veut dire oui +JUMPF 0 +# +# then +PUSHI 1 +WRITE +POP +# +JUMP 1 +LABEL 0 +# +# else +PUSHI 2 +WRITE +POP +# +LABEL 1 +# la suite +HALT + diff --git a/MVaP/ExoVoyager2.mvap b/MVaP/ExoVoyager2.mvap new file mode 100644 index 0000000..6a51a11 --- /dev/null +++ b/MVaP/ExoVoyager2.mvap @@ -0,0 +1,77 @@ +### On souhaite comparer 2 parcours en transport public entre l'université de Créteil et l'IUT de SF. +# Parcours 1 : +# prendre la ligne 1 puis 8 pour Gare de Lyon (30 minutes) +# prendre la ligne R pour Fontainebleau-Avon (45 minutes) +# prendre un vélo pour l'IUT (20 minutes). +# vs +# Parcours 2 : +# marcher au Vert de Maison prendre la ligne D pour Melun (55 minutes) +# changer à Melun prendre la ligne R pour Fontainebleau-Avon (16 minutes) +# prendre un vélo pour l'IUT (20 minutes). +# +# +# On souhaite afficher 1 ou 2 selon que le parcours 1 ou parcours 2 est le plus court en temps. +# Puis on souhaite afficher la durée du parcours optimal +# +# A compléter +# +# réserve de la place pour la durée du parcours 1 +PUSHI 0 +# réserve de la place pour la durée du parcours 2 +PUSHI 0 +# dp1 habite à l'adresse 0 +# dp2 habite à l'addresse 1 +# +# +# calcul du parcours 1 +PUSHI 30 +PUSHI 45 +PUSHI 20 +ADD +ADD +# dupliquer le résultat pour le stocker dans dp1 +DUP +STOREG 0 +# calcul du parcours 2 +PUSHI 55 +PUSHI 16 +PUSHI 20 +ADD +ADD +# dupliquer le résultat pour le stocker dans dp2 +DUP +STOREG 1 +# Comparons les deux durées +INF +# 0 veut dire non, différent de 0 veut dire oui +JUMPF 0 +# +# then +PUSHI 1 +WRITE +POP +# charge la valeur de dp1 en haut de la pile +PUSHG 0 +WRITE +POP +# +JUMP 1 +LABEL 0 +# +# else +PUSHI 2 +WRITE +POP +# charge la valeur de dp2 en haut de la pile +PUSHG 1 +WRITE +POP +# +LABEL 1 +# la suite +# +# vide la mémoire des variables globales dp1 et dp2 +POP +POP +HALT + diff --git a/MVaP/ExoVoyager3.mvap b/MVaP/ExoVoyager3.mvap new file mode 100644 index 0000000..0df2a20 --- /dev/null +++ b/MVaP/ExoVoyager3.mvap @@ -0,0 +1,74 @@ +### On souhaite comparer 2 parcours en transport public avec au plus deux changements +### L'utilisateur doit nous donner ces 6 durées. +# Parcours 1 : +# 3 durées +# vs +# Parcours 2 : +# 3 durées +# +# +# On souhaite afficher 1 ou 2 selon que le parcours 1 ou parcours 2 est le plus court en temps. +# Puis on souhaite afficher la durée du parcours optimal +# +# A compléter +# +# réserve de la place pour la durée du parcours 1 +PUSHI 0 +# réserve de la place pour la durée du parcours 2 +PUSHI 0 +# dp1 habite à l'adresse 0 +# dp2 habite à l'addresse 1 +# +# +# calcul du parcours 1 +READ +READ +READ +ADD +ADD +# dupliquer le résultat pour le stocker dans dp1 +DUP +STOREG 0 +# calcul du parcours 2 +READ +READ +READ +ADD +ADD +# dupliquer le résultat pour le stocker dans dp2 +DUP +STOREG 1 +# Comparons les deux durées +INF +# 0 veut dire non, différent de 0 veut dire oui +JUMPF 0 +# +# then +PUSHI 1 +WRITE +POP +# charge la valeur de dp1 en haut de la pile +PUSHG 0 +WRITE +POP +# +JUMP 1 +LABEL 0 +# +# else +PUSHI 2 +WRITE +POP +# charge la valeur de dp2 en haut de la pile +PUSHG 1 +WRITE +POP +# +LABEL 1 +# la suite +# +# vide la mémoire des variables globales dp1 et dp2 +POP +POP +HALT +