Вы находитесь на странице: 1из 135

Chapitre IV Analyse Syntaxique

erale Presentation Gen Analyse syntaxique descendante recursive Analyse syntaxique Predictive descendante recursive Analyse syntaxique predictive non recursive Recup eration sur erreur Analyse syntaxique ascendante par decalage reduction Analyseurs LR

5 / 139

erale Presentation Gen

erale Presentation gen


Analyse syntaxique
` verier Lanalyse syntaxique consiste a que la sequence dunites par lanalyseur lexical est gen er ee par la lexicales retournees grammaire du langage. ` construire un arbre syntaxique dont les feuilles Ceci revient a lexicales en les parcourant concordent avec la sequence dunites ` droite. de gauche a Nous distinguons :
Analyse syntaxique descendante Analyse syntaxique ascendante
PSOURCE

Analyseur Lexical

Unit lexicale
Obtenir prochaine unit lexicale

Analyseur Syntaxique

Table des Symboles


6 / 139

erale Presentation Gen

erale Presentation gen

Analyse syntaxique descendante


Elle seffectue par la construction descendante dun arbre par laxiome de la syntaxique en partant de la racine etiquet ee ` grammaire et en realisant de maniere repetitive les etapes suivantes :
1

par le non terminal A, choisir une Etape 1 : au nud n etiquet e ` gauche et construire les ls de n avec les production ayant A a symboles en partie droite de la production. Etape 2 : determiner le prochain nud ou ` un sous arbre doit etre construit.

7 / 139

erale Presentation Gen

erale Presentation gen

Analyse syntaxique ascendante


une Une analyse syntaxique ascendant (bottom-up) cree ` partir des symboles terminaux, en remontant vers le derivation a symbole initial.
Principe : construire un arbre de derivation du bas (les feuilles, i.e. lexicales) vers le haut (la racine, i.e. laxiome de depart). les unites

8 / 139

erale Presentation Gen

erale Presentation gen

Grammaire
de G = (VT , VN , S , P ) ou Une grammaire est la donnee `
VT est un ensemble non vide de symboles terminaux (alphabet terminal) VN est un ensemble de symboles non terminaux, avec VT VN = axiome S est un symbole initial VN appelee ` ` ecritures P est un ensemble de regles de productions (regles de re )

9 / 139

Analyse syntaxique descendante recursive

Analyse syntaxique descendante recursive

Exemple
par un ensemble de types gen er es par la Le langage est forme grammaire non contextuelle suivante :
Type array[Type simple]of Type |Type simple |Type Type simple integer |char |nb 2points nb

Les etapes de construction descendante de larbre syntaxique pour le mot : array[nb 2points nb] of integer sont les suivantes :

10 / 139

Analyse syntaxique descendante recursive

Analyse syntaxique descendante recursive

Exemple (suite)
a. Type

11 / 139

Analyse syntaxique descendante recursive

Analyse syntaxique descendante recursive

Exemple (suite)
a. b. Type Type

12 / 139

Analyse syntaxique descendante recursive

Analyse syntaxique descendante recursive

Exemple (suite)
a. b. array
   9 

Type Type

13 / 139

Analyse syntaxique descendante recursive

Analyse syntaxique descendante recursive

Exemple (suite)
a. b. array
 9  

Type Type [ Typesimple ]


?

14 / 139

Analyse syntaxique descendante recursive

Analyse syntaxique descendante recursive

Exemple (suite)
a. b. array
 9  

Type Type [ Typesimple ]


XXX ? XX z

of

15 / 139

Analyse syntaxique descendante recursive

Analyse syntaxique descendante recursive

Exemple (suite)
a. b. array
 9  

Type Type [ Typesimple ]


XXX XX ? XX zXXX X z

of

Type

16 / 139

Analyse syntaxique descendante recursive

Analyse syntaxique descendante recursive


Exemple (suite)
a. b. array
  9 

Type Type [ Typesimple ]


X X ? XXX XX zXX X

of

z X

Type

c. array
 9 

[ Typesimple ]

Type XXX  XX ? XX zXXX X z of

Type

17 / 139

Analyse syntaxique descendante recursive

Analyse syntaxique descendante recursive


Exemple (suite)
a. b. array
 9 

Type Type [ Typesimple ]


X X X XX ? XXX zXXX z

of

Type

c. array nb
 9 

 9 

[ Typesimple ] 

Type XXX  XX ? XX zXXX X z of

Type

18 / 139

Analyse syntaxique descendante recursive

Analyse syntaxique descendante recursive


Exemple (suite)
a. b. array
   9 

Type Type [ Typesimple ]


X X ? XXX XX zXX X

of

z X

Type

c. array nb
  9  

Type [ Typesimple ]
? X X ? XXX XX zXX X

of

z X

Type

 9 

2points

19 / 139

Analyse syntaxique descendante recursive

Analyse syntaxique descendante recursive


Exemple (suite)
a. b. array
   9 

Type Type [ Typesimple ]


X X ? XXX XX zXX X

of

z X

Type

c. array nb
  9  

Type [ Typesimple ] 2points


X X ? XXX XX zXX X

of

z X

Type

 9 

X ? XXXX z

nb

20 / 139

Analyse syntaxique descendante recursive

Analyse syntaxique descendante recursive


Exemple (suite)
d. array nb
 9   

Type [ Typesimple ] 2points


XXX XX ? XX zXXX X z

of

Type

 9 

X ? XXXX z

nb

21 / 139

Analyse syntaxique descendante recursive

Analyse syntaxique descendante recursive


Exemple (suite)
d. array nb
 9   

Type [ Typesimple ] 2points


XXX XX ? XX zXXX X z

of

Type
?

 9 

X ? XXXX z

nb

Typesimple

22 / 139

Analyse syntaxique descendante recursive

Analyse syntaxique descendante recursive


Exemple (suite)
d. array nb
 9 

Type [ Typesimple ] 2points


X X X ? XXX XX zXXX z

of

Type
?

 ?XXXX z X 9 

nb

Typesimple

e. array nb

 9 

Type X X X ? XXX XX zXXz X [ Typesimple ] of Type


?

 ?XXXX   z X 9 

2points

nb

Typesimple

23 / 139

Analyse syntaxique descendante recursive

Analyse syntaxique descendante recursive


Exemple (suite)
d. array nb
 9 

Type [ Typesimple ] 2points


X X X ? XXX XX zXXX z

of

Type
?

 ?XXXX z X 9 

nb

Typesimple

e. array nb
 9  

Type [ Typesimple ] 2points


XXX XX ? XX zXXX X z

of

Type
?

 ?XXXXX z 9 

nb

Typesimple integer
24 / 139

Analyse syntaxique descendante recursive

Analyse syntaxique descendante recursive

Description
Cest une methode danalyse dans laquelle on execute des procedures recursives. a ` chaque non terminal. Une procedure est associee

25 / 139

Analyse syntaxique descendante recursive

Analyse syntaxique descendante recursive


Exemple
par un ensemble de types gen er es par la Le langage est forme grammaire non contextuelle suivante :
Type array[Type simple]of Type |Type simple |Type Type simple integer |char |nb 2points nb

a ` chaque non terminal sont les Les procedures associees suivantes :


1 2

Procedure Type Procedure Type simple

26 / 139

Analyse syntaxique descendante recursive

Analyse syntaxique descendante recursive


Procedure accepter(symbole)
1 2 3 4 5 6 7 8

Procedure accepter( T ) Debut Si Symbole = T Alors

symbolesymbole suivant()
Sinon

erreur()
FinSi Fin

27 / 139

Analyse syntaxique descendante recursive

Analyse syntaxique descendante recursive


Procedure accepter(symbole)
1 2 3 4 5 6 7 8

Procedure accepter( T ) Debut Si Symbole = T Alors

symbolesymbole suivant() Symbole suivant est une fonction qui retourne le nouveau Sinon par lanalyseur lexical et lenregistre dans symbole trouve erreur() une variable globale symbole
FinSi Fin

28 / 139

Analyse syntaxique descendante recursive

