Vous êtes sur la page 1sur 36

Compilation IVb.

Analyse syntaxique ascendante


Jacques Farr e Jacques.Farre@unice.fr http://deptinfo.unice.fr/~jf/Compil-L3

Universit e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013

1/36

Introduction
lanalyse ascendante (ou par d ecalage-r eduction) construit

(virtuellement) larbre de d erivation ` a partir du bas


ce qui revient ` a suivre ` a lenvers une cha ne de d erivations

droites
si S w , r eduire ` aA Aw rm rm

exemple avec S ABC , Aa | Aa, B b | bB , C c et la

cha ne aabbc
S aabbc Aabbc Abbc AbBc ABc ABC rm rm rm rm rm rm r eduire a ` a A, puis Aa ` a A, ... probl` eme : quel b r eduire ` a B ; clairement pas le 1er, car on

aurait alors ABbc avec impossibilit e de r eduire Bb


quels sont les crit` eres pour eectuer une r eduction ? quelle r eduction eectuer ?

une m ethode puissante : LR (variantes SLR, LALR)

Universit e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013

2/36

Pr exes viables et poign ees


w ; si peut est un pr exe viable si S etre obtenu rm Aw w , alors est une poign par S ee quon peut rm rm r eduire ` aA la pile dun analyseur LR contient toujours un pr exe viable

sil y a une poign ee en haut de la pile, on r eduit, sinon on

d ecale (avance et empile) dans le texte reprenons avec S aabbc Aabbc Abbc AbBc ABc ABC rm rm rm rm rm rm
pile a A Aa A Ab Abb AbB texte restant aabbc abbc abbc bbc bbc bc c c action d ecaler r eduire a ` aA d ecaler r eduire Aa ` aA d ecaler r eduire b ` a B ? non car ABb ne serait pas un pr exe viable d ecaler r eduire b ` a B ? oui car AbB est un pr exe viable r eduire bB ` a B , etc...
3/36

Universit e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013

Les types de conit quon peut avoir


supposons quen plus de la pile, lautomate peut regarder k

symboles du texte restant


la grammaire est LR(k ) si, et seulement, dans les cas suivants elle na pas de conit r eduction/r eduction : si S Aw w et S Bw w , alors = rm rm rm rm ou k : w = k : w exemple de conit r/r (pour k = 1) : S fAcd | faBce , Aab , B b (avec fab en pile, r eduire ab ` a A ou b ` a B ?)
elle na pas de conit d ecalage/r eduction :
yx , alors = ou Bx w et S Aw si S rm rm rm rm k : w = k : yx exemple de conit d/r (pour k = 1) : S fAbc | fBce , Aa, B ab (avec fa en pile, r eduire a ` a A ou d ecaler b pour r eduire ab ` a B ?)

Universit e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013

4/36

Principes de lanalyse LR
un th eor` eme important : les pr exes viables appartiennent ` a

un langage r egulier
ces pr exes peuvent etre regroup es en un nombre ni de

classes d equivalences (par exemple la classe des pr exes correspondant ` a une certaine poign ee) on peut donc reconna tre les pr exes viables et les poign ees par un automate ni qui explore la pile
en fait pas besoin dexplorer la pile : si on met dans la pile les

etats de lautomate ni, chaque etat correspond ` a la reconnaissance dun ensemble de pr exes le sommet de pile synth etise la classe d equivalence du pr exe pr esent dans la pile (ou, autrement dit, repr esente leur classe d equivalence)

Universit e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013

5/36

Di erence importante entre analyse LR et LL


en LR, le contenu de la pile permet de d eterminer si on r eduit

une poign ee (les k symboles de fen etre permettant au besoin de choisir quelle r eduction eectuer)
en LL, la pile ne permet pas de savoir selon quelle r` egle

remplacer le non terminal (lexamen de k symboles est n ecessaire)


