Undefined Reference To yywrap

后端 未结 5 1453
后悔当初
后悔当初 2020-12-07 22:10

I have a simple \"language\" that I\'m using Flex(Lexical Analyzer), it\'s like this:

/* Just like UNIX wc */
%{
int chars = 0;
int words = 0;
int lines = 0;         


        
相关标签:
5条回答
  • 2020-12-07 22:18

    I prefer to define my own yywrap(). I'm compiling with C++, but the point should be obvious. If someone calls the compiler with multiple source files, I store them in a list or array, and then yywrap() is called at the end of each file to give you a chance to continue with a new file.

    int yywrap() {
       // open next reference or source file and start scanning
       if((yyin = compiler->getNextFile()) != NULL) {
          line = 0; // reset line counter for next source file
          return 0;
       }
       return 1;
    }
    
    0 讨论(0)
  • 2020-12-07 22:25

    As a note for followers, flex 2.6.3 has a bug where libfl.a "typically would" define yywrap but then doesn't in certain instances, so check if that's your version of flex, might be related to your problem:

    https://github.com/westes/flex/issues/154

    0 讨论(0)
  • 2020-12-07 22:29
    int yywrap(){return(1);}
    

    use this code at the end of the program..Simple

    0 讨论(0)
  • 2020-12-07 22:31

    flex doesn't always install with its development libraries (which is odd, as it is a development tool). Install the libraries, and life is better.

    On Redhat base systems:

    yum -y install flex-devel
    ./configure && make
    

    On Debian based systems

    sudo apt-get install libfl-dev
    
    0 讨论(0)
  • 2020-12-07 22:37

    The scanner calls this function on end of file, so you can point it to another file and continue scanning its contents. If you don't need this, use

    %option noyywrap
    

    in the scanner specification.

    Although disabling yywrap is certainly the best option, it may also be possible to link with -lfl to use the default yywrap() function in the library fl (i.e. libfl.a) provided by flex. Posix requires that library to be available with the linker flag -ll and the default OS X install only provides that name.

    0 讨论(0)
提交回复
热议问题