Analyse syntaxique descendante recursive


Procedure accepter(symbole)
1 2 3 4 5 6 7 8

Procedure accepter( T ) Debut Si Symbole = T Alors

symbolesymbole suivant()
Sinon

erreur()
FinSi Fin

29 / 139

Analyse syntaxique descendante recursive

Analyse syntaxique descendante recursive


Procedure Type()
1 2 3 4 5 6 7 8 9 10

Procedure Type( ) Debut Si Symbole = array Alors

accepter(array); accepter([); Type simple(); accepter(]); accepter(of); Type();


Sinon Si symbole {integer, char, nb} Alors

Type simple();
Sinon

30 / 139

Analyse syntaxique descendante recursive

Analyse syntaxique descendante recursive


Suite-Procedure Type()
11 12 13 14 15 16 17 18

Si symbole = Sinon

Alors

accepter( ); Type(); erreur()


FinSi FinSi FinSi Fin

31 / 139

Analyse syntaxique descendante recursive

Analyse syntaxique descendante recursive


Procedure Type simple()
1 2 3 4 5 6 7 8 9 10 11

Procedure Type simple( ) Debut Si symbole = integer Alors

accepter(integer);
Sinon Si symbole = char Alors

accepter(char);
Sinon Si symbole = nb Alors

accepter(nb); accepter(2points); accepter(nb);

32 / 139

Analyse syntaxique descendante recursive

Analyse syntaxique descendante recursive

Suite- Procedure Type simple()


12 13 14 15 16 17

Sinon

erreur()
FinSi FinSi FinSi Fin

33 / 139

Analyse syntaxique Predictive descendante recursive

Analyse syntaxique Predictive descendante recursive


Description
Cest une methode danalyse syntaxique par descente recursive ` ou permet de decider dune maniere ` un symbole de prevision ` unique quelle regle peut etre appliquee. ` gauche et non ambigue. La grammaire doit etre non recursive a a ` gauche puis enlever Pour se faire, il faut eliminer la recursivit e lambiguit e. ` chaque non terminal. Ensuite, on associe une procedure a

Remarque
edent a ` un analyseur syntaxique Le pseudo-code prec est associe ere ` les types est non predictif recursif car la grammaire qui gen et non recursive ` gauche ambigue a
34 / 139

Analyse syntaxique Predictive descendante recursive

a ` gauche Elimination de la recursivit e

a ` gauche Elimination de la recursivit e


` gauche Grammaire recursive a
` gauche si elle admet une Une grammaire est dite recursive a ` regle de la forme : A A

` Transformation de cette grammaire en une non recursive a gauche


` gauche avec les regles ` Une grammaire recursive a de production
A A1 |A2 | . . . |An |1 |2 | . . . |m

en une grammaire non recursive ` gauche ayant Est transformee a ` les regles de production :
A 1 A |2 A | . . . |m A A 1 A |2 A | . . . |n A |

35 / 139

Analyse syntaxique Predictive descendante recursive

a ` gauche Elimination de la recursivit e

a ` gauche Elimination de la recursivit e

Exemple
` gauche La grammaire suivante est recursive a
Exp Exp op Exp|(Exp)|id|nb

en une grammaire non recursive ` gauche Elle est transformee a ` avec les regles suivantes :
Exp (Exp) E |id E |nb E E op Exp E |

36 / 139

Analyse syntaxique Predictive descendante recursive

Elimination de lambigu te

Elimination de lambigu te

Grammaire ambigue
` Admet des regles de la forme : A 1 |2

en une non ambigue Transformation dune grammaire ambigue


avec les regles ` Une grammaire ambigue de production :
A 1 |2 | . . . |m |1 |2 | . . . |n

en une grammaire non ambigue : Est transformee


A A |1 |2 | . . . |n A 1 |2 | . . . |m

37 / 139

Analyse syntaxique Predictive descendante recursive

Elimination de lambigu te

Elimination de lambigu te

Exemple
La grammaire suivante est ambigue
I If (Expb) Then I|If (Expb) Then I else I

en une grammaire non ambigue : Elle est transformee


I If (Expb) Then S S |else I

38 / 139

Analyse syntaxique Predictive descendante recursive

Application

Application
par une Le langage, decrit par la grammaire suivante, est forme sequence non vide dinstructions daffectation :
L I I |I L I I id := Exp; Exp id |nb|(Exp)|Exp op Exp
1

a ` gauche, on obtient : En eliminant la recursivit e


L I |I L I I id := Exp; Exp id E |nb E |(Exp) E E op Exp E |

on obtient : En eliminant lambigu te,


LIIS S |L I I id := Exp; Exp id E |nb E |(Exp) E E op Exp E |
39 / 139

Analyse syntaxique Predictive descendante recursive

Application

Un pseudo-code dun AS predictif et recursif associe


LIIS
1 2 3 4 5 6 7 8

S |L I Procedure accepter( T ) I id := Exp; Debut Si Symbole = T Alors Exp id E |nb E |(Exp) E symbolesymbole suivant() E op Exp E | Sinon erreur() FinSi Fin

1 2 3 4

Procedure L I( ) Debut I(); S(); Fin


40 / 139

Analyse syntaxique Predictive descendante recursive

Application

Un pseudo-code dun AS predictif et recursif associe

1 2 3 4 5 6

Procedure S( ) Debut Si Symbole = id Alors L I(); FinSi Fin

41 / 139

Analyse syntaxique Predictive descendante recursive

Application

Un pseudo-code dun AS predictif et recursif associe

1 2 3 4 5 6 7 8 9

Procedure I( ) Debut Si Symbole = id Alors accepter(id); accepter(:=); Exp(); accepter(;); Sinon erreur(); FinSi Fin

42 / 139

Analyse syntaxique Predictive descendante recursive

Application

Un pseudo-code dun AS predictif et recursif associe


Procedure Exp( ) Debut Si Symbole = id Alors accepter(id); E(); Sinon Si Symbole = nb Alors accepter(nb); E(); Sinon Si Symbole = ( Alors accepter((); Exp();accepter()); E(); Sinon erreur(); FinSi FinSi FinSi Fin
43 / 139

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Analyse syntaxique Predictive descendante recursive

Application

Un pseudo-code dun AS predictif et recursif associe

1 2 3 4 5 6

Procedure E( ) Debut Si Symbole = op Alors accepter(op); Exp();E(); FinSi Fin

44 / 139

Analyse syntaxique predictive non recursive

Analyse syntaxique predictive non recursive


Description
Cest une methode danalyse ou ` on remplace lappel de procedures recursives par la manipulation dune pile ` gauche et non ambigue. La grammaire doit etre non recursive a Initialement la pile contient le symbole fond de pile $ et au contient le sommet laxiome de la grammaire, le tampon dentree ` analyser suivi du symbole $, la tete de lecture/ecriture mot a pointe sur le premier symbole de L/E A la n de lanalyse, la pile contient le symbole $ et la tete pointe sur le symbole $ de n de la cha ne Levolution de lanalyse seffectue en consultant une table danalyse

45 / 139

Analyse syntaxique predictive non recursive

Analyse syntaxique predictive non recursive


Exemple
` travers lexemple suivant de Nous illustrons lapproche a grammaire :
S id := E; E E + E|EE|E E|E/E|(E)|id|nb

` lelimination a ` gauche et de lambigu Apres de la recursivit e te, nous obtenons :


S id := E; E (E) E |id E |nb E E + E E | E E | E E |/E E |

46 / 139

Analyse syntaxique predictive non recursive

Exemple - Suite

Id := id op nb ; $

Tampon

Configuration initiale

S $ Pile

Tte de L/E

Id := id op nb ; $

Configuration finale $ Pile Tte de L/E

Tampon

47 / 139

Analyse syntaxique predictive non recursive

Analyse syntaxique predictive non recursive


Table danalyse M
Elle specie
pour chaque non terminal et pour chaque terminal ou $ (cas de la n de la cha ne)
` une regle de production pouvant eventuellement etre appliquee

48 / 139

