From 2d566806c4fce03f9e996594616a9706a43c0783 Mon Sep 17 00:00:00 2001 From: Ulya Trofimovich Date: Tue, 20 Oct 2015 12:47:56 +0100 Subject: [PATCH] Manual. --- gen.sh | 3 +- ...e2c_a_more_versatile_scanner_generator.pdf | Bin 0 -> 283807 bytes src/changelog.rst | 467 +++++++++ src/index.rst | 27 +- src/manpage.rst | 929 ----------------- src/manual.rst | 941 ++++++++++++++++++ src/{options.rst => options/options_list.rst} | 0 src/options/warnings_list.rst | 56 ++ 8 files changed, 1469 insertions(+), 954 deletions(-) create mode 100644 src/1994_bumbulis_cowan_re2c_a_more_versatile_scanner_generator.pdf create mode 100644 src/changelog.rst delete mode 100644 src/manpage.rst rename src/{options.rst => options/options_list.rst} (100%) create mode 100644 src/options/warnings_list.rst diff --git a/gen.sh b/gen.sh index aa0e0fe2..f7554a7f 100755 --- a/gen.sh +++ b/gen.sh @@ -8,5 +8,6 @@ cp -R "$srcdir" "$objdir" for f in `find "$objdir" -type f -name "*.rst"` do - rst2html.py --link-stylesheet --stylesheet="css/default.css" "$f" > "${f%.rst}.html" + rst2html.py --stylesheet="$objdir/css/default.css" "$f" > "${f%.rst}.html" +# rst2html.py --link-stylesheet --stylesheet="css/default.css" "$f" > "${f%.rst}.html" done diff --git a/src/1994_bumbulis_cowan_re2c_a_more_versatile_scanner_generator.pdf b/src/1994_bumbulis_cowan_re2c_a_more_versatile_scanner_generator.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c661f18e2fb30eeba873f98a46593b23a74d97c9 GIT binary patch literal 283807 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 literal 0 HcmV?d00001 diff --git a/src/changelog.rst b/src/changelog.rst new file mode 100644 index 00000000..9f3b8619 --- /dev/null +++ b/src/changelog.rst @@ -0,0 +1,467 @@ +* 2015-02-23: 0.14 + - Added generic input API (#21 "Support to configure how re2c code interfaced with the symbol buffer?") + - fixed #46 "re2c generates an infinite loop, depends on existence of previous parser" + - fixed #47 "Dot output label escaped characters" + +* 2014-08-22: 0.13.7.5 + + - Fixed `Gentoo bug with PHP lexer `_ + +* 2014-07-29: 0.13.7.4 + + - Enabled ``make docs`` only if configured with ``--enable-docs`` + - Disallowed to use yacc/byacc instead of bison to build parser + - Removed non-portable sed feature in script that runs tests + +* 2014-07-27: 0.13.7.3 + + - Fixed CXX warning + - Got rid of asciidoc build-time dependency + +* 2014-07-27: 0.13.7.2 + + - Included man page into dist, respect users CXXFLAGS. + +* 2014-07-26: 0.13.7.1 + + - Added missing files to tarball + +* 2014-07-25: 0.13.7 + + - Added UTF-8 support + - Added UTF-16 support + - Added default rule + - Added option to control ill-formed Unicode + +* 2013-07-04: 0.13.6 + + - Fixed #2535084 uint problem with Sun C 5.8 + - #3308400: allow Yacc-style ``%{`` code brackets ``}%`` + - #2506253: allow C++ ``//`` comments + - Fixed inplace configuration in ``-e`` mode. + - Applied #2482572 Typos in error messages. + - Applied #2482561 Error in manual section on ``-r`` mode. + - Fixed #2478216 Wrong ``start_label`` in ``-c`` mode. + - Fixed #2186718 Unescaped backslash in file name of ``#line`` directive. + - Fixed #2102138 Duplicate case labels on EBCDIC. + - Fixed #2088583 Compile problem on AIX. + - Fixed #2038610 Ebcdic problem. + - improve dot support: make char intervals (e.g. ``[A-Z]``) instead of one edge per char + +* 2008-05-25: 0.13.5 + + - Fixed #1952896 Segfault in ``re2c::Scanner::scan``. + - Fixed #1952842 Regression. + +* 2008-04-05: 0.13.4 + + - Added transparent handling of ``#line`` directives in input files. + - Added ``re2c:yyfill:check`` inplace configuration. + - Added ``re2c:define:YYSETSTATE:naked`` inplace configuration. + - Added ``re2c:flags:w`` and ``re2c:flags:u`` inplace configurations. + - Added the ability to add rules in ``use:re2c`` blocks. + - Changed ``-r`` flag to accept only ``rules:re2c`` and ``use:re2c`` blocks. + +* 2008-03-14: 0.13.3 + + - Added ``-r`` flag to allow reuse of scanner definitions. + - Added ``-F`` flag to support flex syntax in rules. + - Fixed SEGV in scanner that occurs with very large blocks. + - Fixed issue with unused ``yybm``. + - Partial support for flex syntax. + - Changed to allow ``/*`` comments with ``-c`` switch. + - Added flag ``-D/--emit-dot``. + +* 2008-02-14: 0.13.2 + + - Added flag ``--case-inverted``. + - Added flag ``--case-insensitive``. + - Added support for ```` to enable rule setup. + - Added support for ``=>`` style rules. + - Added support for ``:=`` style rules. + - Added support for ``:=>`` style rules. + - Added ``re2c:cond:divider`` and ``re2c:cond:goto`` inplace configuration. + - Fixed code generation to emit space after ``if``. + +* 2007-08-24: 0.13.1 + + - Added custom build rules for Visual Studio 2005 (``re2c.rules``). (William Swanson) + - Fixed issue with some compilers. + - Fixed #1776177 Build on AIX. + - Fixed #1743180 ``fwrite`` with 0 length crashes on OS X. + +* 2007-06-24: 0.13.0 + + - Added ``-c`` and ``-t`` to generate scanners with (f)lex-like condition support. + - Fixed issue with short form of switches and parameter if not first switch. + - Fixed #1708378 segfault ``in actions.cc``. + +* 2007-08-24: 0.12.3 + + - Fixed issue with some compilers. + - Fixed #1776177 Build on AIX. + - Fixed #1743180 ``fwrite`` with 0 length crashes on OS X. + +* 2007-06-26: 0.12.2 + + - Fixed #1743180 ``fwrite`` with 0 length crashes on OS X. + +* 2007-05-23: 0.12.1 + + - Fixed #1711240 problem with ``"`` and ``7F`` on EBCDIC plattforms. + +* 2007-05-01: 0.12.0 + + - Re-release of 0.11.3 as new stable branch. + - Fixed issue with short form of switches and parameter if not first switch. + - Fixed #1708378 segfault in ``actions.cc``. + - re2c 0.12.0 has been tested with the following compilers: + + gcc version 4.1.2 (Gentoo 4.1.2) + + gcc version 4.1.2 20070302 (prerelease) (4.1.2-1mdv2007.1) + + gcc version 4.1.2 20061115 (prerelease) (Debian 4.1.1-21) + + gcc version 4.1.1 20070105 (Red Hat 4.1.1-51) + + gcc version 4.1.0 (SUSE Linux 10) + + gcc version 4.0.3 (4.0.3-0.20060215.2mdk for Mandriva Linux release 2006.1) + + gcc version 4.0.2 20050901 (prerelease) (SUSE Linux) (32 + 64 bit) + + MacPPC, gcc version 4.0.1 (Apple Computer, Inc. build 5367) + + MacIntel, gcc version 4.0.1 (Apple Computer, Inc. build 5250) + + gcc version 3.4.4 [FreeBSD] 20050518 (32 + 64 bit) + + gcc version 3.4.4 (cygming special) (gdc 0.12, using dmd 0.125) + + gcc version 3.4.2 [FreeBSD] + + gcc version 3.3.5 20050117 (prerelease) (SUSE Linux) + + gcc version 3.3.3 (PPC, 32 + 64 bit) + + Microsoft (R) C/C++ Optimizing Compiler Version 14.00.50727.762 for x64 (64 bit) + + Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.42 for 80x86 (Microsoft Visual C++ 2005) + + Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.10.3077 for 80x86 (Mictosoft Visual C++ 2003) + + Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.00.9466 for 80x86 (Microsoft Visual C++ 2002) + + Intel(R) C++ Compiler for 32-bit applications, Version 9.1 Build 20070322Z Package ID: W_CC_C_9.1.037 + + Intel(R) C++ Compiler for Intel(R) EM64T-based applications, Version 9.1 (64 bit) + + icpcbin (ICC) 9.1 20070215 + + CC: Sun C++ 5.8 2005/10/13 (``CXXFLAGS='-library=stlport4'``) + + MIPSpro Compilers: Version 7.4.4m (32 + 64 bit) + + aCC: HP C/aC++ B3910B A.06.15 [Mar 28 2007] (HP-UX IA64) + +* 2007-04-01: 0.11.3 + + - Added support for underscores in named definitions. + - Added new option ``--no-generation-date``. + - Fixed issue with long form of switches. + +* 2007-03-01: 0.11.2 + + - Added inplace configuration ``re2c:yyfill:parameter``. + - Added inplace configuration ``re2c:yych:conversion``. + - Fixed ``-u`` switch code generation. + - Added ability to avoid defines and overwrite generated variable names. + +* 2007-02-20: 0.11.1 + + - Applied #1647875 Add ``const`` to ``yybm`` vector. + +* 2007-01-01: 0.11.0 + + - Added ``-u`` switch to support unicode. + +* 2007-04-01: 0.10.8 + + - Fixed issue with long form of switches. + +* 2007-02-20: 0.10.7 + + - Applied #1647875 Add ``const`` to ``yybm`` vector. + +* 2006-08-05: 0.10.6 + + - Fixed #1529351 Segv bug on unterminated code blocks. + - Fixed #1528269 Invalid code generation. + +* 2006-06-11: 0.10.5 + + - Fixed long form of ``-1`` switch to ``--single-pass`` as noted in man page and help. + - Added MSVC 2003 project files and renamed old 2002 ones. + +* 2006-06-01: 0.10.4 + + - Fix whitespace in generated code. + +* 2006-05-14: 0.10.3 + + - Fixed issue with ``-wb`` and ``-ws``. + - Added ``-g`` switch to support gcc's computed goto's. + - Changed to use nested ``if``'s instead of ``switch(yyaccept)`` in ``-s`` mode. + +* 2006-05-01: 0.10.2 + + - Changed to generate ``YYMARKER`` only when needed or in single pass mode. + - Added ``-1`` switch to force single pass generation and make two pass the default. + - Fixed ``-i`` switch. + - Added configuration ``yyfill:enable`` to allow suppression of ``YYFILL()`` blocks. + - Added tutorial like lessons to re2c. + - Added ``/*!ignore:re2c */`` to support documenting of re2c source. + - Fixed issue with multiline re2c comments (``/*!max:re2c ... */`` and alike). + - Fixed generation of ``YYDEBUG()`` when using ``-d`` switch. + - Added ``/*!getstate:re2c */`` which triggers generation of the ``YYGETSTATE()`` block. + - Added configuration ``state:abort``. + - Changed to not generate ``yyNext`` unless configuration ``state:nextlabel`` is used. + - Changed to not generate ``yyaccept`` code unless needed. + - Changed to use ``if`` instead of ``switch`` expression when ``yyaccpt`` has only one case. + - Added docu, examples and tests to ``.src.zip`` package (0.10.1 zip was repackaged). + - Fixed #1479044 incorrect code generated when using ``-b``. + - Fixed #1472770 re2c creates an infinite loop. + - Fixed #1454253 Piece of code saving a backtracking point not generated. + - Fixed #1463639 Missing forward declaration. + - Implemented #1187127 savable state support for multiple re2c blocks. + - re2c 0.10.2 has been tested with the following compilers: + + gcc (GCC) 4.1.0 (Gentoo 4.1.0) + + gcc version 4.0.3 (4.0.3-0.20060215.2mdk for Mandriva Linux release 2006.1) + + gcc version 4.0.2 20050901 (prerelease) (SUSE Linux) + + gcc (GCC) 3.4.5 (Gentoo 3.4.5, ssp-3.4.5-1.0, pie-8.7.9) + + gcc version 3.4.4 [FreeBSD] 20050518 + + gcc version 3.4.4 (cygming special) (gdc 0.12, using dmd 0.125) + + gcc version 3.4.2 20041017 (Red Hat 3.4.2-6.fc3) + + gcc-Version 3.3.5 (Debian 1:3.3.5-13) + + gcc-Version 3.3.0 (mips-sgi-irix6.5/3.3.0/specs) + + MIPSpro Compilers: Version 7.4.4m + + Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.42 for 80x86 (Microsoft Visual C++ 2005) + + Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.10.3077 for 80x86 (Mictosoft Visual C++ 2003) + + Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.00.9466 for 80x86 (Microsoft Visual C++ 2002) + + Intel(R) C++ Compiler for Intel(R) EM64T-based applications, Version 9.0 Build 20050430 Package ID: l_cc_p_9.0.021 + + CC: Sun C++ 5.8 2005/10/13 (``CXXFLAGS='-library=stlport4'``) + + bison 2.1, 1.875d, 1.875b, 1.875 + +* 2006-02-28: 0.10.1 + + - Added support for Solaris and native SUN compiler. + - Applied #1438160 expose ``YYCTXMARKER``. + - re2c 0.10.1 has been tested with the following compilers: + + gcc version 4.0.3 (4.0.3-0.20060215.2mdk for Mandriva Linux release 2006.1) + + gcc version 4.0.2 (4.0.2-1mdk for Mandriva Linux release 2006.1) + + gcc version 4.0.2 20050901 (prerelease) (SUSE Linux) + + gcc version 3.4.4 (cygming special) (gdc 0.12, using dmd 0.125) + + gcc-Version 3.3.5 (Debian 1:3.3.5-13) + + gcc-Version 3.3.0 (mips-sgi-irix6.5/3.3.0/specs) + + MIPSpro Compilers: Version 7.4.4m + + Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.42 for 80x86 (Microsoft Visual C 2005) + + Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.00.9466 for 80x86 (Microsoft Visual C 2002) + + Intel(R) C++ Compiler for 32-bit applications, Version 9.0 Build 20051130Z Package ID: W_CC_C_9.0.028 + + CC: Sun C++ 5.8 2005/10/13 (``CXXFLAGS='-compat5 -library=stlport4'``) + + bison 2.1, 1.875d, 1.875b, 1.875 + +* 2006-02-18: 0.10.0 + + - Added make target ``zip`` to create windows source packages as zip files. + - Added ``re2c:startlabel`` configuration. + - Fixed code generation to not generate unreachable code for initial state. + - Added support for c/c++ compatible ``\u`` and ``\U`` unicode notation. + - Added ability to control indendation. + - Made scanner error out in case an ambiguous ``/*`` is found. + - Fixed indendation of generated code. + - Added support for DOS line endings. + - Added experimental unicode support. + - Added ``config_w32.h`` to build out of the box on windows (using msvc 2002+). + - Added Microsoft Visual C .NET 2005 build files. + - Applied #1411087 variable length trailing context. + - Applied #1408326 do not generate ``goto`` next state. + - Applied #1408282 ``CharSet`` initialization fix. + - Applied #1408278 ``readsome`` with MSVC. + - Applied #1307467 Unicode patch for 0.9.7. + +* 2005-12-28: 0.9.12 + + - Fixed bug #1390174 re2c cannot accept ``{0,}``. + +* 2005-12-18: 0.9.11 + + - Fixed #1313083 ``-e`` (EBCDIC cross compile) broken. + - Fixed #1297658 underestimation of ``n`` in ``YYFILL(n)``. + - Applied #1339483 Avoid rebuilds of re2c when running subtargets. + - Implemented #1335305 symbol table reimplementation, just slightly modifed. + +* 2005-09-04: 0.9.10 + + - Add ``-i`` switch to avoid generating ``#line`` information. + - Fixed bug #1251653 re2c generate some invalid ``#line`` on WIN32. + +* 2005-07-21: 0.9.9 + + - Implemented #1232777 negated char classes ``[^...]`` and the dot operator ``.``. + - Added hexadecimal character definitions. + - Added consistency check for octal character definitions. + +* 2005-06-26: 0.9.8 + + - Fixed code generation for ``-b`` switch. + - Added Microsoft Visual C .NET build files. + +* 2005-04-30: 0.9.7 + + - Applied #1181535 storable state patch. + - Added ``-d`` flag which outputs a debugable parser. + - Fixed generation of ``#line`` directives (according to ISO-C99). + - Fixed bug #1187785 Re2c fails to generate valid code. + - Fixed bug #1187452 unused variable ``yyaccept``. + +* 2005-04-14: 0.9.6 + + - Fix build with gcc >= 3.4. + +* 2005-04-08: 0.9.5 + + - Added ``/*!max:re2c */`` which emits ``#define YYMAXFILL `` + line. This allows to define buffers of the minimum required length. + Occurence must follow ``/*re2c */`` and cannot preceed it. + - Changed re2c to two pass generation to output warning free code. + - Fixed bug #1163046 re2c hangs when processing valid re-file. + - Fixed bug #1022799 re2c scanner has buffering bug. + +* 2005-03-12: 0.9.4 + + - Added ``--vernum`` support. + - Fixed bug #1054496 incorrect code generated with ``-b`` option. + - Fixed bug #1012748 re2c does not emit last line if ``\n`` missing. + - Fixed bug #999104 ``--output=output`` option does not work as documented. + - Fixed bug #999103 Invalid options prefixed with two dashes cause program crash. + +* 2004-05-26: 0.9.3 + + - Fixes one small possible bug in the generated output. ``ych`` instead of ``yych`` is output in certain circumstances. + +* 2004-05-26: 0.9.2 + + - Added ``-o`` option to specify the output file which also will set the ``#line`` directives to something useful. + - Print version to ``cout`` instead of ``cerr``. + - Added ``-h`` and ``--`` style options. + - Moved development to http://sourceforge.net/projects/re2c + - Fixed bug #960144 minor cosmetic problem. + - Fixed bug #953181 cannot compile with. + - Fixed bug #939277 Windows support. + - Fixed bug #914462 automake build patch + - Fixed bug #891940 braced quantifiers: ``{\d+(,|,\d+)?}`` style. + - Fixed bug #869298 Add case insensitive string literals. + - Fixed bug #869297 Input buffer overrun. + +* 2003-12-13: 0.9.1 + + - Removed rcs comments in source files. + +* 2003-12-09: re2c adopted + - Version 0.9.1 README:: + + Originally written by Peter Bumbulis (peter@csg.uwaterloo.ca) + Currently maintained by Brian Young (bayoung@acm.org) + + The re2c distribution can be found at: + http://www.tildeslash.org/re2c/index.html + + The source distribution is available from: + http://www.tildeslash.org/re2c/re2c-0.9.1.tar.gz + + This distribution is a cleaned up version of the 0.5 release + maintained by me (Brian Young). Several bugs were fixed as well + as code cleanup for warning free compilation. It has been + developed and tested with egcs 1.0.2 and gcc 2.7.2.3 on Linux x86. + Peter Bumbulis' original release can be found at: + ftp://csg.uwaterloo.ca/pub/peter/re2c.0.5.tar.gz + + re2c is a great tool for writing fast and flexible lexers. + It has served many people well for many years and it deserves + to be maintained more actively. re2c is on the order of 2-3 + times faster than a flex based scanner, and its input model + is much more flexible. + + Patches and requests for features will be entertained. Areas + of particular interest to me are porting (a Solaris and an NT + version will be forthcoming) and wide character support. Note + that the code is already quite portable and should be buildable + on any platform with minor makefile changes. + + - Version 0.5 Peter's original ANNOUNCE and README:: + + re2c is a tool for generating C-based recognizers from regular + expressions. re2c-based scanners are efficient: for programming + languages, given similar specifications, an re2c-based scanner + is typically almost twice as fast as a flex-based scanner with + little or no increase in size (possibly a decrease on cisc + architectures). Indeed, re2c-based scanners are quite competitive + with hand-crafted ones. + + Unlike flex, re2c does not generate complete scanners: the user + must supply some interface code. While this code is not bulky + (about 50-100 lines for a flex-like scanner; see the man page + and examples in the distribution) careful coding is required for + efficiency (and correctness). One advantage of this arrangement + is that the generated code is not tied to any particular input + model. For example, re2c generated code can be used to scan + data from a null-byte terminated buffer as illustrated below. + + Given the following source: + + #define NULL ((char*) 0) + char *scan(char *p) { + char *q; + #define YYCTYPE char + #define YYCURSOR p + #define YYLIMIT p + #define YYMARKER q + #define YYFILL(n) + /*!re2c + [0-9]+ {return YYCURSOR;} + [\000-\377] {return NULL;} + */ + } + + re2c will generate: + + /* Generated by re2c on Sat Apr 16 11:40:58 1994 */ + #line 1 "simple.re" + #define NULL ((char*) 0) + char *scan(char *p) { + char *q; + #define YYCTYPE char + #define YYCURSOR p + #define YYLIMIT p + #define YYMARKER q + #define YYFILL(n) + { + YYCTYPE yych; + unsigned int yyaccept; + goto yy0; + yy1: ++YYCURSOR; + yy0: + if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); + yych = *YYCURSOR; + if(yych <= '/') goto yy4; + if(yych >= ':') goto yy4; + yy2: yych = *++YYCURSOR; + goto yy7; + yy3: + #line 10 + {return YYCURSOR;} + yy4: yych = *++YYCURSOR; + yy5: + #line 11 + {return NULL;} + yy6: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + yy7: if(yych <= '/') goto yy3; + if(yych <= '9') goto yy6; + goto yy3; + } + #line 12 + + } + + Note that most compilers will perform dead-code elimination to + remove all YYCURSOR, YYLIMIT comparisions. + + re2c was developed for a particular project (constructing a fast + REXX scanner of all things!) and so while it has some rough edges, + it should be quite usable. More information about re2c can be + found in the (admittedly skimpy) man page; the algorithms and + heuristics used are described in an upcoming LOPLAS article + (included in the distribution). Probably the best way to find out + more about re2c is to try the supplied examples. re2c is written in + C++, and is currently being developed under Linux using gcc 2.5.8. + + Peter diff --git a/src/index.rst b/src/index.rst index 3eebbb5e..8be659d6 100644 --- a/src/index.rst +++ b/src/index.rst @@ -18,27 +18,6 @@ and flexible (easy to embed into existing environment). -------------------------------------------------------------------------------- -Authors -~~~~~~~ - -Originally written by Peter Bumbulis in 1994. -Since then many people have contributed to re2c: Brian Young, Dan Nuffer, Marcus Börger, -Hartmut Kaiser, Emmanuel Mogenet, Ulya Trofimovich (`let me know `_ if I missed someone). - -Licence -~~~~~~~ - -re2c is distributed with no warranty whatever. -The code is certain to contain errors. -Neither the author nor any contributor takes responsibility for any consequences of its use. -re2c is in the public domain. The data structures and algorithms used -in re2c are all either taken from documents available to the general -public or are inventions of the author. Programs generated by re2c may -be distributed freely. re2c itself may be distributed freely, in source -or binary, unchanged or modified. Distributors may charge whatever fees -they can obtain for re2c. If you do make use of re2c, or incorporate it into a larger project an -acknowledgement somewhere (documentation, research report, etc.) would -be appreciated. - -Please send bug reports and feedback to `re2c-devel `_ and -`re2c-general `_ mailing lists. +Please send feedback to `re2c-devel `_ and +`re2c-general `_ mailing lists +or `report a bug `_. diff --git a/src/manpage.rst b/src/manpage.rst deleted file mode 100644 index c8d77ac6..00000000 --- a/src/manpage.rst +++ /dev/null @@ -1,929 +0,0 @@ -==== -re2c -==== - ------------------------------------------ -convert regular expressions to C/C++ code ------------------------------------------ - -:Manual section: 1 - -SYNOPSIS --------- - -``re2c [OPTIONS] FILE`` - -DESCRIPTION ------------ - -``re2c`` is a lexer generator for C/C++. It finds regular expression -specifications inside of C/C++ comments and replaces them with a -hard-coded DFA. The user must supply some interface code in order to -control and customize the generated DFA. - -EXAMPLE -------- - -Given the following code: - -.. code-block:: c - - unsigned int stou (const char \* s) - { - # define YYCTYPE char const - YYCTYPE * YYCURSOR = s; - unsigned int result = 0; - for (;;) - { - /*!re2c - re2c:yyfill:enable = 0; - - "\x00" { return result; } - [0-9] { result = result * 10 + c; continue; } - */ - } - } - -``re2c -is`` will generate: - -.. code-block:: c - - /* Generated by re2c 0.13.7.dev on Mon Jul 14 13:37:46 2014 */ - unsigned int stou (const char * s) - { - # define YYCTYPE char - const YYCTYPE * YYCURSOR = s; - unsigned int result = 0; - - for (;;) - { - { - YYCTYPE yych; - - yych = *YYCURSOR; - if (yych <= 0x00) goto yy3; - if (yych <= '/') goto yy2; - if (yych <= '9') goto yy5; - - yy2: - yy3: - ++YYCURSOR; - { return result; } - yy5: - ++YYCURSOR; - { result = result * 10 + c; continue; } - } - } - } - -.. _OPTIONS: - -OPTIONS -------- - -.. include:: options.rst - -WARNINGS --------- - -``-W`` - Turn on all warnings. - -``-Werror`` - Turn warnings into errors. Note that this option along - doesn't turn on any warnings, it only affects those warnings that have - been turned on so far or will be turned on later. - -``-W`` - Turn on individual ``warning``. - -``-Wno-`` - Turn off individual ``warning``. - -``-Werror-`` - Turn on individual ``warning`` and treat it as error (this implies ``-W``). - -``-Wno-error-`` - Don't treat this particular ``warning`` as error. This doesn't turn off - the warning itself. - -``-Wcondition-order`` - Warn if the generated program makes implicit - assumptions about condition numbering. One should use either ``-t, --type-header`` option or - ``/*!types:re2c*/`` directive to generate mapping of condition names to numbers and use - autogenerated condition names. - -``-Wempty-character-class`` - Warn if regular expression contains empty - character class. From the rational point of view trying to match empty - character class makes no sense: it should always fail. However, for - backwards compatibility reasons ``re2c`` allows empty character class and - treats it as empty string. Use ``--empty-class`` option to change default - behaviour. - -``-Wmatch-empty-string`` - Warn if regular expression in a rule is - nullable (matches empty string). If DFA runs in a loop and empty match - is unintentional (input position in not advanced manually), lexer may - get stuck in eternal loop. - -``-Wswapped-range`` - Warn if range lower bound is greater that upper - bound. Default ``re2c`` behaviour is to silently swap range bounds. - -``-Wundefined-control-flow`` - Warn if some input strings cause undefined - control flow in lexer (the faulty patterns are reported). This is the - most dangerous and common mistake. It can be easily fixed by adding - default rule ``*`` (this rule has the lowest priority, matches any code unit and consumes - exactly one code unit). - -``-Wuseless-escape`` - Warn if a symbol is escaped when it shouldn't be. - By default re2c silently ignores escape, but this may as well indicate a - typo or an error in escape sequence. - -INTERFACE CODE --------------- - -The user must supply interface code either in the form of C/C++ code -(macros, functions, variables, etc.) or in the form of `INPLACE CONFIGURATIONS`_. -Which symbols must be defined and which are optional -depends on a particular use case. - -``YYCONDTYPE`` - In ``-c`` mode you can use ``-t`` to generate a file that - contains the enumeration used as conditions. Each of the values refers - to a condition of a rule set. - -``YYCTXMARKER`` - l-value of type ``YYCTYPE *``. - The generated code saves trailing context backtracking information in - ``YYCTXMARKER``. The user only needs to define this macro if a scanner - specification uses trailing context in one or more of its regular - expressions. - -``YYCTYPE`` - Type used to hold an input symbol (code unit). Usually - ``char`` or ``unsigned char`` for ASCII, EBCDIC and UTF-8, *unsigned short* - for UTF-16 or UCS-2 and ``unsigned int`` for UTF-32. - -``YYCURSOR`` - l-value of type ``YYCTYPE *`` that points to the current input symbol. The generated code advances - ``YYCURSOR`` as symbols are matched. On entry, ``YYCURSOR`` is assumed to - point to the first character of the current token. On exit, ``YYCURSOR`` - will point to the first character of the following token. - -``YYDEBUG (state, current)`` - This is only needed if the ``-d`` flag was - specified. It allows to easily debug the generated parser by calling a - user defined function for every state. The function should have the - following signature: ``void YYDEBUG (int state, char current)``. The first - parameter receives the state or -1 and the second parameter receives the - input at the current cursor. - -``YYFILL (n)`` - The generated code "calls"" ``YYFILL (n)`` when the - buffer needs (re)filling: at least ``n`` additional characters should be - provided. ``YYFILL (n)`` should adjust ``YYCURSOR``, ``YYLIMIT``, ``YYMARKER`` - and ``YYCTXMARKER`` as needed. Note that for typical programming languages - ``n`` will be the length of the longest keyword plus one. The user can - place a comment of the form ``/*!max:re2c*/`` to insert ``YYMAXFILL`` definition that is set to the maximum - length value. - -``YYGETCONDITION ()`` - This define is used to get the condition prior to - entering the scanner code when using ``-c`` switch. The value must be - initialized with a value from the enumeration ``YYCONDTYPE`` type. - -``YYGETSTATE ()`` - The user only needs to define this macro if the ``-f`` - flag was specified. In that case, the generated code "calls" - ``YYGETSTATE ()`` at the very beginning of the scanner in order to obtain - the saved state. ``YYGETSTATE ()`` must return a signed integer. The value - must be either -1, indicating that the scanner is entered for the first - time, or a value previously saved by ``YYSETSTATE (s)``. In the second - case, the scanner will resume operations right after where the last - ``YYFILL (n)`` was called. - -``YYLIMIT`` - Expression of type ``YYCTYPE *`` that marks the end of the buffer ``YYLIMIT[-1]`` - is the last character in the buffer). The generated code repeatedly - compares ``YYCURSOR`` to ``YYLIMIT`` to determine when the buffer needs - (re)filling. - -``YYMARKER`` - l-value of type ``YYCTYPE *``. - The generated code saves backtracking information in ``YYMARKER``. Some - easy scanners might not use this. - -``YYMAXFILL`` - This will be automatically defined by ``/*!max:re2c*/`` blocks as explained above. - -``YYSETCONDITION (c)`` - This define is used to set the condition in - transition rules. This is only being used when ``-c`` is active and - transition rules are being used. - -``YYSETSTATE (s)`` - The user only needs to define this macro if the ``-f`` - flag was specified. In that case, the generated code "calls" - ``YYSETSTATE`` just before calling ``YYFILL (n)``. The parameter to - ``YYSETSTATE`` is a signed integer that uniquely identifies the specific - instance of ``YYFILL (n)`` that is about to be called. Should the user - wish to save the state of the scanner and have ``YYFILL (n)`` return to - the caller, all he has to do is store that unique identifer in a - variable. Later, when the scannered is called again, it will call - ``YYGETSTATE ()`` and resume execution right where it left off. The - generated code will contain both ``YYSETSTATE (s)`` and ``YYGETSTATE`` even - if ``YYFILL (n)`` is being disabled. - -SYNTAX ------- - -Code for ``re2c`` consists of a set of `RULES`_, `NAMED DEFINITIONS`_ and -`INPLACE CONFIGURATIONS`_. - -.. _RULES: - -RULES -~~~~~ - -Rules consist of a regular expression (see `REGULAR EXPRESSIONS`_) along with a block of C/C++ code -that is to be executed when the associated regular expression is -matched. You can either start the code with an opening curly brace or -the sequence ``:=``. When the code with a curly brace then ``re2c`` counts the brace depth -and stops looking for code automatically. Otherwise curly braces are not -allowed and ``re2c`` stops looking for code at the first line that does -not begin with whitespace. If two or more rules overlap, the first rule -is preferred. - - ``regular-expression { C/C++ code }`` - - ``regular-expression := C/C++ code`` - -There is one special rule: default rule ``*`` - - ``* { C/C++ code }`` - - ``* := C/C++ code`` - -Note that default rule ``*`` differs from ``[^]``: default rule has the lowest priority, -matches any code unit (either valid or invalid) and always consumes one character; -while ``[^]`` matches any valid code point (not code unit) and can consume multiple -code units. In fact, when variable-length encoding is used, ``*`` -is the only possible way to match invalid input character (see `ENCODINGS`_ for details). - -If ``-c`` is active then each regular expression is preceeded by a list -of comma separated condition names. Besides normal naming rules there -are two special cases: ``<*>`` (such rules are merged to all conditions) -and ``<>`` (such the rule cannot have an associated regular expression, -its code is merged to all actions). Non empty rules may further more specify the new -condition. In that case ``re2c`` will generate the necessary code to -change the condition automatically. Rules can use ``:=>`` as a shortcut -to automatically generate code that not only sets the -new condition state but also continues execution with the new state. A -shortcut rule should not be used in a loop where there is code between -the start of the loop and the ``re2c`` block unless ``re2c:cond:goto`` -is changed to ``continue``. If code is necessary before all rules (though not simple jumps) you -can doso by using ```` pseudo-rules. - - `` regular-expression { C/C++ code }`` - - `` regular-expression := C/C++ code`` - - `` * { C/C++ code }`` - - `` * := C/C++ code`` - - `` regular-expression => condition { C/C++ code }`` - - `` regular-expression => condition := C/C++ code`` - - `` * => condition { C/C++ code }`` - - `` * => condition := C/C++ code`` - - `` regular-expression :=> condition`` - - - ``<*> regular-expression { C/C++ code }`` - - ``<*> regular-expression := C/C++ code`` - - ``<*> * { C/C++ code }`` - - ``<*> * := C/C++ code`` - - ``<*> regular-expression => condition { C/C++ code }`` - - ``<*> regular-expression => condition := C/C++ code`` - - ``<*> * => condition { C/C++ code }`` - - ``<*> * => condition := C/C++ code`` - - ``<*> regular-expression :=> condition`` - - - ``<> { C/C++ code }`` - - ``<> := C/C++ code`` - - ``<> => condition { C/C++ code }`` - - ``<> => condition := C/C++ code`` - - ``<> :=> condition`` - - ``<> :=> condition`` - - - `` { C/C++ code }`` - - `` := C/C++ code`` - - `` { C/C++ code }`` - - `` := C/C++ code`` - -.. _NAMED DEFINITIONS: - -NAMED DEFINITIONS -~~~~~~~~~~~~~~~~~ - -Named definitions are of the form: - - ``name = regular-expression;`` - -If ``-F`` is active, then named definitions are also of the form: - - ``name { regular-expression }`` - - - -.. _INPLACE CONFIGURATIONS: - -INPLACE CONFIGURATIONS -~~~~~~~~~~~~~~~~~~~~~~ - -``re2c:condprefix = yyc;`` - Allows to specify the prefix used for - condition labels. That is this text is prepended to any condition label - in the generated output file. - -``re2c:condenumprefix = yyc;`` - Allows to specify the prefix used for - condition values. That is this text is prepended to any condition enum - value in the generated output file. - -``re2c:cond:divider = "/* *********************************** */";`` - Allows to customize the devider for condition blocks. You can use ``@@`` - to put the name of the condition or customize the placeholder using - ``re2c:cond:divider@cond``. - -``re2c:cond:divider@cond = @@;`` - Specifies the placeholder that will be - replaced with the condition name in ``re2c:cond:divider``. - -``re2c:cond:goto = "goto @@;";`` - Allows to customize the condition goto statements used with ``:=>`` style rules. You can use ``@@`` - to put the name of the condition or ustomize the placeholder using - ``re2c:cond:goto@cond``. You can also change this to ``continue;``, which - would allow you to continue with the next loop cycle including any code - between loop start and re2c block. - -``re2c:cond:goto@cond = @@;`` - Spcifies the placeholder that will be replaced with the condition label in ``re2c:cond:goto``. - -``re2c:indent:top = 0;`` - Specifies the minimum number of indendation to - use. Requires a numeric value greater than or equal zero. - -``re2c:indent:string = "\t";`` - Specifies the string to use for indendation. Requires a string that should - contain only whitespace unless you need this for external tools. The easiest - way to specify spaces is to enclude them in single or double quotes. - If you do not want any indendation at all you can simply set this to "". - -``re2c:yych:conversion = 0;`` - When this setting is non zero, then ``re2c`` automatically generates - conversion code whenever yych gets read. In this case the type must be - defined using ``re2c:define:YYCTYPE``. - -``re2c:yych:emit = 1;`` - Generation of *yych* can be suppressed by setting this to 0. - -``re2c:yybm:hex = 0;`` - If set to zero then a decimal table is being used else a hexadecimal table will be generated. - -``re2c:yyfill:enable = 1;`` - Set this to zero to suppress generation of ``YYFILL (n)``. When using this be sure to verify that the generated - scanner does not read behind input. Allowing this behavior might - introduce sever security issues to you programs. - -``re2c:yyfill:check = 1;`` - This can be set 0 to suppress output of the - pre condition using ``YYCURSOR`` and ``YYLIMIT`` which becomes usefull when - ``YYLIMIT + YYMAXFILL`` is always accessible. - -``re2c:define:YYFILL = "YYFILL";`` - Substitution for ``YYFILL``. Note - that by default ``re2c`` generates argument in braces and semicolon after - ``YYFILL``. If you need to make ``YYFILL`` an arbitrary statement rather - than a call, set ``re2c:define:YYFILL:naked`` to non-zero and use - ``re2c:define:YYFILL@len`` to denote formal parameter inside of ``YYFILL`` - body. - -``re2c:define:YYFILL@len = "@@";`` - Any occurence of this text - inside of ``YYFILL`` will be replaced with the actual argument. - -``re2c:yyfill:parameter = 1;`` - Controls argument in braces after - ``YYFILL``. If zero, agrument is omitted. If non-zero, argument is - generated unless ``re2c:define:YYFILL:naked`` is set to non-zero. - -``re2c:define:YYFILL:naked = 0;`` - Controls argument in braces and - semicolon after ``YYFILL``. If zero, both agrument and semicolon are - omitted. If non-zero, argument is generated unless - ``re2c:yyfill:parameter`` is set to zero and semicolon is generated - unconditionally. - -``re2c:startlabel = 0;`` - If set to a non zero integer then the start - label of the next scanner blocks will be generated even if not used by - the scanner itself. Otherwise the normal ``yy0`` like start label is only - being generated if needed. If set to a text value then a label with that - text will be generated regardless of whether the normal start label is - being used or not. This setting is being reset to 0 after a start - label has been generated. - -``re2c:labelprefix = "yy";`` - Allows to change the prefix of numbered - labels. The default is ``yy`` and can be set any string that is a valid - label. - -``re2c:state:abort = 0;`` - When not zero and switch ``-f`` is active then - the ``YYGETSTATE`` block will contain a default case that aborts and a -1 - case is used for initialization. - -``re2c:state:nextlabel = 0;`` - Used when ``-f`` is active to control - whether the ``YYGETSTATE`` block is followed by a ``yyNext:`` label line. - Instead of using ``yyNext`` you can usually also use configuration - ``startlabel`` to force a specific start label or default to ``yy0`` as - start label. Instead of using a dedicated label it is often better to - separate the ``YYGETSTATE`` code from the actual scanner code by placing a - ``/*!getstate:re2c*/`` comment. - -``re2c:cgoto:threshold = 9;`` - When ``-g`` is active this value specifies - the complexity threshold that triggers generation of jump tables rather - than using nested if's and decision bitfields. The threshold is compared - against a calculated estimation of if-s needed where every used bitmap - divides the threshold by 2. - -``re2c:yych:conversion = 0;`` - When the input uses signed characters and - ``-s`` or ``-b`` switches are in effect re2c allows to automatically convert - to the unsigned character type that is then necessary for its internal - single character. When this setting is zero or an empty string the - conversion is disabled. Using a non zero number the conversion is taken - from ``YYCTYPE``. If that is given by an inplace configuration that value - is being used. Otherwise it will be ``(YYCTYPE)`` and changes to that - configuration are no longer possible. When this setting is a string the - braces must be specified. Now assuming your input is a ``char *`` - buffer and you are using above mentioned switches you can set - ``YYCTYPE`` to ``unsigned char`` and this setting to either 1 or ``(unsigned char)``. - -``re2c:define:YYCONDTYPE = "YYCONDTYPE";`` - Enumeration used for condition support with ``-c`` mode. - -``re2c:define:YYCTXMARKER = "YYCTXMARKER";`` - Allows to overwrite the - define ``YYCTXMARKER`` and thus avoiding it by setting the value to the - actual code needed. - -``re2c:define:YYCTYPE = "YYCTYPE";`` - Allows to overwrite the define - ``YYCTYPE`` and thus avoiding it by setting the value to the actual code - needed. - -``re2c:define:YYCURSOR = "YYCURSOR";`` - Allows to overwrite the define - ``YYCURSOR`` and thus avoiding it by setting the value to the actual code - needed. - -``re2c:define:YYDEBUG = "YYDEBUG";`` - Allows to overwrite the define - ``YYDEBUG`` and thus avoiding it by setting the value to the actual code - needed. - -``re2c:define:YYGETCONDITION = "YYGETCONDITION";`` - Substitution for - ``YYGETCONDITION``. Note that by default ``re2c`` generates braces after - ``YYGETCONDITION``. Set ``re2c:define:YYGETCONDITION:naked`` to non-zero to - omit braces. - -``re2c:define:YYGETCONDITION:naked = 0;`` - Controls braces after - ``YYGETCONDITION``. If zero, braces are omitted. If non-zero, braces are - generated. - -``re2c:define:YYSETCONDITION = "YYSETCONDITION";`` - Substitution for - ``YYSETCONDITION``. Note that by default ``re2c`` generates argument in - braces and semicolon after ``YYSETCONDITION``. If you need to make - ``YYSETCONDITION`` an arbitrary statement rather than a call, set - ``re2c:define:YYSETCONDITION:naked`` to non-zero and use - ``re2c:define:YYSETCONDITION@cond`` to denote formal parameter inside of - ``YYSETCONDITION`` body. - -``re2c:define:YYSETCONDITION@cond = "@@";`` - Any occurence of this - text inside of ``YYSETCONDITION`` will be replaced with the actual - argument. - -``re2c:define:YYSETCONDITION:naked = 0;`` - Controls argument in braces - and semicolon after ``YYSETCONDITION``. If zero, both agrument and - semicolon are omitted. If non-zero, both argument and semicolon are - generated. - -``re2c:define:YYGETSTATE = "YYGETSTATE";`` - Substitution for - ``YYGETSTATE``. Note that by default ``re2c`` generates braces after - ``YYGETSTATE``. Set ``re2c:define:YYGETSTATE:naked`` to non-zero to omit - braces. - -``re2c:define:YYGETSTATE:naked = 0;`` - Controls braces after - ``YYGETSTATE``. If zero, braces are omitted. If non-zero, braces are - generated. - -``re2c:define:YYSETSTATE = "YYSETSTATE";`` - Substitution for - ``YYSETSTATE``. Note that by default ``re2c`` generates argument in braces - and semicolon after ``YYSETSTATE``. If you need to make ``YYSETSTATE`` an - arbitrary statement rather than a call, set - ``re2c:define:YYSETSTATE:naked`` to non-zero and use - ``re2c:define:YYSETSTATE@cond`` to denote formal parameter inside of - ``YYSETSTATE`` body. - -``re2c:define:YYSETSTATE@state = "@@";`` - Any occurence of this text - inside of ``YYSETSTATE`` will be replaced with the actual argument. - -``re2c:define:YYSETSTATE:naked = 0;`` - Controls argument in braces and - semicolon after ``YYSETSTATE``. If zero, both agrument and semicolon are - omitted. If non-zero, both argument and semicolon are generated. - -``re2c:define:YYLIMIT = "YYLIMIT";`` - Allows to overwrite the define - ``YYLIMIT`` and thus avoiding it by setting the value to the actual code - needed. - -``re2c:define:YYMARKER = "YYMARKER";`` - Allows to overwrite the define - ``YYMARKER`` and thus avoiding it by setting the value to the actual code - needed. - -``re2c:label:yyFillLabel = "yyFillLabel";`` - Allows to overwrite the name of the label ``yyFillLabel``. - -``re2c:label:yyNext = "yyNext";`` - Allows to overwrite the name of the label ``yyNext``. - -``re2c:variable:yyaccept = yyaccept;`` - Allows to overwrite the name of the variable ``yyaccept``. - -``re2c:variable:yybm = "yybm";`` - Allows to overwrite the name of the variable ``yybm``. - -``re2c:variable:yych = "yych";`` - Allows to overwrite the name of the variable ``yych``. - -``re2c:variable:yyctable = "yyctable";`` - When both ``-c`` and ``-g`` are active then ``re2c`` uses this variable to generate a static jump table - for ``YYGETCONDITION``. - -``re2c:variable:yystable = "yystable";`` - Deprecated. - -``re2c:variable:yytarget = "yytarget";`` - Allows to overwrite the name of the variable ``yytarget``. - - - -.. _REGULAR EXPRESSIONS: - -REGULAR EXPRESSIONS -~~~~~~~~~~~~~~~~~~~ - -``"foo"`` - literal string ``"foo"``. ANSI-C escape sequences can be used. - -``'foo'`` - literal string ``"foo"`` (characters [a-zA-Z] treated - case-insensitive). ANSI-C escape sequences can be used. - -``[xyz]`` - character class; in this case, regular expression matches either ``x``, ``y``, or ``z``. - -``[abj-oZ]`` - character class with a range in it; matches ``a``, ``b``, any letter from ``j`` through ``o`` or ``Z``. - -``[^class]`` - inverted character class. - -``r \ s`` - match any ``r`` which isn't ``s``. ``r`` and ``s`` must be regular expressions - which can be expressed as character classes. - -``r*`` - zero or more occurences of ``r``. - -``r+`` - one or more occurences of ``r``. - -``r?`` - optional ``r``. - -``(r)`` - ``r``; parentheses are used to override precedence. - -``r s`` - ``r`` followed by ``s`` (concatenation). - -``r | s`` - either ``r`` or ``s`` (alternative). - -``r`` / ``s`` - ``r`` but only if it is followed by ``s``. Note that ``s`` is not - part of the matched text. This type of regular expression is called - "trailing context". Trailing context can only be the end of a rule - and not part of a named definition. - -``r{n}`` - matches ``r`` exactly ``n`` times. - -``r{n,}`` - matches ``r`` at least ``n`` times. - -``r{n,m}`` - matches ``r`` at least ``n`` times, but not more than ``m`` times. - -``.`` - match any character except newline. - -``name`` - matches named definition as specified by ``name`` only if ``-F`` is - off. If ``-F`` is active then this behaves like it was enclosed in double - quotes and matches the string "name". - -Character classes and string literals may contain octal or hexadecimal -character definitions and the following set of escape sequences: -``\a``, ``\b``, ``\f``, ``\n``, ``\r``, ``\t``, ``\v``, ``\\``. An octal character is defined by a backslash -followed by its three octal digits (e.g. ``\377``). -Hexadecimal characters from 0 to 0xFF are defined by backslash, a lower -cased ``x`` and two hexadecimal digits (e.g. ``\x12``). Hexadecimal characters from 0x100 to 0xFFFF are defined by backslash, a lower cased -``\u`` or an upper cased ``\X`` and four hexadecimal digits (e.g. ``\u1234``). -Hexadecimal characters from 0x10000 to 0xFFFFffff are defined by backslash, an upper cased ``\U`` -and eight hexadecimal digits (e.g. ``\U12345678``). - -The only portable "any" rule is the default rule ``*``. - - - -.. _SCANNER WITH STORABLE STATES: - -SCANNER WITH STORABLE STATES ----------------------------- - -When the ``-f`` flag is specified, ``re2c`` generates a scanner that can -store its current state, return to the caller, and later resume -operations exactly where it left off. - -The default operation of ``re2c`` is a -"pull" model, where the scanner asks for extra input whenever it needs it. However, this mode of operation assumes that the scanner is the "owner" -the parsing loop, and that may not always be convenient. - -Typically, if there is a preprocessor ahead of the scanner in the -stream, or for that matter any other procedural source of data, the -scanner cannot "ask" for more data unless both scanner and source -live in a separate threads. - -The ``-f`` flag is useful for just this situation: it lets users design -scanners that work in a "push" model, i.e. where data is fed to the -scanner chunk by chunk. When the scanner runs out of data to consume, it -just stores its state, and return to the caller. When more input data is -fed to the scanner, it resumes operations exactly where it left off. - -Changes needed compared to the "pull" model: - -* User has to supply macros ``YYSETSTATE ()`` and ``YYGETSTATE (state)``. - -* The ``-f`` option inhibits declaration of ``yych`` and ``yyaccept``. So the - user has to declare these. Also the user has to save and restore these. - In the example ``examples/push_model/push.re`` these are declared as - fields of the (C++) class of which the scanner is a method, so they do - not need to be saved/restored explicitly. For C they could e.g. be made - macros that select fields from a structure passed in as parameter. - Alternatively, they could be declared as local variables, saved with - ``YYFILL (n)`` when it decides to return and restored at entry to the - function. Also, it could be more efficient to save the state from - ``YYFILL (n)`` because ``YYSETSTATE (state)`` is called unconditionally. - ``YYFILL (n)`` however does not get ``state`` as parameter, so we would have - to store state in a local variable by ``YYSETSTATE (state)``. - -* Modify ``YYFILL (n)`` to return (from the function calling it) if more input is needed. - -* Modify caller to recognise if more input is needed and respond appropriately. - -* The generated code will contain a switch block that is used to - restores the last state by jumping behind the corrspoding ``YYFILL (n)`` - call. This code is automatically generated in the epilog of the first ``/*!re2c */`` - block. It is possible to trigger generation of the ``YYGETSTATE ()`` - block earlier by placing a ``/*!getstate:re2c*/`` comment. This is especially useful when the scanner code should be - wrapped inside a loop. - -Please see ``examples/push_model/push.re`` for "push" model scanner. The -generated code can be tweaked using inplace configurations ``state:abort`` -and ``state:nextlabel``. - - - -SCANNER WITH CONDITION SUPPORT ------------------------------- - -You can preceed regular expressions with a list of condition names when -using the ``-c`` switch. In this case ``re2c`` generates scanner blocks for -each conditon. Where each of the generated blocks has its own -precondition. The precondition is given by the interface define -``YYGETCONDITON()`` and must be of type ``YYCONDTYPE``. - -There are two special rule types. First, the rules of the condition ``<*>`` -are merged to all conditions (note that they have lower priority than -other rules of that condition). And second the empty condition list -allows to provide a code block that does not have a scanner part. -Meaning it does not allow any regular expression. The condition value -referring to this special block is always the one with the enumeration -value 0. This way the code of this special rule can be used to -initialize a scanner. It is in no way necessary to have these rules: but -sometimes it is helpful to have a dedicated uninitialized condition -state. - -Non empty rules allow to specify the new condition, which makes them -transition rules. Besides generating calls for the define -``YYSETCONDTITION`` no other special code is generated. - -There is another kind of special rules that allow to prepend code to any -code block of all rules of a certain set of conditions or to all code -blocks to all rules. This can be helpful when some operation is common -among rules. For instance this can be used to store the length of the -scanned string. These special setup rules start with an exclamation mark -followed by either a list of conditions ```` or a star -````. When ``re2c`` generates the code for a rule whose state does not have a -setup rule and a star'd setup rule is present, than that code will be -used as setup code. - - - -.. _ENCODINGS: - -ENCODINGS ---------- - -``re2c`` supports the following encodings: ASCII (default), EBCDIC (``-e``), -UCS-2 (``-w``), UTF-16 (``-x``), UTF-32 (``-u``) and UTF-8 (``-8``). -See also inplace configuration ``re2c:flags``. - -The following concepts should be clarified when talking about encoding. -*Code point* is an abstract number, which represents single encoding -symbol. *Code unit* is the smallest unit of memory, which is used in the -encoded text (it corresponds to one character in the input stream). One -or more code units can be needed to represent a single code point, -depending on the encoding. In *fixed-length* encoding, each code point -is represented with equal number of code units. In *variable-length* -encoding, different code points can be represented with different number -of code units. - -* ASCII is a fixed-length encoding. Its code space includes 0x100 - code points, from 0 to 0xFF. One code point is represented with exactly one - 1-byte code unit, which has the same value as the code point. Size of - ``YYCTYPE`` must be 1 byte. - -* EBCDIC is a fixed-length encoding. Its code space includes 0x100 - code points, from 0 to 0xFF. One code point is represented with exactly - one 1-byte code unit, which has the same value as the code point. Size - of ``YYCTYPE`` must be 1 byte. - -* UCS-2 is a fixed-length encoding. Its code space includes 0x10000 - code points, from 0 to 0xFFFF. One code point is represented with - exactly one 2-byte code unit, which has the same value as the code - point. Size of ``YYCTYPE`` must be 2 bytes. - -* UTF-16 is a variable-length encoding. Its code space includes all - Unicode code points, from 0 to 0xD7FF and from 0xE000 to 0x10FFFF. One - code point is represented with one or two 2-byte code units. Size of - ``YYCTYPE`` must be 2 bytes. - -* UTF-32 is a fixed-length encoding. Its code space includes all - Unicode code points, from 0 to 0xD7FF and from 0xE000 to 0x10FFFF. One - code point is represented with exactly one 4-byte code unit. Size of - ``YYCTYPE`` must be 4 bytes. - -* UTF-8 is a variable-length encoding. Its code space includes all - Unicode code points, from 0 to 0xD7FF and from 0xE000 to 0x10FFFF. One - code point is represented with sequence of one, two, three or four - 1-byte code units. Size of ``YYCTYPE`` must be 1 byte. - -In Unicode, values from range 0xD800 to 0xDFFF (surrogates) are not -valid Unicode code points, any encoded sequence of code units, that -would map to Unicode code points in the range 0xD800-0xDFFF, is -ill-formed. The user can control how ``re2c`` treats such ill-formed -sequences with ``--encoding-policy `` flag (see `OPTIONS`_ -for full explanation). - -For some encodings, there are code units, that never occur in valid -encoded stream (e.g. 0xFF byte in UTF-8). If the generated scanner must -check for invalid input, the only true way to do so is to use default -rule ``*``. Note, that full range rule ``[^]`` won't catch invalid code units when variable-length encoding is used -(``[^]`` means "all valid code points", while default rule ``*`` means "all possible code units"). - - - -GENERIC INPUT API ------------------ - -``re2c`` usually operates on input using pointer-like primitives -``YYCURSOR``, ``YYMARKER``, ``YYCTXMARKER`` and ``YYLIMIT``. - -Generic input API (enabled with ``--input custom`` switch) allows to -customize input operations. In this mode, ``re2c`` will express all -operations on input in terms of the following primitives: - - +---------------------+-----------------------------------------------------+ - | ``YYPEEK ()`` | get current input character | - +---------------------+-----------------------------------------------------+ - | ``YYSKIP ()`` | advance to the next character | - +---------------------+-----------------------------------------------------+ - | ``YYBACKUP ()`` | backup current input position | - +---------------------+-----------------------------------------------------+ - | ``YYBACKUPCTX ()`` | backup current input position for trailing context | - +---------------------+-----------------------------------------------------+ - | ``YYRESTORE ()`` | restore current input position | - +---------------------+-----------------------------------------------------+ - | ``YYRESTORECTX ()`` | restore current input position for trailing context | - +---------------------+-----------------------------------------------------+ - | ``YYLESSTHAN (n)`` | check if less than ``n`` input characters are left | - +---------------------+-----------------------------------------------------+ - -This `article `_ -has more details, and you can find some usage examples -`here `_. - - - -UNDERSTANDING RE2C ------------------- - -The subdirectory ``examples`` of the ``re2c`` distribution contains a few step -by step examples to get you started with ``re2c``. - - - -BUGS ----- - -* Difference only works for character sets, and not in UTF-8 mode. -* Some features don't work together (such as reusable rules, conditions, setup rules and default rules). - - - -SEE ALSO --------- - -flex(1), lex(1), `quex `_. - - - -AUTHORS -------- - -* Peter Bumbulis peter@csg.uwaterloo.ca -* Brian Young bayoung@acm.org -* Dan Nuffer nuffer@users.sourceforge.net -* Marcus Boerger helly@users.sourceforge.net -* Hartmut Kaiser hkaiser@users.sourceforge.net -* Emmanuel Mogenet mgix@mgix.com (added storable state) -* Ulya Trofimovich skvadrik@gmail.com - -VERSION INFORMATION -------------------- - -This manpage describes ``re2c`` version 0.14.1.dev, package date 15 Oct 2015. diff --git a/src/manual.rst b/src/manual.rst index e69de29b..11acceed 100644 --- a/src/manual.rst +++ b/src/manual.rst @@ -0,0 +1,941 @@ + +`[home] `_ + +-------------------------------------------------------------------------------- + +* `About`_ + - `Authors`_ + - `License`_ + - `Version`_ +* `Run`_ + - `Synopsis`_ + - `Options`_ + - `Warnings`_ +* `Syntax`_ + - `Rules`_ + - `Definitions`_ + - `Configurations`_ + - `Regular expressions`_ + - `Interface`_ +* `Features`_ + - `Conditions`_ + - `State`_ + - `Reuse`_ + - `Encodings`_ + - `Generic interface`_ +* `Examples`_ +* `Changelog`_ + +.. _About: + +About +===== +-------------------------------------------------------------------------------- + +.. _Authors: + +Authors +------- + +Originally written by Peter Bumbulis (peter@csg.uwaterloo.ca) +and described in research article *"RE2C: a more versatile scanner generator" +by Peter Bumbulis, Donald D. Cowan, +1994, +ACM Letters on Programming Languages and Systems (LOPLAS)* +`[PDF] <1994_bumbulis_cowan_re2c_a_more_versatile_scanner_generator.pdf>`_. + +Since then many people have contributed to re2c: + +* Brian Young bayoung@acm.org +* Dan Nuffer nuffer@users.sourceforge.net +* Marcus Boerger helly@users.sourceforge.net +* Hartmut Kaiser hkaiser@users.sourceforge.net +* Emmanuel Mogenet mgix@mgix.com (added storable state) +* Ulya Trofimovich skvadrik@gmail.com + +Let me know if I missed someone! + +.. _License: + +License +------- + +re2c is distributed with no warranty whatever. +The code is certain to contain errors. +Neither the author nor any contributor takes responsibility for any consequences of its use. +re2c is in the public domain. The data structures and algorithms used +in re2c are all either taken from documents available to the general +public or are inventions of the author. Programs generated by re2c may +be distributed freely. re2c itself may be distributed freely, in source +or binary, unchanged or modified. Distributors may charge whatever fees +they can obtain for re2c. If you do make use of re2c, or incorporate it into a larger project an +acknowledgement somewhere (documentation, research report, etc.) would +be appreciated. + +.. _Version: + +Version +------- + +This page describes ``re2c`` version 0.14.1.dev, package date 15 Oct 2015. + +.. _Run: + +Run +=== +-------------------------------------------------------------------------------- + +.. _Synopsis: + +Synopsis +-------- + +``re2c [OPTIONS] FILE [OPTIONS]`` + + +.. _Options: + +Options +------- + +.. include:: options/options_list.rst + +.. _Warnings: + +Warnings +-------- + +.. include:: options/warnings_list.rst + +.. _Syntax: + +Syntax +====== +-------------------------------------------------------------------------------- + +Code for ``re2c`` consists of a set of `rules`_, `definitions`_ and +`configurations`_. + +.. _Rules: + +Rules +----- + +Rules consist of a `regular expressions`_ along with a block of C/C++ code +that is to be executed when the associated regular expression is +matched. You can either start the code with an opening curly brace or +the sequence ``:=``. When the code with a curly brace then ``re2c`` counts the brace depth +and stops looking for code automatically. Otherwise curly braces are not +allowed and ``re2c`` stops looking for code at the first line that does +not begin with whitespace. If two or more rules overlap, the first rule +is preferred. + + ``regular-expression { C/C++ code }`` + + ``regular-expression := C/C++ code`` + +There is one special rule: default rule ``*`` + + ``* { C/C++ code }`` + + ``* := C/C++ code`` + +Note that default rule ``*`` differs from ``[^]``: default rule has the lowest priority, +matches any code unit (either valid or invalid) and always consumes one character; +while ``[^]`` matches any valid code point (not code unit) and can consume multiple +code units. In fact, when variable-length encoding is used, ``*`` +is the only possible way to match invalid input character (see `Encodings`_ for details). + +If ``-c`` is active then each regular expression is preceeded by a list +of comma separated condition names. Besides normal naming rules there +are two special cases: ``<*>`` (such rules are merged to all conditions) +and ``<>`` (such the rule cannot have an associated regular expression, +its code is merged to all actions). Non empty rules may further more specify the new +condition. In that case ``re2c`` will generate the necessary code to +change the condition automatically. Rules can use ``:=>`` as a shortcut +to automatically generate code that not only sets the +new condition state but also continues execution with the new state. A +shortcut rule should not be used in a loop where there is code between +the start of the loop and the ``re2c`` block unless ``re2c:cond:goto`` +is changed to ``continue``. If code is necessary before all rules (though not simple jumps) you +can doso by using ```` pseudo-rules. + + `` regular-expression { C/C++ code }`` + + `` regular-expression := C/C++ code`` + + `` * { C/C++ code }`` + + `` * := C/C++ code`` + + `` regular-expression => condition { C/C++ code }`` + + `` regular-expression => condition := C/C++ code`` + + `` * => condition { C/C++ code }`` + + `` * => condition := C/C++ code`` + + `` regular-expression :=> condition`` + + + ``<*> regular-expression { C/C++ code }`` + + ``<*> regular-expression := C/C++ code`` + + ``<*> * { C/C++ code }`` + + ``<*> * := C/C++ code`` + + ``<*> regular-expression => condition { C/C++ code }`` + + ``<*> regular-expression => condition := C/C++ code`` + + ``<*> * => condition { C/C++ code }`` + + ``<*> * => condition := C/C++ code`` + + ``<*> regular-expression :=> condition`` + + + ``<> { C/C++ code }`` + + ``<> := C/C++ code`` + + ``<> => condition { C/C++ code }`` + + ``<> => condition := C/C++ code`` + + ``<> :=> condition`` + + ``<> :=> condition`` + + + `` { C/C++ code }`` + + `` := C/C++ code`` + + `` { C/C++ code }`` + + `` := C/C++ code`` + +.. _Definitions: + +Definitions +----------- + +Named definitions are of the form: + + ``name = regular-expression;`` + +If ``-F`` is active, then named definitions are also of the form: + + ``name { regular-expression }`` + +.. _Configurations: + +Configurations +-------------- + +``re2c:condprefix = yyc;`` + Allows to specify the prefix used for + condition labels. That is this text is prepended to any condition label + in the generated output file. + +``re2c:condenumprefix = yyc;`` + Allows to specify the prefix used for + condition values. That is this text is prepended to any condition enum + value in the generated output file. + +``re2c:cond:divider = "/* *********************************** */";`` + Allows to customize the devider for condition blocks. You can use ``@@`` + to put the name of the condition or customize the placeholder using + ``re2c:cond:divider@cond``. + +``re2c:cond:divider@cond = @@;`` + Specifies the placeholder that will be + replaced with the condition name in ``re2c:cond:divider``. + +``re2c:cond:goto = "goto @@;";`` + Allows to customize the condition goto statements used with ``:=>`` style rules. You can use ``@@`` + to put the name of the condition or ustomize the placeholder using + ``re2c:cond:goto@cond``. You can also change this to ``continue;``, which + would allow you to continue with the next loop cycle including any code + between loop start and re2c block. + +``re2c:cond:goto@cond = @@;`` + Spcifies the placeholder that will be replaced with the condition label in ``re2c:cond:goto``. + +``re2c:indent:top = 0;`` + Specifies the minimum number of indendation to + use. Requires a numeric value greater than or equal zero. + +``re2c:indent:string = "\t";`` + Specifies the string to use for indendation. Requires a string that should + contain only whitespace unless you need this for external tools. The easiest + way to specify spaces is to enclude them in single or double quotes. + If you do not want any indendation at all you can simply set this to "". + +``re2c:yych:conversion = 0;`` + When this setting is non zero, then ``re2c`` automatically generates + conversion code whenever yych gets read. In this case the type must be + defined using ``re2c:define:YYCTYPE``. + +``re2c:yych:emit = 1;`` + Generation of *yych* can be suppressed by setting this to 0. + +``re2c:yybm:hex = 0;`` + If set to zero then a decimal table is being used else a hexadecimal table will be generated. + +``re2c:yyfill:enable = 1;`` + Set this to zero to suppress generation of ``YYFILL (n)``. When using this be sure to verify that the generated + scanner does not read behind input. Allowing this behavior might + introduce sever security issues to you programs. + +``re2c:yyfill:check = 1;`` + This can be set 0 to suppress output of the + pre condition using ``YYCURSOR`` and ``YYLIMIT`` which becomes usefull when + ``YYLIMIT + YYMAXFILL`` is always accessible. + +``re2c:define:YYFILL = "YYFILL";`` + Substitution for ``YYFILL``. Note + that by default ``re2c`` generates argument in braces and semicolon after + ``YYFILL``. If you need to make ``YYFILL`` an arbitrary statement rather + than a call, set ``re2c:define:YYFILL:naked`` to non-zero and use + ``re2c:define:YYFILL@len`` to denote formal parameter inside of ``YYFILL`` + body. + +``re2c:define:YYFILL@len = "@@";`` + Any occurence of this text + inside of ``YYFILL`` will be replaced with the actual argument. + +``re2c:yyfill:parameter = 1;`` + Controls argument in braces after + ``YYFILL``. If zero, agrument is omitted. If non-zero, argument is + generated unless ``re2c:define:YYFILL:naked`` is set to non-zero. + +``re2c:define:YYFILL:naked = 0;`` + Controls argument in braces and + semicolon after ``YYFILL``. If zero, both agrument and semicolon are + omitted. If non-zero, argument is generated unless + ``re2c:yyfill:parameter`` is set to zero and semicolon is generated + unconditionally. + +``re2c:startlabel = 0;`` + If set to a non zero integer then the start + label of the next scanner blocks will be generated even if not used by + the scanner itself. Otherwise the normal ``yy0`` like start label is only + being generated if needed. If set to a text value then a label with that + text will be generated regardless of whether the normal start label is + being used or not. This setting is being reset to 0 after a start + label has been generated. + +``re2c:labelprefix = "yy";`` + Allows to change the prefix of numbered + labels. The default is ``yy`` and can be set any string that is a valid + label. + +``re2c:state:abort = 0;`` + When not zero and switch ``-f`` is active then + the ``YYGETSTATE`` block will contain a default case that aborts and a -1 + case is used for initialization. + +``re2c:state:nextlabel = 0;`` + Used when ``-f`` is active to control + whether the ``YYGETSTATE`` block is followed by a ``yyNext:`` label line. + Instead of using ``yyNext`` you can usually also use configuration + ``startlabel`` to force a specific start label or default to ``yy0`` as + start label. Instead of using a dedicated label it is often better to + separate the ``YYGETSTATE`` code from the actual scanner code by placing a + ``/*!getstate:re2c*/`` comment. + +``re2c:cgoto:threshold = 9;`` + When ``-g`` is active this value specifies + the complexity threshold that triggers generation of jump tables rather + than using nested if's and decision bitfields. The threshold is compared + against a calculated estimation of if-s needed where every used bitmap + divides the threshold by 2. + +``re2c:yych:conversion = 0;`` + When the input uses signed characters and + ``-s`` or ``-b`` switches are in effect re2c allows to automatically convert + to the unsigned character type that is then necessary for its internal + single character. When this setting is zero or an empty string the + conversion is disabled. Using a non zero number the conversion is taken + from ``YYCTYPE``. If that is given by an inplace configuration that value + is being used. Otherwise it will be ``(YYCTYPE)`` and changes to that + configuration are no longer possible. When this setting is a string the + braces must be specified. Now assuming your input is a ``char *`` + buffer and you are using above mentioned switches you can set + ``YYCTYPE`` to ``unsigned char`` and this setting to either 1 or ``(unsigned char)``. + +``re2c:define:YYCONDTYPE = "YYCONDTYPE";`` + Enumeration used for condition support with ``-c`` mode. + +``re2c:define:YYCTXMARKER = "YYCTXMARKER";`` + Allows to overwrite the + define ``YYCTXMARKER`` and thus avoiding it by setting the value to the + actual code needed. + +``re2c:define:YYCTYPE = "YYCTYPE";`` + Allows to overwrite the define + ``YYCTYPE`` and thus avoiding it by setting the value to the actual code + needed. + +``re2c:define:YYCURSOR = "YYCURSOR";`` + Allows to overwrite the define + ``YYCURSOR`` and thus avoiding it by setting the value to the actual code + needed. + +``re2c:define:YYDEBUG = "YYDEBUG";`` + Allows to overwrite the define + ``YYDEBUG`` and thus avoiding it by setting the value to the actual code + needed. + +``re2c:define:YYGETCONDITION = "YYGETCONDITION";`` + Substitution for + ``YYGETCONDITION``. Note that by default ``re2c`` generates braces after + ``YYGETCONDITION``. Set ``re2c:define:YYGETCONDITION:naked`` to non-zero to + omit braces. + +``re2c:define:YYGETCONDITION:naked = 0;`` + Controls braces after + ``YYGETCONDITION``. If zero, braces are omitted. If non-zero, braces are + generated. + +``re2c:define:YYSETCONDITION = "YYSETCONDITION";`` + Substitution for + ``YYSETCONDITION``. Note that by default ``re2c`` generates argument in + braces and semicolon after ``YYSETCONDITION``. If you need to make + ``YYSETCONDITION`` an arbitrary statement rather than a call, set + ``re2c:define:YYSETCONDITION:naked`` to non-zero and use + ``re2c:define:YYSETCONDITION@cond`` to denote formal parameter inside of + ``YYSETCONDITION`` body. + +``re2c:define:YYSETCONDITION@cond = "@@";`` + Any occurence of this + text inside of ``YYSETCONDITION`` will be replaced with the actual + argument. + +``re2c:define:YYSETCONDITION:naked = 0;`` + Controls argument in braces + and semicolon after ``YYSETCONDITION``. If zero, both agrument and + semicolon are omitted. If non-zero, both argument and semicolon are + generated. + +``re2c:define:YYGETSTATE = "YYGETSTATE";`` + Substitution for + ``YYGETSTATE``. Note that by default ``re2c`` generates braces after + ``YYGETSTATE``. Set ``re2c:define:YYGETSTATE:naked`` to non-zero to omit + braces. + +``re2c:define:YYGETSTATE:naked = 0;`` + Controls braces after + ``YYGETSTATE``. If zero, braces are omitted. If non-zero, braces are + generated. + +``re2c:define:YYSETSTATE = "YYSETSTATE";`` + Substitution for + ``YYSETSTATE``. Note that by default ``re2c`` generates argument in braces + and semicolon after ``YYSETSTATE``. If you need to make ``YYSETSTATE`` an + arbitrary statement rather than a call, set + ``re2c:define:YYSETSTATE:naked`` to non-zero and use + ``re2c:define:YYSETSTATE@cond`` to denote formal parameter inside of + ``YYSETSTATE`` body. + +``re2c:define:YYSETSTATE@state = "@@";`` + Any occurence of this text + inside of ``YYSETSTATE`` will be replaced with the actual argument. + +``re2c:define:YYSETSTATE:naked = 0;`` + Controls argument in braces and + semicolon after ``YYSETSTATE``. If zero, both agrument and semicolon are + omitted. If non-zero, both argument and semicolon are generated. + +``re2c:define:YYLIMIT = "YYLIMIT";`` + Allows to overwrite the define + ``YYLIMIT`` and thus avoiding it by setting the value to the actual code + needed. + +``re2c:define:YYMARKER = "YYMARKER";`` + Allows to overwrite the define + ``YYMARKER`` and thus avoiding it by setting the value to the actual code + needed. + +``re2c:label:yyFillLabel = "yyFillLabel";`` + Allows to overwrite the name of the label ``yyFillLabel``. + +``re2c:label:yyNext = "yyNext";`` + Allows to overwrite the name of the label ``yyNext``. + +``re2c:variable:yyaccept = yyaccept;`` + Allows to overwrite the name of the variable ``yyaccept``. + +``re2c:variable:yybm = "yybm";`` + Allows to overwrite the name of the variable ``yybm``. + +``re2c:variable:yych = "yych";`` + Allows to overwrite the name of the variable ``yych``. + +``re2c:variable:yyctable = "yyctable";`` + When both ``-c`` and ``-g`` are active then ``re2c`` uses this variable to generate a static jump table + for ``YYGETCONDITION``. + +``re2c:variable:yystable = "yystable";`` + Deprecated. + +``re2c:variable:yytarget = "yytarget";`` + Allows to overwrite the name of the variable ``yytarget``. + +.. _Regular expressions: + +Regular expressions +------------------- + +``"foo"`` + literal string ``"foo"``. ANSI-C escape sequences can be used. + +``'foo'`` + literal string ``"foo"`` (characters [a-zA-Z] treated + case-insensitive). ANSI-C escape sequences can be used. + +``[xyz]`` + character class; in this case, regular expression matches either ``x``, ``y``, or ``z``. + +``[abj-oZ]`` + character class with a range in it; matches ``a``, ``b``, any letter from ``j`` through ``o`` or ``Z``. + +``[^class]`` + inverted character class. + +``r \ s`` + match any ``r`` which isn't ``s``. ``r`` and ``s`` must be regular expressions + which can be expressed as character classes. + +``r*`` + zero or more occurences of ``r``. + +``r+`` + one or more occurences of ``r``. + +``r?`` + optional ``r``. + +``(r)`` + ``r``; parentheses are used to override precedence. + +``r s`` + ``r`` followed by ``s`` (concatenation). + +``r | s`` + either ``r`` or ``s`` (alternative). + +``r`` / ``s`` + ``r`` but only if it is followed by ``s``. Note that ``s`` is not + part of the matched text. This type of regular expression is called + "trailing context". Trailing context can only be the end of a rule + and not part of a named definition. + +``r{n}`` + matches ``r`` exactly ``n`` times. + +``r{n,}`` + matches ``r`` at least ``n`` times. + +``r{n,m}`` + matches ``r`` at least ``n`` times, but not more than ``m`` times. + +``.`` + match any character except newline. + +``name`` + matches named definition as specified by ``name`` only if ``-F`` is + off. If ``-F`` is active then this behaves like it was enclosed in double + quotes and matches the string "name". + +Character classes and string literals may contain octal or hexadecimal +character definitions and the following set of escape sequences: +``\a``, ``\b``, ``\f``, ``\n``, ``\r``, ``\t``, ``\v``, ``\\``. An octal character is defined by a backslash +followed by its three octal digits (e.g. ``\377``). +Hexadecimal characters from 0 to 0xFF are defined by backslash, a lower +cased ``x`` and two hexadecimal digits (e.g. ``\x12``). Hexadecimal characters from 0x100 to 0xFFFF are defined by backslash, a lower cased +``\u`` or an upper cased ``\X`` and four hexadecimal digits (e.g. ``\u1234``). +Hexadecimal characters from 0x10000 to 0xFFFFffff are defined by backslash, an upper cased ``\U`` +and eight hexadecimal digits (e.g. ``\U12345678``). + +The only portable "any" rule is the default rule ``*``. + +.. _Interface: + +Interface +--------- + +The user must supply interface code either in the form of C/C++ code +(macros, functions, variables, etc.) or in the form of `configurations`_. +Which symbols must be defined and which are optional +depends on a particular use case. + +``YYCONDTYPE`` + In ``-c`` mode you can use ``-t`` to generate a file that + contains the enumeration used as conditions. Each of the values refers + to a condition of a rule set. + +``YYCTXMARKER`` + l-value of type ``YYCTYPE *``. + The generated code saves trailing context backtracking information in + ``YYCTXMARKER``. The user only needs to define this macro if a scanner + specification uses trailing context in one or more of its regular + expressions. + +``YYCTYPE`` + Type used to hold an input symbol (code unit). Usually + ``char`` or ``unsigned char`` for ASCII, EBCDIC and UTF-8, *unsigned short* + for UTF-16 or UCS-2 and ``unsigned int`` for UTF-32. + +``YYCURSOR`` + l-value of type ``YYCTYPE *`` that points to the current input symbol. The generated code advances + ``YYCURSOR`` as symbols are matched. On entry, ``YYCURSOR`` is assumed to + point to the first character of the current token. On exit, ``YYCURSOR`` + will point to the first character of the following token. + +``YYDEBUG (state, current)`` + This is only needed if the ``-d`` flag was + specified. It allows to easily debug the generated parser by calling a + user defined function for every state. The function should have the + following signature: ``void YYDEBUG (int state, char current)``. The first + parameter receives the state or -1 and the second parameter receives the + input at the current cursor. + +``YYFILL (n)`` + The generated code "calls"" ``YYFILL (n)`` when the + buffer needs (re)filling: at least ``n`` additional characters should be + provided. ``YYFILL (n)`` should adjust ``YYCURSOR``, ``YYLIMIT``, ``YYMARKER`` + and ``YYCTXMARKER`` as needed. Note that for typical programming languages + ``n`` will be the length of the longest keyword plus one. The user can + place a comment of the form ``/*!max:re2c*/`` to insert ``YYMAXFILL`` definition that is set to the maximum + length value. + +``YYGETCONDITION ()`` + This define is used to get the condition prior to + entering the scanner code when using ``-c`` switch. The value must be + initialized with a value from the enumeration ``YYCONDTYPE`` type. + +``YYGETSTATE ()`` + The user only needs to define this macro if the ``-f`` + flag was specified. In that case, the generated code "calls" + ``YYGETSTATE ()`` at the very beginning of the scanner in order to obtain + the saved state. ``YYGETSTATE ()`` must return a signed integer. The value + must be either -1, indicating that the scanner is entered for the first + time, or a value previously saved by ``YYSETSTATE (s)``. In the second + case, the scanner will resume operations right after where the last + ``YYFILL (n)`` was called. + +``YYLIMIT`` + Expression of type ``YYCTYPE *`` that marks the end of the buffer ``YYLIMIT[-1]`` + is the last character in the buffer). The generated code repeatedly + compares ``YYCURSOR`` to ``YYLIMIT`` to determine when the buffer needs + (re)filling. + +``YYMARKER`` + l-value of type ``YYCTYPE *``. + The generated code saves backtracking information in ``YYMARKER``. Some + easy scanners might not use this. + +``YYMAXFILL`` + This will be automatically defined by ``/*!max:re2c*/`` blocks as explained above. + +``YYSETCONDITION (c)`` + This define is used to set the condition in + transition rules. This is only being used when ``-c`` is active and + transition rules are being used. + +``YYSETSTATE (s)`` + The user only needs to define this macro if the ``-f`` + flag was specified. In that case, the generated code "calls" + ``YYSETSTATE`` just before calling ``YYFILL (n)``. The parameter to + ``YYSETSTATE`` is a signed integer that uniquely identifies the specific + instance of ``YYFILL (n)`` that is about to be called. Should the user + wish to save the state of the scanner and have ``YYFILL (n)`` return to + the caller, all he has to do is store that unique identifer in a + variable. Later, when the scannered is called again, it will call + ``YYGETSTATE ()`` and resume execution right where it left off. The + generated code will contain both ``YYSETSTATE (s)`` and ``YYGETSTATE`` even + if ``YYFILL (n)`` is being disabled. + +.. _Features: + +Features +======== +-------------------------------------------------------------------------------- + +.. _Conditions: + +Conditions +---------- + +You can preceed regular expressions with a list of condition names when +using the ``-c`` switch. In this case ``re2c`` generates scanner blocks for +each conditon. Where each of the generated blocks has its own +precondition. The precondition is given by the interface define +``YYGETCONDITON()`` and must be of type ``YYCONDTYPE``. + +There are two special rule types. First, the rules of the condition ``<*>`` +are merged to all conditions (note that they have lower priority than +other rules of that condition). And second the empty condition list +allows to provide a code block that does not have a scanner part. +Meaning it does not allow any regular expression. The condition value +referring to this special block is always the one with the enumeration +value 0. This way the code of this special rule can be used to +initialize a scanner. It is in no way necessary to have these rules: but +sometimes it is helpful to have a dedicated uninitialized condition +state. + +Non empty rules allow to specify the new condition, which makes them +transition rules. Besides generating calls for the define +``YYSETCONDTITION`` no other special code is generated. + +There is another kind of special rules that allow to prepend code to any +code block of all rules of a certain set of conditions or to all code +blocks to all rules. This can be helpful when some operation is common +among rules. For instance this can be used to store the length of the +scanned string. These special setup rules start with an exclamation mark +followed by either a list of conditions ```` or a star +````. When ``re2c`` generates the code for a rule whose state does not have a +setup rule and a star'd setup rule is present, than that code will be +used as setup code. + +.. _State: + +State +----- + +When the ``-f`` flag is specified, ``re2c`` generates a scanner that can +store its current state, return to the caller, and later resume +operations exactly where it left off. + +The default operation of ``re2c`` is a +"pull" model, where the scanner asks for extra input whenever it needs it. However, this mode of operation assumes that the scanner is the "owner" +the parsing loop, and that may not always be convenient. + +Typically, if there is a preprocessor ahead of the scanner in the +stream, or for that matter any other procedural source of data, the +scanner cannot "ask" for more data unless both scanner and source +live in a separate threads. + +The ``-f`` flag is useful for just this situation: it lets users design +scanners that work in a "push" model, i.e. where data is fed to the +scanner chunk by chunk. When the scanner runs out of data to consume, it +just stores its state, and return to the caller. When more input data is +fed to the scanner, it resumes operations exactly where it left off. + +Changes needed compared to the "pull" model: + +* User has to supply macros ``YYSETSTATE ()`` and ``YYGETSTATE (state)``. + +* The ``-f`` option inhibits declaration of ``yych`` and ``yyaccept``. So the + user has to declare these. Also the user has to save and restore these. + In the example ``examples/push_model/push.re`` these are declared as + fields of the (C++) class of which the scanner is a method, so they do + not need to be saved/restored explicitly. For C they could e.g. be made + macros that select fields from a structure passed in as parameter. + Alternatively, they could be declared as local variables, saved with + ``YYFILL (n)`` when it decides to return and restored at entry to the + function. Also, it could be more efficient to save the state from + ``YYFILL (n)`` because ``YYSETSTATE (state)`` is called unconditionally. + ``YYFILL (n)`` however does not get ``state`` as parameter, so we would have + to store state in a local variable by ``YYSETSTATE (state)``. + +* Modify ``YYFILL (n)`` to return (from the function calling it) if more input is needed. + +* Modify caller to recognise if more input is needed and respond appropriately. + +* The generated code will contain a switch block that is used to + restores the last state by jumping behind the corrspoding ``YYFILL (n)`` + call. This code is automatically generated in the epilog of the first ``/*!re2c */`` + block. It is possible to trigger generation of the ``YYGETSTATE ()`` + block earlier by placing a ``/*!getstate:re2c*/`` comment. This is especially useful when the scanner code should be + wrapped inside a loop. + +Please see ``examples/push_model/push.re`` for "push" model scanner. The +generated code can be tweaked using inplace configurations ``state:abort`` +and ``state:nextlabel``. + +.. _Reuse: + +Reuse +----- + +Reuse mode is controlled by ``-r --reusable`` option. +Allows reuse of scanner definitions with ``/*!use:re2c */`` after ``/*!rules:re2c */``. +In this mode no ``/*!re2c */`` block and exactly one ``/*!rules:re2c */`` must be present. +The rules are being saved and used by every ``/*!use:re2c */`` block that follows. +These blocks can contain inplace configurations, especially ``re2c:flags:e``, +``re2c:flags:w``, ``re2c:flags:x``, ``re2c:flags:u`` and ``re2c:flags:8``. +That way it is possible to create the same scanner multiple times for +different character types, different input mechanisms or different output mechanisms. +The ``/*!use:re2c */`` blocks can also contain additional rules that will be appended +to the set of rules in ``/*!rules:re2c */``. + +.. _Encodings: + +Encodings +--------- + +``re2c`` supports the following encodings: ASCII (default), EBCDIC (``-e``), +UCS-2 (``-w``), UTF-16 (``-x``), UTF-32 (``-u``) and UTF-8 (``-8``). +See also inplace configuration ``re2c:flags``. + +The following concepts should be clarified when talking about encoding. +*Code point* is an abstract number, which represents single encoding +symbol. *Code unit* is the smallest unit of memory, which is used in the +encoded text (it corresponds to one character in the input stream). One +or more code units can be needed to represent a single code point, +depending on the encoding. In *fixed-length* encoding, each code point +is represented with equal number of code units. In *variable-length* +encoding, different code points can be represented with different number +of code units. + +* ASCII is a fixed-length encoding. Its code space includes 0x100 + code points, from 0 to 0xFF. One code point is represented with exactly one + 1-byte code unit, which has the same value as the code point. Size of + ``YYCTYPE`` must be 1 byte. + +* EBCDIC is a fixed-length encoding. Its code space includes 0x100 + code points, from 0 to 0xFF. One code point is represented with exactly + one 1-byte code unit, which has the same value as the code point. Size + of ``YYCTYPE`` must be 1 byte. + +* UCS-2 is a fixed-length encoding. Its code space includes 0x10000 + code points, from 0 to 0xFFFF. One code point is represented with + exactly one 2-byte code unit, which has the same value as the code + point. Size of ``YYCTYPE`` must be 2 bytes. + +* UTF-16 is a variable-length encoding. Its code space includes all + Unicode code points, from 0 to 0xD7FF and from 0xE000 to 0x10FFFF. One + code point is represented with one or two 2-byte code units. Size of + ``YYCTYPE`` must be 2 bytes. + +* UTF-32 is a fixed-length encoding. Its code space includes all + Unicode code points, from 0 to 0xD7FF and from 0xE000 to 0x10FFFF. One + code point is represented with exactly one 4-byte code unit. Size of + ``YYCTYPE`` must be 4 bytes. + +* UTF-8 is a variable-length encoding. Its code space includes all + Unicode code points, from 0 to 0xD7FF and from 0xE000 to 0x10FFFF. One + code point is represented with sequence of one, two, three or four + 1-byte code units. Size of ``YYCTYPE`` must be 1 byte. + +In Unicode, values from range 0xD800 to 0xDFFF (surrogates) are not +valid Unicode code points, any encoded sequence of code units, that +would map to Unicode code points in the range 0xD800-0xDFFF, is +ill-formed. The user can control how ``re2c`` treats such ill-formed +sequences with ``--encoding-policy `` flag (see `Options`_ +for full explanation). + +For some encodings, there are code units, that never occur in valid +encoded stream (e.g. 0xFF byte in UTF-8). If the generated scanner must +check for invalid input, the only true way to do so is to use default +rule ``*``. Note, that full range rule ``[^]`` won't catch invalid code units when variable-length encoding is used +(``[^]`` means "all valid code points", while default rule ``*`` means "all possible code units"). + +.. _Generic interface: + +Generic interface +----------------- + +``re2c`` usually operates on input using pointer-like primitives +``YYCURSOR``, ``YYMARKER``, ``YYCTXMARKER`` and ``YYLIMIT``. + +Generic input API (enabled with ``--input custom`` switch) allows to +customize input operations. In this mode, ``re2c`` will express all +operations on input in terms of the following primitives: + + +---------------------+-----------------------------------------------------+ + | ``YYPEEK ()`` | get current input character | + +---------------------+-----------------------------------------------------+ + | ``YYSKIP ()`` | advance to the next character | + +---------------------+-----------------------------------------------------+ + | ``YYBACKUP ()`` | backup current input position | + +---------------------+-----------------------------------------------------+ + | ``YYBACKUPCTX ()`` | backup current input position for trailing context | + +---------------------+-----------------------------------------------------+ + | ``YYRESTORE ()`` | restore current input position | + +---------------------+-----------------------------------------------------+ + | ``YYRESTORECTX ()`` | restore current input position for trailing context | + +---------------------+-----------------------------------------------------+ + | ``YYLESSTHAN (n)`` | check if less than ``n`` input characters are left | + +---------------------+-----------------------------------------------------+ + +This `article `_ +has more details, and you can find some usage examples +`here `_. + +.. _Examples: + +Examples +======== + +-------------------------------------------------------------------------------- + +The subdirectory ``examples`` of the ``re2c`` distribution contains a few step +by step examples to get you started with ``re2c``. + +Given the following code: + +.. code-block:: c + + unsigned int stou (const char \* s) + { + # define YYCTYPE char const + YYCTYPE * YYCURSOR = s; + unsigned int result = 0; + for (;;) + { + /*!re2c + re2c:yyfill:enable = 0; + + "\x00" { return result; } + [0-9] { result = result * 10 + c; continue; } + */ + } + } + +``re2c -is`` will generate: + +.. code-block:: c + + /* Generated by re2c 0.13.7.dev on Mon Jul 14 13:37:46 2014 */ + unsigned int stou (const char * s) + { + # define YYCTYPE char + const YYCTYPE * YYCURSOR = s; + unsigned int result = 0; + + for (;;) + { + { + YYCTYPE yych; + + yych = *YYCURSOR; + if (yych <= 0x00) goto yy3; + if (yych <= '/') goto yy2; + if (yych <= '9') goto yy5; + + yy2: + yy3: + ++YYCURSOR; + { return result; } + yy5: + ++YYCURSOR; + { result = result * 10 + c; continue; } + } + } + } + +.. _Changelog: + +Changelog +========= +-------------------------------------------------------------------------------- + +.. include:: changelog.rst diff --git a/src/options.rst b/src/options/options_list.rst similarity index 100% rename from src/options.rst rename to src/options/options_list.rst diff --git a/src/options/warnings_list.rst b/src/options/warnings_list.rst new file mode 100644 index 00000000..3c175a61 --- /dev/null +++ b/src/options/warnings_list.rst @@ -0,0 +1,56 @@ +``-W`` + Turn on all warnings. + +``-Werror`` + Turn warnings into errors. Note that this option along + doesn't turn on any warnings, it only affects those warnings that have + been turned on so far or will be turned on later. + +``-W`` + Turn on individual ``warning``. + +``-Wno-`` + Turn off individual ``warning``. + +``-Werror-`` + Turn on individual ``warning`` and treat it as error (this implies ``-W``). + +``-Wno-error-`` + Don't treat this particular ``warning`` as error. This doesn't turn off + the warning itself. + +``-Wcondition-order`` + Warn if the generated program makes implicit + assumptions about condition numbering. One should use either ``-t, --type-header`` option or + ``/*!types:re2c*/`` directive to generate mapping of condition names to numbers and use + autogenerated condition names. + +``-Wempty-character-class`` + Warn if regular expression contains empty + character class. From the rational point of view trying to match empty + character class makes no sense: it should always fail. However, for + backwards compatibility reasons ``re2c`` allows empty character class and + treats it as empty string. Use ``--empty-class`` option to change default + behaviour. + +``-Wmatch-empty-string`` + Warn if regular expression in a rule is + nullable (matches empty string). If DFA runs in a loop and empty match + is unintentional (input position in not advanced manually), lexer may + get stuck in eternal loop. + +``-Wswapped-range`` + Warn if range lower bound is greater that upper + bound. Default ``re2c`` behaviour is to silently swap range bounds. + +``-Wundefined-control-flow`` + Warn if some input strings cause undefined + control flow in lexer (the faulty patterns are reported). This is the + most dangerous and common mistake. It can be easily fixed by adding + default rule ``*`` (this rule has the lowest priority, matches any code unit and consumes + exactly one code unit). + +``-Wuseless-escape`` + Warn if a symbol is escaped when it shouldn't be. + By default re2c silently ignores escape, but this may as well indicate a + typo or an error in escape sequence. -- 2.40.0