La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313.

Présentations similaires


Présentation au sujet: "IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313."— Transcription de la présentation:

1 IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313 Analyseurs LR (1) et LALR(1)

2 IFT313© Froduald Kabanza2 Sujets Éléments LR(1) AFD LR(1). Table danalyse LR(1). AFD LALR(1) Table danalyse LALR(1). Hiérarchie des grammaires hors-contexte

3 IFT313© Froduald Kabanza3 Objectifs Pouvoir définir ce quun élément LR(1). Pouvoir calculer lAFD LR(1). Pouvoir construire la table danalyse LR(1). Pouvoir reconnaître des grammaires LR(1). Pouvoir calculer lAFD LALR(1) Pouvoir construire la table danalyse LALR(1). Pouvoir reconnaître des grammaires LALR(1). Comprendre les forces relatives des analyses LR(0), SLR(1), LR(1) et LALR(1). Connaître lhiérarchie entre les différentes classes de grammaires hors- contexte : LL(0), LL(1), LR(0), LR(1), SLR(1), LALR(1).

4 IFT313© Froduald Kabanza4 Rappel : Algorithme danalyse LR (1) 1/2 Algorithm LR1Parser Entrée : flux de tokens Sortie : dérivation de lentrée si elle est dans L(G), sinon erreur. Variables : stack (pile), a (prochain token), in (entrée : flux de tokens) i (sommet de la pile) Table danalyse LR(0) avec lookahead, ou SLR(1), ou LALR(1). Méthode : Initialement la pile contient létat 0. Ensuite il exécute le code suivant.

5 IFT313© Froduald Kabanza5 Rappel : Algorithme danalyse LR (1) 2/ 2 a = in.getNextToken(); while (true) { i = state on top of stack; if action[i,a] = shift j { push a on top of the stack; push j on top of the stack; a = get.NextToken(); continue; } if action[i,a] = reduce A pop 2 x | | symbols off the stack; i = the state now on top of the stack; push A on top of stack; push goto[i,A] on top of the stack; printout the production A continue; } if action[i,a] = accept return true; error(); }

6 IFT313© Froduald Kabanza6 Rappel : Table danalyse SLR(1) Algorithm construire la table danalyse SLR(1) Entrée : Une grammaire augmentée G, avec le symbole de départ S; Sortie : Table danalyse SLR(1); Méthode : 1. Construire lAFD LR(0) de G; 2. Nous notons i, létat I i. Les actions danalyse pour létat i sont déterminées comme suit : a. Si un élément A a tel que a est un terminal, est dans I i et goto(I i, a) = I j, ajoute shift j dans action[i, a]; b. Si un élément A est dans I i, avec A différent de S, ajoute reduce A dans action[i, a], pour chaque terminal a dans Follow(A); c. Si lélément S S. est dans I i, ajoute accept dans action[i, $].

7 IFT313© Froduald Kabanza7 Rappel : Table danalyse SLR(1) 3. Si goto(I i, A) = I j pour un non terminal A goto[i, A] devient j ; 4. Toutes les entrées vides sont considérées comme ayant la valeur erreur. 5. Létat initial, 0, est celui construit à partir de létat de lAFD contenant lélément S. S Si la table générée par cette algorithme contient des conflits, c.-à-d., des entrées avec actions multiples, la grammaire correspondante nest pas SLR(1). Un analyseur SLR(1) est un analyseur qui utilise une table SLR(1).

8 IFT313© Froduald Kabanza8 Exemple –Grammaire illustrant laccès au contenu dune adresse donnée par un pointeur dans le langage C : 0. S S 1. S L = R 2. S R 3. L * R 4. L id 5. R L Les terminaux sont : id, = et *. –On peut interpréter les symboles L et R, respectivement comme étant la « L- value » et la « R-value »; et * lopérateur contenu de. Exemple: *x = y.

9 IFT313© Froduald Kabanza9 AFD LR(0) 0 S S.L=R S R L *R L.id R.L I6 S L=.R R.L L *R L.id 4 L *.R R.L L *R L.id 2 S L.=R R L. 9 S L=R. I7 L *R. 5 L id. I1 S S. 8 R L. 3 S R. S R L = R id L * * * R L conflit shift/reduce *=$SRL s5 id actions / goto goto s5 r4r4r4r4 r3 r r2r2 s6 r5 acc s4s4 s4s4 r3 r5 s4 r5 1. S L = R 2. S R 3. L * R 4. L id 5. R L Table SLR(1)

