]> granicus.if.org Git - re2c/log
re2c
6 years agoRelease 1.0.3. 1.0.3
Ulya Trofimovich [Wed, 8 Nov 2017 20:40:53 +0000 (20:40 +0000)]
Release 1.0.3.

6 years agoFix for #198. mac_ports
Ulya Trofimovich [Wed, 8 Nov 2017 07:19:21 +0000 (07:19 +0000)]
Fix for #198.

GCC-4.2.1 is unable to compile code like this:

    std::vector<int> v;
    std::vector<int>::const_reverse_iterator i;
    for (i = v.rbegin(); i != v.rend(); ++i) ;

It's unable to deduce const overload for 'rend':

    "no match for ‘operator!=’ in ‘i != std::vector<_Tp, _Alloc>::rend()"

However, the following code compiles fine:

    std::vector<int> v;
    std::vector<int>::const_reverse_iterator i = v.rbegin(), e = v.rend();
    for (i != e; ++i) ;

This was reported by Ryan Shmidt.

6 years agoFixed typo in docs (found by Maxim Reznik).
Ulya Trofimovich [Thu, 14 Sep 2017 19:08:37 +0000 (20:08 +0100)]
Fixed typo in docs (found by Maxim Reznik).

6 years agoRemoved unaccurate example.
Ulya Trofimovich [Mon, 28 Aug 2017 16:33:46 +0000 (17:33 +0100)]
Removed unaccurate example.

Parsing floating-point numbers is hard and re2c doesn't help much,
so this example was somewhat misleading.

6 years agoRelease 1.0.2. 1.0.2
Ulya Trofimovich [Sat, 26 Aug 2017 20:07:06 +0000 (21:07 +0100)]
Release 1.0.2.

6 years agoUpdated changelog.
Ulya Trofimovich [Sat, 26 Aug 2017 20:02:22 +0000 (21:02 +0100)]
Updated changelog.

6 years agoSome more fixes to the documentation.
Ulya Trofimovich [Sat, 26 Aug 2017 19:26:26 +0000 (20:26 +0100)]
Some more fixes to the documentation.

6 years agoUpdated documentation.
Ulya Trofimovich [Sat, 26 Aug 2017 18:10:24 +0000 (19:10 +0100)]
Updated documentation.

6 years agoDisallow condition names and named definitions to start with digit.
Ulya Trofimovich [Sat, 26 Aug 2017 09:31:35 +0000 (10:31 +0100)]
Disallow condition names and named definitions to start with digit.

This has always been the intended behavior and was accidentally broken
by commit e3db638fc3e9bfb318edafedbefd02f25f1c1b8c.

6 years agoRenamed tests.
Ulya Trofimovich [Tue, 22 Aug 2017 20:39:33 +0000 (21:39 +0100)]
Renamed tests.

6 years agoUpdated examples and added them to 'run_tests.sh' script.
Ulya Trofimovich [Tue, 22 Aug 2017 17:06:55 +0000 (18:06 +0100)]
Updated examples and added them to 'run_tests.sh' script.

6 years agoUpdated changelog.
Ulya Trofimovich [Tue, 22 Aug 2017 08:15:47 +0000 (09:15 +0100)]
Updated changelog.

6 years agoAdded forgotten 'genhelp.sh' to distribution files.
Ulya Trofimovich [Tue, 22 Aug 2017 08:09:35 +0000 (09:09 +0100)]
Added forgotten 'genhelp.sh' to distribution files.

This fixes bug #194 "Build with "--enable-docs" fails".

6 years agoAdded examples to test suite.
Ulya Trofimovich [Fri, 18 Aug 2017 15:09:59 +0000 (16:09 +0100)]
Added examples to test suite.

6 years agoAdded benchmarks to test suite.
Ulya Trofimovich [Wed, 16 Aug 2017 17:43:13 +0000 (18:43 +0100)]
Added benchmarks to test suite.

6 years agoUpdated changelog for 1.0.1 version.
Ulya Trofimovich [Fri, 11 Aug 2017 21:43:05 +0000 (22:43 +0100)]
Updated changelog for 1.0.1 version.

