    The character-table translates input characters to ranges.  Each input
character (by default the 256 extended ascii-characters) is associated with a
character em(range). Character em(range) indices are then used as column
indices of the DFA tables (see sections ref(RANGES) and ref(DFA)).

    The function tt(Generator::charTable) defines in tt(d_out) the static
data member tt(size_t const ScannerBase::s_ranges[]). This array has 256
elements, so each character (cast to type tt(unsigned char)) can be used as
an index into this array, returning its range-number.

    In addition to real input characters, the scanner may return two pseudo
range values: tt(rangeOfBOL) is the range matching the special `character'
tt(BOL), returned when a begin-of-line is sensed, and tt(rangeOfEOF) which is
returned when EOF was sensed (e.g., when the tt(<<EOF>>) rule was used).
These BOL and EOF tokens must be returned by tt(nextChar) when BOL or EOF was
sensed, and the DFA's recognizes their ranges. The ranges tt(rangeEOF) and
tt(rangeBOL) are declared in the scanner class's data members section.

If DFA's don't recognize BOL or EOF characters then the default action is
performed: BOL is ignored and EOF results in switching back to the previous
stream or in returning token 0 (and ending the scanning-process).

The code generator adds code handing BOL and EOF to scanners using these
pseudo characters. The code is left out of the generated scanner if these
pseudo characters are not used.

Range tables are generated by tt(generator/chartable.cc).

    


