Here's another simple example:
int num_lines = 0, num_chars = 0; %% \n ++num_lines; ++num_chars; . ++num_chars; %% main() { yylex(); printf( "# of lines = %d, # of chars = %d\n", num_lines, num_chars ); }
This scanner counts the number of characters and the number
of lines in its input (it produces no output other than the
final report on the counts). The first line declares two
globals, num_lines
and num_chars
, which are accessible
both inside yylex
and in the main
routine declared after
the second `%%'. There are two rules, one which matches a
newline (`\n') and increments both the line count and the
character count, and one which matches any character other
than a newline (indicated by the `.' regular expression).