L’arbre d’AP2 devient des octets pour une petite machine à pile. Quatre ateliers se suivent : définir les instructions et leur format binaire, produire ce code et l’exécuter sur une pile, donner des cases aux variables, puis assembler les étiquettes et les sauts d’un case. Les arbres sont écrits à la main dans les notebooks : votre parser d’AP2 n’a pas besoin d’être terminé. Une cinquième étape, facultative et hors rendu, ajoute les appels de fonctions.

Nous commençons par quelques repères sur le processeur, mémoire adressée, registres, PC, pile et cache, afin que chaque mot du TP ait été vu avant de servir. Chaque étape alterne ensuite une courte explication, un essai dans Livebook et une reprise entre nous. Juste avant chaque consigne, une slide rappelle les formes Elixir que le notebook utilise, par ex. les motifs binaires, with, les maps ou Enum.reduce, et le notebook les réexplique au moment où elles servent. Vous recopiez votre propre code d’une étape à la suivante ; aucun module n’est partagé automatiquement entre deux notebooks. Gardez vos traces, vos contre-exemples et les raisons de vos corrections : ils comptent autant que le code terminé.

En fin de séance, nous comparons la machine à l’interpréteur sur un même programme, puis nous regardons ce qu’un typeur saurait avant toute exécution : c’est le premier sujet d’approfondissement d’AP9.

Conservez vos étapes dans AP3/. Je préciserai en cours les notebooks à terminer et le point d’arrêt attendu, selon notre avancement. Ce travail rejoint le rendu du cycle AP1–AP3 au 6 décembre 2026 à 23 h 59. Les prolongements non demandés restent facultatifs ; cf. Rendre un devoir. Quand un bout de syntaxe vous manque, les chapitres 1 à 4 du poly en donnent la forme avec un exemple.

Ouvrir les ateliers

1. Lire et écrire des instructions

Définissez un format binaire et distinguez opcode, opérande et adresse en octets.

Slides 12 à 19Elixir : motifs binaires <<…>>, byte_size/1 · poly, chap. 6.

Run in LivebookTélécharger le .livemd

2. Faire tourner une machine à pile

Suivez le compteur ordinal, la pile et la boucle lecture–décodage–exécution. Compilez un arbre arithmétique en postordre.

Slides 20 à 29Elixir : la pile est une liste, with · poly, chap. 3, 4 et 6.

Run in LivebookTélécharger le .livemd

3. Où ranger les variables ?

Associez les noms à des cases locales. Distinguez la table du compilateur des valeurs manipulées par la machine.

Slides 31 à 38Elixir : maps, Map.fetch/2, Map.put/3 · poly, chap. 6.

Run in LivebookTélécharger le .livemd

4. Assembler et prendre une branche

Résolvez les étiquettes en deux passes, calculez les adresses et compilez case avec deux sauts.

Slides 39 à 48Elixir : Enum.reduce/3 avec accumulateur, tuples comme étiquettes · poly, chap. 6.

Run in LivebookTélécharger le .livemd