Vous êtes sur la page 1sur 61

Cours Compilation

Enseignante : Dr.Ines BEN TEKAYA

AU : 2016/2017
2ème année LFI-Semestre 2

1
Chapitre 4 : Analyse syntaxique

2
Plan
1. Rôle d’un analyseur syntaxique

2. Rappel sur les grammaires

3. Méthodes d’analyse

4. Analyse syntaxique descendante

5. Analyse syntaxique ascendante

6. Détection et traitement des erreurs

3
Rôle d’un analyseur syntaxique
• Un analyseur syntaxique :
• reçoit une suite d’unités lexicales de l’analyseur
lexical,
• vérifie que cette chaîne est engendrée par la
grammaire du langage
• et traite les erreurs générées lors de cette phase.

4
Types d’un analyseur syntaxique
• Il y a 3 types généraux d’analyseurs syntaxiques:
1. Méthodes universelles qui peuvent analyser une
grammaire quelconque.
2. Méthodes ascendantes qui construisent des
arbres d’analyse en partant des feuilles vers la
racine.
3. Méthodes descendantes qui construisent des
arbres d’analyse en partant de la racine vers les
feuilles. 5
Rappel sur les grammaires
• Grammaire ?
• Grammaire ambiguë ?
• Dérivation ?
• Types d’une grammaire ?

6
Rappel sur les grammaires
• La définition d’un langage par une grammaire peut
être vue comme un processus de construction de
l’arbre syntaxique.
• La dérivation est une description de la construction
descendante de cet arbre.
• On traite une production en remplaçant le non
terminal de la partie gauche par la partie droite de la
production.
7
Rappel sur les grammaires
• soit la grammaire des expressions arithmétiques
E → E + E |E * E| (E)| -E | id
• -E est aussi une expression
• E se dérive en –E en une étape: E⇒-E
• Une dérivation de E en – (id) :
• E⇒ - E ⇒ – (E) ⇒ – (id)
• E se dérive en –(id) en 3 étapes.

8
Rappel sur les grammaires
• Un arbre syntaxique est une représentation
graphique d’une dérivation dans laquelle l’ordre de
remplacement a disparu.

9
Rappel sur les grammaires
• Donner l’un arbre syntaxique de la phrase -(id+id) ?

10
Rappel sur les grammaires
• Exemple d’un arbre syntaxique : soit la phrase -
(id+id)

11
Rappel sur les grammaires
• Une grammaire est dite ambigüe si elle produit plus
d’un arbre syntaxique pour la même phrase.

12
Rappel sur les grammaires
• Soit la grammaire des instructions conditionnelles :
instr → si exp alors instr
si exp alors instr sinon instr
Autre
exp → Ei
• Et soit l’instruction: « si E1 alors si E2 alors S1 sinon
S2 »

13
Rappel sur les grammaires
• Nous avons, d’après cette grammaire, deux
interprétations possibles pour la même phrase :
1- si E1 alors si E2 alors S1 sinon S2 l’arbre d’analyse
correspondant :

14
Rappel sur les grammaires
• Nous avons, d’après cette grammaire, deux
interprétations possibles pour la même phrase :
2- si E1 alors si E2 alors S1 sinon S2 l’arbre d’analyse
correspondant :

• Cette grammaire est ambigüe.


15
Rappel sur les grammaires
• Une grammaire est dite récursive à gauche si elle
contient un non terminal A tel qu’il existe une
dérivation :
+
• A ⇒ A α avec α une chaîne quelconque de symboles
grammaticaux (une suite de terminaux et de non
terminaux).

16
Rappel sur les grammaires

• Soit la grammaire A → Aα1 | Aα2 |….| β1 |… βn


• Pour supprimer la récursivité gauche, nous réécrivons
cette grammaire sous la forme :
A → β1 A’| β2 A’|…| βn A’
A’ → α1 A’| α2 A’|…| αm A’|Ɛ
• Avec les βi ne commençant pas par A,
• Et les αi ne commencent pas par A’ et ne
produisent pas la chaîne vide.
17
Rappel sur les grammaires

18
Rappel sur les grammaires : Factorisation à
gauche
• Si les parties droites de plusieurs productions
commencent par le même préfixe, lors de l’analyse il
n’est pas évident de choisir la bonne production.
• Soit les S-productions :
S → A β1 |A β2 |……|A βn avec A le préfixe commun.
• En factorisant à gauche, on a :
S → AA’
A → β1 |β2 |……|βn
19
Méthodes d’analyse
• Les différentes questions que l’on pose par rapport
aux phrases engendrées par une grammaire sont :
• Supposons qu’on a une phrase ω :
- comment analyser ω ?
- ω appartient-elle au langage L(G) ?
- si ω ϵ L(G), donner une dérivation.

