Vous êtes sur la page 1sur 13

REPUBLIQUE DU CAMEROUN REPUBLIC OF CAMEROON

Paix-Travail-Patrie Peace-Work-Fatherland

*********** ***********

UNIVERSITE DE NGAOUNDERE UNIVERSITY OF NGAOUNDERE

*********** ***********

FACULTE DES SCIENCES FACULTY OF SCIENCES

************* ***********

DEPARTEMENT DE DEPARTMENT OF
MATHEMATIQUES ET MATHEMATICS AND
INFORMATIQUE COMPUTERS SCIENCES

UE : COMPILATION

THEME8 : L'analyse ascendante et les langages LR

NIVEAU :M1SLED

Membres du groupe :
NO Noms et Prénoms Matricules
1 BOUBA ARAFAT ARAFAT 15B389FS
2 GOMNA GABRIEL 20B139FS
3 KANAM CEDRIC HERMANN 19A388FS
4 NYAPODJING GANO SERGE 19B058FS
5 TAPGA NGASIRKREO
Table des matières
Sous la supervision du :
Dr GUIDANA Gazawa Frederic

ANNEE ACADEMIQUE 2023/2024

1
Groupe 1 de compilation
Table des matières
Introduction
1-analyse ascendante……………………………………………………………..4
1-1-EXEMPLE…………………………………………………………………. 4-5
2-Manche et élagage de manche………………………………………………..5
2-1-Manche …………………………………………………………………………5-6
2-2 Élagage de manche ………………………………………………………………6
3-Principe du shift-reduce parsing……………………………………………………6-7
4-Les grammaires LR et LALR………………………………………………………8
4-1- Les grammaires LR …………………………………………………………….9
4-2-Les grammaires LALR……………………………………………………….9
Conclusion

2
Groupe 1 de compilation
INTRODUCTION
L’analyse ascendante (bottom-up parser) est un autre modèle général d’analyse syntaxique. Il
est aussi connu sous le nom d’analyse par décalage-réduction (shift-reduce parser). L’analyse
par décalage-réduction qui a pour but de construire un arbre abstrait syntaxique pour un mot de
l’entrée en commençant par les feuilles (le bas) et en remontant vers la racine (haut). Ce
processus peut être considéré comme la « réduction » d’une chaîne w vers l’axiome de la
grammaire. Son principe est simple, à chaque étape de réduction une sous-chaîne particulière
correspondant à la partie droite d’une production est remplacée par le symbole de la partie
gauche de cette production et, si la sous-chaîne est choisie correctement à chaque étape, une
dérivation droite est ainsi élaborée en sens inverse.
.

3
Groupe 1 de compilation
1 - L’analyse ascendante

Les méthodes ascendantes construisent l’arbre syntaxique de bas en haut, en partant de la


chaîne analysée (feuilles de l’arbre), puis, en assemblant, par des réductions, les sous-arbres
sous les nouveaux nœuds non terminaux jusqu’à l’axiome (racine de l’arbre).
Le modèle général utilisé en analyse ascendante est le modèle par décalage-réduction (shift-
reduce) qui autorise deux opérations :
• Décaler (shift) : décaler, d’un symbole, le pointeur sur la chaîne d’entrée.
• Réduire (reduce) : réduire une chaîne par un non terminal en utilisant une des règles
de production, sachant que la chaîne réduite est une suite de terminaux et non
terminaux à gauche du pointeur sur l’entrée et finissant sur ce pointeur.
1-1-EXEMPLE
Considérons la grammaire :
S → aABe
A → Abc | b
B→d
La phrase abbcde peut-être réduite vers S par les étapes suivantes :
abbcde
aAbcde
aAde
aABe
S
Ces réductions, en effet, élaborent en sens inverse la dérivation droite suivante :
S ⇒d aABe ⇒d aAde ⇒d aAbcde ⇒d abbcde

4
Groupe 1 de compilation
S

B
A

a b b c d e
Analyse réussie

2-Manche et élagage de manche


