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 Xxest un symbole terminal
ajouter xàFIRST(X)
pour toute règle XY1Y2. . . Yn
ajouter FIRST(Y1Y2. . . Yn)àFIRST(X)
Pour calculer F= FIRST(Y1Y2. . . Yn), appliquer l’algorithme suivant :
F= FIRST(Y1)− {ε}
k= 2
tant que knet FIRST(Yk1)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β ε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 aFIRST(α)
ajouter Aαdans M[A, a]
si εFIRST(α)alors
pour tout bFOLLOW(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(α) =
1 / 1 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !