Вы находитесь на странице: 1из 184

COMPILATION

Samir MBARKI
Dpartement dInformatique, Facult des Sciences, KENITRA

Anne Universitaire : 2014-2015

S. MBARKI

Compilation

2014-2015

1 / 184

Sommaire

Introduction la compilation

Analyse lexicale

Analyse syntaxique

Analyse smantique

Sries dexercies

S. MBARKI

Compilation

2014-2015

2 / 184

Sommaire

Introduction la compilation
Pourquoi tudier la compilation ?
Dfinition de Compilateur/Interprteur
Traitement effectu par un compilateur
Phases dun compilateur

Analyse lexicale

Analyse syntaxique

Analyse smantique

Sries dexercies

S. MBARKI

Compilation

2014-2015

3 / 184

Introduction la compilation
Pourquoi tudier la compilation ?

Pour mieux comprendre les erreurs de compilation.


Pour mieux comprendre le fonctionnement dun compilateur.
Les algorithmes et les outils de compilations sont repris dans dautres
domaines informatiques :
I
I
I

Traitement automatique des langages naturels (TALN).


Parser des documents (.XML).
GED (Gestion lctronique de documents).

Analyse lexicale : Scanner

S. MBARKI

Analyse syntaxique : Parser

Compilation

2014-2015

4 / 184

Introduction la compilation
Rle du compilateur

Comment lutilisateur communique avec lordinateur ?


Compilateur/Interprteur

S. MBARKI

Compilation

2014-2015

5 / 184

Introduction la compilation
Dfinition de compilateur

Dfinition
Le compilateur est un programme (fonction) qui prend en entre un
programme crit dans un langage L1 et produit en sortie un programme
quivalent crit dans un langage L2.

Exemple : C, C++, Java, ...

S. MBARKI

Compilation

2014-2015

6 / 184

Introduction la compilation
Dfinition dinterprteur

Dfinition
L interpteur est un programme (fonction) qui prend en entre un programme
crit dans un langage source L1 et produit en sortie le rsultat dexcution de
ce programme.

Exemple : Shell Unix, VB, PL/SQL, ...

S. MBARKI

Compilation

2014-2015

7 / 184

Introduction la compilation
Traitement effectu par un compilateur

Exemple

S. MBARKI

Compilation

2014-2015

8 / 184

Introduction la compilation
Phases dun compilateur

Exercice
Ecrire un programme qui affiche les statistiques dun fichier texte en comptant
le nombre de mots, dentiers, de rels et le nombre de caractres de
ponctuation.
S. MBARKI

Compilation

2014-2015

9 / 184

Introduction la compilation
Analyse lexicale

Le flot de caractres est lu de gauche droite.


Les caractres formant un sens sont groups en units lexicales (Tokens).
Les sparateurs (espace, tabulation, retour la ligne) sont supprims.
Les commentaires sont ignors.
Lanalyseur lexical doit dterminer si chaque lexme (mot) est connu.
Une unit lexicale est une suite de caractres ayant une signification
collective.

S. MBARKI

Compilation

2014-2015

10 / 184

Introduction la compilation
Analyse lexicale

Exemple
Soit linstruction : Surf := base * hauteur / 2

Les units lexicales sont :


<Identificateur> Surf
<Affectation>
<Identificateur> base
<Mult>
<Identificateur> hauteur
<Divis>
<Nombre> 2
S. MBARKI

Compilation

2014-2015

11 / 184

Introduction la compilation
Analyse syntaxique

Lunit syntaxique constitue larbre syntaxique.


Appliquer la grammaire du langage source pour vrifier la syntaxe du
programme source.
La grammaire du langage source est form par un ensemble de rgle de
production.

S. MBARKI

Compilation

2014-2015

12 / 184

Introduction la compilation
Analyse syntaxique

Exemple
<Identificateur> <Affectation> <Identificateur> <Mult> <Identificateur>
<Divis><Nombre>

S. MBARKI

Compilation

2014-2015

13 / 184

Introduction la compilation
Analyse smantique

Vrifie si le programme source contient des erreurs smantiques.


Collecte des informations de type pour la gnration de code cible.
Parmi les tches de lanalyseur smantique :
I
I
I

Vrification de type.
Vrification des incompatibilits de types.
Conversion implicite de type.

Exemple
conversion implicite de type :
2 2.0

S. MBARKI

Compilation

2014-2015

14 / 184

Sommaire

Introduction la compilation

Analyse lexicale
Introduction et spcification
Concepts et outils
Loutil Flex

Analyse syntaxique

Analyse smantique

Sries dexercies

S. MBARKI

Compilation

2014-2015

15 / 184

Analyse lexicale
I- Introduction et spcification

Lanalyseur lexical (Scanner) fusionne les caractres lus dans le code source
en groupes de mots qui forment logiquement des units lexicales (tokens) du
langage.

S. MBARKI

Compilation

2014-2015

16 / 184

Analyse lexicale
Interaction avec les autres modules

S. MBARKI

Compilation

2014-2015

17 / 184

Analyse lexicale
Terminologie

Trois termes majeurs sont utiliss en analyse lexicale :


I

Unit lexicale : un couple constitu dun nom dunit lexicale et dune


valeur dattribut optionnelle (facultatif).
Motif : est une description de la forme que les lexmes dune unit lexicale
peuvent prendre. Il peut tre simple ou complexe.
Lexme : est une squence de caractres dans le programme source qui
est reconnue par le motif dune unit lexicale.

Exemple

S. MBARKI

Compilation

2014-2015

18 / 184

Analyse lexicale
Terminologie

Exemple
Symboles (Units lexicales) :
I
I
I

Identificateur, Chaine, Constante numrique.


Mot-cl (IF, WHILE, DO, ...)
Oprateur (symbole spciale) : <, >=,<=, ==, =, ...

Analyser les phrases suivantes :


I
I

A+15+B => A, +, 15, B


test+3148 => test, +, 3148

S. MBARKI

Compilation

2014-2015

19 / 184

Analyse lexicale
Terminologie

WHILE A>3*B DO A<A-1 END

Input de lanalyseur lexical :


Output de lanalyseur lexical :

Une variable C de tye couleur qui peut prendre les valeurs :


VERT, BLEU, ROUGE, JAUNE. Affecter la variable la valeur rouge.

typedef enum {VERT, BLEU, ROUGE, JAUNE} couleur;


couleur C;
C = ROUGE;
//C=2
S. MBARKI

Compilation

2014-2015

20 / 184

Analyse lexicale
Terminologie

Question
Comment dfinir formellement les symboles dun langage ?

Rponse
Les meilleurs modles dfinissant les units lexicales auxquelles
appartiennent les lexmes sont les langages rguliers.
Il existe deux faons de dcrire les langages rguliers :
I
I

Les expressions rgulires


Les automates finis

S. MBARKI

Compilation

2014-2015

21 / 184

Analyse lexicale
Concepts et outils

Alphabet :
On appelle alphabet un ensemble fini non vide.
Les elements de lalphabet sappellent symboles.

Exemple

= {a, b, ..., z}
= {, , ..., , +, , , /}
Mot :
Un mot est une suite de symboles appartenant un alphabet .

Exemple
Sur lalphabet = {0, 1}, on peut construire les mots : 101001, 11, 100.

est le mot vide.


La concatnation de deux mots est un mot.
S. MBARKI

Compilation

2014-2015

22 / 184

Analyse lexicale
Langage formel

Exemple (suite)
Soit = {0, 1}, si = 100 et = 1010 alors = 1001010.
2 = = 100100
3 = = 100100100
Langage formel :
Un langage sur un alphabet est un ensemble de mots construits sur .

Exemple

est lensemble de tous les mots construits sur .


Remarque
Un langage construit sur un alphabet est une partie de .
On distingue deux langages particuliers : , .
S. MBARKI

Compilation

2014-2015

23 / 184

Analyse lexicale
Exemple de langages

Exemple de langages
soit ={a, .., z}
L0 = {a}.
L1 = {aa, ab}.
L2 = {a/ } = {a, bab, cdacd, ...}.
L3 = { /||a <= 10} : lensemble de tous les mots dont le nombre
doccurences de a <= 10.
|.|x : IN , |.|x calcule le nombre doccurences de x dans un mot.

S. MBARKI

Compilation

2014-2015

24 / 184

Analyse lexicale
Oprations sur les langages formels

Lunion.
I

L1

L2 = {x / x L1 ou x L2}

Lintersection.
I

L1

L2 = {x / x L1 et x L2}

La diffrence.
I
I

L1 - L2 = {x / x L1 et x
/ L2}
= L1
L1

La concatnation.
I L1L2 = {xy / x L1 et y L2}
I Ln = LL.....L
| {z }
n fois

L1={a, b, c} ; L2={1, 2}

L1L2={a1, a2, b1, b2, c1, c2}

L2L1={1a, 1b, 1c, 2a, 2b, 2c}


S. MBARKI

Compilation

2014-2015

25 / 184

Analyse lexicale
Fermeture de Kleene

Soit L un langage :
S
L = K >=0 Lk

Exemple
L1={a, b}
S S S S
L1 =L01 L11 L12 L13 ...
={, a, b, aa, ab, ba, bb, ...}
L+ est appel fermeture de Kleene positive de L : L+ =L -{}
Proposition.
Les identits suivantes sont vraies pour tous les langages (X, Y, Z) :
X(YZ)=(XY)Z
X=X=X
S
S
X(Y Z)=XY XZ
S
S
(X Y)Z=XZ YZ
(X ) = X
S. MBARKI

Compilation

2014-2015

26 / 184

Analyse lexicale
Langages rguliers

Dfinition
Un langage rgulier L sur un alphabet est dfini rcursivement comme suit :
{} est un langage rgulier sur .
Soit a alors {a} est un langage rgulier sur .
Si R est un langage rgulier, alors R k et R sont des langages rguliers
sur .
S
Si R1 et R2 sont deux langages rguliers alors R1 R2 et R1 R2 sont des
langages rguliers.

S. MBARKI

Compilation

2014-2015

27 / 184

Analyse lexicale
Les expressions rgulires (ER)

Soit un alphabet, les expressions rgulires et les langages quils dcrivent


sont dfini comme suit :
Soit a , alors a est une ER qui dcrit le langage {a} .

est une ER qui dcrit le langage {} .


Si et sont deux ER dcrivant les langages A et B alors : + ( | )
S
est une ER qui dcrit le langage A B .
- est une ER qui dcrit le langage AB.
- est une ER qui dcrit le langage A .

S. MBARKI

Compilation

2014-2015

28 / 184

Analyse lexicale
Les expressions rgulires (ER)

Exemple dER
Numrique : (0|1|2|...9)
Alphabtique : (a|b|c|...|z|A|...Z)
Oprateur : (<|>|<>|=|<=|>=)
Naturel : Numrique+ ou NumriqueNumrique
Entier : (+|-|)Naturel
Identificateur : Alphabtique ( Alphabtique|Numrique)

S. MBARKI

Compilation

2014-2015

29 / 184

Analyse lexicale
Exercices

Exercice 1
Donner les expressions rgulires qui dcrivent :
1

Le langage de mots sur ={a, b} qui commencent par a est se terminent


par b.

