/**
* Traduction en langage macine d'une séquence (celle de s1.java).
* Chaque instruction de la séquence d'origine est numérotée et
* traduite en instruction correspondante de la séquence de cas
* de la machine cible.
* La traduction consiste aussi à représenter les variables
* symboliques du programme source en cases mémoire de la machine
* cible. On attribue à toute variables statique du programme
* source, une adresse dans la mémoire de la machine cible.
* Cette attribution est arbitraire, pourvu qu'il n'y a pas
* de recouvrement, i.e. que toute variable du programme source
* aie une adresse machine différente des autres.
*/
public class s1traduit {
public static void main(String []a) {
// i:0, j:1 ; C'est un choix.
int []memoire = new int[2];
int instructionCourante = 1;
boolean fin = false;
while (!fin) { // tant que la machine ne doit pas s'arrêter
switch(instructionCourante) { // réaliser la simulation de l'instruction de numéro donné
case 1: // traduction de i = 0;
memoire[0] = 0;
break;
case 2: // traduction de j = i+3;
memoire[1] = memoire[0]+3;
break;
case 3: // traduction de System.out.println(i)
System.out.println(memoire[0]);
break;
case 4: // traduction de i = 5;
memoire[0] = 5;
break;
case 5: // traduction de System.out.println(i+" "+j);
System.out.println(memoire[0]+" "+memoire[1]);
break;
case 6: // ajout d'une instruction implicitement présente dans le code source, l'arrêt de la fonction main...
fin = true;
break;
}
instructionCourante++; // sauter à l'instruction suivante...
}
}
}