On définit le schéma :
(def procedure
((def defcla ()
((NOM) ":" (TYP)" ";" "^M")))
("PROCEDURE " (EN-TETE) ";" "^M"
(pos-accu DECL
("VAR " (decla) (lst-accu " " (decla))))
"BEGIN" "^M"
" " (CORPS)
"END;" "^M"))
Il est paramétré par :
EN-TETE (l'en-tête), CORPS (le corps),DECL : le nom d'un « point d'accumulation ».Il fournit le schéma de décompilation du « point d'accumulation » ; sous la forme de listes, on écrirait :
(lst-init DECL
("VAR " (decla) (lst " " (decla))))
qui se lit :
"VAR",use-accu), il ne s'affiche rien."VAR".Une utilisation de procedure :
(def traitement
((def EN-TETE ...)
(def-accu DECL
((ref-accu bloc-decla)))
(def-accu bloc-decla
((accu)))
(def CORPS ()
(...
(use-accu bloc-decla
((def NOM () ("x"))
(def TYP () ("integer"))))
...
(use-accu bloc-decla
((def NOM () ("y"))
(def TYP () ("real"))))
...)))
((procedure)))
Le traitement définit :
DECL, par référence (ref-accu) au « point d'accumulation » local au texte bloc-decla,bloc-decla,bloc-decla pour placer de nouvelles déclarations de variables.Note :
Ces opérateurs présentent certaines limitations :
pos-accu avant de l'utiliser par use-accu : on pourrait prévoir un système retardé qui range les utilisations use-accu tant que pos-accu n'a pas été évalué ;"N" de type "integer" (parce qu'elle apparaît dans deux « textes » distincts en tant que variable auxiliaire), on retrouvera deux fois la déclaration « textuelle » de "N" dans la forme évaluée.