flexc++ (2.19.00)

  * Updated the INSTALL item 2, mentioning the use of ccache

  * Removed the #include "" line in Scanner.ih if no token-path is specified.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Wed, 01 Apr 2026 08:41:25 +0200

flexc++ (2.18.01)

  * Minimal cosmetics

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Tue, 31 Mar 2026 19:12:38 +0200

flexc++ (2.18.00)

  * Added new option/directive 'token-path'.

  * Redesigned the FPattern::LopData subclass: it contains a FPattern *d_lhs
    instead of an FPattern object (causing problems when converting Flexc++ to
    a program using modules).

  * Requires bobcat >= 6.09.00 and icmake >= 13.04.00. 

  * Reflex OK.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 04 Sep 2025 11:14:08 +0200

flexc++ (2.17.01)

  * The g++ compiler (>= 15.0.0) requires non-empty strings when calling their
    .back() member. A size check was added to the generated scanner (e.g.,
    lex.cc) at the en of its matched_ member.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 06 Mar 2025 12:56:10 +0100

flexc++ (2.17.00)

  * Requires bobcat >= 6.07.00 and icmake >= 13.00.03. 

  * Changed ArgConfig::None into ArgConfig::NoArg.

  * Building uses a SPCH and multi-compilation.

  * The compiler is called using the value of the ${ICMAKE_CPPSTD} environment
    variable specifying the C++ standard to use. 

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sun, 12 Jan 2025 21:05:42 +0100

flexc++ (2.16.00)

  * Repaired a bug in skeletons/flexc++'s switchIstream function causing the
    new istream to fail.

  * Building flexc++ using icmake requires icmake >= 12.01.00. Using a SPCH
    caused confusion by the compiler: there's a Flexc++ class Pattern and a
    bobcat class Pattern. The ambiguity was resolved by renaming Flexc++'s
    class Pattern to FPattern. Reflex OK.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sat, 22 Jun 2024 16:20:27 +0200

flexc++ (2.15.00)

  * Repaired a bug in the States initialization causing rules like r{...}
    never to match when they happened to be specified as the first regular
    expression in lexer specification files

  * Added regression test p21 illustrating a{2} as the first regex.

  * Building flexc++ using icmake requires icmake >= 11.01.02 (the file
    c++std was removed)

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sat, 23 Mar 2024 13:21:37 +0100

flexc++ (2.14.00)

  * Replaced 'typedef' definitions by 'using' declarations, also in generated
    scanners. 

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

flexc++ (2.13.01)

  * Changed leftover links to github into links to gitlab.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sat, 18 Mar 2023 10:32:04 +0100

flexc++ (2.13.00)

  * The in-class implementations of the members of the default
    ScannerBase::Input class are now located as inline defined members
    in the file scannerbase.h below the interface of the class ScannerBase.

  * Updated the description of how to handle a user-defined Input class in the
    manual and the man-pages.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 16 Mar 2023 11:25:08 +0100

flexc++ (2.12.00)

  * Added new directives %baseclass-preinclude and %input-inline.

  * Added new option --baseclass-preinclude (-H).

  * Updated the man-pages' descriptions of how to use a user-define class
    Input

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Fri, 10 Mar 2023 15:06:27 +0100

flexc++ (2.11.02)

  * Ready for libbobcat6

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

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

