public class SuiteTraduite { // v:main memoire de 0 // reste pile des appels à U avec // (ar,n,vr,v)... public static int memoire[] = new int[1000]; public static int insC = 1; public static int sommetDePile = 1; public static void main(String []a) { while (true) { switch(insC) { case 1: memoire[sommetDePile] = insC+1; memoire[sommetDePile+1] = 100; // param = 100 sommetDePile += 4; insC = 1000; // premier ins. de U break; case 2: sommetDePile -= 4; // récupère la valeur de retour memoire[0] = memoire[sommetDePile+2]; insC++; break; case 3: System.out.println("U(100)="+memoire[0]); insC++; break; case 4: System.exit(0); // traduction de U case 1000: System.out.println("appel à U avec n="+memoire[sommetDePile-3]); System.out.println("sommetDePile="+sommetDePile); if (memoire[sommetDePile-3]==0) { insC++; } else { insC = 1002; } break; case 1001: // return 5 memoire[sommetDePile-2] = 5; insC = memoire[sommetDePile-4]; break; case 1002: // else memoire[sommetDePile] = insC+1; memoire[sommetDePile+1] = memoire[sommetDePile-3]-1; sommetDePile += 4; insC = 1000; break; case 1003: sommetDePile -= 4; memoire[sommetDePile-1] = memoire[sommetDePile+2]; insC++; case 1004: memoire[sommetDePile-1] = memoire[sommetDePile-1]+7; insC++; break; case 1005: // return v; memoire[sommetDePile-2] = memoire[sommetDePile-1]; insC = memoire[sommetDePile-4]; break; } } } }