Академический Документы
Профессиональный Документы
Культура Документы
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
Th
eorie des langages
N
2 / 59
Th
eorie des langages et compilation
Th
eorie des langages et compilation
Th
eorie des langages
N
3 / 59
Th
eorie des langages et compilation
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
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
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
ab
*
y
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
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
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
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
Th
eorie des langages
N
17 / 59
Th
eorie des langages et compilation
Th
eorie des langages et compilation
Th
eorie des langages
N
18 / 59
Th
eorie des langages et compilation
Th
eorie des langages
N
19 / 59
Th
eorie des langages et compilation
Analyse lexicale
Th
eorie des langages
N
20 / 59
Th
eorie des langages et compilation
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
Th
eorie des langages
N
22 / 59
Th
eorie des langages et compilation
Reconnaissance contextuelle
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
Th
eorie des langages
N
24 / 59
Th
eorie des langages et compilation
Exemple de probl`
eme de la reconnaissance contextuelle
Th
eorie des langages
N
25 / 59
Th
eorie des langages et compilation
G
en
erateurs danalyseurs lexicaux
Th
eorie des langages
N
26 / 59
Th
eorie des langages et compilation
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
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
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
Th
eorie des langages
N
31 / 59
Th
eorie des langages et compilation
$
[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
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}
<
<=
=
<>
>
>=
%%
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
Th
eorie des langages
N
37 / 59
Th
eorie des langages et compilation
Th
eorie des langages
N
38 / 59
Th
eorie des langages et compilation
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
Th
eorie des langages
N
41 / 59
Th
eorie des langages et compilation
yacc nom.y
bison nom.y
nom.tab.c
compilateur C
nom.tab.c
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
Th
eorie des langages
N
44 / 59
Th
eorie des langages et compilation
R`
egles de production
:
|
|
;
alt1
alt2
...
altn
{action s
emantique 1}
{action s
emantique 2}
{action s
emantique n}
Th
eorie des langages
N
45 / 59
Th
eorie des langages et compilation
Actions s
emantiques
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
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
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
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
Th
eorie des langages
N
52 / 59
Th
eorie des langages et compilation
Th
eorie des langages et compilation
Th
eorie des langages
N
53 / 59
Th
eorie des langages et compilation
Analyse s
emantique - pourquoi?
Th
eorie des langages
N
54 / 59
Th
eorie des langages et compilation
Analyse s
emantique - cest quoi?
Th
eorie des langages
N
55 / 59
Th
eorie des langages et compilation
Analyse s
emantique - comment?
Th
eorie des langages
N
56 / 59
Th
eorie des langages et compilation
Grammaire attribu
ee, informellement
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
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