Samir MBARKI
Dpartement dInformatique, Facult des Sciences, KENITRA
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 ?
S. MBARKI
Compilation
2014-2015
4 / 184
Introduction la compilation
Rle du compilateur
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.
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.
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
S. MBARKI
Compilation
2014-2015
10 / 184
Introduction la compilation
Analyse lexicale
Exemple
Soit linstruction : Surf := base * hauteur / 2
Compilation
2014-2015
11 / 184
Introduction la compilation
Analyse syntaxique
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
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
Exemple
S. MBARKI
Compilation
2014-2015
18 / 184
Analyse lexicale
Terminologie
Exemple
Symboles (Units lexicales) :
I
I
I
S. MBARKI
Compilation
2014-2015
19 / 184
Analyse lexicale
Terminologie
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
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.
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
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}
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)
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 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) )
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
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
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
11111
(Oui)
10010
(Non)
S. MBARKI
Compilation
2014-2015
39 / 184
Analyse lexicale
Automate fini non dterministe (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
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 }
S. MBARKI
N (q2 , 1)
Compilation
2014-2015
43 / 184
Analyse lexicale
Transformation dun AFN en AFD
Dfinition de -fermeture :
-fermeture : Q P(Q) tel que :
1
q -fermeture(q)
Si q1 (q , ) alors q1 -fermeture(q)
Remarque
Si Q Q : -fermeture(Q) =
q Q 0
-fermeture(q)
S. MBARKI
Compilation
2014-2015
44 / 184
Analyse lexicale
Transformation dun AFN en AFD
Exemple de -fermeture
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
S. MBARKI
Compilation
2014-2015
48 / 184
Analyse lexicale
Transformation dun AFN en AFD
S. MBARKI
Compilation
2014-2015
49 / 184
Analyse lexicale
Minimiser un AFD
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
S. MBARKI
Compilation
2014-2015
52 / 184
Analyse lexicale
Algorithme de minimisation
Compilation
2014-2015
53 / 184
Analyse lexicale
Algorithme de minimisation
Exemple
Compilation
2014-2015
54 / 184
Analyse lexicale
Algorithme de minimisation
Exemple
S. MBARKI
Compilation
2014-2015
55 / 184
Analyse lexicale
Algorithme de minimisation
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
S. MBARKI
Compilation
2014-2015
58 / 184
Analyse lexicale
Equivalence des automates finis aux expressions rgulires
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
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
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
S. MBARKI
Compilation
2014-2015
64 / 184
Analyse lexicale
Loutil Flex
S. MBARKI
Compilation
2014-2015
65 / 184
Analyse lexicale
Loutil Flex
S. MBARKI
Compilation
2014-2015
66 / 184
Analyse lexicale
Format dun fichier Flex
S. MBARKI
Compilation
2014-2015
67 / 184
Analyse lexicale
Section des dfinitions
Un bloc littral :
Des dfinitions :
S. MBARKI
Compilation
2014-2015
68 / 184
Analyse lexicale
Section rgles et sous-programmes utilisateurs
La partie droite dune rgle contient des actions excutes lorsque des
units lexicales sont reconnues.
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
I
I
S. MBARKI
Compilation
2014-2015
70 / 184
Analyse lexicale
Dfinition des expressions rgulires dans Flex
Exemple : (ac|b)+.
Exemple : [a/b] signifie que a est considr sil est suivi immdiatement par
un b.
I
Exemple : (a|b){3,7} spcifie tous les mots sur {a, b} de longueur comprise
entre 3 et 7.
I
Compilation
2014-2015
71 / 184
Analyse lexicale
Mta-symboles de Flex
Les oprateurs :
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
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
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
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 raffiche les lignes dun texte prcds de leurs
numros de lignes
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
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
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
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}
= bbba
Exemple dexpression gramaticale non terminale
= aBBb
= aBBbbbba
= bbbaaBBb
2 = aBBbaBBb
S. MBARKI
Compilation
2014-2015
84 / 184
Analyse syntaxique
Rgle gramaticale
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
Drivation multiple :
0
Compilation
2014-2015
86 / 184
Analyse syntaxique
Drivation-Rduction
Rduction multiple :
0
Exemple
Soit la rgle A bAb , et = aAa
1
S. MBARKI
Compilation
2014-2015
87 / 184
Analyse syntaxique
Langage engendr par une expression
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 ) .
S. MBARKI
Compilation
2014-2015
89 / 184
Analyse syntaxique
e
Grammaire ambigu
e :
Grammaire ambigu
Dfinition
Exp (Exp)
Exp num
Exp idf
S. MBARKI
Compilation
2014-2015
90 / 184
Analyse syntaxique
e
Grammaire ambigu
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
S. MBARKI
Compilation
2014-2015
92 / 184
Analyse syntaxique
Mthodes danalyse
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
Compilation
2014-2015
95 / 184
Analyse syntaxique
Analyse descendante
Exemple
S aAb
A cd | c
on prend le mot W=acb
Avec S aAb
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
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
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
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
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
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
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)
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
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
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
Exemple
S Aa | b
A Ac | Sd |
S est rcursif gauche car SAaSda
S. MBARKI
Compilation
2014-2015
118 / 184
Analyse syntaxique
Rcursivit gauche
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
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)
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
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
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
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
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
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
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
(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
Compilation
2014-2015
133 / 184
Analyse syntaxique
Calcul de la collection des items de la grammaire
Algorithme
1
S. MBARKI
Compilation
2014-2015
134 / 184
Analyse syntaxique
Construction de la table danalyse SLR
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
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
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
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
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
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
S. MBARKI
Compilation
2014-2015
149 / 184
Analyse syntaxique
Section de dclarations
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
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)
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
I
I
I
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
S. MBARKI
Compilation
2014-2015
156 / 184
Analyse syntaxique
Exemple de rgles de production
S. MBARKI
Compilation
2014-2015
157 / 184
Analyse syntaxique
Section code auxiliaire
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
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
S. MBARKI
Compilation
2014-2015
162 / 184
Analyse syntaxique
Gnration de lanalyseur syntaxique
S. MBARKI
Compilation
2014-2015
163 / 184
Analyse syntaxique
Gnration de lanalyseur syntaxique
S. MBARKI
Compilation
2014-2015
164 / 184
Analyse syntaxique
Gnration de lanalyseur syntaxique
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
Compilation
2014-2015
167 / 184
Analyse smantique
Rle de lanalyse smantique
Exemple de proprits :
I
I
I
S. MBARKI
Compilation
2014-2015
168 / 184
Analyse smantique
Cas de la porte des identificateurs
S. MBARKI
Compilation
2014-2015
169 / 184
Analyse smantique
Traduction dirige par la syntaxe
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
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
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
ou
Compilation
2014-2015
178 / 184
Analyse smantique
Analyse smantique avec loutil bison
Compilation
2014-2015
179 / 184
Analyse smantique
Analyse smantique avec loutil bison
Cration de noeud :
t_pAST creer_noeud(t_operateur op, t_pAST p1, t_pAST p2)
I
I
I
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
S. MBARKI
Compilation
2014-2015
182 / 184
Analyse smantique
Analyse smantique avec loutil bison
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