Vous êtes sur la page 1sur 79

Th

eorie des langages

Th
eorie des langages et
compilation
Elise Bonzon
http://web.mi.parisdescartes.fr/vbonzon/
elise.bonzon@parisdescartes.fr

Th
eorie des langages
N

1 / 59

Th
eorie des langages et compilation

Th
eorie des langages et compilation

Structure dun compilateur


Analyse lexicale
Analyse syntaxique
Analyse semantique
Conclusion

Th
eorie des langages
N

2 / 59

Th
eorie des langages et compilation

Th
eorie des langages et compilation

Structure dun compilateur


Analyse lexicale
Analyse syntaxique
Analyse semantique
Conclusion

Th
eorie des langages
N

3 / 59

Th
eorie des langages et compilation

Un compilateur, cest quoi?


Un compilateur est un programme qui
prend en entree une donnee textuelle source (programme, donnee xml,
fichier de configuration, etc)
la reconnat (lanalyse) pour verifier sa correction
emet eventuellement un message derreur
le traduit dans un langage cible

programme source

Compilateur

programme cible

messages derreur

Th
eorie des langages
N

4 / 59

Th
eorie des langages et compilation

Les diff
erentes
etapes de la compilation
Programme source

Analyseur lexical

Analyseur syntaxique

Analyseur s
emantique
Table des
symboles

Erreurs
G
en
erateur de code interm
ediaire

Optimisateur de code

G
en
erateur de code

Programme cible
Th
eorie des langages
N

5 / 59

Th
eorie des langages et compilation

Les diff
erentes
etapes de la compilation
Partie analyse: s
epare les 6= constituants Programme source
du prog. source et produit une
repr
esentation interm
ediaire

Analyseur lexical

Analyseur syntaxique

Analyseur s
emantique
Table des
symboles

Erreurs
G
en
erateur de code interm
ediaire

Optimisateur de code

G
en
erateur de code

Programme cible
Th
eorie des langages
N

5 / 59

Th
eorie des langages et compilation

Les diff
erentes
etapes de la compilation
Partie analyse: s
epare les 6= constituants Programme source
du prog. source et produit une
repr
esentation interm
ediaire

Analyseur lexical

Analyseur syntaxique

Analyseur s
emantique
Table des
symboles

Erreurs
G
en
erateur de code interm
ediaire

Optimisateur de code

G
en
erateur de code
Partie synth`
ese: g
en`
ere le prog. cible `
a

Programme cible

partir de la repr
esentation interm
ediaire
Th
eorie des langages

5 / 59

Th
eorie des langages et compilation

Analyse lexicale
Programme source

Analyseur lexical

Analyseur syntaxique

Analyseur s
emantique
Table des
symboles

Erreurs
G
en
erateur de code interm
ediaire

Optimisateur de code

G
en
erateur de code

Programme cible
N

Th
eorie des langages

6 / 59

Th
eorie des langages et compilation

Analyse lexicale
Seul module au contact avec le texte source
Son but est de reconnatre les unites lexicales ou lex`emes
les identificateurs et les mots clefs du langage
laffectation et les op
erateurs

Utilise des expressions reguli`eres : automates finis


identificateur
ab := y

affectation

operateur
nombre

+ 20

Th
eorie des langages
N

7 / 59

Th
eorie des langages et compilation

Analyse syntaxique
Programme source

Analyseur lexical

Analyseur syntaxique

Analyseur s
emantique
Table des
symboles

Erreurs
G
en
erateur de code interm
ediaire

Optimisateur de code

G
en
erateur de code

Programme cible
N

Th
eorie des langages

8 / 59

Th
eorie des langages et compilation

Analyse syntaxique
Regroupe les unites lexicales en structures grammaticales en suivant les
r`egles figurant dans une grammaire
Resultat represente par un arbre syntaxique
La structure hierarchique dun programme est exprimee `
a laide de r`egles
Tout identificateur est une expression
Tout nombre est une expression
Si expr 1 et expr 2 sont des expressions alors expr 1 expr 2 est une expression

