T09 · Ingénierie pratique CAKE© · Chapitre 2 / 11

Anatomie d'un moteur CAKE©

Les organes réels de la machine, et le rôle exact de chacun

L'édition précédente de ce chapitre décrivait six composants idéaux. Ils existent tous, mais sous une forme plus précise et plus modeste que la description ne le laissait croire. Voici la correspondance, organe par organe, avec le moteur CakeLang tel qu'il est construit.

Composant I · Lecture
Le lecteur de source
Retire les commentaires, découpe le texte en jetons et équilibre les accolades. Aucune interprétation à ce stade : il prépare seulement le terrain.
Composant II · Modèle
L'arbre syntaxique
Projet, classe racine, méthode principale, puis des nœuds typés : déclaration, affectation, si, tant-que, appel. Sérialisable en CXML et en JSON.
Composant III · Construction
Les douze contrôleurs
Un par famille d'opcodes : FLOW, DECL, LITT, MODI, SCOP, OPER, TYPE, META, ERRH, OOPS, CALL, IORC. Chacun transforme ses symboles en nœuds.
Composant IV · Orchestration
Le répartiteur
Détecte le symbole le plus long à chaque position et l'envoie au bon contrôleur. Il tranche aussi les trois collisions entre littéraux et types.
Composant V · Observation
Console et visualiseur
La console reçoit |> et Cake.println ; le visualiseur 3D reçoit les points de Cake.emit. La commande cake parse montre l'arbre lui-même.
Composant VI · Action
Trois entrées
L'éditeur web (bac à sable), la ligne de commande cake et le REPL interactif. Elles ne passent pas toutes par le même chemin ; le chapitre 6 détaille la différence.

Le répartiteur au travail : le plus long symbole gagne

Trois opcodes de la famille FLOW commencent par les mêmes caractères : =$ (si), =$? (sinon si) et =$! (sinon). Si le répartiteur s'arrêtait au premier symbole reconnu, =$! serait lu comme =$ suivi d'un point d'exclamation, et le programme changerait de sens sans le moindre message. La règle « le plus long d'abord » est ce qui rend cette grammaire compacte non ambiguë.

Trois symboles, un seul verdict

Source C% · t09c02-a.cake
=: charge=3.2%
=$ (charge>5.0) {
  |> "Batterie : pleine"%
}
=$? (charge>2.0) {
  |> "Batterie : recharge conseillee"%
}
=$! {
  |> "Batterie : retour immediat a la station"%
}
Sortie réelle du moteur
Batterie : recharge conseillee
Arbre syntaxique sérialisé en CXML par l'analyseur
<projet nom="t09c02-a" package="com.unibool.script" type="Library">
  <classe nom="Root" visibilite="Public">
    <methode nom="main" retour="void" visibilite="Public">
      <bloc>
        <declaration nom="charge" type="var" valeur="3.2"/>
        <si condition="charge&gt;5.0">
          <alors>
            <bloc>
              <appel methode="println" args="&quot;Batterie : pleine&quot;"/>
            </bloc>
          </alors>
          <sinon>
            <bloc>
              <si condition="charge&gt;2.0">
                <alors>
                  <bloc>
                    <appel methode="println" args="&quot;Batterie : recharge conseillee&quot;"/>
                  </bloc>
                </alors>
                <sinon>
                  <bloc>
                    <appel methode="println" args="&quot;Batterie : retour immediat a la station&quot;"/>
                  </bloc>
                </sinon>
              </si>
            </bloc>
          </sinon>
        </si>
      </bloc>
    </methode>
  </classe>
</projet
Traçabilité — opcodes : =: déclarations · =$ flux · |> entrées/sorties · =$? flux · =$! flux
nœuds d'arbre : déclaration, si, appel, sinon · empreinte d'arbre cc295936e935c806 (reproductible : cake hash t09c02-a.cake)
vérifié le 2026-09-23 dans le moteur CakeLang, chemin de l'éditeur CakeLand, bac à sable actif.

Ce que le moteur ne fait pas encore

Une anatomie honnête montre aussi les organes incomplets. Sur les 154 opcodes que le répartiteur reconnaît, tous ne produisent pas encore un comportement à l'exécution : certains sont analysés et placés dans l'arbre sous forme de code brut, sans effet. Le chapitre 10 en dresse l'état exact. La règle de ce tome est simple : un exemple imprimé ici n'utilise que des constructions dont l'effet a été constaté dans le moteur.

Principe clé du chapitre

Un moteur se comprend par ses frontières : ce qui entre, qui le transforme, et par où l'effet sort. CakeLang a une entrée de texte, un arbre au centre et deux sorties observables.

→

Le chapitre suivant suit une vraie chaîne de traitement : les constantes d'une mission orbitale et le programme qui les exploite.

← Chapitre précédent C01 · Du concept à la machine
T09 · C02 / 11
Chapitre suivant → C03 · Chaînes de transformation CAKE©
CAKE© Library  ·  Sébastien Roy  ·  CEO, UniBool Inc.  ·  Canada  ·  Édition 2026