Mettre tout ensemble
générer du code mmixal pour un ``langage'' simple

Expressions arithmétiques

Variables et Affectations arithmétiques

EXPRESSIONS BOOLEENNES

Calcul des valeurs booléennes (pas forcément 0/1!) par comparaison de deux valeurs arithmétiques
CMP, suivi de

Expressions plus compliquées par AND/OR etc. nécessitent que le code pour une comparaison peut faire le calcul dans n'importe quel registre

Les Boucles

Code simple pour boucles while et repeat normales
L1 Expression.code
BZ Expression.place, L2
Instruction.code
JMP L1
L2

et
L1
Instruction.code
Expression.code
PBP Expression.place, L1

Le deuxième est plus court et plus efficace!
Pareil pour les if-then et les if-then-else ...

Les étiquettes

Il faut une fonction qui génère des étiquettes uniques
Et une méthode de placer la bonne étiquette (une seule) sur une instruction du code généré
peut-être un attribut ``etiquette'' de chaque expression et instruction (source)
et un attribut hérité (?) signalant si l'étiquette doit être émise

COMMENT FAIRE MIEUX

Presque toujours une expression booléenne est évaluée pour être utilisée immédiatement dans la décision d'une if ou d'une boucle
donc, pas besoin de calculer la vraie forme booléenne (0/1 ou autre)
quand la valeur est connue, aller directement à une étiquette
nécessite des attributs hérités pour l'étiquette appropriée si la valeur est positive/négative
facilement traité par une pile




File translated from TEX by TTH, version 3.05.
On 22 Mar 2005, 13:18.