Grammaires hors contexte : automates `


a pile
:=

ab

20

*
y

x
Th
eorie des langages

9 / 59

Th
eorie des langages et compilation

Analyse s
emantique
Programme source

Analyseur lexical

Analyseur syntaxique

Analyseur s
emantique
Table des
symboles

Erreurs
G
en
erateur de code interm
ediaire

Optimisateur de code

G
en
erateur de code

Programme cible
N

Th
eorie des langages

10 / 59

Th
eorie des langages et compilation

Analyse s
emantique
Verifie la presence derreurs dordre semantique
V
erification de typage
V
erification des d
eclarations

Par exemple, si x et y sont des reels :


:=

ab

*
y

conversion entier -> r


eel

20

Th
eorie des langages
N

11 / 59

Th
eorie des langages et compilation

Partie synth`
ese
Programme source

Analyseur lexical

Analyseur syntaxique

Analyseur s
emantique
Table des
symboles

Erreurs
G
en
erateur de code interm
ediaire

Optimisateur de code

G
en
erateur de code

Programme cible
N

Th
eorie des langages

12 / 59

Th
eorie des langages et compilation

Partie synth`
ese

Generation du code intermediaire


Utilisation de variables temporaires
Choix de lordre pour faire un calcul

Optimisation du code
Am
elioration du code interm
ediaire
R
eduction du nombre de variables et dinstructions

Generation du code
Choix des emplacements m
emoire pour les variables
Assignation de variables aux registres

Th
eorie des langages
N

13 / 59

Th
eorie des langages et compilation

Table des symboles


Programme source

Analyseur lexical

Analyseur syntaxique

Analyseur s
emantique
Table des
symboles

Erreurs
G
en
erateur de code interm
ediaire

Optimisateur de code

G
en
erateur de code

Programme cible
N

Th
eorie des langages

14 / 59

Th
eorie des langages et compilation

Table des symboles

Enregistre les identifiants et les attributs (emplacement memoire, type,


portee)
Chaque identifiant (variable) a une entree dans la table des symboles
Lanalyseur lexical cree une entree dans la table des symboles `
a chaque
fois quil rencontre un nouvel identificateur
Par contre, les attributs seront calcul
es plus tard

Lanalyseur semantique se sert de la table des symboles pour verifier la


concordance des types

Th
eorie des langages
N

15 / 59

Th
eorie des langages et compilation

D
etection des erreurs
Programme source

Analyseur lexical

Analyseur syntaxique

Analyseur s
emantique
Table des
symboles

Erreurs
G
en
erateur de code interm
ediaire

Optimisateur de code

G
en
erateur de code

Programme cible
N

Th
eorie des langages

16 / 59

Th
eorie des langages et compilation

D
etection des erreurs

Erreur lexicale : le flot de caract`eres nest pas reconnu


Erreur syntaxique : construction non reconnue par le langage
Erreur semantique : probl`eme de typage,...

Th
eorie des langages
N

17 / 59

Th
eorie des langages et compilation

Th
eorie des langages et compilation

Structure dun compilateur


Analyse lexicale
Analyse syntaxique
Analyse semantique
Conclusion

Th
eorie des langages
N

18 / 59

Th
eorie des langages et compilation

Analyseur lexical et analyseur syntaxique


Lanalyse lexicale produit des lex`emes
En g
en
eral `
a la vol
ee `
a la demande de lanalyseur syntaxique
Lanalyseur syntaxique demande le prochain lex`
eme `
a lanalyseur lexical,
qui le reconnat et retourne un code identifiant ce lex`
eme

On pourrait imaginer que lanalyse lexicale travaille independamment et


fournisse une suite de lex`emes
mais on na pas besoin, en g
en
eral, davoir reconnu tous les lex`
emes pour
faire lanalyse syntaxique : la connaissance du lex`
eme courant suffit pour la
plupart des m
ethodes utilis
ees
et malheureusement, pour certains langages (C notamment), la
reconnaissance dun lex`
eme d
epend du contexte grammatical dans lequel il
se trouve

Th
eorie des langages
N

19 / 59

Th
eorie des langages et compilation

Analyse lexicale

Chaque lex`eme est un mot dun langage


Dans la plupart des cas, langage qui peut
etre repr
esent
e par une
expression r
eguli`
ere,
par exemple ((A Z ) + (a z))((A Z ) + (a z) + (0 9)) pour
reconnatre des identificateurs du genre X , Compteur , i3, R2D2, . . .
Langage fini pour de nombreux lex`
emes : +, ==, for , . . .

Lanalyseur lexical est donc un (gros) automate fini deterministe qui


reconnat lunion des langages des lex`emes
un
etat terminal correspond `
a la reconnaissance dun mot dun des
langages des lex`
emes

Th
eorie des langages
N