10 IFT313© Froduald Kabanza10 Simulation (0, *id = id $) (0 * 4, id = id $) (0 * 4 id 5, = id $) (0 * 4 L 8, = id $) (0 * 4 R 7, = id $) (0 L 2, = id $) (0 R 3, = id $) Error: no entry [3, =] in table (0 L 2 = 6, id $) (0 L 2 = 6 id 5, $) (0 L 2 = 6 L 8, $) (0 L 2 = 6 R 9, $) (0 S 1, $) Accepte reduce shift conflit shift/reduce *=$SRL s5 id actions / goto goto s5 r4r4r4r4 r3 r r2r2 s6 r5 acc s4s4 s4s4 r3 r5 s4 r5 1. S L = R 2. S R 3. L * R 4. L id 5. R L 2 S L.=R R L. Conflit

11 IFT313© Froduald Kabanza11 De SLR(1) à LR(1) –Nous avons vu que pour un automate LR, pour quune exécution mène à lacceptation, il faut qu à tout moment, le contenu de la pile concaténé avec le reste de la chaîne à lire, soit une forme sententielle pour la dérivation la plus à droite. –Avec le conflit shift/reduce précédent, la réduction viole la propriété précédente : R = id nest pas une forme sententielle droite; on ne peut pas avoir : S => R = id => * id = id –Par contre, le shift est en accord avec la propriété : L = id est une forme sententielle droite; on peut avoir, S => L = id => * id = id * ** *

