Académique Documents
Professionnel Documents
Culture Documents
Textedeprogramme
letx:floatref=ref0.5inx:=1.+.float_of_int2*.(!x.1.)
Analyselexicale(scanneroulexer)
Suitedelexmes(token)
letx:floatref=ref0.5inx:=1.+.float_of_int2*.(!x.1.)
Analyse
syntaxique
(parser)
Arbredesyntaxeabstraite
let
varx
identref
apply
float0.5
constr
apply
ref constr
float
apply
apply
ident:= identx
apply
ident+. float1.
expressions
types
patterns
motsclefs,oprateurs...
identificateurs
valeursflottantes,entires
ident*.
apply
apply
apply
identfloat_of_int int2
apply
apply float1.
ident.
apply
ident! identx
Planducours
Analyselexicale
Introduction
Expressionsrguliresetautomatesfinis
Analysesyntaxique
Introduction
Grammaireshorscontextesetautomatespile
AnalyseLL(0)
AnalyseLALR
L'analyselexicale
Elletransformeletexteenunesuitedelexmes(tokenenanglais).
Leprogrammeestdcoupenmorceaux(identificateurs,
entierslittraux,ponctuation)
Cesmorceauxsubissentunepremiretransformationsimple:
Leslittraux:nombres,chanes,sonttraduitsenleurvaleur.
Lessymbolesdeponctuation:(,),:=,=,[,[|,;...etles
identificateurscorrespondantenfaitdesmotsrservs:let,
in,if,then...sonttraduitsenmotsclefs(constructeursd'un
typenumr).
Lesautresidentificateurssontreprsentspardeschanes.
Lesespacesetlescommentaires(cesontaussideslexmes)
sontsupprims
Sparationdessymboles
Chaquetypedesymbole(entier,flottant,identificateur,parenthse
ouvrante,[|,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,lesexpressionsrguliressontdcritesparla
grammairesuivante:
e:=|c|ee|e|e|e*
(laquelleonajoutesouventquelquesnotationsutilesmaisqui
n'augmententpasleurpuissanceexpressive).
Automatesfinis
Leslangagesdnotspardesexpressionsrguliressont
reconnaissablesparautomatesfinis(dterministes).Onprocde
ainsi:
Onconstruitunautomatenondterministequireconnatle
langagednotparl'expressionrguliretoken.
Ondterminisecetautomate.
Onleminimise
Onobtientalorsunprogrammesimple(automatedterministe)
pourlireleprogrammeetdciderquandonaluunlexme.
Constructiondel'automate
Onconstruitdefaoninductiveunautomatenondterministequia
Unseultatinitial
Unseultatfinal,quideplusestdiffrentdel'tatinitial
motvide
uncaractre
rcursion
e*
squence
ee
alternative
e|e
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'quivalenceentretatstelle
que:
tatsaccepteursetnonaccepteursnesontjamaisquivalents,et
sis'~setss''alorsilexistes'''telques'''s''ets's'''.
Proprit:
Deuxtatsquivalentsacceptentlesmmesmots.
Onpeutdonclesfusionner,rduisantainsilatailledel'automate.
L'automateainsiobtenuestminimal,etc'estlequotientde
l'automateinitialparlarelationd'quivalence~.
Choixetclassificationetdeslexmes
Quands'arrter?
Leplustardpossible:onslectionnelepluslonglexmepossible(en
continuantjusqu'cequel'automatesebloque)
Quandonestbloqu,onrevientaudernierlexmetrouv.
Queltypedelexmechoisir?
token:=bracket|int_literal|ident|...
Ongardelestatsfinauxdesclassesdelexmes:
Dterminisation:siuntatcontientdeuxtats
bracket
...
ident
bracket
...
ident
finaux,onn'engardequ'un:lepremier(casd'unlexmeambig)
Minimisation:onajouteunecontraintesurlarelationd'quivalence:
deuxtatsfinauxdiffrentsnesontpasquivalents.
Exemple
e=float|int|+
int=cc*
float=cc*.c*
c
c
...
Autableau!
Concrtement:Lex(Flex,Ocamllex)
Oncritdesexpressionsrgulires,muniesdefonctionssimples
pourcalculerlesvaleursassociesauxlexmes:
e= |'['
|['0''9']['0''9']*
|['0''9']['0''9']*'.'['0''9']*
|['a''z']['a''z''A''Z''0''9']*
{BRACKET}
{INT(int_of_stringe)}
{FLOAT(float_of_stringe)}
{tryfindkeyword_tablee
withNot_found>IDENTe}
Aprscompilationparlex(ocamllex)onobtientunprogramme
analyseur,quilitdescaractresdansunfluxd'entreetcritdes
tokendansunfluxdesortie.
Plusexactement,onaunefonctionqu'onappellechaquefois
qu'onveutlireletokensuivant.
L'analysesyntaxique
Ellestructurelasuitedelexmesenfonctiond'unegrammaire:
:=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,etdela
syntaxeinfre:
Unprogrammeexcutable(solutiontrsnave)
Ouunarbredesyntaxeabstraite,utilisparlasuitedela
compilation.
Arbrededrivation
E
let
P
ident
x
T ident
ref
ident
float
E
E E
in
E
E := E
E +.
float_literal
1.
E
E *. E
ident int_literal
float_of_int 2
E . E
! id. float_lit.
x
1.
letx:floatref=ref0.5inx:=1.+.float_of_int2*.(!x.1.)
Grammaireshorscontexte
Unegrammairehorscontexteestladonnede:
Unensembledesymbolesterminaux,pourl'analysesyntaxique,cesont
les(classesde)lexmes
{let,in,:,:=,=,ident,...}
Unensembledesymbolesnonterminaux
{E,P,T}
UnaxiomesouventnotS
Unensembledergles,ouproductionsNLo
Nestunnonterminal
Lestunelistedeterminauxetnonterminaux
Parexemple:
EEE
Pident
EE:=E
EletP:T=EinE
Automatespile
Notation:
AutomatesimplereconnaissantL(G):
Alphabetdepile:symbolesterminauxetnonterminaux
Transitions:
(pile,mot)(pile,mot)
(t::p,t.w)(p,w)
tterminal
(N::p,w)(::p,w)
N productiondeG
Pileinitiale:S::(axiome)
(S,w)(,)ssiwL(G)
Fortementnondterministe(onessaietouslesmotsetonregarde
siwenfaitpartie).
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)([NN'.]::p,w)
Pileinitiale:[S'.S]::
Pileacceptrice:[S'S.]::
Premier,suivant
Pourunesuitedenonterminaux
premier()estl'ensembledessymbolesterminauxquipeuvent
commencerunechanedrivede,plussi .
suivant()estl'ensembledessymbolesterminauxpouvantsuivre
dansuneprotophrase(phraseobtenuepardrivation),plus$si
peuttermineruneprotophrase.
Cesfonctionsfournissentunmoyendechoisirlaproduction
utiliser,dansl'automatedesitems(expansion).Sileprochain
symbolereconnatreestt,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
tpremier('),ou
premier(')ettsuivant(N')
([N''.]::[N.N']::p,w)([NN'.]::p,w)
SilargleN''satisfaitcesconditions,alorsilexisteunmot
t.wquimnel'tataccepteur(autrementdit,onnepeutpas
restreindrepluslechoixenregardantseulementun1symbole).
Dfinition:sipourtousN',tilexisteuneuniquergleN''qui
satisfaitcesconditions,lagrammaireestditeLL(1).L'automate
ainsirestreintestalorsdterministe.
Calculdepremier
Formellement,pourunsymboleterminalounon:
premier(t){t}
premier(N){}
si NG
premier(N)premier(s)
si NN1...NnsG,et
premier(Ni),et
L()
Lafonctionpremierestlapluspetitesolutiondecesinquations.C'est
aussilepluspetitpointfixed'unefonctioncroissantesuruntreillisde
hauteurfinie,donconsaitlacalculer.
Pouruneprotophrasequelconque,ilsuffitd'appliquerunefoisdeplus
latroisimequation.
Calculdesuivant
Formellement,pourunsymbolenonterminal:
suivant(S'){$}
suivant(N)premier()\ siN'NG
suivant(N)suivant(N')
siN'NGetpremier()
Lencore,oncalculelepluspetitpointfixeparitration,aprs
avoircalcullafonctionpremier.
Cesdeuxcalculssontdesanalysesdeflux,d'autrespropritsse
formalisentdelammemanire:
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:une
procdureparnonterminal.
ProcdureN=
choisiruneproductionNenfonctionduprochaincaractrelire
pourchaquesymboleXde(dansl'ordre):
siXestunnonterminal
appelerlaprocdureX
siX=t
avancerd'uncran
sinon
erreur
Exempleautableau...
Analysemontante(bottomup)
Automatecaractristique
L'automate(pile)desitemspeuttrereprsentparune
automatefininondterministe:
tats:
lesitems
Alphabet: lesterminauxetnonterminaux
Transitions:
(X''=''touN')
[N.N'][N'.']pourN'' G
[N.X]X[NX.]
tatinitial: [S'.S]
tatsfinaux:
lesitemscomplets(lepointestdroite)
Exemple(autableau):
S=E,E=E+T,T=T*F,F=(E)
|T
|F
|id
AnalyseLR(0)
Onpeutdterminisercetautomate:lestatssontalorsdes
ensemblesd'items(l'ideestdediffrerlechoixd'uneproduction
lorsdel'expansion).
Onluiassociealorsunnouvelautomatepilereconnaissantle
langagedeG
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:
Reducereduce:
si[N.t]Qet[N.]Q,quefaireenvoyantt?
si[N.]Qet[N'.]Q,quefaire?
SiaucuntatQneprsentecerisque,alorsonaunegrammaire
LR(0).
GrammairesSLR,LALR
Sinon:pourchaquetatQetchaqueitem[N.]Q,ondfinit
unensembledeprvision:terminauxdevantlesquelsonpeut
choisircetitempourrduire.
Casgnral:rductionde(Q::...,t.w)par[N.]Q
SLR(1):prvision({[N.],...},[N.])=suivant(N)
rductionde(Q::...,t.w)par[N.]Qsitsuivant(N).
LALR(1):prvision(Q,[N.])={t|onpeutlireuntetaccepter
unmot,sachantqu'onvientdereconnatreunNetqu'onestdansQ}
sitprvision(Q,[N.])
rductionde(Q::...,t.w)par[N.]Qs'ilexisteunedrivation
droiteS*'Ntwavec{[S'.S]}'N*Qdansl'automate.
UnegrammaireestSLR(1)(respectivementLALR(1))sionlve
ainsitouslesconflits.
Concrtement:Yacc,(Bison,Ocamlyacc)
Yacc:Yetanothercompilercompiler
Oncritunegrammaireavecunefonctionassociechaque
production.
expr:
|WHILEexprDOexprDONE
|LPARENexprRPAREN
{Pexp_while($2,$4)}
{$2}
Onobtientunprogrammequiprendunfluxdetokensetretourne
l'attributcalculparlesfonctions(arbredesyntaxeabstraite).
Remarque:cesoutilsacceptentdesdclarationsdeprioritet
associativitquipermettentdelevercertainesambigutssans
changerlagrammaire.