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.
|> et Cake.println ; le visualiseur 3D reçoit les points de Cake.emit. La commande cake parse montre l'arbre lui-même.cake et le REPL interactif. Elles ne passent pas toutes par le même chemin ; le chapitre 6 détaille la différence.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ë.
t09c02-a.cake=: charge=3.2%
=$ (charge>5.0) {
|> "Batterie : pleine"%
}
=$? (charge>2.0) {
|> "Batterie : recharge conseillee"%
}
=$! {
|> "Batterie : retour immediat a la station"%
}
Batterie : recharge conseillee
<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>5.0">
<alors>
<bloc>
<appel methode="println" args=""Batterie : pleine""/>
</bloc>
</alors>
<sinon>
<bloc>
<si condition="charge>2.0">
<alors>
<bloc>
<appel methode="println" args=""Batterie : recharge conseillee""/>
</bloc>
</alors>
<sinon>
<bloc>
<appel methode="println" args=""Batterie : retour immediat a la station""/>
</bloc>
</sinon>
</si>
</bloc>
</sinon>
</si>
</bloc>
</methode>
</classe>
</projet=: déclarations · =$ flux · |> entrées/sorties · =$? flux · =$! fluxcc295936e935c806 (reproductible : cake hash t09c02-a.cake)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.
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.