Laurent WOUTERS laurent.wouters@eads.net 01/06/2012 Generalized LR Laurent WOUTERS laurent.wouters@eads.net 01/06/2012.

Slides:



Advertisements
Présentations similaires
Mais vous comprenez qu’il s’agit d’une « tromperie ».
Advertisements

ORTHOGRAM PM 3 ou 4 Ecrire: « a » ou « à » Référentiel page 6
LES NOMBRES PREMIERS ET COMPOSÉS
Qualité du Premier Billot. 2 3 Défauts reliés à labattage.
1. Résumé 2 Présentation du créateur 3 Présentation du projet 4.
Vocabulaire 6.2 Français II Bon voyage ! 1.
Licence pro MPCQ : Cours
Distance inter-locuteur
1 Plus loin dans lutilisation de Windows Vista ©Yves Roger Cornil - 2 août
Les numéros
Sud Ouest Est Nord Individuel 36 joueurs
Les identités remarquables
Cours MIAGE « Architectures Orientées Services » Henry Boccon-Gibod 1 Architectures Orientées Services Composants de Service Exemple pratique de développement.
La diapo suivante pour faire des algorithmes (colorier les ampoules …à varier pour éviter le « copiage ») et dénombrer (Entoure dans la bande numérique.
LES TRIANGLES 1. Définitions 2. Constructions 3. Propriétés.
1 Efficient Data and Program Integration Using Binding Patterns Ioana Manolescu, Luc Bouganim, Francoise Fabret, Eric Simon INRIA.
Chap. 1 INTRODUCTION Beaucoup de problèmes de la vie courante, tels la gestion de réseaux de communication ou l'ordonnancement de tâches, correspondent.
2 1. Vos droits en tant quusagers 3 1. Vos droits en tant quusagers (suite) 4.
User management pour les entreprises et les organisations Auteur / section: Gestion des accès.
Exercice Trame Ethernet
Mr: Lamloum Med LES NOMBRES PREMIERS ET COMPOSÉS Mr: Lamloum Med.
1 Cours numéro 3 Graphes et informatique Définitions Exemple de modélisation Utilisation de ce document strictement réservée aux étudiants de l IFSIC.
Les structures de données arborescentes
Synchronisation et communication entre processus
II. Chaînage, SDD séquentielles
Présentation générale
Cours de physique générale I Ph 11
1 Guide de lenseignant-concepteur Vincent Riff 27 mai 2003.
18/05/ Utiliser le cahier de texte en ligne avec lapplication SPIP Adresse du site du lycée :
Le drapeau canadien comme symbole de fierté nationale : une question de valeurs partagées Jack Jedwab Association détudes canadiennes 28 novembre 2012.
PM18 MONTAGE DU BLINDAGE AUTOUR DE LA QRL F. DELSAUX - 25 JAN 2005
IFT313 Introduction aux langages formels
Détection de co-évolution de gènes Master 2 : Informatique à Finalité Professionnelle et Recherche Unifiée (IFPRU) Parcours Ingénierie de lIntelligence.
Titre : Implémentation des éléments finis sous Matlab
Projet poker 1/56. Introduction Présentation de léquipe Cadre du projet Enjeux Choix du sujet 2.
INDUSTRIE sa Tel : 0033(0) Fax : Projet: SKIP CAPSULES – v.1 Client: CARDIVAL HEALTH.
LES NOMBRES PREMIERS ET COMPOSÉS
Logiciel gratuit à télécharger à cette adresse :
Les chiffres & les nombres
1 INETOP
IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313.
IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke Automates à pile LR Notion de poignée.
RACINES CARREES Définition Développer avec la distributivité Produit 1
Représentation des systèmes dynamiques dans l’espace d’état
Représentation des systèmes dynamiques dans l’espace d’état
Représentation des systèmes dynamiques dans l’espace d’état
1. 2 PLAN DE LA PRÉSENTATION - SECTION 1 : Code HTML - SECTION 2.1. : CSS (Méthode 1) - SECTION 2.2. : CSS (Méthode 2) - SECTION 3 : JavaScript - SECTION.
DUMP GAUCHE INTERFERENCES AVEC BOITIERS IFS D.G. – Le – 1/56.
1 Licence dinformatique Algorithmique des graphes Problèmes dordonnancement. Utilisation de ce document strictement réservée aux étudiants de l IFSIC dans.
Tournoi de Flyball Bouin-Plumoison 2008 Tournoi de Flyball
Année universitaire Réalisé par: Dr. Aymen Ayari Cours Réseaux étendus LATRI 3 1.
Applications des langages hors-contextes Les analyseurs syntactiques ascendants GNU Yacc et Bison.
Chapitre 3 Syntaxe et sémantique.
Titre : Implémentation des éléments finis en Matlab
MAGIE Réalisé par Mons. RITTER J-P Le 24 octobre 2004.
1 INETOP
Rappel Modèle analyse-synthèse de la compilation
P.A. MARQUES S.A.S Z.I. de la Moussière F DROUE Tél.: + 33 (0) Fax + 33 (0)
LA GESTION COLLABORATIVE DE PROJETS Grâce aux outils du Web /03/2011 Académie de Créteil - Nadine DUDRAGNE 1.
MAGIE Réalisé par Mons. RITTER J-P Le 24 octobre 2004.
Traitement de différentes préoccupations Le 28 octobre et 4 novembre 2010.
1/65 微距摄影 美丽的微距摄影 Encore une belle leçon de Macrophotographies venant du Soleil Levant Louis.
LES PILES ET FILES.
Commission paritaire de suivi des opérations de reclassement repositionnement dans le cadre du droit d’option Statistiques novembre 2010.
Les Chiffres Prêts?
Elles avaient envahi le jardin, mais derrière... 1.
1 Formation à l’usage éco-performant de votre pc 1 ère Partie.
Introduction à SolidWorks
Les parties du corps By Haru Mehra Le Frehindi 1Haru Mehra, DELF, DALF,CFP.
Abdelkader Heni FUNDP Syntaxe et sémantique Abdelkader Heni FUNDP
Transcription de la présentation:

Laurent WOUTERS laurent.wouters@eads.net 01/06/2012 Generalized LR Laurent WOUTERS laurent.wouters@eads.net 01/06/2012

Plan Partie 1 – Introduction Partie 2 – Méthode GLR 1 – Historique et Variantes 2 – Graph-Structured Stack 3 – Algorithme GLR 4 – Shared Packed Parse Forest 5 – Right-Nulled GLR 6 – Complexités Partie 3 – Outils Partie 4 – Ouverture

Introduction

Langage de programmation Pour des langages de programmation modernes, la grammaire est en général accessible: Documents de standardisation: C: ISO/IEC 9899:1999 C++: ISO/IEC 14882:2011 C#: ECMA-334 Site web pour des projets open source: Java: http://docs.oracle.com/javase/specs/ Documents de spécification pour d’autres: Visual Basic: http://www.microsoft.com/en-us/download/details.aspx?id=15039

Ambigüité des grammaires Les grammaires des « gros » langages sont de plus en plus complexes: C: 210 règles syntaxiques BNF ECMA Script: 270 règles syntaxiques BNF C# : 1200 règles syntaxiques BNF Ces grammaires sont aussi ambigües, avec des ambigüités difficiles à résoudre tout en gardant la grammaire lisible pour un être humain. Langage Nb états LALR(1) Conflits LR C 375 38 ECMA Script 513 C# 2021 457

Exemple de conflit type → NAME primary → NAME primary → ( exp ) Exemple de conflit LR classique dans les langages avec une syntaxe de type C : type → NAME primary → NAME primary → ( exp ) exp → primary exp → ( type ) exp ( NAME ▪ ) … exp → ( type ) exp → ( NAME ) exp exp → primary → ( exp ) → ( primary ) → ( NAME )

Méthode glr

Idée Générale Utiliser un automate LR. Lors d’un conflit, explorer les différentes options en parallèle. A tout moment dans la lecture de l’entrée, conserver l’ensemble des états accessibles de l’automate LR pour l’entrée lue.

Historique GLR Hilfinger 03 Rekers 92 Johnstone & Scott 02 06 GLR mode dans Bison Rekers 92 Compact Parse Forest Johnstone & Scott 02 06 Right Nulled parsing Farshi 91 Correct GLR Tomita 85 86 GLR parsing De Remer 71 SLR parsing De Remer 69 LALR parsing Knuth 65 LR parsing

Algorithmes GLR (1) Tomita Farshi Algorithme 0 : Algorithme pour le cas où la grammaire n’a pas de conflit. Algorithme 1: Fonctionne pour toutes les grammaires hors contexte sans règle vide. Algorithme 2: Fonctionne pour toutes les grammaires hors contexte qui n’ont pas de récursivité à gauche cachés (non terminaison). Algorithme 3: Même contrainte que 2 mais optimise la gestion de la pile. Algorithme 4: Même contrainte que 2 et construit l’arbre syntaxique abstrait. L’algorithme 2 est souvent considéré comme la référence. Farshi Modification de l’algorithme 1 pour le faire fonctionner pour toutes les grammaires hors contexte. Mais complexe et inefficace.

Algorithmes GLR (2) Scott & Johnstone Algorithme 1e: Modification de l’algorithme 1 pour traiter les règles vides mais ne supportant pas la récursivité à droite. Algorithme RNGLR: Algorithme final supportant toutes les grammaires hors contexte.

Exemple 1 type → NAME type → NAME . type primary → NAME primary → ( exp ) primary → primary . NAME exp → primary exp → ( type ) exp S → exp $ ( myvar ) ( string ) myvar ( nmspce.ClassA ) obj.field

. ) ) . . $ exp 1: S → exp ▪ $ 5: S → exp $ ▪ NAME S → ▪ exp $ exp → ▪ primary $ exp → ▪ ( type ) exp $ primary → ▪ NAME $ . primary → ▪ ( exp ) $ . primary → ▪ primary . NAME $ . exp 1: S → exp ▪ $ 5: S → exp $ ▪ NAME 4: primary → NAME ▪ $ . ) A: primary → primary . NAME ▪ $ . ) primary NAME NAME 2 exp → primary ▪ $ ) primary → primary ▪ . NAME $ . ) . 6: primary → primary . ▪ NAME $. ) ( ( primary primary B exp → ( type ) ▪ exp $ ) exp → ▪ primary $ ) exp → ▪ ( type ) exp $ ) primary → ▪ NAME $ . ) primary → ▪ ( exp ) $ . ) primary → ▪ primary . NAME $ . ) ( 3 exp → ( ▪ type ) exp $ ) primary → ( ▪ exp ) $ . ) type → ▪ NAME ) type → ▪ NAME . Type ) exp → ▪ primary ) exp → ▪ ( type ) exp ) primary → ▪ NAME . ) primary → ▪ ( exp ) . ) primary → ▪ primary . NAME . ) type 7: exp → ( type ▪ ) exp $ ) ) exp 8: exp → ( exp ▪ ) $ . ) exp ) C: exp → ( exp ) ▪ $. ) E: exp → ( type ) exp ▪ $ ) . NAME 10 type → NAME ▪ ) type → NAME ▪ . type ) NAME 9 type → NAME ▪ ) type → NAME ▪ . type ) primary → NAME ▪ . ) . D type → NAME . ▪ type ) type → ▪ NAME ) type → ▪ NAME . type ) type F: type → NAME . type ▪ )