Analyse syntaxique predictive non recursive

Exemple - Table danalyse M


S id:= E; E (E) E | id E | nb E E + E E | E E | * E E | /E E |
Non terminal id S E S id:= E; E id E E nb E E +E E E - E E E E * E E / E E E (E) E nb + Symbole dentre

:=

49 / 139

Analyse syntaxique predictive non recursive

Algorithme danalyse syntaxique predictive non recursive


Debut Positionner le pointeur (ps) sur le premier symbole de $; eter Rep Soit X le symbole en sommet de pile et a le symbole en cours danalyse (rep er e par ps) : Si X est un terminal ou $ Alors Si X = a Alors enlever X de la pile et avancer ps Sinon erreur() FinSi
50 / 139

1 2 3 4 5 6 7 8 9 10 11 12 13

Analyse syntaxique predictive non recursive

Algorithme danalyse syntaxique predictive non recursive

14 15 16 17 18 19 20 21 22 23 24 25

Sinon consulter M [X,a] Si M[X,a] = X Y1 Y2 . . . Yk = Alors d epiler X et empiler limage miroir de c-a- d empiler Yk Yk 1 . . . Y1 et emettre en sortie la r` egle X Y1 Y2 . . . Yk Sinon erreur () FinSi FinSi ` X = $ Jusqua Fin

51 / 139

Analyse syntaxique predictive non recursive

Application - Algorithme
Symbole dentre NT S E E
id S id:= E; E id E E nb E E + E E E E E E * E E E / E E E (E) E E nb + * / ( ) := ; $

id := id + nb ;

52 / 139

Analyse syntaxique predictive non recursive

Application - Algorithme
Symbole dentre NT S E E
id S id:= E; E id E E nb E E + E E E E E E * E E E / E E E (E) E E nb + * / ( ) := ; $

id := id + nb ;

S $
53 / 139

Analyse syntaxique predictive non recursive

Application - Algorithme
Symbole dentre NT S E E
id S id:= E; E id E E nb E E + E E E E E E * E E E / E E E (E) E E nb + * / ( ) := ; $

id := id + nb ;

S $
54 / 139

Analyse syntaxique predictive non recursive

Application - Algorithme
Symbole dentre NT S E E
id S id:= E; E id E E nb E E + E E E E E E * E E E / E E E (E) E E nb + * / ( ) := ; $

id := id + nb ;

S $

id := E ; $
55 / 139

Analyse syntaxique predictive non recursive

Application - Algorithme
Symbole dentre NT S E E
id S id:= E; E id E E nb E E + E E E E E E * E E E / E E E (E) E E nb + * / ( ) := ; $

id := id + nb ;

S $

id := E ; $

:= E ; $
56 / 139

Analyse syntaxique predictive non recursive

Application - Algorithme
Symbole dentre NT S E E
id S id:= E; E id E E nb E E + E E E E E E * E E E / E E E (E) E E nb + * / ( ) := ; $

id := id + nb ;

S $

id := E ; $

:= E ; $

E ; $
57 / 139

Analyse syntaxique predictive non recursive

Application - Algorithme
Symbole dentre NT S E E
id S id:= E; E id E E nb E E + E E E E E E * E E E / E E E (E) E E nb + * / ( ) := ; $

id := id + nb ;

S $

id := E ; $

:= E ; $

E ; $

id E ; $
58 / 139

Analyse syntaxique predictive non recursive

Application - Algorithme
Symbole dentre NT S E E
id S id:= E; E id E E nb E E + E E E E E E * E E E / E E E (E) E E nb + * / ( ) := ; $

id := id + + nb ;

S $

id := E ; $

:= E ; $

E ; $

id E ; $

E ; $
59 / 139

Analyse syntaxique predictive non recursive

Application - Algorithme
Symbole dentre NT S E E
id S id:= E; E id E E nb E E + E E E E E E * E E E / E E E (E) E E nb + * / ( ) := ; $

id := id + + nb ;

S $

id := E ; $

:= E ; $

E ; $

id E ; $

E ; $

+ E E ; $
60 / 139

Analyse syntaxique predictive non recursive

Application - Algorithme
Symbole dentre NT S E E
id S id:= E; E id E E nb E E + E E E E E E * E E E / E E E (E) E E nb + * / ( ) := ; $

id := id + + nb ;

S $

id := E ; $

:= E ; $

E ; $

id E ; $

E ; $

+ E E ; $

E E ; $
61 / 139

Analyse syntaxique predictive non recursive

Application - Algorithme
Symbole dentre NT S E E
id S id:= E; E id E E nb E E + E E E E E E * E E E / E E E (E) E E nb + * / ( ) := ; $

id := id + + nb ;

S $

id := E ; $

:= E ; $

E ; $

id E ; $

E ; $

+ E E ; $

E E ; $

nb E E ; $
62 / 139

Analyse syntaxique predictive non recursive

Application - Algorithme
Symbole dentre NT S E E
id S id:= E; E id E E nb E E + E E E E E E * E E E / E E E (E) E E nb + * / ( ) := ; $

id := id + + nb ;

S $

id := E ; $

:= E ; $

E ; $

id E ; $

E ; $

+ E E ; $

E E ; $

nb E E ; $

E E ; $
63 / 139

Analyse syntaxique predictive non recursive

Application - Algorithme
Symbole dentre NT S E E
id S id:= E; E id E E nb E E + E E E E E E * E E E / E E E (E) E E nb + * / ( ) := ; $

id := id + + nb ;

S $

id := E ; $

:= E ; $

E ; $

id E ; $

E ; $

+ E E ; $

E E ; $

nb E E ; $

E E ; $

E ; $
64 / 139

Analyse syntaxique predictive non recursive

Application - Algorithme
Symbole dentre NT S E E
id S id:= E; E id E E nb E E + E E E E E E * E E E / E E E (E) E E nb + * / ( ) := ; $

id := id + + nb ;

S $

id := E ; $

:= E ; $

E ; $

id E ; $

E ; $

+ E E ; $

E E ; $

nb E E ; $

E E ; $

E ; $

; $
65 / 139

Analyse syntaxique predictive non recursive

Application - Algorithme
Symbole dentre NT S E E
id S id:= E; E id E E nb E E + E E E E E E * E E E / E E E (E) E E nb + * / ( ) := ; $

id := id + + nb ;

S $

id := E ; $

:= E ; $

E ; $

id E ; $

E ; $

+ E E ; $

E E ; $

nb E E ; $

E E ; $

E ; $

; $

$
66 / 139

Analyse syntaxique predictive non recursive

Application - Algorithme
Pile $S $ ; E := id $ ; E := $;E $ ; E id $ ; E $ ; E E + $ ; E E $ ; E E nb $ ; E E $ ; E $; $ Entre Id := id + nb ; $ Id := id + nb ; $ := id + nb ; $ id + nb ; $ id + nb ; $ + nb ; $ + nb ; $ nb ; $ nb ; $ ;$ ;$ ;$ $
67 / 139

Message S id := E ;

E id E E + E E E nb E E E

Lalgorithme se contente dinformer lutilisateur par la rgle applique Ou bien par lerreur syntaxique dtecte Ces erreurs seront vues plutard

Analyse syntaxique predictive non recursive

Calcul des premiers et suivants


par deux La construction de la table danalyse est facilitee a ` une grammaire G : Premier et Suivant fonctions associees

Premier
de symboles terminaux et Pour toute cha ne composee non-terminaux, on cherche PREMIER() : lensemble de tous les terminaux qui peuvent commencer une cha ne qui se derive de . On cherche alors tous les terminaux a tel quil existe une de derivation a ( etant une cha ne quelconque composee symboles terminaux et non-terminaux).

Suivant
Pour tout non-terminal A, on cherche SUIVANT(A) : lensemble de tous les symboles terminaux a qui peuvent appara tre ` droite de A dans une derivation immediatement a : S Aa
68 / 139

Analyse syntaxique predictive non recursive

Calcul des premiers et suivants