20
Méthodes d’analyse
• Il y’a 2 critères de classification pour distinguer les
différentes méthodes d’analyse syntaxique :
- le sens de parcours de la chaîne analysée : gauche-
droite ou droite-gauche.
- le sens d’application des productions : dérivation ou
réduction.

21
Méthodes d’analyse
• on distingue 4 méthodes d’analyse désignées par un
couple XY.
• X- le sens de parcours , Y- le sens d’application
des productions.
• X = L,R L : Left to Right R : Right to Left
• Y = L,R L : Leftmost derivation R : Rightmost
derivation

22
Méthodes d’analyse
• on distingue 4 méthodes d’analyse désignées par un
couple XY.
• X- le sens de parcours , Y- le sens d’application
des productions.
• X = L,R L : Left to Right R : Right to Left
• Y = L,R L : Leftmost derivation R : Rightmost
derivation

23
Méthodes d’analyse
• Les 4 combinaisons sont :

24
Analyse syntaxique descendante
• Le principe de l’analyse syntaxique descendante est
• construire l’arbre de dérivation du haut : la racine
c’est à dire l’axiome de départ
• vers le bas : les feuilles, c’est à dire les unités
lexicales.

25
Analyse syntaxique descendante
• L’analyse syntaxique descendante peut être vue
comme étant :
• une tentative de trouver une dérivation à gauche
d’abord pour la chaîne d’entrée ;
• ou une tentative de construire un arbre de
dérivation pour la chaîne d’entrée en construisant
les noeuds de l’arbre en pré-ordre.

26
Exemple d’analyse syntaxique
descendante
• Soit G une grammaire tel que S est l’axiome
S → aSbT|cT |d
T → aT|bS|c
• Soit w = accbbadbc.
• Nous devons partir avec l’arbre contenant le seul
sommet S.
• Pouvez vous construire un arbre de dérivation
permettant de lire w ?
27
Analyse syntaxique descendante
• La lecture de la première lettre du mot w nous
permet d’avancer dans la construction. Nous avons
un seul choix !
• Pour la deuxième lettre aussi c nous avons un seul
choix à prendre!
• Si toujours un seul choix, nous allons finir par trouver
l’arbre de dérivation.

28
Analyse syntaxique descendante
• En règle générale, l’analyse syntaxique descendante
demande de faire du rebroussement.
• Ce n’est pas souhaitable en compilation car, pour
certaines grammaires, l’analyse peut prendre un
temps exponentiel en pire cas.

29
Analyse syntaxique descendante
• Simulons l’analyse descendante de la chaîne w = cad
en considérant la grammaire:
S → cAd
A → ab | a
• Nécessite un rebroussement !

30
Analyse syntaxique descendante
• Dans certains cas, en concevant bien notre
grammaire,
• en éliminant les ambiguïtés et les récursions à
gauche,
• on obtient un analyseur syntaxique descendant
qui n’a pas besoin d’effectuer de rebroussement,
• c’est-à-dire un analyseur prédictif.

31
Table d’analyse
• Une table d’analyse LL(1) nous dit quand je lis un
caractère ∈ w :
• quel(s) symbole(s) non-terminal je dérive ?
• quelle(s) règle(s) j’applique ?

32
Table d’analyse
• La fonction TABLEANALYSELL1(G) fait appel aux
fonctions, avec (X ∈ N) :
• CALCULPREMIER(X)
• CALCULSUIVANT(X)

33
Table d’analyse : CALCULPREMIER(X)
Définition PREMIER
• Soit X ∈ N,
• Tout a ∈ ∑* tel que X ⇒a
*
est un PREMIER de X.
• La fonction CALCULPREMIER(X) doit nous retourner
l’ensemble des a ∈ ∑* tel que X *
⇒ a.

34
Table d’analyse : CALCULPREMIER(X)
Définition PREMIER
• si a est un terminal, alors: PREMIER(a) = {a}
• de même : PREMIER(Ɛ) = {Ɛ}
• si A → b α , alors b est un élément de PREMIER(A)
• si A → B α , alors PREMIER(B) ⊂ PREMIER(A)
• si B peut produire la chaîne vide, alors
((PREMIER(B)\{Ɛ}) U PREMIER(α)) ⊂ PREMIER(A)