20 / 59

Th
eorie des langages et compilation

Fragment dautomate lexical


q2
f

a-z
a-z sauf f

q1

q3

a-z

0-9

a-z sauf i

i
0-9

q0

q4

q5

0-9

q6

=
0-9
q7

q8
Th
eorie des langages

21 / 59

Th
eorie des langages et compilation

Analyse lexicale

Analyseur lexical : En general pas tout `


a fait un automate deterministe
Certains lex`emes sont prefixes dun autre
+, +=, ++ ; = et ==
mots-cl
es et identificateurs (for et forme)
entiers et r
eels (3 et 3.14)

Le principe est de reconnatre le mot le plus long


Un etat terminal nimplique donc pas toujours larret de lautomate : il
peut continuer, et eventuellement revenir en arri`ere au dernier etat final
rencontre

Th
eorie des langages
N

22 / 59

Th
eorie des langages et compilation

Reconnaissance contextuelle

Il existe des langages o`


u une forme lexicale peut correspondre `
a differents
lex`emes selon le contexte
selon le contexte gauche : par exemple, if reconnu comme mot-cl
e
uniquement sil est au d
ebut dune instruction
selon le contexte droit : par exemple if reconnu comme mot-cl
e
uniquement sil est suivi dune parenth`
ese
Combinaison des deux

Th
eorie des langages
N

23 / 59

Th
eorie des langages et compilation

Probl`
emes de la reconnaissance contextuelle
Dans des langages mal definis
Pour les langages de programmation, dans des langages anciens (Fortran,
partiellement C, . . .)
Ils ne peuvent en general pas etre resolus par le seul analyseur lexical : les
contextes sont le plus souvent des langages non-contextuels reconnus par
lanalyseur syntaxique
Donc forte interaction entre les deux analyseurs
Entraine des probl`
emes de lisibilit
e, de fiabilit
e et des difficult
es `
a la
maintenance et aux extensions

Cest pourquoi les langages modernes de programmation evitent ces


questions de reconnaissance contextuelle
Mais pas les langages de script, de description, . . . concus la plupart du
temps par des non sp
ecialistes des langages

Th
eorie des langages
N

24 / 59

Th
eorie des langages et compilation

