    The rules and actions of the grammar are specified as usual. The grammar
for our little calculator is given below. There are quite a few rules, but
they illustrate various features offered by tt(bisonc++). In particular, note
that no action block requires more than a single line of code. This keeps the
grammar simple, and therefore enhances its readability and
understandability. Even the rule defining the parser's proper termination (the
empty line in the tt(line) rule) uses a single member function called
tt(done). The implementation of that function is simple, but it is worth while
noting that it calls bf(Parser::ACCEPT), showing that bf(ACCEPT) can be called
indirectly from a production rule's action block. Here are the grammar's
production rules:
        verbinclude(//RULES bisonc++/parser/grammar)
    This grammar is used to implement a simple calculator in which integer and
real values can be negated, added, and multiplied and in which standard
priority rules can be overruled by parentheses. The grammar shows the use of
typed nonterminal symbols: tt(doubleExpr) is linked to real (double) values,
tt(intExpr) is linked to integer values. Precedence and type association is
defined in the parser's definition section.
