:: Enseignements :: ESIPE :: E4INFO :: 2008-2009 :: Compilation ::
[LOGO]

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.

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++