GLR: Stack Splitting ▪ ( NAME ) $ 3 9 3 7 3 2 3 8 2 B C 7 8 3 1 5 1 3 9 3 7 3 2 3 8 2 B C 7 8 3 1 5 1 Effectuer toutes les réductions possibles Passer au token suivant

GLR: Graph-Structured Stack (1) ▪ ( NAME ) $ ( NAME 3 9 type ) 7 B primary 2 exp exp ) 8 C $ 1 5 U0 U1 U2 U3 U4

GLR: Graph-Structured Stack (2) ▪ ( NAME . NAME ) NAME $ . NAME 9 D 10 NAME type ( 3 F type NAME ) 7 B 4 primary primary . NAME 2 6 A 2 exp E primary 2 exp ) 8 C exp $ 1 5 U0 U1 U2 U3 U4 U5 U6 U7

Exemple 2 A → a X → a X X → A X X → S → X $ X $ 1: S → X ▪ $ S → ▪ X $ X → ▪ A X $ X → ▪ a X $ X → ▪ $ A → ▪ a $ a X $ 1: S → X ▪ $ 4: S → X $ ▪ a a A A 3 X → a ▪ X $ A → a ▪ $ a X → ▪ A X $ X → ▪ a X $ X → ▪ $ A → ▪ a $ a 2 X → A ▪ X $ X → ▪ A X $ X → ▪ a X $ X → ▪ $ A → ▪ a $ a a A X X 5: X → A X ▪ $ 6: X → a X ▪ $

