Vous êtes sur la page 1sur 2

Licence d’informatique – 2004/2005

COMPILATION
Licence ST Informatique de Lille
mars 2005

Feuille de TD 4

Exercice 1 : On considère la grammaire suivante engendrant des listes à la Lisp :

L −→ (S) | a
S −→ LS | ε

Question 1.1 : Construire les ensembles suivants et premiers pour les variables L et S.
Question 1.2 : Construire la table d’analyse LL correspondant.

Exercice 2 : La syntaxe d’un langage de requêtes simplifié est définie par la grammaire suivante :
G = ({id , σ , ( , ) , = , ./}, {REL , S , PRIM , COND , L} , REL , P ) avec P :
REL −→ PRIM S
S −→ ./ REL | ε
PRIM −→ id | σ COND ( REL )
COND −→ ( id = id L )
L −→ id = id L | ε

Exemple 1 σ(ville = lille nom = dupont)(a ./ b) est une requête possible.

Question 2.1 : Construire les ensembles premiers et suivants de cette grammaire.


Question 2.2 : Montrer que cette grammaire est LL(1).

On voudrait maintenant rajouter l’opérateur binaire ∪, sachant que ./ est prioritaire sur ∪.
Question 2.3 : Modifier la grammaire en conséquence tout en préservant son caractère LL(1).

Exercice 3 : On considère la grammaire suivante engendrant des fragments de programmes à


base de tant que :

S −→ tant que condition S | debut L fin | a


L −→ L; S | S

Question 3.1 : Cette grammaire n’est pas LL(1). Pourquoi ?


Question 3.2 : Trouver une grammaire LL(1) engendrant le même langage. Justifier en construi-
sant la table d’analyse LL correspondant.
2 Licence d’informatique – 2004/2005 : COMPILATION

Exercice 4 : On considère la grammaire suivante engendrant des fragments de programmes à


base de si alors sinon :

S −→ si E alors S S’ | a
S’ −→ sinon S | ε
E −→ b

La table d’analyse LL de cette grammaire contient une (et une seule) case contenant plus d’une
règle (elle en contient 2). La grammaire n’est donc pas LL(1). Habituellement, pour résoudre le
problème des si sans sinon, on fait correspondre tout sinon au dernier si sans sinon.

Question 4.1 : Laquelle des deux règles en conflit dans la table d’analyse LL faut-il choisir pour
appliquer ce principe ?
Question 4.2 : En déduire un analyseur récursif descendant pour le langage associé.

Exercice 5 : On considère la grammaire suivante engendrant les expressions rationnelles construi-


tes sur l’alphabet {a, b} :

E −→ E + E | E* | ( E ) | a | b | 1

L’alphabet terminal de cette grammaire est {+ , ∗ , ( , ) , a , b , 1 }. Le symbole 1 représentant


le mot vide de (a + b)∗ .
Cette grammaire est clairement ambiguë. On précise que l’étoile est prioritaire sur la concaténa-
tion, elle-même prioritaire sur l’union.

Question 5.1 : Trouver une grammaire LL(1) équivalente à cette grammaire qui tient compte de
ces priorités.
Question 5.2 : Écrire un analyseur récursif descendant pour le langage associé.

Vous aimerez peut-être aussi