Académique Documents
Professionnel Documents
Culture Documents
Introduction
Bibliographie
Analyse lexicale
Analyse Syntaxique
Compilation
Luc Brun
1 / 133
Presentation
Introduction
Bibliographie
Analyse lexicale
Analyse Syntaxique
Plan
Introduction
Bibliographie
Analyse lexicale
Analyse Syntaxique
Analyse descendante
Analyse ascendante
2 / 133
Presentation
Introduction
Bibliographie
Analyse lexicale
Analyse Syntaxique
Définition
I La compilation est l’analyse automatique d’un langage (avec un
vocabulaire et une syntaxe).
I Action :
I Interpréteurs (javascripts, python,
shell,SQL,. . .),
I editeurs structurels,
I controleurs statiques.
I Synthèse
I Compilateurs
I Filtres
I Analyse lexicale :
vérifie/reconnait le vocabulaire
(identificateurs, mots clés,. . .)
I Analyse syntaxique :
vérifie/reconnait la grammaire
I Analyse sémantique : vérifie le
sens du programme (e.x. les
types)
I RI : Langage intermédiare
permettant de factoriser des
étapes pour plusieurs langages.
4 / 133
Presentation
Introduction
Bibliographie
Analyse lexicale
Analyse Syntaxique
Bibliographie
5 / 133
Presentation
Introduction
Bibliographie
Analyse lexicale
Analyse Syntaxique
Analyse lexicale
Objectifs :
I Transformation d’un ensemble de caractères en concepts (nombres,
identificateurs, mots clés,. . .)
I On distingue les concepts suivants :
Unité lexicale : correspond à une entité (un concept) renvoyé par
l’analyseur lexical. Par exemple <, >, <=, >= sont tous
des opérateurs relationels.
Un lexème est une instance d’unité lexicale. Par exemple le lexème
6.28 une instance de l’unité lexicale nombre.
Un modèle associe des lexèmes à leur unité lexicale.
6 / 133
Presentation
Introduction
Bibliographie
Analyse lexicale
Analyse Syntaxique
8 / 133
Presentation
Introduction
Bibliographie
Analyse lexicale
Analyse Syntaxique
+
I Fermeture positive (L ) :
+∞
[
L+ = Li
i=1
9 / 133
Presentation
Introduction
Bibliographie
Analyse lexicale
Analyse Syntaxique
Exemples :
I Si B = {0, 1},
B + est l’ensemble des nombres binaires d’au moins un chiffre.
I Si C = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9},
C 4 est l’ensemle des nombres de 4 chiffres.
I Si K = {a, . . . , z, A, . . . , Z },
K (K ∪ C )∗ est l’ensemble des mots commençant par une lettre puis
composés d’un nombre quelconque de lettres et chiffres.
10 / 133
Presentation
Introduction
Bibliographie
Analyse lexicale
Analyse Syntaxique
Expressions régulières
11 / 133
Presentation
Introduction
Bibliographie
Analyse lexicale
Analyse Syntaxique
Exemple
Soit Σ = {a, b}
I L(a|b) = {a, b},
I L((a|b)(a|b)) = {aa, ab, ba, bb},
I L(a∗ ) = {, a, a2 , . . .},
I {a, a2 , b, b 2 , ab, ab 2 , a2 b 2 , . . .} ⊂ L((a|b)∗ ),
I On évite des paranthèse inutiles en utilisant les conventions suivantes :
I ∗ a la plus haute priorité,
I la concaténation à la deuxième plus haute priorité et est associative à gauche,
I | a la plus faible priorité et est associatif à gauche.
∗
a∗ (a|b|c)∗ de = ((a)∗ ((a|b)|c) )(de)
12 / 133
Presentation
Introduction
Bibliographie
Analyse lexicale
Analyse Syntaxique
Propriétés algébriques
Axiome Descriptif
r |s = s|r | est commutatif
r |(s|t) = (r |s)|t | est associatif
(rs)t = r (st) la concaténation est associa-
tive
r (s|t) = rs|rt
la concaténation est distribu-
(s|t)r = sr |tr
tive vis à vis de |
r = r = r est un élémement neutre
pour la concaténation
r ∗ = (r |)∗
r ∗∗ = r ∗ ∗ est idempotent
13 / 133
Presentation
Introduction
Bibliographie
Analyse lexicale
Analyse Syntaxique
Définitions régulières
d1 → r1
d2 → r2
..
.
dn → rn
14 / 133
Presentation
Introduction
Bibliographie
Analyse lexicale
Analyse Syntaxique
I Identificateurs de variables
lettre → a|b|c . . . |z|A|B . . . |Z
chiffre → 0|1|2|3|4|5|6|7|8|9
id → lettre(lettre|chiffre)∗
I Nombres :
pm → (+|−)
chiffre → 0|1|2|3|4|5|6|7|8|9
frac → .chiffre+
exp → E (pm|) chiffre+
nb → (pm chiffre+ |chiffre∗ )(frac|)(exp|)
15 / 133
Presentation
Introduction
Bibliographie
Analyse lexicale
Analyse Syntaxique
I id → lettre(lettre|chiffre)∗ .
18 / 133
Presentation
Introduction
Bibliographie
Analyse lexicale
Analyse Syntaxique
19 / 133
Presentation
Introduction
Bibliographie
Analyse lexicale
Analyse Syntaxique
I Notez les transitions sur l’état de départ et les boucle sur les états 21 / 133
Presentation
Introduction
Bibliographie
Analyse lexicale
Analyse Syntaxique
22 / 133
Presentation
Introduction
Bibliographie
Analyse lexicale
Analyse Syntaxique
4. Soient N(s) et N(t) les AFN des expressions s et t. L’AFN N(st) est
défini par :
22 / 133
Presentation
Introduction
Bibliographie
Analyse lexicale
Analyse Syntaxique
Construction récursive :
4. Soit N(s) l’AFN de l’expression s. L’AFN N(s ∗ ) est défini par :
22 / 133
Presentation
Introduction
Bibliographie
Analyse lexicale
Analyse Syntaxique
23 / 133
Presentation
Introduction
Bibliographie
Analyse lexicale
Analyse Syntaxique
Exemple
I Évaluation de (a|b)∗ abb. Son arbre syntaxique associé est (cf évaluation
d’expressions cours 1A algo) :
r11
H
HH
r9 r10
H
H
r7 r8 b
H H
H
r5 r6 b
H
HH
r4 * a
H
H
HH
( r3 )
HH
r1 | r2
24 / 133
Presentation
Introduction
Bibliographie
Analyse lexicale
Analyse Syntaxique
25 / 133
Presentation
Introduction
Bibliographie
Analyse lexicale
Analyse Syntaxique
25 / 133
Presentation
Introduction
Bibliographie
Analyse lexicale
Analyse Syntaxique
25 / 133
Presentation
Introduction
Bibliographie
Analyse lexicale
Analyse Syntaxique
28 / 133
Presentation
Introduction
Bibliographie
Analyse lexicale
Analyse Syntaxique
29 / 133
Presentation
Introduction
Bibliographie
Analyse lexicale
Analyse Syntaxique
Exemple de transformation
I -fermeture({0})={0, 1, 2, 4, 7}=A
Transiter
Etat Symbole d’entrée
a b A = {0, 1, 2, 4, 7}
A
31 / 133
Presentation
Introduction
Bibliographie
Analyse lexicale
Analyse Syntaxique
Exemple de transformation
I -fermeture({0})={0, 1, 2, 4, 7}=A
I -fermeture(Transiter(A,a))=-fermeture({3, 8})={1, 2, 3, 4, 6, 7, 8}=B
Transiter
Etat Symbole d’entrée
a b A = {0, 1, 2, 4, 7}
B = {1, 2, 3, 4, 6, 7, 8}
A B
B
31 / 133
Presentation
Introduction
Bibliographie
Analyse lexicale
Analyse Syntaxique
Exemple de transformation
I -fermeture({0})={0, 1, 2, 4, 7}=A
I -fermeture(Transiter(A,b))=-fermeture({5})={1, 2, 4, 5, 6, 7}=C
Transiter
Etat Symbole d’entrée
a b A = {0, 1, 2, 4, 7}
B = {1, 2, 3, 4, 6, 7, 8}
A B C
C = {1, 2, 4, 5, 6, 7}
B
C
31 / 133
Presentation
Introduction
Bibliographie
Analyse lexicale
Analyse Syntaxique
Exemple de transformation
I -fermeture({0})={0, 1, 2, 4, 7}=A
I -fermeture(Transiter(B,a))=-fermeture({3, 8})=B
Transiter
Etat Symbole d’entrée
a b A = {0, 1, 2, 4, 7}
B = {1, 2, 3, 4, 6, 7, 8}
A B C
C = {1, 2, 4, 5, 6, 7}
B B
C
31 / 133
Presentation
Introduction
Bibliographie
Analyse lexicale
Analyse Syntaxique
Exemple de transformation
I -fermeture({0})={0, 1, 2, 4, 7}=A
I -fermeture(Transiter(B,b))= -fermeture({5, 9})={1, 2, 4, 5, 6, 7, 9}=D
Transiter
Etat Symbole d’entrée
a b A = {0, 1, 2, 4, 7}
B = {1, 2, 3, 4, 6, 7, 8}
A B C
C = {1, 2, 4, 5, 6, 7}
B B D
D = {1, 2, 4, 5, 6, 7, 9}
C
D 31 / 133
Presentation
Introduction
Bibliographie
Analyse lexicale
Analyse Syntaxique
Exemple de transformation
I -fermeture({0})={0, 1, 2, 4, 7}=A
I -fermeture(Transiter(C,a))= -fermeture({3, 8})=B
Transiter
Etat Symbole d’entrée
a b A = {0, 1, 2, 4, 7}
B = {1, 2, 3, 4, 6, 7, 8}
A B C
C = {1, 2, 4, 5, 6, 7}
B B D D = {1, 2, 4, 5, 6, 7, 9}
C B
D
31 / 133
Presentation
Introduction
Bibliographie
Analyse lexicale
Analyse Syntaxique
Exemple de transformation
I -fermeture({0})={0, 1, 2, 4, 7}=A
I -fermeture(Transiter(C,b))= -fermeture({5})=C
Transiter
Etat Symbole d’entrée
a b A = {0, 1, 2, 4, 7}
B = {1, 2, 3, 4, 6, 7, 8}
A B C
C = {1, 2, 4, 5, 6, 7}
B B D D = {1, 2, 4, 5, 6, 7, 9}
C B C
D
31 / 133
Presentation
Introduction
Bibliographie
Analyse lexicale
Analyse Syntaxique
Exemple de transformation
I -fermeture({0})={0, 1, 2, 4, 7}=A
I -fermeture(Transiter(D,a))= -fermeture({3, 8})=B
Transiter
Etat Symbole d’entrée
a b A = {0, 1, 2, 4, 7}
B = {1, 2, 3, 4, 6, 7, 8}
A B C
C = {1, 2, 4, 5, 6, 7}
B B D D = {1, 2, 4, 5, 6, 7, 9}
C B C
D B
31 / 133
Presentation
Introduction
Bibliographie
Analyse lexicale
Analyse Syntaxique
Exemple de transformation
I -fermeture({0})={0, 1, 2, 4, 7}=A
I -fermeture(Transiter(D,b))=
-fermeture({5, 10})={1, 2, 4, 5, 6, 7, 10}=E
Transiter
Etat Symbole d’entrée
a b A = {0, 1, 2, 4, 7}
B = {1, 2, 3, 4, 6, 7, 8}
A B C
C = {1, 2, 4, 5, 6, 7}
B B D D = {1, 2, 4, 5, 6, 7, 9}
C B C E = {1, 2, 4, 5, 6, 7, 10} 31 / 133
Presentation
Introduction
Bibliographie
Analyse lexicale
Analyse Syntaxique
Exemple de transformation
I -fermeture({0})={0, 1, 2, 4, 7}=A
I -fermeture(Transiter(E,a))= -fermeture({3, 8})=B
Transiter
Etat Symbole d’entrée
a b A = {0, 1, 2, 4, 7}
B = {1, 2, 3, 4, 6, 7, 8}
A B C
C = {1, 2, 4, 5, 6, 7}
B B D D = {1, 2, 4, 5, 6, 7, 9}
C B C E = {1, 2, 4, 5, 6, 7, 10}
D B E
31 / 133
Presentation
Introduction
Bibliographie
Analyse lexicale
Analyse Syntaxique
Exemple de transformation
I -fermeture({0})={0, 1, 2, 4, 7}=A
I -fermeture(Transiter(E,b))= -fermeture({5})=C
Transiter
Etat Symbole d’entrée
a b A = {0, 1, 2, 4, 7}
B = {1, 2, 3, 4, 6, 7, 8}
A B C
C = {1, 2, 4, 5, 6, 7}
B B D D = {1, 2, 4, 5, 6, 7, 9}
C B C E = {1, 2, 4, 5, 6, 7, 10}
D B E
31 / 133
Presentation
Introduction
Bibliographie
Analyse lexicale
Analyse Syntaxique
Exemple de transformation
Transiter
Etat Symbole d’entrée
a b
A B C
B B D
C B C
D B E
E B C
32 / 133
Presentation
Introduction
Bibliographie
Analyse lexicale
Analyse Syntaxique
Discussion
I La reconnaissance d’un lexème par un AFD est plus rapide (une seule
transition par état),
I En revanche le nombre d’états d’un AFD peut être exponentiel par
rapport au nombres d’états de l’AFN.
33 / 133
Presentation
Introduction
Bibliographie
Analyse lexicale
Analyse Syntaxique
34 / 133
Presentation
Introduction
Bibliographie
Analyse lexicale
Analyse Syntaxique
{r} l’expansion de r
”[xyz\”foo” la chaı̂ne ”[xyz”foo”
\X si X est un ”a”, ”b”, ”f”, ”n”, ”r”, ”t”, ou ”v”, représente
l’interprétation ANSI-C de \X.
\0 le caractère ASCII 0
\123 le caractère dont le code ASCII est 123, en octal
\x2A le caractère dont le code ASCII est 2A, en hexadécimal
<<EOF>> fin de fichier
35 / 133
Presentation
Introduction
Bibliographie
Analyse lexicale
Analyse Syntaxique
%{
Déclaration des variables C
%}
Déclaration des Unités lexicales
%%
Déclarations des actions associées à la reconnaissance d’unités lexicales
%%
Code C supplémentaire (déclarations de fonctions auxilières)
36 / 133
Presentation
Introduction
Bibliographie
Analyse lexicale
Analyse Syntaxique
Analyse syntaxique
38 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
39 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
Notations
1. Terminaux : Les lettres minuscules du début de l’alphabet : a,b,c. . ., les
symboles d’opérateurs +,-,. . ., les symboles de ponctuation
’(’,’)’,’,’,’ ;’. . ., les chiffres 0 à 9 les chaı̂nes en gras id, Si représentant
des unités lexicales.
2. Non terminaux : Les lettres majuscules du début de l’alphabet :
A,B,C. . ., la lettre S qui représente généralement l’axiome, les noms en
italiques expr , op
3. Les lettres majuscules de la fin de l’alphabet X , Y , Z représentent des
symboles grammaticaux (i.e. des terminaux ou non terminaux)
4. les chaı̂nes minuscules de la fin de l’alphabet u, v , w , . . . , z représentent
des chaı̂nes de terminaux (ou phrases).
5. Les lettres greques minuscules α, β, γ représentent des chaı̂nes de
symboles grammaticaux ou proto phrases (composées de terminaux et
non terminaux). Ex : A → α
41 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
Notations
43 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
inst
X
HX
HX
HXXXX
HH XXX
H XXX
H X
si expr Alors inst Sinon inst
P PP
E1 PP
S2
si expr alors inst
44 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
Récusivité directe
Une grammaire récursive à gauche comporte productions telles que
+
A⇒Aα. Ce genre de dérivation ne peuvent pas être analysés par des
grammaires récursives gauches (celles que l’on étudie). On a donc
besoins de transformer les productions A → Aα|β en les productions
équivalentes :
A → βA0
A0 → αA0 |
Plus généralement si A → Aα1 | . . . Aαn |β1 | . . . |βm , où A n’est un préfixe
d’aucun βi on remplace cette production par :
A → β1 A0 |β2 A0 | . . . |βm A0
A0 → α1 A0 |α2 A0 | . . . |αn A0 |
46 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
Exemple :
E → E + T |T
T → T ∗ F |F
F → (E )|id
se réécrit en :
E → TE 0
E0 → +TE 0 |
T → FT 0
T0 → ∗FT 0 |
F → (E )|id
47 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
S → Aa|b
A → Ac|Sd|
+
engendre la dérivation S ⇒Sda.
48 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
S → Aa|b
A → Ac|Sd|
S → Aa|b
A → bdA0 |A0
A0 → cA0 |adA0 |
49 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
Factorisation à gauche
Sur rencontre de si expr alors inst laquelle des deux règles appliquer ?
On explicite ce choix par une factorisation gauche :
Cette dernière grammaire est plus efficace car le choix ne s’effectue que
quand il doit se faire.
50 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
Factorisation à gauche
A → αA0 |γ
A0 → β1 |β2 | . . . |βn
51 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
Le problème du rebroussement
Soit la grammaire :
S → cAd
A → ab|a
S (b)
H
H S (c)
S (a) c
A
H
d HH
HH c A d
H
c A d a b
a
Le problème du rebroussement
53 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
E → TE 0
E0 → +TE 0 |
T → FT 0
T0 → ∗FT 0 |
F → (E )|id
Exemple sur la grammaire
d’expressions régulières sim-
plifiées.
54 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
On doit donc lire le tampon d’entré et empiler au moins les règles dans
lequelles on rentre.
55 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
Analyse prédictive
Tampon d’entrée a = b + c $
6
X Programme
Y d’analyse -Flot de sortie
Z prédictive
$ ?
Table
d’analyse M
56 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
Analyse prédictive
57 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
59 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
PREMIER et SUIVANT
60 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
Calcul de PREMIER
Calcul de PREMIER(X), pour tout symbole X de la grammaire
1. Si X est un terminal, PREMIER(X ) = {X }
2. Si X → , ajouter à PREMIER(X)
3. Si X est un non terminal et X → Y1 . . . Yk .
procédure UpdatePremier (PREMIER(X), Y1 , . . . Yk )
début
i←1
répéter
PREMIER(X) ← PREMIER(X ) ∪ PREMIER(Yi )
i ← i+1
jusqu’à ce que 6∈ PREMIER(Yi−1 )
fin
Le calcul de PREMIER(X1 . . . Xn ) se fait par une méthode analogue à
UpdatePremier.
61 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
Calcul de SUIVANT
62 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
E → TE 0
E0 → +TE 0 |
T → FT 0
T0 → ∗FT 0 |
F → (E )|id
63 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
Grammaires LL(1)
65 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
66 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
Analyse ascendante
I A l’inverse des méthodes descendantes qui sont basées sur une dérivation
de l’axiome les méthodes d’analyse par décalage-réduction sont des
méthodes ascendantes qui partent de de la chaı̂ne (des feuilles) pour
remonter à l’axiome.
I A chaque étape la partie droite d’une production présente dans la chaı̂ne
est remplacée par sa partie gauche.
I Si on fait les bons choix (et si la chaı̂ne appartient au langage) on
remonte ainsi à l’axiome.
67 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
S → aABe
A → Abc|b
B → d
⇒ signifie que l’on applique une réduction sur le terminal le plus à droite
d
du mot.
Notez également que l’utilisation de la production A → b sur aAbcde
aurait donné aAAcde ce qui ne permettait pas de revenir à S.
68 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
Manche
Si, il existe A → β tel que :
∗
S ⇒αAw ⇒αβw , w ∈ Σ∗
d d
Manche : Exemple
Considérons :
S → aABe
A → Abc|b
B → d
et :
S⇒aABe⇒aAde⇒aAbcde⇒abbcde
d d d d
70 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
Élagage du manche
71 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
Préfixes viables
75 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
Analyseurs LR
Left to right scanning of the input
LR(k) constructing a Rightmost derivation in reverse
using k symbols.
I Tous les langages que vous avez vu, peuvent être reconnus par un
analyseur LR.
I La méthode d’analyse LR est la méthode par décalage réduction sans
rebroussement la plus générale connue. Elle peut cependant être
implantée aussi efficacement que d’autre méthodes utilisant le même
principe.
I L’ensemble des grammaires reconnaissables par un analyseur LR est un
sur ensemble strict des grammaires pouvant être reconnue par un
analyseur prédictif.
I Les analyseurs LR peuvent détecter très tôt les erreurs de syntaxe.
I les tables d’analyse LR sont trop grandes pour être rédigées à la
main . Heureusement de très bon outils (Yacc, Bison) existent. 76 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
Analyse LR : schéma
Tampon d’entrée a = b + c $
6
sm
Programme
-Flot de sortie
Xm d’analyse LR
sm−1
Xm−1
.. ? ?
. Action Successeur
s0
78 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
Analyse LR : schéma
79 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
Analyse LR : Algorithme
Une configuration de l’analyseur est donné par le couple (pile,tampon
d’entré) : (s0 X1 . . . Xm sm , ai . . . , an $) représentant la proto-phrase :
X1 X2 . . . Xm−1 Xm ai . . . , an .
1. Si Action[sm , ai ]= décaler s. On décale ai et empile s pour passer dans la
configuration :
(s0 X1 . . . Xm sm ai s, ai+1 . . . , an $)
80 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
Analyse LR : Algorithme
fonction analyseLR (w$ : chaı̂ne) : Booleen
Déclaration a : symbole courrant du tampon , s : Sommet de pile
début
répéter
si Action[s,a]= décaler s’ alors
empiler a puis s’
avancer a sur le prochain symbole du tampon d’entré
sinon
si Action[s,a]= réduire par A → β alors
dépiler 2|β| symboles
s’ ← nouveau sommet de pile
empiler A puis Successeur[s’,A]
finsi
si Action[s,a]=Erreur alors Erreur()
finsi
jusqu’à ce que Action[s,a]=accepter
fin 81 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
Analyse LR : Exemple
Toutes les méthodes d’analyse LR sont basées sur l’algorithme précédent.
La différence intervient sur les méthodes d’initialisations des tables
Actions et Successeur.
Considérons la grammaire :
(1) E → E +T
(2) E → T
(3) T → T ∗F
(4) T → F
(5) F → (E )
(6) F → id
avec les conventions suivantes :
I di : décaler et empiler i
I rj : réduire par la production j
I acc : accepter
82 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
Analyse LR : Exemple
On obtient les tables Actions/ successeur suivantes (nous verrons plus
loin comment les calculer).
État Action Successeur
id + * ( ) $ E T F
0 d5 d4 1 2 3
1 d6 acc
2 r2 d7 r4 r4
3 r4 r4 r4 r4
4 d5 d4 8 2 3
5 r6 r6 r6 r6
6 d5 d4 9 3
7 d5 d4 10
8 d6 d11
9 r1 d7 r1 r1
10 r3 r3 r3 r3
11 r5 r5 r5 r5
83 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
i
y
0 i
1 i
6 9i
i
5
i
2 i
7 i
10
i
3
84 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
i
3
84 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
F - 3i
y
84 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
F - 3i
84 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
- 2i -
T *
7i
y i
10
F - 3i
84 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
F - 3i
84 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
84 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
84 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
84 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
84 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
84 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
84 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
84 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
84 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
Grammaires SLR
SLR(k) : Simple-LR(k).
I Un item LR(0) (ou simplement item) d’une grammaire G est une
production de G avec un point repérant une position dans la partie
droite. Une règle A → XYZ peut donc donner :
A → .XYZ
A → X .YZ
A → XY .Z
A → XYZ .
Analyse SLR
86 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
Items valides
Un item A → β1 .β2 est valide pour un préfixe viable αβ1 si il existe une
dérivation telle que :
∗
S 0 ⇒ αAw ⇒αβ1 β2 w
d d
E 0 ⇒E ⇒E + T ⇒E + T ∗ F
d d d
87 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
Fermeture : Exemple
E0 → E
E → E + T |T
T → T ∗ F |F
F → (E )|id
et : 0
E → .E
E → .E + T |.T
0
Fermeture({E → .E }) =
T → .T ∗ F |.F
F → .(E )|.id
89 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
Notion de Noyau
90 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
Transition
J = {A → αX .β | A → α.X β ∈ I }
et si J 6= ∅
Transition(I , X ) = Fermeture(J)
Intuitivement si I est l’ensemble des items valides pour un préfixes viable
γ, Transition(I,X) est l’ensemble des items valides pour le préfixe viable
γX .
Sur l’exemple précédent :
T → T ∗ .F
Transition({T → T .∗F }, ∗) = Fermeture({T → T ∗.F }) = F → .(E )
F → .id
91 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
I5 : F → id.
I0 : E 0 → .E
E → .E + T |.T
I6 : E → E + T.
T → .T ∗ F |.F
T → .T ∗ F |.F
F → .(E )|.id
F → .(E )|.id
I1 : E 0 → E.
I7 : T → T ∗ .F
E → E. + T
F → .(E )|.id
I2 : E → T.
I8 : F → (E .)
T → T. ∗ F
E → E. + T
I3 : T → F.
I9 : E → E + T.
I4 : F → (.E )|.(E )|.id
T → T. ∗ F
E → .E + T |.T
I10 : T → T ∗ F.
T → .T ∗ F |.F
I11 : F → (E ).
93 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
L’état i correspond à Ii . 6
(
0
m E
- 1m +
- 6m-
T
9
m *
-vers 7
6
id
- 5m id
id
6 +
T
- 2m *- 7m F
- m
10
(
-vers 4
F
- 3m F
F
6
(
- 4m - E
8
m )
- 11
m
T@
(
?@Rid
vers 2 vers 5
94 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
S → G =D
S → D
G → ∗D
G → id
D → G
I2 : S → G. = D
D → G.
Items LR valides
tel que :
1. γ = αβ
2. a est le premier symbole de w si w 6= sinon a=$.
99 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
∗
Pour toute réduction B → η on aura S ⇒δαBβaw ⇒δαηβaw .
d d
Par conséquent on doit s’attendre a voir (et donc ajouter à la fermeture)
les items de la forme [B → .η, b] avec b ∈ PREMIER(βaw ). Puisque a
est un terminal, on a PREMIER(βaw ) = PREMIER(βa).
100 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
101 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
I0 : S 0 → .S, $
S → .CC , $
C → .cC , c/d
C → .d, c/d
103 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
104 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
I2 : C → C .C , $
S → .CC , $
C → .cC , $
C → .d, $
I et ainsi de suite. . .
105 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
I0 : S 0 → .S ,$
I4 C → d. , c/d
S → .CC ,$
C → .cC , c/d
I5 : S → CC . ,$
C → .d , c/d
I6 : C → c.C ,$
I1 : S 0 → S. ,$
C → .cC ,$
C → .d ,$
I2 : S → C .C ,$
C → .cC ,$
I7 : C → d. ,$
C → .d ,$
I8 : C → cC . , c/d
I3 : C → c.C , c/d
C → .cC , c/d
I9 : C → cC . ,$
C → .d , c/d
107 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
0i
-S
1i
2i 5i
C
- -C
c
6i 9i
c
- ?-C
7i
d
-
c
3i 8i
c
- ?
-C
108 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
I Toutes les liaisons entrantes vers deux états i et j sont donc fusionnées sur
l’état ij.
I La fonction de Transition dépendant du coeur et non pas des terminaux si
Transition(i,X)=k et Transition(j,X)= l alors k et l devront eux même être
fusionnés.
111 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
I0 : S 0 → .S ,$ I47 C → d. , c/d/$
S → .CC ,$
C → .cC , c/d I5 : S → CC . ,$
C → .d , c/d
I89 : C → cC . , c/d/$
I1 : S 0 → S. ,$ 0i-S
1i
2i 5i
C C
I2 : S → C .C ,$ - -
C → .cC ,$ c
36i i
c
- ?
-C
89
C → .d ,$
47i
d
-
I36 : C → c.C , c/d/$
C → .cC , c/d/$
C → .d , c/d/$
112 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
Remarque : cette méthode est loin d’être optimale puisque l’on construit
tous les items LR(1) avant de les réduire.
114 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
Exemple
Soit la grammaire :
S → G = D|D
G → ∗D|id
D → G
Le noyau de sa grammaire LR(0) augmentée est :
I0 : S 0 → .S
I5 : G → id.
I1 : S 0 → S.
I6 : S → G = .D
I2 : S → G. = D
I7 : G → ∗D.
D → G.
I8 : D → G.
I3 : S → D.
I9 : S → G = D.
I4 : G → ∗.D
116 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
∗
I Supposons à présent que l’item LR(1) [B → γ.C δ, b] ∈ I .Puisque C ⇒Aη,
d
l’item [A → X .β, a] ∈ Transition(I , X ) pour tout a ∈ PREMIER(ηδ). On
dit que a est engendré sppontanément. Le terminal $ est engendré
spontanément pour [S 0 → .S].
∗
I Toutefois si ηδ ⇒, alors [A → X .β, b] ∈ Transition(I , X ). On dit dans ce
d
cas, que le symbole b se propage.
I l’algorithme suivant calcule les symboles de prévision en utilisant le
∗
symbole fictif # pour détecter les dérivations ηδ ⇒.
d
117 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
Symboles de prévision
S0 → .S, #
S → .G = D, #
S → .D, #
G → . ∗ D, #/ =
G → .id, #/ =
D → .G , #
119 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
120 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
De Vers
I0 : S 0 → .S I1 : S 0 → S.
I2 : S → G. = D
D → G.
I3 : S → D.
I4 : G → ∗.D
I5 : G → id.
I2 : S → G . = D I6 : S → G = .D
I4 : G → ∗.D I4 : G → ∗.D
I5 : G → id.
I7 : G → ∗D.
I8 : D → G.
I6 : S → G = .D I4 : G → ∗.D
I5 : G → id.
I7 : D → G.
I8 : S → G = D.
121 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
122 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
124 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
main()
{
return yyparse();
}
%{
#include <stdio.h>
%}
blanc [ ]
pm [+-]
chiffre [0-9]
frac \.{chiffre}+
exp E{pm}?{chiffre}+
nb {chiffre}*{frac}?{exp}?
%%
{blanc} {}
{nb} {yylval=atof(yytext); return NB;}
- {return NEG;}
\n|. {return yytext[0];}
%%
126 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
E → E + T |E − T |T
T → T ∗ F |T /F |F
F → (E )| − E |nombre
127 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
main()
{
return yyparse();
}
131 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
132 / 133
Presentation
Introduction
Analyse descendante
Bibliographie
Analyse ascendante
Analyse lexicale
Analyse Syntaxique
133 / 133