Академический Документы
Профессиональный Документы
Культура Документы
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
Analyseur Lexical
Unit lexicale
Obtenir prochaine unit lexicale
Analyseur Syntaxique
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
8 / 139
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
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
Exemple (suite)
a. Type
11 / 139
Exemple (suite)
a. b. Type Type
12 / 139
Exemple (suite)
a. b. array
9
Type Type
13 / 139
Exemple (suite)
a. b. array
9
14 / 139
Exemple (suite)
a. b. array
9
of
15 / 139
Exemple (suite)
a. b. array
9
of
Type
16 / 139
of
z X
Type
c. array
9
[ Typesimple ]
Type
17 / 139
of
Type
c. array nb
9
9
[ Typesimple ]
Type
18 / 139
of
z X
Type
c. array nb
9
Type [ Typesimple ]
? X X ? XXX XX zXX X
of
z X
Type
9
2points
19 / 139
of
z X
Type
c. array nb
9
of
z X
Type
9
X ? XXXX z
nb
20 / 139
of
Type
9
X ? XXXX z
nb
21 / 139
of
Type
?
9
X ? XXXX z
nb
Typesimple
22 / 139
of
Type
?
nb
Typesimple
e. array nb
9
?XXXX z X 9
2points
nb
Typesimple
23 / 139
of
Type
?
nb
Typesimple
e. array nb
9
of
Type
?
nb
Typesimple integer
24 / 139
Description
Cest une methode danalyse dans laquelle on execute des procedures recursives. a ` chaque non terminal. Une procedure est associee
25 / 139
26 / 139
symbolesymbole suivant()
Sinon
erreur()
FinSi Fin
27 / 139
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
symbolesymbole suivant()
Sinon
erreur()
FinSi Fin
29 / 139
Type simple();
Sinon
30 / 139
Si symbole = Sinon
Alors
31 / 139
accepter(integer);
Sinon Si symbole = char Alors
accepter(char);
Sinon Si symbole = nb Alors
32 / 139
Sinon
erreur()
FinSi FinSi FinSi Fin
33 / 139
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
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
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
Elimination de lambigu te
Elimination de lambigu te
Grammaire ambigue
` Admet des regles de la forme : A 1 |2
37 / 139
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
38 / 139
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
Application
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
Application
1 2 3 4 5 6
41 / 139
Application
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
Application
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Application
1 2 3 4 5 6
44 / 139
45 / 139
46 / 139
Exemple - Suite
Id := id op nb ; $
Tampon
Configuration initiale
S $ Pile
Tte de L/E
Id := id op nb ; $
Tampon
47 / 139
48 / 139
:=
49 / 139
1 2 3 4 5 6 7 8 9 10 11 12 13
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
70 / 139
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
72 / 139
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
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
id ETE
( ETE
E +TE TFT
E T
+id*id$
75 / 139
Id*id$ id*id$ id*id$ *id$ *id$ id$ id$ $ $ $ T E F id T*FT TFT Fid
76 / 139
77 / 139
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)
78 / 139
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
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
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
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
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 $
T E $
T E $
82 / 139
id id + nb $
id id + nb $
id id + nb $ Dpiler :=
:= id $
id $
83 / 139
)mal insr
84 / 139
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
86 / 139
Ces reductions elaborent en sens inverse la derivation droite suivante : S aABe aAde aAbcde abbcde
d d d d
88 / 139
Alors, A dans la position qui suit est un manche de On dit aussi que est un manche pour
89 / 139
E+E E
d d 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
91 / 139
$
Pile
Tte de L/E
S $
Tte de L/E
92 / 139
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
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
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
Decaler s ou ` s est un etat Reduire par une production de la grammaire A Accepter Erreur
99 / 139
Analyseurs LR
` 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
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 $)
101 / 139
Analyseurs LR
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
105 / 139
Analyseurs LR
Algorithme de lanalyse LR
Exemple
Soit la grammaire des expressions suivantes :
1 2 3 4 5 6
Le codage des actions est : 1 di signie decaler et empiler letat i, 2 rj signie reduire par la production (j),
3 4
106 / 139
Analyseurs LR
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
Analyseurs LR
` 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
109 / 139
Analyseurs LR
110 / 139
Analyseurs LR
Analyseurs LR
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
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
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
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
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
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
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
119 / 139
Analyseurs LR
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).
120 / 139
Analyseurs LR
I0
I1
I6 F (
I9
Vers I7
id T I2
*
I7
F (
I10 Vers I4
I3 (
I4 id
id
T F
I5
121 / 139
Analyseurs LR
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
On construit les transitions Successeur pour letat i pour tout non ` terminal A en utilisant la regle :
1
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
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
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
` 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
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
comme Les transitions Successeur pour letat i sont determin ees suit :
1
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
132 / 139
Analyseurs LR
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
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
Analyseurs LR
Analyseurs LR
Analyseurs LR
Analyseurs LR