35
Table d’analyse : CALCULPREMIER(X)
Définition PREMIER
• si B peut produire la chaîne vide, alors
((PREMIER(B)\{Ɛ}) U PREMIER(α)) ⊂ PREMIER(A)
• D’une autre manière, PREMIER(α) inclut toujours
l’ensemble PREMIER du premier symbole de α.
• Si celui-ci peut produire Ɛ, il inclut aussi l’ensemble
PREMIER du second symbole de α, etc…
• Si tous les symboles de α peuvent produire Ɛ alors
PREMIER(α) contient Ɛ. 36
Table d’analyse : Exemple
CALCULPREMIER(X)
• Soit G une grammaire tel que S est l’axiome
S → Ba
B → cP|bP|P|Ɛ
P → dS
• CalculerPremierdeS?

37
Table d’analyse : Exemple
CALCULPREMIER(X)
• S → Ba
• B → cP|bP|P|Ɛ
• P → dS
• Premier de S?
S => a (B → Ɛ)
S => cPa
S => bPa
S => dSa
• Alors PremierdeS = {a,c,b,d} 38
Table d’analyse : Exemple
CALCULPREMIER(X)
• La grammaire G tel que E est l’axiome
E → TE’
E’ → +TE’| − TE’|Ɛ
T → FT’
T’ → *FT’|/FT’|Ɛ
F → (E)|nb
• Calculer Premier(E), Premier(E’), Premier(T),
Premier(T’) et Premier(F) ? 39
Table d’analyse : Exemple
CALCULPREMIER(X)
E → TE’ E’ → +TE’| − TE’|Ɛ T → FT’
T’ → *FT’|/FT’|Ɛ F → (E)|nb
• E=>TE’ E=>FT’E’=>( E ) T’E’ ou E=>nbT’E’ donc
Premier(E) = {(,nb}
• E’ → +TE’| − TE’|Ɛ donc Premier(E’)={+,-, Ɛ}
• F → (E)|nb donc Premier(F)={(,nb}
• T’ → *FT’|/FT’|Ɛ donc Premier(T’)={*,/, Ɛ}
• T → FT’ d’où Premier(T)={(,nb} 40
Table d’analyse : Exemple
CALCULPREMIER(X)
• La grammaire G tel que S est l’axiome
S → ABCe
A → aA| Ɛ
B → bB|cB| Ɛ
C → de|da|dA
• Calculer Premier(S), Premier(A), Premier(B) et
Premier(C) ?

41
Table d’analyse : Exemple
CALCULPREMIER(X)
S → ABCe A → aA| Ɛ B → bB|cB|Ɛ C → de|da|dA
• Premier(S)=(Premier(A)UPremier(B)Upremier(C))\{Ɛ}
• Premier(A)={a, Ɛ}
• Premier(B)={b,c,Ɛ}
• Premier(C)={d}
• Donc Premier(S)={a,b,c,d}

42
Table d’analyse : CALCULSUIVANT(X)
Définition Suivant
• Soit X ∈ N,
*
• Tout a ∈ ∑* tel que X ⇒ αXaβ est un Suivant de X.
• C’est l’ensemble de tous les symboles terminaux a
qui peuvent apparaitre immédiatement à droite de X
à partir d’un ensemble de dérivations découlant de
l’axiome.

43
Table d’analyse : CALCULSUIVANT(X)
Définition Suivant

• La fonction CALCULSUIVANT(X) doit nous retourner


pour le non terminal X ∈ N l’ensemble des a ∈ T tel
*
que S ⇒ α Xa β.

44
Table d’analyse : CALCULSUIVANT(X)

• Nous appliquons les règles suivantes jusqu’à ce


qu’aucun terminal ne puisse être ajouté aux
ensembles SUIVANT :
1. mettre $ dans SUIVANT de l’axiome.
2. s’il y a une production : A → α B β, le contenu de
PREMIER(β), excepté Ɛ est ajouté à SUIVANT(B).

45
Table d’analyse : CALCULSUIVANT(X)

3. s’il y a une production : A → α B ou A → α B β tq


PREMIER(β) contient Ɛ alors les éléments de
SUIVANT(A) sont ajoutés à SUIVANT(B).

46
Table d’analyse : Exemple
CALCULSUIVANT(X)
• La grammaire G tel que E est l’axiome
E → TE’
E’ → +TE’|Ɛ
T → FT’
T’ → *FT’|Ɛ
F → (E)|id
• Calculer Suivant(E), Suivant(E’), Suivant(T),
Suivant(T’) et Suivant (F) ?
47
Table d’analyse : Exemple
CALCULSUIVANT (X)
• Suivant (E)={$}
• E → TE’ (A → α B β avec α= Ɛ) premier(E’) excepté Ɛ
est ajouté à suivant (T)
• E → +TE’ : premier(E’) excepté Ɛ est ajouté à
suivant(T) (étape 2)et comme premier(E’) contient Ɛ
alors tout ce qui est dans suivant de E est dans
suivant(T) (étape 3).

48
Table d’analyse : Exemple
CALCULSUIVANT (X)
• T → FT’ (A → α B β avec α= Ɛ) premier(T’) excepté Ɛ
est ajouté à suivant (F)
• T’ → *FT’ : premier(T’) excepté Ɛ est ajouté à
suivant(F).
• F → (E) : premier())= {)} est ajouté au suivant (E).

49
Table d’analyse : Exemple
CALCULSUIVANT (X)
• E → TE’ (A → α B) donc suivant (E ) est ajouté au
suivant(E’)
• E’ → +TE’ suivant(E’) est ajouté au suivant(T)
• T → FT’ suivant(T) est ajouté au suivant(T’)
• T’ → *FT’ suivant(T’) est ajouté au suivant(F)

50
Table d’analyse : Exemple
CALCULSUIVANT (X)

• Premier(F)=premier(T)=premier(E)={(,id}
• Premier(E’)={+, Ɛ}
• Premier(T’)={*, Ɛ}
• Suivant(E)=Suivant(E’)={),$}
• Suivant(T)=Suivant(T’)={+,),$}
• Suivant(F)={+,*,),$}

