Vous êtes sur la page 1sur 2

Analyse LL

Licence info S5
TD COMPIL – 2012-2013

Exercice 1 : Listes à la Lisp


On s’intéresse à la grammaire suivante G d’axiome L, de terminaux {a, (, )}, décrivant des listes à
la Lisp (L signifie  liste  et S signifie  suite d’éléments ) :
L→(S) | a
S→LS | 
On donne pour cette grammaire la table d’analyse suivante :
( a ) #
L L→(S) L→a erreur erreur
S S→LS S→LS S→ erreur
Soit m le mot (a()).

Q 1.1 : Donner la suite des piles résultant de l’analyse de m par l’automate LL(1) associé à G. Construire
en même temps l’arbre syntaxique et la dérivation gauche pour m. 2

Q 1. 2 : En suivant les conventions du cours, donner les méthodes (signature et corps) de l’analyseur
récursif descendant qui reconnaissent respectivement les non-terminaux L et S. 2

Exercice 2 : Itinéraire et analyse syntaxique descendante


On s’intéresse à une grammaire GI des instructions (très simplifiées) délivrées par un logiciel de calcul
d’itinéraire, du style avancer 100m, au panneau Lille tourner à gauche, avancer 20m, tourner à droite.
On utilise pour ce faire les symboles GO (avancer Xm), TL (turn left), TR (turn right) et PAN (panneau).
On a GI = {VT , VN , route, P } avec VT = { GO, TL, TR, PAN }, VN = { route, inst, panneau, turn } et
P contient les productions :
route → inst | inst route
inst → GO | panneau turn
turn → TL | TR
panneau →  | PAN

Q 2.1 : Cette grammaire n’est pas LL(1) : pourquoi ? 2

Q 2.2 : Donner une grammaire G0I équivalente à GI et qui vous semble LL(1). 2

Q 2.3 : Calculer les ensembles Premier et Suivant pour G0I . 2

Q 2. 4 : Donner la table d’analyse LL(1) de G0I . Justifier en utilisant cette table que G0I est une
grammaire LL(1). 2

Q 2. 5 : En suivant les conventions du cours, donner les méthodes (signature et corps) de l’analyseur
récursif descendant qui reconnaissent respectivement le non-terminal panneau et le non-terminal inst. 2

Q 2. 6 : G0I est-elle une grammaire ambiguë ? Le langage L(G0I ) est-il algébrique ? régulier ? Justifier
vos réponses. 2

Exercice 3 : Pour bien comprendre les calculs de Premier et Suivant


Soit la grammaire suivante (légèrement alambiquée) d’axiome S et de terminaux {a, b, e, d, f} :
TD COMPIL Analyse LL

S → ABC | DAD
A → aA | 
B → bB | 
C → eC | 
D → dD | f

Q 3.1 : Construire la table d’analyse de cette grammaire et montrer qu’elle est LL(1). 2

Q 3.2 : Que se passe-t-il si :


1. on remplace C →  par C → e ?
2. on remplace B →  par B → a ?
3. si on ajoute B → a ?
4. on remplace D →  par D → d ?
2

Exercice 4 : Forme eBNF, grammaire LL(*)


On reprend la grammaire GI de l’exercice 2.

Q 4.1 : Donner une grammaire G00I , sous forme eBNF, équivalente à GI . 2

Q 4.2 : La grammaire G00I vous semble-t-elle LL(*) ? 2

Exercice 5 : Forme eBNF et grammaires LL(*) à opérateurs

Q 5.1 : On considère la grammaire suivante, que vous connaissez par coeur :


E → E+E | E−E | E∗E | E/E | id | (E)

Donner une grammaire équivalente sous forme eBNF, LL(*), en considérant les associativités et priorités
des opérateurs standard. 2

Q 5.2 : On considère la grammaire de terminaux {a, +, * }, d’axiome E et de productions :


E → E+C | C C → CS | S
S → S∗ | X X→a
Quel est le langage engendré par cette grammaire ? Donner une grammaire équivalente sous forme eBNF,
qui est LL(*). 2

Q 5.3 : On considère la grammaire de requètes suivante :


req → req join req | req union req | select cond ( req ) | id

Donner une grammaire équivalente sous forme eBNF, LL(*), en sachant que l’opérateur de jointure est
prioritaire sur celui d’union, que l’opérateur d’union est associatif à gauche, et celui de jointure l’est à
droite. 2

Vous aimerez peut-être aussi