6 years agoRelease 1.0.1. 1.0.1
Ulya Trofimovich [Fri, 11 Aug 2017 21:31:09 +0000 (22:31 +0100)]
Release 1.0.1.

6 years agoMakefile.am: add paper on Lookahead TDFA to distribution.
Ulya Trofimovich [Fri, 11 Aug 2017 21:16:04 +0000 (22:16 +0100)]
Makefile.am: add paper on Lookahead TDFA to distribution.

6 years agoFixed #193: "1.0 build failure on macOS: error: calling a private constructor of...
Ulya Trofimovich [Fri, 11 Aug 2017 21:04:05 +0000 (22:04 +0100)]
Fixed #193: "1.0 build failure on macOS: error: calling a private constructor of class 're2c::Rule'".

Copy constructor and assignment are requred by std::valarray
implementation on macOS.

6 years agoRelease 1.0. 1.0
Ulya Trofimovich [Fri, 11 Aug 2017 13:46:23 +0000 (14:46 +0100)]
Release 1.0.

6 years agoPaper on lookahead TDFA: finished.
Ulya Trofimovich [Fri, 11 Aug 2017 11:52:10 +0000 (12:52 +0100)]
Paper on lookahead TDFA: finished.

6 years agoUpdated help and manpage.
Ulya Trofimovich [Thu, 10 Aug 2017 15:03:46 +0000 (16:03 +0100)]
Updated help and manpage.

6 years agoLeave the definition of 'yynmatch' and 'yypmatch' to the user.
Ulya Trofimovich [Thu, 10 Aug 2017 12:25:07 +0000 (13:25 +0100)]
Leave the definition of 'yynmatch' and 'yypmatch' to the user.

With '--posix-captures' RE2C stores submatch results in 'yynmatch'
(the total number of capturing groups for the matching rule) and
'yypmatch' (an array of submatch values for each group).

These variables should be user-defined, so that users can override
default implementation (e.g. make 'yypmatch' an array of integer
offsets rather than an array of pointers). Overriding is only possible
with generic API: if default API is used, then RE2C can autogenerate
'yynmatch' and 'yypmatch' (and so it did prior to this commit).
However, it is better to have the same behavior with both APIs; also,
it is coherent with '--tags' option (RE2C leaves tag definition to
the user).

6 years agoUpdated options list and regenerated docs.
Ulya Trofimovich [Wed, 9 Aug 2017 17:35:15 +0000 (18:35 +0100)]
Updated options list and regenerated docs.

6 years agoAdded short option '-P' corresponding to '--posix-captures'.
Ulya Trofimovich [Wed, 9 Aug 2017 17:07:50 +0000 (18:07 +0100)]
Added short option '-P' corresponding to '--posix-captures'.

6 years agoFixed includes with 'include-what-you-use'.
Ulya Trofimovich [Wed, 9 Aug 2017 16:17:09 +0000 (17:17 +0100)]
Fixed includes with 'include-what-you-use'.

Command:

    $ configure CXX=include-what-you-use CXXFLAGS="--check-also" \
        && make -k 2>log \
        && python2 `which fix_inclydes.py` < log

6 years agoPaper on Lookahead TDFA: added bibliography.
Ulya Trofimovich [Wed, 9 Aug 2017 13:04:10 +0000 (14:04 +0100)]
Paper on Lookahead TDFA: added bibliography.

6 years agoAmended README instructions for benchmarks.
Ulya Trofimovich [Wed, 9 Aug 2017 07:47:51 +0000 (08:47 +0100)]
Amended README instructions for benchmarks.

6 years agoPaper on Lookahead TDFA: added pictures.
Ulya Trofimovich [Mon, 7 Aug 2017 11:57:30 +0000 (12:57 +0100)]
Paper on Lookahead TDFA: added pictures.

6 years agoPaper on Lookahead TDFA: fixed captions and ran through aspell.
Ulya Trofimovich [Mon, 7 Aug 2017 11:54:29 +0000 (12:54 +0100)]
Paper on Lookahead TDFA: fixed captions and ran through aspell.

6 years agoPaper on Lookahead TDFA: added benchmark results and graphs.
Ulya Trofimovich [Sat, 5 Aug 2017 08:33:30 +0000 (09:33 +0100)]
Paper on Lookahead TDFA: added benchmark results and graphs.

