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 :

Undefined vtable : Bison++ Flex++


Sujet :

Générateurs de compilateur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 22
    Par défaut Undefined vtable : Bison++ Flex++
    Bonjour,

    Voilà plus d'une semaine que je m'arrache les cheveux, passe des nuits blanches et pire encore à cause d'un problème à la base très simple.

    Je souhaite réaliser un petit programme en C++ utilisant Flex++ et Bison++ sous cygwin.

    Je dispose donc d'un fichier main.l qui sera utilisé par flex++ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    %{
    #include "scanner.h"
    %}
     
    %%
     
    .* { ECHO; }
     
    %%
    d'un fichier main.y pour bison++ :
    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
     
    %{
     
    %}
     
    %name parser
    %token PLOP
     
    %%
     
    test : PLOP
    	 ;
     
    %%
     
    int main()
    {
    	parser monParser;
    	monParser.yyparse();
     
    	return 0;
    }

    Et voici mon Makefile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    all: yacc lex comp
     
    yacc: main.y
        bison++ -d -hscanner.h -oscanner.c main.y
     
    lex: main.l scanner.h
        flex++ main.l
     
    comp: scanner.h scanner.c lex.yy.c
        g++ -o cpyrr lex.yy.c scanner.c -lfl -ly
    Le problème vient du fait que je rencontre l'erreur suivante :

    /cygdrive/c/Users/BOB/AppData/Local/Temp/ccyHUZxZ.o:scanner.c.text+0x8): undefined reference to `vtable for parser'
    /cygdrive/c/Users/BOB/AppData/Local/Temp/ccyHUZxZ.o:scanner.c.text+0x16): undefined reference to `vtable for parser'
    collect2: ld returned 1 exit status
    Je souhaiterais pouvoir au minimum compiler et linker sans erreur et au mieux que le programme marche.
    Et il y a très peu de documentation sur Internet ou les Manpages concernant l'utilisation de bison++ ET flex++ sous cygwin. J'ai besoin de résoudre ce problème rapidement. J'ai besoin de ce programme pour l'utiliser dans un projet plus grand pour lequel le temps est compté.
    C'est dans l'urgence et à cours de solution que je m'en remet donc à votre aide.

    Merci.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 48
    Par défaut
    Bonjour,
    Es-tu sûr de bien compiler tous les fichiers .c ?
    J'ai peur que tu n'es pas tous les fichiers objets nécéssaire au link.
    Je ferais plutôt un makefile comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    all: yacc lex comp
     
    yacc: main.y
        bison++ -d -hscanner.h -oscanner.c main.y
     
    lex: main.l scanner.h
        flex++ main.l
     
    %.o : %.c
        g++ -o $@ $<
     
    comp: scanner.o lex.yy.o
        g++ -o cpyrr lex.yy.o scanner.o -lfl -ly

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 22
    Par défaut
    Bonjour,

    Ce makefile ce résoud pas le problème et n'arrive pas à compiler.
    J'ai l'impression qu'il faut mettre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    %.o : %.c
    	g++ -c $@ $<
    au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    %.o : %.c
    	g++ -o $@ $<
    Et sinon dans all, il n'y a aucun n'appel vers la partir du Makefile qui crée le .o
    Du coup des .o ne sont pas compilés et cela ne marche pas.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 48
    Par défaut
    Bizarre...
    As tu bien modifié le makefile ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    %.o : %.c
        g++ -o $@ $<
     
    comp: scanner.o lex.yy.o
        g++ -o cpyrr lex.yy.o scanner.o -lfl -ly
    Avec lex.yy.o et scanner.o ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 22
    Par défaut
    Oui j'ai modifié le Makefile exactement comme vous me l'avez indiqué.
    Et j'ai toujours exactement la même erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    /cygdrive/c/Users/BOB/AppData/Local/Temp/cc6Bpzku.o:scanner.c:(.text+0x8): undefined reference to `vtable for parse'
    /cygdrive/c/Users/BOB/AppData/Local/Temp/cc6Bpzku.o:scanner.c:(.text+0x16): undefined reference to `vtable for parse'
    collect2: ld returned 1 exit status
    make: *** [scanner.o] Error 1

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 48
    Par défaut
    Et dans l'autre sens ?
    Sans le code source c'est un peu difficile...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    %.o : %.c
        g++ -o $@ $<
     
    comp: scanner.o lex.yy.o
        g++ -o cpyrr scanner.o lex.yy.o -lfl -ly

Discussions similaires

  1. Réponses: 0
    Dernier message: 17/03/2012, 19h08
  2. erreur programmation bison\flex
    Par lucastof dans le forum Linux
    Réponses: 0
    Dernier message: 26/01/2011, 20h51
  3. tuto pour bison flex ou lex yacc
    Par Patnel dans le forum Générateurs de compilateur
    Réponses: 4
    Dernier message: 20/10/2010, 07h50
  4. GCC bison flex
    Par m3asmi dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 05/06/2010, 15h48
  5. Réponses: 1
    Dernier message: 09/12/2006, 10h13

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