Compilation

79
Th´ eorie des langages Th´ eorie des langages et compilation Elise Bonzon http://web.mi.parisdescartes.fr/vbonzon/ [email protected] 1 / 59 Th´ eorie des langages N

description

in

Transcript of Compilation

  • Theorie des langages

    Theorie des langages etcompilation

    Elise Bonzonhttp://web.mi.parisdescartes.fr/vbonzon/

    [email protected]

    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