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.1.1. Comportement dynamique des textes
3.1.11.1. Modification textuelle
3.1.11.2. Le contrôle non textuel
3.1.11.3. Insertion de code Lisp
3.1.11.4. Syntaxe Lisp
3.1.2. 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

Comportement dynamique des textes

1. Modification textuelle

2. Le contrôle non textuel

3. Insertion de code Lisp

4. Syntaxe Lisp

1. Modification textuelle

La définition d'un texte, puis son utilisation, permet de concentrer, à la déclaration de ce texte, l'ensemble de l'information qu'il représente. Or un emploi un tant soit peu intéressant de ce mécanisme demande de pouvoir définir des textes incomplets : on conçoit que des textes "entièrement définis" ne correspondent qu'à des cas bien particuliers d'utilisation : ce peuvent être les mots-clés du langage utilisé, des identificateurs, certains schémas répétitifs qu'impose le langage, ... On est très vite limité par l'emploi exclusif de textes "entièrement définis" puisque alors à l'utilisation d'un texte on ne peut d'aucune manière bénéficier d'informations spécifiques au contexte d'utilisation dans lequel on se situe.

Une première réponse apportée est la paramétrisation des textes. Comme il est décrit dans la partie traitant du contexte d'évaluation des textes, le choix retenu a été de définir la paramétrisation comme l'absence de définition. Cela signifie que la notion de texte paramétré est elle-même fonction du contexte dans lequel on se situe, ou même de la vision qu'on a de ce contexte.

Sur la figure qui suit on montre un exemple où une simple paramétrisation est malgré tout insuffisante pour définir un unique texte pour la déclaration des deux types homme et femme :

TYPE type_sexe : (masculin,feminin);
TYPE type_info (sexe:type_sexe) : ...;
TYPE homme : RECORD
                identif  : type_info(masculin);
                conjoint : type_info(feminin);
             END RECORD;
TYPE femme : RECORD
                identif  : type_info(feminin);
                conjoint : type_info(masculin);
             END RECORD;

On reprend le texte de la figure précédente, en introduisant, dans le texte du programme, la notion de type paramétré :

TYPE type_sexe : (masculin,feminin);

FUNCTION oppose (sexe:type_sexe)
 BEGIN
   CASE sexe
    WHEN masculin : oppose:=feminin;
    WHEN feminin  : oppose:=masculin;
   END CASE;
 END;
TYPE type_info (sexe:type_sexe) : ...;

TYPE humain (sexe:type_sexe) :
      RECORD
         identif  : type_info(sexe);
         conjoint : type_info(oppose(sexe));
      END RECORD;

TYPE homme : humain(masculin);
TYPE femme : humain(feminin);

Il faut noter qu'on demande alors beaucoup de bienveillance de la part du langage utilisé :

On peut noter aussi que le texte obtenu :

Il serait donc souhaitable de pouvoir définir des "points de dialogue" entre les textes définis et l'évaluation des textes. A ces points, la représentation serait alors calculée en partie par l'application d'instructions intelligibles de l'évaluateur.

Par exemple :

def humain
 = "TYPE " (nom) ":" "^M"
   "RECORD" "^M"
   " identif  : type_info(" (sexe) ");" "^M"
   " conjoint : type_info("
        (si (sexe) = "masculin"
            alors "feminin"
            sinon "masculin") ");" "^M"
   "END RECORD;" "^M"

def homme
 = (use humain
      (def nom = "homme"
       def sexe = "masculin"))
def femme
 = (use humain
      (def nom = "femme"
       def sexe = "feminin"))