GLR: Stack Head Sharing and ε-Reduction ▪ a a $ File de réduction ((3, 0), A) 2 ((3, 3), A) A A ((3, 2), A) 6 X ((3), X) 3 X a a X ((2), X) 3 ((6, 3, 3), X) a A 2 ((6, 3, 2), X) 5 ((5, 2, 3), X) X X ((5, 2, 2), X) 1 4 $ ((6, 3, 0), X) ((5, 2, 0), X) ((4, 1, 0), S)

GLR: Résumé Une réduction GLR est l’action de réduire la règle correspondante et appliquer immédiatement le shift du symbole de tête. Il faut rechercher dans le graph tous les chemins correspondant à la règle commençant au nœud courant de la pile.

Table GLR $ a X A r(X,4,0) p3 p1 p2 1 p4 2 p5 3 r(A,1,1) r(X,4,0) r(X,4,0) p3 p1 p2 1 p4 2 p5 3 r(A,1,1) r(X,4,0) r(A,1,1) p3 p6 4 acc 5 r(X,3,2) 6 r(X,2,2) Table GLR 1 A → a 2 X → a X 3 X → A X 4 X → 5 S → X $ S → ▪ X $ X → ▪ A X $ X → ▪ a X $ X → ▪ $ A → ▪ a $ a $ X 1: S → X ▪ $ 4: S → X $ ▪ a a A A 3 X → a ▪ X $ A → a ▪ $ a X → ▪ A X $ X → ▪ a X $ X → ▪ $ A → ▪ a $ a 2 X → A ▪ X $ X → ▪ A X $ X → ▪ a X $ X → ▪ $ A → ▪ a $ a a px = transition vers x r(V,r,l) = réduction de V avec la règle r de longueur l A X X 5: X → A X ▪ $ 6: X → a X ▪ $

