LRDE Seminar: 01 Décembre 2004, TRANSFORMERS, EPITA, Amphi P004
14h00 : Transformers : transformation de programme en C++ -- Clément Vasseur?
Le projet Transformers, développé au LRDE, a pour objectif de fournir
un environnement de transformation de programmes pour le C++. Il est
basé sur StrategoXT, un ensemble d'outils qui combinent grammaires
hors-contexte, analyseur syntaxique généralisé et réécriture suivant
le paradigme des stratégies.
La transformation d'un programme est décomposée en plusieurs étapes
indépendantes. D'abord, un analyseur syntaxique généralisé utilise la
grammaire ambiguë du standard ISO pour produire un ensemble d'arbres
de syntaxe à partir d'un code source. Puis la phase de
désambiguïsation sélectionne l'unique arbre qui correspond à l'entrée.
Celui-ci est alors transformé, puis reconverti en C++ pour obtenir le
code transformé. De plus, Transformers propose une grammaire
attribuée du C99, les attributs étant utilisés pour la
désambiguïsation.
Cette présentation a pour but d'introduire cet environnement, afin de
faire le point sur les technologies mises en oeuvre, l'architecture du
projet, les résultats obtenus ainsi que les directions à suivre pour
le faire évoluer.
14h30 : Grammaires attribuées adaptées à la désambiguïsation du C++ -- Valentin David
Transformers est un ensemble d'outils permettant la manipulation de
C++ en StrategoXT. Cependant, le C++ est loin d'être un langage facile
à analyser. L'approche habituelle (
id est pour les grammaires
hors-contexte) n'est pas applicable. Une solution est d'utiliser les
grammaires attribuées. Il s'agit d'exprimer des règles de
désambiguïsation dépendantes du contexte dans une sur-grammaire
hors-contexte ambiguë.
Cependant, certains problèmes tels que ceux liés à la gestion des
patrons de types (
template), nous empêchent d'utiliser un
système de grammaires attribuées classique. Cet présentation a pour but
d'expliquer les limitations des systèmes classiques et d'introduire les
évolutions nécessaires pour la désambiguïsation du C++.
15h30 : Vérification de type en C++: étude des solutions existantes -- Julien Roussel?
La vérification de type en C++ dans le cadre de la grammaire standard a
déjà été analysée et ses problèmes sont connus. L'analyse syntaxique du
C++ ne peut être effectuée que si son typage est pris en compte. Ainsi
la vérification de type est nécessaire dès la phase d'analyse
syntaxique, faisant de cette dernière une étape complexe du processus de
compilation.
Actuellement, de nombreux outils manipulant du C++, tels que des
compilateurs ou des générateurs de documentation, utilisent des
techniques variées pour l'analyse syntaxique, et donc pour le typage.
Il est intéressant de se pencher sur les méthodes utilisées afin d'en
tirer des enseignements pour l'évolution de Transformers,
l'environnement de transformation de programmes du LRDE.
Le but de cette présentation est donc d'étudier les différentes méthodes
mises en oeuvre pour typer le C++. Après avoir rappelé brièvement
les soucis posés par la vérification de type en C++, plusieurs outils
seront analysés: Doxygen, OpenC++, GCC, et d'autres.
16h15 : Désambiguïsation sémantique : comparaison de plusieurs approches -- Clément Vasseur?
Les grammaires hors-contexte et l'analyse syntaxique généralisée sont
de plus en plus utilisées car ces technologies permettent d'analyser
des langages réels en utilisant un formalisme simple et
naturel. Ainsi, des environnements de transformation de programme tels
que ASF+SDF ou StrategoXT sont des outils solides pour entreprendre le
traitement de n'importe quel langage.
De manière générale, les grammaires hors-contexte permettent de
spécifier des langages ambigus. À partir de là, un analyseur
syntaxique généralisé produit un ensemble d'arbres de syntaxe, un pour
chaque interprétation possible du texte d'entrée. Cette forêt de
syntaxe doit être traitée par la suite, afin de sélectionner l'arbre
qui correspond à l'entrée en prenant en considération les règles
sémantiques. Cette étape est appelée le processus de
"désambiguïsation".
Lors de cette présentation, nous décrirons trois méthodes différentes
pour effectuer cette désambiguïsation sémantique : la réécriture de
termes guidée par une spécification algébrique (ASF+SDF), ou en
utilisant des stratégies non-prédéfinies (StrategoXT), ou alors en
utilisant le formalisme des grammaires attribuées. Nous discuterons
des points forts et des points faibles de chacune des approches.
to top