6 years agoPaper on Lookahead TDFA: reformatted examples.
Ulya Trofimovich [Fri, 4 Aug 2017 08:57:58 +0000 (09:57 +0100)]
Paper on Lookahead TDFA: reformatted examples.

6 years agoTweaked CXXFLAGS in asan build script.
Ulya Trofimovich [Fri, 4 Aug 2017 08:52:14 +0000 (09:52 +0100)]
Tweaked CXXFLAGS in asan build script.

6 years agoA small tweak in benchmarking scripts that reduces warmup time.
Ulya Trofimovich [Fri, 4 Aug 2017 08:50:59 +0000 (09:50 +0100)]
A small tweak in benchmarking scripts that reduces warmup time.

6 years agoFuzzers: a bunch of small tweaks.
Ulya Trofimovich [Thu, 3 Aug 2017 11:14:19 +0000 (12:14 +0100)]
Fuzzers: a bunch of small tweaks.

6 years agoSkeleton: fixed initialization of maximal path length.
Ulya Trofimovich [Thu, 3 Aug 2017 10:52:49 +0000 (11:52 +0100)]
Skeleton: fixed initialization of maximal path length.

Broken by commit fffb5932ee52127e03b9f7f5ccca83a421d69061.

Path length were initialized with 0 instead 'DIST_ERROR', which caused
incorrect calculation of maximal path length. This in turn caused errors
in estimating the number of byted necessary to hold keys during data
generation in skeleton. The resulting keys were one-byte while maximal
path length was more than one byte, which (fortunately!) caused runtime
errors in skeleton programs.

Example of program that caused skeleton error:
    /*!re2c
        (@t [\x00] [^]{5,6})* {}
    */

The error was hidden for so long because in practice inputs that need
more than one-byte keys are rare, and fuzzer sets 'ulimit -t 10' when
running re2c, so most of such programs were simply aborted. Those that
were not aborted still had a chance of estimating key size correctly.

6 years agoFixed cppcheck 'style' warnings.
Ulya Trofimovich [Wed, 2 Aug 2017 22:11:13 +0000 (23:11 +0100)]
Fixed cppcheck 'style' warnings.

Used the following command to run cppcheck:

   cppcheck --enable=all --inconclusive --std=posix --quiet --force -I. src/

6 years agoFixed headers that were not self-contained.
Ulya Trofimovich [Wed, 2 Aug 2017 20:43:36 +0000 (21:43 +0100)]
Fixed headers that were not self-contained.

Used the following command to find errors:

    for h in $(find src/ -name '*.h*'); do echo "CHECKING $h"; g++ -I. -c $h -o foo.o; done

6 years agoBenchmarks: added README and small samples of input data.
Ulya Trofimovich [Wed, 2 Aug 2017 17:07:16 +0000 (18:07 +0100)]
Benchmarks: added README and small samples of input data.

6 years agoAdded scripts that run benchmarks.
Ulya Trofimovich [Wed, 2 Aug 2017 14:49:07 +0000 (15:49 +0100)]
Added scripts that run benchmarks.

6 years agoAdded fuzzers (contributed by Sergei Trofimovich).
Ulya Trofimovich [Tue, 1 Aug 2017 15:41:58 +0000 (16:41 +0100)]
Added fuzzers (contributed by Sergei Trofimovich).

6 years agoDon't loose mtag versions in TDFA intitalizer.
Ulya Trofimovich [Tue, 1 Aug 2017 15:36:45 +0000 (16:36 +0100)]
Don't loose mtag versions in TDFA intitalizer.

6 years agoMakefile.am: use portable POSIX primitive to get directory name.
Ulya Trofimovich [Tue, 1 Aug 2017 12:19:06 +0000 (13:19 +0100)]
Makefile.am: use portable POSIX primitive to get directory name.

Use '$(@D)' instead of '$(dir $@)', as the latter requires secondary
expansion feature specific to GNU make; it causes build failures on
bmake.

'$(@D)', on the other hand, is a POSIX make feature documented e.g. in
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/make.html
(section "Internal Macros").

