bisonc++ (6.09.00)

  * The manual shows the GPL V 3 (conditions for using bisonc++) which is now
    included in the source distribution (the file ./LICENCE).

  * End-of-line comment used in %polymorphic %type specifications is now 
    ignored.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 16 May 2024 09:21:26 +0200

bisonc++ (6.08.00)

  * The check for non-empty rules by the %prec directive was too strict.
    It now checks whether the rule's rhs is empty (cf. rules/rules.f:
    Rules::empty()).

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sun, 24 Mar 2024 12:23:03 +0100

bisonc++ (6.07.00)

  * 6.07 is only used by Debian.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Fri, 01 Mar 2024 11:03:44 +0100

bisonc++ (6.06.00)

  * The %prec directive requires a non-empty grammar rule.

  * When using %polymorphic the Tag_ enum defines a last tag END_TAG_, and the
    parserbase.h declares the (empty) class EndPolyType_. END_TAG_ and
    EndPolyType_ are used by the default constructor of the Meta_::SType
    class, avoiding undefined SType objects that caused segmentation faults
    when the %prec directive was used in an empty grammar rule.

  * States having SR and/or RR conflicts now count 1 SR conflict when multiple
    LA-tokens are removed from the same production rule, and count 1 RR
    conflict when an earlier rule is kept, dropping one or more later rules.
    However, when RR conflicts are observed, Bisonc++ will report which rules
    are dropped from which states.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sun, 15 Oct 2023 09:41:02 +0200

bisonc++ (6.05.00)

  * Changed 'typedef' declarations into 'using' declarations, also in
    generated parsers

  * Updated the documentation accordingly

  * Removed the superfluous flag -pthread from INSTALL.im

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 23 Mar 2023 10:01:08 +0100

bisonc++ (6.04.05)

  * Ready for libbobcat6

  * Added 'c++std' defining the c++ standard to use for
    compilation. Compilation commands also use -Werror

  * Repaired errors caused by warnings and -Werror

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sun, 11 Sep 2022 13:06:55 +0200

bisonc++ (6.04.04)

  * Removed -q from bisonc++'s build script

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sat, 26 Jun 2021 14:52:47 +0200

bisonc++ (6.04.03)

  * Added the descriptions of the %token-class, %token-namespace, and
    %token-path directives to the bisonc++input(7) man-page.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 18 Mar 2021 13:50:44 +0100

bisonc++ (6.04.02)

  * Bisonc++'s lexical scanner was generated by flexc++ 2.09.00

  * The .tar.gz extensions were removed from the man-pages' last lines.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sun, 21 Feb 2021 13:35:41 +0100

bisonc++ (6.04.01)

  * Bisonc++'s lexical scanner was generated by flexc++ 2.08.00

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Fri, 13 Nov 2020 10:43:27 +0100

bisonc++ (6.04.00)

  * Added options and directives 'token-class', 'token-namespace', and
    'token-path' creating a 'Tokens' class containing the symbolic tokens of
    the generated grammar on a separate file. Starting with this release
    bisonc++'s own source files refer to the file parser/tokens.h, and its
    Scanner class now refers to Tokens::tokenName instead of
    Parser::tokenName.

  * The manual and man-pages were updated accordingly.

  * Updated icmake/findall in line with the icmake(1) man-page

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Fri, 21 Mar 2020 15:19:20 +0100

bisonc++ (6.03.00)

  * Polymorphic assignment member functions are explicitly implemented instead
    of using generic template functions. This allows the compiler to perform
    implicit conversions. E.g., when using template assignment operators and a
    polymorphic type INT -> int is defined then the assignment $$ = 'a' is not
    compiled. But if the assignment operators are separately defined for each
    of the polymorphic types the compiler performs the char -> int conversion
    and the assignment is compiled.

  * Fixed a flaw in the overview of bisonc++ options: -L by default uses the
    bisonc++polymorphic.code skeleton, -M by default uses the
    bisonc++polymorphic skeleton.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 13 Jun 2019 12:32:16 +0200

bisonc++ (6.02.05)

  * To avoid type conversion ambiguities when comparing StateTypes flags
    operator& was defined for two StateType values (skeletons/bisonc++.cc)

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Fri, 01 Mar 2019 15:45:01 +0100

bisonc++ (6.02.04)

  * The function print() (skeletons/bisonc++.ih; also in generated parser.ih
    files) no longer calls print_(). The function print_() displays tokens if
    the --print-tokens option is specified. However, if that option is
    specified print_() is already called from nextToken_ in parse.cc.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 21 Jan 2019 10:37:30 +0100

bisonc++ (6.02.03)

  * Fixed an off-by-one line error reported by Alex Es.

  * Added #define GNU to INSTALL.im to select either g++ or clang++ (->
    clang++-7). Using g++ by default.

  * Several source files received minor changes to prevent clang++ warnings.

  * Added the directory iuo/ to contain files which are only internally used.
    (currently containing module.modulemap)

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sat, 10 Nov 2018 13:11:47 +0100

bisonc++ (6.02.02)

  * [[fallthrough]] requires a final semicolon (cf. C++ std 20, 10.6.5).
    Bisonc++'s internal and generated code is fixed accordingly.

  * Andreas Beckmann noticed two dangling symlinks below the
    bisonc++-doc/demos directory: fixed in this release. The files
    documentation/man/calculator/scanner/lexer and
    documentation/regression/calculator/scanner/lexer are now copies instead
    of one being a symlink to the other

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Wed, 03 Oct 2018 21:39:50 +0200

bisonc++ (6.02.01)

 * Migrated Bisonc++ from Github to Gitlab.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sat, 16 Jun 2018 07:22:42 +0200

bisonc++ (6.02.00)

 *  Starting with version 6.02.00 bisonc++ reserved identifiers no longer end
    in two underscore characters, but in one. This modification was necessary
    because according to the C++ standard identifiers having two or more
    consecutive underscore characters are reserved by the language. In
    practice this could require some minor modifications of existing source
    files using bisonc++'s facilities, most likely limited to changing
    Tokens__ into Tokens_ and changing Meta__ into Meta_.

    The complete list of affected names is:

    Enums:  DebugMode_, ErrorRecovery_, Return_, Tag_, Tokens_;

    Enum values: PARSE_ABORT_, PARSE_ACCEPT_, UNEXPECTED_TOKEN_, sizeofTag_;

    Type / namespace designators: Meta_, PI_, STYPE_;

    Member functions: clearin_, errorRecovery_, errorVerbose_, executeAction_,
        lex_, lookup_, nextCycle_, nextToken_, popToken_, pop_, print_,
        pushToken_, push_, recovery_, redoToken_, reduce_, savedToken_,
        shift_, stackSize_, startRecovery_, state_, token_, top_, vs_,

    Protected data members: d_acceptedTokens_, d_actionCases_, d_debug_,
        d_nErrors_, d_requiredTokens_, d_val_, idOfTag_, s_nErrors_

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Tue, 15 May 2018 20:58:45 +0200

bisonc++ (6.01.03)

  * To avoid lintian reports about missing examples the 'examples/'
    directories were renamed to 'demos/'

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 08 Mar 2018 21:00:12 +0100

bisonc++ (6.01.02)

  * Added C++-17 attributes [[maybe_notused]] to bisonc++'s code, and removed
    unused parameters unless required.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 08 Mar 2018 20:16:50 +0100

bisonc++ (6.01.01)

  * Fixed a missing destination for the link to the sources of the rpn
    calculator mentioned in Ch. 6 of the user manual.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Tue, 23 Jan 2018 12:59:39 +0100

bisonc++ (6.01.00)

  * Removed std:: in front of thread_local in generated code

  * Removed definitions of the Yodl tr-macro from .yo files: it is a
    predefined macro in Yodl 4.02.00, and is not used in de documentation.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sat, 20 Jan 2018 11:40:25 +0100

