Post on 08-Dec-2015
description
École Supérieure de Technologie
Département Informatique
TLA & Compilation (Groupes C & E)
1 E. Menif Abassi
Correction TD Analyse syntaxique
Exercice4 :
Les règles de productions de la grammaire sont :
S → SAB | SBC |BB
A → aAa | ε
B → bB | ε
C → cC | ε
1. Calculons les ensembles PREMIER :
Nous avons C → cC | ε d’où :
PREMIER(C) = PREMIER(cC)⋃ PREMIER(ε)
PREMIER(cC) = {c}
PREMIER(ε) = {ε}
alors PREMIER(C) = {c, ε}
Nous avons B → bB | ε d’où :
PREMIER(B) = PREMIER(bB)⋃ PREMIER(ε)
PREMIER(bB) = {b}
PREMIER(ε) = {ε}
alors PREMIER(B) = {b, ε}
Nous avons A → aAa | ε d’où :
PREMIER(A) = PREMIER(aAa)⋃ PREMIER(ε)
PREMIER(aAa) = {a}
PREMIER(ε) = {ε}
École Supérieure de Technologie
Département Informatique
TLA & Compilation (Groupes C & E)
2 E. Menif Abassi
alors PREMIER(A) = {a, ε}
Nous avons S → SAB | SBC | BB d’où :
PREMIER(S) = PREMIER(SAB) ⋃ PREMIER(SBC) ⋃ PREMIER(BB)
PREMIER(BB) = PREMIER(B) ⋃ PREMIER(B) = {b, ε}
(Initialement PREMIER(S) est vide. PREMIER(BB) est semblable à PREMIER(Y1Y2) avec Y1 = B et Y2 = B.
Or si ε∈ PREMIER(B) alors il faut que PREMIER(Y1Y2) contienne PREMIER(Y1)\{ε} et ajouter aussi
PREMIER(Y2) \{ε}. De plus, ε∈ PREMIER(Y1) et ε∈ PREMIER(Y2) alors ajouter ε à PREMIER(Y1Y2) ⇒
Maintenant PREMIER(S)= {b, ε} )
PREMIER(SAB) = PREMIER(A) ⋃ PREMIER(B) = {a, b, ε}
(Ici on commence avec un PREMIER(S) contenant déjà {b, ε} à cause de S → BB . PREMIER(SAB) est
semblable à PREMIER(Y1Y2Y3) avec Y1 = S et Y2 = A et Y3 = B. Or si ε∈ PREMIER(Y1) alors il faut que
PREMIER(Y1Y2Y3) contienne PREMIER(Y1)\{ε} et ajouter aussi PREMIER(Y2) \{ε} et si ε∈ PREMIER(Y2)
alors il faut ajouter aussi PREMIER(Y3) \{ε}. Nous savons déjà que ε∈ PREMIER(S) . De plus, ε∈
PREMIER(Y1) , ε∈ PREMIER(Y2) et ε∈ PREMIER(Y2) alors ajouter ε à PREMIER(Y1Y2Y3) ⇒ Maintenant
PREMIER(S)= {a, b, ε})
PREMIER(SBC) = PREMIER(B) ⋃ PREMIER(C) = {b, c, ε}
(Ici on commence avec un PREMIER(S) contenant déjà {a, b, ε}. PREMIER(SBC) est semblable à
PREMIER(Y1Y2Y3) avec Y1 = S et Y2 = B et Y3 = C. Or si ε∈ PREMIER(Y1) alors il faut ajouter aussi
PREMIER(Y2) et si ε∈ PREMIER(Y2) alors il faut ajouter aussi PREMIER(Y3). Nous savons déjà que ε∈
PREMIER(S) d’après PREMIER(BB) ⇒ Maintenant PREMIER(S)= {a, b, c, ε})
D’où PREMIER(S) = {a, b, c, ε} car il n’y a plus de symboles à ajouter ⇒ on est arrivé à un point fixe
2. Calculons les ensembles SUIVANT (Tous les ensembles sont initialement vide):
Calculons SUIVANT(S) :
Dans la grammaire, l’axiome S est suivi de AB dans SAB et de BC dans SBC. Ainsi, SUIVANT(S) doit
contenir $ (puisque S est l’axiome), PREMIER(AB)\{ε+ et PREMIER(BC)\{ε+.
Or PREMIER(AB) = PREMIER(A)\{ε+ ⋃ PREMIER(B)\{ε+ ⋃ {ε+ = *a, b, ε+
et PREMIER (BC) = PREMIER(B)\{ε+ ⋃ PREMIER(C)\{ε+ ⋃ {ε+ = *b, c, ε+
D’où SUIVANT(S) ={$+⋃ PREMIER(AB)\{ε+ ⋃ PREMIER(BC)\{ε+={$,a,b,c}
École Supérieure de Technologie
Département Informatique
TLA & Compilation (Groupes C & E)
3 E. Menif Abassi
Calculons SUIVANT(A) :
Dans la grammaire, le non-terminal A apparait dans :
- A→ aAa d’où SUIVANT(A) doit contenir {a}
- S→ SAB d’où SUIVANT(A) doit contenir PREMIER(B)\{ε+. Comme ε∈ PREMIER(B), alors il faut
ajouter SUIVANT(S) à SUIVANT(A).
Par conséquent, SUIVANT(A)={a} ⋃ PREMIER(B)\{ε+ ⋃ SUIVANT(S) = {$,a,b,c }
Calculons SUIVANT(B) :
Dans la grammaire, le non-terminal B apparait dans :
- S→ SAB d’où SUIVANT(B) contient SUIVANT(S)
- S→ SBC d’où SUIVANT(B) contient PREMIER(C)\{ε+. Comme PREMIER(C) contient ε alors
SUIVANT(B) contient en plus SUIVANT(S)
- S→ BB à cause du premier B SUIVANT(B) contient PREMIER(B)\{ε+. De plus, SUIVANT(B)
contient SUIVANT(S) aussi bien à cause du premier que B (puisque ε∈PREMIER(B)) que du
deuxième B.
Par conséquent, SUIVANT(B)= PREMIER(C)\{ε+⋃PREMIER(B)\{ε+ ⋃ SUIVANT(S) = {$,a,b,c }
Calculons SUIVANT(C) :
Dans la grammaire, le non-terminal C apparait dans :
- S→ SBC d’où SUIVANT(C) contient SUIVANT(S)
Par conséquent, SUIVANT(C)= SUIVANT(S) = {$,a,b,c }
Cette grammaire n’est pas LL(1). En effet, il existe plusieurs preuves :
1. Dans S → SAB | SBC |BB, nous avons PREMIER(SAB)⋂PREMIER(SBC) = {a, b,c, ε}⋂{a, b,c, ε}≠∅
(pareil pour les autres)
2. Dans S → SAB | SBC |BB, nous avons SAB⇒*ε et PREMIER(SBC)⋂SUIVANT(S) = {a, b,c, ε} ⋂
{$,a,b,c} ≠∅(pareil pour les autres)
3. S → SAB | SBC |BB, nous avons SAB⇒*ε et SBC⇒*ε
École Supérieure de Technologie
Département Informatique
TLA & Compilation (Groupes C & E)
4 E. Menif Abassi
Exercice5 :
Les règles de productions de la grammaire sont :
S → SaAb | bBaS |ε
A → bAa | ε
B → aBb | ε
1. Cette grammaire est récursive à gauche puisque dans la production S → SaAb, le non-terminal S
qui est la tête de la production se trouve tout à fait à gauche dans le corps de cette même
production.
Éliminons la récursivité à gauche :
Nous avons trois symboles non-terminaux que nous ordonnons comme suit : S, A et B
i=1 : Nous traitons le symbole S
S → SaAb | bBaS |ε ⇒ Nous créons alors un nouveau non-terminal S’ (Dans ce cas α=aAb , β1= bBaS et
β2=ε), d’où les nouvelles productions :
S → bBaSS’ |S’ (puisque εS’=S’)
S’→aAbS’| ε
i=2 : Nous traitons le symbole A ⇒Aucune récursivité directe, ni indirecte
i=3 : Nous traitons le symbole B ⇒ Aucune récursivité directe, ni indirecte
Nous aurons ainsi la grammaire équivalente non récursive à gauche avec les productions suivantes :
S → bBaSS’ |S’
S’→aAbS’| ε
A → bAa | ε
B → aBb | ε
2. Cette grammaire est bien factorisée à gauche puisqu’il n’existe aucun préfixe commun dans les S-
Productions, ni dans les A-Productions, ni dans les B-Productions.
École Supérieure de Technologie
Département Informatique
TLA & Compilation (Groupes C & E)
5 E. Menif Abassi
3. Ambiguïté :
1. Construisons la table d’analyse LL(1). Pour ce faire, nous devons tout d’abord calculer les
ensembles PREMIER et SUIVANT. Nous allons utiliser la grammaire non récursive à gauche
puisqu’elle est équivalente à G4
Ensembles PREMIER :
PREMIER(A) = PREMIER(bAa) ⋃ PREMIER(ε) = {b}⋃{ε} = {b,ε}
PREMIER(B) = PREMIER(aBb) ⋃ PREMIER(ε) = {a}⋃{ε}= {a,ε}
PREMIER(S’) = PREMIER(aAbS’) ⋃ PREMIER(ε) = {a}⋃{ε}= {a,ε}
PREMIER(S) = PREMIER(bBaSS’) ⋃ PREMIER(S’) = {b}⋃{a,ε} = {a,b,ε}
Ensembles SUIVANT :
SUIVANT(A) : Le symbole A apparait dans :
- aAbS’ : SUIVANT(A) doit contenir PREMIER(bS’)\ {ε}
- bAa: SUIVANT(A) doit contenir PREMIER(a) \ {ε}
D’où SUIVANT(A) = {a,b}
SUIVANT (B) : Le symbole B apparait dans :
- bBaSS’ : SUIVANT(B) doit contenir PREMIER(aSS’) \ {ε}
- aBb: SUIVANT(B) doit contenir PREMIER(b) \ {ε}
D’où SUIVANT(B) = {a,b}
SUIVANT (S) : Le symbole S apparait dans :
- bBaSS’ : SUIVANT(S) doit contenir PREMIER(S’) \ {ε}
- C’est un axiome donc SUIVANT(S) doit contenir $
D’où SUIVANT(S) = {a,$}
SUIVANT (S’) : Le symbole S’ apparait dans :
- bBaSS’ : SUIVANT(S’) doit contenir SUIVANT(S)
- S’ : SUIVANT(S’) doit contenir SUIVANT(S)
D’où SUIVANT(S’) = SUIVANT(S)= {a,$}
École Supérieure de Technologie
Département Informatique
TLA & Compilation (Groupes C & E)
6 E. Menif Abassi
La table d’analyse LL(1) est la suivante :
a b $ S S → S’ S → bBaSS’ S → S’ S’ S’→aAbS’
S’→ε S’→ε
A A → ε A → bAa A → ε
B B → aBb B → ε
B → ε
M[S,a] = S → S’puisque a∈PREMIER(S’)
M[S,$] = S → S’puisque ε∈PREMIER(S’) et $∈SUIVANT(S)
M[S,b] = S → bBaSS’puisque b∈PREMIER(bBaSS’)
M[S’,a] = S’→aAbS’ puisque a∈PREMIER(aAbS’)
M[S’,a] = S’→ε puisque ε∈PREMIER(ε) et a∈SUIVANT(S’)
M[S’,$] = S’→ε puisque ε∈PREMIER(ε) et $∈SUIVANT(S’)
M[A,a] = A→ε puisque ε∈PREMIER(ε) et a∈SUIVANT(A)
M[A,b] = A→ε puisque ε∈PREMIER(ε) et b∈SUIVANT(A)
M[A,b] = A→ bAa puisque b∈PREMIER(bAa)
M[B,a] = B→ε puisque ε∈PREMIER(ε) et a∈SUIVANT(B)
M[B,b] = B→ε puisque ε∈PREMIER(ε) et b∈SUIVANT(B)
M[B,a] = B→ aBb puisque a∈PREMIER(aBb)
Nous constatons que certaines cases de cette table, notamment M[S’,a], M[A,b] et M[B,a] contiennent
deux règles. L’analyseur ne pourra pas décider quelle règle appliquer si, par exemple, au sommet de la
pile nous avons le symbole A et que le prochain symbole dans l’entrée est b.
2. Il suffit d’avoir une chaîne pour laquelle nous pouvons construire deux arbres de dérivation
École Supérieure de Technologie
Département Informatique
TLA & Compilation (Groupes C & E)
7 E. Menif Abassi
Exercice6 :
Les règles de productions de la grammaire sont :
S → abA | ε
A → Saa | b
Nous allons, tout d’abord, construire les ensembles PREMIER et SUIVANT :
PREMIER(S) = PREMIER(abA) ⋃ PREMIER(ε) = {a+ ⋃ *ε} = {a,ε}
PREMIER(A) = PREMIER(Saa) ⋃ PREMIER(b)
Or PREMIER(Saa) = PREMIER(S)\ {ε+⋃ PREMIER(a)= {a}
(Saa est de la forme Y1Y2Y3, puisque ε∈ PREMIER(S) alors il faut considérer aussi PREMIER(a))
D’où PREMIER(A)={a,b}
SUIVANT(S) : S apparait dans Saa, d’où SUIVANT(S) = {$+ ⋃ PREMIER(aa) = {a,$}
SUIVANT(A) : A apparait dans abA, d’où SUIVANT(A) = SUIVANT(S) = {a,$}
Pour S → abA | ε, nous avons :
PREMIER(abA)⋂PREMIER(ε) = *a+ ⋂ *ε+ = ∅
ε⇒*ε alors vérifions PREMIER(abA)⋂ SUIVANT(S) = {a+ ⋂*a,$+ ≠∅ . D’où Cette grammaire n’est
pas LL(1)
Nous pouvons procéder également en construisant la table d’analyse LL(1)
a b $ S S → abA
S → ε S → ε
A A → Saa A → b
M[S,a] = S → ε puisque ε∈PREMIER(S) et a∈SUIVANT(S)
M[S,$] = S → ε puisque ε∈PREMIER(S) et $∈SUIVANT(S)
M[S,a] = S→ abA puisque a∈PREMIER(abA)
M[A,a] = A→ Saa puisque a∈PREMIER(Saa)
M[A,b] = A→b puisque b∈ PREMIER (b)
École Supérieure de Technologie
Département Informatique
TLA & Compilation (Groupes C & E)
8 E. Menif Abassi
Nous constatons que M[S,a] contient deux règles d’où cette grammaire n’est pas LL(1).
Exercice7 :
Les règles de productions de la grammaire sont : E → E∨E | E∧E | E | (E) | v | f
1. Si nous nous inspirons de la grammaire des expressions arithmétiques ETF, nous obtenons la
grammaire suivante :
E E ∨ T | T
T T ∧ F | F
F F| (E)| v | f
2. Avant de construire la table LL(1), éliminons la récursivité à gauche et factorisons à gauche .
Ordonnons les symboles non-terminaux comme suit : E, T, F
i=1, Traitement de E : Élimons la récursivité directe. Nous introduisons le nouveau symbole E’
E TE’
E’→ ∨TE’|ε
i=2, Traitement de T : Pas de récursivité indirecte. Élimons la récursivité directe. Nous introduisons le
nouveau symbole T’
T → FT’
T’ → ∧ FT’ | ε
i=3, Traitement de F : Aucune récursivité directe ou indirecte
La grammaire non récursive à gauche équivalente est alors :
E TE’
E’→ ∨TE’|ε
T → FT’
T’ → ∧ FT’ | ε
F F| (E)| v | f
École Supérieure de Technologie
Département Informatique
TLA & Compilation (Groupes C & E)
9 E. Menif Abassi
Aucune factorisation à gauche n’est nécessaire. Calculons maintenant les ensembles PREMIER et
SUIVANT.
Ensembles PREMIER :
- PREMIER(F) = PREMIER( F) ⋃ PREMIER( (E)) ⋃ PREMIER(v) ⋃ PREMIER(f)
= {} ⋃ {(} ⋃ {v} ⋃ {f} = { , ( , v , f}
- PREMIER(T’) = PREMIER(∧F)⋃ PREMIER(ε) = {∧+ ⋃ *ε} = {∧ , ε}
- PREMIER(T) = PREMIER(F) = { , ( , v , f} (PREMIER(F) ne contient pas ε donc on ne
s’intéresse pas à PREMIER(T’))
- PREMIER(E’) = PREMIER(∨TE’) ⋃ PREMIER(ε) = {∨+ ⋃ *ε} = {∨ , ε}
- PREMIER(E) = PREMIER(T) = { , ( , v , f}
Ensembles SUIVANT :
- SUIVANT(E) = {), $} (E apparait uniquement dans (E) en plus c’est l’axiome)
- SUIVANT(E’) = SUIVANT(E) = {), $} ( E’ apparait uniquement dans E TE’)
- SUIVANT(T) = PREMIER(E’)\ *ε+ ⋃ SUIVANT(E) ⋃ SUIVANT(E’)= {∨, ) , $} (T apparait dans
E TE’ et dans E’→ ∨TE’ d’où SUIVANT(T) contient PREMIER(E’)\ *ε+. Or ε∈ PREMIER(E’),
alors SUIVANT(T) doit contenir SUIVANT(E) à cause de E TE’ et doit contenir SUIVANT(E’)
à cause de E’→ ∨TE’)
- SUIVANT(T’)=SUIVANT(T) = {∨, ) , $} ( T’ apparait dans T FT’)
- SUIVANT(F) = PREMIER(T’)\ *ε+ ⋃ SUIVANT(T) ⋃ SUIVANT(T’)= {∧ , ∨, ) , $} (F apparait dans
T → FT’ et dans T’ → ∧ FT’ d’où SUIVANT(F) contient PREMIER(T’)\ *ε+. Or ε∈ PREMIER(T’),
alors SUIVANT(F) doit contenir SUIVANT(T) à cause de T → FT’ et doit contenir SUIVANT(T’) à
cause de T’ → ∧ F)
Construisons la table LL(1)
∨ ∧ ( ) v f $
E E TE’ E TE’ E TE’ E TE’
E’ E’→ ∨TE’ E’→ ε E’→ ε T T → FT’ T → FT’ T → FT’ T → FT’ T’ T’→ ε T’ → ∧ F T’→ ε T’→ ε F F F F (E) F v F f
École Supérieure de Technologie
Département Informatique
TLA & Compilation (Groupes C & E)
10 E. Menif Abassi
3. Analysons la chaîne (v ∧ f) ∨ v
Reconnu Pile Entrée Action
E$ (v ∧ f) ∨ v $ Appliquer E TE’
TE′$ (v ∧ f) ∨ v $ Appliquer T → FT’
FT′E′$ (v ∧ f) ∨ v $ Appliquer F F
FT′E′$ (v ∧ f) ∨ v $ Reconnaitre
FT′E′$ (v ∧ f) ∨ v $ Appliquer F (E)
(E)T′E′$ (v ∧ f) ∨ v $ Reconnaitre (
( E)T′E′$ v ∧ f) ∨ v $ Appliquer E TE’
( TE’)T′E′$ v ∧ f) ∨ v $ Appliquer T → FT’
( FT’E’)T′E′$ v ∧ f) ∨ v $ Appliquer F v
( vT’E’)T′E′$ v ∧ f) ∨ v $ Reconnaitre v
(v T’E’)T′E′$ ∧ f) ∨ v $ Appliquer T’ → ∧ FT’
(v ∧ FT’E’)T′E′$ ∧ f) ∨ v $ Reconnaitre ∧
(v∧ FT’E’)T′E′$ f) ∨ v $ Appliquer F f
(v∧ fT’E’)T′E′$ f) ∨ v $ Reconnaitre f
(v∧f T’E’)T′E′$ ) ∨ v $ Appliquer T’→ ε
(v∧f E’)T′E′$ ) ∨ v $ Appliquer E’→ ε
(v∧f )T′E′$ ) ∨ v $ Reconnaitre )
(v∧f) T′E′$ ∨ v $ Appliquer T’→ ε
(v∧f) E′$ ∨ v $ Appliquer E’→ ∨TE’
(v∧f) ∨TE’$ ∨ v $ Reconnaitre ∨
(v∧f) ∨ TE’$ v $ Appliquer T → FT’
(v∧f) ∨ FT’E’$ v $ Appliquer F → v
(v∧f) ∨ vT’E’$ v $ Reconnaitre v
École Supérieure de Technologie
Département Informatique
TLA & Compilation (Groupes C & E)
11 E. Menif Abassi
(v∧f) ∨v T’E’$ $ Appliquer T’→ ε
(v∧f) ∨v E’$ $ Appliquer E’→ ε
(v∧f) ∨v $ $ Configuration d’accepetation
Exercice8 :
Les règles de productions de la grammaire sont :
S → A | SA
A → ab | aSb
1. Cette grammaire n’est pas LL(1) :
Considérons S → A | SA : nous avons PREMIER(A) = {a} et PREMIER(SA) = PREMIER(A)
= {a} (à cause du S → A) ⇒ PREMIER(A)⋂PREMIER(SA) ≠∅
Considérons A → ab | aSb : nous avons PREMIER(ab) = {a} et PREMIER(aSb) = {a} ⇒
PREMIER(ab)⋂PREMIER(aSb) ≠∅
2. Pour construire la table SLR, il nous faut d’abord construire l’automate LR(0).
Construction de l’automate :
La grammaire augmentée est :
S’ → S
S → A | SA
A → ab | aSb
I0 = FERMETURE({[S’ → .S]}) = {[S’ → .S], [S → .A], [S → .SA], [A → .ab], [A → .aSb]}
I1 = ALLER_À(I0, S) = {[S’ → S.], [S →S.A], [A → .ab], [A → .aSb]}
I2 = ALLER_À(I0, A) = {[S → A.]}
I3 = ALLER_À(I0, a) = {[A → a.b], [A → a.Sb], [S → .A], [S → .SA], [A → .ab], [A → .aSb]}
I4 = ALLER_À(I1, A) = { [S →SA.] }
ALLER_À(I1, a) = I3
École Supérieure de Technologie
Département Informatique
TLA & Compilation (Groupes C & E)
12 E. Menif Abassi
I5 = ALLER_À(I3, b) = {[A → ab.]}
I6= ALLER_À(I3, S) ={[A → aS.b], [S → S.A], [A → .ab], [A → .aSb]}
ALLER_À(I3, A) = I2
ALLER_À(I3, a) = I3
I7 = ALLER_À(I6, b) ={[A → aSb.]}
ALLER_À(I6, A) = I4
ALLER_À(I6, a)= I3
Symbole SUIVANT S {a,b, $} A {a, b, $}
I0
S’ → .S
S → .A
S → .SA
A → .ab
A → .aSb
I3
A → a.b
A → a.Sb
S → .A
S → .SA
A → .ab
A → .aSb
I2
S → A.
I1
S’ → S.
S →S.A
A → .ab
A → .aSb
I7
A → aSb.
I6
A → aS.b
S → S.A
A → .ab
A → .aSb
I5
A → ab.
I4
S →SA.
a A
S
A
a
b
S
A
a
b
A
a
Accepter
$
École Supérieure de Technologie
Département Informatique
TLA & Compilation (Groupes C & E)
13 E. Menif Abassi
Construisons maintenant la table SLR. Les productions seront numérotées comme suit :
(1) S → A
(2) S → SA
(3) A → ab
(4) A →aSb
ACTION[0,a] = d3 : à cause des items A → .ab et A → .aSb dans I0 et la transition de I0 vers I3 sur a
ACTION[1,a] = d3 : à cause des items A → .ab et A → .aSb dans I1 et la transition de I1 vers I3 sur a
ACTION[1, $] = Accepter : à cause de l’item S’ → S. dans I1 ACTION[2,a] = ACTION[2,b] = ACTION[2, $] = r1 à cause de l’item S → A. correspondant à la
production portant le numéro 1 et que SUIVANT(S) ={a,b, $} ACTION[3,a] = d3 à cause des items A → .ab et A → .aSb dans I3 et la transition de I3 vers I3 sur a ACTION[3,b] = d5 à cause des items A → a.b et A → a.Sb dans I3 et la transition de I3 vers I5 sur b ACTION[4,a] = ACTION[4,b] = ACTION[4, $] = r2 à cause de l’item S →SA. correspondant à la
production portant le numéro 2 et que SUIVANT(S) ={a,b, $} ACTION[5,a] = ACTION[5,b] = ACTION[5, $] = r3 à cause de l’item A → ab. correspondant à la
production portant le numéro 3 et que SUIVANT(A) ={a,b, $} ACTION[6,a] = d3 à cause des items A → .ab et A → .aSb dans I6 et la transition de I6 vers I3 sur a ACTION[7,a] = ACTION[7,b] = ACTION[7, $] = r4 à cause de l’item A → aSb. correspondant à la
production portant le numéro 4 et que SUIVANT(A) ={a,b, $} ALLER_À[0,S] = 1 et ALLER_À[0,A] = 2 d’après les transitions de I0 sur S et sur A
ALLER_À[1,A] = 4 d’après la transition de I1 sur A
ALLER_À[3,S] = 6 et ALLER_À[3,A] = 2 d’après les transitions de I3 sur S et sur A
ALLER_À[6,A] = 4 d’après la transition de I6 sur A
États Action Aller_à a b $ S A
0 d3 1 2 1 d3 Accepter 4 2 r1 r1 r1 3 d3 d5 6 2 4 r2 r2 r2 5 r3 r3 r3 6 d3 d7 4 7 r4 r4 r4
École Supérieure de Technologie
Département Informatique
TLA & Compilation (Groupes C & E)
14 E. Menif Abassi
3. Analysons la chaîne ababaabb. Les
Exercice9 :
Les règles de productions de la grammaire sont :
C → Ax
A → a | aB
B → xy
1. Cette grammaire n’est pas LL(1) puisque dans les A-productions PREMIER(a) ⋂ PREMIER(aB) ≠∅
2. Pour montrer si cette grammaire est SLR, il nous faut construire la table d’analyse SLR. Pour ce
faire, il faut tout d’abord construire l’automate LR(0).
Pile Entrée Action 0 ababaabb$ d3 03 babaabb$ d5 035 abaabb$ r3 02 abaabb$ r1 01 abaabb$ d3 013 baabb$ d5 0135 aabb$ r3 014 aabb$ r2 01 aabb$ d3 013 abb$ d3 0133 bb$ d5 01335 b$ r3 0132 b$ r1 0136 b$ d7 01367 $ r4 014 $ r2 01 $ Accepter
École Supérieure de Technologie
Département Informatique
TLA & Compilation (Groupes C & E)
15 E. Menif Abassi
La grammaire augmentée sera :
C’ → C
C → Ax
A → a | aB
B → xy
Construisons l’ensemble des items (Collection canonique LR(0))
I0 = FERMETURE({[C’ → .C]}) = {[C’ → .C], [C → .Ax], [A → .a], [A → .aB]}
I1 = ALLER_À (I0, C) = {[C’ → C.]}
I2 = ALLER_À (I0, A) = {[C → A.x]}
I3 = ALLER_À (I0, a) = {[A → a.], [A → a.B], [B → .xy]}
I4 = ALLER_À (I2, x) = {[C → Ax.]}
I5 = ALLER_À (I3,B) = {[A → aB.]}
I6 = ALLER_À (I3, x) = {[B → x.y]}
I7 = ALLER_À (I6, y) = {[ B → xy.]}
I0
C’ → .C
C → .Ax
A → .a
A → .aB I3
A → a.
A → a.B
B → .xy
I2
C → A.x
I1
C’ → C.
I7
B → xy.
I6
B → x.y
I5
A → aB.
I4
C → Ax.
A
C
A
a
x
B
x y
Accepter $
École Supérieure de Technologie
Département Informatique
TLA & Compilation (Groupes C & E)
16 E. Menif Abassi
Calculons les ensembles SUIVANT :
Symbole SUIVANT C {$} A {x} B {x}
Voici la table d’analyse SLR avec les productions numérotées comme suit:
(1) C → Ax
(2) A → a
(3) A → aB
(4) B → xy
ACTION[0,a] = d3 : à cause des items A → .a et A → .aB dans I0 et la transition de I0 vers I3 sur a
ACTION[1, $] = Accepter : à cause de l’item C’ → C. dans I1 ACTION[2,x] = d4 à cause de l’item C → A.x dans I2 et la transition de I2 cers I4 sur x ACTION[3,x] = d6 à cause de l’item B → .xy dans I3 et la transition de I3 vers I6 sur x ACTION[3,x] = r2 à cause de l’item A → a. dans I3 correspondant à la production portant le numéro
2 et que SUIVANT(A)={x} ACTION[4, $] = r1 à cause de l’item C → Ax. correspondant à la production portant le numéro 1 et
que SUIVANT(C) ={$} ACTION[5,x] = r3 à cause de l’item A → aB. correspondant à la production portant le numéro 3 et
que SUIVANT(A) ={x} ACTION[6,y] = d7 à cause de l’item B → x.y dans I6 et la transition de I6 vers I7 sur x
États Action Aller_à a x y $ C A B
0 d3 1 2 1 Accepter 2 d4 3 d6
r2 5
4 r1 5 r3 6 d7 7 r4
École Supérieure de Technologie
Département Informatique
TLA & Compilation (Groupes C & E)
17 E. Menif Abassi
ACTION[7,x] = r4 à cause de l’item B → xy. correspondant à la production portant le numéro 4 et que SUIVANT(B) ={x}
ALLER_À[0,C] = 1 et ALLER_À[0,A] = 2 d’après les transitions de I0 sur c et sur A
ALLER_À[3,B] = 5 d’après la transitions de I3 sur B
Nous remarquons que ACTION[3,x] contient deux actions un décalage et une réduction, ceci constitue un
conflit de type Décalage/Réduction . Par conséquent, cette grammaire n’est pas SLR.