Parce qu'elle s'introduit assez naturellement, on reprend la première syntaxe dans les termes d'une syntaxe abstraite :
| [2] | (1) | ENV ::= env |
| (2) | env -> TRM*... | |
| (3) | TRM ::= ENV LSP def ref | |
| (4) | def -> NOM ENV REP | |
| (5) | ref -> NOM ENV | |
| (6) | REP ::= rep | |
| (7) | rep -> ATM*... | |
| (8) | ATM ::= REP LSP stg use STRING | |
| (9) | stg -> NOM | |
| (10) | use -> NOM ENV | |
| (11) | LSP ::= lsp | |
| (12) | lsp -> SEX*... | |
| (13) | SEX ::= TRM ATM ATOME LISTE |
| (1) | le phylum des environnements ENV contient l'opérateur d'environnement env |
| (2) | l'opérateur d'environnement env est une liste d'opérateurs du phylum des termes TRM |
| (3) | le phylum des termes TRM contient :- les opérateurs des phyla des environnements ENV et des expressions Lisp LSP- les opérateurs de définition def et de référence ref |
| (4) | une définition est : un nom NOM, un opérateur du phylum des environnements ENV, un opérateur du phylum des représentations REP |
| (5) | une référence est : un nom NOM, un opérateur du phylum des environnements ENV |
| (6) | le phylum des représentations REP contient l'opérateur de représentation rep |
| (7) | l'opérateur de représentation rep est une liste d'opérateurs du phylum des atomes ATM |
| (8) | le phylum des atomes ATM contient :- les opérateurs des phyla des représentations REP et des expressions Lisp LSP- les opérateurs de string stg et d'utilisation use- l'opérateur du phylum prédéfini des chaînes de caractères STRING |
| (9) | une string est : un nom NOM |
| (10) | une utilisation est : un nom NOM, un opérateurs du phylum des environnements ENV |
| (11) | le phylum des expressions Lisp LSP contient l'opérateur d'expression Lisp lsp |
| (12) | l'opérateur d'expression Lisp lsp est une liste d'opérateurs du phylum des S-expressions SEX |
| (13) | le phylum des S-expressions SEX contient :- les opérateurs des phyla des termes TRM et des atomes ATM- les opérateurs des phyla prédéfinis des atomes Lisp ATOME et des listes Lisp LISTE |
Entre cette syntaxe et la précédente, beaucoup de chemin a été parcouru :
En définitive, on est passé :
def ou d'une référence ref ;ENV, on reconnaît l'opérateur d'environnement env ;env est une liste d'opérateurs reconnus par le phylum des termes TRM ;TRM, on reconnaît les opérateurs de définition def et de référence ref, ainsi que les opérateurs des phyla des environnements ENV et des expressions Lisp LSP ;Dans une telle situation, il n'est alors raisonnablement plus possible de tester, dans chaque cas d'évaluation (plus précisément pour chaque phylum dans lequel on se place à l'évaluation) de quel opérateur il s'agit, puis de traiter cet opérateur quand celui-ci a été reconnu. On devrait en effet répéter dans chaque phylum qui a la visibilité d'un opérateur donné le traitement – ou au moins l'appel à une fonction qui effectue ce traitement. Or il y a beaucoup d'opérateurs partagés entre plusieurs phyla, il y aurait donc beaucoup de répétitions.
Qui plus est, il y a une certaine logique entre les visibilités des phyla et des opérateurs : définir un nouvel opérateur, qu'on place dans le phylum des environnements ENV, nécessite raisonnablement de reconnaître aussi cet opérateur dans les phyla des termes TRM et des expressions Lisp LSP.