:: Enseignements :: ESIPE :: E4INFO :: 2008-2009 :: Compilation ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | Grammaires attribuées |
Le but de ce TD est d'utiliser des grammaires attribuées.
Elles serviront pour évaluer des expressions booléennes et traduire des déclarations Python en C.
Exercice 1 - Evaluation d'expressions booléennes
Soit une grammaire simple qui reconnaît des expressions booléennes simples.
(0) S->E$
(1) E->E or E
(2) E->E and E
(3) E->x
- Construire l'automate des items LR(0).
- Résoudre les conflits au moyen de priorités ou de règles d'associativité. Justifier.
- Faire l'analyse de x or x and x.
-
Chaque non-terminal et terminal peuvent recevoir des attributs.
A chaque production, on peut associer un certain nombre d'instructions qui sont exécutées lors d'une réduction par cette production.
Vous supposerez que le terminal x est un booléen et a un attribut val qui donne sa valeur booléenne.
On suppose aussi que le non-terminal E a un attribut val (qui est de type booléen).
Associer à chaque production des instructions afin que l'application de la grammaire sur une expression booléenne affiche son résultat.
- Simuler l'application de cette grammaire attribuée pour l'analyse de x or x and x
Exercice 2 - Traduction de déclarations Python en C
Le but de l'exercice est d'écrire un système de traduction à l'aide d'une grammaire attribuée qui transforme une déclaration multiple Python en C.
Par exemple, on souhaite que le code Python suivant :
x,y,z = 1,2.0,3.1
soit traduit en C de la manière suivante :
int x = 1;
float y = 2.0;
float z = 3.1;
- Ecrire une grammaire reconnaissant une déclaration multiple en Python.
- Construire l'automate LR(0).
- Faire l'analyse de l'exemple.
-
Associer à chaque production des instructions pour réaliser la traduction.
Indication: stocker valeurs, types et identificateurs dans des listes que l'on supposera initialisées.
Ces listes seront des attibuts des non-terminaux.
-
Mettre des conditions pour qu'il y ait exactement le même nombre d'identificateurs que de valeurs d'initialisation.
- Simuler la traduction sur l'exemple.
© Université de Marne-la-Vallée