Sébastien VERBOIS
Sections
1 Une grammaire LR(0) 2
1
1 Une grammaire LR(0)
1.1 Grammaire originale 1.2 Grammaire augmentée
(1) S ::= Ac
S ′ ::= S
(2) A ::= AaAb
S ::= Ac
(3) A ::= d
A ::= AaAb|d
2
2 Une grammaire SLR(1) non LR(0)
2.1 Grammaire originale 2.2 Grammaire augmentée
(1) S ::= 0S2
(2) S ::= A S ′ ::= S
(3) A ::= 1A S ::= 0S2|A
(4) A ::= 1 A ::= 1A|1
3
3 Une grammaire LALR(1) non SLR(1) (Dragon)
3.1 Grammaire originale 3.2 Grammaire augmentée
(1) S ::= G=D
(2) S ::= D S′ ::= S
(3) G ::= ∗D S ::= G = D|D
(4) G ::= id G ::= ∗D|id
(5) D ::= G D ::= G
id E4 * G
G → *.D {=,#} E8
* D → .G {=,#} G D → G. {=,#}
E5
G → .*D {=,#} E7
G → id. {=,#} id
G → .id {=,#} D G → *D. {=,#}
*
id
3.5 Calcul de SU IV AN T
• SUIV ANT (D) = SUIV ANT (S) ∪ SUIV ANT (G) = {#, =}
4
4 Un conflit R/R dans une grammaire ambiguë (juin
2002)
4.1 Grammaire originale 4.2 Grammaire augmentée
X ::= Xf
X ::= hXf X ′ ::= X
X ::= g X ::= Xf |hXf |g
4.4 Remarques
• Les mots de la grammaire sont du type hm gf m+n avec m, n ∈ N.
• La grammaire est ambiguë. Le mot hgf f possède les deux arbres d’analyse suivants :
X X
X f h X f
h X f X f
g g
• Les symboles de prévision LALR(1) permettent de lever le conflit S/R de E1 , mais pas
le conflit R/R de E6 .
X ::= AB
A ::= hAf |g
B ::= f B|ǫ
5
5 Priorité et associativité pour lever l’ambiguı̈té
5.1 Grammaire 5.2 Grammaire augmentée
(1) E ::= E+E
(2) E ::= E∗E
(3) E ::= (E) E ′ ::= E
(4) E ::= id E ::= E + E|E ∗ E|(E)|id
6
5.5 Règles de priorité et d’associativité
• Les deux conflit S/R de E1 sont levés grâce aux symboles de pré-vision LALR(1) mais
il reste deux conflits S/R en E7 et deux conflits S/R en E8 .
• Ces règles d’associativité et de priorité peuvent être ajoutées à la grammaire dans Y ACC
à l’aide des deux lignes suivantes :
%left ’+’
%left ’*’
7
6 Examen de juin 2002 (Charleroi)
6.1 Grammaire originale 6.2 Grammaire augmentée
(1) X ::= Xa
(2) X ::= aXb X ′ ::= X
(3) X ::= a X ::= Xa|aXb|a
6.4 Remarques
• Les mots de la grammaire sont du type an (ba∗ )m avec m, n ∈ N et n > m.
• Les symboles de prévision LALR(1) permettent de lever le conflit S/R de E1 , mais pas
le conflit S/R de E2 .
8
7 Bien calculer les symboles de pré-vision LALR(1)
7.1 Grammaire 7.2 Grammaire augmentée
S ::= nASA
S ::= s S′ ::= S
A ::= aB S ::= nASA|s
B ::= aAB A ::= aB
B ::= ǫ B ::= aAB|ǫ
E0 E3
S’ → .S {# } s S → s. {#,a } s
S → .nASA{# }
E4
S → .s {# } n E2 S → nA.SA{#,a }
S S → n.ASA{#,a } A S → .nASA{a }
E1 n
A → .aB {n,s } S → .s {a }
S → S. {# }
a
E5 S
E8 A → a.B {n,s,#,a } E6
B → a.AB {n,s,#,a } a B → .aAB {n,s,#,a } a S → nAS.A{#,a }
A → .aB {a,n,s,# } a B →. {n,s,#,a } A → .aB {#,a }
a B A
A E7 E9
E10 A → aB. {n,s,#,a } S → nASA.{#,a }
B → aA.B {n,s,#,a }
B → .aAB {n,s,#,a }
B E11
B →. {n,s,#,a }
B → aAB. {n,s,#,a }
7.5 Questions
• D’où vient le symbole de pré-vision a dans l’item S → nA.SA de l’état E4 ?
• Expliquer comment calculer les symboles de pré-vision de l’item A → .aB de l’état E8 .
7.6 Remarque
• Les états E5 et E10 présentent des conflits S/R qui ne sont pas levés par les symboles
de pré-vision LALR(1).
9
8 Une grammaire LR(1) non LALR(1)
8.1 Grammaire originale 8.2 Grammaire augmentée
S′ ::= S
S ::= aAd|aBe|bAe|bBd S ::= aAd|aBe|bAe|bBd
A ::= c
A ::= c
B ::= c
B ::= c
E4 E10
E2 S → aA.d {# } d S → aAd. {# }
S → a.Ad {# } A
E5 E11
S → a.Be {# }
B S → aB.e {# } e S → aBe. {# }
A → .c {d }
B → .c {e } E6
c
E0 a A → c. {d }
S’ → .S {# } B → c. {e }
S → .aAd {# }
S → .aBe {# } E9
S → .bAe {# } A → c. {e }
S → .bBd {# } E3
B → c. {d }
b S → b.Ae {# } c
S E7 E12
S → b.Bd {# }
E1 A S → bA.e {# } e S → bAe. {# }
A → .c {e }
S’ → S. {# }
B → .c {d } B E8 E13
S → bB.d {# } d S → bBd. {# }
10