6 years agoAdded some testing scripts for various CXX/CXXFLAGS confgurations.
Ulya Trofimovich [Tue, 1 Aug 2017 11:51:19 +0000 (12:51 +0100)]
Added some testing scripts for various CXX/CXXFLAGS confgurations.

6 years agoMakefile.am: fixed other custom rules to avoid writing into unexistent directory.
Ulya Trofimovich [Tue, 1 Aug 2017 10:39:39 +0000 (11:39 +0100)]
Makefile.am: fixed other custom rules to avoid writing into unexistent directory.

The fixed rules do not presently trigger any build errors: target directory
is created by configure as it need to put autogenerated files doc/manpage.rst
and doc/help.rst in it.

However, this behaviour is occasional: if one removes the .in files, build
failure would be unmasked. So it makes sense to ensure that target directory
exists.

6 years agoMakefile.am (building docs): create target directory before writing into it.
Ulya Trofimovich [Tue, 1 Aug 2017 10:19:27 +0000 (11:19 +0100)]
Makefile.am (building docs): create target directory before writing into it.

To reproduce build falure (before the fix):

    $ mkdir <builddir>
    $ cd <builddir>
    $ ../condigure --disable-dependency-tracking
    $ make src/conf/help.cc V=1
    cp ../bootstrap/src/conf/help.cc src/conf/help.cc
    cp: cannot create regular file ‘src/conf/help.cc’: No such file or directory
    Makefile:1984: recipe for target 'src/conf/help.cc' failed
    make: *** [src/conf/help.cc] Error 1

6 years agoMakefile.am (rebuilding docs): create target directory before writing into it.
Ulya Trofimovich [Tue, 1 Aug 2017 10:09:03 +0000 (11:09 +0100)]
Makefile.am (rebuilding docs): create target directory before writing into it.

To reproduce build falure (before the fix):

    $ mkdir <builddir>
    $ cd <builddir>
    $ ../condigure --disable-dependency-tracking --enable-docs
    $ make src/conf/help.cc V=1
    rst2man.py ./doc/help.rst > src/conf/help.cc.1
    /bin/sh: src/conf/help.cc.1: No such file or directory
    Makefile:1976: recipe for target 'src/conf/help.cc' failed
    make: *** [src/conf/help.cc] Error 1

6 years agoMakefile.am: create target directory before writing into it 192/head
Ross Burton [Mon, 31 Jul 2017 14:43:41 +0000 (15:43 +0100)]
Makefile.am: create target directory before writing into it

In some situations src/parse/ may not exist before a file is copied into the
directory. Ensure that this doesn't happen by creating the directory first.

6 years agoDon't assert that comparator arguments are non-equal.
Ulya Trofimovich [Tue, 1 Aug 2017 07:22:14 +0000 (08:22 +0100)]
Don't assert that comparator arguments are non-equal.

Comparator is used in 'std::sort'.
All items in closure have unnique TNFA states, therefore we assumed
that the compared items must always be different. However, 'std::sort'
does not have this requirement and some implementations of it compare
the element with itself.

The removed assert caused crashes with old version of GCC (4.2).

Thanks to Sergei Trofimovich for debugging the issue.

6 years agoMakefile.am: create target directory before writing into it 191/head
Ross Burton [Mon, 31 Jul 2017 14:43:41 +0000 (15:43 +0100)]
Makefile.am: create target directory before writing into it

In some situations src/parse/ may not exist before a file is copied into the
directory. Ensure that this doesn't happen by creating the directory first.

6 years agorun_tests.sh: avoid using 'sed -i' as it is non-portable.
Ulya Trofimovich [Mon, 31 Jul 2017 14:05:44 +0000 (15:05 +0100)]
run_tests.sh: avoid using 'sed -i' as it is non-portable.

On FreeBSD 'sed -i' works in a different way than on Linux.

6 years agoUse explicit stack instead of implicit recursion.
Ulya Trofimovich [Mon, 31 Jul 2017 13:22:19 +0000 (14:22 +0100)]
Use explicit stack instead of implicit recursion.

With CXXFLAGS='-fsanitize=addres' GCC complains about stack overflow.

