flexc++ (2.03.04)

  * Fixed a memory leak reported by gendx caused by the missing ScannerBase
    destructor.

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

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

  * Icmake files adapted to icmake 8.00.04

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 14 Dec 2015 15:37:58 +0100

flexc++ (2.03.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:24:26 +0200

flexc++ (2.03.02)

  * Reimplemented the (un)installation procedures

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Fri, 02 Oct 2015 11:03:20 +0200

flexc++ (2.03.01)

  * 'build manual' creates the manual when its called. If the manual already
    exists, it is recreated. Same holds true for 'build man'

  * Flexc++'s compilation now uses precompiled headers

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 28 Sep 2015 18:48:43 +0200

flexc++ (2.03.00)

  * Fixed a bug in handling {0, x} intervals: encountered by Guillaume
    Endignoux. 

  * Guillaume also detected a bug in handling \x escape sequences in character
    classes, e.g., [\x30-\x38]. That problem was not caused by handling the
    escape sequence, but by handling concatenation of regular expressions. The
    parser/inc/regexoreof file now contains an additional rule _regex_unit,
    which handles the regex _units, possibly quantified, and their
    concatenations, while _regex handles a _regex_unit and the operators | and
    / that can be used to combine regular expressions. 

  * Guillame found an input file causing a continuous loop within
    flexc++. This bug was fixed by terminating flexc++ at the final end of its
    input streams.

  * The //include filename facility was not recognized in previous
    releases. It's now supported (cf. man flexc++input, FILE SWITCHING)

  * Added 'build uninstall'. This command only works if, when calling one of
    the 'build install' alternatives and when calling 'build uninstall' the
    environment variable FLEXCPP 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
    FLEXCPP environment variable, unless that file happpens to be in a
    directory removed by 'build (dist)clean'. See also the file INSTALL.
    Defining the FLEXCPP environment variable as ~/.flexcpp usually works
    well. 

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Fri, 28 Aug 2015 09:38:44 +0200

flexc++ (2.02.00)

  * Wopke Hellinga and Mark Redeman noticed that flexc++ reported an error if
    the last line of a rule definition does not end in a newline. This bug was
    fixed in this release. 

  * Added the file 'required' to the source distribution summarizing the
    required software for building flexc++, dropped the file 'build-depends'.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Fri, 13 Mar 2015 16:40:13 +0100

flexc++ (2.01.00)

  * The algorithm to determine which rules are viable was changed. Now a
    rule's viability is determined from the generated DFAs: rules matched at
    DFA rows are now removed from a set of all rule indices. If any elements
    remain, then those rules cannot be matched. See also the section about
    'Finding non-viable rules' in the manual's technical documentation.

  * 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.

  * A warning is issued if an existing scanner.h file does not contain 'void
    postCode(PostEnum__'. The warning also offers an advice to add the
    required declaration/definition (showing the required code) to the
    scanner.h file.
    
  * References to line numbers of rules should now be correct, and should
    refer to the line number where the rule's regex is specified.

  * This version depends on bobcat >= 3.21.01, and uses Bobcat's Iterator
    class template. 

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sun, 16 Mar 2014 10:14:15 +0100

flexc++ (2.00.00)

  * Completely re-implemented look-ahead operator (LOP) handling. The LOP is
    now handled through mini-scanners, the previously used class TailCount and
    the tail count Flag enum are no longer required and were removed from the
    implementation. See also parser/README.grammar.

  * Null-matching patterns using the look-ahead operator (e.g. a*/b) are
    dangerous, and can take the generated scanner into a non-terminating loop.
    When flexc++ detects such patterns it generates a warning. These warnings
    can be suppressed by writing 
    //%nowarn
    on the line immediately preceding the potentially null-matching pattern
    using the look-ahead operator.

  * Raw string literals, as defined by C++11, are supported

  * NOTE WELL: 

        - when using flexc++ >= 2.00.00 to re-generate lex.cc and
            ScannerBase.h, existing object files defining and using the
            Scanner object should be recompiled, as flexc++ 2.00.00 uses a
            different data-member organization in its ScannerBase class.

        - new Input-class requirements: 
            size_t Input::nPending() const 
                must return the current number of pending (i.e., pushed back) 
                input characters;
            void Input::setPending(size_t size) 
                must remove any initial number of pending characters, reducing
                the number of pending characters to size.
            The lexical scanner always passes the value received from
            nPending() to setPending(), without calling Input::get() in
            between.

        - Character classes now fully support escape sequences. A \- inside a
          character class indicates a litteral - and is not used to define a
          character range. Refer to the man-page (flexc++input(7)) and/or to
          the manual for further details.

  * A second (optional) %% line in flexc++'s input file ends input file
    processing.  To specify a regex starting with %% surround it with double
    quotes or indent it by at least one blank space.

  * Warnings added in release 1.06.00 (issued when options or directives are
    specified which are inconsistent with existing files, and which are issued
    for the `baseclass-header', `class-name', `implementation-header', and
    `namespace'options/directives) are now reported as errors, as flexc++
    cannot simply ignore them since ignoring them may conflict with the
    contents of the generated 'lex.cc' and 'Scannerbase.h' files.

  * Repaired a bug introduced in 1.02, causing parser failures for letter and
    digits in REs in the context of start conditions. Cause: after '>' in
    parser/inc/msspec multiple letters/digits must be returned as individual
    characters. Realized by calling d_scanner.multiAsChar() at ms_spec's
    action block.

  * Added several new regression tests 

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sun, 09 Feb 2014 13:32:22 +0100
    
flexc++ (1.08.00)

  * Added the 'postCode' member to the interface of the class generated by
    flexc++

  * Added the strongly typed PostEnum__ enumeration to the scanner base class
    generated by flexc++

  * Added a chapter `Pre-loading input lines' to the manual

  * The single flexc++ man-page was split into several more specific
    man-pages: 
        flexc++      -- general description, and features of flexc++ itself
        flexc++input -- how to write flexc++'s input files
        flexc++api   -- description of the classes generated by flexc++
        
 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sat, 28 Dec 2013 17:41:52 +0100

flexc++ (1.07.00)

  * --force-* options removed. Use 'rm ...' to remove files if necessary.

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

flexc++ (1.06.00)

  * Added images to the constructed manual 

  * When the `namespace' option/directive is used then the namespace
    identifier is also used to define the include guards of generated .h
    files.

  * Warnings are issued when options or directives are specified wchich are
    ignored because of an already existing target file (e.g., scanner.h,
    scanner.ih). These warnings are not issued for lex.cc and scannerbase.h,
    which are by default rewritten at each flexc++ run. These warnings are
    issued for the `baseclass-header', `class-name', `implementation-header',
    and `namespace'options/directives.

  * Changed the implementation of 'class Options': it now mimics the
    implementation used by bisonc++

  * This version repairs the `joren-bug' (Reported by Joren Heit on June 7,
    2013). Joren discovered that in some situations rules using the
    LA-operator failed to re-scan the tail part of a RE using the LA-operator.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Tue, 06 Aug 2013 13:46:47 +0200

flexc++ (1.05.00)

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

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

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Tue, 28 May 2013 15:43:33 +0200

flexc++ (1.04.00)

  * FBB::Errno calls are replaced by FBB::Exception calls.

  * Added a static cast to generator/inputimplementation.cc (line 74) to get
    rid of a compiler warning.

  * Added %filenames to the directives in the man-page.

  * Added a public member 'interactiveLine()' to the scannerbase's interface
    to refresh the current interactive line buffer with the contents of the
    next interactive line.

  * Repaired erroneous ``^' inside regex loses its special meaning' warnings
    occurring with single line min-scanner REs like this: 
        <mini>^regex

  * ScannerBase::d_more is initialized to false (removes a (harmless) valgrind
    warning).

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Fri, 15 Mar 2013 14:26:35 +0100

flexc++ (1.03.01)

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

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 24 Jan 2013 21:09:23 +0100

flexc++ (1.03.00)

  * flexc++ returns 0 when called with the -h or -v flags 

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Tue, 27 Nov 2012 21:06:08 +0100

flexc++ (1.02.00)

  * White space may now follow a rule's mini-scanner specification. E.g.,
    <comment>
    {
        rules for the comment mini scanner
    }

  * Usage info now correctly mentions -T as option character with --own-tokens

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sun, 25 Nov 2012 11:04:34 +0100

flexc++ (1.01.00)

  * Removed 'inline' from skeletons/flexc++.cc

  * Man-page and manual updated

  * The --interactive option was removed (the %interactive directive remains)

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 05 Nov 2012 11:05:32 +0100

flexc++ (1.00.01)

  * Adapted the INSTALL file to flexc++

  * Added the file 'build-depends' listing specific software and versions that
    are used during flexc++'s compilation and by the final program.

  * Several inconsistencies in the initial sections of flexc++'s user guide
    were repaired.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sat, 27 Oct 2012 14:49:47 +0200

flexc++ (1.00.00)

  * 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

  * Klaas Winter detected a bug in the skeletons/flexc++.cc file:
    switchOstream incorrectly changed the name of the *input* file to "-". 
    The assignment to d_filename was removed from the skeleton file.

  * Klaas Winter detected a bug in CharRange::predefined causing a setfault
    when requesting a negated set of characters (like [:^space:]. The bug was
    caused by removing from the set name all characters from ^ to the end of
    the set name, instead of removing just the ^. Consequently, no character
    selecting function (for [:) could of course be found.

  * By now we're well beyond the 1 year beta testing period, which included
    using flexc++ in bisonc++ and flexc++ itself, as well as the scanner
    generating tool of choice for Frank's C++ course. Considering this
    Jean-Paul and I decided to bump flexc++'s version from version 0.98.00 to
    1.00.00. Removed 
        d_filename = "-"; 
    from the skeleton file's implementation of switchOstream.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sun, 16 Sep 2012 18:55:53 +0200

flexc++ (0.98.00)

  * Implemented the --case-insensitive option (and directive), generating a
    scanner ignoring letter casing.

  * Several cosmetic changes were implemented

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Fri, 11 May 2012 13:59:54 +0200

flexc++ (0.97.30)

  * This version depends on Bobcat >= 3.00.00

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

flexc++ (0.97.20)

  * George Danchev noticed that flexc++ created files even though parsing
    failed. This flaw's repaired in this release

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Fri, 20 Apr 2012 16:33:01 +0200

flexc++ (0.97.10)

  * Added missing std:: prefixes to numeric_limits calls in skeletons/flexc++
    and generator/tailcount.cc.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Fri, 20 Apr 2012 14:04:55 +0200

flexc++ (0.97.00)

  * Added the --regex-calls option showing the order in which elements from
    regular expressions are processed.

  * Added the --matched-rules option showing the number of matched rules, just
    before their actions are executed.

  * Replaced '#include <climits>' by '#include <limits>' and '..._MAX'
    constants by 'numeric_limits<...>::max()' calls. The same holds true for
    flexc++'s skeletons. 

  * The files parser/parserbase.h and parser/parse.cc were added to the
    archive, and the check for changes in the parser's grammar was removed
    from 'build program' to remove the program's build process dependency on
    bisonc++. To recreate the program for a new parser use 'build parser'.

  * Skeletons can use fields (again) at $insert directives to specifiy
    subcases. This is documented in generator/insert.cc, and used to generate
    option specific code for --matched-rules (see skeletons/flexc++.cc at
    debug.R). 

  * Flexc++ itself now uses a parser defining and using polymorphic semantic
    values. To recreate the parser (but note that this is *not* required when
    compiling flexc++ from the source archive), bisonc++ > 4.00.00 is
    required. 

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sat, 14 Apr 2012 13:44:00 +0200

flexc++ (0.96.00)

  * Harold Bruintje noticed that rules explicitly assigned to the INITIAL mini
    scanner are also used by other %s (inclusive) mini scanners. This is in
    violation of the description given in 

        http://pubs.opengroup.org/onlinepubs/7908799/xcu/lex.html

    stating

        `When the generated scanner is in a %s state, patterns with no state
        specified will be also active' 

    which excludes <INTIAL> regex rules.

    This release implements %s mini scanner handling as described in lex.html.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 29 Mar 2012 09:02:57 +0200

flexc++ (0.95.00)

  * Removed %max-depth again: should only be an option, not a directive 

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

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

flexc++ (0.94.00)

  * Added the --max-depth option defining the maximum lexical scanner
    specification file depth (and %max-depth directive).

  * Using a vector rather than a a stack to store stacked streams, to allow
    the Scanner class (read) access to the number of stacked files and their
    names. 

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 23 Feb 2012 11:53:06 +0100

flexc++ (0.93.00)

  * Redesigned the interactive scanner: no additional protected data members,
    an additional member (interactiveLine__) now handles the line-refresh from
    the input stream.

  * In interactive mode, lineNr() increments at each next interactive line.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 20 Feb 2012 09:58:34 +0100

flexc++ (0.92.00)

  * Added 'leave(int retValue)' member that can be called from members called
    from the scanner specification's actions to end the action, returning
    'retValue' from 'lex()'

  * Sanitized switch- and pushStream members for interactive and
    non-interactive scanners

  * Added missing d_atBOL = true assignment in pushStream, detected by Jurjen
    Bokma.

  * All man-pages combined into one man-page: flexc++(1).

  * Implemented --filenames, --print-tokens and --own-tokens
    options/directives 

  * Manual and man-pages updated

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Fri, 17 Feb 2012 14:13:27 +0100

flexc++ (0.91.00)

  * Jurjen Bokma found a segfault in action blocks at the end of files not
    ending in '\n'. Caused by Input's d_in == 0 after an earlier EOF
    detection, and then calling d_in->get(). Repaired by testing for d_in == 0

  * Added --target-directory option (and directive) to define where the
    generated files should be written if not at the default (lexer) location.

  * The earlier minor versions should have been .9 rather than .09. Same for
    the 0.08 series of changes. Version now (properly) set to 0.9x.yy.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sat, 11 Feb 2012 13:44:10 +0100

flexc++ (0.09.52)

  * The Scannner(std::string infile, std::string outfile) and 
    switchStreams(std::string infile, std::string outfile) members now also 
    accept outfile == "", in which case std::cerr is used as the scanner's
    output stream.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Wed, 08 Feb 2012 11:48:28 +0100

flexc++ (0.09.51)

  * Rebased release.yo in flexc++'s main directory, and no longer in its
    parent, where it would contaminate  Debian's area outside of flexc++'s
    build-area. 

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 06 Feb 2012 21:11:42 +0100

flexc++ (0.09.50)

  * At the beginning of its Debian life-cycle, flexc++'s changelog is
    maintained again. This changelog does not reflect changes beyond version
    0.08.04 and before 0.09.50. Logs for those versions can be obtained using
    git. Currently (and until further notice) the primary git archive location
    is http://www.icce.rug.nl/git/flexc++.git. Flexc++'s official web location
    is http://www.flexcpp.org (badly in need of an update, though).

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 06 Feb 2012 16:55:18 +0100

flexc++ (0.08.04)

  * Implemented the %interactive option and --interactive flag to generate an
    interactive scanner.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sun, 15 Jan 2012 13:07:52 +0100

flexc++ (0.08.03)

  * Repaired Jean-Paul's segfault for a simple scanner:
        .*/b
        .*
  * Standardized the version to format v.mm.ss

  * This version after merging fbb-wip Sat Jan 14 11:48:38 2012 +0100
    (9ecf7b694c7e3f37a1e8f3d46b25e96c5d5e3d90) and master, a.k.a. tag
    0.7.1-pre

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sat, 14 Jan 2012 13:43:22 +0100

flexc++ (0.8.2)

  * Added ScannerBase::switchStreams(istream &, ostream &) and updated the
    man-pages accordingly

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Fri, 30 Dec 2011 17:32:16 +0100

flexc++ (0.8.1)

  * Added missing ' ' and ':' characters to character-classes

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 29 Dec 2011 22:23:50 +0100

flexc++ (0.8.0)

  * Rebuilt of flexc++, see the git logs for details. Intermediate version
    updates not separately logged before this date.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 11 Jul 2011 12:58:12 +0200

flexc++ (0.0.0)

  * Project Start.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Fri, 18 Apr 2008 23:29:36 +0200

