Vous êtes sur la page 1sur 2

Contrle continu - Compilation (L3 Info) - Aix-Montperrin - 04/03/2014 - C.

Ramisch

Contrle continu - Compilation (L3 Info)


Dure : 2h - documents autoriss
Aix-Montperrin, le 4 mars 2014

Conventions
Axiome : symbole non terminal gauche de la premire production de la grammaire
Symboles non terminaux : lettres MAJUSCULES ITALIQUES
Symboles terminaux : lettres minuscules true-type ou caractres spciaux simples

1 Problme : dclarations de variables de types complexes


Pour les prochaines questions, on considrera la grammaire Gdec ci-dessous. En C, on peut dclarer
des tableaux plusieurs dimensions, cest--dire des suites de cases dun type base. Nous considrerons
ici seulement les types base caractres (char, 1 octet), entiers (int, 4 octets) et rels (double, 8 octets).
Par exemple, la dclaration char phrase[ 20 ]; indique un tableau de caractres une dimension,
avec 20 cases de type char. La dclaration int ecran[800][600][3]; indique un tableau dentiers
trois dimensions, par exemple un cran de 800 lignes par 600 colonnes, avec 3 valeurs par pixel pour
encoder les couleurs en RGB. La grammaire ci-dessous permet de dclarer des variables de type base
ainsi que des tableaux composs de cases dun type base.

(1) D TB idv OTT ; D


(2) |
(3) TB char
Gdec : (4) | int
(5) | double
(6) OTT [ nb ] OTT
(7) |

Laxiome est une liste de dclarations D composes dun type base TB, un identificateur de variable
idv, une taille de tableau optionnelle OTT, point-virgule ; et une autre dclaration D, possiblement
vide. Un type base TB est un terminal char, int ou double. Une taille de tableau optionnelle OTT est
une liste de nombres nb entre crochets [ et ]. La liste peut tre vide, ce qui permet la fois de dclarer
des variables de type base et darrter la liste des dimensions lors de lapplication de la production
rcursive pour OTT.

Question 1 (5 pt) - Traduction dirige par la syntaxe


1. Dessinez larbre de drivation de la dclaration int ecran[ 800 ][ 600 ][ 3 ];
2. crivez un schma de traduction dirige par la syntaxe qui associe chaque production une action
smantique. Cette action a pour but de remplir lattribut no (nombre doctets) avec le nombre
doctets allouer en mmoire pour un tableau multi-dimensionnel.
3. Dcorez larbre syntaxique de la question 1 avec les valeurs de lattribut no. Combien vaut-il au
nud D, racine de larbre ?
4. Dans votre schma, lattribut no est-il synthtis ou hrit ? Pourquoi ?

1
Contrle continu - Compilation (L3 Info) - Aix-Montperrin - 04/03/2014 - C. Ramisch

Question 2 (6 pt) - Analyse LL(1)


1. Quels sont les symboles terminaux et non terminaux de Gdec ?
2. Calculez les ensembles Premier pour les symboles non terminaux de la grammaire Gdec .
3. Calculez les ensembles Suivant pour les symboles non terminaux de la grammaire Gdec .
4. Construisez la table danalyse LL(1) de la grammaire Gdec .

Question 3 (3 pt) - criture de grammaire (pointeurs et structures)

Nous voulons maintenant enrichir la grammaire Gdec avec les types pointeur et structure. Un pointeur
est dclar simplement en rajoutant une toile * entre le nom du type et lidentificateur de la variable.
Nous ne considrerons ici que les pointeurs de types base.
Pour les structures, on utilisera le mot-cl struct. Les structures sont des types complexes composs
de cases nommes, et qui, contrairement aux tableaux, nont pas forcment toutes le mme type. Par
exemple, la dclaration struct pixel{ int x; int y; char rgb[ 3 ]; } reprsente un pixel de
coordonnes entires x et y, avec un tableau de trois octets pour les composantes couleur r, g et b. On
pourrait aussi dfinir un cercle de faon rcursive, avec des structures imbriqus
struct cercle{
struct centre{ int x; int y; };
struct couleur{ char r; char g; char b; };
double rayon;
};
1. crivez une grammaire hors contexte, extension de Gdec , qui permet de dclarer des variables de
type base char, int et double, des tableaux et des pointeurs vers ces types base, ainsi que des
structures (struct) contenant ces derniers. Les tableaux et les pointeurs sont construits partir
des types base. Les structures peuvent contenir des types base, des tableaux, des pointeurs et
dautres structures.

2 Questions thoriques
Question 4 (4 pt) - Rcursivit gauche et ambigut
P P a | I b | b
G1 :
I I a | P b |
1. Dcrivez le langage L(G1 ) engendr par la grammaire G1 .
2. La grammaire G1 est rcursive gauche. crivez une grammaire G01 sans rcursivit gauche directe
ni indirecte, quivalente G1 , cest--dire telle que L(G1 ) = L(G01 ).
3. La grammaire G1 est-elle ambigu ? Pourquoi ?

Question 5 (2 pt) - Rpondez aux questions de manire succincte ( 5 lignes)


1. numrez les principales diffrences entre un analyseur lexical et un analyseur syntaxique dans
un compilateur. Pourrait-on construire un compilateur sans analyseur lexical ?
2. Pourquoi a t-on besoin de lensemble Suivant dans la construction de la table danalyse LL(1) ?