The input file for the b() utility is a b() grammar file. Different
from Bison++ and Bison grammar files, b() grammar file consist of only
two sections. The general form of a b() grammar file is as follows:
        verb(
    Bisonc++ directives
    %%
    Grammar rules
        )
    Readers familiar with Bison may note that there is no em(C declaration
section) and no section to define em(Additional C code). With b() these
sections are superfluous since, due to the fact that a b() parser is a 
class, all additional code required for the parser's  implementation can be
incorporated into the parser class itself. Also, bf(C++) classes
normally only require declarations that can be defined in the classes' header
files, so also the `additional C code' section could be omitted from the
B() grammar file.

The `%%' is a punctuation that appears in every b() grammar file to
separate the two sections.

The b() directives section is used to declare the names of the terminal
and nonterminal symbols, and may also describe operator precedence and the
data types of semantic values of various symbols. Furthermore, this section is
also used to specify b() directives. These b() directives are used
to define, e.g., the name of the generated parser class and a namespace in
which the parser class is defined.  All b() directives are covered
in section ref(DIRECTIVES).


The grammar rules define how to construct em(nonterminal symbols) from their
parts.  The grammar rules section contains one or more b() grammar rules,
and nothing else. See section ref(RULES), covering the syntax of grammar
rules.

There must always be at least one grammar rule, and the first `%%' (which
precedes the grammar rules) may never be omitted even if it is the first thing
in the file.

B()'s grammar file may be split into several files. Each file may be given a
suggestive name. This allows quick identification of where a particular
section or rule is found, and improves readability of the designed
grammar. The link(%include)(INCLUDE)-directive (see section ref(INCLUDE)) can
be used to include a partial grammar specification file into another
specification file.
