Vous êtes sur la page 1sur 2

Série d’exercices N°04

Les analyseurs descendants et ascendants (suite)


𝑆 → 𝑎𝐵 | 𝑏𝐴 |𝑐
Exercice 01 : Soit la grammaire G. 𝐺 ∶ 𝐴 → 𝑎𝑆 | 𝑏𝐴
𝐵→𝑏
1. Nous pouvons prouver qu'une grammaire est LL(1) en utilisant deux méthodes différentes, la
première suivant les 3 règles, et la seconde étant la construction du tableau d'analyse.
a. En utilisant les règles :

𝑆 → 𝑎𝐵 | 𝑏𝐴 |𝑐 ⇒
Pre(aB) ∩ Pre(bA) ∩ Pre(c) = ∅
𝑁𝑢𝑙𝑙(𝑎𝐵) = 𝑁𝑢𝑙𝑙(𝑏𝐴) = 𝑁𝑢𝑙𝑙(𝑐) = 𝑓𝑎𝑢𝑥
🗸

𝐴 → 𝑎𝑆 | 𝑏𝐴 ⇒
𝑃𝑟𝑒(𝑎𝑆) ∩ 𝑃𝑟𝑒(𝑏𝐴) = ∅
𝑁𝑢𝑙𝑙(𝑎𝐵) = 𝑁𝑢𝑙𝑙 (𝑏𝐴) = 𝑓𝑎𝑢𝑥
🗸

𝐵 → 𝑏 ⇒ 𝑁𝑢𝑙𝑙 (𝑏) = 𝑓𝑎𝑢𝑥 🗸


D’après ces résultats, cette grammaire est LL (1)
b. En utilisant la table d’analyse
Premier Suivant Non terminal a b c #
{a,b,c} {#} S S → aB S → bA S → c
{a,b} {#} A A → aS A → bA
{b} {#} B B→b
le tableau comporte au maximum une production par cellule, la grammaire est donc LL(1)
2. La création d'un analyseur syntaxique décente récursif commence par l'augmentation de la.
𝑆 →𝑆⋕
𝑆 → 𝑎𝐵 | 𝑏𝐴 |𝑐
𝐺∶
𝐴 → 𝑎𝑆 | 𝑏𝐴
𝐵→𝑏
Après l'augmentation, nous transformons chaque non terminal en une procédure comme suit :
S'(){ B()
S();.....................1 Si(Suiv = "b") alors
Si (Suiv = "#") alors Suivant();...........1
Accepter();..........2 Sinon
finSi Erreur();
fin finSi
fin
S() A()
Si(Suiv = "a") alors Si (Suiv = "a") alors
Suivant();...........1 Suivant();...........1
B();.................2 S();.................2
Sinon Sinon
Si (Suiv = "b") alors Si(Suiv = "b") alors
Suivant();.......3 Suivant();.......3
A();.............4 A();.............4
Sinon Sinon
Si (Suiv = "c") alors Erreur();
Suivant();...5 finSi
Sinon finSi
Erreur(); fin
finSi
finSi
finSi
fin
3. Analyser la chaîne « babbac ».
Etat de la pile Entrée Action
#S’ babbac# Appeler S()….1
#S’S babbac# Appeler A() et avancé….4
#S’SA abbac# Appeler S() et avancé…2
#S’SAS bbac# Appeler A() et avancé….4
#S’SASA bac# Appeler A() et avancé ….4
#S’SASAA ac# Appeler S() et avancé…..2
#S’SASAAS c# Avancé et dépiler S
#S’SASAA # Dépiler A
#S’SASA # Dépiler A
#S’SAS # Dépiler S
#S’SA # Dépiler A
#S’S # Dépiler S
#S’ # Accepter()

𝑆 → 𝑎 | 𝑏 |(𝑇)
Exercice 02 : Soit la grammaire : 𝐺 ∶
𝑇 → 𝑇, 𝑆 | 𝑆
1. Eliminer la récursivité à gauche. Et montrer que la grammaire transformée est LL (1)
𝑆 → 𝑎 | 𝑏 |(𝑇)
𝐺′ ∶ 𝑇 → 𝑆𝑇
𝑇 →, 𝑆𝑇′ | 𝜖

𝑆 → 𝑎 | 𝑏|(𝑇) ⇒
𝑃𝑟𝑒(𝑎) ∩ 𝑃𝑟𝑒(𝑏) ∩ 𝑃𝑟𝑒 (𝑇) = ∅
𝑁𝑢𝑙𝑙(𝑎) = 𝑁𝑢𝑙𝑙(𝑏) = 𝑁𝑢𝑙𝑙 (𝑇) = 𝑓𝑎𝑢𝑥
🗸
𝑇 → 𝑆𝑇 ⇒ {𝑁𝑢𝑙𝑙(𝑆𝑇 ) = 𝑓𝑎𝑢𝑥 🗸
𝑃𝑟𝑒(, 𝑆𝑇 ) ∩ 𝑃𝑟𝑒(𝜖) = ∅
𝑇 → , 𝑆𝑇 | 𝜖 ⇒ 𝑁𝑢𝑙𝑙(𝜖) = 𝑣𝑟𝑎𝑖 , 𝑁𝑢𝑙𝑙(, 𝑆𝑇 ) = 𝑓𝑎𝑢𝑥 🗸
𝑁𝑢𝑙𝑙(𝜖) = 𝑣𝑟𝑎𝑖, 𝑃𝑟𝑒(, 𝑆𝑇 ) ∩ 𝑆𝑢𝑖𝑣(𝑇 ) = {, } ∩ {)} = ∅
D’après ces résultats, cette grammaire est LL (1)
2. Donner la table d’analyse LL, et analyser la chaîne « (a,(b,a),a) ».
Pre Suiv N a b ( ) , #
{a,b,(} {# , ,} S S→a S→b S→(T) Erreur Erreur Erreur
{a,b,(} {)} T T → S T' T → S T' T → S T' Erreur Erreur Erreur
{,} {)} T' Erreur Erreur Erreur T' → ϵ T' → , S T' Erreur

Pile Entrée Action Pile Entrée Action


#S (a,(b,a),a)# D (S) E ( ),T,( ) # ) T' ) T' ,a),a)# D( T’ ) E ( T’ , S , , )
#)T( (a,(b,a),a)# D(() # ) T' ) T' S , ,a),a)# D(,)
#)T a,(b,a),a)# D ( T ) E ( T’ , S ) # ) T' ) T' S a),a)# D(S)E(a)
# ) T' S a,(b,a),a)# D(S)E(a) # ) T' ) T' a a),a)# D(a)
# ) T' a a,(b,a),a)# D(a) # ) T' ) T' ),a)# D ( T’ )
# ) T' ,(b,a),a)# D( T’ ) E ( T’ , S , , ) # ) T' ) ),a)# D())
# ) T' S , ,(b,a),a)# D(,) # ) T' ,a)# D( T’ ) E ( T’ , S , , )
# ) T' S (b,a),a)# D ( S ) E ( ),T,( ) # ) T' S , ,a)# D(,)
# ) T' ) T ( (b,a),a)# D(() # ) T' S a)# D(S)E(a)
# ) T' ) T b,a),a)# D ( T ) E ( T’ , S ) # ) T' a a)# D(a)
# ) T' ) T' S b,a),a)# D(S)E(b) # ) T' )# D ( T’ )
# ) T' ) T' b b,a),a)# D(b) #) )# D())
# # Accepter

Vous aimerez peut-être aussi