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
2.5.1. Présentation
2.5.11.1. Présentation générale
2.5.11.2. Les données
2.5.11.3. Les traitements
2.5.2. La macro-génération
2.5.3. Les symétries du programme
2.5.4. Annexe 1 : Construction du champ CHP_PRESENT
2.5.5. Annexe 2 : Les fonctions de traitement en Lisp
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

L'exemple qu'on traite est le programme Lisp qui implante les fonctions de modification incrémentale de la syntaxe abstraite (cf. Chapitre 5.5, « Construction de la Syntaxe Abstraite »). Deux remarques s'imposent :

Je ne pense pas qu'il faille en conclure que l'exemple est mal choisi : on n'a pas toujours de répétition dans le texte source d'un programme ; mais quand on en a, et c'est le cas spécialement dans les parties algorithmiques, il me semble intéressant de les mettre en relief. C'est la situation dans laquelle on se place.

Pour terminer ce préambule, je voudrais juste signaler que le programme n'a pas été remanié pour étayer l'argumentation. S'il présente de nombreuses symétries c'est parce qu'elles se sont imposées d'une façon naturelle à la rédaction du programme.

1. Présentation générale

2. Les données

3. Les traitements

2. Les données

La structure des données est une matrice de drapeaux, dont les lignes sont les phyla et les colonnes les opérateurs :

matrice de drapeaux

les variables globales

Elles permettent de parcourir une ligne ou une colonne de la matrice :

phylt : parcours de la liste des phyla
opert : parcours de la liste des opérateurs

le phylum PHYL

le phylum PHYL

champs du phylum

nomphyl : nom du phylum
attphyl : attributs du phylum
operphyl : la ligne attachée au phylum de la matrice
perephyl : liste des phyla pères du phylum
parent : champ entier : « degré de connexité » du nœud "phylum" par rapport à un autre phylum donné

construction du phylum

makephyl (nomphyl attphyl)
  : construit le phylum ( nomphyl attphyl () () 0 )

propriétés du phylum

nomphyl : nom du phylum
attphyl : attributs du phylum
operphyl : liste des drapeaux, le long de la liste des opérateurs
perephyl : liste des phyla pères du phylum
parent : test (vrai si le champ parent est non nul)
valparent : valeur du champ parent
setparent : incrémente de 1 le champ parent
resetparent : décrémente de 1 le champ parent

Les quatre premiers champs sont aussi des propriétés du type. Le cinquième est en revanche plus complexe.

l'opérateur OPER

l'opérateur OPER

champs de l'opérateur

nomoper : nom de l'opérateur
attoper : attributs de l'opérateur
phyloper : la colonne attachée à l'opérateur de la matrice

construction de l'opérateur

makeoper (nomoper attoper)
  : construit l'opérateur ( nomoper attoper () )

propriétés de l'opérateur

nomoper : nom de l'opérateur
attoper : attributs de l'opérateur
phyloper : liste des drapeaux, le long de la liste des phyla

Les champs sont ici identifiés aux propriétés.

le drapeau DRAP

le drapeau DRAP

champs du drapeau

present : champ booléen : « appartenance en propre » d'un opérateur à un phylum
visib : champ entier : « degré d'appartenance » d'un opérateur à un phylum
chgtvisib : champ booléen : on y conserve l'information « l'opérateur est nouvellement visible » ou « l'opérateur était anciennement visible » en vue de l'analyse des attributs
(ce dernier champ est introduit du fait de la séparation des traitements qui modifient la structure de la matrice de ceux qui réalisent l'analyse des attributs)

construction du drapeau

makedrap : construit le drapeau ( () 0 () )

propriétés du drapeau

present : test (vrai si le champ present est vrai)
setpresent : met le champ present à vrai
resetpresent : met le champ present à faux
visib : test (vrai si le champ visib est non nul)
valvisib : valeur du champ visib
nouvvisib : test (vrai si le champ chgtvisib est vrai)
ancivisib : idem
incrvisib : incrémente le champ chgtvisib d'un entier en paramètre
+ met à jour le champ chgtvisib si « l'opérateur est nouvellement visible », c'est-à-dire si le champ visib était nul avant l'appel de la fonction
decrvisib : décrémente le champ chgtvisib d'un entier en paramètre
+ idem inversé
resetnouvvisib : met le champ chgtvisib à faux
resetancivisib : idem

L'accès aux champs est ici "filtré" par diverses fonctions. En particulier le champ chgtvisib est regardé relativement au traitement antérieur :