Calcul du PREMIER(X) pour tout symbole X de la grammaire
` ` ce quaucun terminal ni ne Appliquer les regles suivantes jusqua aux ensembles PREMIER : puisse etre ajoute
1 2 3

Si X est un terminal, PREMIER(X) est {X}. ` PREMIER(X). Si X est une production, ajouter a Si X est un non-terminal et X Y1 Y2 . . . Yk une production, mettre a dans PREMIER(X) sil existe i tel que a est dans PREMIER(Yi ) et que est dans tous les PREMIER(Y1 ), . . ., PREMIER(Yi 1 ) c.a.d ` Y1 ,. . .,Yi 1 . Si Y1 ne derive pas en , on najoute rien de plus a PREMIER(X), mais si Y1 , on ajoute PREMIER(Y2 ), etc.

69 / 139

Analyse syntaxique predictive non recursive

Calcul des premiers et suivants


Exemple : calcul des premiers
E TE E +TE | T FT T *FT | F id | (E) PREMIER(E) = PREMIER(T) = PREMIER(F) = {(, id} PREMIER(E) = {+, } PREMIER(T) = {*, }

70 / 139

Analyse syntaxique predictive non recursive

Calcul des premiers et suivants


Calcul du SUIVANT(X) pour tout symbole X de la grammaire
` Appliquer les regles suivantes jusquaucun terminal ne puisse etre aux ensembles SUIVANT ajoute
1

Mettre $ dans SUIVANT(S), ou ` S est laxiome et $ est le marqueur droit indiquant la n du texte source ` SUIVANT(B) PREMIER( ) Sil y a une production A B , ajouter a sauf . Sil existe une production A B ou une production A B telle que ` SUIVANT(B) PREMIER( ) (c.a.d ), ajouter SUIVANT(A) a

71 / 139

Analyse syntaxique predictive non recursive

Calcul des premiers et suivants


Exemple : calcul des suivants
E TE E +TE | T FT T *FT | F id | (E) SUIVANT(E) = SUIVANT(E) = {), $ } SUIVANT(T) = SUIVANT(T) = { +, ), $ } SUIVANT(F) = {+, *, ), $ }

72 / 139

Analyse syntaxique predictive non recursive

Algorithme de construction dune table danalyse predictive


. Une grammaire G Donnee Resultat . Une table danalyse M pour G

Methode
1 2 3

Pour chaque production A de G, proceder aux etapes 2 et 3. ` M[A, a]. Pour chaque terminal aPREMIER( ), ajouter A a ` M[A, b] pour chaque b dans Si PREMIER( ), ajouter A a SUIVANT(A). Si PREMIER() et $ est dans SUIVANT(A), ` M[A, $] ajouter A a non denie Faire de chaque entree de M une erreur.

73 / 139

Analyse syntaxique predictive non recursive

Exemple dune table danalyse predictive

Symbole dentre Non terminal E E T T F F id TFT T T *FT F (E) id ETE E +TE TFT T T + * ( ETE E E ) $

74 / 139

Analyse syntaxique predictive non recursive

Exemple : Analyse du mot id+id*id


Symbole dentre Non terminal E E T T F F id PILE $E $ET $ETF $ETid $ET $E $ET+ TFT T T *FT F (E) ENTREE Id+id*id$ Id+id*id$ Id+id*id$ Id+id*id$ +id*id$
Cours Techniques de Compilation 2011-2012 +id*id$

id ETE

( ETE

E +TE TFT

E T SORTIE ETE TFT Fid T E +TE

E T

+id*id$

75 / 139

Analyse syntaxique predictive non recursive

Exemple : Analyse du mot id+id*id

$ET $ETF $ETid $ET $ETF* $ETF $ETid $ET $E $

Id*id$ id*id$ id*id$ *id$ *id$ id$ id$ $ $ $ T E F id T*FT TFT Fid

76 / 139

Analyse syntaxique predictive non recursive

Exemple : Analyse du mot id+id*id

` Lanalyse du mot id + id * id se termine avec succes

77 / 139

Analyse syntaxique predictive non recursive

Grammaires LL(1)
Description
denie Une grammaire dont la table danalyse na aucune entree LL(1). de fac on multiple est appelee Le premier L signie
de gauche a ` droite (Left to right Scanning). parcours de lentree

` Le deuxieme L signie
derivation gauche (Left most derivation)

le 1 signie quon utilise un seul symbole de prevision.

78 / 139

Analyse syntaxique predictive non recursive

Grammaires LL(1)
Exemple
S iEtSS | a S eS | Eb
Symbole dentre Non T S S a Sa S S eS b e i S iEtSS S t $

Eb
79 / 139

Recup eration sur erreur

Recup eration sur erreur


Quand on distingue une errer ?
Une erreur provient dans une analyse syntaxique predictive non recursive lorsque :
1

nous avons un symbole non terminal A en sommet de pile et un et M [A, a] = symbole a en entree le symbole terminal sommet est different du symbole en entree

Recup eration sur erreur


ee : Une erreur peut etre recup er
1

en mode panique : lanalyseur saute les symboles en entree ` ce quapparaisse une unite lexicale appartenant a ` un jusqua dunites lexicales de synchronisation ensemble selectionn e au niveau du syntagme : lanalyseur execute des routines ` derreurs qui remplacent, inserent ou suppriment des symboles et emettre dentree des messages derreur.
80 / 139

Recup eration sur erreur

Recup eration sur erreur


1

Nous avons un symbole non terminal A en sommet de pile et un et M[A, a] = : symbole a en entree
1

` premier(A) dans On est au debut de lanalyse alors sauter jusqua lespoir de continuer avec A ` suivant(A) On nest pas au debut de lanalyse alors sauter jusqua et depiler A dans lespoir de continuer avec les suivants de A

) * id + id $

) * id + id $

) * id + id $ Sauter jusqu Premier(E) Sauter jusqu suivant(A) et dpiler A Sauter jusqu premier(A)

E $

E $

T E $

M[A, a] =

81 / 139

Recup eration sur erreur

Recup eration sur erreur


1

Nous avons un symbole non terminal A en sommet de pile et un et M[A, a] = : symbole a en entree
1

` premier(A) dans On est au debut de lanalyse alors sauter jusqua lespoir de continuer avec A ` suivant(A) On nest pas au debut de lanalyse alors sauter jusqua dentre et depiler A dans lespoir Symbole de continuer avec les suivants de A
Non terminal E E T T F F id TFT id ETE E +TE Sync T Sync T *FT Sync F (E) TFT + * ( ETE ) Sync E Sync T Sync $ Sync E Sync T Sync

) id * + id $

) id * + id $

) id * + id $

F
+

T E $

Sauter jusqu suivant(F) et dpiler F

T E $

T E $
82 / 139

Recup eration sur erreur

Recup eration sur erreur


2

Nous avons un symbole terminal a en sommet de pile et un et a= b symbole b en entree


On depile le sommet a et on informe lutilisateur par a manquant

id id + nb $

id id + nb $

id id + nb $ Dpiler :=

:= id $

id $

83 / 139

Recup eration sur erreur

Recup eration sur erreur


PILE $E $E $ET $ETF $ETid $ET $ETF* $ETF $ET $E $ET+ $ET $ETF $ETid $ET $E $ ENTREE )Id *+ id$ Id *+id $ Id *+id $ Id *+id $ Id *+id $ *+id $ *+id $ +id $ +id $ +id$ + id$ id$ id$ id$ $ $ $ T E T FT F id T *FT Erreur, M[F,+]=sync Dpiler F ----T E +TE F mal form SORTIE Erreur, sauter ) --TTE FFT Fid
Analyse du mot )id*+id

)mal insr

Sauter jusqu id qui est dans premier(E)

84 / 139

Recup eration sur erreur

Recup eration sur erreur


Analyse du mot )id*+id

Symbole dentre Non terminal E E T T F F id TFT id ETE E +TE Sync T Sync T *FT Sync F (E) TFT + * ( ETE ) Sync E Sync T Sync $ Sync E Sync T Sync

Cas gnral de traitement des erreurs M[A, a] = Sauter a Dpiler A si au milieu danalyse Sauter si dbut danalyse

M[A, a] = Sync

On se synchronise avec les suivants des non terminaux en replissant les cases [A, suivant(A)] par Sync si la case est vide

85 / 139

Analyse syntaxique ascendante par decalage reduction

AS ascendante par decalage reduction


Description
Lanalyse par decalage-r eduction a pour but de construire un arbre danalyse pour une cha ne source en commenc ant par les feuilles et en remontant vers la racine. Cest un processus de reduction dune cha ne vers laxiome de la grammaire. ` chaque etape ` A de reduction, une sous-cha ne particuliere ` la partie droite dune production est remplacee correspondant a par le symbole de la partie gauche de cette production. ` chaque etape, Si la sous-cha ne est choisie correctement a alors en sens inverse. une derivation droite est ainsi elabor ee

86 / 139

Analyse syntaxique ascendante par decalage reduction

Analyse syntaxique ascendante par decalage reduction


Exemple
` Considerons la grammaire avec les regles de production suivantes : S aABe A Abc | b Bd La phrase abbcde peut etre reduite vers S par les etapes suivantes :
1 2 3 4 5

