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

Générateurs de compilateur Discussion :

[Yacc] Des messages d'erreur plus clairs ?


Sujet :

Générateurs de compilateur

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 119
    Points : 55
    Points
    55
    Par défaut [Yacc] Des messages d'erreur plus clairs ?
    Bonjour, je suis en train de bosser avec yacc, et lorsque j'exécute le code que j'ai fait, j'obtiens à chaque fois une syntax error...
    Pour l'instant je n'utilise pas de fichier lex à part, mais seulement une fonction yylex() basique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    yylex()
    {
    	int c;
    	while((c = getchar()) != ' ')
    	{
    		yylval = c;
    		return (c);
    	}
    }
    Ainsi qu'une fonction d'erreur trop basique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int yyerror(char *msg)
    {
    	printf("Erreur : %s\n", msg);
    	return 0;
    }

    Ce que je voudrais c'est avoir plus d'information sur les erreurs. J'ai vu qu'il existait un mode YYERROR_VERBOSE, et une variable yylineno, mais je n'ai pas réussi à les utiliser...
    J'aimerais bien pouvoir afficher une fonction du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int yyerror(char *msg)
    {
    	printf("Ligne %d - Erreur aux environs de %s : %s\n", yylineno, tokenErreur, msg);
    	return 0;
    }
    avec tokenErreur qui correspondrait au mot sur lequel l'erreur a été détectée...


    Quelqu'un pourrait m'aider ?


    Merci d'avance !!

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 36
    Points : 54
    Points
    54
    Par défaut
    Il faut absolument que tu fasses remonter l'information à partir du lexer, pour pouvoir utiliser ces variables, pour Bison++ (proche cousin de Yacc mais plus orienté C++) il faut rajouter une directive :

    %define LSP_NEEDED
    dans le fichier, qui spécifie que le parseur doit recuperer l'information de position à partir du lexer. Je ne connait pas la directive pour Yacc de base, mais ça doit être dans le man je pense.

  3. #3
    Expert éminent
    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 : 38
    Localisation : France, Vienne (Poitou Charente)

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

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Une idée pour mettre en oeuvre une gestion d'erreur serait sûrement de regarder ça :

    http://www.ibm.com/developerworks/li...BisonErrorHand

Discussions similaires

  1. [GUI] Gestion des messages d'erreurs
    Par agent007se dans le forum C++
    Réponses: 11
    Dernier message: 28/07/2006, 20h52
  2. gestion des messages d'erreurs
    Par keibenoit dans le forum Access
    Réponses: 2
    Dernier message: 31/05/2006, 14h49
  3. chercher la signification des messages d'erreurs
    Par von_magnus dans le forum Général Python
    Réponses: 8
    Dernier message: 22/05/2006, 09h58
  4. Réponses: 4
    Dernier message: 11/05/2006, 11h28
  5. Configurer la langue des messages d'erreur
    Par Invité dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 08/09/2005, 11h11

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