LRDE Seminar : Transformers, 2 June 2004, EPITA, Salle P04
14h00 : Transformers : Transformation de programmes pour le C++ -- Clément Vasseur?
Le projet Transformers a pour objectif de fournir un environnement de transformation de programmes pour le C++. Il est basé sur StrategoXT, un ensemble d'outils de réécriture suivant le paradigme des stratégies.
De récents progrès nous ont permis d'améliorer sensiblement l'état du projet. Parmi les avancées remarquables, on peut noter l'ajout de nouveaux filtres de désambiguisation,
la gestion des directives de préprocesseur, et une amélioration de l'infrastructure du projet et de la batterie de tests.
Nous ferons dans cet exposé un état des lieux du projet tel qu'il est actuellement, en détaillant les principaux axes de travaux récents, ainsi que les recherches envisagées
pour le futur proche.
14h30 : Grammaires attribuées et StrategoXT pour la désambiguisation du C++ dans Transformers -- Valentin David
Dans Transformers, les données proches de la syntaxe du C++ sont incluses dans la grammaire. Cela facilite la maintenance, améliore la modularité, réduit les risques d'erreur
s. Cependant, la
désambiguisation reste détachée.
Le C++ est sensible au contexte, cependant on utilise une grammaire hors contexte ambiguë comme support. Il faut donc trouver un formalisme pour introduire le contexte dans c
ette grammaire. Une
solution retenue est d'exprimer ce contexte à l'aide d'une grammaire attribuée. Dans le monde de StrategoXT, les grammaires attribuées n'existent pas, mais la modularit
é de cet environnement permet de rajouter ces fonctionnalités.
Cet exposé présentera d'abord les grammaires attribuées, ensuite, une tentative d'implémentation dans StrategoXT. Enfin, nous verrons comment écrire la désambiguisation
du C++ à l'aide de cette technique.
15h30 : Transformers: Vérification des types en C++ -- Julien Roussel?
En programmation, les types des données sont utilisés pour regrouper
en catégories bien distinctes les valeurs (données) que l'on veut
manipuler. Cette caractérisation cherche à distinguer les données
selon leur nature, dans une classification qui est sémantique. La
vérification des types est une étape de l'analyse des programmes qui
permet de détecter et de réduire les erreurs d'incohérence entre les
types introduites par le programmeur.
Ces informations assurent une sûreté supplémentaire
dans les programmes et permettent entre autre d'améliorer la
désambiguisation sémantique dans le projet Transformers (un
environnement de transformation de programmes pour le C++). Le langage C++, de
part sa complexité, fait de la vérification des types un problème
épineux, surtout lors du traitement des templates.
Cet exposé présentera une solution élégante pour une vérification des
types efficace dans Transformers, ce qu'elle apporte et les
problèmes qu'elle pose.
16h15 : Les générateurs de générateur de code -- Clément Vasseur?
La fonction principale de la partie terminale (back-end) d'un compilateur est la sélection d'instructions. Son rôle est de transformer la représentation intermédiaire du programme en instructions assembleur pour la machine cible.
Il existe différentes méthodes pour rendre la sélection d'instructions systématique et performante. Ainsi, il est possible de générer le générateur de code, de manière
analogue à la génération d'analyseur syntaxique. Le but est de créer le générateur de code à partir d'une
spécification indiquant la correspondance entre les sous-arbres de représentation intermédiaire et des instructions à émettre.
Dans un premier temps, nous verrons comment se passe la génération de code, puis nous verrons les méthodes qui permettent de l'automatiser. Enfin nous en verrons une implémentation concrète appliquée au Tiger d'Appel.
to top