GLR: Algorithme (DRIVER) Table GLR T heads rqueue DRIVER(input) start = nouveau nœud de la pile pour l’état 0 heads= {start} rqueue= {} POUR (tous les tokens t dans input) REDUCE(t) SHIFT(t) RETOURNE l’ensemble des état acceptant dans heads

GLR: Algorithme (REDUCE) REDUCE(t) POUR (tous les nœuds n représentant un état s dans heads) POUR (toutes les réductions r(X, r, l) dans T(s, t)) POUR (tous les chemins p de longueur l partant de n) Ajouter (p, X) à rqueue TANT QUE (rqueue n’est pas vide) Retirer le prochain (p, X) de rqueue REDUCE_PATH(p, X, t)

GLR: Algorithme (REDUCE_PATH) REDUCE_PATH(p, X, t) left = premier nœud dans le chemin p; o = état représenté par left SI (il existe un nœud d pour l’état s dans heads tel que T(o, X) contient p s) SI (il n’ existe pas de lien X de d vers left) Créer un lien link de d vers left REDUCE_LIMITED(link, t) SINON Créer le nœud d pour l’état s dans heads tel que T(o, X) contient p s

GLR: Algorithme (REDUCE_LIMITED) REDUCE_LIMITED(link, t) POUR (tous les nœuds n représentant un état s dans heads) POUR (toutes les réductions r(X, r, l) dans T(s, t)) POUR (tous les chemins p de longueur l partant de n et utilisant link) Ajouter (p, X) à rqueue