Le langage de tous les mots sur {a, b} concatns avec les mots sur {c, d}.
ab, aab, abb, aaab, abab, abababbab, , a, b, c,d,ac,abc, abcd,
ababcdcdc.

Rponse :
a(a|b) b
(a|b) (c |d )

S. MBARKI

Compilation

2014-2015

30 / 184

Analyse lexicale
Exercices

Exercice 2
1

Est ce que le mot w appartient au langage dcrit par lER r dans les cas
suivants :
- w= 10100010 r =(0 + 10)
- w= 01110110 r =(0 + (11) )
- w= 000111100 r =((011 + 11) (00) )

Simplifier les ER suivantes :


- + ab + ab + abab(ab)
- aa(b + a) + a(ab + aa)
-a(a + b) + aa(a + b) + aaa(a + b)

S. MBARKI

Compilation

2014-2015

31 / 184

Analyse lexicale
Exercices

Rponses

+ ab + abab(ab)
= + ab + ab(ab)
= + ab( + (ab) )
= + ab(ab)
= + (ab)
= (ab)
aa(b + a)+ a(ab + aa)
= aa(b + a)+ aa(b + a)
= aa(b + a)
a(a + b) + aa(a + b) + aaa(a + b)
= (a + aa + aaa)(a + b)

S. MBARKI

Compilation

2014-2015

32 / 184

Analyse lexicale
Exercices

Exercice 3
1

Montrer les galits suivantes :


- b + ab + aa b+ aa ab = a (b + ab )
- a (b + ab ) = b + aa b

Donner une expression r du langage form sur {a,b} ayant au plus 3a.

S. MBARKI

Compilation

2014-2015

33 / 184

Analyse lexicale
Exercices

Rponses
1

Vrification
- b + ab + aa b+ aa ab = a (b + ab )
=> (b + ab ) + a+ (b + ab )
=( + a+ )(b + ab )= a (b + ab )
- a (b + ab )
= a b + a ab
= ( + a + ) + a + b
= b + a+ b + a+ b
= b + a+ (b+b )
= b + a+ b
= b + aa b
b (a + )b (a + )b (a + )b

S. MBARKI

Compilation

2014-2015

34 / 184

Analyse lexicale
Introduction aux automates

Exemple : Introduction aux automates


Un distributeur de caf dlivre une tasse de caf moyennant la somme de 3
DH. Ce distributeur accepte les pices de 1 DH et 2 DH mais ne rend pas la
monnaie. Un bouton C permet dobtenir un caf. Au dbut, le bouton C est
bloqu. Si on met assez de pices, le bouton C se libre et on ne peut pas
insrer de pices.
Modliser le fonctionnement du distributeur.

Automate :
Etat initiale e0 : bouton bloqu
Etat e1 : quand on insre 1DH
Etat e2 : quand on insre 2DH
Etat e3 : bouton C se libre
S. MBARKI

Compilation

2014-2015

35 / 184

Analyse lexicale
Introduction aux automates

: tat initial
: tat final

S. MBARKI

Compilation

2014-2015

36 / 184

Analyse lexicale
Automate fini dterministe

Un automate lit un mot crit sur son ruban dentre. Il part dun tat initial et
chaque lettre lue, il change dtat. Si la fin du mot, il est dans un tat final, on
dit quil accepte le mot.
Mot appartient au langage dernier tat est un tat final.
Mot nappartient pas au langage sinon.
Automate fini dterministe (AFD)

Dfinition
Un AFD A est dfinit comme un 5-uplet A=<Q, , , q0 , F> : Q est lensemble
des tats, est un alphabet, : Q Q est la fonction de transition, q0 est
ltat initial (q0 Q), F est lensemble des tats finaux (F Q) .
Les automates peuvent tre reprsents par des graphes o les tats sont les
noeuds et les arcs reprsentent la fonction de transition.
S. MBARKI

Compilation

2014-2015

37 / 184

Analyse lexicale
Automate fini dterministe

: tat initial
Si (q0 , a)=q1

: tat final

Exercice
Reprsenter graphiquement lautomate suivant :
A=<Q, , , q0 , F> avec ={0, 1} et Q={q0 , q1 } q0 est ltat initial et F={q1 }

S. MBARKI

Compilation

2014-2015

38 / 184

Analyse lexicale
Langage accept par AFD

On dit quun automate A=<Q, , , q0 , F> accepte un mot x=x1 x2 ...xn , si


et seulement si (...(((q0 , x1 ), x2 ), x3 )...), xn ) F .
Exemple de vrification
I

11111

(Oui)

(((((q0 , 1), 1), 1), 1), 1) F


I

10010

(Non)

(((((q0 , 1), 0), 0), 1), 0)


/F

S. MBARKI

Compilation

2014-2015

39 / 184

Analyse lexicale
Automate fini non dterministe (AFN)

Il est difficile de passer directement dune ER un AFD.


Il est facile de passer directement dune ER un AFN.

Dfinition
Un AFN A=<Q, , , q0 , F>, se caractrise par :
S
: QX ( {}) > P (Q )
P({a, b, c})={ , {a}, {b}, {c}, {a,b}, {a,c}, {b,c}, {a,b,c}}
Plusieur arcs, reconnaissent le mme symbole, peuvent sortir du mme
tat.
Il peut y avoir des -transition.

S. MBARKI

Compilation

2014-2015

40 / 184

Analyse lexicale
Automate fini non dterministe (AFN)

Exemple
Reprsenter graphiquement lAFN suivant :
A=<Q, , , q0 , F> avec ={0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, +, -, .} et
Q={q0 , q1 , q2 , q3 , q4 , q5 } q0 est ltat initial et F={q5 }

S. MBARKI

Compilation

2014-2015

41 / 184

Analyse lexicale
Transformation dun AFN en AFD

Deux cas sont possibles :


AFN sans - transitions
AFN avec - transitions
Cas dun AFN sans - transitions :
Soit AN = <QN , N , N ,qN0 , FN > est un AFN sans - transitions, il existe un
AFD, AD = < QD , D ,D , qD0 , FD > tel que :
L(AN )= L(AD ) (Les 2 automates acceptent le mme langage).
QD P (QN ) (Un tat de QD est un sous ensemble de QN ).

D = N (Les deux automates ont le mme alphabet).


qD0 = {qN0 } (LAFD est form de ltat initial de lautomate non
dterministe)

T
FD = {q QD /q FN 6= } (Un tat final de AFD doit contenir au moins
un tat final de lAFN).
S
D (q QD , a D ) = qN q N (qN , a)
D

S. MBARKI

Compilation

2014-2015

42 / 184

Analyse lexicale
Transformation dun AFN en AFD

Exemple
Transformer en AFD lautomate suivant :
D = { 0,1} ; qD0 = {q0 }

D ({q0 ,q2 }, 1) =N (q0 , 1)


S
={q0 }

S. MBARKI

N (q2 , 1)

Compilation

2014-2015

43 / 184

Analyse lexicale
Transformation dun AFN en AFD

Cas dun AFN avec - transitions :

Dfinition de -fermeture :
-fermeture : Q P(Q) tel que :
1

q -fermeture(q)

Si q1 (q , ) alors q1 -fermeture(q)

Si q1 -fermeture(q) et q2 -fermeture(q1 ) alors q2 -fermeture(q)

Remarque
Si Q Q : -fermeture(Q) =

q Q 0

-fermeture(q)

-fermeture dun etat q est lensemble de tous les tats accessibles


partir de q par des - transitions.

S. MBARKI

Compilation

2014-2015

44 / 184

Analyse lexicale
Transformation dun AFN en AFD

Exemple de -fermeture

-fermeture(q0 ) ={q0 ,q1 } ; -fermeture(q1 ) = {q1 }


-fermeture(q2 ) = {q2 } ; -fermeture(q3 )= {q3 ,q5 }
-fermeture(q4 ) = {q4 } ; -fermeture(q5 )= {q5 }
-fermeture({q0 ,q3 })= -fermeture(q0 ) -fermeture(q3 )={q0 ,q1 } {q3 ,q5 }
S

= {q0 ,q1 ,q3 ,q5 }

S. MBARKI

Compilation

2014-2015

45 / 184

Analyse lexicale
Transformation dun AFN en AFD

Algorithme de transformation
Soit AE = <QE , E , E ,qE0 , FE > un -AFN, il existe un AFD AD = <QD , D ,
D ,qD0 , FD > tel que L(AE )= L(AD ) avec :
QD -fermeture(P(QE ))

D = E
qD0 = -fermeture( qE0 )
T
FD = {qD QD tq : qD FE 6= }
Soit qD QD et a D alors :
S
D (qD , a)= -fermeture( qE qD E (qE , a))

S. MBARKI

Compilation

2014-2015

46 / 184

Analyse lexicale
Transformation dun AFN en AFD

Exemple de transformation

S. MBARKI

Compilation

2014-2015

47 / 184

Analyse lexicale
Transformation dun AFN en AFD

Exemple (Reprsentation graphique de lAFD obtenu)

S. MBARKI

Compilation

2014-2015

48 / 184

Analyse lexicale
Transformation dun AFN en AFD

Exercice :Transformer lautomate suivant en AFD.

S. MBARKI

Compilation

2014-2015

49 / 184

Analyse lexicale
Minimiser un AFD

But : Obtenir un automate ayant le minimum dtats possibles.


Dmarche : regrouper les tats quivalents de lautomate.
Deux tats p,q de A sont dits quivalents si et seulement si :
w tq (p,w) est un tat final (q,w) est un tat final
1
w = , si p F et q
/ F alors p et q sont distinguables (non quivalents)
2
w 6= , ((p,w)=r et (q,w)=s) et (r et s sont distinguables) alors p et q sont
distinguables

S. MBARKI

Compilation

2014-2015

50 / 184

Analyse lexicale
Algorithme de minimisation

Donne :
un automate dterministe
Rsultat :
Lautomate minimal reconnaissant le mme langage que lautomate initial
Principe gnral :
lalgorithme calcule les classes dquivalences.
Aprs examen de tous les symboles, un bilan est fait : il consiste
attribuer un numro (en chiffre romain) chaque classe dquivalence.

S. MBARKI

Compilation

2014-2015

51 / 184

Analyse lexicale
Algorithme de minimisation

Algorithme
Construire un tableau dont les colonnes sont les diffrents tats de
lautomate de dpart.
La premire ligne de bilan sobtient en sparant (par ) les tats finaux et
les autres en deux classes.
I
I

Numroter I ltat de la premire colonne ;


Numroter I ou II les tats des autres colonnes de manire sparer les
tats finaux des autres tats.

Les lignes suivantes du tableau sont construites une par une en


regardant, pour chaque tat, dans quel tat mne la transition par un
symbole de lalphabet et en notant la classe laquelle appartient cet tat
dans la ligne bilan prcdente.

S. MBARKI

Compilation

2014-2015

52 / 184

Analyse lexicale
Algorithme de minimisation

Un nouveau bilan est effectu qui prend en compte le bilan prcdent et


toutes les lignes que lon vient de calculer. Les classes sont numrotes
en chiffres romains partir de la gauche.
On rpte les deux oprations qui prcdent jusqu obtenir deux lignes
de bilan successives identiques.
Les tats de lautomate minimal sont les classes de la dernire ligne de
bilan.
Les transitions se trouvent dans le tableau entre lavant-dernire et la
dernire ligne de bilan.
Ltat de dpart est la classe contenant ltat de dpart de lautomate
dterministe.
Les tats finaux sont les classes contenant des tats finaux de lautomate
initial.
S. MBARKI

