Développement : construction d`un analyseur

Transcription

Développement : construction d`un analyseur
Développement : construction d’un analyseur syntaxique
Pierron Théo – Lacoste Cyril
18 avril 2014
On s’intéresse à la grammaire suivante :
E → E + T |T,
T → T × F |F,
F → (E)|id
d’axiome E.
Cette grammaire a des transitions linéaires à gauche, ce qui est incompatible avec une analyse
descendante. On va donc la modifier pour ne plus avoir de transition de la forme X → Xα (forme
de Greibach ?). On va travailler avec la grammaire :
E → T E′,
E ′ → +T E ′ |ε,
T → F T ′,
T ′ → ×F T ′ |ε,
F → (E)|id
d’axiome E.
On va calculer les ensembles Premier et Suivant :
• Premier(α) est l’ensemble des premières lettres des mots w tels que α →∗ w (et ε s’il est
dérivable à partir de α
• Suivant(A) est l’ensemble des terminaux a telles que E →∗ αAaβ. (Par convention Suivant(E)
contient le symbole $ symbolisant la fin du mot)
On a les propriétés suivantes :
Proposition 1
• Si a est un terminal, Premier(a) = {a}
• Si X → ε, ε ∈ Premier(X)
• Si X → Y1 . . . Yk , Premier(Y1 ) ⊂ Premier(X) et si pour tout i < j, ε ∈ Premier(Yi ),
Premier(Yj ) ⊂ Premier(X)
Proposition 2
• $ ∈ Suivant(E)
• Si A → αBβ, Premier(β) \ {ε} ∈ Suivant(B)
• Si A → αB ou A → αBβ avec ε ∈ Premier(β), Suivant(A) ⊂ Suivant(B).
Calcul des Premier :
• Premier(F ) = {(, id}
• Premier(T ′ ) = {×, ε}
• Premier(T ) = Premier(F ) = {(, id}
• Premier(E ′ ) = {+, ε}
• Premier(E) = Premier(T ) = {(, id}
Calcul des Suivant :
• Suivant(E) = {$, )} car on a la transition F → (E)
• Suivant(E ′ ) = Suivant(E) = {$, )} par E → T E ′
• Suivant(T ) = (Premier(E ′ )\{ε})∪Suivant(E) = {+, $, )} par E → T E ′ et ε ∈ Premier(E ′ )
• Suivant(T ′ ) = Suivant(T ) = {+, $, )} par T → F T ′
• Suivant(F ) = (Premier(T ′ ) \ {ε}) ∪ Suivant(T ′ ) = {), ×, +, $} par T → F T ′
On construit donc la table d’analyse syntaxique via l’algorithme 1. On obtient la table
suivante :
1
Algorithme 1: Construction d’une table d’analyse syntaxique
Entrées : G une grammaire
Sorties : M la table d’analyse
6
pour A → α ∈ G faire
pour a ∈ Premier(α) faire
M [A, α] ← M [A, α] ∪ {A → α}
si ε ∈ Premier(α) alors
pour b ∈ Suivant(A) faire
M [A, b] ← M [A, b] ∪ {A → α}
7
retourner M
1
2
3
4
5
id
E
E′
T
T′
F
E → T E′
Échec
T → FT′
Échec
F → id
+
E′
Échec
→ +T E ′
Échec
T′ → ε
Échec
×
(
)
$
Échec
Échec
Échec
′
T → ×F T ′
Échec
E → T E′
E′ → ε
T → FT′
Échec
F → (E)
Échec
Échec
Échec
T′ → ε
Échec
Échec
E′ → ε
Échec
T′ → ε
Échec
2

Documents pareils