IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

algorithme pour parser LALR


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 111
    Par défaut algorithme pour parser LALR
    Bonjour,

    J'ai un niveau moyen en math et c'est sans doute pour ça que j'ai du mal à comprendre les formules mathématiques présentées dans la plupart des cours sur les parseurs LR, SLR et LR(1) et LALR.

    Mes difficultés viennent de la compréhension de la manière d'implémenter les méthodes premier et suivant dans les algorithmes LR(1) et LALR.

    Pour LR et SLR j'ai compris comment ça marche, et je pense pouvoir les implémenter. Mais pour implémenter LALR, j'arrive pas à comprendre l'algorithme qui est derrière.

    Avez-vous des exemples simples d'implémentations d'algorithme LALR.

    Merci d'avance de vos réponses.

  2. #2
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    En fait l'exemple le plus connu de parser LaLR est sans doute bison.

    Il construit la table First (premier) et Follow (suivant), puis construit un automate des items LR(0) pour en déduire l'automate LaLR correspondant (à quelques choses près ça se passe comme ça).

    Pour construire First, c'est pas très compliqué, il suffit de connaitre les règles et la recherche est quasiment récursive.

    Pour Follow, c'est presque pareil (il faut avoir calculé first avant tout ça).

    Si ça peut t'aider :

    http://www.cs.nuim.ie/~jpower/Course...ng/node48.html

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 111
    Par défaut
    merci pour ta réponse.

    Cependant, dans la page que tu m'as indiqué, Il y a une implémentation pour une analyse descendante. Ce que je cherche c'est pour l'analyse ascendante LALR. J'ai bien vu les explications sur premier et suivant qui m'ont aidé.

    Dans la pdf suivant:
    http://www-verimag.imag.fr/PEOPLE/La...syntaxique.pdf

    à la page 11, il y a un tableau sur LR(1). ce que je comprends pas c'est comment est calculé la colonne situations.

    Merci de m'éclairer.

  4. #4
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    Le document que je t'ai donné n'était là que pour first et follow .

    Concernant la construction de l'automate, c'est relativement simple,

    prends la grammaire qui est donnée :

    Z -> S $
    S -> C C
    C -> c C
    C -> d

    à l'état 0, tu mets l'axiome ainsi que toutes les règles qui peuvent être accessibles par l'axiome. Tu place un point pour indiquer là où tu es :

    Z -> .S $
    S -> .C C
    C -> .c C
    C -> .d

    Ensuite, la construction des autres états se fait en avançant la lecture. Imaginons que tu ais lu la règle S, tu vas créer un état 1 avec le contenu suivant :

    Z -> S. $

    Tu ne mets que celle ci parce d'une part, à partir de 0 et en ayant lu S il n'y a que cette règle, ensuite tu n'en rajoutes pas parce qu'àprès le . il y a $

    Maintenant, à partir de l'état 0 tu lis un C, ça te crée un état 2 :

    S -> C. C

    L'état n'est pas complet puisqu'il faut rajouter les règles que tu peux obtenir à partir de C (ie C -> c C et C -> d) l'état 2 devient donc :

    S -> C. C
    C -> .c C
    C -> .d

    Il suffit de répéter le processus jusqu'à ce que tous les cas aient été étudiés, ça n'est pas compliqué mais à faire à la main sur des gros automates on peut arriver à se planter, c'est pourquoi on utilise bison (qui ne fait quasiment que la même chose).

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 111
    Par défaut
    merci pour tes explications.

    Ce que tu as expliqué je l'ai compris, c'était pour la grammaire LR(0) et SLR(1).

    Mon problème de compréhension viens de 6 Construction d’un automate LR(1).
    Je ne comprends pas comment sont calculer les valeurs entre accolade dans la colonne situation.

    merci de ton aide.

  6. #6
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    Excuse moi, je n'avais pas suivi .

    En fait, ce que tu as entre accolade, c'est ce qui peut arriver après la réduction de la règle.

    Reprenons la grammaire :

    Z -> S $
    S -> C C
    C -> c C
    C -> d
    Dans l'état 0, tu y met tout ça et en plus tu rajoutes ce qui peux être lu après (les follow)

    Z -> S $ { Epsilon }
    S -> C C { $ }
    C -> c C { c ; d }
    C -> d { c ; d }

    Ensuite, tout au long de la construction, tu gardes les valeurs pour la construction de tes états.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [fileupload] problème pour parser la requete
    Par jaimepasteevy dans le forum Struts 1
    Réponses: 12
    Dernier message: 24/04/2008, 12h02
  2. [Html] HTMLPARSER pour parser du html en Java
    Par alexthomas dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 01/09/2005, 21h11
  3. Quel algorithme pour insertion d'objets "triés" da
    Par phplive dans le forum Langage
    Réponses: 3
    Dernier message: 04/08/2005, 09h27
  4. Algorithme pour trier trois nombres
    Par legosam dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 17/01/2005, 21h47
  5. Algorithme pour chiffres significatifs en Assembleur
    Par lutin2003 dans le forum Assembleur
    Réponses: 5
    Dernier message: 09/09/2004, 10h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo