Techniques de compilation
Leila Jemni Ben Ayed
Ecole Nationale des Sciences de lInformatique
Ecole Nationale des Sciences de lInformatique
Lobjectif de ce cours est d tendre les connaissances en th orie des
Lobjectif de ce cours est d tendre les connaissances en th orie des
langages et des automates la description des
langages de
programmation et leur analyse syntaxique en vue de leur compilation. Ce
cours d crit les concepts fondamentaux des langages de programmation
en commen ant, dans une premi re partie, par donner la syntaxe et la
s mantique, en insistant davantage sur la syntaxe. La traduction en code
interm diaire et lenvironnement dex cution font lobjet de la deuxi me
partie.
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
1
Techniques de compilation
Introduction la compilation
I.
II. Compilateur en une seule passe
II. Compilateur en une seule passe
III. Analyse syntaxique
III. Analyse syntaxique
IV. Analyse s mantique
V. Traduction en code pour
machine abstraite pile
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
2
I. Introduction la Compilation
Plan
I.1. Compilateurs
I.2. Les Grammaires non contextuelles
I.3. Phases de Compilation
I.4. Qualit dun Compilateur
I.5. Outils pour la construction de Compilateurs
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
3
I.1. Compilateurs
volution des langages:
" Langage machine
" Langage assembleur
" Langages volu s : C, PASCAL, ADA (Algorithmiques)
PROLOG (Logiques)
" Langages de 4 me g n ration
Un compilateur est un programme qui
lit un
programme crit dans un premier langage(langage
source) et le traduit en un programme quivalent
crit dans un autre langage (le langage cible).
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
4
I.1. Compilateurs
Au cours de ce processus de traduction, un r le du
compilateur est de signaler son utilisateur la
pr sence derreurs dans le programme source.
PSource
Compilateur
PAssembleur
Messages
derreur
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
5
I.2. Exemples de grammaires non
I.2.
contextuelles
contextuelles
1) Une grammaire qui g n re lensemble des expressions arithm tiques utilisant les op rateurs + et * et
les chiffres {0,1,...9}
G = ({Exp}, {+, *, (, ), 0, 1, &9}, Exp, R}
R = {
Exp
Exp
Exp
Exp
Exp
Exp
Exp
Exp
Exp
Exp
Exp
Exp
Exp
Exp
Exp + Exp
Exp * Exp
(Exp)
0
1
1
2
3
4
5
6
7
8
9 }
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
6
I.2. Exemples de grammaires non
I.2.
contextuelles
contextuelles
2) Une grammaire qui g n re lensemble des expressions bool ennes utilisant les op rateurs
arithm tiques (oparith), les op rateurs relationnels (oprel) et les op rateurs bool ens (non, et et
ou) sur les identificateurs (id) et les nombres entiers (nb)
R = {
Expb
Expb
Expb
Expb
Expb
Expr
Expr
Expa
Expa
Expa
Expa
}
Expr
non(Expb)
Expb et Expb
Expb ou Expb
Expb ou Expb
Expa oprel Expa
(Expr)
Expa oparith Expa
(Expa)
id
nb
G = (V, T, Expb, R)
V = {Expb, Expr, Expa}
T = {id, nb, oprel, oparith, non, et, ou, (, )}
T = {id, nb, oprel, oparith, non, et, ou, (, )}
o
{<, >, <=, >=, <>, =}
oprel
oparith
{+, *, /, -}
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
7
I.2. Exemples de grammaires non
I.2.
contextuelles
contextuelles
3) Une grammaire qui g n re une s quence non vide de d clarations suivie de D but, suivie
dune s quence non vide dinstructions suivie de Fin . Chaque instruction peut tre une
instruction daffectation (se termine par ;) ou une instruction conditionnelle avec ou sans
sinon (qui se termine par FinSi). Les types utilis s sont entier et r el. La s quence g n r e
commence par program suivi dun nom.
R = {
Program id S_DCL D but S_INST Fin
G = (V, T, P, R)
V = {P, S_DCL, DCL, S_INST, INST, Expb, Expr, Expa}
T = {Program, D but, Fin, Var, :, id, :=, ;, Si, Sinon, Fin Si, (, ),
oparith, oprel, non, et, ou, entier, r el}
oparith, oprel, non, et, ou, entier, r el}
INST | INST S_INST
Var L_id : TYPE;
id | id, L_id
id | id, L_id
entier | r el
P
S_DCL DCL | DCL S_DCL
DCL
L_id
L_id
TYPE
S_INST
INST
INST
INST
Expb
Expr
Expr
Expa
Expa
Expa
Expa
}
id := Expa;
Si Expb alors S_INST Fin Si
Si Expb alors S_INST Sinon S_INST Fin Si
Expr | non(Expb) | Expb et Expb | Expb ou Expb
Expa oprel Expa
(Expr)
Exp oparith Exp
(Expa)
id
nb
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
8
I.2. Exemples de grammaires non
I.2.
contextuelles
contextuelles
V rifier que la grammaire pr c dente g n re le
programme suivant :
Program test
Var a, b : entier;
D but
a:= 10;
Si a>= 10 alors a:= 20; Fin Si
Fin
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
9
I.2. Exemples de grammaires non
I.2.
contextuelles
contextuelles
Le programme est transform en une s quence de
terminaux.
Program id
Var id, id : entier;
D but
id:= nb;
Si id oprel nb alors id:= nb; Fin Si
Fin
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
10
I.2. Exemples de grammaires non
I.2.
contextuelles
contextuelles
P
S_DCL
Program
id
DCL D but
S_INST Fin
Var L_id : TYPE ;
Var L_id : TYPE ;
INST S_INST
INST S_INST
id , L_id entier
id := Expa ;
INST
En parcourant les feuilles
de larbre de gauche
droite, on trouve le
programme analyser
Donc ce programme est
syntaxiquement correct
id
nb Si Expb alors S_INST Fin Si
Expr
INST
Expa oprel Expa
id := Expa ;
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
id
nb
nb
11
I.3. Phases de Compilation
On distingue deux parties:
Analyse
" Partitionne le programme source en ses constituants et
en cr e une repr sentation interm diaire.
Synth se
Synth se
" Construit
le programme
cible
partir de
la
repr sentation interm diaire.
" Lanalyse
utilise
dune
grammaire non contextuelle qui g n re des
programmes du langage utilis .
constituants
les
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
12
I.3. Phases de compilation
PSource
Analyse lexicale
Analyse Syntaxique
Analyse s mantique
G n ration de code
interm diaire
Optimisation de code
G n ration de code
machine
Gestion de la
table de
symboles
Table des
identificateurs,
mots r serv s
et constantes
Advertisement
Gestion des
Gestion des
erreurs
Leila Jemni Ben Ayed
PCible
Cours Techniques de Compilation-2012-
2013
13
I.3. Phases de compilation
Les compilateurs
comportent ces deux
parties.
on
change
de
Si
machine, on peut ne
machine, on peut ne
modifier que la partie
terminale
Psource
Analyse
Partie frontale
G n ration de
code
interm diaire
PLI
P
Partie terminale
G n rateur de code
machine
PASS
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
14
I.3. Phases de compilation
Interface avec lanalyseur lexical
Type dun id
Valeur dun nb
Op rateur PPQ pour oprel
Lire caract re
Entr e
Rendre
caract re
Passer unit
lexicale et ses
attributs
Analyseur
lexical
lexical
Analyseur
syntaxique
syntaxique
" Pour lAS, lAL retourne lUL
" Pour lAsem, il retourne le type, la port e, &
" Pour le traducteur, il retourne la valeur du nombre, lop rateur utilis , &
" Si C est une variable caract re et le prog source est dans lentr e standard alors
linstruction C = getchar(); affecte le prochain caract re dentr e C et
linstruction ungetc(C, stdin); rend lentr e standard stdin la valeur de C.
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
15
I.3. Phases de compilation
Implantation des interactions avec lanalyseur lexical
Utilise getchar();
pour lire un
caract re
Rendre caract re
En utilisant ungetc(C, stdin)
AnalLex()
analyseur
analyseur
lexical
Retourne une
unit lexicale
lappelant
ValLex
Positionne la
variable globale la
valeur de lunit
lexicale
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
16
I.3. Phases de compilation
Analyse du programme source :
A chaque langage de programmation est associ e une
grammaire non contextuelle.
Lanalyse comprend quatre phases :
Phase1: analyse lin aire (ou lexicale) au cours de laquelle
Phase1: analyse lin aire (ou lexicale) au cours de laquelle
le flot de caract res formant le programme source est lu
de gauche droite et group en unit s lexicales qui sont
une suite de caract res ayant une signification collective.
Ces unit s lexicales sont les terminaux de la grammaire.
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
17
I.3. Phases de compilation
LAl retourne une UL pour lAS
Pour lAsem, si lUL est id alors il retourne une entr e dans
la table des identificateurs pour lidentificateur trouv .
Pour le traducteur, si lUL est nb, alors il retourne sa valeur
" si lUL est oprel alors il retourne lop rateur en question
" si lUL est oprel alors il retourne lop rateur en question
lUL est oparith alors il retourne lop rateur en
" Si
question
Quand lanalyseur lexical rencontre un identificateur non
mot cl , il le cherche dans la table des id. Sil existe alors il
retourn lentr e associ e sinon il lui cr t une entr e et
retourne le num ro dentr e.
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
18
I.3. Phases de compilation
par exemple si on dispose de la grammaire avec les r gles
id opaff Exp
suivantes:
P
Exp
Les unit s lexicales associ es au mot :
Les unit s lexicales associ es au mot :
id | nb | (Exp) | Exp oparith Exp
position := initiale + vitesse * 60
Sont:
1)
3)
5)
6)
lidentificateur position
Lidentificateur initiale
Lidentificateur vitesse
Le signe de multiplication oparith 7) Le nombre nb
2) Le symbole daffectation opaff
4) Le signe daddition oparith
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
19
I.3. Phases de compilation
Le lex me est la suite de caract res du fichier source qui forme lunit
lexicale. Le tableau suivant pr sente les lex mes et les unit s lexicales
associ es au mot position := initiale + vitesse * 60
R sultat
de lAL
lex me
position
:=
:=
initiale
+
vitesse
*
60
id
1
opaff
:=
id
2
oparith
+
Unit lexicale
Id
Opaff
Opaff
Id
Oparith
Id
Oparith
nb
id
3
oparith
*
nb
60
Pour lAS
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
20
I.3. Phases de compilation
par exemple si on dispose de la grammaire avec les r gles
suivantes:
DCL
Var L_ID : TYPE;
| Var L_ID : TYPE; DCL
| e
| e
L_ID
TYPE
id | id, L_ID
entier | r el
Les unit lexicales associ es au mot (retourn es par lAL lAS):
Var a, b: entier; var c: r el;
Sont les suivantes :
Var
id
,
id
:
entier
;
Var
id
:
r el
;
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
21
e
e
e
e
e
e
I.3. Phases de compilation
par exemple si on dispose de la grammaire avec les r gles
suivantes:
DCL
Var L_ID : TYPE;
| Var L_ID : TYPE; DCL
| e
| e
L_ID
TYPE
id | id, L_ID
entier | r el
Table des id de variables
N
Lex me
Type
1
2
2
3
a
b
b
c
entier
entier
entier
r el
Si lAL retourne un r sultat lAS et lAsem alors le r sultat de
lAL pour le mot Var a, b: entier; var c: r el; sera :
Var
0
Id
1
,
0
Id
2
:
0
entier
0
;
0
Var
0
Id
3
:
0
r el
0
;
0
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
22
e
e
e
e
e
e
I.3. Phases de compilation
Soit le mot a := c + 34; lAL retourne
Pour lAS : id := id oparith nb;
Pour lAsem : 1 := 3 oparith nb;
Id
Advertisement
1
:=
0
R sultat de lAL
Id
3
oparith
+
nb
34
;
0
c-a-d entier := r el oparith entier
Pour le traducteur : @a := @c + 34;
Pour le traducteur : @a := @c + 34;
N
1
2
3
Table des id de variables
Lex me
a
b
c
Type
entier
entier
r el
Adresse
@a
@b
@c
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
23
I.3. Phases de compilation
par exemple si on dispose de la grammaire avec les r gles
suivantes:
P
DCL
DCL L_I
Var L_ID : TYPE;
| Var L_ID : TYPE; DCL
| Var L_ID : TYPE; DCL
| e
id | id, L_ID
entier | r el
L_ID
TYPE
L_I
Table des id de variables
N
Lex me
Type
1
2
2
3
a
b
b
c
entier
entier
entier
r el
id := nb; | id := id; | id := nb; L_I | id := id; L_I
Si lAL retourne un r sultat lAS, lAsem et le traducteur alors le r sultat de
lAL pour le mot Var a, b: entier; var c: r el; b := 10; sera :
Var
0
Id
1
,
0
Id
2
:
0
entier
0
;
0
Var
0
Id
3
:
0
r el
0
;
0
id
2
:=
0
nb
10
;
0
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
24
I.3. Phases de compilation
Var a, b: entier; var c: r el; b := 10;
Table des id de variables
N
Lex me
Type
1
2
2
3
a
b
b
c
entier
entier
entier
r el
Var
0
Id
1
,
0
Id
2
:
0
entier
0
;
0
Var
0
Id
3
:
0
r el
0
;
0
id
2
:=
0
nb
10
;
0
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
25
I.3. Phases de compilation
Analyse du programme source :
les
sont
unit s
lexicales
Phase2: analyse hi rarchique (ou syntaxique) au cours de
regroup es
laquelle
hi rarchiquement en structure grammaticale.
Lanalyse syntaxique consiste v rifier que la suite dunit s
Lanalyse syntaxique consiste v rifier que la suite dunit s
lexicales est g n r e par la grammaire du langage.
Ceci revient construire un arbre danalyse (ou syntaxique)
dont les feuilles concordent avec la suite dunit s lexicales
en les parcourant de gauche droite.
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
26
I.3. Phases de compilation
Analyse du programme source :
Phase3: analyse s mantique au cours de laquelle on
op re certain contr le pour sassurer que lassemblage des
constituants du programme a un sens. Une des op rations
principales dun Asem est
le contr le de type des
le contr le de type des
principales dun Asem est
op randes dune op ration, le contr le de la port e des
identificateurs
sous
programme, &.
au moment
lappel
dun
de
Dans le contr le de type,
lanalyseur s mantique peut
ins rer des op rations de conversion pour les expr dentier
vers r el.
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
27
I.3. Phases de compilation
Analyse du programme source :
Phase3: analyse s mantique
Nous distinguons deux types derreurs s mantiques:
" s mantique statique, contr l e au moment de la compilation telle
que :
que :
Variable non d clar e
lincompatibilit de type,
la port e dune variable&
" S mantique dynamique, contr l e au moment de lex cution telle
que :
la division par z ro
les boucles infinies
le d bordement m moire
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
28
I.3. Phases de compilation
Analyse du programme source :
Phase4: traduction en code interm diaire au cours de
laquelle la s quence dinstructions du programme est
traduite en une s quence dinstructions dans un langage
interm diaire. Par exemple : le langage pour machine
interm diaire. Par exemple : le langage pour machine
pile, le langage C, &
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
29
I.3. Phases de compilation
Analyse du programme source :
La table des symboles contient des informations sur les
diff rents symboles et les attributs associ s. Par exemple
les identificateurs de
les mots cl s (ou r serv s) et
variables en sp cifiant lunit lexicale id et leurs attributs:
variables en sp cifiant lunit lexicale id et leurs attributs:
type, adresse, etc&
A chaque fois quune unit lexicale id est trouv e par lAL,
le lex me associ est ins r dans la table des symboles sil
na pas t d j ins r et lAL retourne id et un pointeur
vers une entr e de la table des symboles.
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
30
I.3. Phases de compilation
Exemple
On veut illustrer les phases de compilation sur lexemple
suivant :
Position := Initiale + Vitesse * 60;
id := Exp;
id := Exp;
La grammaire est la suivante :
P
P
Exp
id | nb | (Exp) | Exp + Exp | Exp * Exp
Une Contrainte s mantique doit tre v rifi e :
Lop rateur de multiplication doit tre appliqu deux
op randes de m me type (entier, entier) ou (r el, r el)
Pour notre exemple, Vitesse est un r el et 60 est un nombre
entier, il faut alors convertir 60 dentier vers r el (60.0)
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
31
I.3. Phases de compilation
" Analyse lexicale
id1 := id2 + id3 * nb;
" Analyse syntaxique
P
id := Exp
;
Exp + Exp
id Exp * Exp
id nb
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
32
I.3. Phases de compilation
" Analyse s mantique
Comme vitesse est un r el, un compilateur peut convertir le nombre
entier nb en r el pour pouvoir utiliser lop rateur de multiplication
Var position, Initiale,
Vitesse : r el;
P
Analyseur
S mantique
id := Exp
Table des id de variables
Exp + Exp
N
Lex me
Type
1
2
3
Position
Initiale
Vitesse
R el
R el
R el
id Exp * Exp
Advertisement
id
60
entier vers r el
60.0
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
33
I.3. Phases de compilation
" G n ration de code interm diaire
Temp1 := Entier vers r el(60);
Temp2 := Temp1*id3;
Temp3 := id2 + Temp2;
id1 := Temp3;
" Optimisation de code Analyse syntaxique
" Optimisation de code Analyse syntaxique
Temp1 := id3*60.0;
id1 := id2 + Temp1;
" G n ration de code interm diaire (Machine VON NEUMAN)
Machin registres
MOVF id3, R2
MULF #60.0, R2
MOVF id2, R1
ADDF R2, R1
MOVF R1, id1
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
34
I.4. Qualit dun compilateur
Fournir le maximum derreurs en
une seule compilation
une seule compilation
Rapidit
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
35
I.5. Outils pour la construction de
I.5. Outils pour la construction de
compilateurs
compilateurs
Assembleur
Assembleur
Ecriture en langage volu
Constructeurs automatiques de compilateurs : LEX et YACC
Grammaire non
Grammaire non
contextuelle du
langage
Description
des unit s
lexicales du
langage
Leila Jemni Ben Ayed
G n rateur automatique
danalyseur syntaxique
Analyseur Syntaxique
crit en C ou en LPascal
G n rateur automatique
danalyseur lexical
Analyseur lexical
crit en C ou en LPascal
Yacc
Lex
Cours Techniques de Compilation-2012-
2013
36
II. Analyse lexicale
Plan
II.1. Pr sentation g n rale
II.2. Automates finis et expressions r guli res
II.2. Automates finis et expressions r guli res
II.3. Sp cification des unit s lexicales
II.4. Reconnaissance des unit s lexicales
II.5. Conception dun g n rateur dun analyseur
lexical
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
37
II.1. Pr sentation g n rale
" Lanalyseur
lexical constitue la premi re phase dun
compilateur. Sa t che principale est de lire les caract res
dentr e et de produire comme r sultat une suite dunit s
lexicales que lanalyseur syntaxique va utiliser.
Programme
Source
Lire caract re
Rendre
caract re
Analyseur
lexical
Passer unit
lexicale et ses
lexicale et ses
attributs
Obtenir
prochaine
unit lexicale
Table des
symboles
Analyseur
syntaxique
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
38
II.1. Pr sentation g n rale
"
Rq. LAL est un sous programme de lAS. A la r ception de
prochaine unit , lAL lit les caract res dentr e jusqu ce quil puisse identifier
la prochaine unit lexicale.
Unit lexicale : produite la m me pour un ensemble de chaines de caract res
Mod le dune unit lexicale : r gle qui d crit une unit lexicale (Expression r guli re)
Lex me : une suite de caract res du PS qui concorde avec le mod le dune unit
lexicale.
Unit Lexicale
Lex mes
Description formelle des
mod les
const
if
oprel
id
nb
const
if
const
If
< <= = <> > >=
(<+<=+=+<>+>+>=)
Pi compte D2
3 6.780 6.0
lettre(lettre+chiffre)*
Chiffre+ + chiffre+.chiffre+
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
39
II.2. Automates finis et expressions
II.2. Automates finis et expressions
r guli res
r guli res
" Un analyseur lexical est bas sur les syst mes de transition (ou bien les
automates finis)
Un diagramme de transition pour la reconnaissance de >=
D but
0
>
=
1
autre
2
3
return(oprel, PGE)
*
return(oprel, PGQ)
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
40
II.2. Automates finis et expressions
II.2. Automates finis et expressions
r guli res
r guli res
Un diagramme de transition pour la reconnaissance
de >=
D but
>
0
=
1
autre
2
3
return(oprel, PGE)
*
return(oprel, PGQ)
Ce diagramme fonctionne comme suit:
Son tat de d part est l tat 0. Dans l tat 0, on lit le prochain caract re de lentr e. On suit larc
> depuis l tat 0 vers l tat 1 si le caract re dentr e est >. Sinon, on na r ussi reconna tre ni >
ni >=. En atteignant l tat 1, on lit le prochain caract re dentr e. Larc tiquet = entre l tat 1
et l tat 2 doit tre suivi si le caract re dentr e est = et le diagramme reconna t >= (PGE).
Autrement, larc tiquet autre conduit l tat 3. Le diagramme reconna t ainsi > (PGQ) et
recule dun caract re dans lentr e. On utilise une * pour signaler les tats dans lesquels ce
recul dans lentr e doit tre fait.
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
41
II.2. Automates finis et expressions
II.2. Automates finis et expressions
r guli res
r guli res
Un diagramme de transition pour la
reconnaissance des op rateurs de relation
D but
0
<
1
=
>
=
>
autre
2
3
4
return(oprel, PPE)
return(oprel, DIF)
*
return(oprel, PPQ)
5
return(oprel, EGA)
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
6
=
autre
return(oprel, PGE)
*
return(oprel, PGQ)
42
7
8
II.2. Automates finis et expressions
II.2. Automates finis et expressions
r guli res
r guli res
Un diagramme de transition pour la reconnaissance
des identificateurs et des mots cl s
lettre, chiffre
D but
0
lettre
autre
1
*
*
2
return(UnilexId(), RangerId())
Laction sp cifi e par le symbole * permet de reculer dune position sur le
fichier source apr s la consommation dun symbole autre quune lettre ou
un chiffre.
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
43
II.2. Automates finis et expressions
II.2. Automates finis et expressions
r guli res
r guli res
Les fonctions RangerId() et UnilexId()
-
-
La fonction RangerId() a acc s au tampon o lunit lexicale identificateur a t
localis e. On examine la table des symboles et si on trouve le lex me avec
lidentificateur mot cl , RangerId() rend 0. Si on trouve le lex me comme variable du
programme, RangerId() rend un pointeur vers une entr e dans la table des symboles. Si
on ne trouve pas le lex me dans la table des symboles, il y est plac en tant que
variable et un pointeur vers cette nouvelle entr e est retourn .
variable et un pointeur vers cette nouvelle entr e est retourn .
La fonction UnilexId() recherche le lex me dans la table des symboles. Si le lex me est
un mot cl , lunit lexicale correspondante est retourn e; autrement, lunit lexicale id
est retourn e.
NB.
1)
2)
Le diagramme de transition ne change pas si on doit reconna tre de nouveaux mots
cl s; on initiale simplement la table des symboles avec les nouvelles chaines et les
nouvelles unit s lexicales.
En pratique, la table des symboles peut tre r partie sur deux tables: table des
mots cl s et table des identificateurs de variables.
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
44
II.3. Sp cification des unit s lexicales
Expressions r guli res
Les expressions r guli res sont une notation importante pour
sp cifier des mod les dunit s lexicales.
Exemples:
Soit L lensemble {A, B, &, Z, a, b, &z} et C lensemble {0, 1, &9}
L+C ou(L C) est lensemble des lettres et des chiffres
L+C ou(L C) est lensemble des lettres et des chiffres
1.
1.
LC est lensemble des chaines form es dune lettre suivie
2.
dun chiffre
L4 est lensemble des chaines de quatre lettres
L* est lensemble de toutes les lettres, y compris e , la
chaine vide.
L(L+C)* est lensemble de toutes les chaines de lettres et
de chiffres commen ant par une lettre.
C+ est lensemble de toutes les chaines dau moins un
chiffre (repr sentations d cimales des entiers naturels)
3.
4.
6.
5.
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
45
II.3. Sp cification des unit s lexicales
D finitions r guli res
Soit S un alphabet de symboles de base, une d finition r guli re est une suite de
d finitions de la forme :
r1
r2
d1
d2
&&
dn
Advertisement
O chaque di est un nom distinct et chaque ri est une expression r guli re sur les
rn
symboles de S
{d1, d2, &, di-1}
Exemples:
Lettre
chiffre
id
A|B|&|Z|a|b|&|z
0|1|&|9
Lettre(Lettre + Chiffre)*
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
46
II.4. Reconnaissance des unit s
II.4. Reconnaissance des unit s
lexicales
lexicales
Nous utilisons les diagrammes de transition pour reconna tre des unit s lexicales
Exemple:
Consid rons le fragment de la grammaire suivant:
Instr
si expr alors instr
| si expr alors instr sinon instr
| id opaff id pv
| id opaff nb pv
| id opaff nb pv
terme oprel terme
| terme
id
| nb
expr
terme
O si, alors, sinon, oprel, id et nb engendrent les ensembles de chaines donn es par
les d finitions r guli res suivantes:
si
si
alors
sinon
oprel
id
alors
sinon
< | <= | = | <> | > | >=
lettre(lettre|chiffre)*
nb
opaff
pv
chiffre+
:=
;
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
47
II.4. Reconnaissance des unit s
II.4. Reconnaissance des unit s
lexicales
lexicales
Le mot en entr e dans le fichier source est le suivant :
si a1 >= b alors a1
10;
:=
N
lex me
type
Mots cl s
1
1
2
3
a1
a1
b
&
&
&
&
&
si
si
alors
Lanalyseur lexical retourne la s quence suivante dunit s
lexicales avec leurs attributs:
si
0
id
1
oprel
PGE
id
2
alors
0
id
1
opaff
:=
nb
10
pv
;
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
48
II.4. Reconnaissance des unit s
II.4. Reconnaissance des unit s
lexicales
lexicales
Rq. On suppose que les lex mes sont s par s par un
espace consistant dune suite non vide de blancs,
tabulations et fins de lignes. Notre analyseur lexical
doit liminer ces espaces en comparant une chaine
avec la d finition r guli re suivante :
D lim
D lim
bl
d lim+
blanc | tabulation | fin de ligne
blanc | tabulation | fin de ligne
Si lanalyseur lexical trouve une correspondance avec
bl, il ne retourne pas lunit lexicale lanalyseur
lunit
syntaxique.
lexicale qui suit le blanc et le retourne lanalyseur
syntaxique.
Il continue pour
rechercher
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
49
II.4. Reconnaissance des unit s lexicales
Syst me de transition associ un analyseur lexical
bl, tab, \n
l
D but
0
Echec()
autre
EOF
l, c
3
1
5
c
<
<
=
>
autre
c
2
autre
=
=
>
autre
9
*
return(UnilexId(), RangerId())
4
*
return(nb, val)
return(oprel, PPE)
return(oprel, PPE)
return(oprel, DIF)
6
7
*
return(oprel, PPQ)
8
return(oprel, EGA)
14
13
return(EOF, 0)
10
=
autre
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
return(oprel, PGE)
*
return(oprel, PGQ)
50
11
12
II.4. Reconnaissance des unit s lexicales
Syst me de transition associ un analyseur lexical
Init(Val)
bl, tab, \n
l
l, c
1
D but
0
Add(Val, c)
c
3
autre
2
Add(Val, c)
c
autre
*
return(UnilexId(), RangerId())
4
*
return(nb, conv(val))
return(oprel, PPE)
return(oprel, PPE)
return(oprel, DIF)
6
7
Erreur()
autre
EOF
5
<
<
=
>
=
=
>
autre
9
*
return(oprel, PPQ)
8
return(oprel, EGA)
14
13
return(EOF, 0)
10
=
autre
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
return(oprel, PGE)
*
return(oprel, PGQ)
51
11
12
II.4. Reconnaissance des unit s lexicales
Code C dun analyseur lexical
Unilex AnalLex() / Unilex est une chaine si Alalex retourne uniquement lunit lexicale/
{
/* Unilex est un entier si Analex retourne lunit lexicale et chaque unit est d finie comme une
constante*/
While(1)
/* Unilex est un enregistrement si Analex
retourne lunit lexicale et un attribut*/
{
Switch(etat)
Switch(etat)
{
case 0: Init(Chaine); car = carsuivant();
if(car == || car == \t || car = \n)
{ etat = 0; debutlex ++; }
else if( car == <) etat = 5;
else if (car == =) etat = 9;
else if (car == >) etat = 10;
else if (isletter(car)) Ajouter(car, chaine);
etat = 1;
else if(isdigit(car)) Ajouter(car, chaine);
etat = 3;
else if(car == EOF) etat = 13;
else Erreur();
case 1: car = carsuiv();
if(isletter(car) || isdigit(car))
ajouter(car, chaine);;
else etat = 2;
break;
case 2: Reculer(1); RangerId(); return(UniLexId()); /*
cas o lanalyseur lexical retourne uniquement
cas o lanalyseur lexical retourne uniquement
*/lunit lexicale sinon, il faut utiliser un
enregistrement (symbole)*/
&&&&.
case 3: car = carsuiv();
if(isdigit(car)) ajouter(car, chaine);
else etat = 4;
break;
case 4 : Reculer(1); Return(NB); case 6: Return(Oprel);
&&&&&
case 13: Return(EOF);
}
Leila Jemni Ben Ayed
Cours Techniques de Compilation-2012-
2013
52
II.4. Reconnaissance des unit s lexicales
Code C dun analyseur lexical (cas du retour dun enregistrement dans une
variable globale symbole deux champs (UL, Att))
Unilex AnalLex() / Unilex est une chaine si Alalex retourne uniquement lunit lexicale/
{
/* Unilex est un entier si Analex retourne lunit lexicale et chaque unit est d finie comme une
constante*/
While(1)...