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.3.1. Définition d'un langage
3.3.11.1. La grammaire du langage
3.3.11.2. La syntaxe abstraite et les schémas de décompilation
3.3.11.3. La représentation textuelle
3.3.11.4. La concentration des variables
3.3.11.5. La concentration des propriétés
3.3.11.6. La paramétrisation des propriétés
3.3.11.7. Le poids sémantique des propriétés
3.3.2. Information de contexte
3.3.3. Exécution
3.3.4. Définition de propriétés
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

Définition d'un langage

On illustre la démarche par un exemple.

1. La grammaire du langage

2. La syntaxe abstraite et les schémas de décompilation

3. La représentation textuelle

4. La concentration des variables

5. La concentration des propriétés

6. La paramétrisation des propriétés

7. Le poids sémantique des propriétés

3. La représentation textuelle

Figure 3.a : grammaire

On place dans l'« environnement global » la syntaxe du langage – c'est-à-dire au vu de tous les textes. On peut noter que :

Par exemple : l'affectation

(def affect ()
   ((VAR) ":=" (EXP) "^M")) ; Note: "^M" = « retour à la ligne »

On définit le texte affect :
- qui utilise deux textes VAR et EXP (à définir par ailleurs),
- dont la valeur de représentation correspond à ce qui précédemment s'appelait le schéma de décompilation de l'opérateur.

Figure 3.a : grammaireafficher >><< masquer ]

(def PGME ()
   ((PGME-DECLA)
    (PGME-INSTR)))

(def pgme-decla ()
   ((lst-init ((DECLA*))
       ("VAR " (rep (DECLA) (lst (DECLA)))))))

(def pgme-instr ()
   ((lst-init ((INSTR*))
       ((INSTR)))))

(def decla ()
   ((NOM) ":" (TYP) "^M"))

(def affect ()
   ((NOM) ":=" (EXP) "^M"))

(def affiche ()
   ("write(" (EXP) ")" "^M"))

(def cond ()
   ("if " (EXP-COND) "^M"
    (THEN-CLAUSE)
    (ELSE-CLAUSE)
    "endif" "^M"))

(def exp-egal ()
   ((EXP1) "=" (EXP2)))

(def exp-diff ()
   ((EXP1) "<>" (EXP2)))

(def then-clause ()
   ("then" "^M"
    (lst-init ((INSTR*))
       ("   " (rep (INSTR) (lst (INSTR)))))))

(def else-clause ()
   ("else" "^M"
    (lst-init ((INSTR*))
       ("   " (rep (INSTR) (lst (INSTR)))))))

Figure 3.b : arbre syntaxique

On place un dernier "opérateur" dans l'environnement global : il s'agit du programme en cours d'exécution : on le définit ici dans un texte nommé PGME qui sera associé à un nouveau tampon de l'éditeur.

Par exemple : l'affectation

(def INSTR
   ((def VAR () ("x"))
    (def EXP () ("y")))
   ((affect)))

On définit le texte INSTR par :
- sa valeur de représentation : il utilise le texte affect,
- sa valeur d'environnement : il définit les paramètres de l'"opérateur" affect, c'est-à-dire ici les textes VAR et EXP.

Figure 3.b : arbre syntaxiqueafficher >><< masquer ]

(def PGME
 ((def PGME-DECLA
   ((def DECLA*
     (lst-env
      ((def DECLA
        ((def NOM () ("x"))
         (def TYP () ("integer")))
        ((decla))))
       (def DECLA
        ((def NOM () ("y"))
         (def TYP () ("real")))
        ((decla)))))))
   ((pgme-decla)))
  (def PGME-INSTR
   ((def INSTR*
     (lst-env
      ((def INSTR
        ((def VAR () ("x"))
         (def EXP () ("0")))
        ((affect))))
       (def INSTR
        ((def VAR () ("y"))
         (def EXP () ("1.0")))
        ((affect))))
       (def INSTR
        ((def EXP-COND
          ((def EXP1 () ("x"))
           (def EXP2 () ("y")))
          ((exp-egal)))
         (def THEN-CLAUSE
          ((def INSTR*
            (lst-env
             ((def INSTR
               ((def EXP () ("'Ok'")))
              ((affiche)))))))
          ((then-clause)))
         (def ELSE-CLAUSE
          ((def INSTR*
            (lst-env
             ((def INSTR
               ((def VAR () ("x"))
                (def EXP () ("y")))
              ((affect))))
              (def INSTR
               ((def EXP () ("'Erreur'")))
              ((affiche)))))))
          ((else-clause))))
        ((cond))))
       (def INSTR
        ((def EXP () ("'fin'")))
        ((affiche)))))))
   ((pgme-instr))))
 ((pgme)))