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.2. La macro-génération
2.5.3. Les symétries du programme
2.5.33.1. Les données
2.5.33.2. Les traitements
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

Les symétries du programme

Comme il a déjà été dit, la relative proximité du modèle mathématique (les matrices) fait apparaître des symétries dans le programme.

On donne en annexe les fonctions de traitement (*put et *rem) et les fonctions auxiliaires (ascendance, *ins et *sup).

1. Les données

2. Les traitements

1. Les données

Les types PHYL et OPER, des phyla et des opérateurs, travaillent sur une même matrice ; il est donc assez logique de retrouver des similitudes entre les traitements relatifs aux phyla et ceux relatifs aux opérateurs.

On donne les deux fonctions où la similitude est la plus manifeste :

(de *putphyl (nomphyl attphyl)
   (let ((phyl (makephyl nomphyl attphyl)))
        (ins phylt phyl)
        (mapv '(lambda (oper)
                  (let ((drap (makedrap)))
                       (ins (phyloper oper) drap)
                       (ins (operphyl phyl) drap)))
              opert))
   (*putphyl-ana nomphyl attphyl))

(de *putoper (nomoper attoper)
   (let ((oper (makeoper nomoper attoper)))
        (ins opert oper)
        (mapv '(lambda (phyl)
                  (let ((drap (makedrap)))
                       (ins (operphyl phyl) drap)
                       (ins (phyloper oper) drap)))
              phylt))
   (*putoper-ana nomoper attoper))

Il suffit de remplacer lexicalement oper en phyl et phyl en oper pour changer de fonction. Le remplacement lexical, assez facile à faire sous un bon éditeur de texte, devient terriblement fastidieux si l'on veut l'exprimer dans le langage. En effet tous les termes utilisés dans les fonctions deviennent des paramètres de généricité ; la fonction est totalement "creuse", et il sera quasiment impossible de la modifier.

Les autres similitudes sont plus floues, mais non moins décelables : il serait encore plus difficile de les expliciter syntaxiquement ; il sera plus subtile de les traduire lexicalement (« textuellement »), mais raisonnablement pas impossible.