Compilation

2014-2015

53 / 184

Analyse lexicale
Algorithme de minimisation

Exemple

On sarrte car on a deux fois le mme bilan.


S. MBARKI

Compilation

2014-2015

54 / 184

Analyse lexicale
Algorithme de minimisation

Exemple

S. MBARKI

Compilation

2014-2015

55 / 184

Analyse lexicale
Algorithme de minimisation

Exercice : Minimiser un AFD

S. MBARKI

Compilation

2014-2015

56 / 184

Analyse lexicale
Equivalence des automates finis aux expressions rgulires

Thorme
Un langage est rgulier si et seulement sil est gnr par un automate fini.

S. MBARKI

Compilation

2014-2015

57 / 184

Analyse lexicale
Construction dun AFN partir dune ER

Il sagit de la construction de Thompson base sur la rcursivit des ER.


On suppose que A et B sont les AFN des ER R1 et R2.

S. MBARKI

Compilation

2014-2015

58 / 184

Analyse lexicale
Equivalence des automates finis aux expressions rgulires

Daprs ce qui prcde, toute expression rgulire est reconnue par un


automate.

Exemple
Soit lexpression rgulire (a + b) ab, lautomate associ est :

S. MBARKI

Compilation

2014-2015

59 / 184

Analyse lexicale
Equivalence des automates finis aux expressions rgulires

Lautomate ainsi obtenu est non dterministe et il possde beaucoup de


-transitions.
En dteminisant, et en minimisant on obtient :

S. MBARKI

Compilation

2014-2015

60 / 184

Analyse lexicale
Dtermination du langage accept par un automate fini

Mthode de Kleene :
Soit A= <, Q , q0 , F , > un automate fini non dterministe ne contenant pas
d-transitions.
Pour tout tat q , notons Xq lensemble des mots menant de ltat q un
tat final.
Chaque langage Xq satisfait lquation linaire
Xq = ou` q 0 =(q ,a) aXq 0 [+ si q F ]
Pour obtenir une expression rgulire du langage, il suffit de rsoudre le
systme des quations linaires ci-dessus par limination de variables
Toutes les quations quon manipule peuvent tre mises sous la forme
` K et L sont des expressions linaires des variables Xq 0 ,
Xq = KXq + L ou
q 6= q ;

S. MBARKI

Compilation

2014-2015

61 / 184

Analyse lexicale
Dtermination du langage accept par un automate fini

Lemme dArden
Soient X, K et L des langages sur un alphabet . On suppose que
/ K. Alors
S

X=KX L si et seulement si X=K L


K peut tre le langage vide (si le membre droit de lquation ne contient
pas la variable Xq ), mais il ne contient pas le mot vide (car lautomate ne
possde pas d- transitions)
Daprs le lemme dArden, lquation est quivaut Xq =K*L.
En remplaant Xq par K*L dans les autres quations, on obtient encore
un systme dquations linaires, quivalent au systme dorigine.

S. MBARKI

Compilation

2014-2015

62 / 184

Analyse lexicale
Dtermination du langage accept par un automate fini

Exemple
Soit L le langage reconnu par lautomate suivant :

Le
systme dquations linaires associ cet automate est :
X1 = bX1 + (a + b)X2 (1)
X2 = aX3 +
(2)

X3 = (a + b)X2 +
(3)
S. MBARKI

Compilation

2014-2015

63 / 184

Analyse lexicale
Dtermination du langage accept par un automate fini

On peut liminer X3 dans lquation (2), en remplaant X3 par (a+b)X2 + :


on obtient
X2 = a((a + b)X2 + ) + = a(a + b)X2 + (a + )
Ce qui est quivaut (daprs le lemme dArden) :
X2 = (a(a + b)) (a + )
On peut maintenant liminer X2 dans lquation (3) :
X3 = (a + b)(a(a + b)) (a + ) +
Ainsi que dans lquation (1) :
X1 = bX1 + (a + b)(a(a + b)) (a + )
Do daprs le lemme dArden X1 = b (a + b)(a(a + b)) (a + )
Le langage reconnu par lautomate est alors :
X1 = b (a + b)(a(a + b)) (a + )

S. MBARKI

Compilation

2014-2015

64 / 184

Analyse lexicale
Loutil Flex

A quoi sert Flex ?


I
I

Flex (Fast Lex) est un gnrateur automatique danalyseurs lexicaux.


Le rsultat fournit par Flex est un fichier C qui contient le code de
lanalyseur lexical.

Forme gnrale dune application Flex :


I
I

On cre un fichier avec lextension .l.


Le fichier source Flex contient les diverses spcifications en terme
dexpressions rgulires et les actions correspondantes en code C.

On compile le fichier source par la commande "flex".


I
I

Cela gnre un fichier qui contient le code C de lanalyseur lexical.


Ce fichier porte le nom "lex.yy.c".

S. MBARKI

Compilation

2014-2015

65 / 184

Analyse lexicale
Loutil Flex

S. MBARKI

Compilation

2014-2015

66 / 184

Analyse lexicale
Format dun fichier Flex

La structure gnrale dun fichier Flex est la suivante :

Seul le premier "%%" est obligatoire

S. MBARKI

Compilation

2014-2015

67 / 184

Analyse lexicale
Section des dfinitions

La section dfinition se compose de :


I

Un bloc littral :

Dfinitions et dclarations globales.


Commence par "%{" et se termine par "%}".
Les symboles "%{" et "%}" doivent tre placs en dbut de ligne.
Le bloc littral contient des dclarations et des dfinitions en C qui seront
globales au programme produit par Flex.
Le contenu du bloc littral est copi tel quel dans le fichier lex.yy.c.
I

Des dfinitions :

On peut nommer des expressions rgulires en utilisant des dfinitions.


I

Des conditions de dpart :

Permettent de dfinir plusieurs tats de Flex.

S. MBARKI

Compilation

2014-2015

68 / 184

Analyse lexicale
Section rgles et sous-programmes utilisateurs

Section des rgles :


I
I

Une rgle se compose dune partie gauche et une partie droite.


La partie gauche dune rgle est soit :

Une spcification des expressions rgulires reconnues.


Une chane de lettres ou de chiffres (avec ou sans guillemets).
Un identificateur dexpressions mis entre accolades.
I

La partie droite dune rgle contient des actions excutes lorsque des
units lexicales sont reconnues.

Section des sous-programmes utilisateurs :


I

Permet de dfinir des fonctions et des procdures C dans les actions des
rgles.
Permet galement de dfinir le programme principal (si ncessaire).

S. MBARKI

Compilation

2014-2015

69 / 184

Analyse lexicale
Dfinition des expressions rgulires dans Flex

Les mta-symboles :
I

Les symboles suivants ont une signification prcise pour Flex :


" \ [ ] -? . * + | ( ) $ / { } % < >

Pour introduire un de ces symboles dans un motif comme caractre du


texte, il faut soit le prcder par un caractre \, soit lencadrer de ".
On utilise la notation du C : "\n" pour le retour la ligne et "\t" pour le
caractre tabulation.

Dfinitions des mta-symboles :


I [xyz] : correspond un seul caractre parmi ceux indiqus.
Exemple : [aeiouy] spcifier une voyelle.
I

? : indique que le caractre prcdent est optionnel.


Exemple : a ?[bc] spcifier ab, ac, b ou c.

* : indique une rptition 0, 1, ..., n fois du caractre prcdent.


+ : indique une rptition 1, 2 ..., n fois du caractre prcdent.
| : indique une alternative
Exemple : ac|b signifie ac ou bien b.

I
I

S. MBARKI

Compilation

2014-2015

70 / 184

Analyse lexicale
Dfinition des expressions rgulires dans Flex

Dfinitions des mta-symboles :


I

( ) : indiquent la porte doprateurs comme +, * et ?.

x/y : correspond x sil est suivi de y (y ne fait pas partie du motif).

Exemple : (ac|b)+.
Exemple : [a/b] signifie que a est considr sil est suivi immdiatement par
un b.
I

{macro} : correspond lexpansion de la macro dsigne entre les


accolades { }.
x{m,n} : Correspond m jusqu n occurrences de x.

Exemple : (a|b){3,7} spcifie tous les mots sur {a, b} de longueur comprise
entre 3 et 7.
I

. : Nimporte quel caractre.

Exemple : .{3} nimporte quel mot de longueur 3.


I

- : correspond un intervalle de caractres.

Exemple : [a-z] spcifie les lettres minuscules.


S. MBARKI

Compilation

2014-2015

71 / 184

Analyse lexicale
Mta-symboles de Flex

Les oprateurs :
I

: plac en dbut du motif, indique que le motif doit se trouver en dbut de


ligne.

Exemple : [a] signifie que la ligne doit commencer par a.


I

$ : plac en fin du motif, indique que le motif doit se trouver en fin de ligne.
Exemple : [a$] signifie que la ligne doit se terminer par a.

S. MBARKI

Compilation

2014-2015

72 / 184

Analyse lexicale
Les actions

Laction par dfaut de tout programme Flex est de recopier tous les
caractres qui ne correspondent aucun motif dans le fichier de
description.
Dautres actions prdfinies peuvent tre utiliss dans les actions :
I
I
I

; : sert ne pas recopier les caractres non reconnus.


ECHO ; : sert recopier les caractres reconnus.
| : sert reporter laction sur la rgle suivante. Elle signifie la mme chose
que laction pour la rgle suivante.

exemple
Un programme Flex qui limine tous les caractres blancs (sauf \n) et
imprime les chiffres et les lettres majuscules.
%%
[0-9] | [A-Z] |
\n ECHO ; . ;
S. MBARKI

Compilation

2014-2015

73 / 184

Analyse lexicale
Variables globales et sous-programmes

Pour le traitement des actions un peu complexes, Flex fournit plusieurs


variables globales.
I

Parmi ces variables, on trouve :

char * yytext : conserve le texte de lunit lexicale courante.


int yyleng : conserve la longueur de lunit lexicale courante.
FILE * yyin : est le fichier partir duquel Flex lit par dfaut.
FILE * yyout : est le fichier dans lequel les actions ECHO sont effectues par
dfaut.

Flex fournit plusieurs fonctions (sous-programmes) :


I

yymore() : indique au scanner que la prochaine fois quil reconnat une


rgle, lunit lexicale correspondante devra tre concatne la valeur
actuelle de yytext au lieu de le remplacer.
yylex() : cette fonction est utilise par lanalyseur syntaxique pour appeler
le module de lanalyse lexicale.

S. MBARKI

Compilation

2014-2015

74 / 184

Analyse lexicale
Ambiguits des actions

Deux rgles sont ambigus si elles peuvent tre dclenches avec une
mme entre.
Flex utilise une rsolution dambigut qui est la suivante :
I
I

La rgle qui correspond la plus longue entre est applique en priorit.


Si deux rgles ambigus correspondent la mme entre, la premire
dfinie est applique en priorit.

