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.2. Etude quantitative de l'évolution des programmes
3.3. L'édition syntaxique
3.3.1. Définition d'un langage
3.3.2. Information de contexte
3.3.3. Exécution
3.3.4. Définition de propriétés
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

Définition de propriétés

Dans les exemples précédents, on peut juger que les choix de définition des opérateurs de la grammaire contraignent à l'écriture de programmes "très proches" du langage. Par exemple l'appel d'une fonction correspond à l'utilisation de l'opérateur call-fct et la donnée de paramètres ; le programme appelant connaît donc la nature syntaxique de l'élément appelé, alors qu'il n'y en a pas vraiment la nécessité.

On s'est déjà un peu extrait des spécificités du langage pour les variables :

On peut étendre la démarche aux fonctions :

Au lieu d'appeler une fonction "en le disant explicitement" :

(def EXP
   ((def BLOC-FCT
       ((bloc-fct((feuille)))))
    (def EXP ...))
   ((call-fct)))

on utilise le texte appelé, par sa propriété d'« utilisation » :

(def EXP
   ((def EXP ...))
   ((feuille)))

Par ce schéma, on ignore alors quel choix de représentation a été fait pour le concept « feuille ». L'"appel" pourra fournir :

feuille(a) ou a.feuille

selon la nature de la propriété d'« utilisation » du texte feuille.

La difficulté à masquer des définitions de texte conduit à introduire une barrière de visibilité à la définition d'une fonction. Par exemple, on définit :

(def compte
   ((def util () ((call-fct)))
    (def private ...))
   ((call-fct)))

Le texte compte offre les deux propriétés :

Dans sa partie privée, il définit la fonction :

(def private
   ((decl-fonction)
    (def bloc-fct
       ((def NOM ...)
        ...
        (def INSTR ...))))
   ((decl-fonction)))

Le schéma général de définition d'une fonction est donc :

compte = fonction
      -> util = ...
         private
            -> decl-fonction
               bloc-fct
                  -> NOM = ...
                     ...
                     INSTR = ...

Il est relativement simple : il s'agit d'un arbre de profondeur 2. Mais si l'on demande à l'utilisateur de construire et de maintenir lui-même cet arbre, alors il se révèlera certainement complexe – ou tout du moins pénible d'emploi. Il faudrait donc offrir à l'utilisateur un moyen d'exprimer en des termes simples des schémas de traitements pour le parcours ou la modification de l'arbre des textes. Il lui permettrait par exemple de se positionner directement sur les éléments significatifs de l'arbre – ici le premier élément significatif est le champ NOM ; tout ce qui précède répond au modèle de définition d'une fonction, mais ne l'intéresse pas.