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

Représenter les architectures

L'arbre syntaxique et sa forme écrite, le CXML

Représenter une architecture, dans CAKE©, n'est pas une métaphore : c'est la fonction exacte de l'arbre syntaxique. Tout programme C%, quelle que soit sa taille, devient la même structure : un projet, qui contient une classe racine, qui contient une méthode principale, dont le corps est un bloc de nœuds typés. Cette régularité est ce qui permet ensuite de transformer, comparer et certifier.

Le CXML est la forme écrite de cet arbre. Ce n'est pas un format que l'on invente à côté du code : c'est ce que l'analyseur produit lui-même, balise par balise, à partir du source.


Correspondance entre opcodes et balises

Opcode C%FamilleNœud d'arbreBalise CXMLExécuté
=:DECLdéclaration<declaration nom type valeur/>oui
=:!DECLdéclaration constante<declaration type="val:var"/>oui
:= :+DECLaffectation<affectation cible valeur/>oui
=$ =$? =$!FLOWsi / sinon si / sinon<si><alors>…<sinon>oui
$=FLOWtant-que<tant-que condition>oui
|>, Cake.…IORC, CALLappel<appel methode args/>oui
$$ $$:FLOWpour / pour-chaque<pour> <pour-chaque>oui
!{ … !} !~ERRHessayer / capturer / final<essai> <attraper>oui
<@:fonctionméthode de la classe racine<methode nom retour>oui
Cake.errorCALLappelmessage sur le canal de diagnostic, l'exécution continuepartiel

La dernière colonne est le fruit des vérifications de ce tome. Les boucles $$ et $$:, les blocs d'erreur et les fonctions ne fonctionnaient pas dans l'éditeur avant les correctifs de septembre 2026 ; le chapitre 10 raconte comment ces défauts ont été trouvés en écrivant ce tome.

Lire un arbre

L'exemple suivant contient une boucle imbriquée dans une condition. Dépliez le CXML : l'imbrication du source se retrouve exactement dans celle des balises, et chaque :+ i=1 est devenu une affectation explicite i + 1. L'arbre ne garde aucun raccourci d'écriture ; il garde le sens.

Une imbrication, lue dans l'arbre

Source C% · t09c04-a.cake
=: niveau=3%
=: capteurs=0%
=$ (niveau>0) {
  =: i=0%
  $= (i<niveau) {
    :+ capteurs=4%
    :+ i=1%
  }
}
|> "Capteurs actifs : " + Cake.toString(capteurs)%
Sortie réelle du moteur
Capteurs actifs : 12
Arbre syntaxique sérialisé en CXML par l'analyseur
<projet nom="t09c04-a" package="com.unibool.script" type="Library">
  <classe nom="Root" visibilite="Public">
    <methode nom="main" retour="void" visibilite="Public">
      <bloc>
        <declaration nom="niveau" type="var" valeur="3"/>
        <declaration nom="capteurs" type="var" valeur="0"/>
        <si condition="niveau&gt;0">
          <alors>
            <bloc>
              <declaration nom="i" type="var" valeur="0"/>
              <tant-que condition="i&lt;niveau">
                <bloc>
                  <affectation cible="capteurs" valeur="capteurs + 4"/>
                  <affectation cible="i" valeur="i + 1"/>
                </bloc>
              </tant-que>
            </bloc>
          </alors>
        </si>
        <appel methode="println" args="&quot;Capteurs actifs : &quot; + Cake.toString(capteurs)"/>
      </bloc>
    </methode>
  </classe>
</projet
Traçabilité — opcodes : =: déclarations · =$ flux · $= flux · :+ déclarations · |> entrées/sorties · bibliothèque : Cake.toString
nœuds d'arbre : déclaration, si, tant-que, affectation, appel · empreinte d'arbre cf04ab0299b492b2 (reproductible : cake hash t09c04-a.cake)
vérifié le 2026-09-23 dans le moteur CakeLang, chemin de l'éditeur CakeLand, bac à sable actif.

Une note sur les versions précédentes de la bibliothèque

Le tome 13 montrait des balises CXML comme <Runtime>, <Accepts> ou <Connect>. Ces balises décrivent une intention de conception ; l'analyseur actuel ne les reconnaît pas. Elles sont désormais signalées comme notation conceptuelle, et seules les balises produites par l'analyseur, comme celles de ce chapitre, sont présentées comme du CXML.

Principe clé du chapitre

Le CXML n'est pas un dessin de l'architecture : c'est l'architecture elle-même, écrite par l'analyseur. Ce qui n'a pas de balise produite n'existe pas encore dans le moteur.

→

Le chapitre suivant se sert de cet arbre pour ce qu'il a de plus précieux : exprimer la même intention dans d'autres langages.

← Chapitre précédent C03 · Chaînes de transformation CAKE©
T09 · C04 / 11
Chapitre suivant → C05 · Transformer les architectures
CAKE© Library  ·  Sébastien Roy  ·  CEO, UniBool Inc.  ·  Canada  ·  Édition 2026