2-1-Manche

➢ Définition d’un manche et explication avec exemple à l’appui


De façon informelle, un manche de chaîne est une sous-chaîne qui correspond à la partie droite
d’une production et dont la réduction vers le non-terminal de la partie gauche de cette
production représente une étape le long de la dérivation droite inverse.
• Dans beaucoup de cas, la sous-chaîne β la plus à gauche qui correspond à la partie droite
d’une production A → β n’est pas un manche, car une réduction par cette production A → β
produirait une chaîne qui ne pourrait pas être réduite vers l’axiome.
• Dans l’exemple ci-dessus si nous remplaçons b par A dans la seconde chaîne aAbcde, nous
obtiendrons la chaîne aAAcde qui, par la suite, ne peut pas être réduite à S.
Nous pouvions donc dire dans la grammaire précédente, Abc est un manche de aAbcde de par
la réduction A → Abc.
On a donc :
• Formellement, un manche de proto-phrase droite γ est une production A → β et une
position dans γ où la chaîne β peut être trouvée et remplacée par A pour produire la
proto-phrase droite précédente dans une dérivation droite de γ.
• C’est à dire que si S ⇒∗ d αAw ⇒d αβw , A → β dans la position suivant α est un manche
de αβw . La chaîne w à droite du manche ne contient que des symboles terminaux.
• Notons que nous disons « un manche » et non « le manche » car la grammaire peut être
ambigüe et il peut exister plus d’une d´dérivation droite pour αβw.
• Si une grammaire est non ambigüe, chaque proto-phrase droite de cette grammaire a
exactement un manche.
• Si une grammaire est non ambigüe, chaque proto-phrase droite de cette grammaire a
exactement un manche.

5
Groupe 1 de compilation
• De façon analogue, aAbcde est une proto-phrase droite dont le manche est A → Abc en
position 2.
Exemple:
Et la dérivation droite :
Soit G:
E ⇒d E+E
(1) E →E+E
⇒d E+E*E
(2) E →E *E (2)
⇒d E+E*id 3
(3) E →(E)
⇒d E+id 2 *id 3
(4) E →id
⇒d id 1 +id 2 *id 3

On a indicé les id pour faciliter la discussion ; nous avons aussi souligné un manche de chaque
proto-phrase droite. Par exemple id1 est un manche de la proto-phrase droite id1+id2*id3 carid
est la partie droite de la production E → id et le remplacement de id1 par E produit la proto-
phrase droite précédente E +id2*id3.

2-2Élagage du manche :

La réduction d'un manche par la partie gauche de la production correspondante est « l'élagage
du manche ». Une dérivation droite inverse peut être obtenue par « élagage du manche ». Plus
précisément, nous commençons avec une chaîne de terminaux ω que nous désirons analyser. Si
ω est une phrase de la grammaire considérée alors ω = γn où γn est la n ième proto-phrase droite
d'une dérivation droite encore inconnue.

S = γ0 ⇒d γ1 ⇒d · · · ⇒d γn = w

Pour reconstruire cette dérivation en ordre inverse, on repère le manche β n dans γn et on


remplace βn par la partie gauche d'une production An →βn pour obtenir la (n-1) ème proto-
phrase droite γn-1. Nous poursuivons le même travail pour obtenir γn-2 ensuite après un nombre
d'étapes on obtient une proto-phrase droite formée uniquement par S. Nous arrêtons et

6
Groupe 1 de compilation
annonçons la réussite finale de l'analyse. L'inverse de la séquence des productions utilisées dans
les réductions est une dérivation droite de la chaîne d'entrée.

Exemple :

Considérons la grammaire G1 :

E→E+E

E→E∗E

E → (E)

E → id

Et la chaîne d’entrée : id + id ∗ id

La séquence de réductions présentée dans le tableau ci-dessous réduit

id + id ∗ id vers l’axiome E.

Proto-phase droite Manche Production de réduction


