Il ne s'agit pas ici d'écrire la totalité de l'évaluateur en ses propres termes. Ceci pour au moins trois raisons :
if, or, let, ..., ce qui rend plus fastidieuse l'écriture de l'évaluateur (il faut souvent passer par du code Lisp, même pour des notions élémentaires comme le test) ;On ne donne donc dans ce qui suit que l'attribut qui s'adapte bien à la situation : c'est l'attribut d'impression, qui affiche normalement une suite de caractères, et qui retourne dans le cas présent une suite de chaînes de caractères.
La totalité de la syntaxe se trouve en annexe ; on ne donne ici qu'une sélection choisie.
Le langage
Les opérateurs sont définis dans des « modules » isolés, pour être éventuellement partagés entre plusieurs phyla – la situation ne se présentera pas ici. Ils sont formellement paramétrés par les noms des champs qu'ils définissent.
Un phylum est défini par des références à des déclarations d'opérateurs ou de phyla. Il définit de plus le traitement d'erreur, qui est pris « par défaut » pour un opérateur dont le phylum n'aurait pas la visibilité.
opérateur d'environnement : | ||
(def decl-env | ; définit l'opérateur meta-env | |
((def meta-env | ; le paramètre formel est LST-TRM | |
((def imptt () | ; définit sur meta-env la propriété imptt | |
("(env" | ; | |
(lst-init ((LST-TRM)) | ; appelle pour chaque élément de LST-TRM | |
(imptt ((meta-TRM)))) | ; sa propriété imptt dans le phylum | |
")")))))) | ; des termes meta-TRM | |
opérateur de définition : | ||
(def decl-def | ; définit l'opérateur meta-def | |
((def meta-def | ; les paramètres sont NOM, ENV et REP | |
((def imptt () | ; définit sur meta-def la propriété imptt | |
("(def" (NOM) | ; utilise le paramètre formel NOM | |
(imptt | ; utilise la propriété imptt du paramètre | |
((ENV) | ; formel ENV dans le phylum | |
(meta-ENV))) | ; des environnements meta-ENV | |
(imptt | ; utilise la propriété imptt du paramètre | |
((REP) | ; formel REP dans le phylum | |
(meta-REP))) | ; des représentations meta-REP | |
")")))))) | ; | |
phylum des environnements : | ||
(def meta-ENV | ; définit le phylum meta-ENV | |
((ref decl-env) | ; déclare que l'opérateur meta-env | |
| ; appartient au phylum meta-ENV | |
(def imptt () | ; définit la propriété imptt pour les cas | |
("()")))) | ; d'erreur | |
phylum des termes : | ||
(def meta-TRM | ; définit le phylum meta-TRM | |
((ref decl-def) | ; déclare les opérateurs meta-def et meta-ref | |
(ref decl-ref) | ; appartenir au phylum meta-TRM | |
(ref meta-ENV) | ; déclare les opérateurs des phyla meta-ENV | |
(ref meta-LSP) | ; et meta-LSP appartenir à meta-TRM | |
(def imptt () | ; définit la propriété imptt par défaut : | |
((imptt ((meta-ref))))))) | ; ici on prend la propriété de l'opérateur | |
| ; meta-ref | |