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

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

Figure 7 : le poids sémantique des propriétés

L'introduction des "propriétés" que doivent satisfaire certains paramètres autorise l'établissement de contrôles sémantiques. On montre ici par quel moyen on peut effectuer le contrôle de type dès la phase d'édition. On le réalise sans pénalisation pour le programmeur, puisqu'il se traduit par d'éventuels messages de mise en garde mais qu'il ne contraint pas le programmeur à corriger son erreur.

Par exemple :

(def affect ()
   ((VAR) ":="
       (lsp
          (unless (egal (use TYP((VAR))) (use TYP((EXP))))
                  "(erreur de type)"))
       (EXP) "^M"))

qui retourne l'affichage :

x:=(erreur de type)y

On notera que le programme – le texte PGME – n'a pas été touché : le contrôle de type est réalisé dans la grammaire et non dans le programme. On choisit donc lors d'une session sous l'éditeur d'activer ou non le contrôle de type par le choix de la grammaire de décompilation – ou plus précisément par le choix de la liste des textes qui définissent les opérateurs de la grammaire.

Figure 7 : le poids sémantique des propriétésafficher >><< 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((VAR))) ":" (TYP((VAR))) "^M"))

(def affect ()
   ((VAR) ":="
       (fct unless (egal (use TYP((VAR))) (use TYP((EXP))))
                   "(erreur de type)")
       (EXP) "^M"))

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

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

(def exp-egal ()
   ((EXP1) "="
       (fct unless (egal (use TYP((EXP1))) (use TYP((EXP2))))
                   "(erreur de type)")
       (EXP2)))

(def exp-diff ()
   ((EXP1) "<>"
       (fct unless (egal (use TYP((EXP1))) (use TYP((EXP2))))
                   "(erreur de type)")
       (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)))))))

(def var
   ((def lect () ((NOM)))
    (def ecr  () ((NOM)))
    (def init () ((INIT)))))