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

Langages fonctionnels Discussion :

Besoin d'aide en théorie des langages - First et Follow


Sujet :

Langages fonctionnels

  1. #1
    Membre habitué Avatar de touftouf57
    Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 174
    Points
    174
    Par défaut Besoin d'aide en théorie des langages - First et Follow
    Bonjour à tous,


    Je tiens à préciser aux modérateurs que j'ai recherché le meilleur endroit pour ce message et que honnêtement je ne voyais pas ou j'aurais pu le mettre. Si ce n'est pas le bon endroit, je m'en excuse platement d'avance.

    Revenons au sujet

    Quelqu'un pourrait-il m'expliquer comment calculer First et Follow d'une grammaire en théorie des langages?
    J'ai bien trouvé des pdf sur le web, mais j'obtiens des résultats différents sur la même grammaire.

    Bien entendu j'attaque le calcul des First et Follow en ayant supprimer les improductifs et les inaccessibles de la grammaire.

    Pour First: il faut bien ajouter tous les éléments terminaux (Vt) en début de production.
    Pour les Follow: on utilise les règles:

    • A --> alpha B beta ==> First(beta \ {epsilon} ) est inclut dans Follow(B)
    • A --> alpha B ==> Follow(A) est inclut dans Follow(B)
    • A --> alpha B beta avec epsilon appartenant à First(beta) ==> Follow(A) est inclut dans Follow(B)



    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    S --> c | ABS
    A --> B | a
    B --> b | epsilon
    moi je trouve:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    First(S)={a, b, c, epsilon}
    First(A)={a, b, epsilon}
    First(B)={b, epsilon}
    
    Follow(S)={epsilon}
    Follow(A)={a, b, c, epsilon}
    Follow(B)={a, b, c, epsilon}
    J'aimerais savoir si cela est correct.

    Si une âme qui maitrise le sujet pouvait me donner 3 ou 4 exercices que je les fasses seul puis qu'il les corrige, cela serait tout simplement génial pour moi et pour tous ceux qui peinent sur le sujet.

    Merci d'avance

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Points : 1 384
    Points
    1 384
    Par défaut
    Bonjour,

    Ce n'est plus très frais pour moi, mais j'arrive à ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    S → c | ABS
    A → B | a
    B → b | ε
    
    First(B) = {b, ε}
    First(A) = {a, b, ε}
    First(S) = {a, b, c}
    First(BS) = {a, b, c}         <-- utile dans le calcul de Follow(A)
    
    Follow(S) = {$}
    Follow(A) = {a, b, c}
    Follow(B) = {a, b, c}
    First(X) ne contiendra ε que si X peut produire la chaîne vide. Ici, ce n'est pas le cas de S, la chaîne vide n'est pas valide dans ce langage.

    ε n'apparaît jamais dans Follow(X). Tu peux d'ailleurs le voir avec les règles que tu as écrites: il n'y aucun moyen d'introduire un ε avec cet algorithme...
    Par contre l'ensemble Follow du symbole de départ (et éventuellement d'autres) contient toujours un marqueur de fin de chaîne ($). C'est ce qu'on m'a appris, en tout cas.
    Ici, il n'est pas inclus dans Follow(A) ni Follow(B) car un A ou un B sera toujours suivi d'une production non vide (de S).

  3. #3
    Membre habitué Avatar de touftouf57
    Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 174
    Points
    174
    Par défaut
    Merci dividee

    Tes explications m'ont inspiré. J'ai trouvé un site sur lequel on lui donne la grammaire et lui nous fait les calculs de First Follow et Nullable.
    C'est super intéressant pour faire des exos et s'assurer d'avoir bien compris la méthodologie.

    Voila le site
    http://www.marco-maniscalco.de/?p=246

    Il faut faire gaffe au format qu'on lui passe, il n’accepte pas les caractères mathématiques (+,*,(,),...). Il suffit de les remplacer par un caractère "standard", par exemple p pour plus, f pour fois, o pour parenthèse ouvrante....)
    Moi cela m'a bien servi, soit j'oubliais une règle, soit je la faisait à l'envers
    par exemple: A--> B. Le follow de B contient le follow de A et non l'inverse.

    Encore merci.

    Je suis de toute façon toujours prêt à m'améliorer dans cette matière.

  4. #4
    Membre éclairé Avatar de AuraHxC
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 652
    Points : 683
    Points
    683
    Par défaut
    ça me rappelle mes cours de compilation
    Si tu veux bien maîtriser et aller plus loin, je te conseil ce livre : Compilateurs : principes, techniques et outils (dit le Dragon Book). Les explications et les exemples sont vraiment excellent

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur logiciel
    Inscrit en
    Octobre 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 45
    Points : 64
    Points
    64
    Par défaut
    Merci beaucoup les gars, je travaille actuellement sur un logiciel de saisie de grammaire et de calcul de First. Cette partie m'a beaucoup aidé ! Je ne réfuserais pas d'autres conseils et guides !

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

Discussions similaires

  1. Besoin d'aide en théorie des langages - Eliminer les improductifs
    Par touftouf57 dans le forum Langages fonctionnels
    Réponses: 0
    Dernier message: 21/11/2011, 00h19
  2. Réponses: 45
    Dernier message: 04/05/2006, 01h10
  3. Réponses: 3
    Dernier message: 05/12/2005, 02h30
  4. Besoin d'aide pour utilisation des trie
    Par bluecurve dans le forum Langage
    Réponses: 4
    Dernier message: 29/11/2005, 08h04
  5. Besoin d'aide : afficher / cacher des layers
    Par mickeliette dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 21/10/2004, 11h03

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