Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
2 L'ANALYSE SYNTAXIQUE
2.1 Le rle de lanalyseur syntaxique
2.2 Les grammaires
2.3 Lanalyse descendante
2.4 Lanalyse ascendante
Traduction ch2 1
unit lexicale
analyseur
analyseur
lexical
syntaxique
(sur requte)
arbre
danalyse
Traduction ch2 2
nombre
(E)
E+E
EE
E*E
E/E
3 nombre
E
6 nombre
2 nombre
Traduction ch2 6
Analyse syntaxique :
tant donn un mot terminal, dterminer sil est ou non engendr
par la grammaire ; si oui, en donner un arbre danalyse.
Mthode universelle : essayer toutes les drivations partir de
laxiome, jusqu trouver le mot. Des rgles de longueur (aprs
modifications) permettent dliminer les impasses.
Mthode descendante (descente rcursive) : une procdure par
variable, les terminaux servant choisir la drivation (prvision)
et la validation.
Mthode ascendante : on lit le mot (dcalage) jusqu identifier
des drivation, quon rduit et empile (rduction).
Traduction ch2 7
A
E
G
T
U
F
Grammaire modifie
E$
(production augmente)
TG
+TG |
FU
*FU |
(E ) | nombre
procedure expression ;
begin writeln(E->TG) ;
terme ; encoreterme
end ;
procedure encoreterme ;
begin
if prevision = plus then
begin writeln(G->+TG) ;
correspond(plus) ;
terme ; encoreterme
end
else writeln(G->epsilon)
end ;
procedure expression ;
begin writeln(E->TG) ;
terme ;
while prevision = plus do
begin
writeln(G->+TG) ;
correspond(plus) ;
terme
end ;
writeln(G->epsilon)
end ;
En liminant la rcursivit
terminale et en regroupant
Traduction ch2 9
procedure facteur ;
begin
if prevision = ouvrante then
begin writeln(F->(E)) ;
correspond(ouvrante) ;
expression ;
correspond(fermante)
end
else if prevision = nombre then
begin writeln(F->nombre);
correspond(nombre)
end
else writeln(erreur syntaxique)
procedure analyse ;
end
;
begin writeln(A->E$) ;
expression ; correspond(dollar) ; writeln(analyse reussie)
end ;
procedure terme ;
begin writeln(T->FU);
facteur ;
while prevision = mult do
begin writeln(U->*FU) ;
correspond(mult) ;
facteur
end ;
writeln(U->epsilon)
end ;
PREMIER(x)
SUIVANT(x)
Calcul de PREMIER :
On construit un graphe entre tous les symboles grammaticaux.
Flche de x vers y ssi x y , et est annulable.
Ici, ne peut contenir que des variables, est quelconque.
PREMIER(x) = { a terminal | il existe un chemin de x a } ;
si x est annulable, il faut y ajouter .
Exemple de la grammaire prcdente : Annulables : G et U
Graphe :
(
G
nombre
Traduction ch2 12
Calcul de SUIVANT :
On construit un graphe entre tous les symboles grammaticaux.
Flche de x vers y ssi ou bien
il existe z x , y est terminal et y PREMIER() ;
il existe y x et est annulable.
Ici, et sont quelconques, mme vides, et y .
SUIVANT(x) = { a terminal | il existe un chemin de x a }.
Exemple de la grammaire prcdente :
F
*
Graphe :
SUIVANT na pas de sens pour laxiome
A de la production augmente.
U T
+
G
SUIVANT(G) = SUIVANT(E) = { $, ) }
SUIVANT(U) = SUIVANT(T) = { +, $, ) }
SUIVANT(F) = { *, +, $, ) }
$
)
Traduction ch2 13
symbole de
prvision
partie restant
analyser
Grammaires LL(1).
Si non annulable,rgle x applique lorsque a PREMIER() ;
Si annulable,rgle x applique lorsque a SUIVANT(x).
La grammaire est LL(1) lorsqu chaque tape, une seule rgle
satisfait aux critres prcdents.
Traduction ch2 14
(
1
4
5
7
n $
1
3
3
4
6
6
8
0A
1E
2G
3G
4T
5U
6U
7F
8F
E$
TG
+TG
FU
*FU
(E)
nombre
pile
Traduction ch2 16
E$
E +T
T
T *F
F
(E )
n
PREMIER :
A
(
n
SUIVANT :
F
$
+
tat 0
A
E
E
T
T
F
F
tat 1
E
E$
E +T
T
T *F
F
(E )
n
A E $
E E +T
$
+
tat 2
T
F
E T
T T *F
tat 3
T F
n
(
tat 5
tat 4
F n
n
F
E
E
T
T
F
F
(E )
E +T
T
T *F
F
(E )
n
E
T
F
ACCEPT
tat 6
E
T
T
F
F
E + T
T *F
F
( E )
n
T
F
(
n
tat 7
T T * F
F (E )
F n
(
n
tat 8
F (E )
E E +T
tat 9
E E +T
T T *F
3
4
5
tat 10
T T *F
4
5
tat 11
)
+
F (E )
6
2
3
Traduction ch2 18
Fonctionnement de lanalyseur :
Au dbut, la pile contient ltat 0.
On lit la lettre courante du mot analyser ; avec ltat du
sommet de pile, elle spcifie ltat empiler (dcalage).
Lorsquun tat contient un item du type x u , on peut
enlever de la pile les |u| tats au sommet, et empiler ltat
spcifi par le nouveau sommet et x (rduction).
Parfois des conflits se produisent : dcalagerduction ou
rductionrduction ; cas gnral, x u , y v ,
z r st, o s est est terminale. Le conflit peut tre
tranch lorsque SUIVANT(x), SUIVANT(y) et s sont
disjoints, en examinant le caractre de pr-vision.
Une telle grammaire est dite SLR(1).
Traduction ch2 19
n
d5
d6
r2
r4
d7
r4
r6
r6
d5
(
d4
r2
r4
A
r2
r4
r6
r6
d4
d5
d5
d4
d4
d6
r1
r3
r5
d7
r3
r5
d11
r1
r3
r5
E
d1
T
d2
F
d3
d8
d2
d3
d9
d3
d10
r1
r3
r5
Traduction ch2 20
Exemple : (3 + 2) * 4 $
Pile
Mot restant
0
04
045
043
042
048
0486
04865
04863
04869
048
0 4 8 11
03
02
(3 + 2) * 4 $
3 + 2) * 4 $
+ 2) * 4 $
+ 2) * 4 $
+ 2) * 4 $
+ 2) * 4 $
2) * 4 $
)*4$
)*4$
)*4$
)*4$
*4$
*4$
*4$
Rgle
Pile
Mot restant
027
0275
0 2 7 10
02
01
4$
$
$
$
$
F n
T F
E T
Rgle
F n
T T *F
E T
ACCEPT
Drivation obtenue :
F n
T F
E E +T
F (E )
T F
T T *F T * 4 F * 4
(E) * 4 (E + T) * 4
(E + F) * 4 (E + 2) * 4
(T + 2) * 4 (F + 2) * 4
(3 + 2) * 4
Traduction ch2 21
E$
E +T
T
T *F
F
(E )
n
()
($, +)
($, +)
($, +, *)
($, +, *)
($, +, *)
($, +, *)
tat 2
E T
($, +)
T T *F ($, +, *)
conflit lev
Utilisation de lambigut :
0A
1E
2E
3E
4E
E$
E +E
E *E
(E )
n
tat 0
A
E
E
E
E
tat 1
E
E$
E +E
E *E
(E )
(
n
tat 9
E n
A E $
E E +E
E E *E
tat 2
E
E
E
E
E
tat 3
E
E
E
E
E
(E )
E +E
E *E
(E )
n
E
E
E
E
E
E + E
E +E
E *E
(E )
n
tat 4
E * E
E +E
E *E
(E )
n
(
n
E E +E
E E +E
E E *E
+
*
3
4
2
9
tat 7
E E *E
E E +E
E E *E
(
n
+
*
3
4
2
9
tat 8
tat 5
E (E )
E E +E
E E *E
tat 6
ACCEPT
)
+
*
E (E )
3
4
Traduction ch2 25
tat 6
E E +E
E E +E
E E *E
Conflits dcalage-rduction
Sur $, ), pas de conflit, rduire
Sur +, rduire car + associatif gauche
Sur *, dcaler car * prioritaire sur +
tat 7
E E *E
E E +E
E E *E
n
d9
3
d9
d9
d9
3
r1
r2
r3
r4
+
1
d3
1
1
1
d3
r1
r2
r3
r4
*
1
d4
1
1
1
d4
d4
r2
r3
r4
(
d2
3
d2
d2
d2
3
r1
r2
r3
r4
)
2
2
2
2
2
d8
r1
r2
r3
r4
$
1
A
1
1
1
4
r1
r2
r3
r4
E
d1
d5
d6
d7