LR accepte donc les r ecursivit es gauche (et dans un sens, les

pr ef` ere aux r ecursivit es droites)


exemple avec S dSe | aab | aac (L(S ) = d n aa(b |c )e n ) LL(3), car il faut regarder jusquau b pour d ecider quelle r` egle appliquer entre S aab et S aac LR(0), car tout pr exe d aab permet de d ecider la r eduction S aab (d aab est la classe dequivalence des d n aab , n 0)

Universit e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013

6/36

Analyse LR(0)
la construction dun analyseur LR(0) ressemble fortement ` a la

construction de la suite des etats de lalgorithme de Earley


on utilise des items LR de la forme [A ] indiquant que la

partie de la r` egle A a et e reconnue, et quil faut reconna tre


les items de la forme [AX ] produisent une transition par

X vers un etat initialement compos e des items de la forme [AX ]


un item de la forme [AB ] implique une fermeture, cest

` a dire lajout ` a l etat ditems de la forme [B ], pour toute r` egle B de la grammaire


un item de la forme [B ] signie quon a trouv e une

poign ee que lon peut r eduire ` aB


l etat initial est la fermeture de litem S S
Universit e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013 7/36

Exemple de construction dautomate LR(0)


soit la grammaire G1 = {E E + T | T , T i | ( E )} son automate LR(0) des pr exes viables
q0 [S E ] [E E + T ] [E T ] [T i ] [T (E )] T q6 [ E T ] T ( q7 ( [T (E )] [E E + T ] [E T ] [T i ] [T (E )] E E q1 [S E ] [E E + T ] i q5 [T i ] i ( q8 [T (E )] [E E + T ] + i q2 [S E ] q3 [E E + T ] [T i ] [T (E )] + ) q9 [T (E )] T q4 [E E + T ]

Universit e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013

8/36

Actions dun automate LR(0)


initialement, la pile contient l etat q0 on a 2 types dactions, command ees uniquement par l etat en

sommet de pile :
r eduire selon une r` egle, dans les etats avec un item de la forme

[A] : on d epile || etats


avancer, dans les etats avec un item de la forme [Aa ]

selon le sommet de pile et le symbole lu (avancer) ou r eduit

(A si on r eduit selon A), une table de saut permet dempiler un nouvel etat si un etat contient des items d ecidant dactions di erentes, on a un conit LR(0)
conit d ecalage-r eduction (shift-reduce) si [A] et

[ B a ]
conit r eduction-r eduction (reduce-reduce) si [A] et

[B ], (A = B ou = )
Universit e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013 9/36

Tables de lautomate LR(0) pour G1


etat q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 action avancer avancer accepter avancer r ed. E E + T r ed. T i r ed. E T avancer avancer r ed. T (E ) i q5 + q3 q5 table de saut ( ) E q7 q1 q2 q7

T q6

q4

q5 q3

q7 q9

q8

q6

les entr ees vides provoquent une erreur


Universit e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013 10/36

Ex ecution de lautomate LR(0) pour G1 sur i + (i + i )


pile q0 q0 q5 q0 q6 q0 q1 q0 q1 q3 q0 q1 q3 q7 q0 q1 q3 q7 q5 q0 q1 q3 q7 q6 q0 q1 q3 q7 q8 q0 q1 q3 q7 q8 q3 q0 q1 q3 q7 q8 q3 q5 q0 q1 q3 q7 q8 q3 q4 q0 q1 q3 q7 q8 q0 q1 q3 q7 q8 q9 q0 q1 q3 q4 q0 q1 q2 texte restant i + (i + i ) +(i + i ) +(i + i ) +(i + i ) (i + i ) i + i ) + i ) + i ) + i ) i ) ) ) ) action et saut avancer et (q0 , i ) q5 red. T i et (q0 , T ) q6 red. E T et (q0 , E ) q1 avancer et (q1 , +) q3 avancer et (q3 , () q7 avancer et (q7 , i ) q5 red. T i et (q7 , T ) q6 red. E T et (q7 , E ) q8 avancer et (q8 , +) q3 avancer et (q3 , i ) q5 red. T i et (q3 , T ) q4 red. E E + T et (q7 , E ) q8 avancer et (q8 , )) q9 red. T (E ) et (q3 , T ) q4 red. E E + T et (q0 , E ) q1 avancer et (q1 , ) q2 accepter
11/36

Universit e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013

Analyse SLR(1)
prenons maintenant la grammaire

G2 = {E E + T | T , T T F | F , F i }
il est facile de voir que les items [E T ] et [T T F ] de

q0 , apr` es transition sur T , donneront un etat contenant [E T ] et [T T F ] : conit d ecalage-r eduction !


on peut voir que les suivants de E sont + et , mais pas on peut donc d ecider le d ecalage sur et la r eduction sur les

suivants de E on obtient un automate SLR(1), soit simple LR(1) (la notion peut s etendre ` a SLR(k )) :
[A] d ecide une r eduction uniquement sur les suivants de A [Aa ] d ecide un d ecalage uniquement sur a

Universit e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013

12/36

Tables SLR(1)
la table dactions de lanalyseur SLR(1) regarde l etat en

sommet de pile et le prochain symbole du texte


au lieu de mettre simplement avancer dans une entr ee de la

table, on peut indiquer l etat o` u m` ene ce d ecalage


et supprimer les colonnes des terminaux dans la table de sauts

la table SLR(1) de la grammaire G1 est donc :


etat q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 i q5 + q3 q5 etat devenu inutile q7 rE E +T rE E +T rT i rT i rE T rE T q7 q3 q9 rT (E ) rT (E ) table daction ( ) q7 accepter q4 rE E +T rT i rE T q8 rT (E )
13/36

table de saut E T q1 q6

q5

q6

Universit e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013

Moteur dun analyseur LR(1)


ce moteur est valable pour tout analyseur de la classe LR(1)

(LR, SLR, LALR), avec action et saut les tables daction et de saur respectivement
initialement, la pile contient q0 r ep eter ni := faux soit s l etat en sommet de pile et c le prochain symbole si action[s,c] = qi alors empiler qi et avancer dans le texte sinon si action[s,c] = rA alors d epiler || etats de la pile soit s l etat qui est maintenant en sommet de pile empiler saut[s,A] sinon si action[s,c] = accepter alors ni := vrai sinon erreur() tantque non ni
Universit e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013 14/36

Grammaire non SLR(1)


soit la grammaire

G3 = {S aAa | bAb | aBb | bBa, Ac , B c } et un fragment de son automate LR(0)


q1 S q0 [S S ] [S aAa] [S aBb ] [S bAb ] [S bBa] b a [S aAa] [S aBb ] [Ac ] [B c ] q2 [S b Ab ] [S b Ba] [Ac ] [B c ] A B c A B c q3 [Ac ] [ B c ]

cette grammaire nest pas SLR(1) : Suiv (A) = Suiv (B ) = {a, b }

ne permet pas de r esoudre le conit en q3 pourtant, ac suivi de a commande clairement Ac , et suivi de b il commande B c (et inversement pour le pr exe bc )
Universit e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013 15/36

Analyse LR(1)
la faiblesse de lanalyse SLR(1) est quelle ne tient pas compte

de ce qui a et e reconnu (synth etis e dans la pile) pour pr edire les suivants quon peut attendre dans ce contexte lanalyse LR y r em edie en ajoutant aux items LR(0) les suivants attendus
un item LR(1) est de la forme : [A, t ], o` u t est un

symbole qui peut suivre A dans le contexte courant de A


on peut etendre t ` a des mots de longueur k pour un analyseur

LR(k ) la di erence avec la construction de lautomate LR(0) r eside

dans la fermeture :
pour les items de la forme [AB , t ], on ajoute les items

[B , u ] o` u u Prem( t ) : B , dans ce contexte, ne peut etre suivi que dun premier de , ou de t si est vide ou produit le vide l etat q0 est la fermeture de [S S , ]
Universit e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013 16/36

Automate (partiel) LR(1) de G3


les transitions sur c ` a partir de q1 et q2 donnent maintenant

des items di erents, et donc 2 etats di erents


q1 S q0 a [S S , ] [S aAa, ] [S aBb , ] [S bAb , ] [S bBa, ] b A [S aAa, ] B [S aBb , ] c [Ac , a] [B c , b ] A [S b Ab , ] B [S b Ba, ] [Ac , b ] [B c , a] c q3 [Ac , a] [B c , b ]

q2

q4 [Ac , b ] [B c , a]

on sait maintenant comment r eduire en regardant le prochain

symbole : la grammaire est bien LR(1)

Universit e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013

17/36

Construction des tables danalyse LR(1)


pour la table daction, si, dans un etat qi on a un item [Aa, t ], action[qi , a] = qj , si qj est l etat atteint ` a partir de qi par la transition sur a on a un item [A, t ], action[qi , t ] = rA , (sauf pour [S S , ] o` u laction est accepter) toute entr ee non remplie correspond ` a une erreur (la phrase analys ee nappartien pas au langage) toute entr ee ayant 2 actions di erentes implique du non d eterminisme : la grammaire nest pas LR(1))
une m ethode, LR g en eralis e (GLR), tr` es utilis ee pour les langues naturelles, permet de g erer ce non d eterminisme (bison peut fonctionner en mode GLR)

pour la table de saut pour un etat qi transitant pas A (A non terminal) sur qj , saut [qi , A] = qj

Universit e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013

18/36

Force et faiblesse de la m ethode LR(1)


sa force : tout langage dit d eterministe a une grammaire LR(k )
et toute grammaire LR(k ) peut etre transform ee m ecaniquement en grammaire LR(1) mais il existe des langages non ambigus dits non d eterministes qui nont pas de grammaire LR(k )

sa faiblesse : son grand nombre d etats par rapport ` a LR(0)/SLR(1)


(on a vu quajouter le suivant dans les items LR(1) faisait eclater certains etats)

soit |G | la taille dune grammaire (le nombre total de symboles apparaissant dans les r` egles) ` a une r` egle A correspondent |A| items LR(0), donc le nombre total ditems LR(0) di erents est |G | un etat est un sous-ensemble ditems LR(0) : on peut avoir au plus 2 |G | etats LR(0) (puisque le nombre de sous-ensembles dun ensemble de
n el ements est 2n )

on a |G | |T | items LR(1) possibles (` a cause de lintroduction des suivants), donc 2|G ||T | etats possibles : en pratique, lautomate LR(1) peut facilement etre 10 ` a 100 fois plus gros que le LR(0) !
Universit e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013 19/36

Un compromis : lanalyse LALR(1)


en pratique, il est tr` es fr equent que des etats LR(1) ayant les

m emes noyaux LR(0) ditems, mais pas les m emes suivants, puissent etre fusionn es sans cr eer de conit
par exemple, qi = {[A, t ], [B , u ]} et

qj = {[A, v ], [B , w ]} donc, on peut ramener la taille de lautomate ` a celle de

LR(0), tout en conservant en grande partie le b en ece du calcul plus pr ecis des suivants de la m ethode LR(1)
toutefois, lid ee de construire un automate LR(1) et de

fusionner des etats quand cest possible, m eme si elle est correcte dun point de vue th eorique, pose le probl` eme de la complexit e (en temps et en espace) de la construction dun automate LR(1)
il existe un moyen plus ecace pour calculer les suivants

LR(1) en se basant sur un automate LR(0)


Universit e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013 20/36

Principes de construction dun analyseur LALR(1) ` a partir dun automate LR(0)


tout repose sur la remarque suivante : si un etat LR(0) qi contient [A], alors il existe (au moins) un etat qj transitant par sur qi qui contient [A] et par cons equent [B A ] l etat qk par lequel qj transite par A (il contient donc [B A ] contient lui-m eme des transitions sur des nonterminaux (qui sont en fait les premiers de ) donc, on remontant la transition et en suivant la transition A, on arrive ` a qk , toute transition de qk par un non terminal t indique que t est un suivant de A dans ce contexte
qj [B A ] [A] A qk [B A ] qi [A] r eduire A sur a, b , c a b c

Universit e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013

21/36

Construction dun analyseur LALR(1)


construire lautomate LR(0) de la grammaire pour tout etat qi contenant un conit LR(0), calculer

lensemble SC (A, qi ) des suivants contextuels pour chaque r eduction rA de qi


d ecider la r eduction rA sur tout terminal t SC (A, qi )

(il y a evidemment un conit LALR(1) si un m eme t d ecide plusieurs actions di erentes) calcul de SC (A, qi ) : pour tout qj transitant par sur qi , soit qk atteint de qj par A SC (A, qi ) = {t | qk transite par t sur un autre etat, t T } si qk contient [B A], ajouter SC (B A, qk ) ` a SC (A, qi ), et ceci r ecursivement

Universit e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013

22/36

Exemple de construction dun analyseur LALR(1)


soit la grammaire S let F = E , S F , S V = E , V i ,

V i (E ), E V , F i (E )
et soit le fragment de son automate LR(0) et les suivants

contextuels LALR(1)
q5 let q0 [S S ] [S let F = E ] [S F ] [S V = E ] [F i (E )] [V i ] [V i (E )] S q4 [S S ] V q6 [S F ] q3 [S V = E ] = = [S let F = E ] [F i (E )] q1 i [F i (E )] (E ) F [V i ] r eduire sur = [V i (E )] [V i (E )] r eduire sur =
eduire sur [F i (E )] r

F i

q2

la grammaire est bien LALR(1) (mais pas SLR(1) car = est

un suivant de F)
Universit e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013 23/36

Forces et faiblesses de LALR(1)


forces : utilise un automate LR(0), donc avec nettement moins d etats que LR(1) calcule les suivants dans le contexte presque aussi exactement que LR(1) (sauf pour des cas assez particuliers) est en g en eral beaucoup plus puissante que LL(1) : il est rare quune grammaire LL(1) ne soit pas LALR(1), mais beaucoup de grammaires LALR(1) ne sont pas LL(1) ne serait-ce qu` a cause de la r ecursivit e gauche ou les parties droites partageant des pr exes communs faiblesses : pas toujours facile de voir comment sont calcul es les suivants, et par l` a, pas toujours facile de comprendre pourquoi il y a un conit et comment le r esoudre

Universit e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013

24/36

Bison : un g en erateur danalyseurs syntaxiques LALR(1)


Bison cr ee un analyseur LALR(1), auquel il est possible

dajouter des actions s emantiques et dindiquer comment r eparer les erreurs Forme g en erale dune grammaire pour Bison
[d efinitions] %% [r` egles] [%% code C ]

sauf le premier %%, tout ce qui est indiqu e entre [ ] est optionnel.
Les espaces (blanc, n de ligne, tabulation) ne sont pas

signicatifs. Les commentaires sont comme en C.


Universit e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013 25/36

R` egles
Elles sont de la forme g en erale (forme EBNF non accept ee) :
NT : S1 S2 ... { action en C } | ... ;

Si est un ident de non terminal, ou de terminal (d eclar e par %token et reconnu par lanalyseur lexical), ou une cha ne de 1 seul caract` ere

exemple pour les expressions arithm etiques


expr : | | ; term : | | ; fact : | ; expr + term expr - term term term * fact term / fact fact NOMBRE ( expr )
26/36

Universit e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013

D eclaration des terminaux


d eclaration normale %token IDENT NOMBRE KWHILE d eclaration avec priorit e et associativit e (pour les grammaires

ambigu es notamment)
%nonassoc %left + %left * %% exp : exp EQU < > NEQ LEQ GEQ - / * exp

a * b * c ambigu (et conit d/r), mais lassociativit e gauche permet de r esoudre le conit en faveur de la r eduction a * b ` a expr modication locale de la priorit e dans une r` egle exp : - exp %prec * - a * b ambigu (et conit d/r), mais -a r eduit ` a expr car ce prend lassociativit e de *
Universit e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013 27/36

Le couple Flex-Bison
xxx.l Flex y.tab.h xxx.y main () xxx.c Bison yyparse () xxx.tab.c compilateur C xxx lex.yy.c yylex ()

flex xxx.l produit un programme C dans lex.yy.c bison xxx.y produit un programme C dans xxx.tab.c

(option -d d enitions dans xxx.tab.h, option -y y.tab.c, y.tab.h au lieux de xxx.tab[ch])


compiler, relier avec les biblioth` eques :

gcc xxx.yy.c xxx.tab.c xxx.c -ll -ly


Universit e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013 28/36

Interface Flex-Bison
les d eclarations de token dans Bison donnent une macro (dans xxx.tab.h), par exemple %token ID donne #define ID 256 inclure xxx.tab.h dans le source ex les actions dans ex doivent retourner le code du token [A-Za-z]+ return ID; les tokens peuvent calculer des attributs, par exemple en Bison %union { int ival; ... %token<ival> NB

en Flex, lattribut dun token est calcul e dans la variable globale yylval
[0-9]+ { yylval.ival = atoi (yytext); return NB; }
29/36

Universit e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013

Automate LALR
il est produit sur xxx.output par loption -v exemple avec la grammaire nonlalr.y expr : var = expr | var | ( expr ) ; var : ID | var [ expr ] | * expr ; appel ` a Bison : bison -v nonlalr.y conflicts: 2 shift/reduce

Universit e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013

30/36

Automate LALR 1
automate : conit dans l etat 2 (le des items LR est not e ) 2: shift/reduce conflict (shift 6, redn 2) on = 2: shift/reduce conflict (shift 7, redn 2) on [ state 2 expr : var_= expr expr : var_ (2) var : var_[ expr ] = [ . shift 6 shift 7 reduce 2

var en pile, = ou [ en fen etre : soit r eduire var ` a expr, soit

d ecaler
le d ecalage (action par d efaut) semble correct ici (on peut

aussi indiquer %right = pour etre plus s ur)


Universit e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013 31/36

Automate LALR 2
mais l etat 5, qui marque la rencontre de *, va sur l etat 2 state 5 var : *_expr ID shift 4 ( shift 3 * shift 5 . error expr goto 9 var goto 2 donc * t[x] sera analys e comme * (t[x]) (correct), mais *p = x sera analys e comme * (p = x) (incorrect)

Universit e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013

32/36

Automate LALR 3
il faut soit changer la grammaire
expr : var = expr | var ; var : v | * var ; /* r eduction avec = en fen^ etre */ v : ID | ( expr ) | v [ expr ] ; /* d ecalage avec [ en fen^ etre */

soit garder la grammaire originale avec : %right = %right * %left [ %% expr : var = expr | var %prec * | ( expr ) ; var : ID | var [ expr ] | * expr ;
Universit e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013 33/36

R esolution des conits LALR(1)


Sil y a des conits LALR(1), les r` egles appliqu ees par d efaut

sont :
conit d ecalage/r eduction (shift/reduce) : eectuer le shift. conit r eduction/r eduction (reduce/reduce) : eectuer la

r eduction par la r` egle d enie la premi` ere parmi les r` egles en conit. exp : exp - exp | exp * exp | NOMBRE

donc 3 - 2 * 4 analys e par d efaut comme (3 - 2) * 4


Les conits peuvent etre lev es gr ace aux pr ec edences des

lex` emes
%left - %left * /* plus prioritaire que + car d eclar e apr` es */

Universit e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013

34/36

D enition des types des attributs


d enition de lunion des attributs %union { int v; struct S {char* c; int n;} s; } attributs des lex` emes %token <s> + X1 %left <v> X2 ( attributs des non-terminaux %type <s> NT1 NT2, ... %type <v> NT3 NT4, ... on verra lutilit e des attributs lors de lanalyse s emantique

Universit e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013

35/36

Reprise sur erreurs


quand une erreur est d etect ee, la fonction yyerror (char*)

est appel ee
par d efaut, le param` etre est "parse error" Bison permet davoir des messages plus pr ecis en d enissant

dans la partie C des d eclarations


#define YYERROR_VERBOSE 1 si aucune forme de reprise derreur nest donn ee, lanalyse

sarr ete
reprise derreur = mode panique : on avance dans la phrase

jusqu` a un certain caract` ere, et on remet la pile en etat


ligne : expression \n | expression error \n { ... } { yyerrok; }

Universit e de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013

36/36

Vous aimerez peut-être aussi