Télécharger la présentation
1
IFT313 Introduction aux langage formels
Francis Bisson Département d’informatique Université de Sherbrooke Lab 7 Analyses LR(1) et LALR(1)
2
Exercice 1 IFT313
3
Exercice 1 Étant donné la grammaire G= ({S}, {i, e, o}, R, S), avec
S → iSeS S → iS S → o } Donnez l’AFD LR(1). Donner la table d’analyse LR(1). Est-ce une grammaire LR(1)? Donnez l’AFD LALR(1). Donnez la table d’analyse LALR(1). Est-ce une grammaire LALR(1)? Note: c’est la grammaire approximant « if then else » vue au Lab 6. IFT313/IFT451 © Froduald Kabanza
4
1. a-b AFD LR(1) et Table d’analyse LR(1)
actions goto S’® .S, $ S® .iSeS, $ S® .iS, $ S® .o, $ i e o $ S s2 s3 1 acc 2 s8 s7 4 3 r3 s5 r2 5 6 r1 7 8 9 s10 10 11 3 S® o., $ o S 1 S’® S., $ i i 8 S® i.SeS, $/e S® i.S, $/e S® .iSeS, $/e S® .iS, $/e S® .o, $/e 2 S® i.SeS, $ S® i.S, $ S® .iSeS, $/e S® .iS, $/e S® .o, $/e i 7 S® o., $/e o i o S S o 4 S® iS.eS, $ S® iS., $ 9 S® iS.eS, $/e S® iS., $/e 7 6 S® iSeS., $ e e o i S 5 S® iSe.S, $ S® .iSeS, $ S® .iS, $ S® .o, $ 10 S® iSe.S, $/e S® .iSeS, $/e S® .iS, $/e S® .o, $/e 11 S® iSeS., $/e S 1. S® iSeS 2. S® iS 3. S® o 1.c. La grammaire n’est pas LR(1) parce qu’il y a un conflit shift/reduce dans l’entrée [9,e] de table LR(1) IFT313/IFT451 © Froduald Kabanza
5
1.d-e AFD LALR(1) et Table d’analyse LALR(1)
actions goto S’® .S, $ S® .iSeS, $ S® .iS, $ S® .o, $ S 1 S’® S., $ i e o $ S s2 s3 1 acc 2 4 3 r3 r2 s5 5 6 r1 o i 2 S® i.SeS, $/e S® .iSeS, $/e S® .iS, $/e S® .o, $/e 3 S® o., $/e o i S 4 S® iS.eS, $/e S® iS., $/e i o e Ce qui est normal. Si la grammaire est non LR(1), elle ne peut pas non plus être LALR(1). 5 S® iSe.S, $/e S® .iSeS, $/e S® .iS, $/e S® .o, $/e 1. S® iSeS 2. S® iS 3. S® o S 6 S® iSeS., $/e 1.f. La grammaire n’est pas LR(1) parce qu’il y a un conflit shift/reduce dans l’entrée [4,e] de table LALR(1) IFT313/IFT451 © Froduald Kabanza
6
Exercice 2 IFT313
7
Exercice 2 Soit la grammaire G= ({S, E}, { id, +, ), ( }, R, S), avec
E → id (E) E → E + id } Les numéros a) à d) sont à faire à domicile. Donnez l’AFD LR(0) de la grammaire. Donnez la table d’analyse LR(0). Est-ce une grammaire LR(0)? Expliquez. Donnez la table d’analyse SLR(1). Es-ce une grammaire SLR(1) ? Expliquez. Donnez l’AFD LR(1). Est-ce une grammaire LR(1)? Donnez l’AFD LALR(1). Donnez la table d’analyse LALR(1). Est-ce une grammaire LALR(1)? IFT313
8
s E id id + + id ( E ) 2.a. AFD LR(0). 1 4 2 6 3 5 7 8 IFT313
1 Closure([S’S]) ={[S’ S], [S E], [E id], [E id(E)], [E E+id]} Closure([S’S]) ={[S’ S]} s 4 =Closure([E E+id]) ={[E E+id]} E 2 id id =Closure({[SE], [E E+id]}) ={[SE], [E E+id]} 6 + Goto(4, id) =Closure([E E+id]) ={[E E+id]} 3 =Closure({[E id], [E id(E)]}) ={[E id], [E id(E)]} + id 5 7 =Closure([E id(E)]) ={[E id(E)],[E id], [E id(E)],[E E+id]} =Closure({[E id(E)], [E E+id]}) ={[E id(E)], [E E+id]} ( E ) 8 =Closure([E id(E)]) ={[E id(E)]} IFT313
9
2.b Table d’analyse LR(0) id + ( ) $ S E s3 1 2 acc r1 s4 3 r2 s5 4 s6
action/goto goto id + ( ) $ S E s3 1 2 acc r1 s4 3 r2 s5 4 s6 5 7 6 r4 s8 8 r3 2.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,(]. IFT313
10
2.d Table d’analyse SLR(1) id + ( ) $ S E s3 1 2 acc s4 r1 3 r2 s5 4
action/goto goto id + ( ) $ S E s3 1 2 acc s4 r1 3 r2 s5 4 s6 5 7 6 r4 s8 8 r3 2.e C’est une grammaire SLR(1) parce que la table d’analyse SLR(1) n’a pas de conflit. IFT313
11
2.f. AFD LR(1) 4 Closure([E E+id;{$,+}]) ={[E E+id;{$,+}]} 6 1 Closure([E E+id;{$,+}]) ={[E E+id;{$,+}]} Closure([S’S;{$}]) ={[S’ S;{$}], [S E;{$}], [E id;{$,+}], [E id(E) ;{$,+}], [E E+id;{$,+}]} id Closure([S’S;{$}]) ={[S’ S;{$}]} S 2 Closure({[E id(E);{$,+}], [E E+id;{),+}]}) ={[E id(E);{$,+}], [E E+id;{),+}]} Closure({[SE;{$}], [E E+id;{$,+}]}) ={[SE;{$}], [E E+id;{$,+}]} + E 7 ) 9 id 3 Closure([E id(E);{$,+}]) ={[E id(E);{$,+}]} Closure({[E id;{$,+}], [E id(E) ;{$,+}]}) ={[E id;{$,+}], [E id(E) ;{$,+}]} E 5 + 10 Closure([E id(E);{$,+}]) ={[E id(E) {$,+}], [E id;{), +}], [E id(E);{), +}], [E E+id;{), +}]} Closure([E E+id;{),+}]}) ={[E E+id;{),+}]} 12 Goto(10, id) =Closure([E E+id;{),+}]}) ={[E E+id;{),+}]} ( id id 8 + Closure({[E id;{), +}], [E id(E);{), +}]) ={[E id;{), +}], [E id(E);{), +}]} 13 id Closure({[E id(E);{),+}], [E E+id;{),+}]}) ={[E id(E);{),+}], [E E+id;{),+}]} Closure([E id(E);{),+}]) ={[E id(E) {),+}], [E id;{), +}], [E id(E);{), +}], [E E+id;{), +}]} 11 ( ) 14 E Closure([E id(E);{),+}]) ={[E id(E);{),+}]} IFT313
12
7. Table d’analyse LR(1) action/goto goto id + ( ) $ S E s3 1 2 acc s4 r1 3 r2 s5 4 s6 5 s8 7 6 r4 s10 s9 8 s11 9 r3 10 s12 11 12 13 s14 14 8. C’est une grammaire LR(1) parce que la table d’analyse LR(1) n’a pas de conflit. IFT313
13
8. AFD LALR(1) 6 1 {[E E+id;{$,+,)}]} {[S’ S;{$}], [S E;{$}], [E id;{$,+}], [E id(E) ;{$,+}], [E E+id;{$,+}]} {[S’ S ;{$}]} S id 2 4 {[SE;{$}], [E E+id;{$,+}]} {[E E+id;{$,+,)}]} E + 8 id 3 {[E id(E);{$,+,)}]} {[E id;{$,+, )}], [E id(E) ;{$,+, )}]} id 5 {[E id(E) {$,+,)}], [E id;{), +}], [E id(E);{), +}], [E E+id;{), +}]} + 7 E ( {[E id(E);{$,+, )}], [E E+id;{),+}]} ) Obtenu de l’AFD LR(1) en fusionnant les états ayant les mêmes couleurs : 8-3; 4-10; 5-11; 7-13; L’état 8 correspond au 9 dans l’AFD LR(1). Sans surprise, c’est le même AFD que l’AFD LR(0) mis à part les lookahead, vu que la grammaire est SLR(1). IFT313
14
2.g Table d’analyse LALR(1) id + ( ) $ S E s3 1 2 acc s4 r1 3 r2 s5 4
action/goto goto id + ( ) $ S E s3 1 2 acc s4 r1 3 r2 s5 4 s6 5 7 6 r4 s8 8 r3 2.h C’est une grammaire LALR(1) parce que la table d’analyse LALR(1) n’a pas de conflit. On s’y attend puisque la grammaire est SLR(1). En fait la table LALR(1) est la même que la table SLR(1). IFT313
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.