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
}
}
}
}