Syntax: quote(
    bf(%token) tt(terminal token(s)) nl()
    bf(%token) [ <type> ] tt(terminal token(s)) 
        )

The bf(%token) directive is used to define one or more symbolic terminal
tokens.  When multiple tokens are listed they must be separated by whitespace
or by commas. 

    The tt(<type>) specification is optional, and specifies the type of the
semantic value when a token specified to the right of a tt(<type>)
specification is received. The pointed arrows are part of the type
specification; the type itself must be a field of a tt(%union) specification
(see section ref(UNION)).

        b() converts symbolic tokens (including those defined by the
precedence directives (cf. section ref(PRECEDENCE))) into tt(Parser::Tokens)
enumeration values (where `tt(Parser)' is the name of the generated parser
class, see section ref(PARSERCLASS)). This allows the lexical scanner member
function tt(lex()) to return these token values by name directly, and it
allows externally defined lexical scanners (called by tt(lex())) to return
token values as tt(Parser::name).

    When an externally defined lexical scanner is used, it should include
tt(Parserbase.h), the parser's base class header file, in order to be able to
use the tt(Parser::Tokens) enumeration type.


    Although it em(is) possible to specify explicitly the numeric code for a
token type by appending an integer value in the field immediately following
the token name (as in tt(%token NUM 300)) this practice is deprecated. It is
generally best to let b() choose the numeric values for all token types. B()
automatically selects values that don't conflict with each other or with ASCII
character values.

