Département d’Informatique
Master 1 ILC+ISI+RISE
Mémo : analyse syntaxique descendante
I. Calcul de FIRST
Appliquer les règles suivantes tant qu’elles ont un effet :
pour toute règle X→ε
ajouter εàFIRST(X)
pour toute règle X→xβ où xest un symbole terminal
ajouter xàFIRST(X)
pour toute règle X→Y1Y2. . . Yn
ajouter FIRST(Y1Y2. . . Yn)àFIRST(X)
Pour calculer F= FIRST(Y1Y2. . . Yn), appliquer l’algorithme suivant :
F= FIRST(Y1)− {ε}
k= 2
tant que k≤net FIRST(Yk−1)contient ε
ajouter FIRST(Yk)− {ε}àF
k=k+ 1
si k > n alors ajouter εàF
II. Calcul de FOLLOW
Appliquer les règles suivantes tant qu’elles ont un effet :
placer $dans FOLLOW(S), où Sest le symbole de départ
pour toute règle B→αAβ telle que β6=ε
ajouter FIRST(β)− {ε}àFOLLOW(A)
pour toute règle B→αA ou B→αAβ où ε∈FIRST(β)
ajouter FOLLOW(B)àFOLLOW(A)
III. Construction de la table d’analyse prédictive
On note M[A, a]l’entrée à utiliser lorsque le sommet de pile contient le symbole non terminal Aet
le premier symbole terminal de l’entrée est a. L’algorithme est :
pour toute règle A→α(où αest une suite de symboles)
pour tout symbole terminal a∈FIRST(α)
ajouter A→αdans M[A, a]
si ε∈FIRST(α)alors
pour tout b∈FOLLOW(A)(y compris $)
ajouter A→αdans M[A, b]
IV. Grammaire LL(1)
Une grammaire LL(1) est une grammaire qui vérifie, pour toute règle A→α|β:
1. FIRST(α)∩FIRST(β) = ∅
2. si ε∈FIRST(β)alors FOLLOW(A)∩FIRST(α) = ∅