/**
 * 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...
    }
  }
}