30
Analyse lexicale et syntaxique

Cours Analyse Lexicale Et Syntaxique

  • Upload
    terre

  • View
    16

  • Download
    1

Embed Size (px)

DESCRIPTION

tppp

Citation preview

  • 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}