Vous êtes sur la page 1sur 2

Licence d’informatique – 2004/2005

Compilation
Licence ST Informatique de Lille
avril 2005

Feuille de TD 5
Exercice 1 : On considère des arbres dont les noeuds sont étiquetés par des symboles. A chaque
symbole, est associé un entier positif ou nul : son arité. Un arbre sera correctement étiqueté si, pour
chaque noeud de l’arbre, le nombre de ses successeurs directs est égal à l’arité de son étiquette.
Dans l’exercice, les symboles considérés seront f d’arité 2, g d’arité 1 et c de arité 0.
Un arbre t sera représenté par sa notation linéaire, lin(t) définie inductivement par : si la racine
de t est étiquetée par f et a comme sous-arbre gauche t1 , et comme sous-arbre droit t2 , lin(t)
s’exprime par lin(t) = f (lin(t1 ), lin(t2 )) ; si la racine de t est étiquetée par g et a comme fils t1 ,
lin(t) s’exprime par lin(t) = g(lin(t1 )). Par exemple, f (g(c), f (c, g(g(c)))) et f (f (g(c), c), g(g(c)))
représentent bien des arbres sur cet alphabet tandis que ni f (c) ni f (g(c), g) ni g(c, c) ne sont
corrects.
La hauteur d’un arbre est définie comme étant la longueur de la plus grande branche de l’arbre ;
par exemple, c est de hauteur nulle, f (f (g(c), c), g(g(c))) a pour hauteur 3, f (g(c), f (c, g(g(c)))) a
pour hauteur 4. Un arbre est dit équilibré si toutes ses branches ont la même hauteur.
Question 1.1 : Définissez une grammaire algébrique qui génère les écritures linéaires des arbres
correctement étiquetés.
Question 1.2 : Associer aux règles de la grammaire de la question précédente des actions sémanti-
ques permettant de calculer :
– la hauteur de l’arbre.
– le nombre de feuilles.
– si l’arbre est équilibré.

Exercice 2 : Dans cet exercice, on considère des arbres binaires, dont les noeuds sont étiquetés
par des entiers et qui seront représentés sous forme ”linéaire”. Plus précisément, la syntaxe
est donnée par G = ({int, arbre vide, (, ), ”, ”), {ARBRE}, ARBRE, P ) avec P : ARBRE −→
int(ARBRE , ARBRE) | int | arbre vide
Question 2.1 : Cette grammaire est-elle LL(1) ? Sinon donner une grammaire LL(1) équivalente.
Question 2.2 : Construire la table d’analyse LL correspondante.
Question 2.3 : Décorer la grammaire d’actions sémantiques permettant de vérifier au cours de
l’analyse syntaxique si un arbre est un arbre binaire de recherche.

Exercice 3 : Soit la grammaire G définie par les règles :

E −→ E ou E | E et E | non E | V rai | F aux | Id | ( E )


Cette grammaire engendre les expressions booléennes pouvant contenir des variables comme l’ex-
pression (Riche ou Vrai) et Vieux ou non X ou Grand. On veut simplifier ces expressions en
fonction de l’occurrence des constantes booléennes Vrai ou Faux.
2 Licence d’informatique – 2004/2005 : Compilation

Exemple 1 (Riche ou Vrai) et Vieux ou non X ou Grand ou (G et non (Vrai ou X)) se


simplifie en Vieux ou non X ou Grand tandis que (Vrai ou Riche) ou (P et non Q) sera trans-
formée en Vrai.
Attention, on ne fait pas toutes les simplifications possibles ! Par exemple, (Truc ou non Truc)
sera inchangé (et non simplifié en Vrai). De même, on peut admettre que (Vrai et X) soit
transformé en (X) et non en X.
Question 3.1 : Trouver une grammaire LL(1) équivalente à la grammaire G.
Question 3.2 : Construire la table d’analyse LL correspondante.
Question 3.3 : Décorer la grammaire d’actions sémantiques permettant d’appliquer la simplifica-
tion demandée.

Exercice 4 : Dans un langage de formatage de texte à la Latex, on utilise une notion de boı̂te
pour positionner des caractères les uns par rapport aux autres. On distingue les boı̂tes horizontales
dont les éléments sont disposés en ligne les uns derrière les autres et les boı̂tes verticales dont les
éléments sont disposés en colonne, alignés à gauche. Les éléments composant une boı̂te sont des
caractères ou peuvent être eux-mêmes des boı̂tes. Pour définir le langage de description de boı̂te,
on propose la grammaire
G1 = (X, V, B, R) avec X = {h , v , ( , ) , x}, V = {B, L, L0 } et R = {
B −→ h ( L ) | v(L) | x
L −→ B L0
L0 −→ B L0 | ε
} où h(. . .) correspond à la description d’une boı̂te horizontale, v(. . .) à la description d’une boı̂te
verticale, et x à un caractère quelconque.
Exemple 2 La description de boı̂te v(x h(x v(x x) x) x) correspond à :
x
x x x
x
x
Question 4.1 : Trouver une description de boı̂te pour :
xx
xx

Pour préparer l’affichage des boı̂tes, il est nécessaire de connaı̂tre la hauteur et la largeur d’une
boı̂te (c’est à dire sa dimension) sachant qu’un caractère a comme hauteur 1 et comme largeur 1.
Exemple 3 La boı̂te de l’exemple 2 a une largeur de 3 et une hauteur de 4. La boı̂te de la question
a une largeur de 3 et une hauteur de 2.
Pour calculer cette dimension au cours de l’analyse syntaxique, on définit donc un type d’attribut
dimension regroupant les 2 informations hauteur et largeur, et un type d’attribut orientation
qui peut prendre l’une des deux valeurs HORIZONTAL ou VERTICAL.
Question 4.2 : Pour pouvoir calculer la dimension d’une boı̂te, dire, pour chacune des variables
B, L et L0 de la grammaire G1 , si elles doivent posséder un attribut dimension et/ou un attribut
orientation, en précisant s’il s’agit d’attribut(s) synthétisé(s) ou hérité(s).
Question 4.3 : Ajouter des actions sémantiques dans la grammaire G1 permettant le calcul de la
dimension des boı̂tes au cours de l’analyse syntaxique de leurs descriptions.

Vous aimerez peut-être aussi