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

1. Le troisième contexte

Le texte attendu est le suivant :

140   M=LM3(X3NB-64)
145   IF M=LM3(X3NB-63) GOTO 147
      M=M+1
      H=RG3(M)
      SEARCH=3,H:Y1
      IF Y3C<X3C GOTO 145
      IF Y3C>X3C GOTO 148
      MEN=0
      RETURN
147   M=M+1
148   MEN=1
      RETURN

Le troisième cas ressemble beaucoup au premier : la différence est qu'une recherche ne nécessite plus le balayage du fichier à partir de son origine et jusqu'à sa fin (entre "0" et "{borne((RANG))}"), mais un balayage plus fin entre deux valeurs du tableau des bornes LM3.

On dégage donc deux nouveaux concepts, qui n'apparaissaient pas dans les deux cas précédents : il s'agit des paramètres CLE-ORIGINE et CLE-MAX. Le schéma de recherche devient alors :

(def schema
   ((def fin ...))
   ("140   {CLE}={CLE-ORIGINE}
     145   IF {CLE}={CLE-MAX} GOTO 147
           ..."))

Sachant que pour les contextes ctx1 et ctx2 ces deux paramètres n'ont pas été identifiés, on fournit une valeur d'instanciation par défaut dans l'environnement de Rechercher :

(def Rechercher
   ((def schema ...)
    (def CLE-ORIGINE () ("0"))
    (def CLE-MAX () ("{borne((RANG))}"))
    (def CLE () ("M"))
   ))

c'est-à-dire qu'on ne modifie pas les contextes déjà construits ctx1 et ctx2 – et dans ces deux cas l'évaluation est inchangée.

Construction du contexte

On doit construire pour [3] un contexte légèrement différent :

(def ctx3
   ((def NOM () ("3"))
    (def RANG
       ((def borne () ("LM3({CLE-LOG})"))
        ...))
    (def OBJ
       ((def val
           ((def cle () ("X3NB"))
            (def test () ("X3C")))
           ("X3"))
        (def aux
           ...)
       ))))

Les modifications sont les suivantes :

Utilisation de la recherche

A l'utilisation, on surcharge les définitions de CLE-ORIGINE et CLE-MAX :

(schema
   ((ctx3)
    (def CLE-ORIGINE ()
       ("{borne
            ((def CLE-LOG () ({cle((val((OBJ))))}-64)))}"))
    (def CLE-MAX ()
       ("{borne
            ((def CLE-LOG () ({cle((val((OBJ))))}-63)))}"))
    (Rechercher)))

qui se lit :

Remarque :
On utilise ici une propriété bien particulière de l'évaluateur, qui est de réaliser la recherche d'une définition de texte dans l'ordre des déclarations : en cas de redéfinition, on a la garantie que c'est la première définition qui est choisie.