GLR: Algorithme (SHIFT) SHIFT(t) tails = heads; heads = {} POUR (tous les nœuds n représentant un état s dans tails) SI (T(s, t) contient p x) SI (heads contient un nœud d pour l’état x) Créer un lien de d vers n SINON Créer un nœud d pour l’état x dans heads

Arbre Syntaxique a a $ A → a X → a X X → A X X → S → X $ S S S S X $ X

Shared Packed Parse Forest Packed node Famille A A A => x1 … xm y1 … yp x1 … xm y1 … yp ai … aj ai … aj ai … aj

Exemple SPPF A → a X → a X X → A X X → S → X $ a a $ S X $ a A X a A X

GLR: Construction du SPPF, Méthode Tomita Principe: Chaque arc dans la pile correspond à exactement 1 nœud dans le SPPF Les arcs de la pile sont labellisés avec leur nœud respectif Lors d’un shift, créer un nœud SPPF pour le terminal Lors d’une réduction Si le nœud SPPF existe déjà, (pas d’arc ajouté dans la pile), ajouter la nouvelle famille Sinon, créer un nouveau nœud SPPF et une famille

GLR: Construction du SPPF, Méthode Tomita ▪ a a $ File de réduction SPPF S ((3, 0), A1) 2 ((3, 3), A2) A2 X5 $ A3 ((3, 2), A3) 6 X3 ((3), X1) 3 X1 a1 a2 X2 ((2), X2) A1 a1 3 ((6, 3, 3), X3) a2 A1 2 ((6, 3, 2), X4) X4 X3 5 ((5, 2, 3), X3) X4 X5 ((5, 2, 2), X4) 1 4 $ ((6, 3, 0), X5) X1 X2 ((5, 2, 0), X5) A3 A2 ((4, 1, 0), S) a2

SPPF Construit avec Tomita X5 $ S X $ A1 a1 X4 X3 a A X a A X X1 X2 A3 A2 a2

GLR: Construction du SPPF, Méthode Rekers Principe: Similaire à la méthode de Tomita, mais cherche à maximiser la réutilisation des nœuds du SPPF. Les nœuds du SPPF contiennent plus d’informations: 1 nœud = 1 triplet (x, i, j) x: symbole du nœud i: index de départ de la sous-chaîne d’entrée matchée par ce nœud j: index d’arrivé

GLR: Construction du SPPF, Méthode Rekers ▪ a a $ File de réduction SPPF ((3, 0), A) S, 0, 3 2 ((3, 3), A) A,1,2 A,1,2 ((3, 2), A) X, 0, 2 $, 2, 3 6 X,1,2 ((3), X) 3 X,2,2 a,0,1 a,1,2 X,2,2 ((2), X) 3 ((6, 3, 3), X) a,1,2 A,0,1 2 a, 0, 1 A, 0, 1 X, 1, 2 ((6, 3, 2), X) 5 ((5, 2, 3), X) X,1,2 X,0,2 ((5, 2, 2), X) 1 4 a, 1, 2 A, 1, 2 X, 2, 2 $ ((6, 3, 0), X) ((5, 2, 0), X) ((4, 1, 0), S)

