IFT313
Introduction aux langage formels
Francis Bisson
Département d’informatique Université de Sherbrooke
Lab 6
Analyses LR(0) et SLR(1)
EXERCICE 1
Exercice 1
Soit la grammaire G= ({S, E}, { id, +, ), ( }, R, S), avec R =
{
1. S → E 2. E → id 3. E → id (E) 4. E → E + id }
a. Donnez l’AFD LR(0) de la grammaire.
b. Donnez la table d’analyse LR(0).
c. Est-ce une grammaire LR(0)? Expliquez.
d. Donnez la table d’analyse SLR(1).
e. Est-ce une grammaire SLR(1) ? Expliquez.
1.a AFD LR(0).
Closure([S’S])
={[S’ S], [S E], [E id], [E id(E)], [E E+id]}
Closure([S’S])
={[S’ S]}
=Closure({[SE], [E E+id]})
={[SE], [E E+id]}
=Closure({[E id], [E id(E)]})
={[E id], [E id(E)]}
0 1
2 3
=Closure([E E+id])
={[E E+id]}
4
=Closure([E id(E)])
={[E id(E)],[E id], [E id(E)],[E E+id]}
5
Goto(4, id)
=Closure([E E+id])
={[E E+id]}
6
=Closure({[E id(E)], [E E+id]})
={[E id(E)], [E E+id]}
7
=Closure([E id(E)])
={[E id(E)]}
8
s E
+
(
id
E
) +
id id
1.b Table d’analyse LR(0)
id + ( ) $ S E
0 s3 1 2
1 acc
2 r1 s4
r1 r1 r1 r1
3 r2 r2 s5
r2 r2 r2
4 s6
5 s3 7
6 r4 r4 r4 r4 r4
7 s4 s8
8 r3 r3 r3 r3 r3
1.c. Ce n’est pas une grammaire LR(0) parce que la table d’analyse contient des conflits dans les entrées [2,+] et [3,(].
action/goto goto
1.d. Table d’analyse SLR(1)
id + ( ) $ S E
0 s3 1 2
1 acc
2 s4 r1
3 r2 s5 r2 r2
4 s6
5 s3 7
6 r4 r4 r4
7 s4 s8
8 r3 r3 r3
1.e. C’est une grammaire SLR(1) parce que la table d’analyse SLR(1) n’a pas de con- flit.
action/goto goto
EXERCICE 2
Exercice 2 - Intro 1/2
L’instruction
if expression then expression else expression
fait partie d’un bon nombre de langages de programmation.
La grammaire correspondante la plus naturelle est ambiguë. Avec une instruction du genre if e1 then if e3 then e3 else e4
L’analyseur LR aurait deux dérivations (deux interprétations) possibles : 1. if e1 then if e3 then e3
else e4
2. if e1 then if e3 then e3 else e4
Dans la table d’analyse cette ambiguïté sera reflété par un conflit shift/reduce. La première interprétation donne priorité à reduce. La deuxième interprétation donne priorité à shift. Sé- mantiquement, c’est généralement la deuxième interprétation qui prévaut : un else corre- spond toujours au plus récent if dans la même portée.
Exercice 2 - Intro 2/2
La grammaire suivante G= ({S}, {i, e, o}, R, S), avec R =
{
1. S → iSeS 2. S → iS 3. S → o }
approxime l’instruction if expression then expression else expression en utilisant i pour désigner ‘if expression then’, e pour désigner ‘else’ et o pour le reste de l’instruction. Les deux arbres d’analyse suivants illustrent deux dérivations droites possibles pour l’entrée iiseo.
(1) S=>iSeS => iSea => iiSeo=>iiaeo (2) S=>iS => iiSeS => iiSeo=>iiaeo S
i S
i S e S
o o
Priorité à reduce Priorité à shift
S
i S e S
i S
o
o
Exercice 2 - Questions
Étant donné la grammaire G= ({S}, {i, e, o}, R, S), avec R =
{
1. S → iSeS 2. S → iS 3. S → o }
a. Donnez l’AFD LR(0).
b. Donner la table d’analyse SLR(1).
c. Est-ce une grammaire SLR(1)?
2.a AFD LR(0)
actions goto
2.c. La grammaire n’est pas SLR(1) parce qu’il y a un conflit shift/reduce dans l’entrée [4,e] de table LALR(1)
S’ .S0 S .iSeS S .iS S .o
S’ S1
.
S
i e o $ S
0 s2 s3 1
1 acc
2 s2 s3 4
3 r3 r3
4 r2
s5 r2
5 s2 s3 6
6 r1 r1
1. S iSeS 2. S iS 3. S o
o
S i
.
SeS2 S.
iSeSS
.
iS S.
oS iSe
.
5S S.
iSeSS
.
iS S.
oS iS
.
4eS S iS.
i
S
e
S iSeS6
.
S o.3 o
o
S
i i
2.b Table d’analyse SLR(1)
2.a AFD LR(0)
actions goto
2.c. La grammaire n’est pas SLR(1) parce qu’il y a un conflit shift/reduce dans l’entrée [4,e] de table LALR(1)
S’ .S0 S .iSeS S .iS S .o
S’ S1
.
S
i e o $ S
0 s2 s3 1
1 acc
2 s2 s3 4
3 r3 r3
4 r2
s5 r2
5 s2 s3 6
6 r1 r1
1. S iSeS 2. S iS 3. S o
o
S i
.
SeS2 S.
iSeSS
.
iS S.
oS iSe
.
5S S.
iSeSS
.
iS S.
oS iS
.
4eS S iS.
i
S
e
S iSeS6
.
S o.3 o
o
S
i i