Support de cours
Compilation 2013 - 2014 M1 Informatique Anne BERR
1
2
Cours de Compilation Anne BERRY ENT : M 1_INFO_COMPIL
Bibliographie 1. Cor! en ligne "ei#h $%h&ar' h##p:((&&&.!#an)or*.e*(%la!!(%!1+,( 2. -e! AT$ON / 0igh/Leel Langage! an* Their Copiler! / I$BN 3/231/14+45/, ,. -aniel I.A. CO0EN / In#ro*%#ion #o Cop#er Theor6 I$BN 3/+71/8+4+1/, +. 9ohn 0OPCROFT an* 9e))re6 LLMAN / In#ro*%#ion #o A#oa#a Theor6; Langage! an* Cop#a#ion 8. Al)re* A0O; Moni%a $. La; Rai $ET0I an* 9e))re6 LLMAN / Copiler!; Prin%iple!; Te%hni<e! an* Tool! =. An*re& . APPEL / Mo*ern %opiler ipleen#a#ion in C 7. R. IL0ELM an* -. MARER / Copiler -e!ign 4. . AITE an* >. >OO$ / Copiler Con!#r%#ion 5. $. MC0NIC" / A*an%e* Copiler *e!ign Ipleen#a#ion 13. -. >RNE; 0. BAL; C. 9ACOB$ e# ". LAN>EN-OEN / Copila#er! Plan * %or! : 1 : In#ro*%#ion: ?@e!#/%e <e la Copila#ion 2 : ?el<e! rappel! rappel! *e #horie #horie *e! langage! , : L@anal6!e lei%ale + : L@anal6!e !6n#ai<e 8 : Le! )on%#ion! FIR$T e# FOLLO = : L@anal6!e *e!%en*an#e langage! LLD 7 : L@anal6!e a!%en*an#e langage! LRD
>nra#ion e# op#ii!a#ion *e %o*e : <el<e! no#ion!D
,
+
Table des matières 1.Introduction........................................................................................................................................6 1.1.Définition de la compilation.......................................................................................................6 1.2.Quelques problèmes posés ........................................................................................................7 1.3.Un aper çu des phases de la compilation................................................................................... 9 2.Quelques rappels de th éorie des langages (voir Annexe)......................................................................................................................................12 2.1.Feuille d'exercices 1 : r évisions de th éorie des langages..........................................................13 3.L'analyse lexicale.............................................................................................................................15 4.L'analyse syntaxique........................................................................................................................16 5.Les fonctions FIRST et FOLLOW...................................................................................................18 5.1.Symboles nullables...................................................................................................................18 5.2.Définition de FIRST.................................................................................................................18 5.3.Définition de FOLLOW...........................................................................................................19 5.4.Calcul du FIRST................................................................................................................... ...19 5.5.Calcul du FOLLOW des non-terminaux..................................................................................21 6.L'analyse descendante (top-down parsing)......................................................................................23 6.1.Les langages LL.......................................................................................................................23 6.2.Caractérisation des grammaires LL(1)....................................................................................24 6.3.L'analyseur LL......................................................................................................................... 24 6.4.Calcul de la table d'analyse LL................................................................................................27 6.5. Procédés de réécriture d'une grammaire non LL(1)...............................................................28 6.5.1.Récursivité........................................................................................................................28 Une grammaire algébrique G est dite r écursive à gauche (left recursive) si et seulement si elle contient un non-terminal A tel que ...............................................................................................28 6.5.2.Factorisation..................................................................................................................... 31 6.6.Feuille d 'exercices 2 : les langages LL....................................................................................33 Procéder à l'analyse du mot ω = 4+5 pour les deux grammaires........................................................33 7.L'analyse ascendante et les langages LR..........................................................................................34 7.1.Principe du shift-reduce parsing...............................................................................................34 7.2.Les grammaires LR et LALR...................................................................................................35 7.3.L'analyseur LR(1).....................................................................................................................36 7.4.Les grammaires LALR.............................................................................................................39 7.5.Feuille d'exercices 3 : l'analyseur LALR..................................................................................40 7.6.Feuille d'exercices 4 : étude des conflits dans les tables LALR(1)........................................ .41 8.Construction des tables LALR(1)....................................................................................................45 8.1.Notations et définitions............................................................................................................45 8.2.Calcul des tables LR(0)..................................................................................................... ......46 8.3.Construction des tables LR(1)................................................................................................. 47 8.4.Tables LAR(1).........................................................................................................................49 8.5.Feuille d'exercices 5 : construction de tables LALR(1)..........................................................51
8
1. Introduction @@To all who know more than one language @@ ai#e >oo!D Rear<e : la plpar# *e! *o%en#! !on# en anglai!; ain!i <e *e! #ere! #e%hni<e! #ili!!.
1.1. Dé finition de la compilation n %opila#er e!# n prograe *e #ra*%#ion. -e )aGon gnrale : / On par# *@n %o*e !or%e %ri# *an! n @langage *e ha# niea@ langage *e prograa#ion; C; C; 9aa; LI$P...D <i e!# H)a%ile J anipler por n in)ora#i%ien. / Le %opila#er #ra*i# *an! n langage %ible *e #6pe A!!eblerD; )a%ile J anipler por l@or*ina#er. Ce langage %ible e!# en!i#e op#ii!. Rear<e : Il ei!#e *@e%ellen#! %opila#er!; ai! il n@ei!#e pa! *@e%ellen# #ra*%#er *@ne lange na#relle J ne a#re K B#! *e la %opila#ion : %hanger la )ore #o# en %on!eran# la !an#i<e. $ignaler le! errer! ren%on#re! e# ai*er l@in)ora#i%ien J le! %orriger. La #ra*%#ion !@e))e%#e en pl!ier! pha!e!.
–
–
Chane *e *eloppeen# *@n prograe Enon% *@n proble J r!o*re Anal6!e * proble *%i*abili#; %la!!e *e %oplei#D
! Al"orit#me
↻
Anal6!e *e %oplei# o6enne; pire %a!; eprien#ale re%her%he *e eiller! algori#he!D
! Choi *@n langage *e prograa#ion
=
! E%ri#re *@n %o*e !or%e
↻d$%u""a"e ! Compilation >nra#ion * %o*e %ible
↻&ptimisation 1.2. Quelques problèmes posés le choix du langage
por#abili# li!ibili# op#ii!a#ion * %o*e n m$ta-lan"a"e e!# n langage #ili! por *)inir n a#re langage par eeple *e! rgle! *e graaireD. Le langage pe# !erir J !e *%rire li/e. n *e! b#! *e l@#*e *e la %opila#ion por n prograer e!# *e !aoir %hoi!ir le bon langage. a#!onD
'a "estion des erreurs Proble! *@I0M In#er)a%e 0oe(Ma%hineD : %lar# *e! e!!age! *@errer; ai*e e))i%a%e a *bggage. ?elle! @ini#ia#ie!@ pe#/on lai!!er a %opila#er Q reparen#h!age; re#6pageD ?elle! errer! le %opila#er pe#/il @ignorer@ #o# en %on#inan# J #raaillerQ proble! *e @error re%oer6@D I0M In#er)a%e 0oe/Ma%hineD
–
–
–
peri!!ii# * langage ini#ia#ie! <e pe# pren*re n %opila#er proble! *e @#ra*e/o))@ <ilibre en#re *e! %oproi!D Eeple : Pl! la %opila#ion e!# rapi*e; oin! l@op#ii!a#ion * %o*e e!# )a%ile.
(ro%l)me de l*am%i"u+t$
7
ne phra!e abig e!# ne phra!e J la<elle on pe# a##riber pl!ier! !en!. Eeple : 2 , S + !@in#erpr#e %oe 2 ,D S + o 2 , S +D
A quelle %ranc#e appartient la compilation , C@e!# ne a#ire )on*aen#ale por l@in)ora#i<e Cela e# en Ue : / –
–
–
–
la #horie *e! langage! la prograa#ion l@algori#hi<e le! !#r%#re! *e *onne! l@ar%hi#e%#re *e! a%hine!
But de ce cours •
•
•
Copren*re %e <e )ai# le %opila#er o#er !o!/Ua%en#D $aoir %rire *e! graaire! a*ap#e! Appren*re *e! o#il! <i pere##en# *@%rire n %opila#er En TP : logi%iel! LEV e# YACCD
1.3. Un aper çu des phases de la compilation Co*e $or%e
! anal.se le/icale
! anal.se s.nta/ique
! anal.se s$mantique Repr!en#a#ion ab!#rai#e
4
! "$n$ration de code interm$diaire
! optimisation du code interm$diaire
! "$n$ration et optimisation du code ci%le iff$rentes p#ases peuent s*e/$cuter en mme temps 5suiant les lan"a"es et les compilateurs67
A7 'a p#ase d*anal.se Ce##e pha!e #ra*i# le %o*e !or%e en ne repr!en#a#ion in#er*iaire. Elle %on!#i#e le front end.
'*anal.se le/icale C@e!# la pha!e la pl! !iple. B# : pren*re en en#re n )lo# *e %ara%#re! e# pro%*er J la !egen#a#ion !para#ion en o#!D. O#il TP : LEV. –
–
–
On #roe le! o#! lee!; #oWen!D On ri)ie <e %ha<e o# #ro appar#ien# bien a lei<e *i%#ionnaireD On re#orne en#elleen#D *e! e!!age! *@errer.
Ce! , #ape! !e )on# !il#anen#; en n !el par%or! linaire * )lo# *@en#re. Eeple : l#*ian#a#roi!%hien! X l #*ian# a #roi! %hien!. le! 2 X ERRER le! go'bW X ERRER le! #*ian# X O" 1,S2+D X O"
5
Cer#ain! %opila#er! a%%ep#en# *e! o#! !an! *lii#er : laoi#re : la laeQ la oi#reQ N%e!!i#e n #raail *e @ loo8-a#ead @ on regar*e %e <i ien# apr!D
'*anal.se s.nta/ique en anglai! : parsin" D C'est une analyse de la correction de la structure.
O#il TP : YACC. On !e *onne : n )lo# *e o# e# on e# ri)ier la %on!i!#an%e *e l@a!!eblage *e %e! o#! en ne Hphra!e. On %on!#ri# n arbre !6n#ai<e On *#e%#e *e! errer!. Eeple : S S +, / 12 X ERRER : S S e!# in#er*i#.
'*anal.se dite 9s$mantique9 C@e!# l@anal6!e * !en!; elle gre par eeple le! proble! *e #6page. Cer#ain! langage! !on# %apable! *e %oner#ir a#oa#i<een# le! #6pe! m$canisme de coercition D. On pren* en en#re n arbre e# on pro%*e J *e! ri)i%a#ion!.
B7 'a p#ase de s.nt#)se 5ou "$n$ration de code6 Elle %on!#i#e le %ac8 end. Elle %on!i!#e J pren*re en en#re la repr!en#a#ion in#er*iaire *e na#re arbore!%en#eD engen*re par la pha!e *@anal6!e; por la #ra*ire en A!!ebler o en %o*e a%hine !p%i)i<e. Elle %opor#e #roi! #ape! :
- "$n$ration d*un code interm$diaire par eeple en %o*e ,/a*re!!e!D pro%he *e la a%hine ai! por#able / "$n$ration du code mac#ine sp$cifique J par#ir *e %e %o*e in#er*iaire
13
/ optimisation du code <i !e )ai# en %on%rren%e ae% le! pha!e! 1 e# 2 )a%#ori!a#ion *e ariable!; *e %o*e; inii!a#ion * nobre *e regi!#re! n%e!!aire!; e#%D
11
2. Quelques rappels de théorie des langages (voir Annexe)
12
2.1. Feuille d'exercices 1 : r é visions de th é orie des langages
:rammaires 17 $oi# > la graaire *)inie %oe !i# : $ X bA Z aB A X bAA Z a$ Z a B X aBB Z b$ Z b Eainer !i le! o#! !ian#! appar#iennen# J L>D; e# !i oi; *onner ne *ria#ion *roi#e; ne *ria#ion ga%he; e# l@arbre !6n#ai<e %orre!pon*an#! : [1 \ bbaaba [2 \ babbab [ , \ bbaaba
27 Mon#rer <e la graaire : $ X a$ Z $a Za e!# abig e# #roer ne graaire <ialen#e >@ non/abig. 37 $oi# > la graaire !r ]a;b *)inie %oe !i# : $ X $$ Z VaVaVa Z ^ V X bV Z ^ Mon#rer <e le o# [ \ abbaba e!# *an! L>D. +. On %on!i*re la graaire *)inie par : $ X aB Z bA A X a Z a$ Z bAA B X b Z b$ Z aBB Eainer !i le! o#! !ian#! appar#iennen# J L>D; e# !i oi; *onner ne *ria#ion *roi#e; ne *ria#ion ga%he; e# l@arbre !6n#ai<e %orre!pon*an# : [1 \ aaabbabbba [ 2 \ babbab Ei!#e/#/il ne epre!!ion rglire *%rian# le langage engen*r par > Q Por<oi Q $i oi; *onner %e##e epre!!ion rglire.
;7 ?el e!# le langage engen*r par la graaire : $ X AA A X AAA A X bA Z Ab Z a -#eriner !i %e langage e!# ra#ionnel e# !i oi; *onner n a#oa#e *@#a#! )ini!; ne epre!!ion rglire e# ne graaire rglire %orre!pon*an#!.
1,
=. Aliorer la graaire : $ X aA Z bB Z %*A X aB Z ^ B X aB Z abB - X a- Z b$ Z ^
E/pressions r$"uli)res 7. Mon#rer <e le! *e epre!!ion! rglire! r e# ! !on# <ialen#e! : r \ abDSaabDSaabDS ! \ bSabSaabDS 4. -onner ne graaire engen*ran# le langage *e! o#! !r ]a;b %opor#an# a oin! ne o%%rren%e *e @a@ e# a oin! ne o%%rren%e *e @b@; ain!i <@ne epre!!ion rglire %orre!pon*an#e. 5. Troer ne graaire > engen*ran# le langage *%ri# par l@epre!!ion rglire r \ abSababDS 13. -onner ne epre!!ion rglire *%rian# le e langage <e la graaire : $ X AaB A X bA Z ^ B X aB Z bB Z ^
Automates < pile 11. -onner ne graaire e# n a#oa#e J pile por le langage *e! o#! @bien paren#h!!@ !r ]a;b. 12. -onner ne graaire e# n a#oa#e J pile por le langage *e! palin*roe! !r ]a;b.
1+
3. L'analyse lexicale L@anal6!e lei%ale e!# n pr#rai#een# #r! ipor#an# : / !egen#a#ion *e! %ara%#re! * )lo# *@en#re !para#ion *e! @o#!@ o @#oWen!@ le! n! *e! a#re!D / reprage e# !para#ion! *e! o#! %l! * langage / *#e%#ion *@errer! @!6n#a error@D
En TP; on #ili!era l@o#il @LEV@ o )leD
Tran!paren#! : h##p:((&&&.Wei#h!%h&ar'.%o(%!1+,((!2311(le%#re!(313_Lei%al_Anal6!i!.p*) Keith Schwarz
18
4. L'analyse syntaxique Le pro%* <i %on!i!#e J #roer ne *ria#ion *@n o# [ *@n langage algbri<e !@appelle l@anal6!e !6n#ai<e. Il ei!#e 2 gran*e! #ho*e! *@anal6!e : La #ho*e ascendante bo##o/#opD La #ho*e descendante #op/#o/bo##oD
–
–
M$t#ode ascendante Prin%ipe : On par# *@n o# [ e# on e!!a6e *e pro%*er J *e! repla%een#! !%%e!!i)! <i pere##en# *@arrier J l@aioe $. M$t#ode descendante Prin%ipe : On par# *e l@aioe $ e# on e!!a6e *e #roer ne *ria#ion <i abo#i# J [. Eeple 1 : >raaire >1 : $ X aA Z b A X *A Z e BX)Zg o# J anal6!er : [ \ a*e Anal6!e *e!%en*an#e : $ r1D aA r,D a* A r+D a*e Anal6!e a!%en*an#e : a*e `r+D a*A `r,D aA `r1D $ Eeple 2 : >raaire >2 : $ X AB A X BA Z a BXb o# : [ : bbab Anal6!e *e!%en*an#e : $ r1D AB r2D BAB r+D bAB r2D bBAB r+D bbAB r,D bbaB r+D bbab Anal6!e a!%en*an#e : bbab `r+D Bbab `r+D BBab `r,D BBAb `r2D BAb `r2D Ab `r+DAB `r1D `$
1=
Anal6!e *e!%en*an#e : on ob#ien*ra ne d$riation "auc#e *e [. Anal6!e a!%en*an#e : on ob#ien*ra ne d$riation droite *e [. Anal6!e *e!%en*an#e : $ r1D AB r2D BAB r+D bAB r2D bBAB r+D bbAB r,D bbaB r+D bbab Suite de r)"les 51=2=4=2=4=3=46 Anal6!e a!%en*an#e : $ `r1D AB `r+D Ab `r2D BAb `r2D BBAb `r,D BBab `r+D Bbab `r+Dbbab Suite de r)"les 51=4=2=2=3=4=46 Remarque : l'analyse ascendante marche avec une classe de langages plus restreinte que l'analyse descendante.
Anal6!e a!%en*an#e : langage! LR Anal6!e *e!%en*an#e : langage! LL
17
5. Les fonctions FIRST et FOLLOW Ce! )on%#ion! !eron# n%e!!aire! por %on!#rire le! anal6!er! #*i!.
5.1. Symboles nullables n !6bole A N e!# nulla%le !i A S ^ Cal%l *e! !6bole! nllable! Ini#iali!a#ion : por %ha<e ^/pro*%#ion A X ^ ; A e!# nllable. Rp#er U!<@J ob#en#ion *e !#abili# : Por %ha<e rgle *e pro*%#ion VX Y1Y2 ... Yn; o %ha<e Yi e!# n %ara%#re non/#erinal *i))ren#D !i #o! le! Yi !on# nllable!; alor! V e!# nllable.
–
–
5.2. Dé finition de FIRST $oi# c ne %hane *e %ara%#re! c NdTD.
>IRS?5@6 est l*ensem%le de tous les terminau/ qui peuent commencer une c#ane qui se d$rie de @= aec en plus si @ est nulla%le >IRS?5@6D/ ? @ F / GHd D si @ est nulla%leH7 Eeple : >, : E X TE@ E@ X TE@ Z ^ T X FT@ T@ X SFT@ Z ^ F X ED Z n por c \TE@ ; @@ e!# *an! FIR$T cD. En e))e# : TE@ r2D T TE@ r+D FT@TE@ r7D 5EDT@TE@.
14
5.3. Dé finition de FOLLOW $oi# A n !6bole non/#erinal.
>&''&5A6 est l*ensem%le de tous les terminau/ qui peuent apparatre imm$diatement < droite de A dans une d$riation S F @ A G7 >&''&5A6D/ ? S F @ A G= aec / >IRS?5G6H7 Rear<e : le o# i*e n@appar#ien# Uaai! J FOLLO. Eeple !r >, : @D@ e!# *an! FOLLOED : en e))e#; E r1D TE@ r+D FT@E@ r7D E6T@E@. On aUo#era n !6bole *e )in *e o#; !era *an! FOLLO$D.
5.4. Calcul du FIRST On ara be!oin *e %al%ler FIR$TcD por %ha<e c <i e!# ne par#ie *roi#e *@ne rgle *e pro*%#ion *e la graaire %on!i*re. / Por n %ara%#re #erinal ; FIR$TD\]. / Por le! %ara%#re! non/#erina V; on %al%le FIR$TVD. / Por c par#ie *roi#e *@ne rgle on %al%le FIR$TcD. Cal%l *e FIR$TVD; por #o# V N On a %on!#rire n graphe *@hri#age orien#D *on# le! !oe#! !on# le! len#! *e N %ha<e !oe# V ara ne #i<e##e <i %on#ien*ra le! len#! *e FIR$TVD. Le! ar%! pere##ron# *e )aire hri#er *e !6bole! #erina ai! pa! *e ^D. A *par#; le graphe n@a pa! *@ar% e# le! #i<e##e! !on# #o#e! i*e!. –
–
–
Por %ha<e rgle *e pro*%#ion *e la )ore VX Y 1Y2 ... Yn; o %ha<e Y i e!# n %ara%#re *i))ren# *e NdTD : $oi# Y" le preier Yi non nllable !i le! Yi !on# #o! nllable!; alor! W\nD $i Y" e!# #erinal; A9OTER Y " J FIR$TVD A9OTER le! ar%! Yi ;VD *e i\1 J W/1. $inon Y" e!# non/#erinalD; A9OTER le! ar%! Y i ;VD *e i\1 J W. Faire hri#er. A9OTER ^ e!# *an! FIR$T *e #o! le! non/#erina nllable!.
15
Eeple : reprenon! la graaire >, : E X TE@ E@ X TE@ Z ^ T X FT@ T@ X SFT@ Z ^ F X ED Z n $oe#! * graphe *@hri#age : E; E@; T; T@; F $6bole! nllable! : E@; T@. E X TE@ : on aUo#e l@ar% T;ED E@ X TE@ : on aUo#e @@ *an! FIR$TE@D T X FT@ : on aUo#e l@ar% F;TD T@ X SFT@ : on aUo#e @S@ *an! FIR$TT@D F X ED : on aUo#e @@ *an! FIR$TFD F X n : on aUo#e @n@ *an! FIR$TFD >raphe : E@ ]; T@]S; F];n; ar%! T;ED; F;TD T hri#e *e ];n *e F; e# E hri#e *e ];n *e T. On aUo#e en!i#e ^ a #i<e##e! *e T@ e# *e E@. A la )in : FIR$TED\];n; FIR$TE@D\ ] ^ ;; FIR$TTD\];n; FIR$TT@D\] ^ ;S; FIR$TFD\];n. Cal%l *e FIR$TcD; por c ne par#ie *roi#e *e rgle c\Y1Y2 ... Yn; o %ha<e Y i e!# n %ara%#re *i))ren# *e NdTD : $i le! Yi !on# #o! nllable!; alor! W\n; !inon Y " e!# le preier Yi non nllable. FIR$TcD\ FIR$TY1Dd ...d FIR$TY"D. $i W\n; A9OTER ^ J FIR$T cD. Eeple !r >,: E X TE@ E@ X TE@ Z ^ T X FT@ T@ X SFT@ Z ^ F X ED Z n
23
c1 \ TE@ : FIR$TTE@D \ FIR$TTD \ ];n. c2 \ TE@ : FIR$TTE@D \ ] c, \ ^ : FIR$T^D \ ]^ c+ \ FT@ : FIR$TFT@ D \ FIR$TFD \ ];n. c8 \ SFT@ : FIR$TSFT@ D \ ]S c= \ ^ : FIR$T^D \ ]^ c7 \ ED : FIR$TEDD\] c4\ n : FIR$TnD\]n
5.5. Calcul du FOLLOW des non-terminaux -e e <e por FIR$T; on %on!#ri# n graphe *@hri#age; *on# le! !oe#! !on# le! len#! *e N %ha<e !oe# V ara ne #i<e##e <i %on#ien*ra le! len#! *e FOLLOVD.
Initialisation mettre J dans >&''&5S67 On a %her%her , #6pe! *e *%opo!i#ion *e! par#ie! *roi#e! *e rgle! por n !6bole non/#erinal B *e %e##e par#ie *roi#e. 1. A X c B f; c N d TDS; f ^; f N d TD; ai! f pe# #re nllableD : on e# FIR$TfD/^ *an! FOLLOBD. 2. A X c B o c B f ae% f nllable c N d TDS; f N d TDSD : aUo#er l@ar% A;BD a graphe *@hri#age.
Eeple !r la graaire >, :
17 r)"les de t.pe @ B G 5G K 6 règle
B
f
FR!T"#$
F%&&%"B$ "avant$
F%&&%"B$ "après$
E X TE@
T
E@
]^;
]
E@ X TE@
T
E@
i*e
i*e
i*e
T X FT@
F
T@
] ^ ;S
]S
T@ X SFT@
F
T@
i*e
i*e
i*e
F X ED
E
D
]D
]
];D
21
règle
B
f
FR!T"#$
22
F%&&%"B$ "avant$
F%&&%"B$ "après$
27 r)"les de t.pe @ B règle
B
(
arc "()B$
E X TE@
E@
E
E;E@D
E@ X TE@
E@
E@
rien
T X FT@
T@
T
T;T@D
T@ X SFT@
T@
T@
rien
37 r)"les de t.pe @ B G 5G nulla%le6 règle
B
f
(
arc "()B$
E X TE@
T
*'
*
"*)T$
E@ X TE@
T
E@
E@
E@;TD
T X FT@
F
T@
T
T;FD
T@ X SFT@
F
T@
T@
T@;FD
On ob#ien# le graphe o T e!# ini#iali! J ]; F J ]S; E S ];D; ae% le! ar%! : E;E@D; E;TD; E@;TD; T;T@D;T;FD; T@;FD On ob#ien# : FOLLOED \ ] ;D FOLLOE@D \ ];D FOLLOTD \ ] ;;D FOLLOT@D \ ];;D FOLLOFD \ ] ; S; ;D
2,
6. L'analyse descendante (top-down parsing) 6.1. Les langages LL Rappel! Prin%ipe : on !e *onne ne graaire > e# n o# [; e# on %on!#ri# n arbre *e *ria#ion en par#an# *e l@aioe. Eeple! : >raaire >1 : $ X aA Z b A X *A Z e B X ) BZ g o# J anal6!er : [ \ a*e Anal6!e *e!%en*an#e : $ r1D aA r,D a*A r+D a*e >raaire >2 : $ X AB A X BA Z a BXb o# : [ : bbab Anal6!e *e!%en*an#e : $ r1D AB r2D BAB r+D bAB r2D bBAB r+D bbAB r,D bbaB r+D bbab On a %on!#ri# ne *ria#ion "auc#e *e [; repr!en#able par la !i#e *e rgle! r1;r2;r+;r2;r+;r,;r+D; en #ili!an# n !6bole *e looW/ahea*. Ce##e #e%hni<e e!# #ili!e por *e! graaire! par#i%lire!; appele! LLWD !@il 6 a W !6bole! *e looW/ahea* J #ili!er. LLWD\!%anning #he inp# )ro 'e)# #o righ# pro*%ing a 'e)#o!# *eria#ion; &i#h W !6bol! o) looW/ahea*.
/ Aan#age! : %e##e #e%hni<e e!# !iple; #r! e))i%a%e e# )a%ile J iplen#er.
2+
/ In%onnien# : elle ne )on%#ionne !an! %on)li#! <e !r ne !o!/%la!!e *e! langage! algbri<e! *#erini!#e!.
- &n dit qu*un lan"a"e ' est ''586 s*il e/iste une "rammaire ''586 qui en"endre '7 - Ln lan"a"e est ''586 si il est ''5167 - &n parlera de la classe des lan"a"es ''7 Eeple *e graaire LL1D : la graaire >, e!# ne er!ion LL *e la graaire LALR1D *e! epre!!ion! ari#h#i<e! !iple!. >, : E X TE@ E@ X TE@ Z ^ T X FT@ T@ X SFT@ Z ^ F X ED Z n
6.2. Caract ér isation des grammaires LL(1) Rappel : on *i# <@n !6bole non/#erinal A e!# nllable !i A S ^; on *i# <@ne %hane *e %ara%#re! c e!# nllable !i c S ^. Por *)inir ne graaire LL1D; on #ili!e le! )on%#ion! FIR$T e# FOLLO; <i pere##ron# *e %hoi!ir la rgle *e graaire J appli<er. Cara%#ri!a#ion ne graaire algbri<e > e!# *i#e LL1D !i j A N; a!!o%i a rgle! *e pro*%#ion A c1 Z c2 Z .... Z cn on a; j i;U ; i U; / FIR$TciD k FIR$Tc UD \ / e#; por #o# c i nllable : FIR$Tc UD k FOLLOAD \ Ce##e *)ini#ion pe# !@#en*re a graaire! LLWD. FIR$T e# FOLLO !eriron# J %on!#rire la #able *@anal6!e LL.
6.3. L'analyseur LL On #ili!e en%ore ne )oi! ne #able *@anal6!e; e# la graaire e!# LL1D !i e# !eleen# !i la #able e!# !an! %on)li#. ne %a!e i*e %orre!pon* J n @reUe%#@.
28
Eeple : oi%i la #able *@anal6!e *e la graaire >, : >, : E X TE@ E@ X TE@ Z ^ T X FT@ T@ X SFT@ Z ^ F X ED Z n
non/#re
n nobreD
E
r1E X TE@
E@ T
D
r,E@ X ^
r,E@ X ^
r=T@ X ^
r= T@ X ^
r1E X TE@ r2E@ X TE@
r+T X FT@
T@ F
S
r+T X FT@ r=T@ X ^
r8T@ X SFT@
r4F X n
r7F X ED
%olonne! : le! !6bole! #erina e# ligne! : le! !6bole! non/#erina %a!e! : le! rgle! *e pro*%#ion On #ili!e ne pile ini#iali!e J 3; $; e# n !6bole *e looW/ahea* p <i poin#e !r le %ara%#re %oran# * o# J anal6!er. E#ape *@anal6!e : On %opare le !6bole *e ha# *e pile V ae% p. 1er %a! : V e!# n !6bole #erinal V TD / !i V \ p; on *pile V e# on *%ale p. / !inon; RE9ECT. 2e %a! : V e!# n !6bole non/#erinal V ND / !i mV;p e!# ne rgle V X ^; on *pile V e# on n@epile rienD. / !i mV;p e!# ne rgle V X Y1Y2 ... Yn; o %ha<e Yi e!# n %ara%#re *i))ren#D; on *pile V e# on epile Yn....Y1 !a) ^D. / !i mV;p e!# ne %a!e i*e : RE9ECT.
2=
,e %a! : V\3 / !i p\; ACCEPT. / !inon; RE9ECT. Eeple : on a anal6!er le o# [ \ 2 , S +. Pile
p
%a!e
3;E
2
mE;n
r1: E X TE@
3; E@; T
2
mT;n
r+ : T X FT@
3; E@; T@;F
2
mF;n
r4 : F X n
3; E@; T@;n
2
3; E@; T@
mT@;
r= : T@ X ^
3; E@
mE@;
r2 : E@ X TE@
3; E@;T;
3; E@;T
,
mT;n
r+ : T X FT@
3; E@;T@;F
,
mF;n
r4 : F X n
3; E@;T@;n
,
3; E@;T@
S
3; E@;T@;F;S
S
3; E@;T@;F
+
3; E@;T@;n
+
3; E@;T@
mT@;
r= : T@ X ^
3; E@
mE@;
r, : E@ X ^
3
m3;
ACCEPT
n\2
\
n\, mT@;S
*%alage
*%alage
*%alage
r8 : T@ X SFT@ S\S
mF;n
*%alage
r4 : F X n n\+
*%alage
$i#e *e rgle! : r1; r+; r4; r=; r2; r+; r4; r8; r4; r=; r,D. -ria#ion ga%he %orre!pon*an#e : E r1DTE@ r+D FT@E@ r4DnT@E@ r=D nE@ r2D nTE@ r+D nFT@E@ r4D nnT@E@ r8D nnSFT@E@r4D nnSnT@E@ r=D nnSnE@ r,D nnSn
27
6.4. Calcul de la table d'analyse LL On pe# ri)ier <e >, e!# bien ne graaire LL1D : FIRST( @i k FIRST( @
Règle de production factorisée
N nulla%les
E X TE@
rien
rien
E@ X TE@ Z ^
FIR$TTE@D\]; FIR$T^D\]^ O"
^
T X FT@
rien
rien
T@ X SFT@ Z ^
FIR$TSFT@D\]S; FIR$T^D\]^ O"
^
F X ED Z n
FIR$TEDD\]; FIR$TnD\]n O"
rien
Construction de la ta%le d*anal.se ''516 Por %ha<e rgle *e pro*%#ion AXc Por %ha<e a *an! FIR$TcD Me##re AXc *an! la %a!e mA;a $i en pl! c e!# nllable; por %ha<e b FOLLOAD Me##re AXc *an! a %a!e mA;b Eeple !r la graaire >, : E X TE@ E@ X TE@ Z ^ T X FT@ T@ X SFT@ Z ^ F X ED Z n
24
si oui! F"##"$(% kFIRST ( @
FOLLOE@D\ ];D O"
FOLLOT@D\ ];;D O"
FOLLOED \ ] ;D FOLLOE@D \ ];D FOLLOTD \ ] ;;D FOLLOT@D \ ];;D FOLLOFD \ ] ; S; ;D c1 \ TE@ : FIR$TTE@D \ FIR$TTD \ ];n. c2 \ TE@ : FIR$TTE@D \ ] c, \ ^ : FIR$T^D \ ]^ c+ \ FT@ : FIR$TFT@ D \ FIR$TFD \ ];n. c8 \ SFT@ : FIR$TSFT@ D \ ]S c= \ ^ : FIR$T^D \ ]^ c7 \ ED : FIR$TEDD\] c7 \ n : FIR$TnD\]n Rgle r1 : E X TE@ : FIR$TTE@D\];n : on e# r1 *an! mE; e# *an! mE;n Rgle r2 : E@ X TE@ : FIR$TTE@D\] : on e# r2 *an! mE@; Rgle r, : E@ X ^ : FIR$T ^ D\] ^ ^ e!# nllable FOLLOE@D\];D on e# r, *an! mE@; e# *an! E@;D Rgle r+ : T X FT@ : FIR$TFT@D\];n on e# r+ *an! mT; e# *an! mT;n. Rgle r8 : T@ X SFT@ FIR$TSFT@D \ ]S on e# r= *an! mT@S. Rgle r= : T@ X ^ : ^ e!# nllable FOLLOT@D \ ];;D on e# r= *an! mT@; ; mT@; e# *an! mT@; D. Rgle r7 : F X ED FIR$TEDD \ ] on e# r7 *an! mF;D. Rgle r4 : F X n FIR$TnD\]n on e# r4 *an! mF;n. On re#roe la #able #ili!e %i/*e!!!.
6.5.
Procé dé s de r éé criture d'une grammaire non LL(1)
Rappel : on *i# <e l@on r%ri# ne graaire > !i on %al%le ne graaire >@ <ialen#e J >.
6.5.1. Récursivité ne graaire algbri<e > e!# *i#e r$cursie < "auc#e le)# re%r!ieD !i e#
25
!eleen# !i elle %on#ien# n non/#erinal A #el <e A S A c ; c NdT.
Eeple : >1 : E X ET Z T T X TSF Z F F X ED Z n >1 e!# r%r!ie J ga%he. Propri# : ne graaire r%r!ie J ga%he n@e!# pa! LL1D. On pe# par)oi! liiner la r%r!ii# en r%rian# la graaire. On *i!#inge :
'a r$cursiit$ < "auc#e imm$diate Il ei!#e ne rgle *e #6pe A X A c. Eliina#ion *e la r%r!ii# ga%he i*ia#e : por %ha<e non/#erinal A; on repla%e A X A c1 Z .... Z A c Z f1 Z... Z fn par : A X f1 A@ Z .... Zfn A@ A@ X c1 A@ Z .... Z c A@Z ^ On ob#ien# ne graaire <ialen#e. Eeple : >1 : E X ET Z T T X TSF Z F F X ED Z n Trai#een# *e E X ET Z T : A X A c1 Z f1
,3
on repla%e par : E X TE@ E@ X TE@ Z ^ . Trai#een# *e T X TSF Z F on repla%e par : T X FT@ T@ X SFT@ Z ^ On ob#ien# la graaire >, : E X TE@ E@ X TE@ Z ^ T X FT@ T@ X SFT@ Z ^ F X ED Z n
'a r$cursiit$ < "auc#e non imm$diate ne graaire e!# r%r!ie J ga%he non i*ia#een#D !i elle %on#ien# n non/#erinal A #el <e A A c ; c NdT. Eeple : > $ X Aa Z b A X A% Z $* Z ^ On a : $ Aa $*a ; *on% > e!# r%r!ie J ga%he ai! non i*ia#een#. Eliina#ion *e la r%r!ii# ga%he : 1. A##riber n or*re arbi#raire a non/#erina : V1; V2; .....VnD 2. Por i\1 J n )aire Por U\1 J i/1 )aire Repla%er %ha<e pro*%#ion *e la )ore Vi X VU c ; ae% VU X f1 Z .... Zfr par : Vi X f1 c Z.... Z fr c Eliiner le! r%r!ii#! ga%he! i*ia#e! por Vi.
,1
On ob#ien# ne graaire <ialen#e.
Eeple : $ X Aa Z b A X A% Z $* Z ^ i\1 : Vi \ $ : pa! *e r%r!ii# i\2 e# U\1 : Vi \ A e# VU \ $ : repla%er A X $*; o $ X Aa Z b par : A X Aa* Z b* Eliinon! en!i#e la r%r!ii# ga%he i*ia#e *e : A X A%Z Aa* Z b* Z ^ on repla%e par : A X b*A@ Z ^A@ A@ X %A@ Z a*A@ Z ^ On ob#ien# )inaleen# : $ X Aa Z b A X b*A@ Z A@ A@ X %A@ Z a*A@ Z ^ Rear<e : %e pro%* *e r%ri#re ne !pprie pa! #oUor! la r%r!ii#; par eeple por : $ X $a Z T!% Z * T X TbT Z ^
O7;727 >actorisation >actorisation < "auc#e On *i# <@n graaire algbri<e > e!# non )a%#ori!e J ga%he !i elle %on#ien# n non/ #erinal A *on# l@en!eble *e! par#ie! *roi#e! *e pro*%#ion! e!# *e la )ore A X c f1 Z c f2....Z1Z....Zp Propri# : ne graaire non )a%#ori!e J ga%he n@e!# pa! LL1D.
,2
Pro%* *e )a%#ori!a#ion ga%he Por %ha<e non/#erinal A; #roer n pl! long pr)ie c %on J pl!ier! par#ie! *roi#e! *e pro*%#ion *on# A e!# par#ie ga%he. A X c f1 Z c f2....Z c fnZ1Z....Zp Repla%er par : A X c A@ Z 1Z....Zp A@ X f1 Z f2....Z fn Re%oen%er U!<@J %e <@il n@6 ai# pl! *e pr)ie propre %on. On ob#ien# ne graaire <ialen#e. Eeple : oi%i ne graaire >+ en%ore ne er!ion *e la graaire >1 *e! epre!!ion! ari#h#i<e! !ipleD >+ : EXTEZT T X FS T Z F F X ED Z n R%ri#re *e la rgle : EXTEZT: on ob#ien# : E X TE@ E@ X E Z ^ R%ri#re *e la rgle : T X FS T Z F on ob#ien# : T X FT@ T@ X ST Z ^ $oi# globaleen#; la graaire <ialen#e : E X TE@ E@ X E Z ^ T X FT@ T@ X ST Z ^ F X ED Z n
,,
,+
6.6. Feuille d 'exercices 2 : les langages LL 17 Calculer la ta%le d*anal.se ''516 pour $ X iBae B X TB Z ^ T X me- Z *i - X e* Z ^
27 Calculer la ta%le d*anal.se ''516 pour 5apr)s aoir factoris$6 $ X aB Z bA A X a Z a$ Z bAA B X b Z b$ Z aBB 37 Consid$rons la "rammaire :2 E X EE Z ESE Z ED Z n 1. Mon#rer <e >2 e!# r%r!ie J ga%he e# non )a%#ori!e J ga%he. 2. R%rire >2 en %oenGan# par la )a%#ori!er; pi! en #rai#an# la r%r!ii#; ob#enan# la graaire >@2. ,. R%rire >2 en %oenGan# par #rai#er la r%r!ii#; pi! en )a%#ori!an#; ob#enan# la graaire >2. +. Con!#rire le! *e #able! *@anal6!e. >@2 e# >2 !on#/elle! LL1DQ Pro%*er J l@anal6!e * o# [ \ +8 por le! *e graaire!.
,8
7. L'analyse ascendante et les langages LR 7.1. Principe du shift-reduce parsing Prin%ipe : On !e *onne n o# [; on le li# %ara%#re par %ara%#re e# on #en#e *e re%on!#i#er ne *ria#ion. On a #ili!er ne pile <i a ai*er J reprer *e! par#ie! *roi#e! *e rgle!. On a *on% epiler U!<@J %e <@on #roe ne par#ie *roi#e; pi! on a *piler %e##e par#ie *roi#e J l@ener!D e# repiler la par#ie ga%he J !a pla%e. On #ili!e 2 opra#ion! len#aire! : / L@opra#ion *e d$cala"e s#iftD <i %on!i!#e epiler le %ara%#re %oran#; pi! J lire le %ara%#re !ian# * o# J anal6!er. / L@opra#ion *e r$duction reduceD; <i %on!i!#e J repla%er la par#ie *roi#e *@ne rgle par !a par#ie ga%he on *pile la par#ie *roi#e *e rgle %orre!pon*an#e e# on repile la par#ie ga%heD. Eeple : >raaire >, : $ X aABe A X Ab% Z b BX* o# [ \ abb%*e abb%*e `!hi)# aD abb%*e `!hi)# bD abb%*e `re* , : A X bD aAb%*e `!hi)# bD aAb%*e `!hi)# %D aAb%*e`re* 2 : A X Ab%D aA*e `!hi)# *D aA*e `re* + : B X *DaABe `!hi)# eD aABe `re* 1 : $ X aABeD $ On a %on!#ri# la *ria#ion *roi#e : $ r1DaABE r+DaA*e r2D aAb%*e r,Dabb%*e
mot abb%*e abb%*e abb%*e abb%*e
d$ri7 pilePat abb%*e m abb%*e ma abb%*e ma;b aAb%*e ma;A
action !hi)# aD !hi)# bD re* , A X b !hi)# bD
pile apr)s ma ma;b ma;A ma;A;b
,=
abb%*e aAb%*e ma;A;b ,,,, C&Q>'I? ON NE $AIT PA$ $I ON !hi)# por aller er! Ab%D o !i re* , A X bD ON C0OI$IT $0IFT !hi)# %D ma;A;b;% abb%*e aAb%*e ma;A;b;% re* 2 : A X Ab% ma;A abb%*e aA*e ma;A !hi)# *D ma;A;* abb%*e aA*e ma;A;* re* + : B X * ma;A;B abb%*e aA*e ma;A;B !hi)# eD ma;A;B;e abb%*e aA*e ma;A;B;e re* 1 : $ X aABe m$ On a $ e# : on a gagn K On a *)ini par l@anal6!e ne !i#e *e rgle! <i *)ini# la *ria#ion *roi#e ob#ene. Ce##e #ho*e *@anal6!e !@appelle le @!hi)#/re*%e par!ing@. Lor!<e l@on ne !ai# pa! !@il )a# %hoi!ir n !hi)# o n re*%e; on ren%on#re n conflit s#ift-reduce lor!<@on a le! %hoi en#re l@appli%a#ion! *e pl!ier! rgle!; on ren%on#re n conflit reduce-reduce7
7.2. Les grammaires LR et LALR Le !hi)#/re*%e par!ing pe# !e )aire !an! %on)li# por le! graaire! LRWD.
'R586'eft-to-Ri"#t scan of t#e input producin" a Ri"#tmost deriation usin" 8 s.m%ols of loo8-a#ead7 -)ini#ion : On appelle graaire LRWD; ne graaire algbri<e > <i pere#; en %onnai!!an# le! W %ara%#re! !ian#! * o# J anal6!er; *e *%i*er *e )aGon *#erini!#eD <elle opra#ion appli<er por arrier J la *ria#ion *@n o# *e L>D.
$finition &n appelle lan"a"e 'R586 un lan"a"e al"$%rique tel qu*il e/iste une "rammaire 'R586 qui l*en"endre7 ?#$or)me ?out lan"a"e 'R586 est aussi 'R5167 &n appelle 'R un lan"a"e qui est 'R5167
,7
?#$or)me Ln lan"a"e est 'R si et seulement si il est al"$%rique et d$terministe7 Por *%i*er !i n o# [ appar#ien# a langage *)ini par ne graaire LR; on #ili!e n a#oa#e J pile *#erini!#e par#i%lier anal6!er LRD pr!en# !o! )ore *@ne #able *@anal6!e. / ne #able LRWD e!# *e *ien!ion W1. / -an! la pra#i<e; on n@#ili!e <e le! #able! LR1D; <i !on# *e! #able! J *oble en#re. La %la!!e *e! langage! LL e!# !#ri%#een# in%l!e *an! la %la!!e *e! langage! LR : langage! ra#ionnel! ⊊ langage! LL ⊊ langage! algbri<e!
⊊
langage! LR \ langage! algbri<e! *#erini!#e!
7.3. L'analyseur LR(1) On !e *onne : / ne #able *@anal6!e / ne pile; <i %on#ien# ne al#ernan%e *@#a#! nro#! e# *e %ara%#re! *e N q T / n o# J anal6!er [ / n poin#er p !r la le##re %oran#e *e [
Initialisation On epile 3 e# p poin#e !r le preier %ara%#re *e [. Etape d*anal.se On li# le ha# *e la pile 1 o 2 %ara%#re!D; e# ae% p; on en **i# ne %a!e *e la #able <i a %on#enir *e! in!#r%#ion!. 1er %a! : Le !6bole *e ha# *e pile e!# n non/#erinal F; on li# le! 2 %ara%#re! *e ha# *e pile mi;F <i *onne n #a# U; <e l@on epile. 2e %a! : Le !6bole *e ha# *e pile e!# n #a# i; on li# la %a!e mi;p *e l@anal6!er.
,4
%a! 2.1 : Tmi;p\rU ne rgle *e la )ore A X cD; on *pile U!<@J ob#enir J l@ener!D #o! le! %ara%#re! %on!%#i)! *e c; pi! on epile A. %a! 2.2 : Tmi;p\!U; on a e))e%#er n !hi)# : on * %ale p on epile l@an%ien p on epile l@#a# U. %a! 2., : Tmi;p! e!# i*e : RE9ECT : le o# n@appar#ien# pa! a langage. %a! 2.+ : Tmi;p! \ ACCEPT; le o# e!# a%%ep#; e# on ob#ien# ne *ria#ion *roi#e *e %e o# en reprenan# J l@iner!eD la !i#e *e! rgle! #ili!e!. Eeple : >raaire >1 *e! epre!!ion! ari#h#i<e! : r1 : E X E T r2 : E X T r, : T X T S F r+ : T X F r8 : F X ED r= : F X 3Z1Z2Z,Z+Z8Z=Z7Z4Z5 3Z1Z2Z,Z+Z8Z=Z7Z4Z5 o : r= : F X nb Table *@anal6!e : E#a#
nb nb
3
!8
S
D
!+
1
!=
2
r2
!7
r2
r2
,
r+
r+
r+
r+
+
!+ r=
T
F
1
2
,
4
2
,
5
,
ACC
!8
8
E
r=
r=
=
!8
!+
7
!8
!+
r=
13
4
!=
!11
5
r1
!7
r1
r1
13
r,
r,
r,
r,
11
r8
r8
r8
r8
,5
o# J anal6!er : ,+S2 Pile
p
%a!e
a% a%#ion
0
,
3;nb
!8
0;,;;
8;
rO : F X nb
0;F
3;F
,
0;F;3
,;
r4 : T X F
0;T
O;T
2
0=T;2
2;
r2 : E X T
0=E
3;E
1
0;E;1
1;
!=
0;E;1;;O
+
=;nb
!8
0;E;1=;O;+;;
S
8;S
rO : F X nb
0;E;1=;O;F
S
=;F
,
0;E;1=;O;F;3
S
,;S
r4 : T X F
0;E;1=;O;T
S
=;T
5
0;E;1=;O;T;
S
5;S
!7
0;E;1=;O;T;;S;T
2
7;nb
!8
0;E;1=;O;T;;S;T;2;;
8;
rO : F X nb
0;E;1=;O;T;;S;T;F
7;F
13
0;E;1=;O;T;;S;T;F;10
13;
r3 ? U ? F >
0;E;1=;O;T
=;T
5
0;E;1=;O;T;
5;
r1 E U E V ?
0;E
3;E
1
0;E;1
1;
ACCE(?
$i#e *e rgle! #ili!e! : r=;r+;r2;r=;r+;r=;r,;r1
+3
-ria#ion *roi#e %orre!pon*an#e : 1;,;=;+;=;2;+;=D
7.4. #es gra mmaires mmaires 'A'R On a le )on%#ionneen# *e l@anal6!er LR1D. -an! la pra#i<e; on #ili!e *e! #able! LALR1D; <i !on# ob#ene! en %on#ra%#an# %er#ain! #a#! *e la #able LR1D %orre!pon*an#e. %orre!pon*an#e. Aan#age! : / La #able ob#ene e!# ne##een# pl! pe#i#e : on gagne * #ep!. / Ce! graaire! @ar%hen#@ *e )aGon !a#i!)ai!an#e. In%onnien#! : / Le! langage! LALR !on# ne %la!!e re!#rein#e *e langage! LR. / On pe# in#ro*ire *e! %on)li#! alor! <e la graaire *e *par# #ai# bien LR1D.
ACC construit des ta%les 'A'R5167
:estion des conflits par ACC conflit s#iftWreduce ACC c#oisit le s#ift conflit reduceWreduce ACC c#oisit de r$duire par la r)"le de plus petit num$ro
Remarque la faXon de "$rer les conflits correspond < des interpr$tations diff$rentes diff$rentes du flot d*entr$e7
+1
7.5. Feuille d'exercices 3 : l'analyseur LALR oi%i *e! graaire! ae% por %ha%ne n o# J anal6!er. o! #roere' le! e%#ion! YACC *an! l@annee ,. Por %ha<e graaire; %on!#rire la #able *@anal6!e. Por %ha<e o# J anal6!er; !ignaler le! en#el! %on)li#! e# la )aGon *on# il! on# # r!ol!; *onner la !i#e *e rgle! ob#ene; ain!i <e la *ria#ion *roi#e e# l@arbre !6n#ai<e %orre!pon*an#. 1. >raaire >1 *e! epre!!ion! ari#h#i<e! : o# 2,D 2. >raaire rglire engen*ran# le langage aa bbD : o# bbaabb ,. Mo#! bien paren#h!! !r ]a;b : o# aababb +. Langage @E?AL@ a#an# *e @a@ <e *e @b@D : o# abba 8. >raaire *e a nbn : o# aaabbb =. Trailing Con# : o# : abaaaa 7. Een/Een n nobre pair *e @a@ e# n nobre pair *e @b@D er!ion rglire : o# abbabb 4. Een/Een n nobre pair *e @a@ e# n nobre pair *e @b@D er!ion non rglire : o# abbabb
+2
7.6. Feuille d'exercices 4 : étude des conflits dans les tables LALR(1) On a %oparer *e graaire! *e! epre!!ion algbri<e! !iple! !ian#e! n e!# n nobreD. La !or#ie YACC por >2 e!# *onne J la )in. >1 : E X ET Z T T X TSF Z F F X ED Z n >2 : E X EE Z ESE Z ED Z n
Yuestion 1 / Por le! o#! [1\ 12, e# [2 \ +8S=; *onner #o! le! arbre! !6n#ai<e! po!!ible!. ?e rear<e/#/onQ / Por %ha<e arbre !6n#ai<e; *onner la *ria#ion *roi#e ain!i <e l@in#erpr#a#ion %orre!pon*an#e. Rappel : l@in#erpr#a#ion e!# le paren#h!age *e l@epre!!ionD.
Yuestion 2 9!#i)ie' o! rpon!e! a <e!#ion! !ian#e! : / >1; >2 !on#/elle! abig! Q / >1 e# >2 !on#/elle! <ialen#e!Q / >1 e# >2 !on#/elle! LALR1DQ LR1DQ / ?el! !on# le! aan#age! e# le! in%onnien#! *e >1 e# *e >2 Q
Yuestion 3 In#erpr#a#ion! *e! )orle! in%opl#een# paren#h!e! : Rappel! : a!!o%ia#ii# *roi#e *e : 12, !@in#erpr#e %oe 12,DD a!!o%ia#ii# ga%he *e : 12, !@in#erpr#e %oe 12D,D pr%*en%e *e !r S : +8S= !@in#erpr#e %oe +8DS=D pr%*en%e *e S !r : +8S= !@in#erpr#e %oe +8S=DD ?elle e!# la pr%*en%e en#re e# S *)inie par >1 Q >1 #ili!e/#/elle l@a!!o%ia#ii# ga%he o *roi#eQ Coen# porrai#/on o*i)ier %e! para#re!Q
+,
Yuestion 4 On a ain#enan# #*ier la pr%*en%e e# l@a!!o%ia#ii# por >2. En !e !eran# *e la <e!#ion 1; *onner la !i#e *e rgle! a##en*e *an! ne anal6!e !6n#ai<e * o# [1\ 12, por <e !oi# a!!o%ia#ie J ga%he; J *roi#eQ E# *e e; *onner la !i#e *e rgle! a##en*e *an! ne anal6!e !6n#ai<e * o# [2 \ +8S=; por <e S ai# pr%*en%e !r ; o <e ai# pr%*en%e !r SQ
Yuestion ; R!ol#ion! *e %on)li#! *an! >2 Coen# *oi#/on r!o*re le! %on)li#! *an! >2 #a#! 5 e# 13D por <e : / S ai# pr%*en%e !r / ai# pr%*en%e !r S / !oi# a!!o%ia#i) J ga%he / !oi# a!!o%ia#i) J *roi#e. -%rire le! 4 %a! ren%on#r! por le! + %on)li#! *%alage(r*%#ion ; e# epli<er J <el %hoi !r la pr%*en%e o l@a!!o%ia#ii# il! %orre!pon*en#.
Yuestion O >e!#ion *e! errer! -an! <elle! %a!e! i*e! *e la #able *@anal6!e *e >2 porrai#/on e##re le! e!!age! *@errer! !ian#! : / err 1 : @opran*e an<an#@ / err 2 : @paren#h!e oran#e an<an#e@ / err , : @opra#er an<an#@ / err + : @paren#h!e )eran#e an<an#e@ Epli<e' por<oi.
++
Sortie ACC pour :2 3 a%%ep# : E en* 1 E : E @@ E 2
Z E @S@ E
,
Z @@ E @D@
+
Z @n@
!#a#e 3 a%%ep# : . E en* 3D
@@ !hi)# 1 @n@ !hi)# 2 . error E go#o , !#a#e 1 E : @@ . E @D@ ,D
@@ !hi)# 1 @n@ !hi)# 2 . error E go#o + !#a#e 2 E : @n@ . +D
. re*%e + !#a#e , a%%ep# : E . en* 3D E : E . @@ E 1D E : E . @S@ E 2D
en* a%%ep#
+8
@@ !hi)# 8 @S@ !hi)# = . error !#a#e + E : E . @@ E 1D E : E . @S@ E 2D E : @@ E . @D@ ,D
@@ !hi)# 8 @S@ !hi)# = @D@ !hi)# 7 . error !#a#e 8 E : E @@ . E 1D
@@ !hi)# 1 @n@ !hi)# 2 . error E go#o 4 !#a#e = E : E @S@ . E 2D
@@ !hi)# 1 @n@ !hi)# 2 . error E go#o 5 !#a#e 7 E : @@ E @D@ . ,D
. re*%e ,
4: !hi)#(re*%e %on)li%# !hi)# 8; re*%e 1D on @@
+=
4: !hi)#(re*%e %on)li%# !hi)# =; re*%e 1D on @S@ !#a#e 4 E : E . @@ E 1D E : E @@ E . 1D E : E . @S@ E 2D
@@ !hi)# 8 @S@ !hi)# = en* re*%e 1 @D@ re*%e 1
5: !hi)#(re*%e %on)li%# !hi)# 8; re*%e 2D on @@ 5: !hi)#(re*%e %on)li%# !hi)# =; re*%e 2D on @S@ !#a#e 5 E : E . @@ E 1D E : E . @S@ E 2D E : E @S@ E . 2D
@@ !hi)# 8 @S@ !hi)# = en* re*%e 2 @D@ re*%e 2
$#a#e 4 %on#ain! 2 !hi)#(re*%e %on)li%#!. $#a#e 5 %on#ain! 2 !hi)#(re*%e %on)li%#!.
7 #erinal!; 2 non#erinal! 8 graar rle!; 13 !#a#e!
+7
8. Construction des tables LALR(1)
8.1. Notations et d éf initions -an! #o#e la !i#e; on %on!i*rera ne graaire >\N;T;P;$D. ne rgle *e P !era *!igne par : AXα o bien par : A X V1V2...Vn ; o %ha<e V i e!# n %ara%#re *e NT .
s Items E#an# *onne n rgle A X V 1V2...Vn ; n item e!# %e##e rgle ae% n poin# in!r *an! la par#ie *roi#e. Par eeple; A X V1 t V2...Vn e!# n i#e. Ce poin# pe# a!!i #re po!i#ionn a *b# o J la )in *e la %hane. A X tV1V2...Vn e# A X V1V2...Vn t !on# *e! i#e!. Le poin# !6boli!e la pile : %e <i e!# J ga%he * poin# e!# epil. Le b# e!# *@epiler ne par#ie *roi#e *e rgle; por pooir pro%*er J ne r*%#ion. u :rammaire au"ment$e On aUo#e ne rgle )i%#ie $@X $ J >. On a %on!#rire n a#oa#e n graphe *e #ran!i#ion!D *on# le! !oe#! !on# *e! #a#! e# o le! ar%! *@n !oe# er! n a#re !on# #i<e#! par *e! #ran!i#ion!. Le! #a#! %on#iennen# *e! i#e!. Prin%ipe gnral : On *)ini# n pro%* *e )ere#re *vn #a# On ini#iali!e ae% n #a# I 3. On )ere I3. On *)ini# le! #ran!i#ion! J par#ir *e I 3; %ran# *e noea #a#!. On )ere %ha<e noel #a# e# on *)ini# le! #ran!i#ion! *on# il e!# l@origine. e# ain!i *e !i#e... •
•
•
•
•
•
+4
8.2. Cas particulier : les tables LR(0) E#a# ini#ial : I3\ $@X t$
Z (roc$d$ de fermeture d*un $tat Por %ha<e rgle *e #6pe A X V 1 V2...Vit Vi1 ...Vn le poin# n@e!# pa! J la )inD #elle <e Vi1 e!# *an! N; por %ha<e rgle *e #6pe V i1 X α ; on aUo#e l@i#e Vi1 X tα . On re%oen%e !r le! noea i#e! U!<vJ !#abili#.
[ ?ransition de l*$tat I i < l*$tat I Prin%ipe : on %re n noel i#e en *%alan# le poin# *@n %ran er! la *roi#e. Par eeple; A X V 1 t V2...Vn *eien# A X V 1 V2.t V,..Vn La #ran!i#ion a!!o%ie e!# #i<e#e par V 2 Eeple e#rai# * %or! *e "ei#h $%h&ar'D : >: E@ X E E XT E X ET T X in# T X ED
+5
Con!#r%#ion *e la #able J par#ir *e l@a#oa#e : •
•
•
•
$i $@ wx $t e!# *an! l@#a# Ii : A%#ionmi; \ ACCEPT $i A X α t A $D e!# *an! l@#a# I i : A%#ionmi;a \ re*%e ae% A X α por #o# a. $i A X V1 V2...Vit Vi1 ...Vn e!# *an! l@#a# I i e# <@il 6 a ne #ran!i#ion er! l@#a# I U par le #erinal Vi1 : A%#ionmi;Vi1 \ !hi)# U $i A X V1 V2...Vit Vi1 ...Vn e!# *an! l@#a# I i e# <@il 6 a ne #ran!i#ion er! l@#a# I U par le non/#erinal Vi1 : >o#o i;ViD \ U
$r l@eeple : I3
D
!,
I1
!8
I2
r1
I, I+
!+
E
T
1
2
=
2
ACCEPT r1
r1
!, r,
in#
r,
r1
r1
!+ r,
r,
83
r,
I8
!,
!+
4
I=
!8
!7
I7
r+
r+
r+
r+
r+
I4
r2
r2
r2
r2
r2
Le langage e!# LR3D !i !a #able LR3D e!# !an! %on)li#. Malhere!een#; la %la!!e *e! langage! LR3D e!# #r! lii#e. par eeple; ne par#ie *roi#e ne *oi# pa! #re pr)ie *@ne a#re par#ie *roi#e *e par#ie! *roi#e! ne *oien# pa! #re i*en#i<e!; e#%.D
8.3. Construction des tables LR(1)
On a in!rer n %ara%#re *e @looW/ahea*@ por pa!!er J la %la!!e LR1D. Por %ela; on a aUo#er J %ha<e i#e ne li!#e *e #erina <i in*i<eron# <elle! !on# le! #ran!i#ion! a#ori!e! lor! *@ne opra#ion *e r*%#ion re*%eD.
No#a#ion : A X V1 V2...Vit Vi1 ...Vn ; ma1; a2; .... V1 V2...Vit Vi1 ...Vn !@appelle le coeur *e l@i#e on appellera ma 1; a2; .... le loo8-a#ead *e l@i#e. Ab! *e langage : on *ira <e A X V1 V2...Vit Vi1 ...Vn ; ai e!# n i#e.
E#a# ini#ial : I3\ $@X t$ ; m
Z (roc$d$ de fermeture d*un $tat (our c#aque item de t.pe A U t B = a 5aec B dans Q6 pour c#aque r)"le de t.pe B U = pour c#aque terminal % dans >IRS? 5 a6 = on aoute l*item B U t = %
81
Eeple !r > e#rai# * %or! *e "ei#h $%h&ar'D :
Cal%l *e la #able LR1D : Coe por le! #able! LR3D !a) <e •
$i A X α t; A $D e!# *an! l@#a# I i : A%#ionmi; \ re*%e ae% A X α
$r l@eeple :
82
&.'. Tables #%R(1
In%onnien# : le! #able! LR1D peen# #re nore!. $oen#; l@a#oa#e %opor#e *e! #a#! pre!<e i*en#i<e!. Eeple :
$ele *i))ren%e : le looW/ahea*.
8,
On a )!ionner le! #a#! <i on# le e %yr; e# on )era l@nion *e! looW/ahea*! %orre!pon*an#!. Ce##e )!ion pe# engen*rer *e! %on)li#! !pplen#aire! *e #6pe re*%e(re*%e.
8+
Eeple 1 : langage aa bbD >1 : $ X aA Z bB A X a$ Z a B X b$ Z b graphe *e #ran!i#ion! LALR1D *e >1 :
88
$or#ie YACC por >1 : 3 a%%ep# : $ en* 1 $ : @a@ A 2 Z @b@ B , A : @a@ $ + Z @a@ 8 B : @b@ $ = Z @b@ !#a#e 3 a%%ep# : . $ en* 3D @a@ !hi)# 1 @b@ !hi)# 2 . error $ go#o , !#a#e 1 $ : @a@ . A 1D @a@ !hi)# + . error A go#o 8 !#a#e 2 $ : @b@ . B 2D @b@ !hi)# = . error B go#o 7 !#a#e , a%%ep# : $ . en* 3D en* a%%ep# !#a#e + A : @a@ . $ ,D A : @a@ . +D @a@ !hi)# 1 @b@ !hi)# 2 en* re*%e + $ go#o 4 !#a#e 8 $ : @a@ A . 1D . re*%e 1 !#a#e = B : @b@ . $ 8D B : @b@ . =D
8=
@a@ !hi)# 1 @b@ !hi)# 2 en* re*%e = $ go#o 5 !#a#e 7 $ : @b@ B . 2D . re*%e 2 !#a#e 4 A : @a@ $ . ,D . re*%e , !#a#e 5 B : @b@ $ . 8D . re*%e 8 + #erinal!; + non#erinal! 7 graar rle!; 13 !#a#e!
87
Eeple 2 : langage @#railing %on#@ >2 : $ X a$b Z b$b Z ^ graphe *e #ran!i#ion! LALR1D *e >2 :
84
$or#ie YACC por >2 : 3 a%%ep# : $ en* 1 $ : @a@ $ @b@ 2 Z @b@ $ @b@ , Z !#a#e 3 a%%ep# : . $ en* 3D $ : . ,D @a@ !hi)# 1 @b@ !hi)# 2 en* re*%e , $ go#o , 1: !hi)#(re*%e %on)li%# !hi)# 2; re*%e ,D on @b@ !#a#e 1 $ : @a@ . $ @b@ 1D $ : . ,D @a@ !hi)# 1 @b@ !hi)# 2 $ go#o + 2: !hi)#(re*%e %on)li%# !hi)# 2; re*%e ,D on @b@ !#a#e 2 $ : @b@ . $ @b@ 2D $ : . ,D @a@ !hi)# 1 @b@ !hi)# 2 $ go#o 8 !#a#e , a%%ep# : $ . en* 3D en* a%%ep# !#a#e + $ : @a@ $ . @b@ 1D @b@ !hi)# = . error !#a#e 8 $ : @b@ $ . @b@ 2D @b@ !hi)# 7 . error !#a#e = $ : @a@ $ @b@ . 1D . re*%e 1
85
!#a#e 7 $ : @b@ $ @b@ . 2D . re*%e 2 $#a#e 1 %on#ain! 1 !hi)#(re*%e %on)li%#. $#a#e 2 %on#ain! 1 !hi)#(re*%e %on)li%#. + #erinal!; 2 non#erinal! + graar rle!; 4 !#a#e!
=3