abbcde aAbcde aAde aABe S

abbcde aAbcde aAde aABe S


87 / 139

Analyse syntaxique ascendante par decalage reduction

Analyse syntaxique ascendante par decalage reduction


Exemple-Suite
1 2 3 4 5

abbcde aAbcde aAde aABe S

abbcde aAbcde aAde aABe S

Ces reductions elaborent en sens inverse la derivation droite suivante : S aABe aAde aAbcde abbcde
d d d d

88 / 139

Analyse syntaxique ascendante par decalage reduction

Analyse syntaxique ascendante par decalage reduction


Manche
Informellement, un manche dune cha ne est une sous-cha ne qui ` la partie droite dune production et dont la reduction correspond a vers le non terminal de la partie gauche de cette production represente une etape le long de la derivation droite inverse. Formellement, un manche dune proto-phrase droite est une production A et une position dans ou ne peut etre ` la cha et remplacee par A pour produire la proto-phrase droite trouvee edente prec dans une derivation droite de . Autrement :
Si S A
d d

Alors, A dans la position qui suit est un manche de On dit aussi que est un manche pour

89 / 139

Analyse syntaxique ascendante par decalage reduction

Analyse syntaxique ascendante par decalage reduction


Exemple-Manche
Considerons la grammaire suivante :
E E + E| E * E|(E) E id

Une derivation droite est :


EE +E
d

E+E E
d d d

E + E * id 3 E + id 2 * id3 id 1 + id2 * id3


d

Id1 est un manche de la proto-phrase droite id1+id2*id3 car id est la partie droite de la production E id et le remplacement de id1 edente par E produit la proto-phrase droite prec E + id2 * id3.
90 / 139

Analyse syntaxique ascendante par decalage reduction

Analyse syntaxique ascendante par decalage reduction


Exemple-Suite
La sequence de reductions reduit id1 + id2 * id3 vers laxiome E :
Proto-phrase droite Manche Production de rduction

id1 + id2 * id3 E + id2 * id3 E + E * id3 E+E*E E+E E

Id1 id2 id3 E*E E+E

Eid Eid Eid EE*E E E+ E

91 / 139

Analyse syntaxique ascendante par decalage reduction

Analyse syntaxique ascendante par decalage reduction


` laide dune pile de lanalyse par Implantation a decalage-r eduction
Nous utilisons une pile pour conserver les symboles qui contient la cha ` grammaticaux et un tampon dentree ne a analyser. pour marquer le fond de la pile et Le symbole $ est utilise e droite du tampon dentree. lextremit
Tampon Id + id * id $ Configuration initiale

$
Pile

Tte de L/E

Tampon Id + id * id $ Configuration finale

S $

Tte de L/E

92 / 139

Analyse syntaxique ascendante par decalage reduction

Analyse syntaxique ascendante par decalage reduction


Les operations de base de lanalyseur
(1) decaler, (2) reduire, (3) accepter et (4) erreur. 1 Dans une action decaler , le prochain symbole du tampon dentree du tampon et place en sommet de la pile. est enleve 2 e de la Dans une action reduire , lanalyseur sait que lextremit partie droite du manche est dans la pile et decide par quel non-terminal remplacer le manche 3 et annonce la Dans une action accepter, lanalyseur sarrete reussite nale de lanalyse. 4 Dans une action erreur, lanalyseur decouvre quune erreur de syntaxe sest produite et appelle une routine de recup eration sur erreur.
93 / 139

Analyse syntaxique ascendante par decalage reduction

Analyse syntaxique ascendante par decalage reduction


Algorithme par Decalage/R eduction (Shift/Reduce)
1 2

contient $ Initialement, la pile contient $ et lentree A chaque etape, lanalyseur decale un ou plusieurs symboles ` ce quun manche appara (action decaler ) jusqua t au sommet de la pile. en remplac Une action reduire est alors realis ee ant le manche par ` la partie gauche de la regle de production associee.

94 / 139

Analyse syntaxique ascendante par decalage reduction

Analyse syntaxique ascendante par decalage reduction-Exemple


PILE $ $id1 $E $E+ $E+ id2 $E + E $E + E * $E + E * id3 $E + E * E $E + E $E ENTREE Id1 + id2 * id3 $ + id2 * id3 $ + id2 * id3 $ id2 * id3 $ * id3 $ * Id3 $ id3 $ $ $ $ $ SORTIE Dcaler Rduire par Eid Dcaler Dcaler Rduire par E id Dcaler Dcaler Rduire par E id Rduire par E E*E Rduire par E E+E Accepter

95 / 139

Analyseurs LR

Methode danalyse LR
Description
Cest une methode danalyse syntaxique ascendante qui peut etre pour analyser une large classe de grammaires non utilisee contextuelles. analyse LR(k) : Cette technique est appelee
de gauche vers la droite (Left to L signie le parcours de lentree right scanning of the input) R signie en construisant une derivation droite inverse (constructing a Rightmost derivation in reverse) pour prendre k indique le nombre de symboles de prevision utilises etre une decision danalyse. Quand k est omis, k est suppose egal ` 1. a

96 / 139

Analyseurs LR

Methode danalyse LR
Avantages
Les analyseurs LR reconnaissent virtuellement toutes les constructions des langages de programmation qui peuvent etre decrits par des un grammaire non contextuelle aussi efcacement La methode danalyse LR peut etre implantee que les autres methodes par decalage-r eduction que Un analyseur LR peut detecter une erreur de syntaxe aussitot ` droite de lentree. possible au cours dun parcours de gauche a

Inconvenient
La methode danalyse LR exige de fournir un outil specialiser pour construire les analyseurs (Yacc)
de travail trop importante pour construire a ` la main un Une quantite analyseur
97 / 139

Analyseurs LR

` dun analyseur LR Modele


a1 ai an $

Sm Xm Sm-1 Xm-1 S0

Programme danalyse LR
Action Successeur

Flot de Sortie

98 / 139

Analyseurs LR

Tables danalyse
Les tables danalyse contiennent deux parties
une fonction dactions danalyse Action une fonction de transfert Successeur.
prend comme arguments un etat et un symbole non-terminal et retourne un etat

Le programme dirigeant lanalyseur LR se comporte de la fac on suivante.


Il determine sm , letat en sommet de pile, et ai , le symbole terminal courant. dentree de la table des actions pour Il consulte alors Action[sm , ai ], lentree letat sm et le terminal ai qui peut avoir lune des quatre valeurs :
1 2 3 4

Decaler s ou ` s est un etat Reduire par une production de la grammaire A Accepter Erreur

99 / 139

Analyseurs LR

Conguration dun analyseur LR


Une conguration dun analyseur LR est un couple dont le premier composant est le contenu de la pile et dont le second composant restant a ` analyser : est la cha ne dentree
(s0 X1 s1 X2 . . . Xm sm , ai ai +1 . . . an $)

