mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-22 12:11:25 +00:00
43abfba723
re2c instead of "Linking X". - Updated lemon and re2c to the latest versions and ported dehsupp to use them for code generation. (Xlatcc is next.) - Added function level linking for Makefile.mingw. SVN r144 (trunk)
179 lines
6 KiB
Text
179 lines
6 KiB
Text
re2c Version 0.10.3
|
|
------------------
|
|
|
|
Originally written by Peter Bumbulis (peter@csg.uwaterloo.ca)
|
|
|
|
Currently maintained by:
|
|
Dan Nuffer <nuffer at users.sourceforge.net>
|
|
Marcus Boerger <helly at users.sourceforge.net>
|
|
Hartmut Kaiser <hkaiser at users.sourceforge.net>
|
|
|
|
The re2c distribution can be found at:
|
|
|
|
http://sourceforge.net/projects/re2c/
|
|
|
|
re2c has been developed and tested with gcc 3.3 to 4.0.2, Microsoft and Intel
|
|
compilers on various platforms. Building re2c requires autoconf 2.57 and bison
|
|
(tested with 1.875 and later). Under windows you don't need autoconf or bison
|
|
and can use the pregenerated files.
|
|
|
|
You can build this software by simply typing the following commands:
|
|
./configure
|
|
make
|
|
|
|
The above version will be based on the pregenerated scanner.cc file.
|
|
If you want to build that file yourself (recommended when installing
|
|
re2c) you need the following steps:
|
|
./configure
|
|
make
|
|
rm -f scanner.cc
|
|
make install
|
|
|
|
Or you can create a rpm package and install it by the following commands:
|
|
./configure
|
|
make rpm
|
|
rpm -Uhv <packagedir>/re2c-0.10.3-1.rpm
|
|
|
|
If you want to build from CVS then the first thing you should do is
|
|
regenerating all build files using the following command:
|
|
./autogen.sh
|
|
and then continue with one of the above described build methods. Or if you
|
|
need to generate RPM packages for cvs builds use these commands:
|
|
./autogen.sh
|
|
./configure
|
|
./makerpm <release>
|
|
rpm -Uhv <packagedir>/re2c-0.10.3-<release>.rpm
|
|
|
|
Here <realease> should be a number like 1. And <packagedir> must equal
|
|
the directory where the makerpm step has written the generated rpm to.
|
|
|
|
If you are on a debian system you can use the tool 'alien' to convert rpms
|
|
to debian packages.
|
|
|
|
When building with native SUN compilers you need to set the following compiler
|
|
flags: CXXFLAGS='-g -compat5 -library=stlport4'.
|
|
|
|
If you want to build re2c on a windows system you can either use cygwin and one
|
|
of the methods described above or use Microsoft Visual C .NET 2002 or later
|
|
with the solution files provided (re2c.sln for 2002/2003 and re2c-2005.sln for
|
|
version 2005). re2c cannot be built with Microsoft Visual C 6.0 or earlier.
|
|
|
|
re2c is a great tool for writing fast and flexible lexers. It has
|
|
served many people well for many years. re2c is on the order of 2-3
|
|
times faster than a flex based scanner, and its input model is much
|
|
more flexible.
|
|
|
|
For an introduction to re2c refer to the lessons sub directory.
|
|
|
|
Peter's original version 0.5 ANNOUNCE and README follows.
|
|
|
|
--
|
|
|
|
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)
|
|
{
|
|
#define YYCTYPE char
|
|
#define YYCURSOR p
|
|
#define YYLIMIT p
|
|
#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)
|
|
{
|
|
#define YYCTYPE char
|
|
#define YYCURSOR p
|
|
#define YYLIMIT p
|
|
#define YYFILL(n)
|
|
{
|
|
YYCTYPE yych;
|
|
unsigned int yyaccept;
|
|
|
|
if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
|
|
yych = *YYCURSOR;
|
|
if(yych <= '/') goto yy4;
|
|
if(yych >= ':') goto yy4;
|
|
yy2: yych = *++YYCURSOR;
|
|
goto yy7;
|
|
yy3:
|
|
#line 9
|
|
{return YYCURSOR;}
|
|
yy4: yych = *++YYCURSOR;
|
|
yy5:
|
|
#line 10
|
|
{return NULL;}
|
|
yy6: ++YYCURSOR;
|
|
if(YYLIMIT == YYCURSOR) YYFILL(1);
|
|
yych = *YYCURSOR;
|
|
yy7: if(yych <= '/') goto yy3;
|
|
if(yych <= '9') goto yy6;
|
|
goto yy3;
|
|
}
|
|
#line 11
|
|
|
|
}
|
|
|
|
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
|
|
|
|
--
|
|
|
|
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 (including suggestions for
|
|
improving the distribution) to
|
|
|
|
peter@csg.uwaterloo.ca
|
|
|
|
Include a small example and the banner from parser.y with bug reports.
|
|
|