Académique Documents
Professionnel Documents
Culture Documents
Introduction
2/93
3/93 4/93
5/93 6/93
Contenu de la pile :
b
b A A e D I mot de (VN ∪ VT )∗ ;
a a a a A A A S I début de la dérivation droite construite ;
I préfixe viable.
9/93 10/93
Ex : abbe# ?
[A → •aAb]
Trois types de transitions :
[S → •AD] [S → •AD]
I lecture de a :
[S 0 → •S] −→
E [S 0 → •S] −→
E [S 0 → •S] −→
L
( [X → α • aβ] , a ) → [X → αa • β]
[A → •b] [A → b•]
I expansion par Y → γ :
[A → a • Ab] [A → a • Ab] [A → a • Ab]
[S → •AD] [S → •AD] [S → •AD] ( [X → α • Y β] , ) → [X → α • Y β] [Y → •γ]
[S 0 → •S] E
−→ [S 0 → •S] L
−→ [S 0 → •S] R
−→ I réduction par Y → γ :
[A → aA • b] [A → aAb•] ( [X → α • Y β] [Y → γ•] , ) → [X → αY • β]
[S → •AD] [S → •AD]
[S 0 → •S] 0 0
−→ [S → •S] . . .−→ [S → S•]
L R
11/93 12/93
15/93 16/93
17/93 18/93
La pile permet de mémoriser les états parcourus lors des lectures et On a ce qu’on voulait :
des réductions. I l’arbre en ordre postfixe, et la dérivation droite ;
I avec des lectures et des réductions.
21/93 22/93
Reste à formaliser.
Mirabelle Nebut Analyse ascendante Mirabelle Nebut Analyse ascendante
Introduction Introduction
Principes Principes
Analyseurs LR(0) Analyseurs LR(0)
Construction de l’automate LR-AFD Construction de l’automate LR-AFD
Analyseurs SLR(1) Analyseurs SLR(1)
Tables d’analyse LR(0) Tables d’analyse LR(0)
Analyseurs LR(1) Analyseurs LR(1)
Un état est un ensemble d’item : si Q est l’ensemble des états On note δ la relation de transition de l’AF LR-AFD.
δ(q, X ) = q 0 signifie :
Q ⊆ P(It G )
I si l’état courant est q ;
L’alphabet de pile est Q. I et que X ∈ VT ∪ VN est le symbole courant à traiter ;
L’état initial q0 : I alors l’état courant devient q 0 .
I contient l’item initial de la forme [S 0 → •S] ; Exemple :
I sert à initialiser la pile. S
I δ(E1 , S) = E2 ou E1 −→ E2
b
L’état final qf contient l’item final, de la forme [S 0 → S•]. I δ(E1 , b) = E4 ou E1 −→ E2
23/93 24/93
Définition de l’automate LR(0) : relation de transition Définition de l’automate LR(0) : relation de transition
Lecture Réduction
Relation de transition de l’automate LR(0) pour une lecture : Relation de transition de l’automate LR(0) pour une réduction :
25/93 26/93
Et les expansions ?
Introduction
Les -transition d’expansion ont disparu avec la déterminisation.
Analyseurs LR(0)
Elles se font implicitement à l’intérieur des états.
Principes
E1 Construction de l’automate LR-AFD
[S 0 → •S] lecture de c possible après expansions Tables d’analyse LR(0)
[S → •AD] successives par :
[S → •B] c I S 0 → S ; [S 0 → •S] ∈ E 1
−→ E12 Analyseurs SLR(1)
[A → •aAb]
I S → B ; [S → •B] ∈ E 1
[A → •b]
[B → •aB] I B → c ; [B → •c] ∈ E 1 Analyseurs LR(1)
[B → •c]
27/93 28/93
29/93 30/93
35/93 36/93
Analyseurs LR(0)
Principes
Construction de l’automate LR-AFD Un analyseur LR(0) est défini par 2 tables :
Tables d’analyse LR(0) I la table des successeurs ;
I la table des actions.
Analyseurs SLR(1)
Analyseurs LR(1)
37/93 38/93
41/93 42/93
E ...
E c red A→b
red B→b
Une grammaire est LR(0) si sa table des actions contient pour [A → b•] b red A→b
chaque case : [B → b•] red B→b
I une seule action ...
I ou erreur. E ...
E
c red B → c
[A → •b] b red B → c
[B → c•] decale
...
45/93 46/93
Soit la grammaire S 0 → S, S → a | .
Conflit shift/reduce dans l’état initial (lire a, réduire par S → ) :
C’est peut-être à cause du 0. S 0 → •S
S → •a
On peut essayer une analyse LR(1) : beaucoup plus puissante.
S →•
C’est plus facile d’expliquer d’abord les grammaires SLR(1) :
Mais si la tête de lecture est :
Simple LR(1).
I dans {a}, alors lire a ;
I dans {#} = Suivant(S) alors réduire par S → .
47/93 48/93
Analyseurs LR(0)
Un analyseur SLR(1) prend en compte le symbole sous la tête de
Principes
lecture (k=1, cf LL(1)) pour décider d’une réduction :
Construction de l’automate LR-AFD
Tables d’analyse LR(0) Réduction par X → α seulement si tête lecture ∈ Suivant(X )
49/93 50/93
51/93 52/93
L → E | E ,L
Une grammaire est dite SLR(1) si l’automate LR-AFD ne contient
E → |x
pas de conflits au sens SLR(1).
S →L
53/93 54/93
Pour tout a ∈ VT et q ∈ Q :
I
si q contient un item de la forme [X → · · · • a . . . ]
E 0 : x 6∈ Suivant(E ) donc pas de conflit entre lire x et réduire
alors mettre decale dans la case (q, a)
par E → ;
I E 2 : ”, ” 6∈ Suivant(L) donc pas de conflit entre lire , et Pour tout q ∈ Q, q 6= qf et tout a ∈ VT ∪ {#} :
réduire par L → E ; I si q contient un item terminal de la forme X → α• ;
I E 4 : idem E 0. I alors, si a ∈ Suivant(X ), mettre réduction X → α dans la
case (q, a).
La grammaire est donc SLR(1).
Mettre acceptation dans la case (qf , #).
Mettre erreur dans les cases encore vides.
57/93 58/93
59/93 60/93
61/93 62/93
Grâce au k = 1 :
I l’analyse SLR(1) est strictement plus puissante que l’analyse
S → A | xb
LR(0) ;
A → aAb | x
I = elle engendre moins de conflits.
63/93 64/93
65/93 66/93
E1 S’
[S 0 → S]
E3 S
[S → •A] x
Conflit dans E3 car b ∈ Suivant(A). Et pourtant. . . −→ [S → x • b]
[S → •xb]
[A → x•] A
. . . la lecture de b impose la dérivation S 0 ⇒ S ⇒ xb. [A → •aAb]
[A → •x]
. . . mais Suivant trop imprécis pour le voir.
Comment être plus précis ? Les A de E 1 et E 3 ne peuvent être suivis que d’un #, pas d’un b.
Ce A (suivi par b) n’est pas expansé dans E 1 et E 3, mais dans E 6.
Si on considère les symboles de VT ∪ {#} qui peuvent suivre A
dans E3, on fait sauter le conflit.
67/93 68/93
69/93 70/93
Conflit car ”=” ∈ Suivant(D). Si on particularise les symboles de look-ahead aux états E 0 et E 5 :
Pourtant il n’existe pas de dérivation t.q. S ⇒∗ w1 D = w2
E0
S’ S’ [S 0 → •S]
[S → •D] E5
S S G
[S → •G = D] −→ [S → G • = D]
G D [G → • ∗ D] [D → G •]
D
[G → •i]
G = [D → •G ]
Principe
Introduction
Analyseurs LR(0)
Principes Enrichissement des items : items généralisés de la forme
Construction de l’automate LR-AFD [X → α•, L], avec L ⊆ VT ∪ {#}
Tables d’analyse LR(0)
Dans [X → α1 • α2 , L], L contient les symboles qui peuvent suivre
Analyseurs SLR(1) X à ce stade de l’analyse.
Remarque : pour [X → α•, L], L ⊆ Suivant(X )
Analyseurs LR(1)
75/93 76/93
seulement si le symbole sous la tête de lecture appartient à L. L’automate fini caractéristique d’un analyseur LR(1) (dit automate
LR(1)) est donc beaucoup plus gros que l’automate LR-AFD, ce
qui explique sa plus grande puissance.
77/93 78/93
79/93 80/93
E0 E0
[S 0 → •S, #] [S 0 → •S, {#}]
[S → •A, #] [S → •A, {#}]
S0 → S ou
[S → •xb, #] [S → •xb, {#}]
S → A | xb [A → •aAb, #] [A → •aAb, {#}]
A → aAb | x [A → •x, #] [A → •x, {#}]
E2 E5
Un ensemble d’items généralisés provoque un conflit S/R s’il S 0 → S•, {#} S → A•, {#}
contient à la fois : A
I un item de la forme [Y → · · · • a . . . , L], avec a ∈ VT ; E1 S
S 0 → •S, {#} x E3 E4
I un item de la forme [X → α•, L0 ] avec a ∈ L0 b
S → •A, {#} S → x • b, {#} S → xb•, {#}
S → •xb, {#} A → x•, {#}
Un ensemble d’items généralisés provoque un conflit R/R s’il
A → •aAb, {#}
contient à la fois : A → •x, {#} a A → a • Ab, {#} x
I un item de la forme [X → α•, L] ; A → •aAb, {b} ...
A → •x, {b}
I un item de la forme [Y → β•, L0 ] avec L ∩ L0 6= ∅. A
E6 a
⇒ pas de conflit au sens LR(1) en E 3 : G1 est LR(1). ...
...
85/93 86/93
[A → •Ab]
L’état E 6 de LR-AFD : [A → •aAb]
[A → •x]
S0 → S
a éclaté en deux états LR(1) :
S → G = D |D
G → ∗D | i
[A → •Ab, {#}] [A → •Ab, {b}]
D→G
[A → •aAb, {b}] et [A → •aAb, {b}]
[A → •x, {b}] [A → •x, {b}]
87/93 88/93
G
Transition E 0 −→ E 5 :
[S 0 → •S, #]
[S → •G = D, #] [S 0 → •S, {#}]
[S → •D, #] [S → •G = D, {#}] E5
[G → •∗D, =] [S → •D, {#}] [S → G • = D, {#}]
ou [D → G •, {#}]
[G → •i, =] [G → •∗D, {=, #}]
[D → •G , #] [G → •i, {=, #}]
Conflit S/R levé au sens LR(1) : G2 est LR(1).
[G → •∗D, #] [D → •G , {#}]
[G → •i, #] L’automate LR(1) comporte 14 états, contre 10 pour l’automate
LR-AFD.
89/93 90/93
Pour tout a ∈ VT et q ∈ Q :
si q contient un item de la forme [X → · · · • a . . . ]
alors mettre decale dans la case (q, a) Une grammaire est LR(1) si sa table des actions contient pour
chaque case :
Pour tout q ∈ Q, q 6= qf et tout a ∈ VT ∪ {#} :
I une seule action
I si q contient un item terminal de la forme [X → α•, L] ;
I ou erreur.
I alors, si a ∈ L, mettre réduction X → α dans la case (q, a).
Mettre acceptation dans la case (qf , #).
Mettre erreur dans les cases encore vides.
91/93 92/93