flexc++ (2.11.01)

  * Repaired the generator/loop{1,4}.cc files containing leftover calls to
    d_input. instead of using d_input->, as d_input was changed to a pointer
    (see Flexc++ 2.10.00's changelog item).

  * Removed deprecated calls to 'std::bind2nd'

  * Prevented segfaults with regexes that result in indirect recursive
    switches to the same grammar states, which may be encountered with overly
    complex regexes like .*+

  * Compilation now uses -Werror in addition to -Wall

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Tue, 23 Aug 2022 21:07:51 +0200

flexc++ (2.11.00)

  * The 'Scanner(string const &infile, string const &outfile)',
    'Scanner(istream &in, ostream &out)', and comparable ScannerBase
    constructors have received a third parameter, 'keepCwd = true'. See 'man
    flexc++api' for details.

  * The build script supports an option 'strip' to strip the binary
    constructed by 'build {program, oxref, scanner}'. The previously defined
    '[strip]' options were dropped.

  * Compilation uses the '--std=c++20' option.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Tue, 22 Feb 2022 13:29:39 +0100

flexc++ (2.10.01)

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

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

flexc++ (2.10.00)

  * User-provided Input classes are declared in ScannerBase's protected
    section. In that case ScannerBase's 'Input *d_input' data member is also
    declared in ScannerBase's protected section.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 22 Apr 2021 15:04:03 +0200

flexc++ (2.09.01)

  * Added a section about how to handle character constants to the
    flexc++input(7) man-page.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 18 Mar 2021 11:33:54 +0100

flexc++ (2.09.00)

  * When switching streams the current working directory is changed to
    the absolute path names of the specified input streams.

  * After constructing Scanner objects and when their lex() members return the
    working directory that was active before teir call is restored.

  * Added the member std::string const &cwd(), returning the working directory
    that was active then the Scanner's constructor was called.

  * Removed superfluous '.tar.gz' extensions from the final lines of the
    man-pages

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sun, 21 Feb 2021 12:10:49 +0100

flexc++ (2.08.01)

  * Typo corrections

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Fri, 13 Nov 2020 16:03:23 +0100

flexc++ (2.08.00)

  * //include filename directives change the current working directory (cwd)
    to filename's path, returning to the previous cwd at filename's EOF.

  * The member 'streamStack()[].pushedName' contains the pathname of the
    current active specification files. [0].pushedName contains the pathname
    of the initial specification file passed to the lexical scanner.

  * The documentation was updated accordingly

  * Fixed a flaw in distinguishing filenames from comment when using //include
    directives.

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

flexc++ (2.07.11)

  * Oops, the manual's chapters after the introductory chapter were missing:
    now they're available again.

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

flexc++ (2.07.10)

  * Updated the man(ual)'s description of how the scanner is informed about
    the tokens expected by the (bisonc++ generated) parser (QUICK START:
    FLEXC++ and BISONC++)

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 10 Aug 2020 08:30:47 +0200

flexc++ (2.07.09)

  * Generated the parser using bisonc++ 6.04.00, Reflex OK

  * Circular dependencies between the scanner and the parser were removed.

  * Tim Schoenborn encountered a bug causing flexc++ to segfault. The bug was
    caused by the d_data shared pointer in the class State which may
    remain at its default state. The members State::next1 and State::next2
    returned, resp. d_data->next1() andd_data->next2(), causing the segfault.
    Since the 0-initialization is required, the next?() functions now test for
    d_data == 0, in which case they return 0.

  * Known typos in de manual were fixed.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sat, 18 Apr 2020 15:26:05 +0200

flexc++ (2.07.08)

  * Oops, the member streamStack should not be available in interactive
    scanners: it is now only available if the generated scanner is not an
    interactive scanner.

  * Updated the man-page to the 'token-path' facility offered by bisconc++.

  * Updated the icmake/findall function to match the icmake(1) man-page
    description.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Fri, 20 Mar 2020 17:28:08 +0100

flexc++ (2.07.07)

  * Added missing implementation of the member ScannerBase::streamStack()

  * Minor flexc++api man-page update

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Fri, 17 Jan 2020 22:23:35 +0100

flexc++ (2.07.06)

  * Parser generated by bisonc++ 6.03.00

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 13 Jun 2019 14:48:33 +0200

flexc++ (2.07.05)

  * Minor flaws in the user manual were fixed.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Wed, 24 Apr 2019 20:39:41 +0200

flexc++ (2.07.04)

  * The descriptions of the members pushStream and popStream in the flexc++api
    man-page and the manual was updated

  * The file flexc++.xref now also contains flexc++'s function call-tree.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Thu, 21 Mar 2019 03:36:41 +0100

flexc++ (2.07.03)

  * Updated the QUICK START sections in bf(flexc++)(1).

  * Compiling flexc++ itself depends on facilities in the std::filesystem
    namespace. This requires a recent compiler (e.g., g++-8.2.0 or beyond)
    when compiling flexc++.

  * The inline function template 'as' is relocated above the inline functions
    using 'as', to prevent clang++-7 compilation warnings.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sat, 10 Nov 2018 12:06:28 +0100

flexc++ (2.07.02)

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

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 25 Jun 2018 13:50:37 +0200

flexc++ (2.07.01)

 * Migrated Flexc++ from Github to Gitlab.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Tue, 19 Jun 2018 07:20:14 +0530

flexc++ (2.07.00)

  * Nested namespace specifications (like my::nested::ns) cannot be used in
    include-guard specifications. In those cases only the alpha-numeric
    characters and the underscore of the namespace are used (thanks, avalchev,
    for bringing this to my attention).

  * Since identifiers having series of two or more underscores are reserved by
    the C++ standard, all identifiers ending in two trailing underscores were
    redefined as identifiers ending in a single underscore. This involves the
    enums
        ActionType_, Leave_, StartConditon_, PostEnum_,
    the members
        actionType_, continue_, echoCh_, echoFirst_, executeAction_,
        getRange_, get_, istreamName_, lex_, lop1_, lop2_, lop3_, lop4_,
        lopf_, matched_, noReturn_, print_, pushFront_, reset_, return_,
        state_, switchStream_, updateFinals_,
    and the protected data members
        d_in_ d_token_ s_finIdx_, s_interactive_ s_maxSizeofStreamStack_,
        s_nRules_, s_rangeOfEOF_, s_ranges_, s_rf_.
    Existing code using the previously defined names (ending in two
    underscores) can easily me updated by replacing the trailing double
    underscores by single underscores. In practice this will most likely only
    involve StartCondition_, PostEnum_ and maybe lex_ and print_, as the other
    identifiers are intended for internal use only.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Tue, 15 May 2018 12:23:40 +0200

flexc++ (2.06.04)

  * Replaced (erroneously used) .hh extensions by (intended) .ih extensions in
    the man-pages and manual.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Fri, 09 Mar 2018 22:13:56 +0100

flexc++ (2.06.03)

  * Added C++-17 attributes like [[fallthrough]] and [[maybe_notused]] to
    flexc++'s and its generated code.

  * Improved the layout and fixed an error in some generated debug-statements

  * By implication: g++ >= 7.00.00 is required to compile the generated code.

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

flexc++ (2.06.02)

  * Flexc++'s parser code was generated by bisonc++ V 6.00.00.

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

  * By default precompiled headers are used. The option -P (cf. log entry
    'flexc++ (2.05.00)' 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 --std=c++14 compiler option since that's the standard by now.

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

flexc++ (2.06.01)

  * Somehow the timestamps of scanner/lexer and scanner/lex.cc were incorrect,
    resulting in the build process attempting to rebuild lex.cc using flexc++
    (which at this point clearly doesn't exist).  The timestamps were fixed in
    this release.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sat, 04 Mar 2017 09:17:18 +0100

flexc++ (2.06.00)

  * Added directive %startcondition-name specifying a non-default name for the
    StartCondition__ enum.

  * Updated the man-pages/manual.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Mon, 27 Feb 2017 12:33:58 +0100

flexc++ (2.05.00)

  * Precompiled headers are rebuilt when their .h or .ih file have changed.

  * Added option --own-parser (-P) showing the actions of flexc++'s own parser
    when parsing a lexer-specification file.

  * New parser, built by bisonc++ V5.00.00.

  * Repaired the faulty long-option definitions in main.cc, due to which
    long options were not properly recognized

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Wed, 13 Apr 2016 12:37:09 +0530

flexc++ (2.04.00)

  * Carlos Bril and Micha de Rijk detected a curious bug resulting in flexc++
    never recognizing its initial character range. E.g, these two rules
        a
        .|\n

    place \t into the 0th character range containing the characters \0 through
    \t. A scanner generated for these two rules echoed \t to cout as an
    unrecognized character when running
        echo '\t' | a.out
    The bug was caused by flexc++ using range numbers rather than offsets in
    dfarow/transitions.cc and dfarow/transit.cc (and related files)

  * Added regression test p19 (regression/p19) to test recurrence of the
    abovementioned bug.

  * The bugfix on Fri Mar 13 (!) 2015 of a bug reported by Wopke Hellinga and
    Mark Redeman reintroduced a problem with handling the lookahead operator,
    causing regression test p02 to fail since then. This version implements an
    alternative fix for the bug reported by Wopke and Mark, which does not
    cause p02 to fail (see parser/lex.cc).

  * Several inconsistencies in the manual were fixed.

  * The source file containing main() was renamed to main.cc (was: flexc++.cc);
    the internal header file for the main program was renamed to main.ih.

 -- Frank B. Brokken <f.b.brokken@rug.nl>  Sun, 06 Mar 2016 18:30:37 +0100

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
