correction exos et exemples MVaP
This commit is contained in:
parent
967f7bf622
commit
cc6c2f49f9
61
MVaP/ALIRE~
61
MVaP/ALIRE~
@ -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
|
|
@ -11,3 +11,61 @@
|
|||||||
#
|
#
|
||||||
#
|
#
|
||||||
# On souhaite afficher 1 ou 2 selon que le parcours 1 ou parcours 2 est le plus court en temps.
|
# 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
|
||||||
|
|
||||||
|
77
MVaP/ExoVoyager2.mvap
Normal file
77
MVaP/ExoVoyager2.mvap
Normal file
@ -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
|
||||||
|
|
74
MVaP/ExoVoyager3.mvap
Normal file
74
MVaP/ExoVoyager3.mvap
Normal file
@ -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
|
||||||
|
|
Loading…
Reference in New Issue
Block a user