SPPF Construit avec Rekers X, 0, 2 $, 2, 3 X $ a, 0, 1 A, 0, 1 X, 1, 2 a A X a A X a, 1, 2 A, 1, 2 X, 2, 2

Right-Nulled GLR Principe: Permettre la réduction d’une règle si la partie droite du corps de la règle peut être vide. Pour l’item A → α ▪ β, x appliquer la réduction de la règle A → α β pour le lookahead x si β ⇒ ε. *

Table RNGLR $ a X A r(X,4,0) p3 p1 p2 1 p4 2 r(X,4,0) r(X,3,1) p5 3 r(X,4,0) p3 p1 p2 1 p4 2 r(X,4,0) r(X,3,1) p5 3 r(A,1,1) r(X,4,0) r(X,2,1) r(A,1,1) p3 p6 4 acc 5 r(X,3,2) 6 r(X,2,2) Table RNGLR 1 A → a 2 X → a X 3 X → A X 4 X → 5 S → X $ S → ▪ X $ X → ▪ A X $ X → ▪ a X $ X → ▪ $ A → ▪ a $ a $ X 1: S → X ▪ $ 4: S → X $ ▪ a a A A 3 X → a ▪ X $ A → a ▪ $ a X → ▪ A X $ X → ▪ a X $ X → ▪ $ A → ▪ a $ a 2 X → A ▪ X $ X → ▪ A X $ X → ▪ a X $ X → ▪ $ A → ▪ a $ a a px = shift vers x r(V,r,l) = réduction de V avec la règle r de longueur l A X X 5: X → A X ▪ $ 6: X → a X ▪ $

RNGLR: Algorithme (PARSER) Table RNGLR T Entrée a1 … ad U0 … Ud R Q SI (d = 0) SI (T(0, $) accepte) => Retourne succès SINON => Retourne échec Créer un nœud v0 avec l’état 0 U0 = {v0}, R = {}, Q = {}, ad+1 = $ SI (T(0, a1) contient transition vers k) Ajouter (v0, k) à Q POUR (toutes les réduction d’une variable X en 0) Ajouter (v0, X, 0) à R POUR (i de 0 à d) TANT QUE (Ui n’est pas vide) TANT QUE (R n’est pas vide) => REDUCER(i) SHIFTER(i)