exemple
%%
algo printf("mot cl") ;
[a-z]+ printf("identificateur") ;
La chane algorithme est reconnue comme identificateur.

S. MBARKI

Compilation

2014-2015

75 / 184

Analyse lexicale
Exercices

Ecrire un programme qui analyse un texte et raffiche les lignes qui


commencent par S ou que se terminent par S.

Ecrire un programme qui raffiche les lignes dun texte prcds de leurs
numros de lignes

Ecrire un programme qui analyse un texte et raffiche les lignes qui


commencent par S et se terminent par S contenant dautre caractres
autre que S

Ecrire un programme qui analyse un texte et remplace les minuscules par


les majuscules sauf dans les commentaires C

S. MBARKI

Compilation

2014-2015

76 / 184

Sommaire
1

Introduction la compilation

Analyse lexicale

Analyse syntaxique
Introduction
Dfinition de grammaire formelle
Vocabulaire et notation
Analyse descendante
Analyse ascendante
Loutil Bison

Analyse smantique

Sries dexercies

S. MBARKI

Compilation

2014-2015

77 / 184

Analyse syntaxique
Exemple de langage non rgulier

Exemple
Dfinir une ER qui dcrit le langage suivant :
L={an bn /n > 0}
Propositions :
(ab) => contient
aa bb <=> a+ b+ => le nombre de a nest pas ncesserement gale au
nombre de b.
(ab)+ => contient abab
a b => contient
=> Le langage L nest pas rgulier. Il ny a pas dER qui dcrit le langage L.

ST : a,b
SN : S
Axiome : S
Rgle de production :
S -> ab
;
S->aSb
Vrification pour aaaabbbb appartient au langage.
S. MBARKI

Compilation

2014-2015

78 / 184

Analyse syntaxique
Phase danalyse dun compilateur

Phase danalyse dun compilateur

S. MBARKI

Compilation

2014-2015

79 / 184

Analyse syntaxique
Exemple de grammaire

Exemple
Soit la grammaire suivante :
ST : a,b,c,d,+,-,*,/,(,),
SN : E,T,F
Axiome : E
Rgles de production :
E T |T + E |T E
T F |F T |F /T
F a|b|c |d |(E )|F F

expression
terme
facteur

Vrifier si le mot a+d*ca appartient au langage ?

S. MBARKI

Compilation

2014-2015

80 / 184

Analyse syntaxique
Exemple de grammaire

=> R1 : E T
R4 : T F
R7 : F a
R10 : F d

S. MBARKI

R2 : E T + E
R5 : T F T
R8 : F b
R11 : F (E )

Compilation

R3 : E T E
R6 : T F /T
R9 : F c
R12 : F F F

2014-2015

81 / 184

Analyse syntaxique
Dfinition de grammaire formelle

Dfinition
Une grammaire G est dfinie par : G=(Vt , Vn , P , S) avec :
Vt : Ensemble des symboles terminaux (Units lexicales)
Vn : Ensemble des symboles non terminaux
P : Ensemble des rgles de production
S : Axiome
Remarque :
T
Vn Vt =
S Vn

S. MBARKI

Compilation

2014-2015

82 / 184

Analyse syntaxique
Vocabulaire et notation

est la chaine vide.


Les lements de Vt sont reprsents par a,b,c,...
Les lements de Vn sont reprsents par A,B,C,...
S
Les chaines sont des lements appartenant (Vt Vn ) et sont , , , ...

est la concatnation des deux chaines et


0 =
2 =
Une chaine compose uniquement de symboles Vt est dite terminale.
Une chaine qui contient des lements appartenant Vn est dite non
terminale.
Une chaine est appele galement une expression gramaticale.

S. MBARKI

Compilation

2014-2015

83 / 184

Analyse syntaxique
Vocabulaire et notation

Exemple de grammaire
Soit la grammaire G=(Vt , Vn , P , S) avec :
Vt ={a,b}
Vn ={A,B}
P={Aa , AaB , Bb , BbB}

Exemple dexpression gramaticale terminale

= bbba
Exemple dexpression gramaticale non terminale
= aBBb

= aBBbbbba
= bbbaaBBb
2 = aBBbaBBb
S. MBARKI

Compilation

2014-2015

84 / 184

Analyse syntaxique
Rgle gramaticale

Rgle gramaticale <=> Rgle de production.


S
Notation : o (Vt Vn ) : est la partie gauche de la rgle ;
S
(Vt Vn ) : est la partie droite de la rgle.
Lecture : est drivable en

Exemple
Dfinir la rgle gramaticale dont la partie gauche est aAb.
= aAb
S
Trouver (Vt Vn ) tel que :

aAb aaBbAb
Donc : = aaBbAb

S. MBARKI

Compilation

2014-2015

85 / 184

Analyse syntaxique
Drivation-Rduction

Drivation-Rduction :
S
Soit (Vt Vn ) contenant plusieurs occurences de .

= ..............
Drivation immdiate :
Consiste fabriquer la chaine partir de , en utilisant , en
remplaant une occurence de par dans

Rduction immdiate :
0

Est lopration rciproque. Elle consiste fabriquer la chaine partir de en


0
utilisant la rgle , en remplaant une occurence de par dans .

Drivation multiple :
0

Consiste fabriquer la chaine partir de en utilisant , en


remplaant successivement plusieurs occurences de par dans .
S. MBARKI

Compilation

2014-2015

86 / 184

Analyse syntaxique
Drivation-Rduction

Rduction multiple :
0

Est lopration rciproque. Elle consiste fabriquer la chaine partir , en


utilisant , en remplaant successivement plusieurs occurences de par

Exemple
Soit la rgle A bAb , et = aAa
1

abAba est une drivation immdiate de aAa.

abbbbAbbbba est une drivation multiple de aAa


aAa abAba abbAbba abbbAbbba abbbbAbbbba

S. MBARKI

Compilation

2014-2015

87 / 184

Analyse syntaxique
Langage engendr par une expression

Langage engendr par une expression :


S
Soit G=(Vt , Vn , P , S) une grammaire, et soit (Vn Vt ) une expression. On
note L() le langage engendr par . L() est lensemble de toutes les
chaines terminales qui sont des drivations de .
L() = { Vt / }
L(G) = est le langage engendr par la grammaire G.
L(G) est lensemble de toutes les chanes terminales qui sont des
drivations de S.
L(G) = L(S) = { Vt /S }

S. MBARKI

Compilation

2014-2015

88 / 184

Analyse syntaxique
Arbre de drivation

Arbre de drivation :
Soit G=(Vt , Vn , P , S).
Soit Vt (chaine terminale). On appelle larbre drivation de une
representation graphique de S tel que :
S est le sommet de larbre.
Chaque noeud de larbre est un element de (Vt

Vn ) .

Les feuilles de larbre forment en les parcourant de la gauche vers la


doite et du haut vers le bas.
Le passage dun noeud de niveau i vers un noeud de niveau j se fait par
application dune rgle grammaticale.

S. MBARKI

Compilation

2014-2015

89 / 184

Analyse syntaxique
e
Grammaire ambigu

e :
Grammaire ambigu
Dfinition

e si et seulement sil existe une chane qui admet


Une grammaire est ambigu
plusieurs arbres de drivation.
Exemple
Expressions
arithmtique

Exp (Exp)

Exp Exp + Exp

Exp Exp Exp


Exp Exp Exp

Exp num

Exp idf

S. MBARKI

Compilation

2014-2015

90 / 184

Analyse syntaxique
e
Grammaire ambigu

Chane idf + num * idf

Arbres de drivation

S. MBARKI

Compilation

2014-2015

91 / 184

Analyse syntaxique
e
Grammaire ambigu

limination dambiguit
E
1

Choix
des proirots : Loprateur * est prioritaire sur + et - .

Terme
Exp
Terme
Terme Terme|Facteur

Facteur idf |num|(Exp)

Choix dassociativits : On dcide que les oprateurs sont associatifs


gauche.

Exp + Terme|Exp Terme|Terme


Exp
Terme
Terme Facteur |Facteur

Facteur idf |num|(Exp)

S. MBARKI

Compilation

2014-2015

92 / 184

Analyse syntaxique
Mthodes danalyse

Lanalyseur syntaxique reoit une suite dunits lexicales et vrifie que


cette suite est engendre par la grammaire du langage.

Il existe deux approches pour construire cet arbre de drivation :


I
I

Analyse descendante
Analyse ascendante

S. MBARKI

Compilation

2014-2015

93 / 184

Analyse syntaxique
Analyse descendante

Principe
Construire un arbre de drivation de la racine (laxiome de dpart) vers les
feuilles (les units lexicales).

Exemple


S aSbT | cT | d
T aT | bS | c
On prend le mot w=accbbadbc
On commence par un arbre contenant juste le sommet S
On traite la premire lettre a du mot w.
Avec S aSbT

S. MBARKI

Compilation

2014-2015

94 / 184

Analyse syntaxique
Analyse descendante

Exemple (suite)
Ensuite S cT

On finit par larbre ci-dessous

=> le mot w appartient au langage.


S. MBARKI

Compilation

2014-2015

95 / 184

Analyse syntaxique
Analyse descendante

Si un non terminal a plusieurs rgles commenant par le mme terminal


???

Exemple


S aAb
A cd | c
on prend le mot W=acb
Avec S aAb

Pour la lettre c, on choisit A cd ou A c


Il faut :
I
I

Soit lire aussi la lettre suivante (b).


Soit vrifier le rsultat pour chaque rgle.

S. MBARKI

Compilation

2014-2015

96 / 184

Analyse syntaxique
Table danalyse LL(1)

Solution
I

Avoir une table danalyse qui indique pour chaque symbole non-terminal
A et terminal a la rgle de production appliquer.
Pour construire une table danalyse, on a besoin des ensembles
PREMIER et SUIVANT.

S. MBARKI

Compilation

2014-2015

97 / 184

Analyse syntaxique
Ensemble Premier

On dfinit lensemble Premier() comme tant lensemble de tous les


terminaux qui peuvent commencer une chane qui se drive de
est une chaine compose de symboles terminaux et non terminaux
Formellement : Premier() ={ a | *a }
Avec
a reprsente tous les symboles terminaux

est une chane quelconque compose de symboles terminaux et non


terminaux

S. MBARKI

Compilation

2014-2015

98 / 184

Analyse syntaxique
Ensemble Premier

Exemple

SBa

BcP|bP|P|
PdS
S*a donc aPREMIER(S)
S*cPa donc cPREMIER(S)
S*bPa donc bPREMIER(S)
S*dSa donc dPREMIER(S)

Pas de drivation S*
Donc PREMIER(S)={a,b,c,d}

S. MBARKI

Compilation

2014-2015

99 / 184

Analyse syntaxique
Calcul du Premier

Algorithme
1

Si X est un non-terminal et XY1 Y2 ...Yn est une production de la