Exemple de probl`
eme de la reconnaissance contextuelle

en Fortran, les espaces sont non significatifs


DO12I = 1.25 : identificateur DO12I , op
erateur daffectation =, r
eel 1.25
DO12I = 1,25 : mot-cl
e DO, etiquette 12, variable I : boucle qui se
termine `
a l
enonc
e
etiquet
e 12 pour i allant de 1 `
a 25
dapr`
es la l
egende, on aurait perdu une fus
ee du projet Mercury `
a cause
dun . `
a la place dune , (`
a moins que ce ne soit linverse. . .)

Dans la plupart des langages de programmation actuels, les espaces sont


significatifs, et les mots-cles sont reserves

Th
eorie des langages
N

25 / 59

Th
eorie des langages et compilation

G
en
erateurs danalyseurs lexicaux

Langage C : lex ou flex


Langage Ada : Alex
Langage Java : Jflex
Langage OCaml : OCamllex

Th
eorie des langages
N

26 / 59

Th
eorie des langages et compilation

Construire un analyseur lexical avec lex

compilateur (f)lex
programme source (f)lex
nom.l

lex nom.l
flex nom.l

nom.yy.c

compilateur C
gcc nom.yy.c -ll
gcc nom.yy.c -lfl

nom.yy.c

a.out

Th
eorie des langages
N

27 / 59

Th
eorie des langages et compilation

Sp
ecifications en lex

d
eclarations
%%
r`
egles de traduction
%%
proc
edures auxiliaires

Th
eorie des langages
N

28 / 59

Th
eorie des langages et compilation

D
eclarations

La section des declarations comprend des


d
eclarations de variables,
constantes litt
erales
d
efinitions r
eguli`
eres

Une constante litterale est un identificateur qui est declare pour


representer une constante
Une definition reguli`ere permet dassocier un nom `
a une expression
reguli`ere

Th
eorie des langages
N

29 / 59

Th
eorie des langages et compilation

R`
egles de traduction
Les r`egles de traduction sont des instructions de la forme :
exp1
exp2
...
expn

action1
action2
actionn

chaque expi est une expression reguli`ere


chaque actioni est une suite dinstruction en C qui decrit quelle action
lanalyseur lexical devrait realiser quand un lex`eme concorde avec le
mod`ele expi
Les procedures auxilliaires sont les fonctions facultatives qui pourraient
etre utiles dans les actions.

Th
eorie des langages
N

30 / 59

Th
eorie des langages et compilation

Analyseur lexical
Analyseur lexical active par lanalyseur syntaxique :
Lit le texte dentr
ee, caract`
ere par caract`
ere
Cherche le plus long pr
efixe du texte dentr
ee qui corresponde `
a lune des
expressions r
eguli`
eres expi
Ex
ecute alors laction actioni

Action : rend le contr


ole `
a lanalyseur syntaxique
Sinon, lanalyseur lexical continue `
a chercher dautres lex`emes jusqu`
a ce
quune action rende le contr
ole `
a lanalyseur syntaxique
La recherche repetee de lex`emes jusqu`
a un retour explicite permet `
a
lanalyseur lexical de traiter les espaces et les commentaires de mani`ere
simple
Seule information retournee `
a lanalyseur syntaxique : lunit
e lexicale
Pour passer une valeur dattribut donnant des informations sur le lex`eme,
on peut laffecter `
a une variable globale appelee yylval.

Th
eorie des langages
N

31 / 59

Th
eorie des langages et compilation

Tableau des expressions r


eguli`
eres (1/2)
expression
c
\c
s
r1 r2
.

$
[s]
[^s]
r
r+
r?

reconnat
tout caract`ere c qui nest pas un operateur
caract`ere litteral c
la chane de caract`ere s
r1 suivie de r2
tout caract`ere sauf fin de ligne
debut de ligne
fin de ligne
tout caract`ere appartenant `a s
tout caract`ere nappartenant pas `a s
0 ou plusieurs occurences de r
1 ou plusieurs occurences de r
0 ou 1 occurence de r

exemple
a
\+
abc*
ab
a.b
^abc
abc$
[s]
[^abc]
a
a+
a?

Th
eorie des langages
N

32 / 59

Th
eorie des langages et compilation

Tableau des expressions r


eguli`
eres (2/2)

expression
r{m}
r{m,n}
r1 |r2
r1 /r2
(r)
\n
\t

reconnat
m occurences de r
entre m et n occurences de r
r1 ou r2
r1 si elle est suivie de r2
r
retour `a la ligne
tabulation

exemple
a{3}
a{3,8}
a|b
abc/123
(a|b)

Th
eorie des langages
N

33 / 59

Th
eorie des langages et compilation

Exemple d
eclarations
%{
/* d
efinitions des constantes litt
erales */
PPQ, PPE, EGA, DIF, PGQ, PGE, SI, ALORS, SINON, ID, NB, OPREL
%}
/* d
efinitions r
eguli`
eres */
delim
[ \n\t]
bl
{delim}+
lettre
[A-Za-z]
chiffre
[0-9]
id
{lettre}+ ({lettre}|{chiffre})
nombre
{chiffre}+ (\.{chiffre}+ )? (E[+\-]? {chiffre}+ )?
%%

Th
eorie des langages
N

34 / 59

Th
eorie des langages et compilation

Exemple r`
egles de traduction
{bl}
si
alors
sinon
{id}
{nombre}
<
<=
=
<>
>
>=

{/* pas daction et pas de retour */}


{return(SI);}
{return(ALORS);}
{return(SINON);}
{yylval = RangerId(); return(ID);}
{yylval = RangerNb(); return(NB);}
{yylval = PPQ; return(OPREL);}
{yylval = PPE; return(OPREL);}
{yylval = EGA; return(OPREL);}
{yylval = DIF; return(OPREL);}
{yylval = PGQ; return(OPREL);}
{yylval = PGE; return(OPREL);}

%%

Th
eorie des langages
N

35 / 59

Th
eorie des langages et compilation

Exemple proc
edures auxiliaires

RangerId() {
/* Proc
edure pour ranger dans la table des symboles le lex`
eme
dont le premier caract`
ere est point
e par yytext et dont la
longueur est yyleng et retourner un pointeur sur son entr
ee */
}
RangerNb() {
\begin{block}
/* proc
edure similaire pour ranger un lex`
eme qui est un
nombre */
}

Th
eorie des langages
N

36 / 59

Th
eorie des langages et compilation

Th
eorie des langages et compilation

Structure dun compilateur


Analyse lexicale
Analyse syntaxique
Analyse semantique
Conclusion

