TP individuel, à finir à la maison et à rendre |
par email au chargé de TP à J+3 au matin |
/308/Public_Enseignement/TER-COMPIL/tp2/arithc.tgz
ast.mli | la syntaxe abstraite d'Arith |
lexer.mll | l'analyseur lexical d'Arith |
parser.mly | l'analyseur syntaxique d'Arith |
syntaxerr.ml | une fonction pour localiser les erreurs lexicales et syntaxiques |
dans le fichier source | |
codevm.mli | les instructions de la machine virtuelle |
compile.ml | les fonctions de production du code de la machine virtuelle |
main.ml | le programme principal du compilateur |
Makefile | les règles pour automatiser la compilation du compilateur |
/308/Public_Enseignement/TER-COMPIL/tpcompil.csh
set ident = expr |
print expr |
<inst> | ::= | set <ident> = <expr> |
| | print <expr> | |
<expr> | ::= | <entier> |
| | <ident> | |
| | <expr> <binop> <expr> | |
| | <unop> <expr> | |
| | let <ident> = <expr> in <expr> | |
| | ( <expr> ) | |
<binop> | ::= | + | - | * | / |
<unop> | ::= | - |
Code | Description | sp | Condition |
ADD | P[sp-2]:=P[sp-2]+P[sp-1] | sp-1 | P[sp-2] et P[sp-1] entiers |
SUB | P[sp-2]:=P[sp-2]-P[sp-1] | sp-1 | P[sp-2] et P[sp-1] entiers |
MUL | P[sp-2]:=P[sp-2]*P[sp-1] | sp-1 | P[sp-2] et P[sp-1] entiers |
DIV | P[sp-2]:=P[sp-2]/P[sp-1] | sp-1 | P[sp-2] et P[sp-1] entiers |
PUSHI n | P[sp]:=n | sp+1 | n entier |
PUSHN n | P[sp]:=0 ...P[sp+n-1]:=0 | sp+n | n entier |
PUSHG n | P[sp]:=P[gp+n] | sp+1 | n entier |
STOREG n | P[gp+n]:=P[sp-1] | sp-1 | n entier |
PUSHL n | P[sp]:=P[fp+n] | sp+1 | n entier |
STOREL n | P[fp+n]:=P[sp-1] | sp-1 | n entier |
WRITEI | imprime P[sp-1] sur l'écran | sp-1 | P[sp-1] entier |
START | Affecte la valeur de sp à fp | sp | |
STOP | Arrête l'exécution du programme | sp |
This document was translated from LATEX by HEVEA.