Cette conguration represente la proto-phrase droite :


X1 X2 . . . Xm ai ai +1 . . . am $

` lanalyse par decalage/ analogue a Reduction ; seule la presence detats en pile est nouvelle par la lecture de Laction suivante de lanalyseur est determin ee courant, sm , letat ai , le symbole dentree en sommet de pile, et la Action [sm , ai ] de la table des actions consultation de lentree danalyse.

100 / 139

Analyseurs LR

Conguration dun analyseur LR-Suite


` chacun des quatre types Les congurations resultantes apres daction, sont les suivantes :
1

Si Action[sm , ai ] = decaler s, lanalyseur execute une action decaler atteignant la conguration :


(s0 X1 s1 X2 . . . Xm sm ai s, ai +1 . . . an $) ` la fois empile le symbole dentree courant ai et le Ici, lanalyseur a a par Action[sm , ai ] ; ai +1 devient le prochain etat s, qui est donne courant. symbole dentree

Si Action[sm , ai ] = reduire par A alors lanalyseur execute une action reduire, atteignant la conguration :
(s0 X1 s1 X2 . . . Xmr smr , A s ai ai +1 . . . an $)

Ou ` s = Successeur[smr , A] et r est la longueur de , partie droite de la production.


Ici lanalyseur commence par depiler 2r symboles (r symboles detats et r symboles grammaticaux), exposant ainsi letat smr au sommet.

101 / 139

Analyseurs LR

Conguration dun analyseur LR-Suite


` la fois A, partie gauche de la production Lanalyseur empile alors a pour Successeur[smr , A]. Le symbole dentree na et s, lentree pas change. es Xmr +1 . . .Xm correspond La sequence de symboles depil ` toujours a
3 4

Si Action[sm , ai ] = accepter, lanalyse est terminee Si Action[sm , ai ] = erreur, lanalyseur a decouvert une erreur et appelle une routine de recup eration sur erreur.

102 / 139

Analyseurs LR

Algorithme de lanalyse LR
Algorithme
: Table danalyseur et le mot Entree Initialiser le pointeur source ps sur le premier symbole de $ ; La pile contient s0
1 2 3 4 5 6 7 8 9

Debut TantQue vrai Faire Soit s l etat en sommet de pile et a le symbole point e par ps; Si Action[s, a] = d ecaler s Alors empiler a puis s; avancer ps sur le prochain symbole en entr ee; Sinon

103 / 139

Analyseurs LR

Algorithme de lanalyse LR
Algorithme-Suite
10 11 12 13 14 15 16 17 18 19 20 21

Si Action[s, a] = r eduire par A Alors d epiler 2 x | | symboles; soit s le nouvel etat sommet de pile; empiler A puis Successeur [s, A]; emettre en sortie une identification de la production A ; Sinon Si Action[s, a] = accepter Alors Retourner Sinon erreur() FinSi

104 / 139

Analyseurs LR

Algorithme de lanalyse LR
Algorithme-Suite
22 23 24 25

FinSi FinSi FinTantQue Fin

105 / 139

Analyseurs LR

Algorithme de lanalyse LR

Exemple
Soit la grammaire des expressions suivantes :
1 2 3 4 5 6

EE+T E T TT*F TF F (E) F id

Le codage des actions est : 1 di signie decaler et empiler letat i, 2 rj signie reduire par la production (j),
3 4

Acc signie accepter, vide signie Une entree erreur

106 / 139

Analyseurs LR

Algorithme de lanalyse LR - Exemple


PILE (1) 0 (2) 0 id 5 Et at 0 1 2 3 4 5 6 7 8 9 10 11 d5 d5 d6 r1 d7 r3 r3 r5 r5 d5 r6 r6 d4 d4 d11 r1 r1 r3 r3 r5 r5
107 / 139

ENTREE Id*id+id$ *id+id$ *id+id$ *id+id$ id+id$ +id$ +id$ +id$ +id$ id$ $ $ $ $

ACTION Dcaler Rduire par Fid Rduire par TF Dcaler Dcaler Rduire par Fid Rduire par TT*F Rduire par ET Dcaler Dcaler Rduire par Fid Rduire par TF Rduire par E E+T Accepter

Action Id d5 d6 r2 d7 r4 r4 d4 r6 r6 + * ( d4 acc r2 r2 r4 r4 ) $

Successeur (3) 0 F 3 (4) 0 T 2 E T F 1 2 3 (5) 0 T 2 * 7 (6) 0 T 2 *7 id 5 (7) 0 T 2 * 7 F 10 (8) 0 T 2 8 2 3 9 (9) 0 E 1 (10) 0 E 1 + 6 3 (11) 0 E 1 + 6 id 5 10 (12) 0 E 1 + 6 F 3 (13) 0 E 1 + 6 T 9 (14) 0 E 1

Leila Jemni Ben Ayed

Analyseurs LR

Construction de la table danalyse LR


` partir dune grammaire, Pour la construction des Tables danalyse LR a ` nous distinguons trois methodes qui different par leur puissance et leur dimplantation : facilite
1

` est appelee Simple LR ou SLR. Elle est la plus La premiere ` implanter mais la moins puissante en terme de nombre simple a de grammaires pour lesquelles elle reussit. LR canonique est la plus puissante la seconde methode, appelee mais la plus couteuse ` LookAhead LR (LALR) a une La troisieme methode, appelee puissance et un cout entre les deux. elle est intermediaire ` la plupart des grammaires de langages de applicable a programmation.
` Les deux dernieres methodes augmentent la methode SLR avec une information de prevision.
108 / 139

Analyseurs LR

Construction de la table danalyse SLR


sur : Basee Prexe viable est tout prexe dune forme grammaticale pouvant appara tre sur la pile dun analyseur decalage/r eduction. Un prexe viable ne depasse jamais un manche. ` Item est une regle de production avec un point reperant une position de la partie droite.
A x . Yz

109 / 139

Analyseurs LR

Construction de la table danalyse SLR


sur : Basee Prexe viable est tout prexe dune forme grammaticale pouvant appara tre sur la pile dun analyseur decalage/r eduction. Un prexe viable ne depasse jamais un manche. ` Item est une regle de production avec un point reperant une position de la partie droite.
A x . Yz

a ` Ce quon espere ` voir Ce quon a dej Rencontre

110 / 139

Analyseurs LR

Construction de la table danalyse SLR


sur : Basee Prexe viable est tout prexe dune forme grammaticale pouvant appara tre sur la pile dun analyseur decalage/r eduction. Un prexe viable ne depasse jamais un manche. ` Item est une regle de production avec un point reperant une position de la partie droite.
A x . Yz

La production A XYZ ou ` X, Y, Z (VN VT ) fournit les 4 items :


A . XYZ A X . YZ A XY . Z A XYZ .

La production A fournit uniquement litem A .


111 / 139

Analyseurs LR

Construction de la table danalyse SLR

Item
par un couple dentiers, le premier donnant Un item peut etre code de la production et le second, la position du point. le numero de partie droite qui a et e reconnue, a ` Un item indique la quantite au cours du processus danalyse. un moment donne ` voir en entree une cha Litem A . XYZ indique quon espere ne derivable depuis XYZ. Litem suivant A X . YZ indique que nous venons de voir en une cha ee de X et que nous esperons entree ne deriv maintenant ee de YZ. voir une cha ne deriv

112 / 139

Analyseurs LR

Construction de la table danalyse SLR

Technique SLR
La SLR se base sur la construction dun automate permettant la reconnaissance des prexes viables. en des ensembles qui constituent les Les items sont regroupes etats de lanalyseur SLR. Une collection densembles ditems LR(0), que nous appelons collection LR(0) canonique, fournit la base de la construction des analyseurs SLR. Pour construire la collection LR(0), nous denissons une et deux fonctions, Fermeture et Transition. grammaire augmentee

113 / 139

Analyseurs LR

Construction de la table danalyse SLR

Grammaire augmentee
Si G est une grammaire daxiome S , alors G , la grammaire de G, est G avec un nouvel axiome S et une nouvelle augmentee production S S . ` atteindre un mot du langage c-a-d on espere ` On espere e a ` partir de S reconna tre un mot deriv
S S S .S S S.