Th
eorie des langages
N

37 / 59

Th
eorie des langages et compilation

Quest ce que lanalyse syntaxique?


Lanalyse syntaxique a pour but :
de v
erifier que le texte dentr
ee est conforme `
a la grammaire
dindiquer les erreurs de syntaxe
de construire une repr
esentation interm
ediaire pour les autres modules du
compilateur
arbre de syntaxe abstraite, utilis
e par la suite de la compilation

Ne soccupe pas des aspects contextuels de la syntaxe


par exemple d
etecter lerreur dans int i; . . .; i = abcd;
cest le r
ole de lanalyse s
emantique, qui travaille sur la repr
esentation
interm
ediaire

Representation unique du texte source lanalyse doit etre deterministe,


si possible lineaire (eviter notamment les retours en arri`ere)

Th
eorie des langages
N

38 / 59

Th
eorie des langages et compilation

Types danalyseurs syntaxiques

Analyseur syntaxique descendant, ou analyseur pr


edictif
Construit larbre de d
erivation `
a partir de sa racine et en effectuant des
d
erivations en consid
erant la t
ete des r`
egles de production et en faisant
des d
erivations les plus `
a gauche
Famille des analyseurs LL (left scanning, leftmost derivation)
JavaCC, ANTLR, LLGen, . . .

Analyseur syntaxique ascendant ou par d


ecalage-r
eduction
Construit larbre de d
erivation `
a partir de ses feuilles et en effectuant des
d
erivations en consid
erant la partie droite des r`
egles de production et en
faisant des d
erivations les plus `
a gauche
Famille des analyseurs LR (left scanning, rightmost derivation)
YACC/Bison

Th
eorie des langages
N

39 / 59

Th
eorie des langages et compilation

Exemple
Soit G = hV , , P, Si avec
= {a, b, c, d}
V \ = {S, T }
6 r`egles de production :
S aSbT |cT |d
T aT |bS|c

Th
eorie des langages
N

40 / 59

Th
eorie des langages et compilation

Exemple
Soit G = hV , , P, Si avec
= {a, b, c, d}
V \ = {S, T }
6 r`egles de production :
S aSbT |cT |d
T aT |bS|c

Soit w = accbbadbc

Th
eorie des langages
N

40 / 59

Th
eorie des langages et compilation

Exemple
Soit G = hV , , P, Si avec
= {a, b, c, d}
V \ = {S, T }
6 r`egles de production :
S aSbT |cT |d
T aT |bS|c

Soit w = accbbadbc

Analyse LL :
S

Th
eorie des langages
N

40 / 59

Th
eorie des langages et compilation

Exemple
Soit G = hV , , P, Si avec
= {a, b, c, d}
V \ = {S, T }
6 r`egles de production :
S aSbT |cT |d
T aT |bS|c

Soit w = accbbadbc

Analyse LL :
S

aSbT

Th
eorie des langages
N

40 / 59

Th
eorie des langages et compilation

Exemple
Soit G = hV , , P, Si avec
= {a, b, c, d}
V \ = {S, T }
6 r`egles de production :
S aSbT |cT |d
T aT |bS|c

Soit w = accbbadbc

Analyse LL :
S

aSbT
acT bT

Th
eorie des langages
N

40 / 59

Th
eorie des langages et compilation

Exemple
Soit G = hV , , P, Si avec
= {a, b, c, d}
V \ = {S, T }
6 r`egles de production :
S aSbT |cT |d
T aT |bS|c

Soit w = accbbadbc

Analyse LL :
S

aSbT
acTbT
accbT

Th
eorie des langages
N

40 / 59

Th
eorie des langages et compilation

Exemple
Soit G = hV , , P, Si avec
= {a, b, c, d}
V \ = {S, T }
6 r`egles de production :
S aSbT |cT |d
T aT |bS|c

Soit w = accbbadbc

Analyse LL :
S

aSbT
acTbT
accbT
accbbS

Th
eorie des langages
N

40 / 59

Th
eorie des langages et compilation

Exemple
Soit G = hV , , P, Si avec
= {a, b, c, d}
V \ = {S, T }
6 r`egles de production :
S aSbT |cT |d
T aT |bS|c

Soit w = accbbadbc

Analyse LL :
S

aSbT
acTbT
accbT
accbbS
accbbaSbT

Th
eorie des langages
N

40 / 59

Th
eorie des langages et compilation

