/** * Traduction en langage macine d'une séquence (celle de s1.java). * Chaque instruction de la séquence d'origine est numérotée et * traduite en instruction correspondante de la séquence de cas * de la machine cible. * La traduction consiste aussi à représenter les variables * symboliques du programme source en cases mémoire de la machine * cible. On attribue à toute variables statique du programme * source, une adresse dans la mémoire de la machine cible. * Cette attribution est arbitraire, pourvu qu'il n'y a pas * de recouvrement, i.e. que toute variable du programme source * aie une adresse machine différente des autres. */ public class s1traduit { public static void main(String []a) { // i:0, j:1 ; C'est un choix. int []memoire = new int[2]; int instructionCourante = 1; boolean fin = false; while (!fin) { // tant que la machine ne doit pas s'arrêter switch(instructionCourante) { // réaliser la simulation de l'instruction de numéro donné case 1: // traduction de i = 0; memoire[0] = 0; break; case 2: // traduction de j = i+3; memoire[1] = memoire[0]+3; break; case 3: // traduction de System.out.println(i) System.out.println(memoire[0]); break; case 4: // traduction de i = 5; memoire[0] = 5; break; case 5: // traduction de System.out.println(i+" "+j); System.out.println(memoire[0]+" "+memoire[1]); break; case 6: // ajout d'une instruction implicitement présente dans le code source, l'arrêt de la fonction main... fin = true; break; } instructionCourante++; // sauter à l'instruction suivante... } } }