Académique Documents
Professionnel Documents
Culture Documents
Département Informatique
Cours:Techniques
Cours: Techniquesde
deCompilation
Compilation
Cours: Techniques de Compilation
2éme Licence Fondamentale en Science de l’Informatique
Enseignante : Dr. Fatma SBIAA
AU: 2019/2020
Chapitre 4: Analyse Syntaxique
1.Le rôle d’un Analyseur Syntaxique (Parser)
2.Grammaires
2.1 Définitions et exemples
2.2 Dérivation
3. Types des grammaires
4. Grammaire non contextuelle (BNF)
5. Méthodes d’analyse syntaxique
3.1 Analyse Descendante
3.2 Analyse Ascendante
2
FSM AU:2019/2020 LFSI2 F. SBIAA
1. Le rôle d’un Analyseur Syntaxique (Parser)
Analyser un langage consiste à vérifier la syntaxe du code source et signaler les
erreurs syntaxiques qui correspondent au cas où la suite de tokens n’est pas un mot
du langage.
Il s’agit de trouver la (ou les) arbres de dérivation correspondantes:
Regrouper les unités lexicales du programme suivant des structures
grammaticales qui seront employées par le compilateur pour la synthèse les
résultats.
Ces structures grammaticales permettent de construire une représentation
syntaxique du code source : structure en arbre.
On note que durant cette phase, les informations à utiliser sont enregistrées
dans la table des symbole issue de l’analyse lexicale. Où, à toute valeur
lexicale on associe un id pointant vers la table des symboles.
3
FSM AU:2019/2020 LFSI2 F. SBIAA
1. Le rôle d’un Analyseur Syntaxique (Parser)
Générateur
d’analyseur syntaxique
9
FSM AU:2019/2020 LFSI2 F. SBIAA
2.Grammaire
Exemple 2:
Voici une grammaire de phrase(VN, VT, S, P) où:
VN={S, A, B, C};
VT={a, b, c};
S est le symbole de départ;
P= { SASC
SB
BbB
B
Aa
Cc}
10
FSM AU:2019/2020 LFSI2 F. SBIAA
2.Grammaire
2.2. Dérivation
11
FSM AU:2019/2020 LFSI2 F. SBIAA
2.Grammaire
2.2. Dérivation
A partir de l’exemple de grammaire précédent (exp2), on obtient le mot
abc par la dérivation suivante:
Rappel de la description de
grammaire
12
FSM AU:2019/2020 LFSI2 F. SBIAA
2.Grammaire
2.2. Dérivation
On peut écrire les dérivations sous une forme plus compacte si on n’écrit
pas explicitement les règles utilisées.
Par exemple, la dérivation précédente peut être écrite comme suit:
La transformation résultant de
l’utilisation d’une règle de réécriture est
indiquée par la flèche ⇒.
13
FSM AU:2019/2020 LFSI2 F. SBIAA
2.Grammaire
2.2. Dérivation
14
FSM AU:2019/2020 LFSI2 F. SBIAA
2.Grammaire
Exercice 1:
Soit un exemple de grammaire où le côté gauche des productions est plus complexe.
Cherchons une dérivation qui nous permet d’avoir la séquence aabbcc.
15
FSM AU:2019/2020 LFSI2 F. SBIAA
2.Grammaire
Exercice 2:
Soit G = (VN, VT, S, P) la grammaire dont les règles de réécriture sont définies come suit:
S AB
A aA
B Bb
A
Bb
1) Donner VN et VT selon la convention.
2) Dire si les séquences suivantes sont générées par cette grammaire. Si oui donner une
dérivation, si non dire pourquoi.
• aabb
• abbb
•
16 • ba
FSM AU:2019/2020 LFSI2 F. SBIAA
2.Grammaire
Exercice 2: (correction) S AB
A aA
1) Donner VN et VT selon la convention. B Bb
VN ={S,B,A} A
Bb
VT={a, b, }
2) Dire si les séquences suivantes sont générées par cette grammaire. Si oui donner une
dérivation, si non dire pourquoi.
• aabb oui SABaABaaABaaBaaBbaabb
• abbb oui SABaABaBaBbaBbbabbb
• non, car d’après les règles de dérivation on a SAB et à partir de
B on a pas une règle- pour générer le symbole terminal .
• ba non, car d’après les règles de dérivation on peut obtenir des mots
qui commence par une suite de a (éventuellement zéro) et qui se
termine par une suite de b (au moins un seul symbole)
17
FSM AU:2019/2020 LFSI2 F. SBIAA
2.Grammaire
Définition 2:
Soit G = (VN, VT, S, R). Si VT où est un alphabet, on dit que G est une grammaire sur .
Soit L(G) = {wVT*: w est dérivée de S}.
On dit que L(G) est le langage généré par G.
Remarque importante : Une grammaire définit un seul langage. Par contre, un
même langage peut être engendré par plusieurs grammaires différentes.
Exercices
• Dire quel est le langage généré par chacune des grammaires suivantes:
1) S AB
A aA 2) S aSb
B Bb S ab
A Réponse: L = {anbn: n N+ }
B b
18 Réponse : L = {a nbm : m N+ et n N }.
FSM AU:2019/2020 LFSI2 F. SBIAA
3.Types des Grammaires
Une grammaire peut être:
-sans restrictions (ou de type 0) si toutes ses règles de production
sont sans restrictions.
-dépendante du contexte (Contextuelle ou de type 1) si toutes
ses règles de production sont dépendantes du contexte.
-hors contexte (ou de type 2) si toutes ses règles de production sont
hors contexte.
-Régulière (ou de type 3) si elle est régulière à droite ou régulière à
gauche. Une grammaire est régulière à gauche si toutes ses règles sont
régulières à gauche et une grammaire est régulière à droite si toutes ses
règles sont régulières à droite.
type 3 type 2 type 1 type 0
19
FSM AU:2019/2020 LFSI2 F. SBIAA
3.Types des Grammaires
Type 2: grammaire algébrique (hors-contexte)
Toutes les règles sont sous la forme: α → β avec α Є VN ; et β Є (VN U VT ) *
Exemple :
Soit L={an bn /n ≥1} G= SaSb|ab
Exemple :
Soit L={anbn cn/n ≥0}
20
FSM AU:2019/2020 LFSI2 F. SBIAA
3.Types des Grammaires
Non, les deux règles violent les restrictions des grammaires régulières
2. Construire une grammaire régulière générant le langage L:{ apbcq :p N et q N+}
Réponse: SaS CcC
SbC Cc
22
FSM AU:2019/2020 LFSI2 F. SBIAA
3.Types des Grammaires
Exercice 2: <expression> <terme> | <expression> + <terme>
Considérons la grammaire suivante : <terme> a | b | c
ST|S+T
T a | b| c
S et T sont des symboles non-terminaux,
+, a, b et c sont terminaux
1. Noter la définition récursive de S, permettant de définir les langages de cardinal infini
à partir d'un nombre fini de règles (Exemple : montrer que b+a+a est un "mot" du
langage défini par cette grammaire).
Réponse: SS+TS+T+TT+T+Tb+T+Tb+a+Tb+a+a
On peut donc dire que cette grammaire définie les langages de cardinal
infini.
23
FSM AU:2019/2020 LFSI2 F. SBIAA
4. Grammaire non contextuelle (Context-Free)
24
FSM AU:2019/2020 LFSI2 F. SBIAA
4. Grammaire non contextuelle (Context-Free)
Nous utiliseront ici un seul symbolisme, parmi les plus célèbres, pour représenter les
grammaires : La formalisation BNF.
BNF signifie « Backus Naur Form », du nom de ses inventeurs (utilisé pour la définition
d ’Algol 60, vers 1958). Symboles:
Notations:
Terminaux: les minuscules, chiffres, symboles d’opérateurs, symboles en gras
Non-terminaux: majuscules: A,B,C,S ; entre <crochets>
Symboles: X,Y, Z
Chaînes de terminaux: u, v, w
25 Chaînes de symboles: a, b, g
FSM AU:2019/2020 LFSI2 F. SBIAA
4. Grammaire non contextuelle (Context-Free)
Vocabulaire non-terminal
Exemple1: < INSTRUCTION >: : = if < EXPR > then < INSTRUCTION > else <INSTRUCTION >
vocabulaire terminal
27
FSM AU:2019/2020 LFSI2 F. SBIAA
4. Grammaire non contextuelle (Context-Free)
Exemple 4:
Pour un programme écrit dans un langage très élémentaire, on commence par introduire le mot clé
"PROGRAMME" suivi d’une suite de déclarations, puis le mot clé "debut" suivi par la suite
d’instructions ensuite le mot clé "fin" et un point-virgule pour finir.
On peut ainsi définir la grammaire suivante pour décrire un programme.
Nous allons utiliser les grammaires qui permettent une spécification facile et
précise d’un langage de programmation. Il s’agit donc de vérifier que les lignes de
code respectent bien les règles de la grammaire correspondante.
Pour les classes de grammaires usuellement utilisées il existe des outils efficaces
(Yacc, Bisons,. . .) permettant d’analyser automatiquement un fichier source à
partir d’une grammaire.
29
FSM AU:2019/2020 LFSI2 F. SBIAA
5. Méthodes d’Analyse Syntaxique
Exemple: Soit la grammaire suivante qui décrit une phrase:
<PHRASE> ::= <SUJET> <VERBE>.
<SUJET >::= Jean | Marie
<VERBE >::= mange | parle
1. Construire l’arbre syntaxique de la phrase suivante: Jean mange.
phrase En analysant l’Arbre syntaxique de la
sujet verbe . phrase « Jean mange. » on peut déduire
qu’elle vérifie bien la syntaxe définie par la
Jean mange . grammaire correspondante
31
FSM AU:2019/2020 LFSI2 F. SBIAA
5. Méthodes d’Analyse Syntaxique
5.1. Analyse descendante
Idée : Cette analyse correspond à un parcours descendant gauche (parce
qu’on lit de gauche à droite). Il s’agit de deviner à chaque étape quelle est la
règle qui sert à engendrer le mot que l’on lit.
Les méthodes déterministes les plus efficaces connues à l’heure actuelle
sont : l’analyse prédictive et la descente récursive.
Lorsque le langage d’implémentation dispose de la récursivité, il est
souhaitable d’utiliser la descente récursive dans le cas contraire, l’analyse
prédictive affirmera son existence.
32
FSM AU:2019/2020 LFSI2 F. SBIAA
5. Méthodes d’Analyse Syntaxique
5.1. Analyse descendante
5.1.1. Analyse prédictive :
Cette analyse utilise une table appelée table prédictive, les lignes de cette table sont
indicées par les symboles non terminaux du langage, par contre les colonnes sont indicées
par les symboles terminaux et le symbole # (l’indicateur de la fin de la chaine ).
Les cases de la table contiennent éventuellement des règles de la grammaire.
Deux notions sont nécessaires pour la construction de cette table: SUIVANT et
DEBUT.
Intuitivement le DEBUT d’une chaine de symboles de la grammaire contient tous les
terminaux et éventuellement si la chaine est vide qui peuvent apparaitre en tête d’une
chaine de terminaux dérivée à partir de la chaine initiale.
Le SUIVANT d’un Non terminal est un ensemble comportant tous les terminaux ( #
inclus) qui peuvent suivre ce Non terminal dans toute chaine de symboles .
33
FSM AU:2019/2020 LFSI2 F. SBIAA
5. Méthodes d’Analyse Syntaxique
5.1. Analyse descendante
5.1.1. Analyse prédictive :
Calcul de DEBUT(X)
Pour toute chaine composée de symboles terminaux et non_terminaux, on
cherche PREMIER(α) (ou First (α)) l’ensemble de tous les terminaux qui
peuvent commencer une chaine qui se dérive de α .
34
FSM AU:2019/2020 LFSI2 F. SBIAA
5. Méthodes d’Analyse Syntaxique
5.1. Analyse descendante
5.1.1. Analyse prédictive :
Calcul de SUIVANT(X):
Pour tout non_terminal A, on cherche SUIVANT(A), l’ ensemble de tous les
symboles terminaux a qui peuvent apparaitre immédiatement à droite de A
dans une dérivation.
35
FSM AU:2019/2020 LFSI2 F. SBIAA
5. Méthodes d’Analyse Syntaxique
5.1. Analyse descendante
5.1.1. Analyse prédictive :
36
FSM AU:2019/2020 LFSI2 F. SBIAA
5. Méthodes d’Analyse Syntaxique
5.1. Analyse descendante
5.1.1. Analyse prédictive :
Construction de la table d'analyse
37
FSM AU:2019/2020 LFSI2 F. SBIAA
5. Méthodes d’Analyse Syntaxique
5.1. Analyse descendante
Exercice: (analyse prédictive)
Soit la grammaire suivante avec :
VT ={+, -,*,/, (,), Id}
VN = E, E‘, T, T‘ ,F
Axiome : E
P : <E >::= <T><E’>
<E’>::= +<T><E’>|
<T>::= <F><T’>
<T’>::= *<F><T’>
<T’>::= /<F><T’>|
<F>::= (<E>)| Id
38
1. Analysez le mot : m= 3 *4 +5
FSM AU:2019/2020 LFSI2 F. SBIAA
5. Méthodes d’Analyse Syntaxique
5.1. Analyse descendante
Correction de l’exercice:
1. Analysez le mot : m= 3 *4 +5
a) Cherchons d’abord les informations DEBUT() et SUIVANT()
PREMIER(E)=PREMIER(T)= PREMIER(F)={(,Id}
PREMIER(E') = {+, }
PREMIER(T') = {*, }
SUIVANT(E) = SUIVANT(E') = { ), #}
SUIVANT(T) = SUIVANT(T') = {+,),#}
SUIVANT(F) = {+, *, ), #}
39
FSM AU:2019/2020 LFSI2 F. SBIAA
5. Méthodes d’Analyse Syntaxique
5.1. Analyse descendante
Correction de l’exercice: (suite)
b) On peut maintenant déduire le tableau correspondant:
40
FSM AU:2019/2020 LFSI2 F. SBIAA
5. Méthodes d’Analyse Syntaxique
5.1. Analyse descendante
Correction de l’exercice: (suite)
c) Maintenant, on utilise une pile pour déduire si le mot : m= 3 *4 +5 est
syntaxiquement correct. Voici l’algorithme utilisé:
41
FSM AU:2019/2020 LFSI2 F. SBIAA
5. Méthodes d’Analyse Syntaxique
5.1. Analyse descendante
Correction de l’exercice: (suite)
d) Commençons donc l’analyse du mot : m= 3 *4 +5 en construisant
l’arbre syntaxique abstraite:
42
FSM AU:2019/2020 LFSI2 F. SBIAA
5. Méthodes d’Analyse Syntaxique
5.1. Analyse descendante
Remarque:
Une grammaire G est dite LL(1) « Left-to-right scanning, Leftmost
derivation, use 1 symbol lookahead » si ses règles de production vérifient les
conditions suivantes :
51
FSM AU:2019/2020 LFSI2 F. SBIAA