Compilation
description
Transcript of Compilation
-
Theorie des langages
Theorie des langages etcompilation
Elise Bonzonhttp://web.mi.parisdescartes.fr/vbonzon/
1 / 59Theorie des langages
N
-
Theorie des langages et compilation
Theorie des langages et compilation
Structure dun compilateurAnalyse lexicaleAnalyse syntaxiqueAnalyse semantiqueConclusion
2 / 59Theorie des langages
N
-
Theorie des langages et compilation
Theorie des langages et compilation
Structure dun compilateurAnalyse lexicaleAnalyse syntaxiqueAnalyse semantiqueConclusion
3 / 59Theorie des langages
N
-
Theorie 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
4 / 59Theorie des langages
N
-
Theorie des langages et compilation
Les differentes etapes de la compilation
Table des
symboles
Programme source
Analyseur lexical
Analyseur syntaxique
Analyseur semantique
Generateur de code intermediaire
Optimisateur de code
Generateur de code
Programme cible
Erreurs
5 / 59Theorie des langages
N
-
Theorie des langages et compilation
Les differentes etapes de la compilation
Table des
symboles
Programme source
Analyseur lexical
Analyseur syntaxique
Analyseur semantique
Generateur de code intermediaire
Optimisateur de code
Generateur de code
Programme cible
Erreurs
Partie analyse: separe les 6= constituantsdu prog. source et produit une
representation intermediaire
5 / 59Theorie des langages
N
-
Theorie des langages et compilation
Les differentes etapes de la compilation
Table des
symboles
Programme source
Analyseur lexical
Analyseur syntaxique
Analyseur semantique
Generateur de code intermediaire
Optimisateur de code
Generateur de code
Programme cible
Erreurs
Partie analyse: separe les 6= constituantsdu prog. source et produit une
representation intermediaire
Partie synthe`se: gene`re le prog. cible a`
partir de la representation intermediaire
5 / 59Theorie des langages
N
-
Theorie des langages et compilation
Analyse lexicale
Table des
symboles
Programme source
Analyseur lexical
Analyseur syntaxique
Analyseur semantique
Generateur de code intermediaire
Optimisateur de code
Generateur de code
Programme cible
Erreurs
6 / 59Theorie des langages
N
-
Theorie des langages et compilation
Analyse lexicale
Seul module au contact avec le texte source
Son but est de reconnatre les unites lexicales ou lexe`mes
les identificateurs et les mots clefs du langagelaffectation et les operateurs
Utilise des expressions regulie`res : automates finis
ab := y * x + 20
identificateur
affectationoperateur
nombre
7 / 59Theorie des langages
N
-
Theorie des langages et compilation
Analyse syntaxique
Table des
symboles
Programme source
Analyseur lexical
Analyseur syntaxique
Analyseur semantique
Generateur de code intermediaire
Optimisateur de code
Generateur de code
Programme cible
Erreurs
8 / 59Theorie des langages
N
-
Theorie des langages et compilation
Analyse syntaxique
Regroupe les unites lexicales en structures grammaticales en suivant lesre`gles figurant dans une grammaire
Resultat represente par un arbre syntaxique
La structure hierarchique dun programme est exprimee a` laide de re`glesTout identificateur est une expressionTout nombre est une expressionSi expr1 et expr2 sont des expressions alors expr1 expr2 est une expression
Grammaires hors contexte : automates a` pile
ab
:=
y
*
x
+
20
9 / 59Theorie des langages
N
-
Theorie des langages et compilation
Analyse semantique
Table des
symboles
Programme source
Analyseur lexical
Analyseur syntaxique
Analyseur semantique
Generateur de code intermediaire
Optimisateur de code
Generateur de code
Programme cible
Erreurs
10 / 59Theorie des langages
N
-
Theorie des langages et compilation
Analyse semantique
Verifie la presence derreurs dordre semantique
Verification de typageVerification des declarations
Par exemple, si x et y sont des reels :
ab
:=
y
*
x
+
conversion entier -> reel
20
11 / 59Theorie des langages
N
-
Theorie des langages et compilation
Partie synthe`se
Table des
symboles
Programme source
Analyseur lexical
Analyseur syntaxique
Analyseur semantique
Generateur de code intermediaire
Optimisateur de code
Generateur de code
Programme cible
Erreurs
12 / 59Theorie des langages
N
-
Theorie des langages et compilation
Partie synthe`se
Generation du code intermediaire
Utilisation de variables temporairesChoix de lordre pour faire un calcul
Optimisation du code
Amelioration du code intermediaireReduction du nombre de variables et dinstructions
Generation du code
Choix des emplacements memoire pour les variablesAssignation de variables aux registres
13 / 59Theorie des langages
N
-
Theorie des langages et compilation
Table des symboles
Table des
symboles
Programme source
Analyseur lexical
Analyseur syntaxique
Analyseur semantique
Generateur de code intermediaire
Optimisateur de code
Generateur de code
Programme cible
Erreurs
14 / 59Theorie des langages
N
-
Theorie 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` chaquefois quil rencontre un nouvel identificateur
Par contre, les attributs seront calcules plus tard
Lanalyseur semantique se sert de la table des symboles pour verifier laconcordance des types
15 / 59Theorie des langages
N
-
Theorie des langages et compilation
Detection des erreurs
Table des
symboles
Programme source
Analyseur lexical
Analyseur syntaxique
Analyseur semantique
Generateur de code intermediaire
Optimisateur de code
Generateur de code
Programme cible
Erreurs
16 / 59Theorie des langages
N
-
Theorie des langages et compilation
Detection des erreurs
Erreur lexicale : le flot de caracte`res nest pas reconnu
Erreur syntaxique : construction non reconnue par le langage
Erreur semantique : proble`me de typage,...
17 / 59Theorie des langages
N
-
Theorie des langages et compilation
Theorie des langages et compilation
Structure dun compilateurAnalyse lexicaleAnalyse syntaxiqueAnalyse semantiqueConclusion
18 / 59Theorie des langages
N
-
Theorie des langages et compilation
Analyseur lexical et analyseur syntax-ique
Lanalyse lexicale produit des lexe`mes
En general a` la volee a` la demande de lanalyseur syntaxiqueLanalyseur syntaxique demande le prochain lexe`me a` lanalyseur lexical,qui le reconnat et retourne un code identifiant ce lexe`me
On pourrait imaginer que lanalyse lexicale travaille independamment etfournisse une suite de lexe`mes
mais on na pas besoin, en general, davoir reconnu tous les lexe`mes pourfaire lanalyse syntaxique : la connaissance du lexe`me courant suffit pour laplupart des methodes utiliseeset malheureusement, pour certains langages (C notamment), lareconnaissance dun lexe`me depend du contexte grammatical dans lequel ilse trouve
19 / 59Theorie des langages
N
-
Theorie des langages et compilation
Analyse lexicale
Chaque lexe`me est un mot dun langage
Dans la plupart des cas, langage qui peut etre represente par uneexpression regulie`re,par exemple ((A Z) + (a z))((A Z) + (a z) + (0 9)) pourreconnatre des identificateurs du genre X , Compteur , i3, R2D2, . . .Langage fini pour de nombreux lexe`mes : +, ==, for , . . .
Lanalyseur lexical est donc un (gros) automate fini deterministe quireconnat lunion des langages des lexe`mes
un etat terminal correspond a` la reconnaissance dun mot dun deslangages des lexe`mes
20 / 59Theorie des langages
N
-
Theorie des langages et compilation
Fragment dautomate lexical
q0
q1
q2
q3
q4 q5 q6
q7 q8
i a-z sauf i
0-9
=
f
a-z sauf f
a-z
a-z
.
0-9
0-9
0-9
=
21 / 59Theorie des langages
N
-
Theorie des langages et compilation
Analyse lexicale
Analyseur lexical : En general pas tout a` fait un automate deterministe
Certains lexe`mes sont prefixes dun autre
+, +=, ++ ; = et ==mots-cles et identificateurs (for et forme)entiers et reels (3 et 3.14)
Le principe est de reconnatre le mot le plus long
Un etat terminal nimplique donc pas toujours larret de lautomate : ilpeut continuer, et eventuellement revenir en arrie`re au dernier etat finalrencontre
22 / 59Theorie des langages
N
-
Theorie des langages et compilation
Reconnaissance contextuelle
Il existe des langages ou` une forme lexicale peut correspondre a` differentslexe`mes selon le contexte
selon le contexte gauche : par exemple, if reconnu comme mot-cleuniquement sil est au debut dune instructionselon le contexte droit : par exemple if reconnu comme mot-cleuniquement sil est suivi dune parenthe`seCombinaison des deux
23 / 59Theorie des langages
N
-
Theorie des langages et compilation
Proble`mes de la reconnaissance con-textuelle
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 : lescontextes sont le plus souvent des langages non-contextuels reconnus parlanalyseur syntaxique
Donc forte interaction entre les deux analyseursEntraine des proble`mes de lisibilite, de fiabilite et des difficultes a` lamaintenance et aux extensions
Cest pourquoi les langages modernes de programmation evitent cesquestions de reconnaissance contextuelle
Mais pas les langages de script, de description, . . . concus la plupart dutemps par des non specialistes des langages
24 / 59Theorie des langages
N
-
Theorie des langages et compilation
Exemple de proble`me de la reconnais-sance contextuelle
en Fortran, les espaces sont non significatifs
DO12I = 1.25 : identificateur DO12I , operateur daffectation =, reel 1.25DO12I = 1,25 : mot-cle DO, etiquette 12, variable I : boucle qui setermine a` lenonce etiquete 12 pour i allant de 1 a` 25dapre`s la legende, on aurait perdu une fusee du projet Mercury a` causedun . a` la place dune , (a` moins que ce ne soit linverse. . .)
Dans la plupart des langages de programmation actuels, les espaces sontsignificatifs, et les mots-cles sont reserves
25 / 59Theorie des langages
N
-
Theorie des langages et compilation
Generateurs danalyseurs lexicaux
Langage C : lex ou flex
Langage Ada : Alex
Langage Java : Jflex
Langage OCaml : OCamllex
26 / 59Theorie des langages
N
-
Theorie des langages et compilation
Construire un analyseur lexical avec lex
programme source (f)lexnom.l
compilateur (f)lex
lex nom.l
flex nom.lnom.yy.c
nom.yy.c
compilateur C
gcc nom.yy.c -ll
gcc nom.yy.c -lfla.out
27 / 59Theorie des langages
N
-
Theorie des langages et compilation
Specifications en lex
declarations
%%
re`gles de traduction
%%
procedures auxiliaires
28 / 59Theorie des langages
N
-
Theorie des langages et compilation
Declarations
La section des declarations comprend des
declarations de variables,constantes litteralesdefinitions regulie`res
Une constante litterale est un identificateur qui est declare pourrepresenter une constante
Une definition regulie`re permet dassocier un nom a` une expressionregulie`re
29 / 59Theorie des langages
N
-
Theorie des langages et compilation
Re`gles de traduction
Les re`gles de traduction sont des instructions de la forme :
exp1 action1exp2 action2...expn actionn
chaque expi est une expression regulie`re
chaque actioni est une suite dinstruction en C qui decrit quelle actionlanalyseur lexical devrait realiser quand un lexe`me concorde avec lemode`le expi
Les procedures auxilliaires sont les fonctions facultatives qui pourraientetre utiles dans les actions.
30 / 59Theorie des langages
N
-
Theorie des langages et compilation
Analyseur lexical
Analyseur lexical active par lanalyseur syntaxique :
Lit le texte dentree, caracte`re par caracte`reCherche le plus long prefixe du texte dentree qui corresponde a` lune desexpressions regulie`res expiExecute alors laction actioni
Action : rend le controle a` lanalyseur syntaxique
Sinon, lanalyseur lexical continue a` chercher dautres lexe`mes jusqua` cequune action rende le controle a` lanalyseur syntaxique
La recherche repetee de lexe`mes jusqua` un retour explicite permet a`lanalyseur lexical de traiter les espaces et les commentaires de manie`resimple
Seule information retournee a` lanalyseur syntaxique : lunite lexicale
Pour passer une valeur dattribut donnant des informations sur le lexe`me,on peut laffecter a` une variable globale appelee yylval.
31 / 59Theorie des langages
N
-
Theorie des langages et compilation
Tableau des expressions regulie`res (1/2)
expression reconnat exemplec tout caracte`re c qui nest pas un operateur a\c caracte`re litteral c \+s la chane de caracte`re s abc*r1r2 r1 suivie de r2 ab. tout caracte`re sauf fin de ligne a.b debut de ligne ^abc$ fin de ligne abc$[s] tout caracte`re appartenant a` s [s][^s] tout caracte`re nappartenant pas a` s [^abc]r 0 ou plusieurs occurences de r a
r+ 1 ou plusieurs occurences de r a+
r? 0 ou 1 occurence de r a?
32 / 59Theorie des langages
N
-
Theorie des langages et compilation
Tableau des expressions regulie`res (2/2)
expression reconnat exempler{m} m occurences de r a{3}r{m,n} entre m et n occurences de r a{3,8}r1|r2 r1 ou r2 a|br1/r2 r1 si elle est suivie de r2 abc/123(r) r (a|b)
\n retour a` la ligne\t tabulation
33 / 59Theorie des langages
N
-
Theorie des langages et compilation
Exemple declarations
%{
/* definitions des constantes litterales */
PPQ, PPE, EGA, DIF, PGQ, PGE, SI, ALORS, SINON, ID, NB, OPREL
%}
/* definitions regulie`res */
delim [ \n\t]bl {delim}+
lettre [A-Za-z]
chiffre [0-9]
id {lettre}+({lettre}|{chiffre})
nombre {chiffre}+(\.{chiffre}+)?(E[+\-]?{chiffre}+)?
%%
34 / 59Theorie des langages
N
-
Theorie des langages et compilation
Exemple re`gles de traduction
{bl} {/* pas daction et pas de retour */}
si {return(SI);}
alors {return(ALORS);}
sinon {return(SINON);}
{id} {yylval = RangerId(); return(ID);}
{nombre} {yylval = RangerNb(); return(NB);}
= {yylval = PGE; return(OPREL);}
%%
35 / 59Theorie des langages
N
-
Theorie des langages et compilation
Exemple procedures auxiliaires
RangerId() {
/* Procedure pour ranger dans la table des symboles le lexe`me
dont le premier caracte`re est pointe par yytext et dont la
longueur est yyleng et retourner un pointeur sur son entree */
}
RangerNb() {
\begin{block}/* procedure similaire pour ranger un lexe`me qui est un
nombre */
}
36 / 59Theorie des langages
N
-
Theorie des langages et compilation
Theorie des langages et compilation
Structure dun compilateurAnalyse lexicaleAnalyse syntaxiqueAnalyse semantiqueConclusion
37 / 59Theorie des langages
N
-
Theorie des langages et compilation
Quest ce que lanalyse syntaxique?
Lanalyse syntaxique a pour but :
de verifier que le texte dentree est conforme a` la grammairedindiquer les erreurs de syntaxede construire une representation intermediaire pour les autres modules ducompilateur
arbre de syntaxe abstraite, utilise par la suite de la compilationNe soccupe pas des aspects contextuels de la syntaxe
par exemple detecter lerreur dans int i; . . .; i =abcd;cest le role de lanalyse semantique, qui travaille sur la representationintermediaire
Representation unique du texte source lanalyse doit etre deterministe,si possible lineaire (eviter notamment les retours en arrie`re)
38 / 59Theorie des langages
N
-
Theorie des langages et compilation
Types danalyseurs syntaxiques
Analyseur syntaxique descendant, ou analyseur predictif
Construit larbre de derivation a` partir de sa racine et en effectuant desderivations en considerant la tete des re`gles de production et en faisantdes derivations les plus a` gaucheFamille des analyseurs LL (left scanning, leftmost derivation)JavaCC, ANTLR, LLGen, . . .
Analyseur syntaxique ascendant ou par decalage-reduction
Construit larbre de derivation a` partir de ses feuilles et en effectuant desderivations en considerant la partie droite des re`gles de production et enfaisant des derivations les plus a` gaucheFamille des analyseurs LR (left scanning, rightmost derivation)YACC/Bison
39 / 59Theorie des langages
N
-
Theorie des langages et compilation
ExempleSoit G = V , ,P,S avec
= {a, b, c, d}V \ = {S ,T}6 re`gles de production :
S aSbT |cT |dT aT |bS|c
40 / 59Theorie des langages
N
-
Theorie des langages et compilation
ExempleSoit G = V , ,P,S avec
= {a, b, c, d}V \ = {S ,T}6 re`gles de production :
S aSbT |cT |dT aT |bS|c
Soit w = accbbadbc
40 / 59Theorie des langages
N
-
Theorie des langages et compilation
ExempleSoit G = V , ,P,S avec
= {a, b, c, d}V \ = {S ,T}6 re`gles de production :
S aSbT |cT |dT aT |bS|c
Soit w = accbbadbc
Analyse LL :S
40 / 59Theorie des langages
N
-
Theorie des langages et compilation
ExempleSoit G = V , ,P,S avec
= {a, b, c, d}V \ = {S ,T}6 re`gles de production :
S aSbT |cT |dT aT |bS|c
Soit w = accbbadbc
Analyse LL :S aSbT
40 / 59Theorie des langages
N
-
Theorie des langages et compilation
ExempleSoit G = V , ,P,S avec
= {a, b, c, d}V \ = {S ,T}6 re`gles de production :
S aSbT |cT |dT aT |bS|c
Soit w = accbbadbc
Analyse LL :S aSbT acTbT
40 / 59Theorie des langages
N
-
Theorie des langages et compilation
ExempleSoit G = V , ,P,S avec
= {a, b, c, d}V \ = {S ,T}6 re`gles de production :
S aSbT |cT |dT aT |bS|c
Soit w = accbbadbc
Analyse LL :S aSbT acTbT accbT
40 / 59Theorie des langages
N
-
Theorie des langages et compilation
ExempleSoit G = V , ,P,S avec
= {a, b, c, d}V \ = {S ,T}6 re`gles de production :
S aSbT |cT |dT aT |bS|c
Soit w = accbbadbc
Analyse LL :
S aSbT acTbT accbT accbbS
40 / 59Theorie des langages
N
-
Theorie des langages et compilation
ExempleSoit G = V , ,P,S avec
= {a, b, c, d}V \ = {S ,T}6 re`gles de production :
S aSbT |cT |dT aT |bS|c
Soit w = accbbadbc
Analyse LL :
S aSbT acTbT accbT accbbS accbbaSbT
40 / 59Theorie des langages
N
-
Theorie des langages et compilation
ExempleSoit G = V , ,P,S avec
= {a, b, c, d}V \ = {S ,T}6 re`gles de production :
S aSbT |cT |dT aT |bS|c
Soit w = accbbadbc
Analyse LL :
S aSbT acTbT accbT accbbS accbbaSbT accbbadbT
40 / 59Theorie des langages
N
-
Theorie des langages et compilation
ExempleSoit G = V , ,P,S avec
= {a, b, c, d}V \ = {S ,T}6 re`gles de production :
S aSbT |cT |dT aT |bS|c
Soit w = accbbadbc
Analyse LL :
S aSbT acTbT accbT accbbS accbbaSbT accbbadbT accbbadbc
40 / 59Theorie des langages
N
-
Theorie des langages et compilation
ExempleSoit G = V , ,P,S avec
= {a, b, c, d}V \ = {S ,T}6 re`gles de production :
S aSbT |cT |dT aT |bS|c
Soit w = accbbadbc
Analyse LL :
S aSbT acTbT accbT accbbS accbbaSbT accbbadbT accbbadbc
Analyse LR :accbbadbc
40 / 59Theorie des langages
N
-
Theorie des langages et compilation
ExempleSoit G = V , ,P,S avec
= {a, b, c, d}V \ = {S ,T}6 re`gles de production :
S aSbT |cT |dT aT |bS|c
Soit w = accbbadbc
Analyse LL :
S aSbT acTbT accbT accbbS accbbaSbT accbbadbT accbbadbc
Analyse LR :accbbadbc
40 / 59Theorie des langages
N
-
Theorie des langages et compilation
ExempleSoit G = V , ,P,S avec
= {a, b, c, d}V \ = {S ,T}6 re`gles de production :
S aSbT |cT |dT aT |bS|c
Soit w = accbbadbc
Analyse LL :
S aSbT acTbT accbT accbbS accbbaSbT accbbadbT accbbadbc
Analyse LR :accbbadbc acTbbadbc
40 / 59Theorie des langages
N
-
Theorie des langages et compilation
ExempleSoit G = V , ,P,S avec
= {a, b, c, d}V \ = {S ,T}6 re`gles de production :
S aSbT |cT |dT aT |bS|c
Soit w = accbbadbc
Analyse LL :
S aSbT acTbT accbT accbbS accbbaSbT accbbadbT accbbadbc
Analyse LR :
accbbadbc acTbbadbc aSbbadbc
40 / 59Theorie des langages
N
-
Theorie des langages et compilation
ExempleSoit G = V , ,P,S avec
= {a, b, c, d}V \ = {S ,T}6 re`gles de production :
S aSbT |cT |dT aT |bS|c
Soit w = accbbadbc
Analyse LL :
S aSbT acTbT accbT accbbS accbbaSbT accbbadbT accbbadbc
Analyse LR :
accbbadbc acTbbadbc aSbbadbc aSbbaSbc
40 / 59Theorie des langages
N
-
Theorie des langages et compilation
ExempleSoit G = V , ,P,S avec
= {a, b, c, d}V \ = {S ,T}6 re`gles de production :
S aSbT |cT |dT aT |bS|c
Soit w = accbbadbc
Analyse LL :
S aSbT acTbT accbT accbbS accbbaSbT accbbadbT accbbadbc
Analyse LR :
accbbadbc acTbbadbc aSbbadbc aSbbaSbc aSbbaSbT
40 / 59Theorie des langages
N
-
Theorie des langages et compilation
ExempleSoit G = V , ,P,S avec
= {a, b, c, d}V \ = {S ,T}6 re`gles de production :
S aSbT |cT |dT aT |bS|c
Soit w = accbbadbc
Analyse LL :
S aSbT acTbT accbT accbbS accbbaSbT accbbadbT accbbadbc
Analyse LR :
accbbadbc acTbbadbc aSbbadbc aSbbaSbc aSbbaSbT aSbbS
40 / 59Theorie des langages
N
-
Theorie des langages et compilation
ExempleSoit G = V , ,P,S avec
= {a, b, c, d}V \ = {S ,T}6 re`gles de production :
S aSbT |cT |dT 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
40 / 59Theorie des langages
N
-
Theorie des langages et compilation
ExempleSoit G = V , ,P,S avec
= {a, b, c, d}V \ = {S ,T}6 re`gles de production :
S aSbT |cT |dT 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
40 / 59Theorie des langages
N
-
Theorie des langages et compilation
Constructeur danalyseur LRyacc/bison
yacc : Yet Another Compiler Compiler (Unix)
bison en version libre (Linux)
1e`re version dans les annees 70 par Stephen Curtis Johnson
Prend une grammaire hors contexte en entree, produit lanalyseurcorrespondant
Le programme produit est en langage C
41 / 59Theorie des langages
N
-
Theorie des langages et compilation
Construire un analyseur syntaxique avecyacc
specification yacc/bisonnom.y
compilateur yacc/bison
yacc nom.y
bison nom.y nom.tab.c
nom.tab.c
compilateur C
gcc nom.tab.c -ly a.out
42 / 59Theorie des langages
N
-
Theorie des langages et compilation
Specifications en yacc
declarations
%%
re`gles de production et routines semantiques
%%
routines C et bloc principal
43 / 59Theorie des langages
N
-
Theorie des langages et compilation
Declarations
La section des declarations contient 2 parties optionnelles
1e`re partie : declarations en C
delimitees par %{ et %}declarations des variables temporaires utilisees par les re`gles de traductionprocedures de la deuxie`me et troisie`me section
2nde partie : declarations dunites lexicales de la grammaire
Symboles terminaux :
unites lexicales, declarees par %token%token NOMBRE
caracte`res, entre quotes : a, +
Symboles non terminaux : chanes de caracte`res non declarees commeunites lexicales
44 / 59Theorie des langages
N
-
Theorie des langages et compilation
Re`gles de production
Une re`gle de production de la grammaire du type :non-terminal alt1 | alt2 | . . . | altn
secrirait en yacc :
non-terminal : alt1 {action semantique 1}| alt2 {action semantique 2}
. . .| altn {action semantique n};
La partie gauche de la premie`re re`gle de production est laxiome de lagrammaire
45 / 59Theorie des langages
N
-
Theorie des langages et compilation
Actions semantiques
Une action semantique est une suite dinstructions en C
Elles sont executees a` chaque fois quil y a reduction par la productionassociee
Syntaxe dune action semantique :
Symbole $$ reference la valeur de lattribut associe au non terminal de lapartie gauche de la re`gleSymbole $i represente la valeur associee au i e`me symbole (terminal ounon) en partie droite de la re`gle.Exemple :expr : expr + term {$$ = $1 + $3}
;
46 / 59Theorie des langages
N
-
Theorie 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 peuventetre ajoutees si necessaire
Lanalyseur lexical yylex() produit des couples formes dune unite lexicaleet de la valeur de lattribut associe
Si une unite lexicale est retournee, elle doit etre declaree dans la premie`resection de la specification yacc
La valeur de lattribut associee a` une unite lexicale est communiquee a`lanalyseur syntaxique par lintermediaire de la variable yylval predefiniedans yacc
47 / 59Theorie des langages
N
-
Theorie des langages et compilation
Exemple
Grammaire des expressions arithmetiques :
E E + T |TT T F |FF (E)|chiffre
Lunite lexicale chiffre designe un chiffre unique compris entre 0 et 9
48 / 59Theorie des langages
N
-
Theorie des langages et compilation
Exemple declarations et re`gles de pro-duction
%{
#include
%}
%token CHIFFRES
%%
ligne : expr \n {printf(%d\n, $1);};
expr : expr + term {$$ = $1 + $3;}| term;
term : term * facteur {$$ = $1 * $3;}| facteur;
facteur : ( expr ) {$$ = $2;}| CHIFFRE;
%%49 / 59
Theorie des langages
N
-
Theorie des langages et compilation
Exemple Routines annexes
yylex()
{int c;c = getchar();if (isdigit(c))
{yyval = c - 0;return CHIFFRE;}return c
}
50 / 59Theorie des langages
N
-
Theorie des langages et compilation
Utilisation conjointe de lex et yacc
lex a ete concu pour produire des analyseurs lexicaux qui peuvent etreutilises 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 terminalconnu de yacc
51 / 59Theorie des langages
N
-
Theorie 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
52 / 59Theorie des langages
N
-
Theorie des langages et compilation
Theorie des langages et compilation
Structure dun compilateurAnalyse lexicaleAnalyse syntaxiqueAnalyse semantiqueConclusion
53 / 59Theorie des langages
N
-
Theorie des langages et compilation
Analyse semantique - pourquoi?
Correction syntaxique insuffisante
Exemple : 3 + true > 2 syntaxiquement correct
Necessite dune analyse semantique
54 / 59Theorie des langages
N
-
Theorie des langages et compilation
Analyse semantique - cest quoi?
Dans le compilateur dun langage de programmation :
Calcul dun arbre abstraitDecore par des informations qui preparent la generation de code (ex :adresses memoire)Verifications semantiques : de type, des declarations, etc.
Applications de traitement de donnees textuelles : calculs divers.
55 / 59Theorie des langages
N
-
Theorie des langages et compilation
Analyse semantique - 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 detraduction dirigee par la syntaxe
On enrichit les grammaires algebriques par 2 concepts :donneescalculs
et on obtient une grammaire attribuee
56 / 59Theorie des langages
N
-
Theorie des langages et compilation
Grammaire attribuee, informellement
Cest une grammaire algebrique, plus :
des attributs (les donnees) associes aux terminaux et non-terminauxdes re`gles (ou actions semantiques) associees aux productions (les calculsdes donnees)
Exemple :
E E + T{E0.val = E1.val + T .val}
57 / 59Theorie des langages
N
-
Theorie des langages et compilation
Theorie des langages et compilation
Structure dun compilateurAnalyse lexicaleAnalyse syntaxiqueAnalyse semantiqueConclusion
58 / 59Theorie des langages
N
-
Theorie des langages et compilation
Conclusion
Table des
symboles
Programme source
Analyseur lexical
Analyseur syntaxique
Analyseur semantique
Generateur de code intermediaire
Optimisateur de code
Generateur de code
Programme cible
Erreurs
Partie analyse: separe les 6= constituantsdu prog. source et produit une
representation intermediaire
Partie synthe`se: gene`re le prog. cible a`
partir de la representation intermediaire
59 / 59Theorie des langages
N
Thorie des langages et compilationStructure d'un compilateurAnalyse lexicaleAnalyse syntaxiqueAnalyse smantiqueConclusion