est acceptee quand et seulement quand La cha ne dentree lanalyseur est le point de reduire S S

114 / 139

Analyseurs LR

Construction de la table danalyse SLR


Loperation Fermeture
Si I est un ensemble ditems pour une grammaire G, Fermeture (I) ` partir de I par les deux regles ` est lensemble ditems construit a :
1 2

Initialement, placer chaque item de I dans Fermeture(I) Si A .B est dans Fermeture(I) et B est une production, ` Fermeture(I), sil ne sy trouve pas dej a. ` ajouter litem B . a ` ` ce quaucun nouvel item ne Nous appliquons cette regle jusqua a ` Fermeture(I). puisse plus etre ajoute

E E ; E E + T | T ; T T * F | F ; F (E) | id par lunique item {[E .E ]},alors Si I est lensemble forme Fermeture(I) contient les items :
E .E (par r1) ici = et = , B = E, = E+T E .E+T E .T (par r2) T .T*F T .F (par r2) F .(E) F .id (par r2)
115 / 139

Analyseurs LR

Construction de la table danalyse SLR


Algorithme de loperation Fermeture
1 2 3 4 5

6 7 8

Fonction Fermeture( I ): Debut J I; eter Rep Pour chaque item A .B J et chaque production B de G tel que B . / J Faire ajouter B . ` a J FinPour ` aucun autre item ne puisse Jusqua etre ajout e ` a J Fin

116 / 139

Analyseurs LR

Construction de la table danalyse SLR

Loperation Transition
Transition(I, X) ou ` I est un ensemble ditems et X est un symbole de la grammaire. Transition(I, X) est denie comme la fermeture de lensemble de tous les items [A X. ] tels que [A .X ] ` I. appartienne a Intuitivement, si I est lensemble des items qui sont valides par un , alors Transition(I, X) est lensemble des prexe viable donne items qui sont valides pour le prexe viable X.

117 / 139

Analyseurs LR

Construction de la table danalyse SLR

Exemple-Transition
E E ; E E + T | T ; T T * F | F ; F (E) | id des deux items Si I est lensemble forme {[E E .], [E E . + T ]}, alors Transition(I, +) consiste en :
Nous calculons Transition(I, +) en cherchant dans I les items ` droite du point. immediatement a ` E E. ne convient pas, mais E E+.T repond au critere. Nous franchissons au point le + an dobtenir {[E E + .T ]}. Puis nous calculons fermeture de cet ensemble.

118 / 139

Analyseurs LR

Construction de la table danalyse SLR


Construction des ensembles ditems
La collection canonique densembles ditems LR(0) pour une G est calculee par la procedure grammaire augmentee suivante :
Procedure Items( G ) Debut C {Fermeture({[S .S]})}; eter Rep Pour pour chaque ensemble ditems I de C et pour chaque symbole X de la grammaire tel que Transition(I, X) soit non vide et non encore dans C Faire ajouter Transition (I, X) ` a C FinPour ` ce quaucun nouvel ensemble ditems Jusqua ne puisse plus etre ajout e ` a C Fin

119 / 139

Analyseurs LR

Construction de la table danalyse SLR

Exemple E E EE+T|T TT*F|F F (E) | id


I0: E .E E .E + T E .T T .T * F T .F F .(E) F .id I1: E E. E E. + T I2: E T. TJemni T .*F Leila Ben Ayed I3: T F.

(1) (2) (3) (4) (5) (6)

EE+T ET TT*F TF F (E) F id I6: E E+.T T .T*F T .F F .(E) F .id I7: T T*.F F .(E) F .id I8: F (E.) E E.+T I9: E E+T. T T.*F I10: T T*F. I11: F (E).

La collection canonique densembles ditems LR(0) pour cette grammaire est:


I4: F (.E) E .E+T E .T T .T*F T .F F .(E) F .id
Cours Techniques de Compilation id. I5: F 2011-2012

120 / 139

Analyseurs LR

Construction de la table danalyse SLR

I0

I1

I6 F (

I9

* Vers I3 Vers I4 Vers I5

Vers I7

id T I2
*

I7

F (

I10 Vers I4

I3 (

id Vers I5 E I8 ) + Vers I2 Vers I3 Vers I6 I11

I4 id

id

T F

I5

121 / 139

Analyseurs LR

Construction de la table danalyse SLR


Algorithme
G : Une grammaire augmentee Entree Sortie : Les tables danalyse SLR des fonctions Action et Successeur pour G. Methode : 1 Construire C = {I0 , I1 , , In }, la collection des ensembles ditems LR(0) pour G. 2 ` partir de Ii . Les actions danalyse pour letat Letat i est construit a i comme suit : sont determin ees
1

Si [A .a ] est dans Ii et Transition(Ii , a) = Ij , remplir Action[i, a] avec decaler j . Ici a doit etre un terminal Si [A .] est dans Ii , remplir Action[i, a] avec reduire par A pour tous les a dans SUIVANT(A) ; ici A ne doit pas etre S. Si [S S.] est dans Ii , remplir Action[i, $] avec accepter . Si les ` edentes regles prec engendrent des actions conictuelles, nous disons que la grammaire nest pas SLR(1). Dans ce cas, lalgorithme ne produit pas danalyseur.
122 / 139

Analyseurs LR

Construction de la table danalyse SLR


Algorithme - Suite
3

On construit les transitions Successeur pour letat i pour tout non ` terminal A en utilisant la regle :
1

Si Transition(Ii , A) = Ij , alors Successeur[i, A] = j

non denies ` Toutes les entrees par les regles (2) et (3) sont a ` erreur positionnees e construit a ` partir de Letat initial de lanalyseur est celui qui a et lensemble contenant litem [S .S].

123 / 139

Analyseurs LR

Construction de la table danalyse SLR-Exemple

Exemple: Construisons les tables SLR pour la grammaire des expressions. Considrons tout dabord lensemble ditems I0 de la collection canonique de lensemble des items LR(0): E .E E .E + T E .T T .T * F T .F F .(E) F .id Litem F .(E) produit lentre Action[0, (]= dcaler 4 et litem F .id lentre Action[0, id] = dcaler 5. Les autres items de I0 ne produisent aucune action. Considrons maintenant I1 E E. E E.+T Le premier item produit Action[1, $] = accepter, le second item produit Action[1, +] = dcaler 6.

124 / 139

Analyseurs LR

Construction de la table danalyse SLR-Exemple

Exemple-Suite: Considrons ensuite I2 E T. T T.*F Comme SUIVANT(E) = {$, +, )}, le premier item produit Action[2, $] = Action[2, +]= Action[2, )]= rduire par ET Le second item produit Action[2, *] = dcaler 7. En continuant ainsi, nous obtenons les tables Action et Successeur prsentes prcdemment. Lordre des numros de production dans les actions rduire est le mme que lordre dapparition de ces productions dans la grammaire initiale. C-a-d E E+T est numrot 1, E T est numrot 2 et ainsi de suite.

125 / 139

Analyseurs LR

Exercice dapplication
Exercice: Construire la table danalyse SLR(1) pour la grammaire avec les rgles de production suivantes: (1) S L = R (2) S R (3) L *R (4)L id (5)R L I0 = f(S .S) = {S .S, S .L=R, S .R, L .*R, L .id, R .L} I2 = tr(I0, L) = {S L.=R, R L.} I1 = tr(I0, S) = {S S.} I3 = tr(I0, R) = {S R.} I4 = tr(I0, id) = {L id.} I5 = tr(I0, *) = {L *.R, R .L, L .*R, L .id} tr(I0, =) = tr(I1, X) = = tr(I3, X) = tr(I4, X) tr(I2, =)= f(S L=.R) = {S L=.R, R .L, L .*R, L .id) = I6 tr(I5, R) = {L *R.} = I7 tr(I5, L) = {R L.} = I8 tr(I5, id) = {L id.} = I4 tr(I5, *) = {L *.R, R .L, L .*R, L .id} = I5 tr(I5, S) = tr(I5, =) = tr(I6, R) = {S L = R.} = I9 tr(I6, L) = R L.} = I8 tr(I6, *) = f(L *.R) = I5 Tr(I6, id) = I4 Tr(I6, =) = tr(I6, S) = tr(I7, X) = tr(I9, X) = SUIVANT(S) = {$} SUIVANT(R) = SUIVANT(L) = {=, $}
126 / 139

Analyseurs LR

Exercice dapplication
I0 S I1

I2

= id

I6

I9

I3 * I4 id * I5 I9 R L

id

I8

127 / 139

Analyseurs LR

Exercice dapplication
G nest pas SLR(1) car la table nest pas dterministe. Etat 0 1 2 3 4 5 6 7 8 9 L*R RL Lid d5 d5 d4 d4 L*R RL SL=R d6 R L Action = * d5 id d4 acc RL SR Lid 8 8 7 9 $ Successeur S 1 L 2 R 3

128 / 139

Analyseurs LR

Construction des tables canoniques danalyse LR


Motivation
Lanalyse LR canonique est plus performante que la technique ` un nombre plus SLR car elle permet danalyser avec succes important de grammaires.
Dans la methode SLR, letat i indique une action reduire par A ` la vue dun terminal a appartenant a ` SUIVANT(A). a Cependant, dans certains cas, quand letat i appara t en sommet de pile, le prexe viable de la pile est tel que A ne peut etre suivi par a dans aucune proto-phrase. Par consequent, reduire par ` la vue de a. A est invalide a

` un etat Il faut attacher plus dinformation a : information qui permet deviter les reductions invalides comme A
Information supplementaire dans letat : ajouter un symbole terminal comme second composant dun item ([A . , a]) alors item LR(1) Litem est appele
129 / 139

