On présente plusieurs opérateurs qu'on ajoute à la syntaxe concrète : on construit alors la syntaxe complétée, qui à son tour pourra être complétée par de nouvelles définitions :
fct : il simplifie l'insertion d'une expression Lisp ;lst-init, lst, tst, lst-env : ils permettent la manipulation de listes de textes ;lst2-init, lst2, tst2, atm1, atm2 : ils permettent le parcours simultané de deux listes de textes ;deft, reft, uset : ils servent à typer les textes, à leur définition et à leur emploi.1. Opérateur de S-expression simple
3. Opérateurs de listes doubles
syntaxe
trm ::= trm | deft | reft
deft ::= <nom> <nom> env rep
reft ::= <nom> <nom> env
atm ::= atm | uset
uset ::= <nom> <nom> env
sémantique
Les textes sont typés. A la définition, ou à l'emploi d'un texte, on fournit deux identificateur :
- le premier est le nom du type,
- le deuxième est le nom de l'objet.
Une utilisation ou une référence typée à un texte typé nécessite que les deux noms de type soient égaux. Pour les autres cas :
On notera donc que c'est à l'emploi, et non à la définition, qu'on décide si l'on souhaite réaliser un emploi typé ou non du texte.
exemple
deft typeX init
= "X:=0"
deft typeX incr
= "X:=X+1"
def z
def init
= "Y:=0"
deft typeY incr
= "Y:=Y+1" donne
def a = (use init) : "Y:=0"
def a = (use incr) : "Y:=Y+1"
def a = (uset typeX init) : "X:=0"
def a = (uset typeX incr) : "X:=X+1"
utilisation de a : l'utilisation non typée de init fournit la première définition visible de init – celle de "Y".
utilisation de b : de la même façon, et bien que le texte incr défini pour "Y" soit typé, on prend cette définition de incr.
utilisation de c : le texte init défini pour "Y" n'étant pas typé, il ne peut être pris en compte : on prend alors la définition relative à "X" – parce qu'aussi elle est du type attendu typeX.
utilisation de d : le texte incr défini pour "Y" n'est pas du type attendu typeX, et c'est encore celui défini pour "X" qui est pris.