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.1.1. Comportement dynamique des textes
3.1.2. La syntaxe complétée
3.1.22.1. Opérateur de S-expression simple
3.1.22.2. Opérateurs de liste
3.1.22.3. Opérateurs de listes doubles
3.1.22.4. Opérateurs de typage des textes
3.1.22.5. Résumé : 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.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

La syntaxe complétée

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 :

1. Opérateur de S-expression simple

2. Opérateurs de liste

3. Opérateurs de listes doubles

4. Opérateurs de typage des textes

5. Résumé : la syntaxe complétée

2. Opérateurs de liste

syntaxe

atm ::= atm | lst-init | lst | tst
    lst-init ::= env rep
    lst      ::= ε | atm lst
    tst      ::= ε | sex tst

env ::= env | lst-env
    lst-env ::= ε | env lst-env

sémantique

opérateur lst-init

Il permet d'initialiser le parcours d'une liste d'environnements. Le champ d'environnement est un environnement prioritaire placé dans le contexte d'évaluation pour la construction de la liste des environnements à parcourir. Le champ de représentation est la représentation qui sera évaluée pour chaque nouvelle construction d'un contexte – pour la construction du contexte, voir l'opérateur lst-env.

opérateur lst

Il permet, à l'intérieur d'un opérateur lst-init, de spécifier une autre représentation à évaluer pour le parcours du reste de la liste d'environnements. La liste sera parcourue jusqu'à épuisement à l'intérieur de l'opérateur lst, et ne sera alors plus parcourue par l'opérateur lst-init, ou par d'autres opérateurs lst englobants.
Note : à l'entrée dans lst, on commence par avancer d'un rang dans la liste des environnements.

opérateur tst

Il permet de tester le nombre d'environnements restant dans la liste à parcourir, et de spécifier une certaine représentation à évaluer en fonction de ce nombre. La syntaxe est plus sévère qu'il n'y paraît. La syntaxe d'emploi correcte, à respecter mais non contrôlée, est celle du selectq de Lisp (le 'case of' de Pascal).

forme entrée :
   (tst
      (0 (rep ...))
      (1 (rep ...))
       ...
      (T (rep ...)))

forme Lisp :
   (selectq <nombre d'environnements restant dans la liste>
      (0 (rep ...))
      (1 (rep ...))
       ...
      (T (rep ...)))

Note : dans le nombre d'environnements restants, on compte l'environnement dans lequel on est en train d'évaluer.

opérateur lst-env

Il permet de définir, "proprement", une liste d'environnements. Le parcours de liste s'effectue en deux étapes :

exemple

lst-param : le texte est paramétré par une liste de paramètres l-param ; c'est la décompilation des indices de tableau.

def lst-param
 = (lst-init
      (env (l-param))
      (rep "[" (nom) (lst "," (nom)) "]")))

lst-tab : le texte est paramétré par une liste de déclarations l-tab ; c'est la décompilation des déclarations de variables, dans une syntaxe du type de la syntaxe de Pascal.

def lst-tab
 = "VAR" "^M"
   (lst-init
      (env (l-tab))
      (rep "   " (nom) ":" (type) ";" "^M"))

decla : le texte est défini par trois variables "X", "Y" et "Z", elles-mêmes définies comme des tableaux – "Z" est un tableau sans indice : le texte l-param a un environnement vide.

(def decla
   (def l-tab
      (lst-env
         (env
            (def nom
               (def l-param
                  (lst-env
                     (def nom = "a"))
                     (def nom = "b"))
                     (def nom = "c"))))
               = "X" (lst-param))
            (def type
               = "tab_X"))
         (env
            (def nom
               (def l-param
                  (lst-env
                     (def nom = "u"))
                     (def nom = "v"))))
               = "Y" (lst-param))
            (def type
               = "tab_Y"))
         (env
            (def nom
               (def l-param)
               = "Z" (lst-param))
            (def type
               = "tab_Z"))))
   = (lst-tab))

On peut ainsi représenter l'arbre abstrait associé à la définition de ces trois variables :

arbre abstrait syntaxique

La forme évaluée de l'utilisation du texte decla est alors :

VAR
   X[a,b,c]:tab_X;
   Y[u,v]:tab_Y;
   Z:tab_Z;