From d4ccaea74f97e7f1cde643a6b1ee11bf66f5f20e Mon Sep 17 00:00:00 2001 From: nuffer Date: Sat, 31 Jan 2004 17:02:47 +0000 Subject: [PATCH] Fixed things so they compile. --- Makefile | 4 +- README | 32 +++++---- bootstrap/scanner.cc | 10 +-- parser.cc | 139 ++++++++++++++++++++------------------- re2c.1 | 12 +++- scanner.cc | 150 ++++++++++++++++--------------------------- scanner.h | 4 +- scanner.re | 10 +-- y.tab.h | 23 +++++-- 9 files changed, 192 insertions(+), 192 deletions(-) diff --git a/Makefile b/Makefile index b1be0d52..0a537cc3 100644 --- a/Makefile +++ b/Makefile @@ -10,7 +10,7 @@ RE2C_VERSION = 0.9.2 %.cc: %.re -@if test -x re2c; then \ echo "re2c -s $< >$@"; \ - re2c -s $< >$@; \ + ./re2c -s $< >$@; \ else \ echo "cp -f bootstrap/$@ $@"; \ cp -f bootstrap/$@ $@; \ @@ -40,7 +40,7 @@ parser.cc: parser.y mv -f y.tab.c parser.cc re2c: README re2c.1 $(OBJS) - $(CC) -o $@ $(OBJS) $(LDFLAGS) -lstdc++ + $(CC) -o $@ $(OBJS) $(LDFLAGS) re2c.ps: gunzip -c doc/loplas.ps.gz > re2c.ps diff --git a/README b/README index a16c4712..862a9614 100644 --- a/README +++ b/README @@ -1,23 +1,33 @@ -re2c ----- +re2c Version 0.9.2 +------------------ -Version 0.9.1 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 + http://sourceforge.net/projects/re2c/ 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: +and tested with egcs 1.0.2 and gcc 2.7.2.3, 2.96 and 3.3.1 on Linux +x86. You can compile your own version with other gcc version if you +have yacc or any working bison version (tested up to bison 1.875). + +You can install this software by simple typing the following commands: + make + make install + +Or you can create a rpm package and install it by the following commands: + make makerpm + ./makerpm + rpm -Uhv /re2c-0.9.2-.rpm + +Here should be a number like 1. And must equal +the directory where the makerpm step has written the generated rpm to. + +Peter Bumbulis' original release can be found at: ftp://csg.uwaterloo.ca/pub/peter/re2c.0.5.tar.gz @@ -27,7 +37,7 @@ 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 +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 diff --git a/bootstrap/scanner.cc b/bootstrap/scanner.cc index 19b42597..53fcb08d 100644 --- a/bootstrap/scanner.cc +++ b/bootstrap/scanner.cc @@ -12,7 +12,7 @@ extern YYSTYPE yylval; #define BSIZE 8192 -#define YYCTYPE uchar +#define YYCTYPE char #define YYCURSOR cursor #define YYLIMIT lim #define YYMARKER ptr @@ -27,7 +27,7 @@ Scanner::Scanner(int i) : in(i), ; } -uchar *Scanner::fill(uchar *cursor){ +char *Scanner::fill(char *cursor){ if(!eof){ uint cnt = tok - bot; if(cnt){ @@ -39,7 +39,7 @@ uchar *Scanner::fill(uchar *cursor){ lim -= cnt; } if((top - lim) < BSIZE){ - uchar *buf = new uchar[(lim - bot) + BSIZE]; + char *buf = new char[(lim - bot) + BSIZE]; memcpy(buf, tok, lim - tok); tok = buf; ptr = &buf[ptr - bot]; @@ -62,7 +62,7 @@ uchar *Scanner::fill(uchar *cursor){ int Scanner::echo(ostream &out){ - uchar *cursor = cur; + char *cursor = cur; tok = cursor; echo: { @@ -117,7 +117,7 @@ yy14: int Scanner::scan(){ - uchar *cursor = cur; + char *cursor = cur; uint depth; scan: diff --git a/parser.cc b/parser.cc index c2cce9db..7c20d417 100644 --- a/parser.cc +++ b/parser.cc @@ -12,6 +12,8 @@ #line 1 "parser.y" +/* $Id$ */ + #include #include #include @@ -31,8 +33,15 @@ static uint accept; static RegExp *spec; static Scanner *in; +/* Bison version 1.875 emits a definition that is not working + * with several g++ version. Hence we disable it here. + */ +#if defined(__GNUC__) +#define __attribute__(x) +#endif + -#line 26 "parser.y" +#line 35 "parser.y" #ifndef YYSTYPE typedef union { Symbol *symbol; @@ -111,9 +120,9 @@ static const short yyrhs[] = /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const short yyrline[] = { - 0, 44, 47, 49, 52, 58, 62, 64, 68, 70, - 74, 76, 83, 85, 89, 91, 107, 109, 113, 117, - 119, 121 + 0, 53, 56, 58, 61, 67, 71, 73, 77, 79, + 83, 85, 92, 94, 98, 100, 116, 118, 122, 126, + 128, 130 }; #endif @@ -901,65 +910,65 @@ yyreduce: switch (yyn) { case 1: -#line 45 "parser.y" +#line 54 "parser.y" { accept = 0; - spec = NULL; ; - break;} + spec = NULL; } + break; case 2: -#line 48 "parser.y" -{ spec = spec? mkAlt(spec, yyvsp[0].regexp) : yyvsp[0].regexp; ; - break;} +#line 57 "parser.y" +{ spec = spec? mkAlt(spec, yyvsp[0].regexp) : yyvsp[0].regexp; } + break; case 4: -#line 53 "parser.y" +#line 62 "parser.y" { if(yyvsp[-3].symbol->re) in->fatal("sym already defined"); - yyvsp[-3].symbol->re = yyvsp[-1].regexp; ; - break;} + yyvsp[-3].symbol->re = yyvsp[-1].regexp; } + break; case 5: -#line 59 "parser.y" -{ yyval.regexp = new RuleOp(yyvsp[-2].regexp, yyvsp[-1].regexp, yyvsp[0].token, accept++); ; - break;} +#line 68 "parser.y" +{ yyval.regexp = new RuleOp(yyvsp[-2].regexp, yyvsp[-1].regexp, yyvsp[0].token, accept++); } + break; case 6: -#line 63 "parser.y" -{ yyval.regexp = new NullOp; ; - break;} +#line 72 "parser.y" +{ yyval.regexp = new NullOp; } + break; case 7: -#line 65 "parser.y" -{ yyval.regexp = yyvsp[0].regexp; ; - break;} +#line 74 "parser.y" +{ yyval.regexp = yyvsp[0].regexp; } + break; case 8: -#line 69 "parser.y" -{ yyval.regexp = yyvsp[0].regexp; ; - break;} +#line 78 "parser.y" +{ yyval.regexp = yyvsp[0].regexp; } + break; case 9: -#line 71 "parser.y" -{ yyval.regexp = mkAlt(yyvsp[-2].regexp, yyvsp[0].regexp); ; - break;} +#line 80 "parser.y" +{ yyval.regexp = mkAlt(yyvsp[-2].regexp, yyvsp[0].regexp); } + break; case 10: -#line 75 "parser.y" -{ yyval.regexp = yyvsp[0].regexp; ; - break;} +#line 84 "parser.y" +{ yyval.regexp = yyvsp[0].regexp; } + break; case 11: -#line 77 "parser.y" +#line 86 "parser.y" { yyval.regexp = mkDiff(yyvsp[-2].regexp, yyvsp[0].regexp); if(!yyval.regexp) in->fatal("can only difference char sets"); - ; - break;} + } + break; case 12: -#line 84 "parser.y" -{ yyval.regexp = yyvsp[0].regexp; ; - break;} +#line 93 "parser.y" +{ yyval.regexp = yyvsp[0].regexp; } + break; case 13: -#line 86 "parser.y" -{ yyval.regexp = new CatOp(yyvsp[-1].regexp, yyvsp[0].regexp); ; - break;} +#line 95 "parser.y" +{ yyval.regexp = new CatOp(yyvsp[-1].regexp, yyvsp[0].regexp); } + break; case 14: -#line 90 "parser.y" -{ yyval.regexp = yyvsp[0].regexp; ; - break;} +#line 99 "parser.y" +{ yyval.regexp = yyvsp[0].regexp; } + break; case 15: -#line 92 "parser.y" +#line 101 "parser.y" { switch(yyvsp[0].op){ case '*': @@ -972,34 +981,34 @@ case 15: yyval.regexp = mkAlt(yyvsp[-1].regexp, new NullOp()); break; } - ; - break;} + } + break; case 16: -#line 108 "parser.y" -{ yyval.op = yyvsp[0].op; ; - break;} +#line 117 "parser.y" +{ yyval.op = yyvsp[0].op; } + break; case 17: -#line 110 "parser.y" -{ yyval.op = (yyvsp[-1].op == yyvsp[0].op) ? yyvsp[-1].op : '*'; ; - break;} +#line 119 "parser.y" +{ yyval.op = (yyvsp[-1].op == yyvsp[0].op) ? yyvsp[-1].op : '*'; } + break; case 18: -#line 114 "parser.y" +#line 123 "parser.y" { if(!yyvsp[0].symbol->re) in->fatal("can't find symbol"); - yyval.regexp = yyvsp[0].symbol->re; ; - break;} + yyval.regexp = yyvsp[0].symbol->re; } + break; case 19: -#line 118 "parser.y" -{ yyval.regexp = yyvsp[0].regexp; ; - break;} +#line 127 "parser.y" +{ yyval.regexp = yyvsp[0].regexp; } + break; case 20: -#line 120 "parser.y" -{ yyval.regexp = yyvsp[0].regexp; ; - break;} +#line 129 "parser.y" +{ yyval.regexp = yyvsp[0].regexp; } + break; case 21: -#line 122 "parser.y" -{ yyval.regexp = yyvsp[-1].regexp; ; - break;} +#line 131 "parser.y" +{ yyval.regexp = yyvsp[-1].regexp; } + break; } #line 705 "/usr/share/bison/bison.simple" @@ -1233,7 +1242,7 @@ yyreturn: #endif return yyresult; } -#line 125 "parser.y" +#line 134 "parser.y" extern "C" { diff --git a/re2c.1 b/re2c.1 index a2a580c4..aa239b62 100644 --- a/re2c.1 +++ b/re2c.1 @@ -1,11 +1,17 @@ +./" +./" $Id$ +./" +.TH RE2C 1 "8 April 1994" "Version 0.9.2" .ds re \fBre2c\fP .ds le \fBlex\fP .ds rx regular expression .ds lx \fIl\fP-expression -.TH RE2C 1 "8 April 1994" "Version 0.5" \"$Log$ -\"Revision 1.1 2003/12/13 04:58:20 nuffer -\"Initial revision +\"Revision 1.2 2004/01/31 17:02:47 nuffer +\"Fixed things so they compile. +\" +\"Revision 1.1 2004/01/31 15:44:39 nuffer +\"Applied patch from Marcus Boerger \" \"Revision 1.2 1994/04/16 15:50:32 peter \"Fix bug in simple example. diff --git a/scanner.cc b/scanner.cc index b8b03b9d..53fcb08d 100644 --- a/scanner.cc +++ b/scanner.cc @@ -1,6 +1,7 @@ -/* Generated by re2c 0.9.2 on Sun Jan 11 21:32:00 2004 */ +/* Generated by re2c 0.5 on Sat May 15 11:35:52 1999 */ #line 1 "scanner.re" -#include #include +#include +#include #include #include #include "scanner.h" @@ -57,20 +58,13 @@ char *Scanner::fill(char *cursor){ return cursor; } -#line 67 "scanner.re" +#line 68 int Scanner::echo(ostream &out){ char *cursor = cur; - - // Catch EOF - if (eof && cursor == eof) - return 0; - tok = cursor; echo: - -#line 7 "re2c-output.c" { YYCTYPE yych; unsigned int yyaccept; @@ -85,17 +79,15 @@ yy2: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if(yych == '*') goto yy7; yy3: -#line 86 "scanner.re" -{ goto echo; } -#line 24 "re2c-output.c" +#line 82 + { goto echo; } yy4: yych = *++YYCURSOR; yy5: -#line 82 "scanner.re" -{ if(cursor == eof) RETURN(0); - out.write((char *)tok, cursor - tok); +#line 78 + { if(cursor == eof) RETURN(0); + out.write(tok, cursor - tok); tok = pos = cursor; cline++; goto echo; } -#line 32 "re2c-output.c" yy6: yych = *++YYCURSOR; goto yy3; yy7: yych = *++YYCURSOR; @@ -114,13 +106,12 @@ yy12: yych = *++YYCURSOR; if(yych != 'c') goto yy8; yy13: yych = *++YYCURSOR; yy14: -#line 79 "scanner.re" -{ out.write((char *)tok, &cursor[-7] - tok); +#line 75 + { out.write(tok, &cursor[-7] - tok); tok = cursor; RETURN(1); } -#line 55 "re2c-output.c" } -#line 87 "scanner.re" +#line 83 } @@ -133,8 +124,6 @@ scan: tchar = cursor - pos; tline = cline; tok = cursor; - -#line 59 "re2c-output.c" { YYCTYPE yych; unsigned int yyaccept; @@ -190,38 +179,33 @@ yy15: } yy17: yych = *++YYCURSOR; yy18: -#line 100 "scanner.re" -{ depth = 1; +#line 96 + { depth = 1; goto code; } -#line 119 "re2c-output.c" yy19: yych = *++YYCURSOR; if(yych == '*') goto yy54; yy20: -#line 119 "scanner.re" -{ RETURN(*tok); } -#line 125 "re2c-output.c" +#line 115 + { RETURN(*tok); } yy21: yych = *++YYCURSOR; if(yych == '/') goto yy52; yy22: -#line 121 "scanner.re" -{ yylval.op = *tok; +#line 117 + { yylval.op = *tok; RETURN(CLOSE); } -#line 132 "re2c-output.c" yy23: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if(yych != '\n') goto yy48; yy24: -#line 112 "scanner.re" -{ fatal("bad string"); } -#line 139 "re2c-output.c" +#line 108 + { fatal("bad string"); } yy25: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); if(yych != '\n') goto yy42; yy26: -#line 117 "scanner.re" -{ fatal("bad character constant"); } -#line 146 "re2c-output.c" +#line 113 + { fatal("bad character constant"); } yy27: yych = *++YYCURSOR; goto yy20; yy28: yych = *++YYCURSOR; @@ -229,32 +213,28 @@ yy28: yych = *++YYCURSOR; yy29: yych = *++YYCURSOR; goto yy40; yy30: -#line 124 "scanner.re" -{ cur = cursor; +#line 120 + { cur = cursor; yylval.symbol = Symbol::find(token()); return ID; } -#line 158 "re2c-output.c" yy31: yych = *++YYCURSOR; goto yy38; yy32: -#line 128 "scanner.re" -{ goto scan; } -#line 164 "re2c-output.c" +#line 124 + { goto scan; } yy33: yych = *++YYCURSOR; yy34: -#line 130 "scanner.re" -{ if(cursor == eof) RETURN(0); +#line 126 + { if(cursor == eof) RETURN(0); pos = cursor; cline++; goto scan; } -#line 172 "re2c-output.c" yy35: yych = *++YYCURSOR; yy36: -#line 135 "scanner.re" -{ cerr << "unexpected character: " << *tok << endl; +#line 131 + { cerr << "unexpected character: " << *tok << endl; goto scan; } -#line 179 "re2c-output.c" yy37: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; @@ -296,11 +276,10 @@ yy44: ++YYCURSOR; goto yy41; yy45: yych = *++YYCURSOR; yy46: -#line 114 "scanner.re" -{ cur = cursor; +#line 110 + { cur = cursor; yylval.regexp = ranToRE(token()); return RANGE; } -#line 225 "re2c-output.c" yy47: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; @@ -318,30 +297,25 @@ yy49: ++YYCURSOR; goto yy47; yy50: yych = *++YYCURSOR; yy51: -#line 109 "scanner.re" -{ cur = cursor; +#line 105 + { cur = cursor; yylval.regexp = strToRE(token()); return STRING; } -#line 247 "re2c-output.c" yy52: yych = *++YYCURSOR; yy53: -#line 106 "scanner.re" -{ tok = cursor; +#line 102 + { tok = cursor; RETURN(0); } -#line 253 "re2c-output.c" yy54: yych = *++YYCURSOR; yy55: -#line 103 "scanner.re" -{ depth = 1; +#line 99 + { depth = 1; goto comment; } -#line 259 "re2c-output.c" } -#line 138 "scanner.re" +#line 134 code: - -#line 263 "re2c-output.c" { YYCTYPE yych; unsigned int yyaccept; @@ -369,33 +343,29 @@ yy56: } yy58: yych = *++YYCURSOR; yy59: -#line 142 "scanner.re" -{ if(--depth == 0){ +#line 138 + { if(--depth == 0){ cur = cursor; yylval.token = new Token(token(), tline); return CODE; } goto code; } -#line 298 "re2c-output.c" yy60: yych = *++YYCURSOR; yy61: -#line 148 "scanner.re" -{ ++depth; +#line 144 + { ++depth; goto code; } -#line 304 "re2c-output.c" yy62: yych = *++YYCURSOR; yy63: -#line 150 "scanner.re" -{ if(cursor == eof) fatal("missing '}'"); +#line 146 + { if(cursor == eof) fatal("missing '}'"); pos = cursor; cline++; goto code; } -#line 312 "re2c-output.c" yy64: yych = *++YYCURSOR; yy65: -#line 154 "scanner.re" -{ goto code; } -#line 317 "re2c-output.c" +#line 150 + { goto code; } yy66: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if(yych == '\n') goto yy65; @@ -439,12 +409,10 @@ yy74: ++YYCURSOR; if(yych == '\n') goto yy70; goto yy72; } -#line 155 "scanner.re" +#line 151 comment: - -#line 363 "re2c-output.c" { YYCTYPE yych; unsigned int yyaccept; @@ -464,38 +432,34 @@ yy75: yy77: yych = *++YYCURSOR; if(yych == '/') goto yy85; yy78: -#line 169 "scanner.re" -{ goto comment; } -#line 385 "re2c-output.c" +#line 165 + { goto comment; } yy79: yych = *++YYCURSOR; if(yych == '*') goto yy83; goto yy78; yy80: yych = *++YYCURSOR; yy81: -#line 165 "scanner.re" -{ if(cursor == eof) RETURN(0); +#line 161 + { if(cursor == eof) RETURN(0); tok = pos = cursor; cline++; goto comment; } -#line 396 "re2c-output.c" yy82: yych = *++YYCURSOR; goto yy78; yy83: yych = *++YYCURSOR; yy84: -#line 163 "scanner.re" -{ ++depth; +#line 159 + { ++depth; goto comment; } -#line 404 "re2c-output.c" yy85: yych = *++YYCURSOR; yy86: -#line 159 "scanner.re" -{ if(--depth == 0) +#line 155 + { if(--depth == 0) goto scan; else goto comment; } -#line 412 "re2c-output.c" } -#line 170 "scanner.re" +#line 166 } diff --git a/scanner.h b/scanner.h index 0032558c..fa1b7ee1 100644 --- a/scanner.h +++ b/scanner.h @@ -7,10 +7,10 @@ class Scanner { private: int in; - uchar *bot, *tok, *ptr, *cur, *pos, *lim, *top, *eof; + char *bot, *tok, *ptr, *cur, *pos, *lim, *top, *eof; uint tchar, tline, cline; private: - uchar *fill(uchar*); + char *fill(char*); public: Scanner(int); int echo(ostream&); diff --git a/scanner.re b/scanner.re index ef572017..e1f0a3cb 100644 --- a/scanner.re +++ b/scanner.re @@ -11,7 +11,7 @@ extern YYSTYPE yylval; #define BSIZE 8192 -#define YYCTYPE uchar +#define YYCTYPE char #define YYCURSOR cursor #define YYLIMIT lim #define YYMARKER ptr @@ -26,7 +26,7 @@ Scanner::Scanner(int i) : in(i), ; } -uchar *Scanner::fill(uchar *cursor){ +char *Scanner::fill(char *cursor){ if(!eof){ uint cnt = tok - bot; if(cnt){ @@ -38,7 +38,7 @@ uchar *Scanner::fill(uchar *cursor){ lim -= cnt; } if((top - lim) < BSIZE){ - uchar *buf = new uchar[(lim - bot) + BSIZE]; + char *buf = new char[(lim - bot) + BSIZE]; memcpy(buf, tok, lim - tok); tok = buf; ptr = &buf[ptr - bot]; @@ -69,7 +69,7 @@ digit = [0-9]; */ int Scanner::echo(ostream &out){ - uchar *cursor = cur; + char *cursor = cur; // Catch EOF if (eof && cursor == eof) @@ -91,7 +91,7 @@ echo: int Scanner::scan(){ - uchar *cursor = cur; + char *cursor = cur; uint depth; scan: diff --git a/y.tab.h b/y.tab.h index d7b3702d..ba8fc016 100644 --- a/y.tab.h +++ b/y.tab.h @@ -1,12 +1,23 @@ -#define CLOSE 257 -#define ID 258 -#define CODE 259 -#define RANGE 260 -#define STRING 261 +#ifndef BISON_Y_TAB_H +# define BISON_Y_TAB_H + +#ifndef YYSTYPE typedef union { Symbol *symbol; RegExp *regexp; Token *token; char op; -} YYSTYPE; +} yystype; +# define YYSTYPE yystype +# define YYSTYPE_IS_TRIVIAL 1 +#endif +# define CLOSE 257 +# define ID 258 +# define CODE 259 +# define RANGE 260 +# define STRING 261 + + extern YYSTYPE yylval; + +#endif /* not BISON_Y_TAB_H */ -- 2.50.1