grammaire (avec Yi symbole terminal ou non-terminal) alors
I ajouter les lments de PREMIER(Y ) sauf dans PREMIER(X)
1
I sil existe j (j {2, ..., n}) tel que pour tout i=1, ..., j-1 on a ( Premier(Y ),
i
alors ajouter les lments de PREMIER(Yj ) sauf dans PREMIER(X).
I si pour tout i=1, ..., n ; PREMIER(Y ), alors ajouter dans PREMIER(X)
i

Si X est un non terminal et X est une production, ajouter dans


PREMIER(X)

Si X est un terminal, PREMIER(X) = {X}.

Recommencer jusqu ce quon najoute rien de nouveau dans les


ensembles PREMIER.

S. MBARKI

Compilation

2014-2015

100 / 184

Analyse syntaxique
Calcul du Premier

Exemple 1

TE

E +TE|
T

FT

T *FT|

F
(E)|nb
PREMIER(E) = PREMIER(T) = {(,nb}
PREMIER(E) = {+,}
PREMIER(T) = PREMIER(F) = {(,nb}
PREMIER(T) = {*,}
PREMIER(F) = {(,nb}

S. MBARKI

Compilation

2014-2015

101 / 184

Analyse syntaxique
Calcul du Premier

Exemple 2

ABC
S

aA|
A

B
bB|cB|

C dc|da|dA
PREMIER(S) = {a,b,c,d}
PREMIER(A) = {a, }
PREMIER(B) = PREMIER(F) = {b,c,}
PREMIER(C) = {d}

S. MBARKI

Compilation

2014-2015

102 / 184

Analyse syntaxique
Ensemble Suivant

Pour tout non terminal A, Suivant(A) comme tant lensemble des


terminaux a qui peuvent apparatre immdiatement droite de A dans une
drivation :
S*Aa

Exemple

SSc|Ba

BPa|bPb|P|
PdS
a, b, c SUIVANT(S) car il y a les drivations S*Sc, S*dSa et
S*bdSba..

S. MBARKI

Compilation

2014-2015

103 / 184

Analyse syntaxique
Calcul de Suivant

Algorithme
1

Ajouter un marqueur de fin de chane (symbole $ par exemple)


SUIVANT(S) (o S est le symbole de dpart de la grammaire)

Sil y a une production A B o B est un non terminal, alors ajouter


le contenu de PREMIER() SUIVANT(B), sauf

Sil y a une production A B, alors ajouter SUIVANT(A) SUIVANT(B)

Sil y a une production A B avec PREMIER(), alors ajouter


SUIVANT(A) SUIVANT(B)

Recommencer partir de ltape 3 jusqu ce quon najoute rien de


nouveau dans les ensembles SUIVANT.

S. MBARKI

Compilation

2014-2015

104 / 184

Analyse syntaxique
Calcul de Suivant

Exemple 1

ETE

E+TE|
TFT

T*FT|

F (E)|nb
SUIVANT(E) = {$,)}
SUIVANT(E) = {$,)}
SUIVANT(T) = {+,),$}
SUIVANT(T) = {+,),$}
SUIVANT(F) = {+,),*,$}

S. MBARKI

Compilation

2014-2015

105 / 184

Analyse syntaxique
Calcul de Suivant

Exemple 2

SaSb|cd|SAe
AaAdB|

B bb
PREMIER(S) ={a,c}
PREMIER(A) ={ a,}
PREMIER(B) = {b}

S. MBARKI

SUIVANT(S) ={$,b,a,e}
SUIVANT(A) ={ e,d}
SUIVANT(B) = {e,d}

Compilation

2014-2015

106 / 184

Analyse syntaxique
Construction de la table danalyse

Une table danalyse est un tableau M deux dimensions qui indique pour
chaque symbole non terminal A et chaque symbole terminal a ou symbole
$ la rgle de production appliquer.

Algorithme
Pour chaque production A faire
1

pour tout aPREMIER() (et a6=), rajouter la production A dans la case


M[A,a]

si PREMIER(), alors pour chaque bSUIVANT(A) ajouter A dans M[A,b]

Chaque case M[A,a] vide est une erreur de syntaxe

S. MBARKI

Compilation

2014-2015

107 / 184

Analyse syntaxique
Construction de la table danalyse

Exemple
Avec
la grammaire de lexemple1 :
ETE

E+TE|
TFT

T*FT|


F (E)|nb
La table danalyse produite est :
nb
+
*
E
E
T
T
F

E TE

E TE
E+TE

T FT

T FT
T

T*FT

Fnb
S. MBARKI

F(E)
Compilation

2014-2015

108 / 184

Analyse syntaxique
Analyse descendante dun mot

On utilise la table danalyse pour dterminer si un mot m donn est tel que
S*m.
On utilise une pile et lalgorithme suivant :

Algorithme
Donnes : mot m, table danalyse M.
Initialisation de la pile :
[$S ]
On ajoute un pointeur ps sur la 1re lettre de m
repeter
Soit X le symbole en sommet de pile
Soit a la lettre pointe par ps

S. MBARKI

Compilation

2014-2015

109 / 184

Analyse syntaxique
Analyse descendante dun mot

Si X est un non terminal alors


Si M[X,a]=X Y1 ... Yn alors
enlever X de la pile
mettre Yn puis Yn 1 puis ...puis Y1 dans la pile
mettre en sortie la production X Y1 ... Yn
sinon
ERREUR
finsi
Sinon
Si X=$ alors
Si a=$ alors ACCEPTER
Sinon
ERREUR
Finsi

S. MBARKI

Compilation

2014-2015

110 / 184

Analyse syntaxique
Analyse descendante dun mot

Sinon
Si X=a alors
enlever X de la pile
avancer ps
Sinon
ERREUR
finsi
finsi
finsi
jusqu ERREUR ou ACCEPTER

S. MBARKI

Compilation

2014-2015

111 / 184

Analyse syntaxique
Exemple danalyse

Exemple
Considrons la grammaire E,E,T,T,F et le mot m=3+4*5

S. MBARKI

Pile

Entre

Sortie

$E
$ET
$ETF
$ET3
$ET
$E
$ET+
$ET
$ETF
$ET4

3+4*5$
3+4*5$
3+4*5$
3+4*5$
+4*5$
+4*5$
+4*5$
4*5$
4*5$
4*5$

E TE 0
E FT 0
F nb

Compilation

T0
E 0 +TE 0
T FT 0
F nb

2014-2015

112 / 184

Analyse syntaxique
Exemple danalyse

Exemple (suite)
Pile
$ET
$ETF*
$ETF
$ET5
$ET
$E
$

S. MBARKI

Entre
*5$
*5$
5$
5$
$
$
$

Sortie
T 0 FT 0
F nb
T0
E0
Analyse russie

Compilation

2014-2015

113 / 184

Analyse syntaxique
Grammaire LL(1)

Lalgorithme prcdent ne peut pas tre appliqu toutes les grammaires.


Avec une table danalyse comportant des entres multiples (plusieurs
productions pour une mme case M[A,a]) => Impossible de faire une
analyse descendante.

Dfinition
On appelle grammaire LL(1) une grammaire pour laquelle la table danalyse dcrite prcdemment na aucune case dfinie de faon multiple.
Le terme "LL(1)" a la signification suivante :
I

le premier L indique quon parcourt lentre de gauche droite (Left to right


scanning).
le second L indique quon utilise les drivations gauche (Leftmost
derivation).
le 1 indique quun seul symbole de prvision est ncessaire chaque tape
ncessitant la prise dune dcision daction danalyse.

S. MBARKI

Compilation

2014-2015

114 / 184

Analyse syntaxique
Grammaire LL(1)

Exemple


S aAb
A cd|c
Nous avons PREMIER(S)={a}, PREMIER(A)={c }, SUIVANT(S)={$} et
SUIVANT(A)={b}
a
c
b d $
La table danalyse associe :

S aAb

A cd
Ac

A
ce nest pas une grammaire LL(1).

S. MBARKI

Compilation

2014-2015

115 / 184

Analyse syntaxique
Rcursivit gauche

Une grammaire est immdiatement rcursive gauche si elle contient


un non terminal A avec la production A A o est une chane
quelconque.

Exemple

S ScA | B
A Aa |

B Bb | d|e
=> beaucoup de rcursivits gauche immdiates
Pour liminer la rcursivit gauche immdiate il faut remplacer toute rgle de
la forme A A | par les deux rgles : A A et A A |

S. MBARKI

Compilation

2014-2015

116 / 184

Analyse syntaxique
Rcursivit gauche

Exemple

SBS

S cAS|

AA
AaA|

BdB|eB


B bB|
Cette grammaire reconnat le mme langage que la premire.

S. MBARKI

Compilation

2014-2015

117 / 184

Analyse syntaxique
Rcursivit gauche

Une grammaire est rcursive gauche si elle contient un non terminal A


tel quil existe une drivation A*A o est une chane quelconque.

Exemple


S Aa | b
A Ac | Sd |
S est rcursif gauche car SAaSda

S. MBARKI

Compilation

2014-2015

118 / 184

Analyse syntaxique
Rcursivit gauche

Elimination de la rcursivit gauche


Ordonner les non terminaux A1 ,A2 ,...,An
Pour i=1 n faire
pour j=1 i-1 faire
remplacer chaque production de la forme Ai Aj o Aj 1 |...|p par
Ai 1 |...|p
fin pour
liminer les rcursivits gauche immdiates des productions Ai
fin pour

S. MBARKI

Compilation

2014-2015

119 / 184

Analyse syntaxique
Rcursivit gauche

Exemple 1
Dans lexemple prcdent :
Ordonner S,A
i=1 pas de rcursivit immdiate dans SAa | b
i=2 et j=1 on obtient AAc | Aad | bd |
on limine la recursivit immdiate :
AbdA | A
AcA | adA |
on
a obtenu la grammaire
S Aa | b
A bdA | A

A cA | adA |

S. MBARKI

Compilation

2014-2015

120 / 184

Analyse syntaxique
Rcursivit gauche

Exemple 2
Avec
 la grammaire suivante :
SSa| TSc|d
TTbT|
On
obtient la grammaire :
STScS|dS


S aS|
TT


T bTT|
Or on a STScS TScS ScS
=> une rcursivit gauche
lalgorithme ne marche pas toujours lorsque la grammaire possde une
rgle A

S. MBARKI

Compilation

2014-2015

121 / 184

Analyse syntaxique
Factorisation gauche

Sil nest pas vident de choisir quelle production prendre pour


dvelopper un non terminal A.
=> rcrire les productions de A diffremment jusqu atteindre le bon
choix.

Exemple

SbacdAbd|bacdBcca

AaD
BcE

C...


E ...

SbacdAbd ou SbacdBcca,
=> il faut lire la 5ime lettre du mot (a ou c).
Impossible de savoir ds le dpart quelle production prendre.
S. MBARKI

Compilation

2014-2015

122 / 184

Analyse syntaxique
Factorisation gauche

Algorithme
Factorisation gauche :
Pour chaque non terminal A
trouver le plus long prfixe commun deux de ses alternatives ou plus
Si 6= , remplacer A1 |..|n |1 |..|p (o les i ne commencent pas
par ) par les deux rgles
AA|1 |..|p et A1 |..|n
fin pour
Recommencer jusqu ne plus en trouver.

S. MBARKI

Compilation

2014-2015

123 / 184

Analyse syntaxique
Factorisation gauche

Exemple

SaEbS| aEbSeB|a

EbcB|bca
Bba
Factorise
gauche, cette grammaire devient :

S
aEbSS|a

SeB|
EbcE

EB|a


B ba

S. MBARKI

Compilation

2014-2015

124 / 184