6 years agoFixed unaligned memory access.
Ulya Trofimovich [Mon, 31 Jul 2017 12:59:51 +0000 (13:59 +0100)]
Fixed unaligned memory access.

With CXXFLAGS='-fsanitize=undefined' GCC complains about unaligned access:
if custom allocator is used to allocate structs or other alignment-sensitive
things, then it must take care of the alignment (for example, add padding
to all unaligned blocks of memory which it allocates).

6 years agoAvoid calling 'memcpy' to copy zero bytes from NULL source.
Ulya Trofimovich [Mon, 31 Jul 2017 12:30:44 +0000 (13:30 +0100)]
Avoid calling 'memcpy' to copy zero bytes from NULL source.

With CXXFLAGS='-fsanitize=undefined' GCC complains about passing NULL
pointer to function which parameter is marked as 'attribute__((nonnull))'.

6 years agoFixed MINGW warnings.
Ulya Trofimovich [Mon, 31 Jul 2017 11:40:07 +0000 (12:40 +0100)]
Fixed MINGW warnings.

6 years agoAdded some more suggestions for pre-release testing.
Ulya Trofimovich [Mon, 31 Jul 2017 11:03:28 +0000 (12:03 +0100)]
Added some more suggestions for pre-release testing.

6 years agoFixed GCC warnings with '-m32'.
Ulya Trofimovich [Mon, 31 Jul 2017 10:49:20 +0000 (11:49 +0100)]
Fixed GCC warnings with '-m32'.

6 years agoFixed some of the warnings that Clang emits with '-Weverythng'.
Ulya Trofimovich [Mon, 31 Jul 2017 10:29:36 +0000 (11:29 +0100)]
Fixed some of the warnings that Clang emits with '-Weverythng'.

6 years agoMerge remote-tracking branch 'origin/devel'.
Ulya Trofimovich [Sun, 30 Jul 2017 20:51:31 +0000 (21:51 +0100)]
Merge remote-tracking branch 'origin/devel'.

6 years agofix documentation issue #184 devel
Petr Skocik [Thu, 20 Apr 2017 15:53:25 +0000 (17:53 +0200)]
fix documentation issue #184

6 years agoManpage: removed occasionally copy-pasted section.
Ulya Trofimovich [Mon, 10 Apr 2017 12:43:02 +0000 (13:43 +0100)]
Manpage: removed occasionally copy-pasted section.

6 years agoAutogenerate help from manpage.
Ulya Trofimovich [Mon, 10 Apr 2017 12:41:17 +0000 (13:41 +0100)]
Autogenerate help from manpage.

6 years agoManpage: include paths must be relative to 'top_srcdir'.
Ulya Trofimovich [Sun, 9 Apr 2017 18:36:28 +0000 (19:36 +0100)]
Manpage: include paths must be relative to 'top_srcdir'.

Otherwise out-of-source builds won't work.

6 years agocompose manpage out of rsts from gh-pages-gen
Petr Skocik [Sat, 8 Apr 2017 21:14:36 +0000 (23:14 +0200)]
compose manpage out of rsts from gh-pages-gen

6 years agosync --help output w/ manpage
Petr Skocik [Fri, 7 Apr 2017 23:29:38 +0000 (01:29 +0200)]
sync --help output w/ manpage

    + set output width to 80
    + make help output go to stdout rather than stderr

6 years agoGrammar fixes in the manpage
Petr Skocik [Mon, 3 Apr 2017 15:48:10 +0000 (17:48 +0200)]
Grammar fixes in the manpage

6 years agoRecognize newlines in character strings and classes.
Ulya Trofimovich [Mon, 7 Nov 2016 09:46:18 +0000 (09:46 +0000)]
Recognize newlines in character strings and classes.

As for now, newline inside of a character string or class is an error:
re2c should emit clear error message. Different styles of newlines
should be recognized ("\n", "\r\n").

This commit fixes bug #162 reported by pauloscustodio:
    Reading files with "rb" causes issues in Windows

