Top Banner
Analyse lexicale et syntaxique
30

Cours Analyse Lexicale Et Syntaxique

Oct 03, 2015

Download

Documents

terre

tppp
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
  • Analyselexicaleetsyntaxique

  • letx:floatref=ref0.5inx:=1.+.float_of_int2*.(!x.1.)

    letx:floatref=ref0.5inx:=1.+.float_of_int2*.(!x.1.)

    let

    varx apply

    identref float0.5

    apply

    apply apply

    ident:= identx

    ident+.

    Textedeprogramme

    Suitedelexmes(token)

    motsclefs,oprateurs...identificateursvaleursflottantes,entires

    Arbredesyntaxeabstraite

    apply

    float1. apply

    apply

    constr

    ref

    ident*. apply

    identfloat_of_int int2

    apply

    ident.

    apply float1.

    apply

    ident! identx

    float

    constr

    expressionstypespatterns

    Analyselexicale(scanneroulexer)

    Analysesyntaxique(parser)

  • Planducours

    Analyselexicale Introduction

    Expressionsrguliresetautomatesfinis

    Analysesyntaxique Introduction

    Grammaireshorscontextesetautomatespile

    AnalyseLL(0)

    AnalyseLALR

  • L'analyselexicaleElletransformeletexteenunesuitedelexmes(tokenenanglais).

    Leprogrammeestdcoupenmorceaux(identificateurs,entierslittraux,ponctuation)

    Cesmorceauxsubissentunepremiretransformationsimple:

    Leslittraux:nombres,chanes,sonttraduitsenleurvaleur.

    Lessymbolesdeponctuation:(,),:=,=,[,[|,;...etlesidentificateurscorrespondantenfaitdesmotsrservs:let,in,if,then...sonttraduitsenmotsclefs(constructeursd'untypenumr).

    Lesautresidentificateurssontreprsentspardeschanes.

    Lesespacesetlescommentaires(cesontaussideslexmes)sontsupprims

  • Sparationdessymboles

    Chaquetypedesymbole(entier,flottant,identificateur,parenthseouvrante,[|,pointvirgule..)estdfiniparunexpressionrgulire: bracket := [ (uncaractre)

    bracketbar := [| (squence)

    int_literal := (0|1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)* (alternative,rcursion)

    float_literal := (0|1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)*.(0|1|2|3|4|5|6|7|8|9)*

    token := bracket|int_literal|ident|...

    Formellement,lesexpressionsrguliressontdcritesparlagrammairesuivante:

    e:=|c|ee|e|e|e*

    (laquelleonajoutesouventquelquesnotationsutilesmaisquin'augmententpasleurpuissanceexpressive).

  • Automatesfinis

    Leslangagesdnotspardesexpressionsrguliressontreconnaissablesparautomatesfinis(dterministes).Onprocdeainsi:

    Onconstruitunautomatenondterministequireconnatlelangagednotparl'expressionrguliretoken.

    Ondterminisecetautomate.

    Onleminimise

    Onobtientalorsunprogrammesimple(automatedterministe)pourlireleprogrammeetdciderquandonaluunlexme.

  • Constructiondel'automateOnconstruitdefaoninductiveunautomatenondterministequia

    Unseultatinitial

    Unseultatfinal,quideplusestdiffrentdel'tatinitial

    c c

    e eee

    e e|e

    e

    motvide

    uncaractre

    squence

    alternative

    ee*

    rcursion

  • Dterminisation

    L'excutiond'unautomatenondterministeestpossible(backtrack)maislourde,carilfautmmoriserdesconfigurations,etlongue:pourunmmemot,onparcourtplusieurschemins.

    Onprfredterminiserl'automate.Ide:

    Lestatssontdesensemblesd'tatsdel'automateinitial

    Qc{q'|qQq*c*q'} Rappel:latailledel'automateobtenupeuttreexponentielle

    (maisenpratique,aresteraisonnable).

  • Minimisation

    Onconsidrelaplusgranderelationd'quivalenceentretatstelleque:

    tatsaccepteursetnonaccepteursnesontjamaisquivalents,et

    sis'~setss''alorsilexistes'''telques'''s''ets's'''. Proprit:

    Deuxtatsquivalentsacceptentlesmmesmots.

    Onpeutdonclesfusionner,rduisantainsilatailledel'automate.

    L'automateainsiobtenuestminimal,etc'estlequotientdel'automateinitialparlarelationd'quivalence~.

  • Choixetclassificationetdeslexmes Quands'arrter?

    Leplustardpossible:onslectionnelepluslonglexmepossible(encontinuantjusqu'cequel'automatesebloque)

    Quandonestbloqu,onrevientaudernierlexmetrouv.

    Queltypedelexmechoisir?

    token:=bracket|int_literal|ident|...

    Ongardelestatsfinauxdesclassesdelexmes:

    Dterminisation:siuntatcontientdeuxtats

    finaux,onn'engardequ'un:lepremier(casd'unlexmeambig)

    Minimisation:onajouteunecontraintesurlarelationd'quivalence:

    deuxtatsfinauxdiffrentsnesontpasquivalents.

    bracket

    ident ...

    bracket

    ident...

  • Exemplee=float|int|+int=cc*float=cc*.c*

    c

    c

    ...

    Autableau!

  • Concrtement:Lex(Flex,Ocamllex)

    Oncritdesexpressionsrgulires,muniesdefonctionssimplespourcalculerlesvaleursassociesauxlexmes:

    Aprscompilationparlex(ocamllex)onobtientunprogrammeanalyseur,quilitdescaractresdansunfluxd'entreetcritdestokendansunfluxdesortie.

    Plusexactement,onaunefonctionqu'onappellechaquefoisqu'onveutlireletokensuivant.

    e= |'[' {BRACKET}|['0''9']['0''9']* {INT(int_of_stringe)}|['0''9']['0''9']*'.'['0''9']* {FLOAT(float_of_stringe)}|['a''z']['a''z''A''Z''0''9']* {tryfindkeyword_tablee

    withNot_found>IDENTe}

  • L'analysesyntaxique Ellestructurelasuitedelexmesenfonctiond'unegrammaire:

    E :=float_literal|int_literal|ident

    |E+.E|E*.E|E.E|!E|E:=E|EE|(E)|letP:T=EinE|

    P:=ident|wildcard|P|P|P,P|...

    T:=ident|Tident|T*T|...

    Ellecalculeunrsultat,partirdesvaleursdeslexmes,etdelasyntaxeinfre:

    Unprogrammeexcutable(solutiontrsnave)

    Ouunarbredesyntaxeabstraite,utilisparlasuitedelacompilation.

  • Arbrededrivation

    letx:floatref=ref0.5inx:=1.+.float_of_int2*.(!x.1.)

    E

    let P : T = E in Eidentx

    T

    identfloat

    identref

    E E E E:=

    float_literal0.5

    identref

    identx

    E +. E

    float_literal1.

    E *. E

    int_literal2

    E E

    identfloat_of_int

    ( E )

    E . E

    ! id.x

    float_lit.1.

  • Grammaireshorscontexte

    Unegrammairehorscontexteestladonnede:

    Unensembledesymbolesterminaux,pourl'analysesyntaxique,cesontles(classesde)lexmes {let,in,:,:=,=,ident,...}

    Unensembledesymbolesnonterminaux {E,P,T}

    UnaxiomesouventnotS E

    Unensembledergles,ouproductionsNLo Nestunnonterminal Lestunelistedeterminauxetnonterminaux

    Parexemple: EEE Pident EE:=E EletP:T=EinE

  • Automatespile

    Notation: (pile,mot)(pile,mot)

    AutomatesimplereconnaissantL(G):

    Alphabetdepile:symbolesterminauxetnonterminaux

    Transitions:

    (t::p,t.w)(p,w) tterminal (N::p,w)(::p,w) N productiondeG

    Pileinitiale:S::(axiome)

    (S,w)(,)ssiwL(G)

    Fortementnondterministe(onessaietouslesmotsetonregardesiwenfaitpartie).

  • Analysedescendante(topdown)

  • Automatedesitems Lesitemssontlesproductions,auxquellesonrajouteunindice

    danslemembredroit.Exemple:

    LesitemsdelaproductionNAtBsont:

    [N.AtB],[NA.tB],[NAt.B],[NAtB.]

    OnajoutelaproductionS'S(etlesdeuxitemsassocis)

    L'automatedesitems(d'unegrammairehorscontexte):

    Alphabetdepile:lesitemsdelagrammaire

    Transitions:

    ([N.t]::p,t.w)([Nt.]::p,w) ([N.N'].p,w)([N' . ' ]::[N.N']::p,w) N' ' G ([N' '.] ::[N.N' ]::p,w) ([N N'. ]::p,w)

    Pileinitiale:[S' .S]::

    Pile acceptrice :[S' S.]::

  • Premier,suivant Pourunesuitedenonterminaux

    premier()estl'ensembledessymbolesterminauxquipeuventcommencerunechanedrivede,plussi .

    suivant()estl'ensembledessymbolesterminauxpouvantsuivredansuneprotophrase(phraseobtenuepardrivation),plus$sipeuttermineruneprotophrase.

    Cesfonctionsfournissentunmoyendechoisirlaproductionutiliser,dansl'automatedesitems(expansion).Sileprochainsymbolereconnatreestt,argleN''choisieesttelleque tpremier( ' ),ou

    premier( ' )ettsuivant(N')

  • AnalyseetgrammairesLL(1) Rappel:automatedesitems

    ([N.t]::p,t.w)([Nt.]::p,w)

    ([N.N'].p,t.w)([N' . ' ]::[N.N']::p,t.w)si

    N' ' G, et t premier( ' ),ou premier( ' )ett suivant( N')

    ([N' '.] ::[N.N' ]::p,w) ([N N'. ]::p,w)

    SilargleN''satisfaitcesconditions,alorsilexisteunmott.wquimnel'tataccepteur(autrementdit,onnepeutpasrestreindrepluslechoixenregardantseulementun1symbole).

    Dfinition:sipourtousN',tilexisteuneuniquergleN''quisatisfaitcesconditions,lagrammaireestditeLL(1).L'automateainsirestreintestalorsdterministe.

  • Calculdepremier

    Formellement,pourunsymboleterminalounon:

    premier(t) {t}

    premier(N) { } si N G

    premier(N) premier(s) si N N1...Nns G,et

    premier(Ni),et

    L()

    Lafonctionpremierestlapluspetitesolutiondecesinquations.C'estaussilepluspetitpointfixed'unefonctioncroissantesuruntreillisdehauteurfinie,donconsaitlacalculer.

    Pouruneprotophrasequelconque,ilsuffitd'appliquerunefoisdepluslatroisimequation.

  • Calculdesuivant

    Formellement,pourunsymbolenonterminal:

    suivant(S'){$}

    suivant(N)premier( )\ siN' N G

    suivant(N)suivant(N') siN' N G et premier( ) Lencore,oncalculelepluspetitpointfixeparitration,aprs

    avoircalcullafonctionpremier.

    Cesdeuxcalculssontdesanalysesdeflux,d'autrespropritsseformalisentdelammemanire:

    LaquestionL()(utilisepourcalculerpremier)

    L'accessibilitd'unnonterminalNpartirdeS

  • Exemple:expressionsarithmtiques

    Grammaire,calculdepremieretsuivant:

    S=E premier={id,(} suivant={$}

    E=TE' premier={id,(} suivant={$,)}

    E'=|+E premier={+,} suivant={$,)}

    T=FT' premier={id,(} suivant={$,),+}

    T'=|*T premier={*,} suivant={$,),+}

    F=(E)|id premier={id,(} suivant={$,*,+,)}

    PourE'=|+E: slectionnepour:

    : premier()={},suivant(E')={#,)} #,)

    +E: premier(+E)={+} +

    Donc:pasdenondterminismesurl'expansiondeE'

  • AnalysedescendanteLL(1)

    Onpeutl'crireavecdesprocduresrcursives:uneprocdureparnonterminal.

    ProcdureN=

    choisiruneproductionNenfonctionduprochaincaractrelire

    pourchaquesymboleXde(dansl'ordre):

    siXestunnonterminal : appelerlaprocdureX siX=t : avancerd'uncran sinon : erreur

    Exempleautableau...

  • Analysemontante(bottomup)

  • Automatecaractristique

    L'automate(pile)desitemspeuttrereprsentparuneautomatefininondterministe:

    tats: lesitems

    Alphabet: lesterminauxetnonterminaux

    Transitions: [N.X]X[NX.] (X''=''touN')

    [N.N'][N'.']pourN' ' G tatinitial: [S' .S]

    tatsfinaux: lesitemscomplets(lepointestdroite)

    Exemple(autableau):

    S=E,E=E+T,T=T*F,F=(E)

    |T |F |id

  • AnalyseLR(0)

    Onpeutdterminisercetautomate:lestatssontalorsdesensemblesd'items(l'ideestdediffrerlechoixd'uneproductionlorsdel'expansion).

    OnluiassociealorsunnouvelautomatepilereconnaissantlelangagedeG

    Alphabetdepile:lesensemblesd'itemsobtenuspardterminisation

    Pileinitiale:{[S' .S ]}

    Transitionsdedeuxtypes:

    Dcalage:(Q::p,t.w)(Q'::Q::p,w)

    siQtQ'dansl'automate(cequiimplique[N.t]Q) Rduction:(Qn...Q1::Q::p,w)(Q'::Q::p,w)

    si[N.]Qn, ||=net QNQ'

  • Nondterminisme

    Ilestdedeuxsortes:

    Shiftreduce:

    si[N.t]Qet[N.]Q,quefaireenvoyantt? Reducereduce:

    si[N.]Qet[N'.]Q,quefaire? SiaucuntatQneprsentecerisque,alorsonaunegrammaire

    LR(0).

  • GrammairesSLR,LALR

    Sinon:pourchaquetatQetchaqueitem[N.]Q,ondfinitunensembledeprvision:terminauxdevantlesquelsonpeutchoisircetitempourrduire.

    Casgnral:rductionde(Q::...,t.w)par[N.]Q

    sitprvision(Q,[N.]) SLR(1):prvision({[N.],...},[N.])=suivant(N)

    rductionde(Q::...,t.w)par[N.]Qsitsuivant(N).

    LALR(1):prvision(Q,[N.])={t|onpeutlireuntetaccepterunmot,sachantqu'onvientdereconnatreunNetqu'onestdansQ}

    rductionde(Q::...,t.w)par[N.]Qs'ilexisteunedrivationdroiteS * 'Ntwavec{[S' .S ]}'N * Qdansl'automate.

    UnegrammaireestSLR(1)(respectivementLALR(1))sionlveainsitouslesconflits.

  • Concrtement:Yacc,(Bison,Ocamlyacc)

    Yacc:Yetanothercompilercompiler

    Oncritunegrammaireavecunefonctionassociechaqueproduction.

    Onobtientunprogrammequiprendunfluxdetokensetretournel'attributcalculparlesfonctions(arbredesyntaxeabstraite).

    Remarque:cesoutilsacceptentdesdclarationsdeprioritetassociativitquipermettentdelevercertainesambigutssanschangerlagrammaire.

    expr:|WHILEexprDOexprDONE {Pexp_while($2,$4)}|LPARENexprRPAREN {$2}