
Flc() enables a programmer to describe tokens with a set of regular
expressions.  Often a lexer scanner specification file uses multiple
`languages': regular expressions, code, comment, bf(C)-type (double quote
delimited) strings, etc..

For flexible handling of these sub-languages flc(), like flex, offers em(start
conditions), a.k.a. em(mini scanners). A start condition can be declared in
the definition section of the lexer file:
    verb(
%x  string
%%
...
    ) 
    A tt(%x) is used to declare em(exclusive start conditions). Following tt(%x) a list (no commas) of start condition names is
expected. Rules specified for exclusive start conditions only apply to that
particular mini scanner. It is also possible to define em(inclusive mini
scanner) using tt(%s). Rules not explicitly associated with a start condition
(or with the (default) start condition tt(StartCondition__::INITIAL) also
apply to inclusive mini scanners. 

A start condition is used  in the rules section of the lexical scanner
specification file as indicated in section ref(patterns). Here is a concrete example:
    verb(
%x string
%%

\"              {
                    more();
                    begin(StartCondition__::string);
                }

<string>{
    \"          {
                    begin(StartCondition__::INITIAL);
                    return Token::STRING;
                }
    \\.|.       more();
}
    )
    This tells flc() that the double quote starts (begins) the
tt(StartCondition__::string) mini scanner. The tt(string) mini scanner's rules
then define what happens to double quoted strings: all its characters are
collected, and eventually the string's content is returned by tt(matched()).

By default, scanners generated by flc() start in the
tt(StartCondition__::INITIAL) start condition. When encountering a double
quote, the scanner switches to the tt(StartCondition__::string) mini
scanner. Now, only the rules that are defined for the tt(string) mini scanner
are active. Once flc() encounters an unescaped double quote, it switches back
to the tt(StartCondition__::INITIAL) mini scanner and returns
tt(Token::STRING) to its called, indicating that it has seen a bf(C) string.

