Hi all! Here is a simple lexer which works with flex-2.5.2 but not with flex-2.5.4. Is this a bug in flex-2.5.4 or is 2.5.4 stricter, revealing a bug in my code?
This simple lexer replaces "foo" with "bar" (just to do something) and strips out comments delimited by '<' and '>'. (In real life I am looking for C-style comments, but single character delimiters yield a simpler example.) It works with flex-2.5.2 but with flex-2.5.4 it blows up following the input() call which returns EOF. There was a similar bug in flex-2.5.3, but the NEWS file that comes with 2.5.4 says: ************************************************************ Changes between release 2.5.4 (11Sep96) and release 2.5.3: - Fixed a bug introduced in 2.5.3 that blew it when a call to input() occurred at the end of an input file. [snip to end] ************************************************************ I have Debian 1.2 installed, giving me flex-2.5.2. I built flex-2.5.4 directly from the GNU package. Could someone running bo or hamm verify that this lexer breaks with the Debain flex-2.5.4 package, and could someone who knows a little more than I do about flex tell me if I am screwing something up. If my code looks OK I will submit a bug report. (I discovered this problem on an RS/6000 where I have an immediate need for a working flex. I could not locate flex-2.5.2 on the net, but was happy to find the source on the rex CD in my laptop.) Kirk Hilliard ************************************************************ $ flex --version flex version 2.5.2 $ ./flex-2.5.4 --version ./flex-2.5.4 version 2.5.4 $ cat foo.l %array %option noyywrap %% "<" { int c; while ( (c = input()) != '>' && c != EOF ) ; /* eat up text of comment */ if ( c == EOF ) printf( "\n" "error: EOF in comment\n" ); } foo printf("bar"); %% void main(int argc, char **argv) { YY_BUFFER_STATE ybsInputBuffer; while(--argc) { ybsInputBuffer = yy_scan_string(*++argv); yylex(); yy_delete_buffer(ybsInputBuffer); putchar('\n'); } } /* main */ $ flex foo.l $ gcc lex.yy.c $ ./a.out "foo<bleh>bar" "foo<bleh" "foo<bleh>bell" barbar bar error: EOF in comment barbell $ ./flex-2.5.4 foo.l $ gcc lex.yy.c $ ./a.out "foo<bleh>bar" "foo<bleh" "foo<bleh>bell" barbar bar error: EOF in comment input in flex scanner failed $ ************************************************************ -- TO UNSUBSCRIBE FROM THIS MAILING LIST: e-mail the word "unsubscribe" to [EMAIL PROTECTED] . Trouble? e-mail to [EMAIL PROTECTED] .