On trouve dans la syntaxe abstraite présentée divers schémas répétitifs : env def ref, rep stg use, ... Ceci n'est pas pure coïncidence.
Par exemple, si l'on veut sur cette syntaxe insérer l'opérateur lst, la logique demande qu'on le place partout où on attend un atome atm – des éléments d'une représentation : sur le phylum SEX et le phylum REP.
Un autre exemple d'opérateur est l'opérateur fct de la Syntaxe Complétée :
opérateur : | |
| syntaxe | : (fct SEX) |
| sémantique | : identique à lsp. On attend ici une seule S-ex, la syntaxe sera donc plus simple. Par exemple : |
| |
Ici, on doit logiquement placer fct partout où on attend lsp : soit sur les phyla SEX, TRM, ATM et LSP.
Un dernier exemple :
opérateur : | |
| syntaxe | : (lst-env { ENV }) |
| sémantique | : définit une liste d'environnements, sans jouer sur le fait qu'un environnement peut lui-même contenir des environnements : ce sera ce type d'environnement qui sera attendu par les opérateurs de liste lst-init, lst, tst. |
On placera lst-env partout où on attend env : soit sur les phyla SEX, TRM, ENV.
On constate que ce que l'on fait sur ces trois exemples, c'est réaliser une sorte de fermeture transitive de la relation :
« l'opérateur appartient au phylum »
supervisée par la relation :
« le phylum 1 contient tous les opérateurs du phylum 2 ».
Au lieu de demander à l'utilisateur de réaliser cette fermeture transitive, on introduit cette notion dans la définition de la syntaxe initiale :
PHYL ::= oper
signifie que l'opérateur oper appartient au phylum PHYL ;
PHYL1 ::= PHYL2
signifie que le phylum PYL2 est contenu dans le phylum PHYL1 ;
syntaxe initiale
PHYLA
(P1) SEX ::= TRM ATM LISTE ATOME
(P2) TRM ::= ENV LSP def ref
(P3) ATM ::= REP ATM stg use STRING
(P4) ENV ::= env
(P5) REP ::= rep
(P6) LSP ::= lsp
OPERATEURS
(O1) env -> TRM*...
(O2) rep -> ATM*...
(O3) lsp -> SEX*...
(O4) def -> NOM ENV REP
(O5) ref -> NOM ENV
(O6) stg -> NOM
(O7) use -> NOM ENV
phyla | |
| (P1) | le phylum SEX se compose des phyla TRM, ATM, LISTE (prédéfini) et ATOME (prédéfini) |
| (P2) | le phylum TRM se compose :- des phyla ENV et LSP,- des opérateurs def et ref |
| (P3) | le phylum ATM se compose :- des phyla REP, LSP et STRING (prédéfini)- des opérateurs stg et use |
| (P4) | le phylum se compose ENV de l'opérateur env |
| (P4) | le phylum se compose REP de l'opérateur rep |
| (P4) | le phylum se compose LSP de l'opérateur lsp |
opérateurs
Ce sont les mêmes que ceux de la syntaxe précédente.
syntaxe concrète
C'est la même que celle de la syntaxe précédente.
Les exemples précédents où l'on complète la syntaxe initiale se réécrivent comme suit :
ATM ::= ATM lst-init lst tst
LSP ::= LSP fct
ENV ::= ENV lst-env
ou
ENV ::= ENV LST-ENV
LST-ENV ::= lst-env
On complète les phyla concernés. La modification est alors automatiquement répercutée sur les phyla englobants.
On donne ici un exemple, peut-être davantage choisi pour la circonstance que les précédents, de définition d'un nouveau phylum :
TRM-FIX ::= ENV-FIX def
ENV ::= ENV ENV-FIX
ENV-FIX ::= env-fix
env-fix -> TRM-FIX*...
Le phylum ENV-FIX représente les environnements fixes – des environnements qui ne contiennent aucune référence à un texte. On a une "compatibilité ascendante", c'est-à-dire qu'un environnement fixe est un environnement, mais la réciproque est fausse – « un environnement fixe est un environnement » doit s'entendre : si on attend un environnement et qu'on obtient un environnement fixe, alors il n'y a pas d'erreur. Une évolution ultérieure des phyla ENV ou TRM n'aura ici aucune incidence sur les phyla ENV-FIX et TRM-FIX.
syntaxe complétée
S-ex simple
LSP ::= LSP fct
fct -> SEX
liste
ATM ::= ATM lst-init lst tst
lst-init -> ENV REP
lst -> ATM*...
tst -> SEX*...
ENV ::= ENV lst-env
lst-env -> ENV*...
liste double
ATM ::= ATM lst2-init lst2 tst2 atm1 atm2
lst2-init -> ENV ENV ENV REP
lst2 -> ATM*...
tst2 -> SEX*...
atm1 -> ATM*...
atm2 -> ATM*...
typage
TRM ::= TRM deft reft
deft -> NOM NOM ENV REP
reft -> NOM NOM ENV
ATM ::= ATM uset
uset -> NOM NOM ENV