flex bug with |'d patterns and $.
    Greg Lee 
    lee at uhccux.UUCP
       
    Sun May 15 21:22:32 AEST 1988
    
    
  
When patterns associated with several start states are or'd with "|",
a "$" in a pattern may cause an incorrect match by a flex-generated
program.
Here is some sample data:
----------------input data-------------
	none
It's as easy as one, two, three.
	first
It's as easy as one, two, three.
	second
It's as easy as one, two, three.
--------------end data-----------------
And here is a program that works correctly when flex'd:
------------program that works---------
%s	FIRST SECOND
%%
<SECOND>"two" |
<FIRST>"one"  |
"three."		printf("<changed>");
"first"		printf("State 1"); BEGIN FIRST;
"second"	printf("State 2"); BEGIN SECOND;
%%
main() {  yylex();  }
----------end of program that works-----
>From the above input and the above program, comes this output:
-------output of program that works-----
	none
It's as easy as one, two, <changed>
	State 1
It's as easy as <changed>, two, <changed>
	State 2
It's as easy as one, <changed>, <changed>
----end of output of program that works-----
But change the program by adding "$" to the pattern for start
state 0:
---------program that doesn't work---------
%s	FIRST SECOND
%%
<SECOND>"two" |
<FIRST>"one"  |
"three."$		printf("<changed>");
"first"		printf("State 1"); BEGIN FIRST;
"second"	printf("State 2"); BEGIN SECOND;
%%
main() {  yylex();  }
----end of program that doesn't work-------
You'd think the output would be the same, but instead you get:
-----output of program that doesn't work---
	none
It's as easy as one, two, <changed>
	State 1
It's as easy as <changed>wo, <changed>
	State 2
It's as easy as one, <changed>hree.
--end of output of program that doesn't work---
(Lex doesn't understand this sort of construction at all.)
	Greg, lee at uhccux.uhcc.hawaii.edu
    
    
More information about the Comp.sources.bugs
mailing list