(flex.info)Flex is not matching my patterns in the same order that I defined them.


Next: My actions are executing out of order or sometimes not at all. Prev: How do I skip huge chunks of input (tens of megabytes) while using flex? Up: FAQ
Enter node , (file) or (file)node

Flex is not matching my patterns in the same order that I defined them.
=======================================================================

'flex' picks the rule that matches the most text (i.e., the longest
possible input string).  This is because 'flex' uses an entirely
different matching technique ("deterministic finite automata") that
actually does all of the matching simultaneously, in parallel.  (Seems
impossible, but it's actually a fairly simple technique once you
understand the principles.)

   A side-effect of this parallel matching is that when the input
matches more than one rule, 'flex' scanners pick the rule that matched
the _most_ text.  This is explained further in the manual, in the
section Note: Matching.

   If you want 'flex' to choose a shorter match, then you can work
around this behavior by expanding your short rule to match more text,
then put back the extra:

     data_.*        yyless( 5 ); BEGIN BLOCKIDSTATE;

   Another fix would be to make the second rule active only during the
'<BLOCKIDSTATE>' start condition, and make that start condition
exclusive by declaring it with '%x' instead of '%s'.

   A final fix is to change the input language so that the ambiguity for
'data_' is removed, by adding characters to it that don't match the
identifier rule, or by removing characters (such as '_') from the
identifier rule so it no longer matches 'data_'.  (Of course, you might
also not have the option of changing the input language.)


automatically generated by info2www version 1.2.2.9