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