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.
|
||||
#
|
||||
# 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