Exemple
Soit G = hV , , P, Si avec
= {a, b, c, d}
V \ = {S, T }
6 r`egles de production :
S aSbT |cT |d
T aT |bS|c

Soit w = accbbadbc

Analyse LL :
S

aSbT
acTbT
accbT
accbbS
accbbaSbT

accbbadbT

Th
eorie des langages
N

40 / 59

Th
eorie des langages et compilation

Exemple
Soit G = hV , , P, Si avec
= {a, b, c, d}
V \ = {S, T }
6 r`egles de production :
S aSbT |cT |d
T aT |bS|c

Soit w = accbbadbc

Analyse LL :
S

aSbT
acTbT
accbT
accbbS
accbbaSbT

accbbadbT
accbbadbc

Th
eorie des langages
N

40 / 59

Th
eorie des langages et compilation

Exemple
Soit G = hV , , P, Si avec
= {a, b, c, d}
V \ = {S, T }
6 r`egles de production :
S aSbT |cT |d
T aT |bS|c

Soit w = accbbadbc

Analyse LL :
S

aSbT
acTbT
accbT
accbbS
accbbaSbT

accbbadbT
accbbadbc

Analyse LR :
accbbadbc

Th
eorie des langages
N

40 / 59

Th
eorie des langages et compilation

Exemple
Soit G = hV , , P, Si avec
= {a, b, c, d}
V \ = {S, T }
6 r`egles de production :
S aSbT |cT |d
T aT |bS|c

Soit w = accbbadbc

Analyse LL :
S

aSbT
acTbT
accbT
accbbS
accbbaSbT

accbbadbT
accbbadbc

Analyse LR :
accbbadbc

Th
eorie des langages
N

40 / 59

Th
eorie des langages et compilation

Exemple
Soit G = hV , , P, Si avec
= {a, b, c, d}
V \ = {S, T }
6 r`egles de production :
S aSbT |cT |d
T aT |bS|c

Soit w = accbbadbc

Analyse LL :
S

aSbT
acTbT
accbT
accbbS
accbbaSbT

accbbadbT
accbbadbc

Analyse LR :
accbbadbc

acT bbadbc

Th
eorie des langages
N

40 / 59

Th
eorie des langages et compilation

Exemple
Soit G = hV , , P, Si avec
= {a, b, c, d}
V \ = {S, T }
6 r`egles de production :
S aSbT |cT |d
T aT |bS|c

Soit w = accbbadbc

Analyse LL :
S

aSbT
acTbT
accbT
accbbS
accbbaSbT

accbbadbT
accbbadbc

Analyse LR :
accbbadbc

acTbbadbc
aSbbadbc
Th
eorie des langages
N

40 / 59

Th
eorie des langages et compilation

Exemple
Soit G = hV , , P, Si avec
= {a, b, c, d}
V \ = {S, T }
6 r`egles de production :
S aSbT |cT |d
T aT |bS|c

Soit w = accbbadbc

Analyse LL :
S

aSbT
acTbT
accbT
accbbS
accbbaSbT

accbbadbT
accbbadbc

Analyse LR :
accbbadbc

acTbbadbc
aSbbadbc
aSbbaSbc
Th
eorie des langages
N

40 / 59

Th
eorie des langages et compilation

Exemple
Soit G = hV , , P, Si avec
= {a, b, c, d}
V \ = {S, T }
6 r`egles de production :
S aSbT |cT |d
T aT |bS|c

Soit w = accbbadbc

Analyse LL :
S

aSbT
acTbT
accbT
accbbS
accbbaSbT

accbbadbT
accbbadbc

Analyse LR :
accbbadbc

acTbbadbc
aSbbadbc
aSbbaSbc
aSbbaSbT
Th
eorie des langages
N

40 / 59

Th
eorie des langages et compilation

Exemple
Soit G = hV , , P, Si avec
= {a, b, c, d}
V \ = {S, T }
6 r`egles de production :
S aSbT |cT |d
T aT |bS|c

Soit w = accbbadbc

Analyse LL :
S

aSbT
acTbT
accbT
accbbS
accbbaSbT

accbbadbT
accbbadbc

Analyse LR :
accbbadbc

acTbbadbc
aSbbadbc
aSbbaSbc
aSbbaSbT

aSbbS
Th
eorie des langages
N

40 / 59

Th
eorie des langages et compilation

Exemple
Soit G = hV , , P, Si avec
= {a, b, c, d}
V \ = {S, T }
6 r`egles de production :
S aSbT |cT |d
T aT |bS|c

