62 lines
1.9 KiB
Plaintext
62 lines
1.9 KiB
Plaintext
|
#
|
||
|
# Calcul de l'expression E = [(a+b)*(a-b)]+[(b+1)*(b-1)]
|
||
|
# On commence par gérer les variables a et b et demander
|
||
|
# des valeurs à l'utilisateur (avec READ) pour les affecter (avec STOREG).
|
||
|
# Ensuite on utilise la valeur des variables dans le calcul (avec PUSHG)
|
||
|
# L'ordre dans lequel on écrit le code MVàP pour calculer l'expression E
|
||
|
# dépent de l'arbre syntaxique de cette expression.
|
||
|
# Dans le code ci-dessous les commentaires indiquent cet ordre
|
||
|
#
|
||
|
# +(1)
|
||
|
# *(2) *(3)
|
||
|
# +(4) -(5) +(6) -(7)
|
||
|
# Var a Var b Var a Var b Var b Cons 1 Var b Cons 1
|
||
|
#
|
||
|
# Les feuilles sont de type Variable ou constantes.
|
||
|
# Les noeuds internes sont des opérations.
|
||
|
# On navigue dans l'arbre vers le bas, d'abord à gauche, puis on remonte,
|
||
|
# on va explorer le fils droit, puis on remonte et on écrit le code du
|
||
|
# noeud interne.
|
||
|
#
|
||
|
# gestion des variables a et b
|
||
|
|
||
|
PUSHI 0 # a (habite à l'adresse 0)
|
||
|
PUSHI 0 # b (habite à l'adresse 1)
|
||
|
|
||
|
# demander à l'utilisateur les valeurs de a et b
|
||
|
READ
|
||
|
STOREG 0
|
||
|
READ
|
||
|
STOREG 1
|
||
|
|
||
|
|
||
|
# gestion du calcul de l'expression.
|
||
|
|
||
|
|
||
|
PUSHG 0 # met la valeur de a sur la pile (adresse 0)
|
||
|
PUSHG 1 # idem pour b (adresse 1)
|
||
|
ADD # +(4) de mon dessin de l'arbre
|
||
|
PUSHG 0 # met la valeur de a sur la pile
|
||
|
PUSHG 1 # idem pour b
|
||
|
SUB # -(5) de mon dessin de l'arbre
|
||
|
MUL # *(2) de mon dessin de l'arbre
|
||
|
|
||
|
PUSHG 1 # met la valeur de b sur la pile
|
||
|
PUSHI 1 # la constante 1
|
||
|
ADD # +(6) de mon dessin de l'arbre
|
||
|
PUSHG 1 # met la valeur de b sur la pile
|
||
|
PUSHI 1 # la constante 1
|
||
|
SUB # -(7) de mon dessin de l'arbre
|
||
|
MUL # *(3) de mon dessin de l'arbre
|
||
|
|
||
|
ADD # Ajout des deux sous-arbres [(a+b)*(a-b)] et [(b+1)*(b-1)]
|
||
|
# +(1) de mon dessin de l'arbre
|
||
|
|
||
|
WRITE # écrire le résultat de (a+b)*(a-b)
|
||
|
POP # effacer le résultat du calcul
|
||
|
|
||
|
### suppression des variables
|
||
|
POP
|
||
|
POP
|
||
|
HALT
|