There are a number of special directives which can be included within an action: `ECHO' copies yytext to the scanner's output. `BEGIN' followed by the name of a start condition places the scanner in the corresponding start condition (see below). `REJECT' directs the scanner to proceed on to the "second best" rule which matched the input (or a prefix of the input). The rule is chosen as described above in *Note Matching::, and `yytext' and `yyleng' set up appropriately. It may either be one which matched as much text as the originally chosen rule but came later in the `flex' input file, or one which matched less text. For example, the following will both count the words in the input and call the routine `special()' whenever `frob' is seen: int word_count = 0; %% frob special(); REJECT; [^ \t\n]+ ++word_count; Without the `REJECT', any occurrences of `frob' in the input would not be counted as words, since the scanner normally executes only one action per token. Multiple uses of `REJECT' are allowed, each one finding the next best choice to the currently active rule. For example, when the following scanner scans the token `abcd', it will write `abcdabcaba' to the output: .... `flex' scans your rule actions to determine whether you use the `REJECT' or `yymore()' features. The `REJECT' and `yymore' options are available to override its decision as to whether you use the options, either by setting them (e.g., `%option reject)' to indicate the feature is indeed used, or unsetting them to indicate it actually is not used (e.g., `%option noyymore)'. Another indication is: flex -s -Cf -B -8 -ocf-lex.c -Pcf_ cf-lex.l flex: REJECT cannot be used with -f or -F make: *** [cf-lex.c] Error 1 You can't use -Cf because flex think you are using REJECT in your scanner.
Sure, it is not elegant and it might cause bugs in the future (currently, I do not see any real bug), but your rename is not elegant either.
No, but it is the equivalent of renaming a variable from an ideal name to a less ideal name, not a big deal.
participants (1)
-
None