Re: [Flex-help] YY_DO_BEFORE_ACTION
flex is a tool for generating scanners
Brought to you by:
wlestes
From: Virgil P. <vir...@gm...> - 2009-02-04 09:44:15
|
Thanks guys, I eventually figured it out myself, by looking at the preprocessed file produced by cl.exe; my error was that I indirectly included the generated header file (zend_language_scanner.h), and this file was #undef-ing the YY_DO_BEFORE_ACTION macro ; maybe you can add a "check" in the generated scanner, to prevent this file from being included (e.g, start the generated .c file with "#define <prefix>HEADER_H", so that if the header is included, it will have no effect) - this may save others some trouble :) Regards, Virgil. On Wed, Feb 4, 2009 at 9:40 AM, Virgil Palanciuc <vir...@gm... > wrote: > Hello all, > > I'm using flex 2.5.35 on cygwin, and I compile with VS2008. I tried to do a > reentrant scanner using flex, and I'm getting "undeclared identifier" errors > for YY_NEW_FILE and YY_DO_BEFORE_ACTION; it should be worth to note that in > my lex specification, I do not use explicitly these macros... though I do > use yyless (which in turn is defined to use YY_DO_BEFORE_ACTION). It's > strange, because: > > 1. AFAICT, YY_DO_BEFORE_ACTION is defined as a macro in the generated file > (before being used), so this may be in fact a VS2008 issue > 2. YY_NEW_FILE's definition is commented-out (not by me!), so this seems to > be a flex issue. > > > Anybody can help with these issues? Have you encountered something > similar? I've seen a message with a problem with YY_NEW_FILE in flex 2.5.31, > and the advice was to "use an older version, because this is a know lex bug" > - hasn't it been fixed meanwhile? And if no, can you advise on what version > should be used? > > Thanks in advance, > Virgil > P.S. I'm using the following lex options: > %option reentrant stack bison-bridge noyywrap yylineno > and the command line is > >flex -Pzend -ozend_language_scanner.c > --header-file=zend_language_scanner.h zend_language_scanner.l > > YYNEW_FILE is used here: > > case EOB_ACT_END_OF_FILE: > { > if ( zendwrap(yyscanner ) ) > return EOF; > > if ( ! yyg->yy_did_buffer_switch_on_eof ) > YY_NEW_FILE; > > > and it's "definition" is > > /* Special action meaning "start processing a new file". */ > //#define YY_NEW_FILE zendrestart(yyin ,yyscanner ) > > > for YY_DO_BEFORE_ACTION, I would have to list the entire file.... > |