id + id ∗ id Id E → id
E + id ∗ id Id E → id
E + E ∗ id Id E → id
E+E∗E E*E E→E∗E
E+E E+E E→E+E
E

3- Principe du shift-reduce parsing

Principe : On se donne un mot ω, on le lit caractère par caractère et on tente de reconstituer une
dérivation.

On va utiliser une pile qui va aider à repérer des parties droites de règles. On va donc empiler
jusqu'à ce qu'on trouve une partie droite, puis on va dépiler cette partie droite (à l'envers) et
rempiler la partie gauche à sa place.

On utilise 2 opérations élémentaires :

- L'opération de décalage (shift) qui consiste empiler le caractère courant, puis à lire le
caractère suivant du mot à analyser.

7
Groupe 1 de compilation
L'opération de réduction (reduce), qui consiste à remplacer la partie droite d'une règle par
sa partie gauche (on dépile la partie droite de règle correspondante et on rempile la partie
gauche).

Exemple : Grammaire G3 :
S → aABe
A →
Abc | b B → d
mot ω =
abbcde

abbcde ⇐(shift a) abbcde ⇐(shift b) abbcde ⇐(red 3 : A → b) aAbcde ⇐(shift b) aAbcde


⇐(shift c) aAbcde⇐(red 2 : A → Abc) aAde ⇐(shift d) aAde ⇐(red
4 : B → d)aABe ⇐(shift e) aABe ⇐(red 1 : S → aABe) S

On a construit la dérivation droite :


S ⇒(r1)aABE ⇒(r4)aAde ⇒(r2) aAbcde ⇒(r3)abbcde

On a défini par l'analyse une suite de règles qui définit la dérivation droite obtenue. Cette
méthode d'analyse s'appelle le 'shift-reduce parsing'.

Lorsque l'on ne sait pas s'il faut choisir un shift ou un reduce, on rencontre un conflit shift-
reduce ; lorsqu'on a les choix entre l'applications de plusieurs règles, on rencontre un conflit
reduce-reduce.
4-1-L’analyseurLR(1)

On se donne :

- une table d'analyse


- une pile, qui contient une alternance d'états numérotés et de caractères de N ᑌ T - un mot à
analyser ω
- un pointeur p sur la lettre courante de ω

Initialisation :
On empile 0 et p pointe sur le premier caractère de ω.

Etape d'analyse :
On lit le haut de la pile (1 ou 2 caractères), et avec p, on en déduit une case de la table qui va
contenir des instructions.

8
Groupe 1 de compilation
1er cas :
Le symbole de haut de pile est un non-terminal F, on lit les 2 caractères de haut de pile [i,F]
qui donne un état j, que l'on empile.

2e cas :
Le symbole de haut de pile est un état i, on lit la case [i,p] de l'analyseur.
cas 2.1 : T[i,p]=rj (une règle de la forme A → α), on dépile jusqu'à obtenir (à l'envers) tous les
caractères consécutifs de α, puis on empile A.

cas 2.2 : T[i,p]=$sj$, on va effectuer un shift : on décale p; on empile l'ancien p;


on empile l'état j. cas 2.3 : T[i,ps] est vide : REJECT : le mot n'appartient pas au
langage.

