The b() declarations section of a b() grammar defines the symbols
used in formulating the grammar and the data types of semantic values. See
section ref(SYMBOLS).

All token type names (but not single-character literal tokens such as '+' and
'*') must be declared. If you need to specify which data type to use for the
semantic value (see section ref(MORETYPES)) of nonterminal symbols, these
symbols must be declared as well.

The first rule in the file by default specifies the em(start symbol). If you
want some other symbol to be the start symbol, you must use an explicit
tt(%start) directive (see section ref(LANGUAGES)).

In this section all of b()'s declarations are discussed. Some of the
declarations have already been mentioned, but several more are available. Some
declarations define how the grammar parses its input (like tt(%left,
%right)); other declarations are available, defining, e.g., the name of the
parsing function (by default tt(parse())), or the name(s) of the 
files generated by b().

In particular readers familiar with Bison (or Bison++) should read this
section thoroughly, since b()'s directives are more extensive and
different from the `declarations' offered by Bison, and the macros offered by
Bison++. 

Several directives expect file- or path-name arguments. File- or path-names
must be specified on the same line as the directive itself, and they start at
the first non-blank character following the directive. File- or path-names may
contain escape sequences (e.g., if you must: use `tt(\ )' to include a blank
in a filename) and continue until the first blank character
thereafter. Alternatively, file- or path-names may be surrounded by double
quotes (tt("...")) or pointed brackets (tt(<...>)). Pointed brackets
surrounding file- or path-names merely function to delimit filenames. They do
not refer to, e.g., bf(C++)'s include path. No escape sequences are required
for blanks within delimited file- or path-names.

Directives accepting a `filename' do not accept path names, i.e., they cannot
contain directory separators (tt(/)); options accepting a 'pathname' may
contain directory separators.


Sometimes directives have analogous command-line options. In those cases
command-line options take priority over directives.

Some directives may generate errors. This happens when an directive
conflicts with the contents of a file which bic() cannot modify (e.g., a
parser class header file exists, but doesn't define a name space, but a
tt(%namespace) directive was provided). 

To solve such errore the offending directive could be omitted, the existing
file could be removed, or the existing file could be hand-edited according to
the directive's specification.




