public class ProgAppelFonctionTraduit {
  public static int []memoire = new int[1];
  // 0 : sert à stocker l'adresse à laquelle il faudra
  // revenir quand l'appel à f() sera terminé
  public static int insC;
  public static void main(String []a) {
    insC = 1;
    while (true) {
      switch(insC) {
        // traduction du main du programme original
      case 1:
        System.out.println("debut");
        insC++; break;
      case 2:
        memoire[0] = insC+1; // stockage point de retour
        insC = 7; break; // saut vers 1ere instruction de f()
      case 3:
        System.out.println("entre les deux appels");
        insC++; break;
      case 4:
        memoire[0] = insC+1; // stockage point de retour
        insC = 7; break; // saut vers 1ere ins de f();
      case 5:
        System.out.println("a la fin");
        insC++; break;
      case 6:
        System.exit(0);
        // traduction de la fonction f
      case 7:
        System.out.println("je suis dans f()");
        insC = memoire[0]; break; // retour point d'appel
      }
    }
  }
}