Vous êtes sur la page 1sur 1

Corrigé

Exercice Grammaire LL(1)


On considère la grammaire utilisée pour les instructions d’un gestionnaire de pile :
G= {T, NT, S, P}
T = {dépiler, empiler, num, int, ( , ), ; , eof}, NT = { B, P, I }, S = B,

P= { B 🡪 P eof
P🡪P;I | I
I 🡪 dépiler ( ) | dépiler(int) | empiler(num)
}
a) Pourquoi G n’est-elle pas LL(1) ?
La grammaire est récursive à gauche donc elle n’est pas LL(1).
b) Donner une grammaire G’ équivalente
1. Eliminer la récursivité à gauche on ajoute un non-terminal P’

P= { B 🡪 P eof
P 🡪 IP’
P’🡪; IP’|ε
I 🡪 dépiler ( ) | dépiler(int) | empiler(num)

2. Factoriser si nécessaire
factorisation à gauche : on ajoute un non-terminal RI,

P= { B 🡪 P eof
P 🡪 IP’
P’🡪; IP’|ε
I 🡪dépiler( RI | empiler(num)
RI🡪 ) | int)
3. Donner les premiers et si nécessaires les suivants. En déduire la table d’analyse

ensembles First : l’algorithme fixe les ensembles suivants :


premiers(I)={ dépiler, empiler};
premiers(RI)={),int};
premiers(P’)={ ;,ε} ;
premiers(P)={dépiler,empiler}
Comme certains ensembles comportent ε, on est obligé de calculer les ensembles suivants
Suivants(P)={eof}
Suivants(P’)={eof}
Suivants(I)={ ; ,eof}
Suivants(RI)={ ; , eof}

Depiler Empiler Num Int ( ) ; Eof


P P 🡪 IP’ P 🡪 IP’
P’ P’🡪; IP’ P’🡪ε
I I 🡪dépiler(RI I 🡪empiler(num)
RI RI🡪int) RI🡪 )
4. G’ est-elle LL(1) ? Oui

Vous aimerez peut-être aussi