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.3.1. Présentation générale
2.3.2. Présentation détaillée
2.3.3. Première étape : le modèle générique
2.3.33.1. Les structures de données
2.3.33.2. Les contextes d'utilisation
2.3.33.3. Les traitements simples
2.3.33.4. Les traitements complexes
2.3.4. Deuxième étape : les nouveaux cas
2.3.5. Annexe 1 : exemple d'évaluation
2.3.6. Annexe 2 : les procédures de recherche
2.3.7. Annexe 3 : la représentation textuelle
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.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

Première étape : le modèle générique

Dans cette première étape, on ne retient que les deux premiers types de structures de données : [1] et [2]. Reconnaissant, malgré la distance entre ces deux types, qu'on va devoir écrire deux fois le même "genre" de modules, on peut souhaiter paramétrer un module générique unique puis instancier chaque cas avec ses particularités.

1. Les structures de données

2. Les contextes d'utilisation

3. Les traitements simples

4. Les traitements complexes

4. Les traitements complexes

Il s'agit de définir les trois autres procédures : Inserer_Objet, Supprimer_Objet et Rechercher_Objet. Pour ne pas allonger démesurément l'exemple, on ne traitera ici que la dernière, Rechercher_Objet.

Le traitement étant plus complexe, on introduit un intermédiaire dans la définition du texte : le texte schema, qui donne le schéma de décompilation, paramétré localement par des textes :

(def Rechercher
   ((def schema
       ...représentation...)
    ...paramètres locaux...))

Pour utiliser le texte, il faut alors accéder à la valeur schema du texte Rechercher :

(schema ((Rechercher)))

Le schéma

Le schéma de recherche est le suivant (sans s'effrayer de la densité de GOTO qui apparaissent) :

(def schema
   ((def fin ()
       ("MEN={CR}
         RETURN")))
   ("140   {CLE}=0
     145   IF {CLE}={borne((RANG))} GOTO 147
           {CLE}={CLE}+1
           {lect ((RANG)
                  (def RGLOG () ("{CLE}"))
                  (def VAL   () ("{aux((OBJ))}")))}
           IF {test((aux((OBJ))))}<{test((val((OBJ))))} GOTO 145
           IF {test((aux((OBJ))))}>{test((val((OBJ))))} GOTO 148
           {fin ((def CR () ("0")))}
     147   {CLE}={CLE}+1
     148   {fin ((def CR () ("1")))}"))

dans schema :

Les contextes

On reprend donc légèrement la définition du contexte ctx1 :

(def ctx1
   ((def NOM () ("1"))
    (def RANG
       ((def borne () ("LM1"))
        ...))
    (def OBJ
       ((def val
           ((def test () ("X1C")))
           ("X1"))
        (def aux
           ((def test () ("Y1C")))
           ("Y1"))
       ))))

Pour ctx2, on définit :

(def borne () ("LM2"))

et la valeur de test étant, par définition, la valeur totale :

(def val
   ((def test () ("{val}")))
   ("X2"))

et de même pour aux.

Enfin, on reprend la définition de Rechercher :
le paramètre CLE est pris, par défaut, égal à "M".

(def Rechercher
   ((def schema ...)
    (def CLE () ("M"))))

L'utilisation du texte

En se plaçant dans le contexte ctx1 :

(schema
   ((ctx1)
    (Rechercher)))

on obtient (...) le texte attendu :

140   M=0
145   IF M=LM1 GOTO 147
      M=M+1
      H=RG1(M)
      SEARCH=1,H:Y1
      IF Y1C<X1C GOTO 145
      IF Y1C>X1C GOTO 148
      MEN=0
      RETURN
147   M=M+1
148   MEN=1
      RETURN

Dans le contexte ctx2, on a l'utilisation similaire :

(schema
   ((ctx2)
    (Rechercher)))