public class Function2Traduit2 {
  public static void main(String []args) {
    int []memoire = new int[10000];
    int instruction = 1;
    int sommetDePile = 0;
    while (true) {
        System.err.println(">>>>>>Instruction à exécuter "+instruction);
      switch (instruction) {
      case 1:
        System.out.println("Début");
        instruction++; break;
      case 2: // préparation de l'appel à f et de son retour
        memoire[sommetDePile] = instruction+1;
        sommetDePile++;
        instruction = 7; break;
      case 3:
        System.out.println("Milieu");
        instruction++; break;
      case 4: // préparation de l'appel g et de son retour
        memoire[sommetDePile] = instruction+1;
        sommetDePile++;
        instruction = 9; break;
      case 5:
        System.out.println("Fin");
        instruction++; break;
      case 6:
        System.exit(0);
      case 7: // début de f();
        System.out.println("Je suis dans f()");
        instruction++; break;
      case 8: // revenir au point indiqué au moment de l'appel
        // ce point est indiqué en sommet de la pile
        sommetDePile--;
        instruction = memoire[sommetDePile];
        break;
      case 9: // début de g();
        System.out.println("Je suis dans g()");
        instruction++; break;
      case 10: // préparation de l'appel à f
        memoire[sommetDePile] = instruction+1;
        sommetDePile++;
        instruction = 7; break;
      case 11:
        sommetDePile--;
        instruction = memoire[sommetDePile];
        break;
      }
    }
  }
}