mémo sur l`analyse descendante

publicité
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ù x est un symbole terminal
ajouter x à FIRST(X)
pour toute règle X → Y1 Y2 . . . Yn
ajouter FIRST(Y1 Y2 . . . Yn ) à FIRST(X)
Pour calculer F = FIRST(Y1 Y2 . . . Yn ), appliquer l’algorithme suivant :
F = FIRST(Y1 ) − {ε}
k=2
tant que k ≤ n et 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ù S est 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 A et
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(α) = ∅
Téléchargement