Soit w = accbbadbc

Analyse LL :
S

aSbT
acTbT
accbT
accbbS
accbbaSbT

accbbadbT
accbbadbc

Analyse LR :
accbbadbc

acTbbadbc
aSbbadbc
aSbbaSbc
aSbbaSbT

aSbbS
aSbT
Th
eorie des langages
N

40 / 59

Th
eorie des langages et compilation

Exemple
Soit G = hV , , P, Si avec
= {a, b, c, d}
V \ = {S, T }
6 r`egles de production :
S aSbT |cT |d
T aT |bS|c

Soit w = accbbadbc

Analyse LL :
S

aSbT
acTbT
accbT
accbbS
accbbaSbT

accbbadbT
accbbadbc

Analyse LR :
accbbadbc

acTbbadbc
aSbbadbc
aSbbaSbc
aSbbaSbT

aSbbS
aSbT
S
Th
eorie des langages
N

40 / 59

Th
eorie des langages et compilation

Constructeur
yacc/bison

danalyseur

LR

yacc : Yet Another Compiler Compiler (Unix)


bison en version libre (Linux)
1`ere version dans les annees 70 par Stephen Curtis Johnson
Prend une grammaire hors contexte en entree, produit lanalyseur
correspondant
Le programme produit est en langage C

Th
eorie des langages
N

41 / 59

Th
eorie des langages et compilation

Construire un analyseur syntaxique avec


yacc
compilateur yacc/bison
specification yacc/bison
nom.y

yacc nom.y
bison nom.y

nom.tab.c

compilateur C
nom.tab.c

gcc nom.tab.c -ly

a.out

Th
eorie des langages
N

42 / 59

Th
eorie des langages et compilation

Sp
ecifications en yacc

d
eclarations
%%
r`
egles de production et routines s
emantiques
%%
routines C et bloc principal

Th
eorie des langages
N

43 / 59

Th
eorie des langages et compilation

D
eclarations
La section des declarations contient 2 parties optionnelles
1`ere partie : declarations en C
d
elimit
ees par %{ et %}
d
eclarations des variables temporaires utilis
ees par les r`
egles de traduction
proc
edures de la deuxi`
eme et troisi`
eme section

2nde partie : declarations dunites lexicales de la grammaire


Symboles terminaux :
unit
es lexicales, d
eclar
ees par %token
%token
NOMBRE
caract`
eres, entre quotes : a, +

Symboles non terminaux : chanes de caract`eres non declarees comme


unites lexicales

Th
eorie des langages
N

44 / 59

Th
eorie des langages et compilation

R`
egles de production

Une r`egle de production de la grammaire du type :


non-terminal alt1 | alt2 | . . . | altn
secrirait en yacc :
non-terminal

:
|
|
;

alt1
alt2
...
altn

{action s
emantique 1}
{action s
emantique 2}
{action s
emantique n}

La partie gauche de la premi`ere r`egle de production est laxiome de la


grammaire

Th
eorie des langages
N

45 / 59

Th
eorie des langages et compilation

Actions s
emantiques

Une action semantique est une suite dinstructions en C


Elles sont executees `
a chaque fois quil y a reduction par la production
associee
Syntaxe dune action semantique :
Symbole $$ r
ef
erence la valeur de lattribut associ
e au non terminal de la
partie gauche de la r`
egle
Symbole $i repr
esente la valeur associ
ee au i`
eme symbole (terminal ou
non) en partie droite de la r`
egle.
Exemple :
expr : expr + term
{$$ = $1 + $3}
;

Th
eorie des langages
N

46 / 59

Th
eorie des langages et compilation

Routines annexes
En langage C
Un analyseur lexical nomme yylex() doit etre fourni
Dautres procedures comme les routines de recuperation derreur peuvent
etre ajoutees si necessaire
Lanalyseur lexical yylex() produit des couples formes dune unite lexicale
et de la valeur de lattribut associe
Si une unite lexicale est retournee, elle doit etre declaree dans la premi`ere
section de la specification yacc
La valeur de lattribut associee `
a une unite lexicale est communiquee `
a
lanalyseur syntaxique par lintermediaire de la variable yylval predefinie
dans yacc

Th
eorie des langages
N

47 / 59

Th
eorie des langages et compilation

Exemple

