public class ProgAppelFonctionTraduit2 { public static int []memoire = new int[2]; // 0 : sert à stocker l'adresse à laquelle il faudra // revenir quand l'appel à f() sera terminé // 1 : sert à stocker l'adresse à laquelle il faudra // revenir quand l'appel à g() 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 f insC = 8; 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 f insC = 8; break; // saut vers 1ere ins de f(); case 5: System.out.println("a la fin"); insC++; break; case 6: memoire[1] = insC+1; // stockage retour g insC = 11; break; // saut 1ere ins g case 7: System.exit(0); // traduction de la fonction f case 8: System.out.println("je suis dans f()"); insC++; break; case 9: memoire[1] = insC+1; // stockage retour g insC = 11; break; // saut vers 1ere ins g case 10: insC = memoire[0]; break; // retour point d'appel // traduction g case 11: System.out.println("dans g()"); insC = memoire[1]; break; // retour point d'appel } } } }