Correction Td Analyse Syntax i Que

17
É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(ε) = {ε}

description

c un bon

Transcript of Correction Td Analyse Syntax i Que

É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.