Vous êtes sur la page 1sur 4

Chapitre 4 : Analyse descendante

L’analyse descendante, dans laquelle on construit l’arbre en descendant de la racine vers


les feuilles. Cette analyse correspond à un parcours descendant gauche (parce qu’on lit de
gauche à droite).

1) Analyse LL(1) :
Pour construire une table d'analyse, on a besoin des ensembles DEBUT et SUIVANT

 Ensemble début :
Debut(α)={a T \ α →aγ , γ (N T)+ }  { t {Ɛ} T \ α →t } α (N T)*

 Étapes de construction de l’ensemble debut :


 Si A → α1 / α2 / ….. / αn alors debut(A)=debut(α1)  debut(α2)  … debut(αn)
 debut(a)={a}
 debut(Ɛ)=Ɛ
 debut(aγ)={a} γ (N T)+
 debut(BX1….Xn) ↄ debut(B)-{Ɛ}
 si Ɛ debut(B) alors debut(BX1….Xn) ↄ debut(X1)-{Ɛ}
 si Ɛ debut(X1) alors debut(BX1….Xn) ↄ debut(X2)-{Ɛ}
.
.
.
 si Ɛ debut(Xn-1) alors debut(BX1….Xn) ↄ debut(Xn)-{Ɛ}
 si Ɛ debut(Xn) alors Ɛ debut (BX1….Xn)

Exemple:
S → ABc / aSc debut
A→aAB / Ɛ S b,a,c
B →bB / Ɛ A a, Ɛ
C→Bc / aC / Ɛ B b, Ɛ
C b,a,c, Ɛ

 Ensemble suivant :
suivant(A)={a T {#} \ Z →WAα #} avec a debut(α#) et w, α (N T)*, A N .

Mme : Korichi Wassila Page 1


 Étapes de construction de l’ensemble suivant :
1. {#} suivant(s)
2. Si Ǝ MDP αAaβ alors a suivant(A) α,β (N T)*
3. Si Ǝ MDP αABβ alors debut(Bβ)-{ suivant(A) α,β (N T)*
4. Si Ǝ une production B→ X1….XnA avec Xi (N T)
 Alors suivant(B) suivant(A)
 Si A→Ɛ alors suivant(B) suivant(Xn)
si Xn →Ɛ alors suivant(B) suivant(Xn-1)
.
.
si X2 →Ɛ alors suivant(B) suivant(X1)
Exemple :

S → ABc / aSc
A→aAB / Ɛ debut suivant
B →bB / Ɛ S b,a,c #,c
C→Bc / aC / Ɛ A a, Ɛ b,c
B b, Ɛ c,b
C b,a,c, Ɛ

2) Construction de la table d'analyse LL(1) :


La table d’analyse est à deux dimensions, les lignes contiennent les non terminaux, et
les colonnes les terminaux T[A,a] donne le numéro de la règle, si elle existe à utiliser pour
dériver A a fin d’attendre a

Algorithme construction de la table d'analyse LL(1) :


Debut
Pour chaque non terminal A N
Faire Pour chaque règle A→ α
Faire Pour chaque a debut(α)-{
Faire
T[A,a] :=N° règle A→ α
Fait
Si debut(α)
Alors Pour chaque a suivant(A)
Faire
T[A,a] :=N° règle A→ α
Fait

Fsi
Fait
Fait
Fin.

Mme : Korichi Wassila Page 2


Remarque :

 Chaque entrée non définie de la table d’analyse correspond à une erreur


 Une table d’analyse d’une grammaire LL(1) doit être mono définie (au plus une
règle par entrée)

Définition 1 :

Une condition nécessaire et suffisante pour qu’une grammaire soit LL(1) est
qu’elle soit :

 Non récursive gauche


 Factorisée
 Table d’analyse mono définie.

Définition 2 :

Une grammaire est LL(1) si :

 Non récursive gauche


 Factorisée
 A → α1 / α2 / ….. / αn
 Debut(αi) ∩ Debut(αj) =ø i ≠j
 Si αi →Ɛ alors Debut(αj) ∩ suivant(A)= ø pour tout i ≠j
 Si αi →Ɛ alors αj →Ɛ pour tout i ≠j

Exemple :

S → aAb / bS
A→bB / Ɛ
B →b
G est-elle LL(1) ?

3) Construction de l'analyseur LL(1) :


Nous disposons de la chaine d’entrée d’une table d’analyse, la chaine d’entrée comporte
une marque de fin(#) la pile à une instant donnée contient des symboles de la grammaire avec
#. Initialement la pile contient l’axiome de la grammaire au-dessus de #

Mme : Korichi Wassila Page 3


Algorithme :
Debut
tc← 1ere terme de la chaine
empiler(#S), fin_analyse=faux ;
Tantque fin_analyse=faux
Faire Si sommet_pile T
Alors Si tc= sommet_pile
Alors tc= ts , depiler
Sinon chaine incorrect, fin_analyse=vrai
Fsi
Sinon
Si sommet_pile N
Alors Si T[sommet_pile,tc]=ø
Alors chaine incorrect, fin_analyse=vrai ;
Sinon A= sommet_pile ,depiler,
Empiler l’image miroir du MDP de la
regle T[A,tc]
Fsi
Sinon Si tc= #
Alors chaine correct, fin_analyse=vrai ;
Sinon chaine incorrect, fin_analyse=vrai ;
Fsi
Fsi
Fsi
Fait
Fin .

Mme : Korichi Wassila Page 4

Vous aimerez peut-être aussi