bisonc++ (6.00.00)

  * The generated code was rewritten. The protected interface of ParserBase
    and names of parse()-related members in Parser was modified. The names of
    all accessible members in parserbase.h and parser.h now have two trailing
    underscore characters.
    Predefined members in parser.ih no longer have trailing underscores, and
    can be redefined.
    The traditional error(char const *) member in fact never uses its argument
    (and bisonc++ only passed the default "Syntax error" argument). Its
    prototype now no longer defines a parameter.  Here's an overview of
    modified member names/signatures:

        --------------------------------------------------------
        Before 6.00.00               Starting with 6.00.00
        --------------------------------------------------------
        void error(char const *);    void error();

        void exceptionHandler__(...  void exceptionHandler(...

        void errorRecovery();        void errorRecovery__();
        void executeAction(int);     void executeAction__(int);
        void nextToken();            void nextToken__();
        --------------------------------------------------------

                                     added:
                                     ---------------------------
                                     void nextCycle__();
                                     ---------------------------
                                     removed:
                                     ---------------------------
                                     int lookup(bool);
                                     ---------------------------

    When re-generating parsers generated by bisonc++ before version 6.00.00,
    the signatures of the above functions in the file parser.h must be
    hand-modified to reflect the above changes. In addition, the
    implementations of error and exceptionHandler (default implementations
    were provided in parser.ih) must be adapted to their new signatures.

  * Added a warning to skeleton/binsonc++.h that until the #undef instruction
    Parser will be read as ParserBase.

  * With Polymorphic semantic values a tag mismatch is no considered fatal
    anymore if errors were already encountered. In that case the semantic
    value showing a tag mismatch is replaced by the default value of the
    semantic value of the expected polymorphic type.

  * Compilation of bisonc++ now starts with the construction of precompiled
    headers, significantly reducing the compilation time.

  * The state stack elements now consist of two values: the first
    element holds the state index, the second element the semantic value.

  * Added option and directive 'prompt': the generated parser shows a ?-prompt
    at each cycle when processing its input (which should not be provided on
    the standard input stream).

  * `thread-safe' can now also be specified as a directive. Previously it
    could only be specified as option.

  * Documentation was updated to reflect the above modifications

  * The build script now properly recognizes the 'strip' option

  * By default precompiled headers are used. The option -P (cf. log entry
    'bisonc++ (4.12.03)' below) is now opertational.
    Be advised that using -P removes all existing .ih.gch files from the
    directory containing 'main.ih' and from all its immediate subdirectories.

  * Removed the compiler option --std=c++14, since that's by now the default.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 18 May 2017 09:46:19 +0200

bisonc++ (5.03.00)

  * Added a declaration like 'Parser() = default' to the generated parser
    class header file.

  * Added an item about existing constructors and how to add additional
    constructors to parser classes generated by bisonc++

  * Corrected 'see also' references in the man-pages.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sat, 28 Jan 2017 15:12:16 +0100

bisonc++ (5.02.02)

  * Updated the description of the %prec directive.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Tue, 24 May 2016 16:33:48 +0530

bisonc++ (5.02.01)

  * Repaired an error in 'build install LOG...'.

  * Verified that 'selection' in 'build install selection' was correctly
    specified.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Wed, 18 May 2016 17:34:28 +0530

bisonc++ (5.02.00)

  * The polymorphic semantic values implementation uses a unique_ptr when
    transferring semantic values inside the geerated parser (including
    bisonc++'s own parser). See the documentation for details.

  * Added new option/directive stack-expansion defining the number of elements
    to add to a completely full semantic value stack.

  * Enlarging the semantic value stack does not require copying existing
    semantic values to the enlarged semantic value stack. Either resizing is
    used (when the capacity allows it) or the stored semantic values are moved
    to the enlarged stack, which is then swapped with the parser's semantic
    values stack.

  * More in general: the generated parser itself does not internally copy
    semantic values anymore. Copying is only used in the grammar's action
    blocks .

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Fri, 13 May 2016 13:46:18 +0530

bisonc++ (5.01.00)

  * Reimplemented polymorphic semantic values: the Meta__::Base class now is
    a virtual bease class.

  * Some templated operator& functions cannot handle two DebugMode__
    arguments. To prevent compilation errors in those cases a
    DebugMode__ operator&(DebugMode__, DebugMode__) function was added to
    the parserbase-skeleton.

  * The documentation erroneously referred to an undefined --action-cases
    option. Instead, --debug should be used and setDebug(Parser::ACTIONCASES)
    should be called. Code and documentation modified accordingly.

  * Added the script documentation/regression/runone to run a single
    regression test.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 05 May 2016 20:35:39 +0530

bisonc++ (5.00.01)

  * Fixed verbinsert calls: yodl 3.07.01 implements a macro 'verbinsert'
    rendering bisonc++'s own definition superfluous. The new definition
    requires 1 argument, and the old one 2, so the verbinsert calls were
    updated accordingly.

  * Alexander Sedov noticed that line numbers in the default actions were
    incorrect. Line numbers of default actions are now set to the line of the
    '|' or ';' character following the production rule receiving a default
    action block.

  * Updated the 'required' file.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 25 Apr 2016 15:47:27 +0530

bisonc++ (5.00.00)

  * Options/directives:

    The default `default-actions std' option/directive unconditionally adds $$
    = $1 action blocks to non-empty production rules w/o final action blocks

    Added option/directive tag-mismatches. and option
    --polymorphic-code-skeleton (-L).

    The formerly available option --no-default-action-return was renamed to
    default-actions (-d replacing -N), and can now also be used as a
    directive: %default-actions.

    Option --polymorphic-inline-skeleton (-m) is not used anymore and was
    removed.

    The option --include-only has been dropped (although it was mentioned in
    the usage info, it had in fact not been available for quite some time).


  * Implementation:

    Reimplemented handling polymorphic semantic values. shared pointers are no
    longer used. Details: see README.polymorphic-technical and parser/data.cc

    Type specifications in %type directives are verified. With %union the
    check is a simple check whether '\btype\b' is found in the %union spec.

    Mismatches between the types of nonterminals and the types of the first
    elements of their production rules previously resulted in a `type clash of
    default action' warning. Such mismatches are now considered errors.

    After parsing a grammar file only plain warning messages (i.e., without
    file/line info) are issued. Switching to such plain message is now done in
    Parser::cleanup, and no longer in various members of objects being used
    after calling Parser::cleanup().

    Comment (to end-of-line and C-style) can now also be used in polymorphic
    type specifications.

    Renamed the top-level bisonc++.cc and bisonc++.ih files to main.cc and
    main.ih, respectively.

    Using new lexical scanner, built by Flexc++ V2.04.00.


  * Grammar files:

    New dollar-notations ($$(...), _$$, _$i) are available, $<tag>$,
    $<tag>i are not available anymore.


  * API:

    New member: setDebug(DebugMode__), shows the action case
    just before executing the action block.

    The SType::data() member is now obsolete and has been removed.

    The semantic value type STYPE__ (the class Meta__::SType) member `valid()
    const' returns true if its member tag() returns a valid Tag__, otherwise
    it returns false.  False is returned for default constructed STYPE__
    values.  Previous implementations of STYPE__ implemented an undocumented
    member pointer (->) operator for calling get() and data(). This operator
    is no longer available. Instead of -> the member selector operator (.)
    should be used. E.g., stype.get<Tag__::INT>().

    The member SType::emplace (See the 4.13.00 log entry) was renamed to
    SType::assign: it doesn't emplace, but assign. The construction
    $$(-optional arguments-); can be used in action blocks to do
    $$.emplace<Tag of the rule's semantic value>(-optional arguments-);


  * Documentation:

    Bisonc++'s man-page and manual was updated.

    Added new man-pages bisonc++input.7, describing the organization of
    bisonc++'s grammar file(s), and bisonc++api.3, describing the API of the
    software generated by bisonc++


  * Regression tests:

    The extensive calculator regression test declared a RuleValue(unsigned)
    constructor, but implemented a RuleValue(size_t) constructor, which does
    not compile on amd64 architectures. The regression test was modified by
    changing the constructor's size_t parameter type into unsigned.

    All regression test grammar files contain the directive
        %default-actions quiet
    preventing warning messages about adding default $$ = $1 action blocks to
    production rules without action blocks.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Wed, 13 Apr 2016 11:03:54 +0530

bisonc++ (4.13.01)

  * slightly modified the icmake build scripts to prevent multiple inclusions
    of some of the installed files.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Fri, 18 Dec 2015 13:41:08 +0100

bisonc++ (4.13.00)

  * 'build install' supports an optional LOG: argument: the (relative or
    absolute) path to a installation log file. The environment variable
    BISONCPP is no longer used.

  * Updated the usage info displayed by `./build', altered the procedure to
    install the files at their final destinations.

  * Following a suggestion made by gendx the polymorphic class Semantic now
    defines a variadic template constructor, allowing Semantic objects
    (and thus SType::emplace) to be initialized (c.q. called) using any set of
    argument types that are supported by Semantic's DataType. Also, the
    (internally used) classes HasDefault and NoDefault are now superfluous and
    were removed (from skeletons/bisonc++polymorphic and
    skeletons/bisonc++polymorphic.inline).

  * Adapted the icmake build files to icmake 8.00.04

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sun, 13 Dec 2015 16:29:41 +0100

bisonc++ (4.12.03)

  * Kevin Brodsky observed that the installation scripts used 'chdir' rather
    than 'cd'. Fixed in this release.

  * Kevin Brodsky also observed that the combined size of all precompiled
    headers might exceed some disks capacities. The option -P was added to the
    ./build script to prevent the use of precompiled headers.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 05 Oct 2015 20:17:56 +0200

bisonc++ (4.12.02)

  * Refined the 'build uninstall' procedure

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sun, 04 Oct 2015 16:27:18 +0200

bisonc++ (4.12.01)

  * The implementation of the ./build script was improved.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 01 Oct 2015 18:41:45 +0200

bisonc++ (4.12.00)

  * Added 'build uninstall'. This command only works if, when calling one of
    the 'build install' alternatives and when calling 'build uninstall' the
    environment variable BISONCPP contains the (preferably absolute) filename
    of a file on which installed files and directories are logged.
    Note that 'build (dist)clean' does not remove the file pointed at by the
    BISONCPP environment variable, unless that file happpens to be in a
    directory removed by 'build (dist)clean'. See also the file INSTALL.
    Defining the BISONCPP environment variable as ~/.bisoncpp usually works
    well.

  * Guillaume  Endignoux offered several valuable suggestions:
    - Classes may not have default constructors, but may still be used if
      the default $$ = $1 action is not used. This can now be controlled using
      option --no-default-action-return (-N). When this option is specified
      the default $$ = $1 assignment of semantic values when returning from an
      action block isn't provided. When this option is specified then Bisonc++
      generates a warning for typed rules (non-terminals) whose action blocks
      do not provide an explicit $$ return value.
    - To assign a value to $$ a member `emplace' is provided, expecting the
      arguments of the type represented by $$.
    - In cases where a $x.get<Tag::NAME>() cannot return a reference to a
      value matching tt(Tag::NAME) and the associated type does not provide a
      default constructor this function throws an exception reporting
        STYPE::get<tag>: no default constructor available

  * Bisonc++'s documentation about using polymorphic values was modified, in
      particular the information about how the various polymorphic values can
      be assigned and retrieved.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Tue, 29 Sep 2015 11:48:18 +0200

bisonc++ (4.11.00)

  * Cleanup of the manual, in particular how lexical scanners can access the
    various values of polymorphic semantic value types (cf. section
    `Polymorphism and multiple semantic values'). The man-page was modified
    accordingly.

  * The manual-stamp file is no longer used. Calling 'build manual' now always
    (re)builds the manual. The same holds true for 'build man'.

  * The in version 4.08.00 removed const members were reinstalled, as they are
    required in situations where, e.g., a function defines an STYPE__ const *
    parameter.

  * Added 'build uninstall'. This command only works if, when calling one of
    the 'build install' alternatives and when calling 'build uninstall' the
    environment variable BISONCPP contains the (preferably absolute) filename
    of a file on which installed files and directories are logged.
    Note that 'build (dist)clean' does not remove the file pointed at by the
    BISONCPP environment variable, unless that file happpens to be in a
    directory removed by 'build (dist)clean'. See also the file INSTALL.
    Defining the BISONCPP environment variable as ~/.bisoncpp usually works
    well.

  * The INSTALL file was updated to the current state of affairs.

  * Removed the file parser/reader, which contained code generated by
    bison. It was nowhere used and I simply couldn't see why it was added to
    the parser's directory at all.

  * Removed the file 'distribution' from this directory's parent directory. It
    is not used, and was superseded by the file sourcetar (both files are
    Internal Use Only).

  * Removed the file documentation/bison.ps.org/bison.ps.gz: it harbored an
    compression error (already at the very first bisonc++ release), and the
    bison documentation in html format remains part of the bisonc++
    distribution.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sun, 30 Aug 2015 11:13:57 +0200

bisonc++ (4.10.01)

  * Production rules of non-terminal symbols that immediately follow dot
    positions of existing items are added as new (implied) items to that
    state's set of items. The --construction option no longer shows the
    indices of such newly added items as this information can easily be
    obtained from the provided construction output.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sun, 17 May 2015 16:54:13 +0200

bisonc++ (4.10.00)

  * FOLLOW sets are not used when analyzing LALR(1) grammars. The class
    FollowSet and all operations on follow sets were removed.

  * The LA set computation algorithm was reimplemented, a description of the
    new algorithm is included in the manual and in several source files, in
    particular state/determinelasets.cc. Both the state items' LA computation
    and the LA propagation algorithms were completely reimplemented.

  * Rules causing conflicts (i.e., conflict remaining after processing %left,
    %right, %nonassoc and/or %expect) as wel as the involved LA characters re
    briefly mentioned immediately following the SR/RR conflict-counts.

  * The class Symtab now uses an unordered_map rather than a mere (ordered)
    map.

  * The class-dependency diagram (README.class-setup) was updated to reflect
    the latest changes. Same for the file CLASSES which is used by the build
    script.

  * Added the file `required' listing the non-standard software that is
    required to build bisonc++ and its user guide / man-page

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sun, 17 May 2015 13:13:55 +0200

bisonc++ (4.09.02)

  * Wilko Kuiper reported an annoying bug in the skeleton lex.in, causing the
    compilation of parser.hh to fail. This release fixes that bug.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 28 Jul 2014 16:46:35 +0200

bisonc++ (4.09.01)

  * $#$#@ !! Forgot to update the help-info (bisonc++ --help) to reflect the
    new -D option. Now fixed.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sun, 11 May 2014 09:05:48 +0200

bisonc++ (4.09.00)

  * Added option --no-decoration (-D), suppressing the actions that are
    normally associated with matched rules.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sat, 10 May 2014 11:58:46 +0200

bisonc++ (4.08.01)

  * Members of the class `Generator' generating a substantial amount of code
    now read skeleton files instead of strings which are defined in these
    functions' bodies.

  * Added new skeleton files for the abovementioned functions. The names of
    these skeleton files are identical to the matching filenames in
    generator/, but use extensions `.in'

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 31 Mar 2014 11:45:41 +0200

bisonc++ (4.08.00)

  * std::shared_ptr doesn't slice: virtual ~Base() and dynamic_casts removed
    from the generated parserbase.h files

  * %polymorphicimpl removed from skeleton/bisonc++, matching files from
    Generator

  * The implementation of polymorphic semantic values was simplified.  Const
    members were removed from polymorphic semantic value classes; ReturnType
    get<Tag__>() const and ReturnType data<Tag__>() const are no longer
    required and were removed.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sun, 02 Mar 2014 11:51:38 +0100

bisonc++ (4.07.02)

  * Changed 'class SType into struct SType in skeletons/polymorphic, since all
    its members are public anyway.

  * Class header and class implementation header files are no longer
    overwritten at bisonc++ runs.

  * Running './build program' no longer by default uses -g (see INSTALL.im)

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 17 Feb 2014 13:43:16 +0100

bisonc++ (4.07.01)

  * Fixed segfaults (encountered with 4.07.00) caused by for-statement range
    specification errors.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sun, 16 Feb 2014 15:46:45 +0100

bisonc++ (4.07.00)

  * Generating files is prevented when errors in option/declaration
    specifications are encountered. All errors in option/declaration
    specifications (instead of just the first error that is encountered)
    are now reported.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Fri, 14 Feb 2014 14:53:33 +0100

bisonc++ (4.06.00)

  * Repaired buggy handling of some options/directives

  * Prevented spurious option warnings sometimes generated when options aren't
    specified

  * Action blocks associated with rules may contain raw string literals.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sun, 09 Feb 2014 11:31:14 +0100

bisonc++ (4.05.00)

  * Added the directive %scanner-class-name specifying the class name of the
    scanner to use in combination with the %scanner directive

  * re-installed the --namespace option (see the next item)

  * Warnings are issued when options or directives are specified wchich are
    ignored because the target file (e.g., parser.h, parser.hh) already
    exists. These warnings are not issued for parse.cc and parserbase.h, which
    are by default rewritten at each bisonc++ run. These warnings are issued
    for the `class-header', `class-name', `baseclass-header', `namespace',
    `scanner', `scanner-class-name' and `scanner-token-function'
    options/directives.

  * The --force-class-header and --force-implementation-header options were
    removed: 'rm ...' should be used instead.

  * man-page and manual updated

  * CLASSES class dependencies updated, icmconf's USE_ALL activated

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sat, 10 Aug 2013 10:16:17 +0200

bisonc++ (4.04.01)

  * Removed the possibility to specify path names for the --baseclass-header,
    --class-header, --implementation-header, and --parsefun-source options
    (and corresponding directives). Path names for generated files should be
    specified using the target-directory option or directive.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 27 May 2013 12:12:58 +0200

bisonc++ (4.04.00)

  * Repaired %target-directory not recognizing path-characters and not
    removing surrounding "-delimiters.

  * The --baseclass-header, --class-header, --implementation-header, and
    --parsefun-source options (and corresponding directives) now also accept
    path-specifications.

  * The man-page and manual have been updated accordingly.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sun, 26 May 2013 14:22:50 +0200

bisonc++ (4.03.00)

  * Bisonc++ before 4.03.00 failed to notice the --debug option. Now repaired.

  * Added the rpn example to the manual, and repaired typos in the manual.

  * Options/directives that can only accept file names (like
    --baseclass-header) no longer accept path names.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sun, 31 Mar 2013 11:25:49 +0200

bisonc++ (4.02.01)

  * Parser-class header files (e.g., Parser.h) and parser-class internal
    header files (e.g., Parser.hh) generated with bisonc++ < 4.02.00 require
    two hand-modifications when used in combination with bisonc++ >= 4.02.00:

    In Parser.h, just below the declaration
        void print__();
    add:
        void exceptionHandler__(std::exception const &exc);

    In Parser.hh, assuming the name of the generated class is `Parser', add
    the following member definition (if a namespace is used: within the
    namespace's scope):
        inline void Parser::exceptionHandler__(std::exception const &exc)
        {
            throw;  // re-implement to handle exceptions thrown by actions
        }
    This function may be re-implemented, see the man-page for further details.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 11 Mar 2013 16:50:26 +0100

bisonc++ (4.02.00)

  * Added member Parser::exceptionHandler(std::exception const &exc), handling
    std::exceptions thrown from the parser's action blocks.

  * The --namespace option was removed, since it does not affect once
    generated parser.h files, resulting in inconsistent namespace
    definitions.

  * Include guards of parser.h and parserbase.h include the namespace
    identifier, if %namespace has been used.

  * Provided print()'s implementation in bisonc++.hh with a correct
    class-prifix (was a fixed Parser::)

  * Textual corrections of the man-page and manual.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 07 Mar 2013 09:57:07 +0100

bisonc++ (4.01.02)

  * Bisonc++ returns 0 for options --help and --version

  * Catching Errno exceptions is replaced by catching std::exception
    exceptions

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 24 Jan 2013 08:14:59 +0100

bisonc++ (4.01.01)

  * The following #defines in INSTALL.im can be overruled by defining
    identically named environment variables:
        CXX      defines the name of the compiler to use. By default `g++'
        CXXFLAGS the options passed to the compiler.
                 By default `-Wall --std=c++0x -O2 -g'
        LDFLAGS  the options passed to the linker. By default no options are
                 passed to the linker.
        SKEL     the directory where the skeletons are stored

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sun, 15 Jul 2012 14:44:46 +0200

bisonc++ (4.01.00)

  * Repaired a long-existing bug due to which some S/R conflicts are solved by
    a reduce, where a shift should have been used. See
    README.states-and-conflicts for details.

  * Removed line-numbers from final warning/error messages

  * This version requires Bobcat >= 3.00.00

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 03 May 2012 21:21:47 +0200

bisonc++ (4.00.00)

  * Implemented the %polymorphic directive. Bisonc++ itself uses %polymorphic
    to implement its own polymorphic semantic values; man-page and manual
    extended with sections about polymorphic semantic values.

  * Implemented the %weak-tags directive. By default %polymorphic declares
    an `enum class Tag__', resulting in strongly typed polymorphic tags. If
    the traditional tag declaration is preferred, the %weak-tags directive can
    be specified in addition to %polymorphic, resulting in the declaration
    `enum Tag__'.

  * The previously used class spSemBase and derivatives (e.g., SemBase,
    Semantic) are now obsolete and the directories sembase and spsembase
    implementing these classes were removed.

  * The Parser's inline functions are all private and were moved to the
    parser's .hh file. This doesn't affect current implementations, as
    parser.h and parser.hh are only generated once, but newly generated
    parsers no longer define the Parser's inline members (error, print__, and
    lex) in parser.h but in parser.hh

  * @@ can be used (instead of d_loc__) to refer to a rule's location stack
    value.

  * The generated parser now uses unordered_maps instead of maps.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Fri, 13 Apr 2012 14:10:12 +0200

bisonc++ (3.01.00)

  * The `%print-tokens' directive was accidentally omitted from
    3.00.00. Repaired in this release.

  * Starting this release all release tags (using names that are identical to
    the version number, so for this release the tag is 3.01.00) are signed to
    allow authentication.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 27 Feb 2012 13:33:20 +0100

bisonc++ (3.00.00)

  * This release's scanner was built by flexc++

  * Option handling was separated from parsing, following the method also used
    in flexc++: a class Options holds and maintains directives and options
    that are used in multiple points in bisonc++'s sources. The Parser passes
    directive specifications to set-functions defined by the class Options.

  * The parser's semantic value handling recevied a complete overhaul. Unions
    are no longer used; instead a light-weight polymorphic base class in
    combination with some template meta programming was used to handle the
    semantic values. See sembase/sembase.h for a description of the appproach.

  * Options and directives were rationalized/standardized. See the man-page
    for details. Grammar specification files should no longer use %print, but
    should either use %print-tokens or %own-tokens (or the equivalent
    command-line options).

  * NOTE: Existing Parser class interfaces (i.e. parser.h) must be
    (hand-) modified by declaring a private member

        void print__();

    See the man-page and/or manual for details about print__.

  * All regression tests (in documentation/regression) are now expecting
    that flexc++ (>= 0.93.00) is available.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 20 Feb 2012 16:32:01 +0100

bisonc++ (2.09.04)

  * Replaced many for_each calls and lamda functions by range-based for-loops

  * Used g++-4.7

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Wed, 04 Jan 2012 12:26:01 +0100

bisonc++ (2.09.03)

  * Replaced all FnWrap* calls by lambda function calls

  * `build' script now recognizes CXXFLAGS and LDFLAGS for, resp. g++ and ld
     flags. Default values are set in INSTALL.im, as before.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 23 Jun 2011 10:06:02 +0200

bisonc++ (2.09.02)

  * Repaired flaws that emerged with g++ 4.6

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 02 May 2011 16:30:43 +0200

bisonc++ (2.9.1)

  * Documentation requires >= Yodl 3.00.0

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Wed, 10 Nov 2010 10:30:51 +0100

bisonc++ (2.9.0)

  * Changed Errno::what() call to Errno::why()

  * Removed dependencies on Msg, using Mstreams and Errno::open
    instead. Consequently, bisonc++ depends on at least Bobcat 2.9.0

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sat, 30 Oct 2010 22:05:30 +0200

bisonc++ (2.8.0)

  * Grammars having states consisting of items in which a reduction from a
    (series of) non-terminals is indicated have automatically a higher
    precedence than items in which a shift is required. Therefore, in these
    cases the shift/reduce conflict is solved by a reduce, rather than a
    shift.  See README.states-and-conflicts, srconflict/visitreduction.cc and
    the Bisonc++ manual, section 'Rule precedence' for examples and further
    information.  These grammars are now showing S/R conflicts, which remained
    undetected in earlier versions of Bisonc++. The example was brought to my
    attention by Ramanand Mandayam (thanks, Ramanand!).

  * To the set of regression tests another test was added containing a grammar
    having two S/R conflicts resulting from automatically selecting reductions
    rather than shifts. This test was named 'mandayam'.

  * Output generated by --verbose and --construction now shows in more detail
    how S/R conflicts are handled. The Bisonc++ manual also received an
    additional section explaining when reduces are used with certain S/R
    conflicts.

  * Previously the documentation stated that --construction writes the
    construction process to stdout, whereas it is written to the same file as
    used by --verbose. This is now repaired.

  * The meaning/use of the data members of all classes are now described at
    the data members in all the classes' header files.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sun, 08 Aug 2010 15:15:46 +0200


bisonc++ (2.7.0)

  * $-characters appearing in strings or character constants in action blocks
    no longer cause warnings about incorrect or negative $-indices

  * Repaired incorrect interpretation of '{' and '}' character constants
    in action blocks.

  * Added option --print (directive %print) displaying tokens received by the
    scanner used by the generated parser.

  * Added option --scanner-token-function (directive %scanner-token-function)
    specifying the name of the function called from the generated parser's
    lex() function.

  * The build script received an additional option: `build parser' can be used
    to force the reconstruction of parser/parse.cc and parser/parserbase.h

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Wed, 31 Mar 2010 15:54:52 +0200

bisonc++ (2.6.0)

  * Reorganized Bisonc++'s classes: public inheritance changed to private
    where possible, all virtual members now private. The parser->parserbase
    inheritance remains as-is (public) because parserbase essentially is a
    element of parser, defining types and the token-enum that must also be
    available to the users of the generated parser class. The alternative,
    defining types and tokens in the parser class would make it impossible to
    adapt the tokens without rewriting the parser class. Another alternative,
    defining the types and enum in a separate namespace imposes further
    restrictions on the users of the parser class, which is also considered
    undesirable. Public inheritance is now only used by NonTerminal, Terminal,
    and Symbol as these classes override virtual functions either in Symbol or
    in Element and the derived classes must all be usable where their base
    classes are expected (in accordance with the LSP).

bisonc++ (2.5.1)

  * Token values written to parserbase.h are (again) suppressed when their
    values exceed the previous token's value by 1. All values were shown
    because writer/insertToken erroneously didn't receive a size_t
    &lastTokenValue anymore, but a size_t lastTokenValue.

  * Removed Terminal's operator<< from the namespace std

  * Now using initializer_lists to initialize static data (generator/data.cc
    main.cc)

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 08 Mar 2010 20:51:22 +0100

bisonc++ (2.5.0)

  * Renamed parser/spec/aux to parser/spec/auxiliary to avoid file/device
    confusion on some systems

  * Removed inclusions of superfluous bobcat/fnwrap1c headers

  * Replaced all FnWrap1c calls by FnWrap::unary

  * Added check for d_currentRule == 0 in rules/addproduction. d_currentRule
    could be a 0-pointer, in which case addproduction shouldn't do anything.
    d_currentRule is a 0-pointer in, e.g. the erroneous grammar submitted
    by Justin Madru about which he rightfully remarked that even though
    erroneous bisonc++ shouldn't crash on it. This is his stripped-down
    grammar:
        %token X x_list
        %%
        x_list:
            x_list X
        |
            X
        ;

bisonc++ (2.4.8)

  * Recompilation using option --std=c++0x, required because of Bobcat's use
    of C++0x syntax.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sat, 05 Sep 2009 17:25:56 +0200

bisonc++ (2.4.7)

  * Streams processed by an `#include' directive were not properly closed,
    resulting in a memory leak. The Scanner's code was modified to plug that
    leak.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Wed, 06 May 2009 09:36:02 +0200

bisonc++ (2.4.6)

  * Changed the build script to allow finer control over construction and
    installation of parts of the package

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Tue, 24 Mar 2009 19:16:10 +0100

bisonc++ (2.4.5)

  * DateTime (generator/filter.cc) adapted due to change of Bobcat's DateTime
    interface

bisonc++ (2.4.4)

  * typed terminal tokens (as used in, e.g., %type<fieldname>) were not
    included in the parserbase's Tokens__ enum since their symbol type is left
    at UNDETERMINED. tokens used in type lists can also be non-terminals, in
    which case their symbol type is changed accordingly. In 2.4.4. a symbol is
    selected for inclusion in the Tokens__ enum if it's a terminal token but
    also if it's a symbol that has been used in the grammar although its
    symbol type is left at UNDETERMINED (in generator/selectsymbolic.cc)

bisonc++ (2.4.3)

  * repaired segfault generated when the name of a non-existing file was
    passed to bisonc++

bisonc++ (2.4.2)

  * scanner/yylex.cc removed from the distribution: flex will create a new
    Scanner::yylex() member at each new distribution to prevent
    incompatibilities between earlier yylex.cc and later FlexLexer.h files.

bisonc++ (2.4.1)

  * Implemented minor changes related to requirements imposed upon the code by
    g++ 4.3.

  * Generator/filter now uses the Datetime::rfc2822(), implmented since Bobcat
    1.17.1

bisonc++ (2.4.0)

  * Fixed missing entry in multiple reduction state tables:

    State tables of multiple reduction states (e.g., REQ_RED states) were
    constructed incompletely. E.g., for the grammar:

        expr:
            name
        |
            ident '(' ')'
        |
            NR
        ;
        name:
            IDENT
        ;
        ident:
            IDENT
        ;

    the state following IDENT is either a reduce to 'name' or 'ident': the
    corresponding table was filled incompletely, using the number of the next
    token where the next token for the reduction should have been be
    mentioned, and an empty field in the table itself.

    NOTE that in these situations d_val__ MUST be set by the scanner, as the
    reduction requires another token, and only once that token is available
    the reduction to, e.g., 'ident' can be performed, but at that time
    YYText() has already gone and is inaccessible in an action block like:

        ident:
            IDENT
            {
                $$ = d_scanner.YYText();
            }
        ;

  * The error recovery procedure in skeleton's bisonc++.cc skeleton file was
    reimplemented. As a side effect the internally used function
    'ParserBase::checkEOF()' could be removed.

  * #line directives in rule action blocks now correctly identify the grammar
    specification file in which the action block was defined.

  * Extra empty line at the end of state transition tables were removed

  * Files generated by Bisonc++ report Bisonc++'s version and the file
    construction time (conform RFC 2822) as C++ comment in their first line.

bisonc++ (2.3.1)

  * Fixed character returned in escaped constants. E.g., at '\'' the \ was
    returned instead of the ' character.

  * Implemented the default assignment of $1 to $$ at the begin of action
    rules. This required another Block member: saveDollar1(), called for
    nested blocks. The function saveDollar1() prepends the code to save $$
    from $1 of the rule in which the nested block was defined. In
    share/bisonc++ the function executeAction() no longer saves the semantic
    value's TOS value as d_val__ but the rule's $1 value.

  * To allow extraction of the archive under Cygwin (Windows) the directory
    parser/spec/aux was renamed to parser/spec/auxiliary (as Windows can't
    handle files or directories named 'aux').

bisonc++ (2.3.0)

  * Dallas A. Clement uncovered a bug in handling semantic values, due to
    which semantic values of tokens returned by some grammars got lost. He
    intended to use a polymorphic semantic value class to pass different kinds
    of semantic values over from the scanner to the parser. This approach was
    the foundation of another regression test example, now added to the set of
    regression tests and described in Bisonc++'s manual. It will also appear
    as an annotated example in the C++ Annotations. Thanks, Dallas, for
    uncovering and reporting that bug.

  * Dallas also noted that mid-rule actions could not refer to semantic values
    of rule components that had already been seen by Bisonc++. This has been
    fixed in this release. Dallas, thanks again!

  * Earlier versions of Bisonc++ used the class OM (Output Mode) to define the
    way objects like (Non)Terminal tokens and (Non)Kernel Items were inserted
    into ostreams. Using OM did not result in the clarity of design I
    originally had in mind. OM is now removed, and instead relevant classes
    support a function `inserter()' allowing sources to specify (passing
    `inserter()' a pointer to a member function) what kind of insertion they
    need. For the Terminal class there is also a manipulator allowing sources
    to insert a insertion-member directly into the ostream.

  * New option: --insert-stype
    The generated parser will now also display semantic values when %debug is
    specified if the new command-line option --insert-stype is provided. Of
    course, in this case users should make sure that the semantic value is
    actually insertable (e.g., by providing an overloaded operator
    std::ostream &std::operator<<(std::ostream &out, STYPE__ const &semVal).

bisonc++ (2.2.0)

  * Repaired a bug in parsing action blocks of rules appearing only in
    versions 2.1.0 and 2.0.0. In these versions compound statements defined
    within the action blocks result in bisonc++ erroneously reporting an error
    caused by bisonc++'s scanner (scanner/lexer) interpreting the closing
    curly brace as the end of the action block.

  * Repaired a flaw in terminal/terminal1.cc causing a segfault when using
    bisonc++ compiled with g++ 4.2.1

bisonc++ (2.1.0)

  * In the skeleton bisonc++.cc $insert 4 staticdata is followed by $insert
    namespace-open. Since `staticdata' defined s_out if %debug is requested,
    it could be defined outside of the user's namespace (defined by
    %namespace). Repaired by defining s_out after (if applicable) opening the
    namespace (in Generator::namespaceOpen(), called from $insert
    namespace-open).

bisonc++ (2.0.0)

  * Rebuilt Bisonc++'s parser and scanner, creating Bisonc++'s parser from the
    file parser/grammar. Initially Bisonc++ 1.6.1 was used to create the
    Parser class header and parsing function. Once Bisonc++ 2.0.0 was
    available, the grammar file was split into various subfiles (see below)
    and Bisonc++ 2.0.0 was used to implement its own parsing function.  As a
    direct consequence of using a grammar rather than a hand-implemented
    parsing function quite a few members of the Parser and Scanner class were
    reimplemented, new members were added and some could be removed.  Parts of
    other classes (Rules, Block) were significantly modified as well.

  * Minor hand-modifications may be necessary with previously designed code
    using identifiers that are defined by the parser class generated by
    Bisonc++. The following names have changed:

    -------------------------------------------------------------------------
    old name                        change into new name:           Protected
    -------------------------------------------------------------------------
    Parser::LTYPE                   Parser::LTYPE__
    Parser::STYPE                   Parser::STYPE__
    Parser::Tokens                  Parser::Tokens__

    Parser::DEFAULT_RECOVERY_MODE   Parser::DEFAULT_RECOVERY_MODE__ Yes
    Parser::ErrorRecovery           Parser::ErrorRecovery__         Yes
    Parser::Return                  Parser::Return__                Yes
    Parser::UNEXPECTED_TOKEN        Parser::UNEXPECTED_TOKEN__      Yes
    Parser::d_debug                 Parser::d_debug__               Yes
    Parser::d_loc                   Parser::d_loc__                 Yes
    Parser::d_lsp                   Parser::d_lsp__                 Yes
    Parser::d_nErrors               Parser::d_nErrors__             Yes
    Parser::d_nextToken             Parser::d_nextToken__           Yes
    Parser::d_state                 Parser::d_state__               Yes
    Parser::d_token                 Parser::d_token__               Yes
    Parser::d_val                   Parser::d_val__                 Yes
    Parser::d_vsp                   Parser::d_vsp__                 Yes
    -------------------------------------------------------------------------

    The symbols marked `Protected' can only occur in classes that were derived
    from the parser class generated by Bisonc++. Unless you derived a class
    from the parser class generated by Bisonc++ these changes should not
    affect your code. The first three symbols may have been used in other
    classes as well (for an example now using LTYPE__ and STYPE__ see the file
    documentation/regression/location/scanner/scanner.h).

    Note that the only required modification in all these cases is to append
    two underscores to the previously defined identifiers.

  * The grammar file may now be split into several grammar specification
    files. The directive %include may be specified to include grammar files
    into other grammar files (much like the way C/C++'s #include preprocessor
    directive operates). Starting point of the grammar recognized by Bisonc++
    2.0.0 is the file parser/grammar, using subfiles in the parser/spec
    directory. The file README.parser documents the grammar specification
    files in some detail.

  * Previous releases implicitly enforced several restrictions on the
    identifiers used for the grammar's tokens. These restrictions resulted
    from name collisions with names defined in the parser's base class. While
    the restrictions cannot be completely resolved without giving up backward
    compatibility, they can be relieved greatly. Tokens cannot be ABORT,
    ACCEPT, ERROR, clearin, debug, error and setDebug. Furthermore, tokens
    should not end in two underscores (__).

  * Implemented various new options and directives:

    - the option --analyze-only, merely analyzing the provided grammar, not
      writing any source or header files.

    - the option --error-verbose as well as the directive %error-verbose
      dumping the state-stack when a syntactic error is reported.

    - the option --include-only, catenating all grammar files in their order
      of processing to the standard output stream (and terminating).

    - the option --max-inclusion-depth, defining the maximum number of nested
      grammar files (default: 10).

    - the option --required-tokens (also available as the directive
      %required-tokens). Error recovery is now configurable in the sense that
      a configurable number of tokens must have been successfully processed
      before new error messages can be generated (see
      documentation/manual/error/intro.yo)

    - the option --scanner-debug writing the contents and locations (in
      scanner/lexer) of matched regular expresions as well as the names/values
      of returned tokens to the standard error stream.

    - the option --skeleton-directory. This option overrides the default
      location of the director containing the skeleton files. In turn it is
      overridden by the options specifying specific skeleton files (e.g.,
      --baseclass-skeleton).

    - the option --thread-safe. If specified, Bisonc++ will generate code that
      is thread-safe. I.e., no static data will be modified by the parse()
      function. As a consequence, all static data in the file containing the
      parse() function are defined as const. Manpage and manual adapted
      accordingly.

  * As a convenience, filenames in the grammar files may optionally be
    surrounded by double quotes ("...")  or pointed brackets <...>. Delimiting
    pointed brackets are only kept with the %scanner and %baseclass-preinclude
    directives, in all other cases they are replaced by double quotes and a
    warning is displayed.

  * Token Handling in the generated parsing member function was improved: the
    share/bisonc++.cc skeleton now defines pushToken__() and popToken__() as
    the standard interface to the tiny two-element token stack. The member
    nextToken() was redesigned.

  * Documentation was extended and updated. The Bisonc++ manual now contains an
    extensive description of the grammar-analysis process as implemented in
    Bisonc++ (see documentation/manual/algorith.yo). All new options and
    directives, as well as the token-name requirements are covered by the
    man-page and by the manual.

  * Various other repairs and cosmetic changes:
    - The --construction option as implemented in Bisonc++ 1.6.1 showed the
      FIRST set where the FOLLOW set was labeled. Repaired: now the FOLLOW set
      is actually displayed.
    - The --show-filenames option now shows `(not requested)' as default for
      d_verboseName instead of `-' if no --verbose was requested.
    - The --construction option no longer displays the `LA expanded' value
      from the state's descriptions since it's always 0
    - The --class-name option was not actually mentioned in the set of
      recognized long options: repaired.
    - The %type directive now allows you to specify semantic type associations
      of terminal tokens as well.
    - The %token, %left, %right and %nonassoc directives now all use the same
      syntax (as they always should have). These directives all define
      terminal tokens
    - Added `rebuild' command to the `build' script to recreate the parser

bisonc++ (1.6.1)

  * Changed the error recovery procedure preventing stack underflows with
    unrecoverable input errors.

  * Added protected parser base class member checkEOF(), terminating the
    parse() member's activities (man-page adapted accordingly).

  * Changed small support member functions in the share/bisonc++.cc skeleton
    file into inline members, some were moved to share/bisonc++base.h

  * The skeleton files now use `\@' as baseclass-flag rather than `@'. The
    baseclass-flag is now defined as a static data member in Generator. This
    change prevents the `@' in e-mail addresses from being changed into the
    parser's class name.

  * Removed the class Support since it is now covered by Bobcat's (1.15.0)
    default implementation of FBB::TableSupport

bisonc++ (1.6.0)

  * NOTE: THE PROTOTYPE OF THE PARSER'S lookup() FUNCTION CHANGED. IT IS NOW:
    int lookup(bool recovery);
    OLD parser.h HEADER FILES CAN BE REUSED AFTER ADDING THE PARAMETER
    bool recovery

  * Segfaults were caused by some grammars due to an erroneous index in
    (formerly state/setitems.cc) state/adddependents.cc, where idx,
    representing an index in d_itemVector was used to index an element in
    d_nextVector (for which the index variable `nextIdx' should have been
    used. Repaired.

  * For some unknown reason, priority and association rules were not
    implemented in earlier versions of bisonc++. Consequently priority and
    association values of rules were left at their default values. This was
    repaired by defining the function Rules::updatePrecedences(), which
    defines priorities of productions as either their values assigned by a
    %prec specification or as the priority of their first terminal token.

  * The accepting State no longer has default reductions. It doesn't need them
    since EOF__ in those states terminates the parser. Accepting States
    now have search sentinels, allowing the parser to do proper error
    recovery.

  * The implementation of the shift/reduce algorithm and error handling in
    share/bisonc++.cc was modified, now using bitflags indicating
    state-requirements (e.g., requiring a token, having a default reduction,
    having an `error' continuation, etc.). Also, the functions nextToken() and
    lookup() were reimplemented.

  * The share/bisonc++.cc parser function skeleton's initial comment was
    improved.

  * The function state/state1.cc contained the superfluous intialization
    d_itemVector(0). The line has been removed.

  * The class `Rules' lacked facilities to detect properly whether a grammar
    file without rules was specified. Solved by defining a Rules constructor
    and an additional member indicating whether there weree any rules at all.

  * In grammar files, rules must now be terminated by a semicolon. Previous
    versions did not explicitly check this. Also, improperly formed
    character-tokens are now recognized as errors.

  * In correspondence with bison, the default verbose grammar output file is
    now called <grammar filename>.output rather than <parsing function base
    name>.output

  * The description of the State information shown when --construction is
    specified was clarified.

  * The debug output generated by parse.cc was improved.

  * The setDebug() member is now a public member. Manual page and
    documentation changed accordingly.

  * The description of the setItems() algorithm in state/setItems was
    improved.

  * The `build' script was given an additional command (installprog) to
    install just the program and the skeletons.

  * Added several missing headers fixing gcc/g++ 4.3 problems

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 09 Apr 2007 14:54:46 +0200

bisonc++ (1.5.3)

  * Using Bobcat's FnWrap* classes instead of Bobcat's Wrap* classes

  * The INSTALL.im file has received a (by default commented out)
    #define PROFILE. By activating this define, bisonc++ is compiled with
    support for the gprof profiler. This define should not be activated for
    production versions of bisonc++

  * Not released.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sat, 17 Feb 2007 20:44:19 +0100

bisonc++ (1.5.2)

  * It turns out that the modification in 1.5.1. is not necessary. The
    compilation problems mentioned there were the result of a presumed small
    g++ compiler bug. A workaround is implemented in Bobcat 1.12.1, preventing
    the bug from occurring. In fact, this release has the same contents as
    release 1.5.0. Release 1.5.1. can be considered obsolete. It is available
    from the svn repository only.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 30 Nov 2006 17:05:09 +0100

bisonc++ (1.5.1)

  * Building the usage support program failed because of implied dependencies
    on the bobcat library, resulting from superfluously including bobcat.h in
    the documentation/usage/usage.cc program source.  This is solved by
    setting bisonc++.h's include guard identifier just before inserting
    ../../usage.cc in the documentation/usage/usage.cc program source.

bisonc++ (1.5.0)

  * The algorithms for lookahead propagation and detection of grammars not
    deriving sentences have been redesigned and rewritten. The previously used
    algorithm propagating lookaheads suffered from spurious reduce/reduce
    conflicts for some grammars (e.g., see the one in
    documentation/regression/icmake1). Also, 1.4.0 choked on a (fairly)
    complex grammar like the one used by icmake V 7.00. These problems are now
    solved, and comparable problems should no longer occur.

    The layout and organization of the output has been changed as well. Now
    there are basically three forms of verbose output: No verbose output, in
    which the file *.output is not written, standard verbose output, in which
    an overview of the essential parts of the grammar is written to the file
    *.output, and --construction, in which case all lookaheadsets, as well as
    the first and follow sets are written to *.output.

    Multiple new classes were added, and some previously existing classes were
    removed. See the file README.class-setup and the file CLASSES for details.

    The man-page and manual were adapted on minor points.

bisonc++ (1.4.0)

  * It turned out that in the previous versions, S/R conflicts were also
    produced for empty default reductions. Now detectSR() checks whether there
    is one empty reduction. If so, no S/R conflicts are possible in that
    state. Instead a SHIFT (which is already the default solution of a S/R
    conflict) is performed in these situations. So, now for all
    tokens for which a known continuation state exist the known continuation
    state is selected; for all other tokens the default reduction (reducing to
    its associated state) is selected. See state/detectsr.cc for details.

    Since the above change also represents a change of algorithm, the
    subversion was incremented. I added a sub-subversion to have a separate
    level of version-numbers for minor modifications.

    The documentation/regression/run script did not properly return to its
    initial working directory, and it called a test that no longer
    existed. Both errors have been repaired.

    Some leftover references to the Academic Free License were replaced by
    references to the GPL.

    The previously used scripts below make/ are obsolete and were removed from
    this and future distributions. Icmake should be used instead, for which a
    top-level script (build) and support scripts in the ./icmake/ directory
    are available. Icmake is available on a great many architectures. See the
    file INSTALL (and INSTALL.im, replacing the previously used INSTALL.cf)
    for further details.

    All plain `unsigned' variables were changed to `size_t'

bisonc++ (1.03-1) unstable; urgency=low

  * License changed to the GNU GENERAL PUBLIC LICENSE. See the file
    `copyright'.

    According to the manual page, the debug-output generated by parsers
    created using the --debug option should be user-controllable through the
    `setDebug()' member. These feature is now actually implemented.

    The usage info now correctly shows the -V flag as a synonym for the
    --verbose option.

    From now on this file will contain the `upstream' changes. The Debian
    related changes are in changelog.Debian.gz

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Wed, 19 Jul 2006 13:12:39 +0200

bisonc++ (1.02) unstable; urgency=low

  * Following suggestions made by George Danchev, this version was compiled by
    the unstable's g++ compiler (version >= 4.1), which unveiled several flaws
    in the library's class header files. These flaws were removed (i.e.,
    repaired).

    In order to facilitate compiler selection, the compiler to use is defined
    in the INSTALL.cf file.

    The debian control-files (i.e., all files under the debian subdirectory)
    were removed from the source distribution, which is now also named in
    accordance with the Debian policy. A diff.gz file was added.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu,  6 Jul 2006 12:41:43 +0200

bisonc++ (1.01) unstable; urgency=low

  * Synchronized the version back to numbers-only, adapted the debian
    standards and the required bobcat library in the debian/control file.
    No implementation changes as compared to the previous version, but I felt
    the need to join various sub-sub-versions back to just one standard
    version.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 26 Jun 2006 12:11:15 +0200

bisonc++ (1.00a) unstable; urgency=low

  * Debian's Linda and lintian errors, warnings and notes processed. No
    messages are generated by linda and lintian in this version.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sun, 28 May 2006 14:26:03 +0200

bisonc++ (1.00) unstable; urgency=low

  * Bisonc++ Version 1.00 has changed markedly as compared to its predecessor,
    bisonc++ 0.98.510.

    The main reason for upgrading to 1.00 following a year of testing the 0.98
    series is that the grammar analysis and lookahead propagation algorithms
    as used in bisonc++ 0.98.510 were either too cumbersome and contained some
    unfortunate errors.

    The errors were discovered during my 2005-2006 C++ class, where some
    students produced grammars which were simple, but were incorrectly
    analyzed by bisonc++ 0.98. It turned out that the lookahead (LA)
    propagation contained several flaws. Furthermore, a plain and simple bug
    assigned the last-used priority to terminal tokens appearing literally in
    the grammar (i.e., without explicitly defining them in a %token or
    comparable directive). A simple, but potentially very confusing bug.

    At the cosmetic level, the information produced with the --construction
    option was modified, aiming at better legibility of the construction
    process.

    The `examples' directory was reduced in size, moving most examples to a
    new directory `regression', which now contains a script `run' that can be
    used to try each of the examples below the `regression' directory. Some of
    the examples call `bison', so in order to run those examples `bison' must
    be installed as well. It usually is.

    A minor backward IN-compatibility results from a change in prototype of
    some private parser member functions. This should only affect exising
    Parser.h header files. Simply replacing the `support functions for
    parse()' section shown at the end of the header file by the following
    lines should make your header file up-to-date again. Note that bisonc++
    does not by itself rewrite Parser.h to prevent undoing any modifications
    you may have implemented in the parser-class header file:

        // support functions for parse():
            void executeAction(int ruleNr);
            void errorRecovery();
            int lookup();
            void nextToken();

    Please note that this version depends on bobcat 1.7.1 or beyond. If you
    compile bobcat yourself, then you may want to know that bobcat's Milter
    and Xpointer classes are not used by bisonc++, so they could optionally be
    left out of bobcat's compilation.


 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sun,  7 May 2006 15:10:05 +0200

bisonc++ (0.98.510) unstable; urgency=low

  * When no %union has been declared, no $$ warnings are issued anymore about
    non-exisiting types;
    When no %union has been declared a $<type>i or $<type>$ warning is issued
    about non-exisiting types.

    The State table (in the generated parse.cc file) containing `PARSE_ACCEPT'
    was created with a `REDUCE' indication for grammars whose start symbol's
    production rules were non-repetitive. This was repaired in
    state/writestatearray.cc by setting the (positive) non-reduce indication
    for states using shifts and/or the accept state.

    The logic in writeStateArray() was modifed: a separate ShiftReduce::Status
    variable is now used to store the possible actions: SHIFT, REDUCE or
    ACCEPT. The tables show `SHIFTS' if a state uses shifts; `ACCEPTS' if a
    state contains PARSE_ACCEPT; and `REDUCE' otherwise.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Tue, 21 Mar 2006 20:47:49 +0100

bisonc++ (0.98.500) unstable; urgency=low

  * Handling of $<type>i and $<type>$ repaired, added the
    %negative-dollar-indices directive.

    $<type> specifications were not properly parsed. Instead of $<type>i or
    $<type>$ constructions like $i<type> and $$<type> were parsed, which is
    contrary to the manual's specification. The function parsing the $-values
    is defined in parser/handledollar.cc.

    The handling of negative $-indices is improved. Negative $-indices are
    used when synthesizing attributes. In that context, $0 is useful, since it
    refers to the nonterminal matched before the current rule is starting to
    be used, allowing rules like `vardef: typename varlist ' where `varlist'
    inherits the type specification defined at `typename'.

    In most situations indices are positive. Therefore bisonc++ will warn when
    zero or non-positive $-indices are seen. The %negative-dollar-indices
    directive may be used to suppress these warnings.

    $-indices exceeding the number of elements continue to cause an error.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sun,  5 Mar 2006 13:59:08 +0100

bisonc++ (0.98.402) unstable; urgency=low

  * links against bobcat 1.6.0, using bobcat's new Arg:: interface

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 26 Dec 2005 19:25:42 +0100

bisonc++ (0.98.400) unstable; urgency=low

  * state/writestatearray.cc adds {} around individual union values to allow
    warningless compilation of the generated parse.cc file by g++-4.0.

    bisonc++ is now itself too compiled by g++-4.0.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Fri, 18 Nov 2005 22:46:06 +0100

bisonc++ (0.98.007) unstable; urgency=low

  * Added a README.flex file giving some background information about the
    provided implementation of the lexical scanner (bisonc++/scanner/yylex.cc)

    Modified the compilation scripts: bisconc++/flex/FlexLexer.h is now
    included by default. This FlexLexer.h file is expected by
    bisonc++/scanner/yylex.cc and by the Scanner class.

    Simplified some compilation scripts.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Fri,  9 Sep 2005 11:42:24 +0200

bisonc++ (0.98.006) unstable; urgency=low

  * Removed the dependency on `icmake'. No change of functionality
    See the instructions in the `INSTALL' file when you want to compile and
    install `bisonc++' yourself, rather than using the binary (.deb)
    distribution.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sat,  3 Sep 2005 17:42:29 +0200

bisonc++ (0.98.005) unstable; urgency=low

  * Removed the classes Arg, Errno, Msg and Wrap1, using the Bobcat library's
    versions of these classes from now on. No feature-changes.

    Added minor modifications to the `build' script.

    Annoying Error: The function `ItemSets::deriveAction()' did not recognize
    the `ACCEPT' action, so some (most ?) grammars could not be properly
    recognized. I applied a quick hack: if an action isn't `shift' or
    `reduce', it can be `accept', resulting in acceptance of the grammar. This
    solves the actual problem, but I'll have to insepct this in a bit more
    detail. For now, it should work ok.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 22 Aug 2005 13:05:28 +0200

bisonc++ (0.98.004) unstable; urgency=low

  * When new lookahead set elements are added to existing states,
    d_recheckState in itemsets/lookaheads.cc (ItemSets::checkLookaheads()) was
    reassigned to the state index whose lookaheadset was enlarged. However, if
    that happened for existing state `i' and then, during the same
    state-inspection, for state `j' where j > i, then the recheck would start
    at `j' rather than `i'. This problem was solved by giving d_recheckState
    only a lower value than its current value.

    With R/R conflicts involving `ACCEPT' reductions (with, e.g., `S_$: S .'),
    ACCEPT is selected as the chosen alternative. See State::setReduce()
    (state/setreduce.cc). Since this matches with the `first reduction rule'
    principle, it should be ok.

    %stype specifications may consist of multiple elements: the remainder of
    the line beyond %stype is interpreted as the type definition. The
    specification should (therefore) not contain comment or other characters
    that are not part of the actual type definition. The man-page is adapted
    accordingly. Same holds true for the %ltype directive

    Added a check whether the grammar derives a sentence
    (itemsets/derivesentence.cc). If not, a fatal error is issued. This
    happens at the end of the program's actions, and at this point files
    etc. have already been generated. They are kept rather than removed for
    further reference. Grammars not deriving sentences should probably not be
    used.

    The original Bison documentation has been converted to a Bisonc++ user
    guide. Furthermore, a html-converted manual page is now available under
    /usr/share/doc/bisonc++/man

    The `calculator' example used in the man-page is now under
    /usr/share/doc/bisonc++/man/calculator

    Bisonc++ is distributed under the Academic Free License, see the file
    COPYING in /usr/share/doc/bisonc++

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sun,  7 Aug 2005 13:49:07 +0200

bisonc++ (0.98.003) unstable; urgency=low

  * Incomplete default State constructor now explicitly defined, prevents
    the incidental erroneous rapporting of conflicts for some states.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 26 May 2005 07:21:20 +0200

bisonc++ (0.98.002) unstable; urgency=low

  * The Wrap1 configurable unary predicate template class replaces various
    other templates (WrapStatic, Wrap, Pred1Wrap). No further usage or
    implementation changes/modifications.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sun, 22 May 2005 15:27:19 +0200

bisonc++ (0.98.001) unstable; urgency=low

  * This is a complete rewrite of the former bisonc++ (0.91) version. The
    program bisonc++ is now a C++ program, producing C++ sources, using the
    algorithm for creating LALR-1 grammars as outlined by Aho, Sethi and
    Ullman's (1986) `Dragon' book. The release number will remain 0.98 for a
    while, and 0.98.001 holds the initial package, new style. Also see the
    man-page, since some things have been changed (augmented) since the
    previous version. No dramatic changes in the grammar specification method:
    Bisonc++ still uses bison's way to specify grammars, but some features,
    already obsolete in bisonc++ 0.91 were removed.

    Also note my e-mail address: the U. of Groningen's official policy now is
    to remove department specific information, so it's `@rug.nl' rather than
    `@rc.rug.nl', as used before.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 16 May 2005 13:39:38 +0200

bisonc++ (0.91) unstable; urgency=low

  * Added several missing short options (like -B etc) to the getopt() function
    call. I forgot to add them to the previous version(s). Internally, all old
    C style allocations were changed to C++ style allocations, using operators
    new and delete. Where it was immediately obvious that a vector could be
    used, I now use vectors. The internally used types `core' `shifts' and
    'reductions' (types.h) now use a vector data member rather than an int [1]
    member, which is then allocated to its proper (I may hope) size when the
    structs are allocated.

 -- Frank B. Brokken <f.b.brokken@rc.rug.nl>  Sat, 19 Feb 2005 10:21:58 +0100

bisonc++ (0.90) unstable; urgency=low

  * Command-line options now override matching declarations specified in the
    grammar specification file.

    All %define declarations have been removed. Instead their first arguments
    are now used to specify declarations. E.g., %parser-skeleton instead of
    %define parser-skeleton.

    All declarations use lower-case letters, and use only separating hyphens,
    no underscores. E.g., %lsp-needed rather than %define LSP_NEEDED
    The declaration %class-name replaces the former %name declaration

    All yy and YY name prefixes of symbols defined by bisonc++ have been
    removed. The parser-state `yydefault' has been renamed to `defaultstate'.

 -- Frank B. Brokken <f.b.brokken@rc.rug.nl>  Sun,  6 Feb 2005 12:50:40 +0100

bisonc++ (0.82) unstable; urgency=low

  * Added d_nError as protected data member to the base class. Missed it
    during the initial conversion. d_nErrors counts the number of parsing
    errors. Replaces yynerrs from bison(++)

 -- Frank B. Brokken <f.b.brokken@rc.rug.nl>  Sat, 29 Jan 2005 18:58:24 +0100

bisonc++ (0.81) unstable; urgency=low

  * Added the option --show-files to display the names of the files that are
    used or generated by bisonc++.

 -- Frank B. Brokken <f.b.brokken@rc.rug.nl>  Fri, 28 Jan 2005 14:50:48 +0100

bisonc++ (0.80) unstable; urgency=low

  * Completed the initial debian release. No changes in the software.

 -- Frank B. Brokken <f.b.brokken@rc.rug.nl>  Fri, 28 Jan 2005 14:30:05 +0100

bisonc++ (0.70-1) unstable; urgency=low

  * Initial Release.

 -- Frank B. Brokken <f.b.brokken@rc.rug.nl>  Thu, 27 Jan 2005 22:34:50 +0100
