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.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

Présentation générale

On veut réaliser un programme gérant diverses structures de données. Ces données se composent d'éléments, qu'on souhaite voir triés selon un certain ordre. On doit pouvoir insérer, supprimer ou modifier ces éléments.

La condition de tri peut d'emblée suggérer l'emploi d'une table d'indirection pour l'accès aux éléments triés. Par ce moyen, on évite de recopier les éléments à chaque nouveau tri (ce qui serait coûteux en temps dans le cas général), et on se ramène à modifier la table d'indirection. On introduit donc :

Par exemple :

rang physiquedonnée
1"PREMIER"
2"DEUXIEME"
5"CINQUIEME"
8"HUITIEME"
  
rang logiquedonnée
RG(1)=5"CINQUIEME"
RG(2)=2"DEUXIEME"
RG(3)=8"HUITIEME"
RG(4)=1"PREMIER"

On utilisera généralement un tableau RG pour réaliser la table d'indirection :
RG( rang_logique ) = rang_physique

Une première analyse du problème vise à extraire de l'énoncé les propriétés des objets qu'on va définir, et de cette analyse déduire la spécification formelle de ces objets.

Dans le cas présent, on obtient (...) l'interface de l'objet construit :

TYPE type_element : ...;
PROCEDURE Lire_Objet(m : IN integer; x : OUT type_element );
PROCEDURE Ecrire_Objet(m : IN integer; x : IN type_element );
PROCEDURE Inserer_Objet(m : IN integer; x : IN type_element; men : OUT boolean );
PROCEDURE Supprimer_Objet(m : IN integer; men : OUT boolean );
PROCEDURE Rechercher_Objet(x : IN type_element; m : OUT integer; men : OUT boolean );
remarques :
- la variable men retourne un compte-rendu d'erreur ;
- la table d'indirection RG n'est pas passée en paramètre des procédures parce qu'on la considère comme globale au module.

Il reste à réaliser toutes ces procédures définies comme propriétés du type des éléments.

Si l'on ne s'intéresse qu'à l'aspect méthodologique du problème, on met simplement quelques points de suspension, en indiquant par là que ce n'est pas l'objet de notre propos. Il faut cependant reconnaître que la spécification formelle telle qu'elle est décrite ci-dessus, si elle demande de la part du programmeur un effort de conception supplémentaire, ne représente en revanche en taille de code écrit qu'une petite partie, purement déclarative. De plus, le respect d'une cohérence d'ensemble dans les évolutions possibles de cette partie de code est en général assez bien assuré par un compilateur, puisqu'il s'agit justement de déclarations. Ceci serait en fait à moduler en fonction du choix du langage de programmation arrêté, mais on peut prétendre à l'emploi de langages ou d'outils suffisamment structurés pour réaliser dès la phase de compilation des contrôles de sémantique statique (exemple, avec le langage C, la commande : make).

C'est donc à cette zone de points de suspension qu'on s'attachera, puisqu'elle représente la majeure partie du texte source qu'on va écrire.

Remarque :
On peut distinguer deux catégories de procédures dans l'exemple :

Dans la suite on présente rapidement les deux premières, et on s'attardera davantage sur la dernière, à savoir la procédure de recherche Rechercher_Objet.