informatique
Par N. Chenfour
Soit la grammaire des expressions arithmétique suivante :
1.
E à T E’
2.
E’ à + T E’
3.
E’ à - T E’
4.
E’ à e
5.
T à F T’
6.
T’ à * F T’
7.
T’ à / F T’
8.
T’ à e
9.
F à id
10. F à nb
11. F à ( E )
On note VT : le Vocabulaire Terminal. Pour la grammaire précédente :
VT = { + , - , * , / , id , nb , ( , ) }
On note VN : le Vocabulaire Non Terminal. Pour la grammaire précédente :
VN = { E , E’ , T , T’ , F }
Le vocabulaire du langage noté V est = VT ∪ VN.
1. Calcul de First :
L’algorithme First peut être appliqué à une chaîne χ appartenant au vocabulaire V du langage. First ( χ) { if ( χ ∈ VT ) {
F = { χ } ;
}
else if ( χ ∈ VN ) {
F = {} ;
Pour toute production [ χ à α ] {
F = F ∪ First(α) ;
}
} else if ( χ == X1 X2 X3 ... Xn) { i = 1; while ( (i < n) && (e ∈ First(X i)) )
F = F ∪ First(Xi); i++; }
F = F ∪ First(Xi);
}
return F;
}
N. Chenfour
1
2. Calcul de Follow :
L’algorithme Follow ne peut être appliqué qu’à un élément X du vocabulaire non terminal
VN.
Follow (X) {
F = {} ; if ( X est = à l’axiome de la grammaire ) {
F = { $ } ;
}
Pour toute production [ A à α X β ] {
F = F ∪ First(β) \ {e} ; if ( (β == e) || (e ∈ First(β)) ) {
F = F ∪ Follow(A) ;
}
}
}
Exemple :
First
Follow
E
id , nb , (
$,)
E’
+,-,e
$,)
T
id , nb , (
+,-,$,)
T’
*,/,e
+,-,$,)
F
id , nb , (
*,/,+,-,$,)
N. Chenfour
2
3. Calcul de la table d’analyse LL(1) :
L’algorithme consiste à répartir les différentes productions sur les cellules de la table d’analyse que nous notons TA.
RemplirTableD’Anlyse (X) {
Pour toute production [ A à α ]) {
Pour tout élément a ∈ (First(α) \ {e}) {
TA[A][a] = [ A à α ];
}
if (α == e || e ∈ First(α)) {
Pour tout élément b ∈ (Follow(A)) {
TA[A][b] = [ A à α ];
}
}
}
}
Exemple :
TA
+
-
*
/
id
E’
2
1
8
8
6
5
3
10
4
8
5