cas 2.4 : T[i,ps] = ACCEPT, le mot est accepté, et on obtient une dérivation droite de ce mot
en reprenant (à l'inverse) la suite des règles utilisées.

Exemple : Grammaire G1 des expressions arithmétiques :


r1 : E → E + T r2 : E → T r3 : T → T * F r4 : T → F r5 :
F → (E) r6 : F → 0|1|2|3|4|5|6|7|8|9 ou : r6 : F → nb

Table d'analyse :

Etat nb + * ( ) $ E T F

0 s5 s4 1 2 3

1 s6 ACC

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4 8 2 3

5 r6 r6 r6 r6

6 s5 s4 9 3

7 s5 s4 10

8 s6 s11

9 r1 s7 r1 r1

9
Groupe 1 de compilation
10 r3 r3 r3 r3

11 r5 r5 r5 r5
mot à analyser : 3+4*2$

Pile p case action

0 3 0,nb s5

0,3,5 + 5,+ r6 : F → nb

0,F + 0,F 3

0,F,3 + 3,+ r4 : T → F

0,T + O,T 2

0,T,2 + 2,+ r2 : E → T

0,E + 0,E 1

0,E,1 + 1,+ s6

0,E,1,+,6 4 6,nb s5

0,E,1,+,6,4,5 * 5,* r6 : F → nb

0,E,1,+,6,F * 6,F 3

0,E,1,+,6,F,3 * 3,* r4 : T → F

0,E,1,+,6,T * 6,T 9

0,E,1,+,6,T,9 * 9,* s7

0,E,1,+,6,T,9,*,7 2 7,nb s5

0,E,1,+,6,T,9,*,7,2,5 $ 5,$ r6 : F → nb

0,E,1,+,6,T,9,*,7,F $ 7,F 10

0,E,1,+,6,T,9,*,7,F,10 $ 10,$ r3 :T → T * F

0,E,1,+,6,T $ 6,T 9

0,E,1,+,6,T,9 $ 9,$ r1 : E → E + T

0,E $ 0,E 1

0,E,1 $ 1,$ ACCEPT

10
Groupe 1 de compilation
Suite de règles utilisées :
r6,r4,r2,r6,r4,r6,r3,r1 Dérivation droite
correspondante : (1,3,6,4,6,2,4,6)

4-Les grammaires LR et LALR

Le shift-reduce parsing peut se faire sans conflit pour les grammaires LR(k).

LR(k)=Left-to-Right scan of the input producing a Right Most derivation using k symbols of
look A Head.

Définition :
On appelle langage LR(k) un langage algébrique tel qu'il existe une grammaire LR(k) qui
l'engendre.

Théorème :
Tout langage LR(k) est aussi LR(1).

On appelle LR un langage qui est LR(1).


Théorème :
Un langage est LR si et seulement si il est algébrique et déterministe.

Pour décider si un mot ω appartient au langage défini par une grammaire LR, on utilise un
automate à pile déterministe particulier (analyseur LR) présenté sous forme d'une table
d'analyse.

- Une table LR(k) est de dimension k+1.


- Dans la pratique, on n'utilise que les tables LR(1), qui sont des tables à double entrée.

La classe des langages LL est strictement incluse dans la classe des langages LR :

langages rationnels ⊊ langages LL ⊊ langages LR = langages algébriques déterministes ⊊


langages algébriques.

4-2 Les grammaires LALR

On a vu le fonctionnement de l'analyseur LR(1).


Dans la pratique, on utilise des tables LALR(1), qui sont obtenues en contractant certains états
de la table LR(1) correspondante.

11
Groupe 1 de compilation
Avantages :
- La table obtenue est nettement plus petite : on gagne du temps.

- Ces grammaires 'marchent' de façon satisfaisante.

Inconvénients :
-Les langages LALR sont une classe restreinte de langages LR.
-On peut introduire des conflits alors que la grammaire de départ était bien LR(1).

12
Groupe 1 de compilation
Conclusion
Les méthodes ascendantes construisent l’arbre syntaxique de bas en haut, en partant de la
chaîne analysée (feuilles de l’arbre), puis, en assemblant, par des réductions, les sous-arbres
sous les nouveaux nœuds non terminaux jusqu’à l’axiome (racine de l’arbre).
Le modèle général utilisé en analyse ascendante est le modèle par décalage-réduction (shift-
reduce) qui autorise deux opérations :
Décaler (shift) : décaler, d’un symbole, le pointeur sur la chaîne d’entrée.
Réduire (reduce) : réduire une chaîne par un non terminal en utilisant une des règles de
production, sachant que la chaîne réduite est une suite de terminaux et non terminaux à gauche
du pointeur sur l’entrée et finissant sur ce pointeur

13
Groupe 1 de compilation

Vous aimerez peut-être aussi