Grammaire
E

T
F

des expressions arithmetiques :


E + T |T
T F |F
(E )|chiffre

Lunite lexicale chiffre designe un chiffre unique compris entre 0 et 9

Th
eorie des langages
N

48 / 59

Th
eorie des langages et compilation

Exemple d
eclarations et r`
egles de production
%{
#include <ctype.h>
%}
%token CHIFFRES
%%
ligne
expr

term

facteur

:
;
:
|
;
:
|
;
:
|
;

expr \n

{printf(%d\n, $1);}

expr + term
term

{$$ = $1 + $3;}

term * facteur
facteur

{$$ = $1 * $3;}

( expr )
CHIFFRE

{$$ = $2;}

%%

Th
eorie des langages
N

49 / 59

Th
eorie des langages et compilation

Exemple Routines annexes

yylex()
{
int c;
c = getchar();
if (isdigit(c))
{
yyval = c - 0;
return CHIFFRE;
}
return c
}

Th
eorie des langages
N

50 / 59

Th
eorie des langages et compilation

Utilisation conjointe de lex et yacc

lex a ete concu pour produire des analyseurs lexicaux qui peuvent etre
utilises avec des analyseurs syntaxiques faits avec yacc
Pour utiliser lex, il faut remplacer la routine yylex() par la clause :
#include "lex.yy.c"
Specifier chaque action lex de facon `
a ce quelle retourne un terminal
connu de yacc

Th
eorie des langages
N

51 / 59

Th
eorie des langages et compilation

Utilisation conjointe de lex et yacc

Specification lex : fichier nom.l


Specification yacc : fichier synt.y
Compilation :
lex nom.l
yacc synt.y
gcc -ly -ll y.tab.c
On obtient un executable a.out qui permet de traduire le langage desire

Th
eorie des langages
N

52 / 59

Th
eorie des langages et compilation

Th
eorie des langages et compilation

Structure dun compilateur


Analyse lexicale
Analyse syntaxique
Analyse semantique
Conclusion

Th
eorie des langages
N

53 / 59

Th
eorie des langages et compilation

Analyse s
emantique - pourquoi?

Correction syntaxique insuffisante


Exemple : 3 + true > 2 syntaxiquement correct
Necessite dune analyse semantique

Th
eorie des langages
N

54 / 59

Th
eorie des langages et compilation

Analyse s
emantique - cest quoi?

Dans le compilateur dun langage de programmation :


Calcul dun arbre abstrait
D
ecor
e par des informations qui pr
eparent la g
en
eration de code (ex :
adresses m
emoire)
V
erifications s
emantiques : de type, des d
eclarations, etc.

Applications de traitement de donnees textuelles : calculs divers.

Th
eorie des langages
N

55 / 59

Th
eorie des langages et compilation

Analyse s
emantique - comment?

Lanalyse semantique calcule des donnees (ex : types, arbres)


Comment exprimer ces calculs ?
Le plus naturel est de le faire en fonction de sa grammaire : on parle de
traduction dirigee par la syntaxe
On enrichit les grammaires algebriques par 2 concepts :
donn
ees
calculs

et on obtient une grammaire attribuee

Th
eorie des langages
N

56 / 59

Th
eorie des langages et compilation

Grammaire attribu
ee, informellement

Cest une grammaire algebrique, plus :


des attributs (les donn
ees) associ
es aux terminaux et non-terminaux
des r`
egles (ou actions s
emantiques) associ
ees aux productions (les calculs
des donn
ees)

Exemple :
E E +T
{E0 .val = E1 .val + T .val}

Th
eorie des langages
N

57 / 59

Th
eorie des langages et compilation

Th
eorie des langages et compilation

Structure dun compilateur


Analyse lexicale
Analyse syntaxique
Analyse semantique
Conclusion

Th
eorie des langages
N

58 / 59

Th
eorie des langages et compilation

Conclusion
Partie analyse: s
epare les 6= constituants Programme source
du prog. source et produit une
repr
esentation interm
ediaire

Analyseur lexical

Analyseur syntaxique

Analyseur s
emantique
Table des
symboles

Erreurs
G
en
erateur de code interm
ediaire

Optimisateur de code

G
en
erateur de code
Partie synth`
ese: g
en`
ere le prog. cible `
a

Programme cible

partir de la repr
esentation interm
ediaire
Th
eorie des langages
N

59 / 59

Vous aimerez peut-être aussi