semaine 5

This commit is contained in:
2022-11-09 08:41:35 +01:00
parent 73cf83dbee
commit 16fb5d0347
18 changed files with 13760 additions and 1 deletions

13
MVaP/3n+2.mvap Normal file
View File

@@ -0,0 +1,13 @@
# calcule : 2 + 3 * n
PUSHI 2
LABEL 1
PUSHI 3
ADD
WRITE
DUP
PUSHI 100
INF
JUMPF 2
JUMP 1
LABEL 2
HALT

BIN
MVaP/3n+2.mvap.cbap Normal file

Binary file not shown.

36
MVaP/ALIRE Normal file
View File

@@ -0,0 +1,36 @@
# La machine virtuelle à pile.
Une machine pédagogique pour donner une idée de ce qu'est l'assembleur.
Dans le cadre d'un cours de compilation, par exemple en L3 informatique, on peut demander aux étudiants de coder un compilateur qui va transcrire un langage de haut niveau similaire à du python (sans objets et avec quelques types simples entiers, flottants, tableaux) vers du code MVàP.
## Contenu du répertoire.
* 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.jar Une archive java qui propose 2 exécutables
MVaPAssembler (assemble en un binaire)
CBaP (interprète le binaire).
* antlr-4.5.2-complete.jar Une archive java contenant de nombreux binaires permettant d'écrire des compilateurs sur lequel le code de la MVàP s'appuit.
## Pour utiliser la MVàP
Il faut avoir java d'installé sur sa machine (c'est le cas si vous passez par proxmox des machines de l'IUT).
** Pour exécuter du code mvap, il faut :
1- Assembler :
$ java -cp antlr-4.5.2-complete.jar:MVaP.jar MVaPAssembler add.mvap
ou avec des traces (option -d) :
$ java -cp antlr-4.5.2-complete.jar:MVaP.jar MVaPAssembler -d add.mvap
ce qui produit le fichier add.mvap.cbap
Le fichier .cbap (code binaire à pile) est du binaire que la machine peut exécuter.
2- Exécuter :
$ java -jar MVaP.jar add.mvap.cbap
ou pour mieux comprendre avec des traces :
$ java -jar MVaP.jar -d add.mvap.cbap

61
MVaP/ALIRE~ Normal file
View File

@@ -0,0 +1,61 @@
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

BIN
MVaP/MVaP.jar Normal file

Binary file not shown.

7
MVaP/add.mvap Normal file
View File

@@ -0,0 +1,7 @@
# calcule : 2 + 40
PUSHI 2
PUSHI 40
ADD
WRITE
POP
HALT

BIN
MVaP/add.mvap.cbap Normal file

Binary file not shown.

Binary file not shown.

27
MVaP/test.mvap Normal file
View File

@@ -0,0 +1,27 @@
# On prend au départ 2
# on ajoute 3 et on élève le tout au carré
# on recommence et on s'arrête dès que l'on dépasse 100
PUSHI 2
LABEL 1
PUSHI 3
ADD
WRITE
CALL 2
WRITE
# a-t-on un sommet de pile < 100 ?
DUP
PUSHI 100
SUP
JUMPF 1
# le nombre affiché est plus grand que 100, on s'arrête
HALT
# procédure qui élève un nombre au carré
LABEL 2
# récupère le premier paramètre (-3 = -1 - 2)
PUSHL -3
DUP
MUL
# on a donc son carré en sommet de pile
STOREL -3
# on remplace la valeur
RETURN

BIN
MVaP/test.mvap.cbap Normal file

Binary file not shown.