projet : CROAP

previous up next contents
Précédent : Fondements scientifiques Remonter : Fondements scientifiques Suivant : Études de langages de programmation


Sous-sections


   
Outils pour la manipulation de données structurées



Participants : Isabelle Attali, Yves Bertot, Thierry Despeyroux, Valérie Pascual, Mikael Pettersson, Laurence Rideau, Christophe Roudet, Laurent Théry.

Un des objectifs de notre groupe est de développer des outils génériques qui facilitent la construction d'applications interactives d'aide à la programmation. Les langages de programmation sont fortement structurés, par conséquent il est très souvent avantageux de pouvoir manipuler les programmes comme des structures de données arborescentes respectant une certaine syntaxe abstraite. Notre composant générique central est donc constitué par un noyau de manipulation d'arbres. Autour de ce noyau, gravitent plusieurs types d'outils : des outils d'analyse syntaxique, des outils d'affichage et des outils de manipulation sémantique. L'interactivité et la composante sémantique constituent les aspects les plus originaux de cette recherche.

Moteur d'affichage et outils interactifs de manipulation



Participants : Thierry Despeyroux, Valérie Pascual, Laurence Rideau, Christophe Roudet, Laurent Théry.

Dans des applications interactives, l'outil d'affichage est un acteur central. Il se doit de visualiser des données comme des formules mathématiques qui suivent des règles de typographie importantes. Il permet aussi de conserver une correspondance entre la visualisation d'un objet et sa structure pour permettre d'utiliser la visualisation comme un interacteur. Enfin cet outil se doit d'être programmable afin de permettre d'encoder facilement des réactions diverses aux interactions provoquées par l'utilisateur.

Par exemple, il est intéressant d'associer deux fenêtres pour que le contenu de l'une change en fonction de la position sélectionnée dans l'autre. Ce type d'association permet aisément de construire des outils qui guident l'utilisateur dans l'édition des programmes, afin de ne proposer que des modifications valides en fonction de la sélection courante. Il est aussi important que l'outil interactif de manipulation se prolonge dans un outil automatique à l'efficacité raisonnable, ce que nous étudions en développant un langage spécialisé dans la spécification de transformations de programmes.

L'outil d'affichage peut également être utilisé comme frontal pour un programme avec qui il communique soit en transmettant des données structurées, soit en communiquant des évènements. Pour construire ce type d'applications complexes, il importe de disposer d'interfaces précises et de protocoles pour faciliter la communication entre les différents programmes. Notre étude de ces interfaces et protocoles a mené à la mise au point d'un cadre général pour l'organisation d'applications distribuées [[7]].

Les travaux sur ce thème passent naturellement par des implémentations très poussées de prototypes interactifs. Ces implémentations étaient traditionnellement effectuées en Le_Lisp et ont été reprises dernièrement pour passer au langage Java. Le changement de technologie de Le_Lisp à Java permet de bénéficier de techniques de programmation à objets plus performantes, plus faciles à maintenir et à adapter à de nouvelles plateformes, et mieux adaptées aux compétences des ingénieurs de demain.

Spécifications sémantiques



Participants : Isabelle Attali, Yves Bertot, Joëlle Despeyroux, Thierry Despeyroux, Mikael Pettersson.

Pour fournir des outils qui aident à programmer correctement, il est nécessaire de maîtriser le sens des programmes et des langages de programmation. C'est l'objectif de la sémantique des langages de programmation. Plusieurs styles de sémantique existent, chacun étant adapté à une classe d'applications : la sémantique axiomatique, basée sur la possibilité d'annoter les programmes avec des formules logiques décrivant l'état des variables du programme, exprime bien les propriétés de programmes impératifs dans un langage fixé. La sémantique dénotationnelle, basée sur la possibilité de définir une fonction de l'ensemble des programmes vers le domaine des fonctions que ces programmes calculent, est bien adaptée pour comparer le pouvoir expressif de plusieurs langages de programmation. Dans notre projet, nous avons développé un style issu de la Sémantique opérationnelle structurelle, baptisé sémantique naturelle, qui permet de décrire formellement des outils sur un langage donné.

Le nom « sémantique naturelle » fait référence à la déduction naturelle, un style de description du raisonnement logique, auquel il emprunte la notion de règle d'inférence. Chaque règle d'inférence contient un certain nombre de prémisses et une conclusion, avec le sens intuitif que l'on aura prouvé une instance de la conclusion dès que l'on aura prouvé les instances correspondantes des prémisses. Le contenu de chaque prémisse ou conclusion est ce que l'on appelle un jugement. La forme des jugements peut varier, mais ils contiennent typiquement un contexte, représentant des informations connues, un sujet et des propriétés établies sur ce sujet.

Si l'on dispose de la description formelle d'un outil pour un langage de programmation, il est possible de simuler automatiquement le comportement de cet outil sur un programme du langage en construisant l'arbre de preuve dont la conclusion a ce programme pour sujet. En fait, la recherche de l'arbre de preuve peut être confiée à un interprète PROLOG. C'est l'un des résultats initiaux du projet CROAP d'avoir développé un langage de spécification appelé TYPOL permettant d'écrire des spécifications de sémantique naturelle et un compilateur vers PROLOG, permettant d'exécuter ces spécifications sur des programmes objets.

L'exécution en PROLOG a le défaut principal d'être gourmande en mémoire et, somme toute, plutôt lente. Pour cette raison, nous avons également cherché à découvrir d'autres stratégies d'exécution de spécification TYPOL. De telles stratégies efficaces peuvent souvent être trouvées si on se restreint à une certaine classe de spécifications TYPOL. Par exemple, une compilation à base de grammaires attribuées permet l'exécution sans unification de la classe de spécifications TYPOL restreintes aux aspects statiques des langages [[3]]. D'autre part, un évaluateur fonctionnel incrémental permet de mettre en oeuvre une classe plus large de spécifications permettant la description des aspects dynamiques. Enfin, Mikael Pettersson (Univ. Linköping) a obtenu des résultats très intéressants en termes de performances avec le développement de RML comme langage d'implantation de la sémantique naturelle.



previous up next contents
Précédent : Fondements scientifiques Remonter : Fondements scientifiques Suivant : Études de langages de programmation