Sometimes it is necessary to have multiple interrelated lexers (for example, if
there is a high-level state machine that transitions between lexer modes). This
can be implemented using multiple connected |re2c| blocks. Another option is to
use `start conditions`_.

The implementation of connections between blocks depends on the target language.
In languages that have ``goto`` statement (such as C/C++ and Go) one can have
all blocks in one function, each of them prefixed with a label. Transition from
one block to another is a simple ``goto``.
In languages that do not have ``goto`` (such as Rust) it is necessary to use a
loop with a switch on a state variable, similar to the ``yystate`` loop/switch
generated by |re2c|, or else wrap each block in a function and use function calls.

The example below uses multiple blocks to parse binary, octal, decimal and
hexadecimal numbers. Each base has its own block. The initial block determines
base and dispatches to other blocks. Common configurations are defined in a
separate block at the beginning of the program; they are inherited by the other
blocks.
