Réponse au prompt “Décris-moi les étapes pour que ce programme accepte le mot-clé REPETE (comme dans prog2.logo)”

codex

26 mai 2026

Pour ajouter repete, il faut intervenir surtout dans la compilation des instructions, puis ajouter une instruction capable de boucler.

Le lexer est presque prêt : dans Lexer.h, kwRepeat = "repete" existe déjà, et Lexer.cpp reconnaît déjà [ et ] comme signes. Donc le texte repete 6 [ avance 40 droite 60 ] est déjà découpé correctement.

Les étapes :

  1. Créer une classe Repeat Elle hériterait de Instruction, comme Move, Turn ou FunctionCall.

    Elle doit stocker :

  2. Modifier Program::parseKeyword Ajouter un cas :

    } else if (token->second == kwRepeat) {
        myInstructions.push_back(std::make_unique<Repeat>(tokens, ++token, mainProgram));
    }

    Le constructeur de Repeat devra ensuite :

  3. Adapter le parsing des blocs Aujourd’hui, Program s’arrête surtout quand il rencontre fin, utilisé pour les fonctions pour ... fin.

    Pour repete, il faut aussi pouvoir parser un bloc qui s’arrête sur ].

    Deux approches possibles :

    La première approche est plus propre.

  4. Gérer l’exécution de la boucle Le plus cohérent avec l’architecture actuelle est de traiter le bloc répété comme un petit sous-programme.

    Quand Repeat::doExecute() est appelée :

    Quand le bloc se termine, Repeat::doGetNext(..., BackFromSubroutine) décide :

  5. Stocker le compteur au bon endroit Attention : l’objet Repeat ne devrait idéalement pas stocker directement l’état courant de la boucle, car la même instruction peut être réutilisée lors d’appels de fonctions.

    Le mieux est de stocker le compteur dans ExecutionContext, qui représente justement l’état d’exécution courant. Il contient déjà une map myVariables, mais elle est peu utilisée. Tu peux l’étendre pour gérer des compteurs internes de boucle.

  6. Ajouter Repeat.cpp / Repeat.h dans le CMake Une fois la classe créée, il faut l’ajouter dans src/main/CMakeLists.txt, comme les autres fichiers.

  7. Tester avec prog2.logo Le programme contient :

    Le résultat attendu est que repete 6 [...] exécute six fois le bloc avance 40 droite 60, donc dessine un hexagone.

Le gros point de conception est donc celui-ci : repete n’est pas une commande simple comme avance; c’est une instruction de contrôle qui contient elle-même un bloc d’instructions. C’est pour ça qu’elle touche à la fois au parsing et à la pile d’exécution.