6 years agoFixed line endings in output files on Windows (#162, #163).
Ulya Trofimovich [Sun, 30 Jul 2017 16:45:30 +0000 (17:45 +0100)]
Fixed line endings in output files on Windows (#162, #163).

This fix consists of two issues, both reported and fixed by pauloscustodio.

1. #162 "Open text files with "wb" causes issues on Windows"

    Text files need to be opened for writing with "w", so that stdio does
    the right thing in respect to the correct line endings for the current OS.
    ("\r\n" in Windows, "\n" in Linux).

2. #163 "Reading files with "rb" causes issues in Windows"

    re2c reads input files in binary mode and writes the generated output in
    text mode. This caused CR LF conversion to CR CR LF on Windows: first CR
    comes from reading input in binary mode, second CR is added when writing
    output in text mode. This only happened to those parts of input which are
    not transformed by re2c: we used to copy-paste verbatim, now we patch line
    endings. Now we convert all line endings to LF before writing the generated
    code to file.

6 years agoFixed #147 "Please add symbol name to "can't find symbol" error message".
Ulya Trofimovich [Sat, 25 Jun 2016 15:22:08 +0000 (16:22 +0100)]
Fixed #147 "Please add symbol name to "can't find symbol" error message".

As suggested by sirzooro:
    Please add symbol name to "can't find symbol" error message,
    it would allow to quickly spot what is wrong. Now we have to
    position cursor at given row and column to find that name.

Also tweaked error reporitng function to append "..." at the end
of the message if it didn't fit into buffer.

6 years agoFixed bug #145 "Values for enum YYCONDTYPE are not generated
Ulya Trofimovich [Fri, 24 Jun 2016 21:46:16 +0000 (22:46 +0100)]
Fixed bug #145 "Values for enum YYCONDTYPE are not generated
when default rules with conditions are used".

Default rule is handled in a special (delayed) way;
re2c uses different code for default rule than for normal rules.
This special code simply forgot to add condition name to the list
of conditions.

Thanks to sirzooro for bug report.

6 years agorun_tests.sh: fix permissions after copying source files to build directory.
Ulya Trofimovich [Sun, 9 Apr 2017 18:28:28 +0000 (19:28 +0100)]
run_tests.sh: fix permissions after copying source files to build directory.

`make distcheck` protects source files from writing.
Test script run_tests.sh copies source files into build directory,
but the copied files inherit permissions, so `make distcheck` fails.

6 years agorun_tests.sh: patch line endings in the generated file.
Ulya Trofimovich [Sat, 5 Nov 2016 15:24:02 +0000 (15:24 +0000)]
run_tests.sh: patch line endings in the generated file.

Line endings in the generated code depend on the target platform: e.g.,
"\r\n" on Windows vs. "\n" on Linux. However, reference test results are
(currently) generated on Linux and therefore contain "\n" line endings.
So we have to patch line endings in the generated code in order to pass
the tests on Windows.

Testing script did patch line endings in stdout and stderr, but forgot
to patch them in the generated file (it was broken since we started to
use '-o' option for testing). This commit fixes testing script.

It also deletes a couple of tests in which source code contains "\r\n"
instead of "\n". These tests are duplicates of other tests (they were
added by commit bd2875441cae4ab3934bfafcd34728021295b842 supposedly to
test that re2c preserves line endings in source code). They are broken
by current commit and fixing them is probably not worth of the effort.

6 years agoFixed #141 "Tests under Windows".
Ulya Trofimovich [Fri, 29 Apr 2016 07:16:12 +0000 (08:16 +0100)]
Fixed #141 "Tests under Windows".

Thanks to Abs62, who noted that under Windows (in MSYS) tests fail
because '2>"$outc.stderr"' dumps CRLF to file instead of LF
and proposed a fix:
    sed -i 's/\r//g' "$outc.stderr"

6 years agoMakefile.am: removed inexistent header.
Ulya Trofimovich [Sun, 30 Jul 2017 10:46:31 +0000 (11:46 +0100)]
Makefile.am: removed inexistent header.

6 years agoUpdated paper on Lookahead TDFA.
Ulya Trofimovich [Sat, 29 Jul 2017 18:27:32 +0000 (19:27 +0100)]
Updated paper on Lookahead TDFA.

6 years agoExplicitly pass line/column info in all error messages.
Ulya Trofimovich [Sat, 29 Jul 2017 18:10:44 +0000 (19:10 +0100)]
Explicitly pass line/column info in all error messages.

Updated tests. Some error messages are more precise now, e.g. ill-formed
character classes and escape sequences: column points to the beginning
of the faulty lexeme rather than to the middle of it where the error
occured. Other error messages are less precise (lack column info), but
the column reported before was too inexact and didn't make much sense.

6 years agoRenamed simple tags into 'stags' and tags with history into 'mtags'.
Ulya Trofimovich [Fri, 28 Jul 2017 15:08:14 +0000 (16:08 +0100)]
Renamed simple tags into 'stags' and tags with history into 'mtags'.

YYTAGP                  -> YYSTAGP
YYTAGN                  -> YYSTAGN
YYTAGLISTP              -> YYMTAGP
YYTAGLISTN              -> YYMTAGN
/*!tags:re2c ... */     -> /*!stags:re2c ... */
/*!taglists:re2c ... */ -> /*!mtags:re2c ... */

Updated tests and benchmarks.

Fixed warning message in '-Wnondeterministic-tags'.

6 years agoPOSIX disambiguation: use the same comparison algorithm for orbit and non-orbit tags.
Ulya Trofimovich [Fri, 28 Jul 2017 10:17:10 +0000 (11:17 +0100)]
POSIX disambiguation: use the same comparison algorithm for orbit and non-orbit tags.

Previously we needed a different algorithm for non-orbit tags, because
disambiguation was based on both start and end tags. Non-orbit start tags
cannot be compared incrementally, like orbit tags, becuse default value
may be discovered on a later step than non-default value. Non-orbit end
tags do not have this problem: since negative tags are inserted at the end
of alternatives, default value is always discovered on the same step as
non-default value (provided that all higher-priority tags agree and
comparison reaches this tag at all).

Now that start tags are ignored, we can use incremental comparison for both
orbit and non-orbit subhistories, which simplifies the code.

6 years agoPaper on Lookahead TDFA: added benchmarks.
Ulya Trofimovich [Wed, 19 Jul 2017 17:43:33 +0000 (18:43 +0100)]
Paper on Lookahead TDFA: added benchmarks.

6 years agoReset '--no-lookahead' to default value if '--tags' is not enabled.
Ulya Trofimovich [Tue, 18 Jul 2017 12:56:48 +0000 (13:56 +0100)]
Reset '--no-lookahead' to default value if '--tags' is not enabled.

6 years agoApply tag version compaction even with '--no-optimize-tags'.
Ulya Trofimovich [Tue, 18 Jul 2017 12:54:46 +0000 (13:54 +0100)]
Apply tag version compaction even with '--no-optimize-tags'.

Otherwize RE2C emits too many unused tag variables and bloats the generated code.

6 years agoSplit source file in two.
Ulya Trofimovich [Mon, 17 Jul 2017 22:11:18 +0000 (23:11 +0100)]
Split source file in two.

6 years agoReplaced configuration 'no-lookahead' with 'lookahead' and updated test.
Ulya Trofimovich [Mon, 17 Jul 2017 22:06:55 +0000 (23:06 +0100)]
Replaced configuration 'no-lookahead' with 'lookahead' and updated test.

6 years agoAdded option '--no-optimize-tags' (switches off tag optimizations).
Ulya Trofimovich [Mon, 17 Jul 2017 22:03:53 +0000 (23:03 +0100)]
Added option '--no-optimize-tags' (switches off tag optimizations).

6 years agoFixed memory leak.
Ulya Trofimovich [Mon, 17 Jul 2017 21:38:20 +0000 (22:38 +0100)]
Fixed memory leak.

6 years agoForbid merging of tag variables for tags with and without history.
Ulya Trofimovich [Mon, 17 Jul 2017 21:36:02 +0000 (22:36 +0100)]
Forbid merging of tag variables for tags with and without history.

6 years agoAdded directive '/*!taglists:re2c ... */' to handle tags with history.
Ulya Trofimovich [Sun, 16 Jul 2017 11:13:04 +0000 (12:13 +0100)]
Added directive '/*!taglists:re2c ... */' to handle tags with history.

It is exactly like '/*!tags:re2c ... */', except that the latter is for
simple tags, while the former is for tags with history.

6 years agoPaper on Lookahead TDFA: added section about implementation.
Ulya Trofimovich [Wed, 12 Jul 2017 16:40:01 +0000 (17:40 +0100)]
Paper on Lookahead TDFA: added section about implementation.

6 years agoNicer output with '--dump-dfa-raw' and '--dump-nfa'.
Ulya Trofimovich [Wed, 12 Jul 2017 16:39:03 +0000 (17:39 +0100)]
Nicer output with '--dump-dfa-raw' and '--dump-nfa'.

6 years agoAllocate final/fallback tag versions beforehand.
Ulya Trofimovich [Tue, 11 Jul 2017 15:12:21 +0000 (16:12 +0100)]
Allocate final/fallback tag versions beforehand.

Just a more clear and intuitive way to allocate them, and easier
to document. Updated a lot of tests; changes are trivial.

6 years agoFirst part of the paper on Lookahead TDFA.
Ulya Trofimovich [Mon, 10 Jul 2017 13:43:28 +0000 (14:43 +0100)]
First part of the paper on Lookahead TDFA.

6 years agoNicer output with '--dump-dfa-raw' and '--posix-captures'.
Ulya Trofimovich [Fri, 7 Jul 2017 21:42:08 +0000 (22:42 +0100)]
Nicer output with '--dump-dfa-raw' and '--posix-captures'.

Don't add closure items to "shadowed" set if there is an identical
"unshadowed" item: otherwise Goldberg-Radzik algorithm generates too much
"shadowed" items and the output becomes too noisy.

6 years agoUse different closure algorithms for leftmost greedy and POSIX policies.
Ulya Trofimovich [Fri, 7 Jul 2017 14:08:23 +0000 (15:08 +0100)]
Use different closure algorithms for leftmost greedy and POSIX policies.

With leftmost greedy policy we can use simple depth-first search.
With POSIX policy we need Goldberg-Radzik algorithm, which is more complex
(and the necessity to accommodate both policies complicates it even more).

6 years agoFix for possible invalidated iterator after resize
Ryan Mast [Sun, 2 Jul 2017 19:59:09 +0000 (12:59 -0700)]
Fix for possible invalidated iterator after resize

6 years agoAdd const to newver_t operator()
Ryan Mast [Sat, 1 Jul 2017 23:08:17 +0000 (16:08 -0700)]
Add const to newver_t operator()

A certain set of compilers gives a compiler error due to losing
"const-volatile qualifiers"

6 years agoAllow trivial cycles (of length 1) in tag commands.
Ulya Trofimovich [Sun, 2 Jul 2017 08:05:29 +0000 (09:05 +0100)]
Allow trivial cycles (of length 1) in tag commands.

We forbid cycles of length 2 or more because they would need temporary
variable local to the basic block, which would complicate liveness
analysis. However, trivial cycles don't need a temporary.

6 years agoFixed typo that caused miscalculation of new tag version.
Ulya Trofimovich [Tue, 27 Jun 2017 14:40:42 +0000 (15:40 +0100)]
Fixed typo that caused miscalculation of new tag version.

6 years agoInvert comparison result instead of negating its arguments.
Ulya Trofimovich [Tue, 27 Jun 2017 13:14:33 +0000 (14:14 +0100)]
Invert comparison result instead of negating its arguments.

6 years agoSkip (non-orbit) start tags during POSIX disambiguation.
Ulya Trofimovich [Tue, 27 Jun 2017 13:05:26 +0000 (14:05 +0100)]
Skip (non-orbit) start tags during POSIX disambiguation.

Their position is fixed on some higher-priority tag (except the very
first tag, but in RE2C match is always anchored).
We cannot skip orbit start tag because the corresponding orbit end tag
is hoisted out of loop (by construction) and is, in fact, non-orbit.

6 years agoOnce again fixed history comparison for POSIX disambiguation.
Ulya Trofimovich [Tue, 27 Jun 2017 12:53:09 +0000 (13:53 +0100)]
Once again fixed history comparison for POSIX disambiguation.