Analyseurs LR

Construction des tables canoniques danalyse LR


Algorithme
G : Une grammaire augmentee Entree Sortie : Les fonctions Action et Successeur des tables a ` G. canoniques danalyse LR associees Methode :
1

Construire C = {I0 , I1 , , In }, la collection des ensembles ditems LR(1) pour G. ` partir de Ii . Les actions danalyse pour letat Letat i est construit a i comme suit : sont determin ees
1

Si [A .a ,b] est dans Ii et Transition(Ii , a) = Ij , remplir Action[i, a] avec decaler j . Ici a doit etre un terminal Si [A .,a] est dans Ii , A = S , remplir Action[i, a] avec reduire par A . Si [S S.,$] est dans Ii , remplir Action[i, $] avec accepter . Si un ` edentes, conit resulte de lapplication des regles prec la grammaire nest pas LR(1) et lalgorithme echoue.
130 / 139

Analyseurs LR

Construction des tables canoniques danalyse LR


Algorithme - Suite
3

comme Les transitions Successeur pour letat i sont determin ees suit :
1

Si Transition(Ii , A) = Ij , alors Successeur[i, A] = j

non denies ` Toutes les entrees par les regles (2) et (3) sont remplies avec erreur. e construit a ` partir de Letat initial de lanalyseur est celui qui a et lensemble contenant litem [S .S,$].

131 / 139

Analyseurs LR

Construction des tables canoniques danalyse LR

Construction des ensembles ditems LR(1)


G : une grammaire augmentee Donnee Resultat : les ensembles ditems LR(1) qui sont les ensembles ditems valides pour un ou plusieurs prexes viables de G. Methode : Les procedures Fermeture et Transition et la procedure principale Items sont les suivantes :

132 / 139

Analyseurs LR

Construction des tables canoniques danalyse LR


Construction des ensembles ditems LR(1)
1 2 3 4

5 6 7

8 9

Fonction Fermeture( I ): Debut eter Rep Pour chaque item [A B ,a] I et chaque production B de G, et chaque terminal b de premier ( a) tel que [B . ,b] / I Faire ajouter [B . ,b] ` a I FinPour ` aucun autre item ne puisse Jusqua etre ajout e ` a I Retourner I Fin
133 / 139

Analyseurs LR

Construction des tables canoniques danalyse LR

Construction des ensembles ditems LR(1)


1 2 3 4 5 6

Fonction Transition( I,X ): Debut soit J lensembles des items [A X ,a] tel que [A X ,a] I; Retourner Fermeture(J ) Fin

134 / 139

Analyseurs LR

Construction des tables canoniques danalyse LR


Construction des ensembles ditems LR(1)
Procedure Items( G ) Debut C {Fermeture({[S S , $]})}; eter Rep Pour pour chaque ensemble ditems I de C et pour chaque symbole de la grammaire X tel que Transition(I, X) soit non vide et non encore dans C Faire ajouter Transition (I, X) ` a C FinPour ` ce quaucun nouvel ensemble ditems ne Jusqua puisse plus etre ajout e ` a C Fin
135 / 139

Analyseurs LR

Construction des tables canoniques danalyse LR-Exemple


PILE (1) 0 (2) 0c3 (3) 0 c3c3 (4) 0c3c3d4 (5) 0 c3c3C8 (6) 0c3C8 (7) 0 C2 (8) 0C2d7 (9) 0C2C5 (10) 0 E 1 + 6 (11) 0S1 ENTREE ccdd$ cdd$ dd$ d$ d$ d$ d$ $ $ $ $ ACTION Dcaler Dcaler Dcaler Rduire C D Rduire C cC Rduire CcC Dcaler Rduire C d Rduire S CC Dcaler Acc
136 / 139

Analyseurs LR

sur lanalyse Lexicale/Syntaxique Resum e


` Lanalyse lexicale transforme un ot de caracteres en un ot lexicales. Lanalyse syntaxique transforme un ot dunites dunites lexicales en arbre syntaxique. lexicale est gen eralement Une unite une classe et une cha ne de ` caracteres (son nom) er es a ` partir des Les analyseurs lexicaux peuvent etre gen er es a ` partir des automates detats nis, eux-memes gen ` expressions reguli eres decrivant des langages. Lanalyseur lexical fait un traitement lorsquil rencontre un eral il le ref erence identicateur (en gen dans une table des symboles). ` descendante ou Lanalyse syntaxique peut se faire de maniere ` ` ascendante (se referant a la maniere avec laquelle on construit larbre syntaxique).
137 / 139

Analyseurs LR

sur lanalyse Lexicale/Syntaxique Resum e


` la main Les analyseurs syntaxiques descendants ecrits a consistent en un ensemble de procedures mutuellement comme la grammaire. recursives structurees les ensembles Pour ecrire ces analyseurs, il faut avoir calcule par ces Premier et Suivant. Les grammaires acceptees analyseurs sont dites LL(1). ` gauche ne sont pas LL(1), on peut Les grammaires recursives a ecursiver ` gauche. der une grammaire recursive a ` la base cest Les analyseurs ascendants manipulent des items : a ` une regle avec un point symbolisant lendroit jusquauquel on a a ` un ou plusieurs symboles reconnu (eventuellement associe ` avoir ni de representant ce que lon rencontrera apres ` reconna tre la regle en question).
138 / 139

Analyseurs LR

sur lanalyse Lexicale/Syntaxique Resum e


Les analyseurs ascendants essayent didentier successivement les reductions candidates. Il y de nombreuses techniques pour trouver les reductions candidates. Les analyseurs LR(1) utilisent des ensembles ditems LR(1). ere ` une En parsing LR(0) tout item de la forme [N ] gen ere ` une reduction. En parsing SLR(1) un item [N ] gen ` lire appartient a ` reduction si et seulement si le prochain symbole a ere ` une Suivant(N). En parsing LR(1) un item [N , A] gen ` lire est dans lensemble A, un reduction si le prochain symbole a a ` un symbole. petit ensemble de terminaux. En LR(1) A est limite En LALR(1) cest un ensemble de symbole (dans Suivant(N)). En ` fortes chances detre pratique une grammaire LR(1) a de tres LALR(1)
139 / 139

Вам также может понравиться