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

Windows Discussion :

Grammaire LR sous flex/bison


Sujet :

Windows

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 19
    Points : 8
    Points
    8
    Par défaut Grammaire LR sous flex/bison
    hello
    je viens d'apprendre qlq notion de flex/bison, mon probléme se que je viens d'implementer une partie d'une grammaire arithmetique sous flex/bison et j'amerais que lors de l'insertion d'un mots, afficher si il est de la bonne forme ou erreur s'il ne l'est pas. ex: '1+2-1' accepté, '1+0/7' faut.

    syntaxique.y
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    26
    27
    #include <ctype.h>
    #include <stdio.h>
    void yyerror (char const * s);
    %}
    
    %start S
    %token NOMBRE OP_ANS OP_DIFF OP_OR
    %left OP_ANS OP_DIFF 
    %left OP_OR 
    %%
    
    S :Exp;
    Exp :Exp OP_ANS Exp | Exp OP_DIFF Exp | Exp OP_OR Exp | X;
    X:NOMBRE;
    %%
    void yyerror(char const * s)
    {
    	printf("Erreur syntaxique : %s\n",s);
    }
    
    
    int main(int argc, char ** argv)
    {
    	yyparse();
    	return 0;
    }
    et dans le lexical:
    NOMBRE [0-9]
    "+" {return OP_ANS;}
    "-" {return OP_DIFF;}
    "*" {return OP_OR;}

    merci d avance.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    1. Ça n'a rien à voir avec Windows, c'est du lex/yacc. Le forum "outils pour C et C++" devrait mieux t'aider.
    2. "Je ne comprends pas ta question, et je ne comprends pas le mot "aure".
    3. C'est sans doute du à ton orthographe déplorable.
    4. En quoi '1+0/7' est-il "faut" et pourquoi ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    1. Pas de MP pour ça, s'il te plait.
    2. Le problème du caractère '\' n'est pas qu'il ne fait pas partie de la grammaire, mais qu'il ne fait carrément pas partie du langage. C'est au niveau du fichier .l que tu devrais le rejeter, pas au niveau du fichier .y...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 19
    Points : 8
    Points
    8
    Par défaut
    bon, je crois que je n'ai pas bien expliqué, mon but est que avec cette grammaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    S->E
    E->E+E
    E->E-E
    E->E*E
    E->nb
    ou nb est un chiffre
    je veux faire un programme qui affiche lors de l'entre d'une opération soit accepté soit erreur(analyse LR)

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    yacc s'occupe de la grammaire et appelle yyerror() en cas d'erreur de syntaxe.
    Mais pour un caractère interdit par le langage, c'est au niveau de lex qu'il faut gueuler, pas au niveau de yacc...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    À moins que tu veuilles invoquer yacc sur chaque entrée utilisateur pour vérifier si l'entrée est compatible avec la grammaire ?
    Je suis désolé, je ne connais pas assez yacc pour cela...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 19
    Points : 8
    Points
    8
    Par défaut
    justement, c'est au niveau de yacc, mais je ne sais pas ou je dois modifier(inserer du code) pour afficher accepté si l'opération est correcte

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    La fonction yyparse() ne retourne-t-elle pas une valeur ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 19
    Points : 8
    Points
    8
    Par défaut
    oui, yyparse() return un entier que je pourrais récupérer

Discussions similaires

  1. Interfacer Flex/bison sous linux
    Par ilham_lol dans le forum Applications et environnements graphiques
    Réponses: 1
    Dernier message: 07/04/2008, 11h09
  2. [Flex / Bison] Problème de compilation sous Visual C++
    Par levalp dans le forum Générateurs de compilateur
    Réponses: 1
    Dernier message: 25/07/2006, 15h26
  3. Flex & Bison ... recherche de Doc
    Par Franck.H dans le forum Flex
    Réponses: 1
    Dernier message: 17/07/2005, 19h17
  4. [Flex & Bison] Problème avec yyFlexLexer
    Par kiroukou dans le forum Autres éditeurs
    Réponses: 15
    Dernier message: 26/05/2005, 13h05

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