:: Enseignements :: ESIPE :: E4INFO :: 2008-2009 :: Compilation ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | Vérification de type et génération de code intermédiaire |
Le but de ce TD est d'utiliser des grammaires attribuées pour vérifier les types d'expressions et générer du code intermédiaire à 3 adresses.
Exercice 1 - Vérification du type d'une expression
Soient des expressions qui acceptent les opérateurs binaires suivants :
l'addition (plus) et le OU logique (or).
Les opérandes peuvent être des booléens, des entiers, des réels ou des chaînes de caractères.
Par exemple, les expressions 1.0 plus 2.1 plus 1.3 et false or true sont valides.
Il est possible de combiner les opérations entre elles. Il existe cependant des contraintes sur les types des opérandes et leur combinaison en fonction de l'opération.
- Les chaînes de caractères acceptent uniquement l'opérateur plus (qui réalise la concaténation dans ce cas).
- Les entiers et les réels se combinent lors des additions.
- De même que les booléens, les entiers peuvent être utilisés avec le OU logique (par exemple en C, un entier non nul est vrai et un entier nul est faux)
- Les booléens ne peuvent pas apparaître dans les additions.
- Les réels ne sont pas acceptés dans les expressions avec un OU logique.
- Les entiers, les réels et les booléens ne se combinent pas avec des chaines de caractères.
- L'addition d'un réel avec un entier ou un réel donne un réel.
- L'addition de deux entiers donne un entier.
- Le OU logique résulte toujours en un booléen.
On supposera que les expressions sont évaluées de la gauche vers la droite.
Par exemple, il est possible d'avoir les expressions 'hono'+'lulu', 5.0+1+3 et 1+3or false.
Il est interdit d'avoir 'lulu'+2 et 1 or false + 3.
Exercice 2 - Code intermédiaire
Traduire à la main le code C suivant en code intermédiaire à 3 adresses :
int a = 10, n= 2, res = 1, i;
for(i=0;i<n;i++){
res = res * a;
}
return 0;
Exercice 3 - Encore du code intermédiaire
Soit la grammaire suivante :
S -> Xs$
Xs -> Xs X;
X -> I
X -> T
I -> id = E
E -> E + E
E -> E - E
E -> val
E -> id
E -> T
T -> id++
- Quel code permet-elle de reconnaître?
- Faire la grammaire attribuée qui traduit le code reconnu en code intermédiaire à trois adresses.
© Université de Marne-la-Vallée