RNGLR: Algorithme (REDUCER) Prendre un triplet(v, X, m) dans R χ = ensemble des nœuds accessible depuis v avec un chemin de taille m – 1, ou 0 si m = 0 POUR (tous les u dans χ) k = l’état représenté par le nœud u l = état successeur de k par X SI (il existe w dans Ui représentant l) SI (il n’y a pas d’arc de w vers u) Créer un arc de w vers u SI (m != 0) POUR (toutes les réduction de B à l’état l sur ai+1 de longueur t != 0) Ajouter (u, B, t) à R SINON Créer un nœud w dans Ui pour l’état l et un arc de w vers u SI (T(l, ai+1) contient une transition vers h => Ajouter (w, h) à Q POUR (toutes les réduction de B à l’état l sur ai+1 de longueur 0) Ajouter (w, B, 0) à R SI (m != 0) POUR (toutes les réductions de B à l’état l sur ai+1 de longueur t != 0)

RNGLR: Algorithme (SHIFTER) SI (i = d) RETOURNE Q’ = {} TANT QUE (Q != {}) Prendre un couple (v, k) dans Q SI (il existe w dans Ui+1 représentant k) Créer un arc de w, vers v POUR (toutes les réductions de B à l’état k sur ai+2 de longueur t != 0) Ajouter (v, B, t) à R SINON Créer w dans Ui+1 représentant k et un arc de w vers v SI (T(k, ai+2) contient une transition vers h) Ajouter (w, h) à Q’ POUR (toutes les réductions de B à l’état k sur ai+2 de longueur 0) Ajouter (w, B, 0) à R Q = Q’

RNGLR: Construction du SPPF L’algorithme RNGLR utilise une version modifiée de la méthode de Rekers pour prendre en charge les réductions supplémentaires. Lors de la génération de la table, il faut également construire les bouts de SPPF correspondants à la partie droite des règles pouvant se dériver en ε.

Complexités Algorithme Pire cas Grammaire LR(1) Farshi O(n3) O(n) n = taille de l’input: Algorithme Pire cas Grammaire LR(1) Farshi O(n3) O(n) Algorithme 1e O(n2) RNGLR

outils

Bison http://www.gnu.org/software/bison/ C, C++, Java Elkhound https://en.wikipedia.org/wiki/Comparison_of_parser_generators Bison http://www.gnu.org/software/bison/ C, C++, Java Elkhound http://scottmcpeak.com/elkhound/ C++, OCaml Wormhole http://www.mightyheave.com/blog/ C, Python Hime Parser Generator http://himeparser.codeplex.com/ C#

ouverture

LR(*) : Cas d’utilisation type → NAME type → NAME . type primary → NAME primary → ( exp ) primary → primary . NAME exp → primary exp → ( type ) exp S → exp $

. ) ) . . $ exp 1: S → exp ▪ $ 5: S → exp $ ▪ NAME S → ▪ exp $ exp → ▪ primary $ exp → ▪ ( type ) exp $ primary → ▪ NAME $ . primary → ▪ ( exp ) $ . primary → ▪ primary . NAME $ . exp 1: S → exp ▪ $ 5: S → exp $ ▪ NAME 4: primary → NAME ▪ $ . ) A: primary → primary . NAME ▪ $ . ) primary NAME NAME 2 exp → primary ▪ $ ) primary → primary ▪ . NAME $ . ) . 6: primary → primary . ▪ NAME $. ) ( ( primary primary B exp → ( type ) ▪ exp $ ) exp → ▪ primary $ ) exp → ▪ ( type ) exp $ ) primary → ▪ NAME $ . ) primary → ▪ ( exp ) $ . ) primary → ▪ primary . NAME $ . ) ( 3 exp → ( ▪ type ) exp $ ) primary → ( ▪ exp ) $ . ) type → ▪ NAME ) type → ▪ NAME . Type ) exp → ▪ primary ) exp → ▪ ( type ) exp ) primary → ▪ NAME . ) primary → ▪ ( exp ) . ) primary → ▪ primary . NAME . ) type 7: exp → ( type ▪ ) exp $ ) ) exp 8: exp → ( exp ▪ ) $ . ) exp ) C: exp → ( exp ) ▪ $. ) E: exp → ( type ) exp ▪ $ ) . Construire un automate déterminant le bon item NAME 10 type → NAME ▪ ) type → NAME ▪ . type ) NAME 9 type → NAME ▪ ) type → NAME ▪ . type ) primary → NAME ▪ . ) . D type → NAME . ▪ type ) type → ▪ NAME ) type → ▪ NAME . type ) type F: type → NAME . type ▪ )

LR(*) : Automate de décision . ) ( NAME 1 3 6 7: Shift D . NAME $ $ . ) $ . ) ) 2 5: primary → NAME ▪ ( 4: type → NAME ▪

Bibliographie Scott McPeak. Elkhound: A Fast, Practical GLR Parser Generator. Report No. UCB/CSD-2-1214, University of California, Berkley, December 2002. Masaru Tomita. Efficient Parsing of Natural Language. Kluwer Academic, Boston, 1986. R. Nozohoor-Farshi. GLR Parsing for e-Grammar. In Generalized LR Parsing, M. Tomita, Kluwer Academic, 1991. Jan Rekers. Parser Generation for Interactive Environment. PhD thesis, University of Amsterdam, 1992. Elizabeth Scott and Adrian Johnstone. Right-Nulled GLR Parsers. ACM Transactions on Programming Languages and Systems. Volume 28 Issue 4, July 2006.