51
Grammaire LL(1)

• Les analyseurs syntaxiques prédictifs peuvent être


construits pour une classe de grammaires dite LL(1).
• Le premier L : provient du parcours Left to right
(de gauche à droite).
• Le second L : vient du fait que l’on construise une
dérivation gauche (Leftmost derivation).
• Le 1 : indique qu’on utilise un seul symbole de
pré-vision à chaque étape de l’analyse syntaxique.
52
Grammaire LL(1)

• G est une grammaire LL(1) si dans sa table d’analyse


LL(1) dans chaque case, il y a une seule règle de
production.

53
Table d’analyse

• Une table d’analyse est un tableau M à deux


dimensions qui indique pour chaque symbole non-
terminal X et chaque symbole terminal a ou symbole
$ la règle de production à appliquer.

54
Table d’analyse
• Algorithme : Construction d’une table d’analyse
syntaxique M.
• Donnée : Une grammaire G.
• Résultat : Un table d’analyse syntaxique M.
• Méthode : Pour chaque production A →α de la
grammaire, effectuer les étapes suivantes :
1. Pour chaque terminal α de Premier(α), ajouter A →α
à M[A, α].
55
Table d’analyse
2. Si Ɛ est dans Premier(α), alors pour chaque terminal
b de Suivant(A), ajouter A →α à M[A, b]. Si Ɛ est
dans Premier(α) et si $ est dans Suivant(A), ajouter
A →α à M[A, $].
Si après avoir effectué tout cela, il n’y a aucune
production dans M[A, α], alors positionner M[A, α] à
erreur (que l’on représente en général par une entrée
vide dans la table).
56
Table d’analyse
• La grammaire G tel que E est l’axiome
E → TE’
E’ → +TE’|Ɛ
T → FT’
T’ → *FT’|Ɛ
F → (E)|id
• Premier(F)=Premier(T)=Premier(E) = {(,id}
• Premier(E’)={+, Ɛ}
• Premier(T’)={*, Ɛ}
• Suivant(E)=Suivant(E’)={),$}
• Suivant(T)=Suivant(T’)={+,),$}
• Suivant(F)={+,*,),$}
57
Table d’analyse
• Exemple d’une table d’analyse

Non Symbole d’entrée


Terminal id + * ( ) $
E E → TE’ E → TE’
E’ E’ →+TE’ E’ → Ɛ E’ → Ɛ
T T → FT’ T → FT’
T’ T’ → Ɛ T’ → *FT’ T’ → Ɛ T’ → Ɛ
F F → id F → (E)

58
Détection et traitement des erreurs
• Les programmes peuvent contenir des erreurs à
différentes phases de la compilation :
• Lexical : comme l’écriture est erroné d'un
identificateur,
• Syntaxique : comme une expression mal
parenthésée,
• Sémantique : comme un opérateur appliqué à un
opérande incompatible
59
Détection et traitement des erreurs
Les stratégies les plus utilisées sont :
1. récupération en mode panique : son implantation
est simple, il s’agit d’ignorer les symboles d’entrée
les unes après les autres jusqu’à rencontrer un
symbole de synchronisation.
2. récupération au niveau du syntagme : correction
locale.
• Exemple: remplacer une virgule par un point-
virgule 60
Détection et traitement des erreurs
Les stratégies les plus utilisées sont :
3. productions d’erreur : ajouter des productions à la
grammaire qui tiennent compte des erreurs
courantes.
4. correction globale : concevoir des algorithmes qui
peuvent effectuer le minimum de changement sur
une chaîne erronée pour la corriger.

61

Vous aimerez peut-être aussi