Analyse syntaxique
Grammaire non LL(1)

Si notre grammaire est LL(1), lanalyse syntaxique peut se faire par


lanalyse descendante.
tant donne une grammaire
I
I
I
I

la rendre non ambigu.


liminer la rcursivit gauche si ncessaire.
la factoriser gauche si ncessaire.
construire la table danalyse

Sil ne sagit pas dune grammaire LL(1), il faut appliquer une autre
mthode pour lanalyse syntaxique.

S. MBARKI

Compilation

2014-2015

125 / 184

Analyse syntaxique
Grammaire non LL(1)

Exemple
On considre la grammaire :
EE+E|E*E|(E)
Elle est ambigu.
1

Lever lambigut (on considre les priorits classiques des oprateurs) :


EE+T|T
TT*F|T
F(E)
Supprimer la rcursivit gauche :
ETE
E+TE|
TFT
T*FT|
F(E)|nb

=> Inutile de factoriser gauche car elle est de type LL(1)


La grammaire suivante nest pas de type LL(1)
elle nest pas ambigu, nest pas rcursive gauche et elle est factorise
gauche :
SaRb|
RcSa|d
S. MBARKI

Compilation

2014-2015

126 / 184

Analyse syntaxique
Analyse ascendante

Principe
construire un arbre de drivation du bas (units lexicales) vers le haut
(axiome).
Deux oprations sont possibles :
I
I

dcalage (shift) : dcaler dune lettre le pointeur sur le mot en entre


rduction (reduce) : rduire une chane par un non terminal en utilisant
une des rgles de production

S. MBARKI

Compilation

2014-2015

127 / 184

Analyse syntaxique
Analyse ascendante

Exemple
SaSbS|c avec le mot u=aaacbaacbcbcbcbacbc
aaacbaacbcbcbcbacbc
aaacbaacbcbcbcbacbc
aaacbaacbcbcbcbacbc
aaacbaacbcbcbcbacbc
aaaSbaacbcbcbcbacbc
aaaSbaacbcbcbcbacbc
................
aaaSbaacbcbcbcbacbc
aaaSbaaSbcbcbcbacbc
aaaSbaaSbcbcbcbacbc
aaaSbaaSbcbcbcbacbc
aaaSbaaSbSbcbcbacbc

S. MBARKI

on ne peut rien rduire, donc on dcale


on ne peut rien rduire, donc on dcale
on ne peut rien rduire, donc on dcale
On peut rduire par Sc
on ne peut rien rduire, donc on dcale
on ne peut rien rduire, donc on dcale
................
On peut rduire par Sc
on ne peut rien rduire, donc on dcale
on ne peut rien rduire, donc on dcale
On peut rduire par Sc
On peut rduire par SaSbS

Compilation

2014-2015

128 / 184

Analyse syntaxique
Analyse ascendante

Exemple (Suite)
aaaSbaSbcbcbacbc
aaaSbaSbcbcbacbc
aaaSbaSbcbcbacbc
aaaSbaSbSbcbacbc
aaaSbSbcbacbc
aaSbcbacbc
aaSbcbacbc
aaSbcbacbc
aaSbSbacbc
aSbacbc
aSbacbc
aSbacbc
aSbacbc
S. MBARKI

on ne peut rien rduire, donc on dcale


on ne peut rien rduire, donc on dcale
On peut rduire par Sc
On peut rduire par SaSbS
On peut rduire par SaSbS
on ne peut rien rduire, donc on dcale
on ne peut rien rduire, donc on dcale
On peut rduire par Sc
On peut rduire par SaSbS
on ne peut rien rduire, donc on dcale
on ne peut rien rduire, donc on dcale
on ne peut rien rduire, donc on dcale
On peut rduire par Sc
Compilation

2014-2015

129 / 184

Analyse syntaxique
Analyse ascendante

Exemple (Suite)
aSbaSbc on ne peut rien rduire, donc on dcale
aSbaSbc on ne peut rien rduire, donc on dcale
aSbaSbc On peut rduire par Sc
aSbaSbS On peut rduire par SaSbS
aSbS
On peut rduire par SaSbS
S
Cest termin ! ! !
Le mot aaacbaacbcbcbcbacbc est bien dans le langage
un dcalage ou une rduction ? ?
=>Il faut construire une table danalyse pour dcider quelle opration
effectuer lorsque le pointeur est sur une lettre donne.

S. MBARKI

Compilation

2014-2015

130 / 184

Analyse syntaxique
Table danalyse LR

Solution
Si Etat=i et Symbole courant = a alors :
I
I

I
I

dj : dcaler (empiler a et passer ltat j)


rp : rduire par la rgle p (remplacer la chaine en sommet de pile par la
partie gauche de la rgle et passer ltat qui dpend du non terminal)
ACC : On accepte le mot
: Erreur de syntaxe

Pour construire la table danalyse, on utilise :


I
I

Ensembles SUIVANT
Fermeture de 0-items (items)

Exemples ditems :
I EE+T
I F(E)

S. MBARKI

Compilation

2014-2015

131 / 184

Analyse syntaxique
Fermeture dun ensemble ditems

Calcul de Fermeture(I) :
1
2

Ajouter les items de I dans Fermeture(I)


Si I contient AB alors pour chaque Bi ajouter : Bi dans
Fermeture(I)
Recommencer 2) tant que Fermeture(I) nest pas stable

Exemple
On considre la grammaire suivante :
(1)E E+T
(3)T T*F

(2)E T
(4)T F
Fermeture({ TT*F , EE+T} ) =
{
TT*F, EE+T,
F(E), Fnb
}
S. MBARKI

Compilation

(5)F (E)
(6)F nb

2014-2015

132 / 184

Analyse syntaxique
Transition dun ensemble ditems par un symbole

Soit I un ensemble ditems


Soit X un symbole

(I,X) = {Fermeture(AX) / AX I}
Exemple
On considre la grammaire suivante :
(1)E E+T
(3)T T*F
(2)E T
(4)T F

(5)F (E)
(6)F nb

I={TT*F, EE+T, F(E), Fnb}


(I, F) = {TT*F}
(I, nb) = {Fnb}
(I, +) = {EE+T, TT*F, TF, F(E), Fnb}
(I, ( ) = {F(E), EE+T, ET, TT*F, TF, F(E), Fnb}
S. MBARKI

Compilation

2014-2015

133 / 184

Analyse syntaxique
Calcul de la collection des items de la grammaire

Algorithme
1

Ajouter la rgle SS. I0 = Fermeture({SS})

Mettre I0 dans Collection

Pour chaque I dans Collection :


Pour chaque X / (I, X)6= :
ajouter (I, X) dans Collection
Fin pour
Fin pour

Recommencer 3. tant que la collection nest pas stable

S. MBARKI

Compilation

2014-2015

134 / 184

Analyse syntaxique
Construction de la table danalyse SLR

Construire la collection ditems


{I0 , ... , In }. 0, 1, 2, .., n sont les tats.

Pour chaque tat i :


(a) Pour chaque (Ii , a) = Ij : M[i, a]=dj .
(b) Pour chaque (Ii , A) = Ij : M[i, A]=j.
(c) Pour chaque (p) A Ii et
chaque a SUIVANT(A) : M[i, a]=rp .
(d) Si SS Ii : M[i, $]=ACC.

S. MBARKI

Compilation

2014-2015

135 / 184

Analyse syntaxique
Construction de la table danalyse SLR

Exemple
On considre la grammaire suivante :
(1)E E+T
(3)T T*F
(2)E T
(4)T F

(5)F (E)
(6)F nb

I0 ={EE, E E+T, E T, TT*F, TF, F(E), Fnb}


I1 =(I0 , E) = {EE, E E+T}
M[1,$]=ACC
I2 =(I0 , T) ={E T, TT*F}
M[2,$]=r2 , M[2,+]=r2 , M[2,)]=r2
I3 =(I0 , F) = {TF}
M[3,$]=r4 , M[3,+]=r4 M[3,*]=r4 , M[3,)]=r4
I4 =(I0 , ( ) ={F(E), E E+T, E T, TT*F, TF, F(E),
Fnb}
S. MBARKI

Compilation

2014-2015

136 / 184

Analyse syntaxique
Construction de la table danalyse SLR

Exemple (Suite)
I5 =(I0 , nb) = {Fnb}
M[5,$]=r6 , M[5,+]=r6 , M[5,*]=r6 , M[5,)]=r6
I6 =(I1 , +) ={E E+T, TT*F, TF, F(E), Fnb}
I7 =(I1 , *) ={TT*F, F(E), Fnb}
I8 =(I4 , E) ={F(E), E E+T}
I2 =(I4 , T) = {E T, TT*F}
I3 =(I4 , F) ={TF}
I4 =(I4 , ( ) = {F(E), E E+T, E T, TT*F, TF, F(E),
Fnb}
I5 =(I4 , nb) = {Fnb}
I9 =(I6 , T) ={E E+T, TT*F}
M[9,$]=r1 , M[9,+]=r1 , M[9, ) ]=r1
S. MBARKI

Compilation

2014-2015

137 / 184

Analyse syntaxique
Construction de la table danalyse SLR