12 IFT313© Froduald Kabanza12 De SLR(1) à LR(1) –Dans SLR(1) lorsque létat au sommet de la pile contient lélément A. et que le prochain token est dans Follow(A), on fait une réduction de sur la pile. –Cette décision est trop approximative pour deux raisons : –Follow(A) est lunion de tous les tokens qui peuvent suivre A, en tenant compte de toutes le production qui commencent par A, pas juste la production A pour laquelle on a lélément A. –On ne devrait pas regarder juste A, mais le préfixe viable sur la pile ( pour sassurer que dérive effectivement une chaîne pouvant être suivi du prochain token. –Cette approximation cause des conflits. Les éléments LR(1) font une meilleure approximation, donnant lieu à moins de conflit.

13 IFT313© Froduald Kabanza13 Éléments LR(1) –Tout comme les éléments LR(0), un élément LR(1) consiste dune production et dun point. En plus, un élément LR(1) a un symbole lookahead (le prochain token attendu). –Plus précisément, un élément LR(1) est de la forme [A., a ]. –Comme pour les éléments LR(0), cela signifie que nous avons au sommet de la pile, et on sattend à lire un préfixe du reste de lentrée dérivé de. –En plus, le a signifie que le token a peut suivre A dans une forme sentientielle droite, obtenue en utilisant la production A S => xAy => x y et a est dans First(y). **

14 IFT313© Froduald Kabanza14 AFD LR(1) –En dautres mots, un élément [A., a ] signifie que : Le reste de lentrée débute par un préfixe dérivable de a Après la réduction de par A, on va faire shift de a. Ainsi, A sera suivi de a sur la pile. –Un état LR(1) est un ensemble déléments LR(1), obtenues en utilisant la fonction etats(G) suivante. –Cette version utilise des fonctions closure et goto qui sont des mises à jour des fonctions similaires pour lAFD LR(0).

15 IFT313© Froduald Kabanza15 Algorithme Closure Algorithm Closure(I) do { pour chaque élément [A. X, a ] dans I chaque production X dans la grammaire et chaque terminal b dans First( a) tel que [X. b ] nest pas dans I ajouter [X. b ] à I // b pourrait suivre X dans une dérivation droite } while (des éléments nouveaux sont ajoutés dans I) return I

16 IFT313© Froduald Kabanza16 Algorithmes goto et etats Algorithm goto(I,X) soit J lensemble déléments [A X., a ] tel que [A X., a ] est dans I; return closure(I) Algorithm etats(Augmented grammar G) C = { closure({[S. S, $]}) }; // C est lensemble des états do pour chaque état I dans C et chasque non terminal X tel que goto(I,X) est non vide et nest pas encore dans C ajouter goto(I,X) dans C while (un nouvel état est ajouté dans C) return C

17 IFT313© Froduald Kabanza17 Générer la table danalyse LR(1) Algorithm Constructing LR(1) Parsing Table Input: An augmented grammar G, with start symbol S; Output: LR(1) parsing table; Method: 1. Construct the LR(1) DFA for G; 2. State i corresponds to I i. The parsing actions for state i are determined as follows: a. If an item [A. a b] for a terminal a, is in I i and goto(I, a) = I j, set action[i, a] to shift j b. If an item [A. a is in I i, where A is different from S, set action[i, a] to reduce A c. If item [S S., $] is in I i, set action[i, $] to accept. i

18 IFT313© Froduald Kabanza18 Générer la table danalyse LR(1), suite 3. If goto(I i, a) = I j for a nonterminal A set goto[i, A] = j; 4. All entries not defined by the rules 2 and 3 are made error 5. The initial state 0 is the one constructed from the set of items containing [S S, $] Si la table danalyse contient des entrée multiples, la grammaire nest pas LR(1). Lalgorithme danalyse demeure le même que pour lanalyse SLR(1) (LR1Driver). Un analyseur utilisant une table LR(1) est un analyseur LR(1)..

19 IFT313© Froduald Kabanza19 Rappel : AFD LR(0) 0 S S.L=R S R L *R L.id R.L I6 S L=.R R.L L *R L.id 4 L *.R R.L L *R L.id 2 S L.=R R L. 9 S L=R. I7 L *R. 5 L id. I1 S S. 8 R L. 3 S R. S R L = R id L * * * R L conflit shift/reduce *=$SRL s5 id actions / goto goto s5 r4r4r4r4 r3 r r2r2 s6 r5 acc s4s4 s4s4 r3 r5 s4 r5 1. S L = R 2. S R 3. L * R 4. L id 5. R L Table SLR(1)

20 IFT313© Froduald Kabanza20 Exemple 1 : AFD LR(1) Le conflit dans létat 2 a disparu 0 S. S, $ S. L=R, $ S. R, $ L. *R, $/= L. id, $/= R. L, $ 3 S L=. R, $ R. L, $ L. *R, $ L. id, $ 5 L *. R, $/= R. L, $/= L. *R, $/= L. id, $/= 2 S L. =R, $ R L., $ 8 S L=R., $ 13 L *R., $ 7 L id., $/= 1 S S., $ 6 R L., $ S R L = R id L * * * R L 12 L *. R, $ R. L, $ L. *R, $ L. id, $ 4 S R., $ 10 L id., $ 11 R L., $/= 9 L *R., $/= id L R * 1. S L = R 2. S R 3. L * R 4. L id 5. R L

21 IFT313© Froduald Kabanza21 Table LR(1) *=$SRL s7s7 id actions / goto goto r r5r5s3 acc r5 r4 s5s5 s10s12 s7s7s5s5 r3 r2r r5r5r5 s10s12 r4r4 r3r3 8 S L=R., $ 9 L *R., $/= 0 S. S, $ S. L=R, $ S. R, $ L. *R, $/= L. id, $/= R. L, $ 3 S L=. R, $ R. L, $ L. *R, $ L. id, $ 5 L *. R, $/= R. L, $/= L. *R, $/= L. id, $/= 2 S L. =R, $ R L., $ 13 L *R., $ 7 L id., $/= 1 S S., $ 6 R L., $ S R L = R id L * * * R L 12 L *. R, $ R. L, $ L. *R, $ L. id, $ 4 S R., $ 10 L id., $ 11 R L., $/= id L R

22 IFT313© Froduald Kabanza22 Exemple 1/ 2 1. S CC 2. C cC 3. C d Soit la grammaire Construire la table LR(1) Le symbole de départ est S. Les terminaux sont: c, d

23 IFT313© Froduald Kabanza23 Exemple 2/2 d$SC s3s3 c actions goto r3 r1r1 s6s6 s6 acc r3 s7s7 r2 s4s4 1 s75 s3s48 9 r2 0 S. S, $ S. CC, $ C. cC, c/d C. d, c/d 2 S C. C, $ C. cC, $ C. d, $ 6 C c. C, $ C. cC, $ C. d, $ 3 C c. C, c/d C. cC, c/d C. d, c/d 4 C d., c/d 1 S S., $ 7 C d., $ 5 S CC., $ 9 C cC., $ 8 C cC., c/d S C C C C c c d d d c c d 1. S CC 2. C cC 3. C d

24 ANALYSE LALR (1) IFT313© Froduald Kabanza24

25 IFT313© Froduald Kabanza25 AFD LALR(1) et Table danalyse LALR(1) –Les tables danalyse LR(1) peuvent devenir très larges. On ne les utilisent pas en pratique. –La décomposition de lensemble Follow en lookahead associé à chaque élément LR(0) est la source de la puissance de lanalyse LR(1). –Mais on na pas besoin de cette décomposition dans chaque état. Cette observation mène à une approximation de lAFD LR(1) beaucoup plus efficace (moins détats), mais légèrement moins expressive: lAFD LALR(1). –Un AFD LALR(1) est obtenu de lAFD LR(1) en fusionnant les états identiques pour les éléments LR(0) (seuls les composantes lookahead diffèrent). –Une table danalyse LALR(1) est obtenue de lAFD LALR(1) de la même façon que la table danalyse LR(1) est obtenue de lAFD LR(1). –Il peu arriver que la table danalyse LALR(1) contient des conflits alors que la table danalyse LR(1) correspondant nen a pas. Mais cest rare.

26 IFT313© Froduald Kabanza26 Exemple 1 : AFD LR(1) 0 S. S, $ S. L=R, $ S. R, $ L. *R, $/= L. id, $/= R. L, $ 3 S L=. R, $ R. L, $ L. *R, $ L. id, $ 5 L *. R, $/= R. L, $/= L. *R, $/= L. id, $/= 2 S L. =R, $ R L., $ 8 S L=R., $ 13 L *R., $ 7 L id., $/= 1 S S., $ 6 R L., $ S R L = R id L * * * R L 12 L *. R, $ R. L, $ L. *R, $ L. id, $ 4 S R., $ 10 L id., $ 11 R L., $/= 9 L *R., $/= id L R * 1. S L = R 2. S R 3. L * R 4. L id 5. R L

27 IFT313© Froduald Kabanza27 AFD LALR(1) et Table danalyse *=$SRL s7s7 id actions / gotogoto r5 r r5r5s3 acc r5 r4 s5s5 s7s7s5s5 s7s7s5s5 r3 r2r2 0 S. S, $ S. L=R, $ S. R, $ L. *R, $/= L. id, $/= R. L, $ 3 S L=. R, $ R. L, $ L. *R, $ L. id, $ 5 L *. R, $/= R. L, $/= L. *R, $/= L. id, $/= 2 S L. =R, $ R L., $ 8 S L=R., $ 7 L id., $/= 1 S S., $ 6 R L., $/= S L = R id L * * * R 4 S R., $ 9 L *R., $/= id L R

28 IFT313© Froduald Kabanza28 Exemple 2 d$SC s3s3 c actions goto r3 r1r1 s6s6 s6 acc r3 s7s7 r2 s4s4 1 s75 s3s48 9 r2 0 S. S, $ S. CC, $ C. cC, c/d C. d, c/d 2 S C. C, $ C. cC, $ C. d, $ 6 C c. C, $ C. cC, $ C. d, $ 3 C c. C, c/d C. cC, c/d C. d, c/d 4 C d., c/d 1 S S., $ 7 C d., $ 5 S CC., $ 9 C cC., $ 8 C cC., c/d S C C C C c c d d d c c d 1. S CC 2. C cC 3. C d

29 IFT313© Froduald Kabanza29 Exemple 2 0 S. S, $ S. CC, $ C. cC, c/d C. d, c/d 2 S C. C, $ C. cC, $ C. d, $ 3 C c. C, c/d/$ C. cC, c/d/$ C. d, c/d/$ 4 C d., c/d/$ 1 S S., $ 5 S CC., $ 6 C cC., c/d/$ S C C C c c d d c d 1. S CC 2. C cC 3. C d d$SC s3s3 c actions goto r3 r1r1 s3 acc r3 s4s4 1 s45 s3s46 r3 r2r3 r2

30 IFT313© Froduald Kabanza30 Génération efficace des tables danalyse LALR(1) –Il existe une méthode efficace pour générer lAFD LALR(1) et la table danalyse LALR(1) sans passer directement par lAFD LR(1). –Cette méthode calcule les états de lAFD LALR(1) à la volée en utilisant une technique de propagation des lookahead. Voir Aho-Sethi-Ullman. Compilers: Principles, Techniques and Tools, 1988 :Pages 240 – 244. –Dans le même livre : représentation compacte des tables LALR(1): Pages

31 IFT313© Froduald Kabanza31 Commentaires sur lanalyse LALR(1) –Les états de lAFD LR(1) sont toujours des versions dupliquées des états de lAFD LR(0), mis à part les lookahead qui diffèrent. –Donc lAFD LALR(1) a le même nombre détats que lAFD LR(0) et les mêmes transitions. –Une des raisons pour lesquelles lanalyse LALR(1) fonctionne si bien et que la fusion des états de lAFD LR(1) ne peut pas introduire des conflits shift-reduce. Sil y en a dans lAFD LALR(1) cest quelles étaient dans lAFD LR(1) dorigine. Seuls des conflits reduce-reduce peuvent être introduites par la fusion des états..

32 IFT313© Froduald Kabanza32 Hiérarchie des grammaires hors-contexte Grammaires non ambigües Grammaires ambigües LL(0 ) LR(0) SLR LALR LL(k) LL(1) LR(1) LR(k)


Télécharger ppt "IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313."

Présentations similaires


Annonces Google