afficher >><< masquer ]
SAMPI - Editeur structuré
1. Le Problème et la Proposition
2. Le Langage Primitif de Représentation Textuelle
2.1. Présentation de la Syntaxe Concrète
2.2. Notations
2.3. Exemple de structuration des données
2.4. Exemple de structuration des traitements
2.5. Exemple de structurations connexes
3. Le Langage Complété pour la Structuration des Textes
3.1. Présentation de la Syntaxe Complétée
3.2. Etude quantitative de l'évolution des programmes
3.3. L'édition syntaxique
3.4. étude de cas : le langage LTR3 et l'atelier ENTREPRISE
4. L'Enrichissement du Langage par de Nouveaux Concepts
4.1. Présentation de la Syntaxe Abstraite
4.1.1. Solution Lisp
4.1.2. Simplification de la syntaxe : la syntaxe abstraite
4.1.3. Evolution de la syntaxe : la syntaxe initiale
4.2. Les difficultés
4.3. Compléter la Syntaxe
5. La Formalisation des Solutions Techniques
5.1. L'évaluation fonctionnelle
5.2. La structuration par les objets
5.3. Modèle sémantique comparé de l'évaluateur
5.4. Comparaison critique
5.5. Construction de la Syntaxe Abstraite
6. Les Comparaisons avec d'autres Approches
7. Les Perspectives
8. Les Editeurs
8.0. brisé sur la barrière de la complexité (une fois de plus)
8.1. L'éditeur ligne : Manuel de l'utilisateur
8.2. L'éditeur page : Guide de l'utilisateur
9. Les Aspects d'Implantation
9.1. Contexte d'évaluation
9.2. La Syntaxe Abstraite : Manuel du concepteur
9.3. L'éditeur page : Guide de l'implanteur
Références
Rubrique Perl-Javascript

Evolution de la syntaxe : la syntaxe initiale

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 : fct

syntaxe: (fct SEX)
sémantique : identique à lsp. On attend ici une seule S-ex, la syntaxe sera donc plus simple. Par exemple :
(lsp
   (if (= (use x) 0)        (fct if (= (use x) 0)
       "zero"                       "zero"
       "non nul"))                  "non nul")

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 : lst-env

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