Exemple (Suite)
I3 =(I6 , F) ={TF}
I4 =(I6 , ( ) = {F(E), E E+T, E T, TT*F, TF, F(E),
Fnb}
I5 =(I6 , nb) = {Fnb}
I5 =(I4 , nb) = {Fnb}
I9 =(I6 , T) ={E E+T}
M[9,$]=r1 , M[9,+]=r1 , M[9,+]=r1

S. MBARKI

Compilation

2014-2015

138 / 184

Analyse syntaxique
Analyseur syntaxique SLR

On part dans ltat 0,


On empile et dpile les symboles (comme lors de lanalyse LL) et les tats
successifs.

Exemple 1
Lanalyse du mot m=3+*48 est donne dans la figure suivante :

S. MBARKI

Compilation

2014-2015

139 / 184

Analyse syntaxique
Analyseur syntaxique SLR

Exemple 1 (Suite)
Pile

Entre

Action

$0
$035
$0F
$0F3
$0T
$0T2
$0E
$0E1
$0E1+6

3+*48
+*48
+*48
+*48
+*48
+*48
+*48
+*48
*48

d5
r5 : Fnb
Je suis en 0 avec F je vais en 3
r4 : TF
Je suis en 0 avec T je vais en 2
r2 : ET
Je suis en 0 avec E je vais en 1
d6
ERREUR ! !ce mot nest pas dans le langage

S. MBARKI

Compilation

2014-2015

140 / 184

Analyse syntaxique
Analyseur syntaxique SLR

Exemple 2
La figure suivante donne la table danalyse SLR.

S. MBARKI

Compilation

2014-2015

141 / 184

Analyse syntaxique
Analyseur syntaxique SLR

Exemple 2 (Suite)
La figure suivante donne lanalyse du mot 3+4*2.
Pile
Entre Action
$0
$035
$0F
$0F3
$0T
$0T2
$0E
$0E1
$0E1+6
$0E1+645
$0E1+6F

3+4*2$
+4*2$
+4*2$
+4*2$
+4*2$
+4*2$
+4*2$
+4*2$
4*2$
*2$
*2$

S. MBARKI

d5
r6 :Fnb
Je suis en 0 avec F je vais en 3
r4 :TF
Je suis en 0 avec T je vais en 2
r2 :ET
Je suis en 0 avec E je vais en 1
d6
d5
r6 :Fnb
Je suis en 6 avec F je vais en 3
Compilation

2014-2015

142 / 184

Analyse syntaxique
Analyseur syntaxique SLR

Exemple 2 (Suite)
La figure suivante donne lanalyse du mot 3+4*2.
Pile
Entre Action
$0E1+6F3
$0E1+6T
$0E1+6T9
$0E1+6T9*7
$0E1+6T9*725
$0E1+6T9*7F
$0E1+6T9*7F10
$0E1+6T
$0E1+6T9
$0E
$0E1
S. MBARKI

*2$
*2$
*2$
2$
$
$
$
$
$
$
$

r4 :TF
Je suis en 6 avec T je vais en 9
d7
d5
r6 :Fnb
Je suis en 7 avec F je vais en 10
r3 :TT*F
Je suis en 6 avec T je vais en 9
r1 :EE+T
Je suis en 0 avec E je vais en 1
ACCEPTE ! ! !
Compilation

2014-2015

143 / 184

Analyse syntaxique
Analyseur syntaxique SLR

Remarques
La mthode ascendante analyse plus de grammaires que la mthode
descendante.
plus de grammaires SLR que LL
Aucune importance que la grammaire soit rcursive gauche.
Les grammaires ambigus provoquent des conflits
I
I

conflit dcalage/rduction :laquelle choisir ?


conflit rduction/rduction :
lire le terminal a
rduire S ou T

S. MBARKI

Compilation

2014-2015

144 / 184

Analyse syntaxique
Introduction Bison

Introduction Bison :
Langage Bison :
Il permet de dfinir des grammaires hors contexte.
Il utilise des variables, des terminaux et des rgles de production.
Il permet aussi de dfinir laxiome, grer les priorits des oprateurs, etc.
Le dossier dinstallation de Gnu Bison ne doit pas contenir despaces. Il
est prfrable que Flex et Bison soient installs dans le mme dossier.
Aprs linstallation de Gnu Bison, Copier la bibliothque "liby.a" dans le
dossier lib de DevCpp.
Programme Bison :
Constitu dun ensemble de dfinitions crites en utilisant le langage de
Bison.
Enregistr dans un fichier avec lextension ".y".

S. MBARKI

Compilation

2014-2015

145 / 184

Analyse syntaxique
Introduction Bison

Compilateur Bison :
Gnre un analyseur syntaxique partir de la grammaire Bison.
Appel du compilateur : par la commande " bison d xxx.y".
Le rsultat de la compilation est un fichier C nomm " xxx.tab.c" contenant
le code C de lanalyseur syntaxique.
Compilation de lanalyseur :
Par la commande " gcc" et en utilisant loption " -ly" qui inclut la librairie
relative bison.

S. MBARKI

Compilation

2014-2015

146 / 184

Analyse syntaxique
Collaboration Flex/Bison

Collaboration Flex/Bison

S. MBARKI

Compilation

2014-2015

147 / 184

Analyse syntaxique
Structure gnrale dun programme Bison

Structure gnrale dun programme Bison


Un programme Bison est compos de trois sections spares par " %%" :
< Dclarations >
%%
< Rgles de production>
%%
< Code auxiliaire >

S. MBARKI

Compilation

2014-2015

148 / 184

Analyse syntaxique
Section de dclarations

Section de dclarations
Commence par " %{" et se termine par " %}" (en dbut de ligne). Elle
contient :
I
I

Des dclarations et dfinitions en C.


Des inclusions de fichiers ".h ".

Cette section est copie tel quel au dbut du fichier " xxx.tab.c ".
Ces dclarations et ces dfinitions sont globales.
Les dclarations et les dfinitions peuvent tre utilises dans les sections
suivantes.
Une variable globale est fournie :
I

yylval : lanalyseur lexical y stocke les attributs de lunit lexicale reconnue,


alors que lanalyseur syntaxique y rcupre ces attributs.
yyval : lanalyseur syntaxique y stocke les attributs du symbole non
terminal courant (locale dans yyparse()).
Sont de mme type : YYSTYPE (int par dfaut)

S. MBARKI

Compilation

2014-2015

149 / 184

Analyse syntaxique
Section de dclarations

On peut modifier le type de ces deux variables :


I

Si on manipule un seul type pour les terminaux et non terminaux.


Pour le type rel, on dfinit :
%{
define YYSTYPE float
%}

Si on veut manipuler des types diffrents, alors les dclarer dans la clause
"%union { }"
%union {float valr, char valc ;}

La clause "%token" permet de dclarer les noms et les types des units
lexicales dlivres par lanalyseur lexical.
Lorsquun lexme na pas dattribut ou a un attribut entier, il nest pas
ncessaire de spcifier son type (le type int est pris par dfaut).
La clause "%type" permet de dclarer les noms et les types des
symboles non terminaux.
S. MBARKI

Compilation

2014-2015

150 / 184

Analyse syntaxique
Section de dclarations

Lorsquun symbole na pas dattribut ou a un attribut entier, il nest pas


ncessaire de le dclarer.
Les types spcifis dans "%token" et "%type" doivent avoir t dfinis
dans une clause "%union".
Quand la grammaire est ambigu, on obtient des conflits dans la table
danalyse.
On rsout ces conflits en dfinissant la prcdence et lassociativit :
I
I
I
I
I

La clause "%left" permet de spcifier des oprateurs associatifs gauche.


La clause "%right" permet de spcifier des oprateurs associatifs droite.
La clause "%noassoc" permet de spcifier des oprateurs non associatifs.
La prcdence est croissante.
La clause "%prec" permet de forcer la prcdence des oprateurs. Elle doit
tre dfinie dans la rgle de production :
E : UMOINS E %prec UMOINS {$$=-$2 ;}

La clause "%start" permet de spcifier le symbole de dpart de la


grammaire (Axiome).
S. MBARKI

Compilation

2014-2015

151 / 184

Analyse syntaxique
Exemple de dclaration

Exemple de dclarations
Soit la grammaire G dfinie par :
I
I
I

V = {E, T, F} ;
T = {nb, +, *} ;
S = E ; (Axiome)

Les rgles de production sont :


I E E + T
I E T
I T T * F
I T F
I F nb
I F (E)
Les terminaux "+", "*", "(" et ")" nont pas dattributs.
Le terminal "nb" correspond un nombre entier. Prenons comme attribut
un pointeur vers la valeur du nombre.
S. MBARKI

Compilation

2014-2015

152 / 184

Analyse syntaxique
Exemple de dclaration

Exemple (Suite)
Considrons que lattribut dun non terminal est un entier, alors on doit
dclarer :
%{
#include "lex.yy.c"
extern FILE *yyin ;
int res ;
%}
%union {
int * ptr_nbr ;
int nbr ;
}

S. MBARKI

Compilation

2014-2015

153 / 184

Analyse syntaxique
Exemple de dclaration

Exemple (Suite)
Les terminaux peuvent tre dclars par :
%token <ptr_nbr> NBENT
%token OPADD
%token OPMUL
%token PAROUV
%token PARFER
Les non terminaux peuvent tre dclars par :
%type <nbr> E
%type <nbr> T
%type <nbr> F
La prcdence des oprateurs est (+ est moins prioritaire que *) :
%left OPADD
%left OPMUL
Laxiome est dfini par : %start E
S. MBARKI

Compilation

2014-2015

154 / 184

Analyse syntaxique
Section des rgles de production

Section des rgles de production


La section des rgles de production peut utiliser tout ce qui est dfini dans
la section de dclarations :
I

Constantes, variables, fonctions.

Une rgle de production de la grammaire a la forme suivante :


I

I
I
I

Non terminal : corps_1 { actions_1 }


| corps_2 { actions_2 }
| ..............................
| corps_n { actions_n } ;
Non terminal : partie gauche commune aux rgles R_1, ..., R_n.
corps_i : partie droite de la rgle R_i
actions_i : code C excuter lorsque la rduction correspondante R_i est
effectue.

S. MBARKI

Compilation

2014-2015

155 / 184

Analyse syntaxique
Section des rgles de production

La partie " action_i " permet, par exemple, de manipuler (lire, crire, ...)
les attributs des terminaux et non terminaux, comme suit :
I Soit la rgle A : U U ...U {actions} o :
1 2
n
A : est un symbole non terminal.
Ui : est un symbole terminal ou non terminal.
I Dans {actions}, on peut utiliser les variables suivantes :
$$ : pour se rfrer lattribut de A.
$i : pour se rfrer lattribut de Ui .
I
I

Lorsquaucune action nest spcifie, Bison gnre laction $$ = $1 ;


Lorsque la rduction correspondante la rgle ci-dessus est effectue,
alors la variable yyval reoit implicitement la valeur de $$

S. MBARKI

Compilation

2014-2015

156 / 184

Analyse syntaxique
Exemple de rgles de production

Exemple de rgles de production


On considre la grammaire de la page 152 :
E : E OPADD T { $$ = $1 + $3 ; res=$$ ; }
| T { $$ = $1 ; res=$$ ;}
;
T : T OPMUL F { $$ = $1 * $3 ; }
| F { $$ = $1 ; }
;
F : NBENT { $$ = *$1 ; }
| PAROUV E PARFER { $$ = $2 ; }
;

S. MBARKI

Compilation

2014-2015

157 / 184

Analyse syntaxique
Section code auxiliaire

Section code auxiliaire


Le code doit tre crit en C.
Elle peut contenir :
I
I

Des fonctions appeles dans les actions.


Un programme principal qui fait appel yyparse().

Exemple :
main()
{
if (yyparse() == 0)
printf("Syntaxe correcte \n",) ;
else
printf("Erreur de syntaxe \n") ;
}

S. MBARKI

Compilation

2014-2015

158 / 184

Analyse syntaxique
Section code auxiliaire

La valeur retourne par "yyparse()" est gale 0 en cas de succs.


Linteraction entre analyseur lexical et analyseur syntaxique est assure
en incluant le fichier "xxx.tab.h" qui contient les dclarations des
terminaux".
Exemple :
I
I

on considre lexemple de la page 152.


Le contenu du fichier Flex, nomm "scan.l" , est dfini comme suit :

S. MBARKI

Compilation

2014-2015

159 / 184

Analyse syntaxique
Code source scan.l

Exemple
%{#include "pars.tab.h" %}
BLANC [ \t\n]
NBRE [0-9]+
%%
{BLANC} ;
"+"
{ return OPADD ; }
"*"
{ return OPMUL ; }
"("
{ return PAROUV ; }
")"
{ return PARFER ; }
{NBRE}
{yylval.ptr_nbre=(int*)
valeur(yytext) ;return NBENT ; }
%%
int* valeur(char * t)
{ // corps de la fonction }
S. MBARKI

Compilation

2014-2015

160 / 184

Analyse syntaxique
Exemple de code auxiliaire

Exemple
%%
main( ) {
yyin = fopen("test.exp", "r") ;
if(yyparse() == 0)
printf("La syntaxe est correcte\n") ;
else
printf("Erreur de syntaxe\n") ;
}

S. MBARKI

Compilation

2014-2015

161 / 184

Analyse syntaxique
Gnration de lanalyseur syntaxique

Gnration de lanalyseur syntaxique


Pour commencer la gnration de lanalyseur syntaxique, lancer linvit de
commandes

S. MBARKI

Compilation

2014-2015

162 / 184

Analyse syntaxique
Gnration de lanalyseur syntaxique

Taper la commande de gnration du code C de lanalyseur lexical :

S. MBARKI

Compilation

2014-2015

163 / 184

Analyse syntaxique
Gnration de lanalyseur syntaxique

Taper la commande de gnration du code C de lanalyseur syntaxique :

S. MBARKI

Compilation

2014-2015

164 / 184

Analyse syntaxique
Gnration de lanalyseur syntaxique

Compiler le code C de lanalyseur pars.tab.c :

S. MBARKI

Compilation

2014-2015

165 / 184

Sommaire
1

Introduction la compilation

Analyse lexicale

Analyse syntaxique

Analyse smantique
Rle de lanalyse smantique
Cas de la porte des identificateurs
Traduction dirige par la syntaxe
Attributs synthtiss et hrits
Grammaire S-attribue et grammaire L-attribue
Graphe de dpendance

Sries dexercies

S. MBARKI

Compilation

2014-2015

166 / 184

Analyse smantique
Rle de lanalyse smantique

Est une phase de compilation qui offre un niveau de vrification plus


profond que lanalyse syntaxique.
Pas de superposition entre les phases danalyse.

Syntaxe = {Rgles fixant la construction de phrases}


I

Appel de P() prcd dune dfinition ?

La smantique a un double sens :


I
I

Vrification : quelles phrases sont smantiquement correctes.


Traitement : quels sont les traitements effectus par le programme.

Certaines proprits fondamentales du langage source ne peuvent tre


dcrites avec une grammaire hors contexte.
S. MBARKI

Compilation

2014-2015

167 / 184

Analyse smantique
Rle de lanalyse smantique

Exemple de proprits :
I
I
I

Ne pas utiliser une variable non dclare.


Ne pas dclarer deux fois une mme variable dans le mme bloc.
Dans un appel de fonction, le nombre de paramtres formels doit
correspondre au nombre de paramtres effectifs, et leurs types doivent tre
compatibles.
Ne pas multiplier un rel avec une chane, etc.

Le rle de lanalyseur smantique est de vrifier ces contraintes (analyse


contextuelle).
Seffectue en mme temps que lanalyse syntaxique en dfinissant des
action smantiques dans les rgles de production (Traduction dirige
par la syntaxe).
Il ny a pas de mthode universelle pour faire une analyse
smantique, car les proprits ne sont pas unifies.

S. MBARKI

Compilation

2014-2015

168 / 184

Analyse smantique
Cas de la porte des identificateurs

Porte dun identificateur : Zone du programme o il peut tre utilis


(visibilit) et a la signification spcifie dans sa dclaration (validit).
La notion de visibilit et de validit dpend des langages :
I
I

Cobol : les identificateurs sont partout visibles.


C : les identificateurs dclars dans un bloc ne sont visibles qu lintrieur
de ce bloc. Un identificateur dclar dans un sous bloc masque un autre
identificateur de mme nom dclar dans le bloc de niveau infrieur, etc.

Afin de vrifier la porte des identificateurs, il faut stocker dans la table


des symboles tous les symboles rencontrs au fur et mesure.
La table des symboles est la structure qui contient toutes les
informations utiles sur les symboles du programme (variables, fonctions,
etc.).
Pour le cas des variables, les informations peuvent tre :
I

Nom, adresse, type, valeur, porte, etc.

S. MBARKI

Compilation

2014-2015

169 / 184

Analyse smantique
Traduction dirige par la syntaxe

La traduction dirige par la syntaxe (TDS) est un formalisme permettant


dassocier des actions une rgle de production dune grammaire.
Grammaire attribue ou Dfinition Dirige par la Syntaxe (DDS) :
I

Chaque symbole de la grammaire (terminal ou non) possde un ensemble


dattributs.
Chaque rgle de production possde un ensemble de rgles smantiques
qui permettent de calculer la valeur des attributs associs aux symboles
apparaissant dans la production.
Une rgle smantique est une suite dinstructions : elle peut contenir des
affectations, des conditions, des instructions daffichage, etc.

Dfinition
On appelle DDS, la donne dune grammaire et de son ensemble de
rgles smantiques.
On notera X.a lattribut a du symbole X. Sil y a plusieurs symboles X dans
une production, on les notera X (1) , ...X (n) et X (0) sil est dans la partie
gauche.
S. MBARKI

Compilation

2014-2015

170 / 184

Analyse smantique
Traduction dirige par la syntaxe

Arbre syntaxique dcor :


I

Dfinition :
On appelle arbre syntaxique dcor un arbre syntaxique sur les noeuds
duquel on rajoute la valeur de chaque attribut.
Exemple
les figure suivante donnent larbre syntaxique dcor du mot 345 selon la
DDS dfinie.

S. MBARKI

Compilation

2014-2015

171 / 184

Analyse smantique
Traduction dirige par la syntaxe

Exemple 1
Soit la grammaire :
num num chiffre|chiffre
chiffre 0|1|2|3|4|5|6|7|8|9
Attributs : val

S. MBARKI

Compilation

2014-2015

172 / 184

Analyse smantique
Attributs synthtiss et hrits

On distingue deux types dattributs : les synthtiss et les hrits.


Attributs synthtiss :
I

Un attribut est dit synthtis lorsquil est calcul pour le non terminal de la
partie gauche en fonction des attributs des non terminaux de la partie
droite.
Sur larbre dcor : la valeur dun attribut en un nud se calcule en fonction
des attributs de ses fils.
Les attributs synthtiss peuvent tre facilement valus lors dune analyse
ascendante. Mais pas du tout lors dune analyse descendante.
Dans lexemple donn ci-dessus, val est un attribut synthtis.

S. MBARKI

Compilation

2014-2015

173 / 184

Analyse smantique
Attributs synthtiss et hrits

Attributs hrits :
I

Un attribut est dit hrit lorsquil est calcul partir des attributs du non
terminal de la partie gauche, et ventuellement des attributs dautres non
terminaux de la partie droite.
Sur larbre dcor : la valeur dun attribut un nud se calcule en fonction
des attributs des frres et du pre.
Si les attributs dun nud donn ne dpendent pas des attributs de ses
frres droits, alors les attributs hrits peuvent tre facilement valus lors
dune analyse descendante, mais pas lors dune analyse ascendante.

S. MBARKI

Compilation

2014-2015

174 / 184

Analyse smantique
Grammaire S-attribue et grammaire L-attribue

Une grammaire attribue est dite S-attribue, si tous ses attributs sont
synthtiss (elle na aucun attribut hrit).
La grammaire de lexemple 1 est S-attribue.
Une grammaire L-attribue est une grammaire attribue nayant que des
attributs hrits qui ne dpendent pas des frres droits.
Les attributs dune grammaire L-attribue peuvent tre values lors
dune analyse syntaxique descendante.
il existe des grammaires attribues qui possdent la fois des attributs
hrits et des attributs synthtiss.

S. MBARKI

Compilation

2014-2015

175 / 184

Analyse smantique
Grammaire S-attribue et grammaire L-attribue

Exemple 2
Soit la grammaire :
decl type vlist
type int|float
vlist id,vlist|id
Atributs : type (ENT, REEL)
float x, y

S. MBARKI

Compilation

2014-2015

176 / 184

Analyse smantique
Graphe de dpendance

Une DDS peut utiliser la fois des attributs synthtiss et des attributs
hrits. Dans ce cas, il faut tablir un ordre dvaluation des rgles
smantiques en construisant un graphe de dpendances.
On appelle graphe de dpendances le graphe orient reprsentant les
interdpendances entre les divers attributs. Le graphe a pour sommet
chaque attribut. Il y a un arc de a b si le calcul de b dpend de a.
On construit le graphe de dpendances pour chaque rgle de production,
ou bien directement le graphe de dpendances dun arbre syntaxique
donn. Ce dernier explicite lordre dvaluation des attributs.
Le graphe de dpendances pour chaque rgle de production simplifie
lobtention du graphe de larbre syntaxique entier.

S. MBARKI

Compilation

2014-2015

177 / 184

Analyse smantique
Analyse smantique avec loutil bison

Exemple : Structure AST


Modifier lanalyseur du transparent 152, de faon afficher larbre de
drivation du mot :
I
I

Les oprateurs sont les noeuds.


Les nombres sont les feuilles.

La structure dune feuille peut tre reprsente par

La structure dun noeud peut tre

ou

Limplmentation de lAST de lexpression 2+3*5 peut tre implmente

sous la forme suivante :


S. MBARKI

Compilation

2014-2015

178 / 184

Analyse smantique
Analyse smantique avec loutil bison

Dclaration des types de donnes


Structure noeud (struct tnoeud) :
typedef struct tnoeud {
t_operateur op ;
t_pAST fd, fg ; } t_noeud ;

Union feuille-noeud (union uAST) :


typedef union uAST {
t_feuille *pf ;
t_noeud *pn ; } u_AST ;
Structure feuille-noeud (struct tpAST) :
typedef struct tpAST {
u_AST nd ;
int t_nd ; } t_pAST ;
S. MBARKI

Compilation

2014-2015

179 / 184

Analyse smantique
Analyse smantique avec loutil bison

Cration de feuille et noeud dAST


Cration de feuille :
t_pAST creer_feuille(t_feuille n)
I
I
I

Alloue mmoire pour une feuille


dpose la valeur de n dans la zone alloue
Retourne ladresse de la zone cre

Cration de noeud :
t_pAST creer_noeud(t_operateur op, t_pAST p1, t_pAST p2)
I
I
I

Alloue mmoire pour un noeud


Dpose la valeur de op, p1, p2 dans la zone alloue
Retourne ladresse de la zone alloue

S. MBARKI

Compilation

2014-2015

180 / 184

Analyse smantique
Analyse smantique avec loutil bison

Affichage dAST
void afficher_AST(t_pAST p, int niv)
o p est un pointeur sur un noeud ou une feuille de lAST et niv est le niveau
de llment correspondant

S. MBARKI

Compilation

2014-2015

181 / 184

Analyse syntaxique
Analyse smantique avec loutil bison

Rgles de production et actions smantiques


E : E AD T {$$ = creer_noeud(ADD,$1,$3) ;
*(t_pAST*)p_rac = $$ ;}
| T {$$=$1 ;
*(t_pAST*) p_rac = $$ ;}
;
T : T MU F {$$ = creer_noeud(MUL,$1,$3) ;}
| F {$$=$1 ;}
;
F : NB {$$ = creer_feuille(*$1) ;}
| PO E PF {$$=$2 ;}
;

S. MBARKI

Compilation

2014-2015

182 / 184

Analyse smantique
Analyse smantique avec loutil bison

Lexpression (23+5)*2+(67*27) saffiche ainsi

S. MBARKI

Compilation

2014-2015

183 / 184

Sommaire

Introduction la compilation

Analyse lexicale

Analyse syntaxique

Analyse smantique

Sries dexercies

S. MBARKI

Compilation

2014-2015

184 / 184

Вам также может понравиться