Académique Documents
Professionnel Documents
Culture Documents
COMPILATION
Licence ST Informatique de Lille
mars 2005
Feuille de TD 4
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 | ε
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).
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é.
E −→ E + E | E* | ( E ) | a | b | 1
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é.