Vous êtes sur la page 1sur 4

Correction TD de Traduction no4

Licence d’informatique
—2006-2007—

Analyse syntaxique ascendante 2


Le but de ce TD est d’étudier l’analyse ascendante LALR(1).

x Exercice 1. Grammaire de la somme (associativité droite)


Soit la grammaire
S −→ E<eof>
E −→ T <plus>E | T
T −→ <val>
Construire la table d’analyse LR(1) de cette grammaire.


Voici l’automate LR(1) :

S −→ •E# # S → E#
E S −→ E • # S −→ E • #
E −→ •T + E #
E −→ •T # T
T −→ •val #, + +
E −→ T • +E # E −→ T + •E #
val E −→ T • # E −→ •T + E #
T
E −→ •T #
T −→ val• #, + E → T (#) T −→ •val #, +

T → val (#, +) val E

E −→ T + E• #

E → T + E (#)

1
x Exercice 2. Quelle analyse ?
Soit la grammaire

S −→ E<eof>
E −→ <lpar>E<rpar> | <star>E | <val>

Construire les tables d’analyse LR(0) et LR(1) de cette grammaire.


Voici l’automate LR(0) :

# S → E#
S −→ E • # S −→ E#•
S −→ •E# E
E −→ •(E) E −→ ∗•E E
E −→ •∗E ∗
E −→ •(E) E → ∗E
E −→ •val E −→ ∗E•
E −→ •∗E ∗
( E −→ •val
val
val ∗ ( E
E −→ (E•)
E −→ val• E −→ (•E)
val )
E −→ •(E)
E → val E −→ •∗E E → (E)
( E −→ (E)•
E −→ •val

2
et l’automate LR(1) :

# S → E#
S −→ E • # S −→ E#•
S −→ •E# E
E −→ •(E) # E −→ ∗•E # E
E −→ •∗E # ∗
E −→ •(E) # E → ∗E
E −→ •val # E −→ ∗E• #
E −→ •∗E # ∗ [#]
( E −→ •val #
val
val ( E
E −→ (E•) #
E −→ val• # E −→ (•E) #
E −→ •(E) ) )
E → val E −→ •∗E ) E → (E)
E −→ •val ) E −→ (E)• #
[#] [#]
val (
E
∗ E −→ (•E) ) E −→ (E•) )
val E −→ •(E) )
E −→ val• )
E −→ •∗E ) )
(
E −→ •val ) E → (E)
E → val val E −→ (E)• )
[)] ( ∗ [)]
E −→ ∗•E ) E
E −→ •(E) ) E → ∗E
E −→ ∗E• )
E −→ •∗E ) ∗ [)]
E −→ •val )

x Exercice 3. LALR(1) et LR(1)


Soit la grammaire
S −→ Aa | bAc | Bc | bBa
A −→ d
B −→ d
Calculer les tables d’analyse LR(1) et LALR(1) de cette grammaire.


Voici l’automate LR(1) :

3
S −→ •Aa S −→ A • a a S −→ Aa• S → Aa
S −→ •bAc A
S −→ •Bc B c S → Bc
S −→ B • c S −→ Bc•
S −→ •bBa
A −→ •d a
B −→ •d c
S −→ bA • c c S −→ bAc• S → bAc
d b
A −→ d• c A
B −→ d• a
S −→ b • Ac
S −→ b • Ba
A → d [c]
A −→ •d c
B → d [a]
B −→ •d a
d B
A −→ d• a
B −→ d• c a S → bBa
S −→ bB • a S −→ bBa•
A → d [a]
B → d [c]

Voici l’automate LALR(1) :

S −→ •Aa S −→ A • a a S −→ Aa• S → Aa
S −→ •bAc A
S −→ •Bc B c S → Bc
S −→ B • c S −→ Bc•
S −→ •bBa
A −→ •d a
B −→ •d c
S −→ bA • c c S −→ bAc• S → bAc
b
d A

S −→ b • Ac
A −→ d• a, c S −→ b • Ba
B −→ d• a, c d A −→ •d c
B −→ •d a
A → d [a, c] B
B → d [a, c]
S −→ bB • a a S −→ bBa• S → bBa

Il y a un conflit réduction/réduction

Vous aimerez peut-être aussi