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.4. Deuxième étape : les nouveaux cas
2.3.44.1. Le troisième contexte
2.3.44.2. Le quatrième contexte
2.3.44.3. Remarque
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

Deuxième étape : les nouveaux cas

On a défini :

Il s'agit maintenant de réutiliser ces modèles dans deux nouvelles situations [3] et [4]. Les procédures Lire_Objet et Ecrire_Objet étant suffisamment simples, on peut réutiliser les schémas Lire et Ecrire dans les cas [3] et [4]. On passe donc tout de suite au cas de la procédure Rechercher_Objet, modélisée par le texte Rechercher.

1. Le troisième contexte

2. Le quatrième contexte

3. Remarque

2. Le quatrième contexte

Le texte attendu est le suivant :

140   M=0
145   IF M=LM4 GOTO 147
      M=M+1
      H=RG4(M)
      SEARCH=4,H:Y4
      IF Y4C1<X4C1 GOTO 145
      IF Y4C1>X4C1 GOTO 148
      IF Y4C2<X4C2 GOTO 145
      IF Y4C2>X4C2 GOTO 148
      IF Y4C3<X4C3 GOTO 145
      IF Y4C3>X4C3 GOTO 148
      MEN=0
      RETURN
147   M=M+1
148   MEN=1
      RETURN

Ce dernier cas reprend dans son principe les idées du précédent. La différence est qu'il faut ici répéter trois fois le test, qui n'apparaît qu'une fois dans le modèle initial.

Construction du contexte

Le contexte ctx4 reflète l'idée d'un test triple :

(def ctx4
   ((def NOM () ("4"))
    (def RANG ...)
    (def OBJ
       ((def val
           ((def test1 () ("X4C1"))
            (def test2 () ("X4C2"))
            (def test3 () ("X4C3")))
           ("X4"))
        (def aux
           ...)
       ))))

chaque valeur d'OBJ a maintenant trois propriétés de test : test1, test2 et test3.

Utilisation de la recherche

On extrait du schema de Rechercher la partie de test, qu'on appelle proc-test :

(def Rechercher
   ((def schema
       ((def fin ...))
       ("...
         {proc-test}
         ..."))
    (def proc-test ()
       ("IF {test-aux}<{test-val} GOTO 145
         IF {test-aux}>{test-val} GOTO 148
         {suite}"))
    (def test-val () ("{test((val((OBJ))))}"))
    (def test-aux () ("{test((aux((OBJ))))}"))
    (def suite () ())
   ...))

Le test proc-test est paramétré par test-val, test-aux et suite, dont on donne une valeur par défaut qui correspond à celle qu'on avait initialement – en particulier la suite est vide : on n'attend pas, dans proc-test, d'autres instructions derrière les deux conditions.

Dans le contexte ctx4, on utilise alors la recherche :

(schema
   ((ctx4)
    (def test-val () ("{test1((val((OBJ))))}"))
    (def test-aux () ("{test1((aux((OBJ))))}"))
    (def suite ()
       ("{proc-test
            ((def test-val () ("{test2((val((OBJ))))}"))
             (def test-aux () ("{test2((aux((OBJ))))}"))
             (def suite ()
                ("{proc-test
                     ((def test-val () ("{test3((val((OBJ))))}"))
                      (def test-aux () ("{test3((aux((OBJ))))}"))
                      (def suite () ())))}")))}"))
    (Rechercher)))