From 910d5c64aabb8acffccc3a98ff09969226ff26bb Mon Sep 17 00:00:00 2001 From: Peter Johnson Date: Sun, 7 Apr 2002 22:46:31 +0000 Subject: [PATCH] Start C conversion. Eliminate bootstrap files. svn path=/trunk/yasm/; revision=577 --- tools/re2c/{actions.cc => actions.c} | 0 tools/re2c/bootstrap/parser.cc | 531 ----------------------- tools/re2c/bootstrap/scanner.cc | 470 -------------------- tools/re2c/bootstrap/y.tab.h | 12 - tools/re2c/{code.cc => code.c} | 0 tools/re2c/{dfa.cc => dfa.c} | 0 tools/re2c/{main.cc => main.c} | 0 tools/re2c/parser.cc | 531 ----------------------- tools/re2c/re2c.c | 54 +++ tools/re2c/scanner.cc | 470 -------------------- tools/re2c/{substr.cc => substr.c} | 0 tools/re2c/{translate.cc => translate.c} | 0 tools/re2c/y.tab.h | 12 - 13 files changed, 54 insertions(+), 2026 deletions(-) rename tools/re2c/{actions.cc => actions.c} (100%) delete mode 100644 tools/re2c/bootstrap/parser.cc delete mode 100644 tools/re2c/bootstrap/scanner.cc delete mode 100644 tools/re2c/bootstrap/y.tab.h rename tools/re2c/{code.cc => code.c} (100%) rename tools/re2c/{dfa.cc => dfa.c} (100%) rename tools/re2c/{main.cc => main.c} (100%) delete mode 100644 tools/re2c/parser.cc create mode 100644 tools/re2c/re2c.c delete mode 100644 tools/re2c/scanner.cc rename tools/re2c/{substr.cc => substr.c} (100%) rename tools/re2c/{translate.cc => translate.c} (100%) delete mode 100644 tools/re2c/y.tab.h diff --git a/tools/re2c/actions.cc b/tools/re2c/actions.c similarity index 100% rename from tools/re2c/actions.cc rename to tools/re2c/actions.c diff --git a/tools/re2c/bootstrap/parser.cc b/tools/re2c/bootstrap/parser.cc deleted file mode 100644 index 6d664005..00000000 --- a/tools/re2c/bootstrap/parser.cc +++ /dev/null @@ -1,531 +0,0 @@ -#ifndef lint -static char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93"; -#endif -#define YYBYACC 1 -#define YYMAJOR 1 -#define YYMINOR 9 -#define yyclearin (yychar=(-1)) -#define yyerrok (yyerrflag=0) -#define YYRECOVERING (yyerrflag!=0) -#define YYPREFIX "yy" -#line 2 "parser.y" - -#include -#include -#include -#include -#include "globals.h" -#include "parser.h" -int yyparse(); -int yylex(); -void yyerror(char*); - -static uint accept; -static RegExp *spec; -static Scanner *in; - -#line 21 "parser.y" -typedef union { - Symbol *symbol; - RegExp *regexp; - Token *token; - char op; -} YYSTYPE; -#line 35 "y.tab.c" -#define CLOSE 257 -#define ID 258 -#define CODE 259 -#define RANGE 260 -#define STRING 261 -#define YYERRCODE 256 -short yylhs[] = { -1, - 0, 0, 0, 9, 2, 3, 3, 4, 4, 5, - 5, 6, 6, 7, 7, 1, 1, 8, 8, 8, - 8, -}; -short yylen[] = { 2, - 0, 2, 2, 4, 3, 0, 2, 1, 3, 1, - 3, 1, 2, 1, 2, 1, 2, 1, 1, 1, - 3, -}; -short yydefred[] = { 1, - 0, 0, 19, 20, 0, 2, 0, 0, 0, 12, - 0, 3, 0, 18, 0, 0, 0, 0, 0, 13, - 16, 0, 0, 21, 0, 0, 5, 0, 17, 4, -}; -short yydgoto[] = { 1, - 22, 6, 18, 7, 8, 9, 10, 11, 12, -}; -short yysindex[] = { 0, - -27, -49, 0, 0, -23, 0, -44, -84, -23, 0, - -243, 0, -23, 0, -39, -23, -23, -244, -23, 0, - 0, -239, -53, 0, -104, -84, 0, -23, 0, 0, -}; -short yyrindex[] = { 0, - 0, -31, 0, 0, 0, 0, -227, -17, -20, 0, - -40, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -36, 0, 0, -226, -16, 0, -19, 0, 0, -}; -short yygindex[] = { 0, - 0, 0, 0, 21, 18, 17, 1, 0, 0, -}; -#define YYTABLESIZE 243 -short yytable[] = { 14, - 14, 24, 16, 15, 15, 30, 14, 19, 18, 20, - 15, 13, 5, 21, 27, 18, 5, 29, 14, 17, - 10, 11, 15, 8, 9, 15, 10, 11, 20, 8, - 9, 6, 7, 23, 26, 28, 25, 0, 10, 11, - 0, 8, 9, 0, 0, 0, 0, 0, 0, 0, - 0, 14, 0, 0, 0, 15, 0, 0, 0, 0, - 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 17, 10, 11, 0, 0, 0, 0, 0, 0, 17, - 0, 0, 0, 14, 17, 0, 0, 15, 0, 0, - 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 10, 11, 0, 8, 9, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, - 14, 15, 15, 15, 15, 18, 18, 18, 18, 18, - 2, 0, 3, 4, 14, 0, 3, 4, 10, 11, - 0, 8, 9, -}; -short yycheck[] = { 40, - 41, 41, 47, 40, 41, 59, 47, 92, 40, 9, - 47, 61, 40, 257, 259, 47, 40, 257, 59, 124, - 41, 41, 59, 41, 41, 5, 47, 47, 28, 47, - 47, 259, 259, 13, 17, 19, 16, -1, 59, 59, - -1, 59, 59, -1, -1, -1, -1, -1, -1, -1, - -1, 92, -1, -1, -1, 92, -1, -1, -1, -1, - 92, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 124, 92, 92, -1, -1, -1, -1, -1, -1, 124, - -1, -1, -1, 124, 124, -1, -1, 124, -1, -1, - -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 124, 124, -1, 124, 124, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 258, 259, 260, - 261, 258, 259, 260, 261, 257, 258, 259, 260, 261, - 258, -1, 260, 261, 258, -1, 260, 261, 259, 259, - -1, 259, 259, -}; -#define YYFINAL 1 -#ifndef YYDEBUG -#define YYDEBUG 0 -#endif -#define YYMAXTOKEN 261 -#if YYDEBUG -char *yyname[] = { -"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,"'('","')'",0,0,0,0,0,"'/'",0,0,0,0,0,0,0,0,0,0,0,"';'",0,"'='",0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'\\\\'",0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -"CLOSE","ID","CODE","RANGE","STRING", -}; -char *yyrule[] = { -"$accept : spec", -"spec :", -"spec : spec rule", -"spec : spec decl", -"decl : ID '=' expr ';'", -"rule : expr look CODE", -"look :", -"look : '/' expr", -"expr : diff", -"expr : expr '|' diff", -"diff : term", -"diff : diff '\\\\' term", -"term : factor", -"term : term factor", -"factor : primary", -"factor : primary close", -"close : CLOSE", -"close : close CLOSE", -"primary : ID", -"primary : RANGE", -"primary : STRING", -"primary : '(' expr ')'", -}; -#endif -#ifdef YYSTACKSIZE -#undef YYMAXDEPTH -#define YYMAXDEPTH YYSTACKSIZE -#else -#ifdef YYMAXDEPTH -#define YYSTACKSIZE YYMAXDEPTH -#else -#define YYSTACKSIZE 500 -#define YYMAXDEPTH 500 -#endif -#endif -int yydebug; -int yynerrs; -int yyerrflag; -int yychar; -short *yyssp; -YYSTYPE *yyvsp; -YYSTYPE yyval; -YYSTYPE yylval; -short yyss[YYSTACKSIZE]; -YYSTYPE yyvs[YYSTACKSIZE]; -#define yystacksize YYSTACKSIZE -#line 121 "parser.y" - -void yyerror(char* s){ - in->fatal(s); -} - -int yylex(){ - return in->scan(); -} - -void parse(int i, ostream &o){ - char * fnamebuf; - char * token; - - o << "/* Generated by re2c 0.5 on "; - time_t now = time(&now); - o.write(ctime(&now), 24); - o << " */\n"; - - in = new Scanner(i); - - o << "#line " << in->line() << " \""; - if( fileName != NULL ) { - fnamebuf = strdup( fileName ); - } else { - fnamebuf = strdup( "" ); - } - token = strtok( fnamebuf, "\\" ); - for(;;) { - o << token; - token = strtok( NULL, "\\" ); - if( token == NULL ) break; - o << "\\\\"; - } - o << "\"\n"; - free( fnamebuf ); - - while(in->echo(o)){ - yyparse(); - if(spec) - genCode(o, spec); - o << "#line " << in->line() << "\n"; - } -} -#line 235 "y.tab.c" -#define YYABORT goto yyabort -#define YYREJECT goto yyabort -#define YYACCEPT goto yyaccept -#define YYERROR goto yyerrlab -int -yyparse() -{ - register int yym, yyn, yystate; -#if YYDEBUG - register char *yys; - extern char *getenv(); - - if (yys = getenv("YYDEBUG")) - { - yyn = *yys; - if (yyn >= '0' && yyn <= '9') - yydebug = yyn - '0'; - } -#endif - - yynerrs = 0; - yyerrflag = 0; - yychar = (-1); - - yyssp = yyss; - yyvsp = yyvs; - *yyssp = yystate = 0; - -yyloop: - if (yyn = yydefred[yystate]) goto yyreduce; - if (yychar < 0) - { - if ((yychar = yylex()) < 0) yychar = 0; -#if YYDEBUG - if (yydebug) - { - yys = 0; - if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; - if (!yys) yys = "illegal-symbol"; - printf("%sdebug: state %d, reading %d (%s)\n", - YYPREFIX, yystate, yychar, yys); - } -#endif - } - if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && - yyn <= YYTABLESIZE && yycheck[yyn] == yychar) - { -#if YYDEBUG - if (yydebug) - printf("%sdebug: state %d, shifting to state %d\n", - YYPREFIX, yystate, yytable[yyn]); -#endif - if (yyssp >= yyss + yystacksize - 1) - { - goto yyoverflow; - } - *++yyssp = yystate = yytable[yyn]; - *++yyvsp = yylval; - yychar = (-1); - if (yyerrflag > 0) --yyerrflag; - goto yyloop; - } - if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && - yyn <= YYTABLESIZE && yycheck[yyn] == yychar) - { - yyn = yytable[yyn]; - goto yyreduce; - } - if (yyerrflag) goto yyinrecovery; -#ifdef lint - goto yynewerror; -#endif -yynewerror: - yyerror("syntax error"); -#ifdef lint - goto yyerrlab; -#endif -yyerrlab: - ++yynerrs; -yyinrecovery: - if (yyerrflag < 3) - { - yyerrflag = 3; - for (;;) - { - if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 && - yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) - { -#if YYDEBUG - if (yydebug) - printf("%sdebug: state %d, error recovery shifting\ - to state %d\n", YYPREFIX, *yyssp, yytable[yyn]); -#endif - if (yyssp >= yyss + yystacksize - 1) - { - goto yyoverflow; - } - *++yyssp = yystate = yytable[yyn]; - *++yyvsp = yylval; - goto yyloop; - } - else - { -#if YYDEBUG - if (yydebug) - printf("%sdebug: error recovery discarding state %d\n", - YYPREFIX, *yyssp); -#endif - if (yyssp <= yyss) goto yyabort; - --yyssp; - --yyvsp; - } - } - } - else - { - if (yychar == 0) goto yyabort; -#if YYDEBUG - if (yydebug) - { - yys = 0; - if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; - if (!yys) yys = "illegal-symbol"; - printf("%sdebug: state %d, error recovery discards token %d (%s)\n", - YYPREFIX, yystate, yychar, yys); - } -#endif - yychar = (-1); - goto yyloop; - } -yyreduce: -#if YYDEBUG - if (yydebug) - printf("%sdebug: state %d, reducing by rule %d (%s)\n", - YYPREFIX, yystate, yyn, yyrule[yyn]); -#endif - yym = yylen[yyn]; - yyval = yyvsp[1-yym]; - switch (yyn) - { -case 1: -#line 40 "parser.y" -{ accept = 0; - spec = NULL; } -break; -case 2: -#line 43 "parser.y" -{ spec = spec? mkAlt(spec, yyvsp[0].regexp) : yyvsp[0].regexp; } -break; -case 4: -#line 48 "parser.y" -{ if(yyvsp[-3].symbol->re) - in->fatal("sym already defined"); - yyvsp[-3].symbol->re = yyvsp[-1].regexp; } -break; -case 5: -#line 54 "parser.y" -{ yyval.regexp = new RuleOp(yyvsp[-2].regexp, yyvsp[-1].regexp, yyvsp[0].token, accept++); } -break; -case 6: -#line 58 "parser.y" -{ yyval.regexp = new NullOp; } -break; -case 7: -#line 60 "parser.y" -{ yyval.regexp = yyvsp[0].regexp; } -break; -case 8: -#line 64 "parser.y" -{ yyval.regexp = yyvsp[0].regexp; } -break; -case 9: -#line 66 "parser.y" -{ yyval.regexp = mkAlt(yyvsp[-2].regexp, yyvsp[0].regexp); } -break; -case 10: -#line 70 "parser.y" -{ yyval.regexp = yyvsp[0].regexp; } -break; -case 11: -#line 72 "parser.y" -{ yyval.regexp = mkDiff(yyvsp[-2].regexp, yyvsp[0].regexp); - if(!yyval.regexp) - in->fatal("can only difference char sets"); - } -break; -case 12: -#line 79 "parser.y" -{ yyval.regexp = yyvsp[0].regexp; } -break; -case 13: -#line 81 "parser.y" -{ yyval.regexp = new CatOp(yyvsp[-1].regexp, yyvsp[0].regexp); } -break; -case 14: -#line 85 "parser.y" -{ yyval.regexp = yyvsp[0].regexp; } -break; -case 15: -#line 87 "parser.y" -{ - switch(yyvsp[0].op){ - case '*': - yyval.regexp = mkAlt(new CloseOp(yyvsp[-1].regexp), new NullOp()); - break; - case '+': - yyval.regexp = new CloseOp(yyvsp[-1].regexp); - break; - case '?': - yyval.regexp = mkAlt(yyvsp[-1].regexp, new NullOp()); - break; - } - } -break; -case 16: -#line 103 "parser.y" -{ yyval.op = yyvsp[0].op; } -break; -case 17: -#line 105 "parser.y" -{ yyval.op = (yyvsp[-1].op == yyvsp[0].op) ? yyvsp[-1].op : '*'; } -break; -case 18: -#line 109 "parser.y" -{ if(!yyvsp[0].symbol->re) - in->fatal("can't find symbol"); - yyval.regexp = yyvsp[0].symbol->re; } -break; -case 19: -#line 113 "parser.y" -{ yyval.regexp = yyvsp[0].regexp; } -break; -case 20: -#line 115 "parser.y" -{ yyval.regexp = yyvsp[0].regexp; } -break; -case 21: -#line 117 "parser.y" -{ yyval.regexp = yyvsp[-1].regexp; } -break; -#line 476 "y.tab.c" - } - yyssp -= yym; - yystate = *yyssp; - yyvsp -= yym; - yym = yylhs[yyn]; - if (yystate == 0 && yym == 0) - { -#if YYDEBUG - if (yydebug) - printf("%sdebug: after reduction, shifting from state 0 to\ - state %d\n", YYPREFIX, YYFINAL); -#endif - yystate = YYFINAL; - *++yyssp = YYFINAL; - *++yyvsp = yyval; - if (yychar < 0) - { - if ((yychar = yylex()) < 0) yychar = 0; -#if YYDEBUG - if (yydebug) - { - yys = 0; - if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; - if (!yys) yys = "illegal-symbol"; - printf("%sdebug: state %d, reading %d (%s)\n", - YYPREFIX, YYFINAL, yychar, yys); - } -#endif - } - if (yychar == 0) goto yyaccept; - goto yyloop; - } - if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && - yyn <= YYTABLESIZE && yycheck[yyn] == yystate) - yystate = yytable[yyn]; - else - yystate = yydgoto[yym]; -#if YYDEBUG - if (yydebug) - printf("%sdebug: after reduction, shifting from state %d \ -to state %d\n", YYPREFIX, *yyssp, yystate); -#endif - if (yyssp >= yyss + yystacksize - 1) - { - goto yyoverflow; - } - *++yyssp = yystate; - *++yyvsp = yyval; - goto yyloop; -yyoverflow: - yyerror("yacc stack overflow"); -yyabort: - return (1); -yyaccept: - return (0); -} diff --git a/tools/re2c/bootstrap/scanner.cc b/tools/re2c/bootstrap/scanner.cc deleted file mode 100644 index 19b42597..00000000 --- a/tools/re2c/bootstrap/scanner.cc +++ /dev/null @@ -1,470 +0,0 @@ -/* Generated by re2c 0.5 on Sat May 15 11:35:52 1999 */ -#line 1 "scanner.re" -#include -#include -#include -#include -#include "scanner.h" -#include "parser.h" -#include "y.tab.h" - -extern YYSTYPE yylval; - -#define BSIZE 8192 - -#define YYCTYPE uchar -#define YYCURSOR cursor -#define YYLIMIT lim -#define YYMARKER ptr -#define YYFILL(n) {cursor = fill(cursor);} - -#define RETURN(i) {cur = cursor; return i;} - - -Scanner::Scanner(int i) : in(i), - bot(NULL), tok(NULL), ptr(NULL), cur(NULL), pos(NULL), lim(NULL), - top(NULL), eof(NULL), tchar(0), tline(0), cline(1) { - ; -} - -uchar *Scanner::fill(uchar *cursor){ - if(!eof){ - uint cnt = tok - bot; - if(cnt){ - memcpy(bot, tok, lim - tok); - tok = bot; - ptr -= cnt; - cursor -= cnt; - pos -= cnt; - lim -= cnt; - } - if((top - lim) < BSIZE){ - uchar *buf = new uchar[(lim - bot) + BSIZE]; - memcpy(buf, tok, lim - tok); - tok = buf; - ptr = &buf[ptr - bot]; - cursor = &buf[cursor - bot]; - pos = &buf[pos - bot]; - lim = &buf[lim - bot]; - top = &lim[BSIZE]; - delete [] bot; - bot = buf; - } - if((cnt = read(in, (char*) lim, BSIZE)) != BSIZE){ - eof = &lim[cnt]; *eof++ = '\n'; - } - lim += cnt; - } - return cursor; -} - -#line 68 - - -int Scanner::echo(ostream &out){ - uchar *cursor = cur; - tok = cursor; -echo: -{ - YYCTYPE yych; - unsigned int yyaccept; - goto yy0; -yy1: ++YYCURSOR; -yy0: - if((YYLIMIT - YYCURSOR) < 7) YYFILL(7); - yych = *YYCURSOR; - if(yych == '\n') goto yy4; - if(yych != '/') goto yy6; -yy2: yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == '*') goto yy7; -yy3: -#line 82 - { goto echo; } -yy4: yych = *++YYCURSOR; -yy5: -#line 78 - { if(cursor == eof) RETURN(0); - out.write(tok, cursor - tok); - tok = pos = cursor; cline++; - goto echo; } -yy6: yych = *++YYCURSOR; - goto yy3; -yy7: yych = *++YYCURSOR; - if(yych == '!') goto yy9; -yy8: YYCURSOR = YYMARKER; - switch(yyaccept){ - case 0: goto yy3; - } -yy9: yych = *++YYCURSOR; - if(yych != 'r') goto yy8; -yy10: yych = *++YYCURSOR; - if(yych != 'e') goto yy8; -yy11: yych = *++YYCURSOR; - if(yych != '2') goto yy8; -yy12: yych = *++YYCURSOR; - if(yych != 'c') goto yy8; -yy13: yych = *++YYCURSOR; -yy14: -#line 75 - { out.write(tok, &cursor[-7] - tok); - tok = cursor; - RETURN(1); } -} -#line 83 - -} - - -int Scanner::scan(){ - uchar *cursor = cur; - uint depth; - -scan: - tchar = cursor - pos; - tline = cline; - tok = cursor; -{ - YYCTYPE yych; - unsigned int yyaccept; - goto yy15; -yy16: ++YYCURSOR; -yy15: - if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); - yych = *YYCURSOR; - if(yych <= ':'){ - if(yych <= '"'){ - if(yych <= '\n'){ - if(yych <= '\b') goto yy35; - if(yych <= '\t') goto yy31; - goto yy33; - } else { - if(yych == ' ') goto yy31; - if(yych <= '!') goto yy35; - goto yy23; - } - } else { - if(yych <= '*'){ - if(yych <= '\'') goto yy35; - if(yych <= ')') goto yy27; - goto yy21; - } else { - if(yych <= '+') goto yy28; - if(yych == '/') goto yy19; - goto yy35; - } - } - } else { - if(yych <= 'Z'){ - if(yych <= '='){ - if(yych == '<') goto yy35; - goto yy27; - } else { - if(yych == '?') goto yy28; - if(yych <= '@') goto yy35; - goto yy29; - } - } else { - if(yych <= '`'){ - if(yych <= '[') goto yy25; - if(yych <= '\\') goto yy27; - goto yy35; - } else { - if(yych <= 'z') goto yy29; - if(yych <= '{') goto yy17; - if(yych <= '|') goto yy27; - goto yy35; - } - } - } -yy17: yych = *++YYCURSOR; -yy18: -#line 96 - { depth = 1; - goto code; - } -yy19: yych = *++YYCURSOR; - if(yych == '*') goto yy54; -yy20: -#line 115 - { RETURN(*tok); } -yy21: yych = *++YYCURSOR; - if(yych == '/') goto yy52; -yy22: -#line 117 - { yylval.op = *tok; - RETURN(CLOSE); } -yy23: yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych != '\n') goto yy48; -yy24: -#line 108 - { fatal("bad string"); } -yy25: yyaccept = 1; - yych = *(YYMARKER = ++YYCURSOR); - if(yych != '\n') goto yy42; -yy26: -#line 113 - { fatal("bad character constant"); } -yy27: yych = *++YYCURSOR; - goto yy20; -yy28: yych = *++YYCURSOR; - goto yy22; -yy29: yych = *++YYCURSOR; - goto yy40; -yy30: -#line 120 - { cur = cursor; - yylval.symbol = Symbol::find(token()); - return ID; } -yy31: yych = *++YYCURSOR; - goto yy38; -yy32: -#line 124 - { goto scan; } -yy33: yych = *++YYCURSOR; -yy34: -#line 126 - { if(cursor == eof) RETURN(0); - pos = cursor; cline++; - goto scan; - } -yy35: yych = *++YYCURSOR; -yy36: -#line 131 - { cerr << "unexpected character: " << *tok << endl; - goto scan; - } -yy37: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; -yy38: if(yych == '\t') goto yy37; - if(yych == ' ') goto yy37; - goto yy32; -yy39: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; -yy40: if(yych <= '@'){ - if(yych <= '/') goto yy30; - if(yych <= '9') goto yy39; - goto yy30; - } else { - if(yych <= 'Z') goto yy39; - if(yych <= '`') goto yy30; - if(yych <= 'z') goto yy39; - goto yy30; - } -yy41: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; -yy42: if(yych <= '['){ - if(yych != '\n') goto yy41; - } else { - if(yych <= '\\') goto yy44; - if(yych <= ']') goto yy45; - goto yy41; - } -yy43: YYCURSOR = YYMARKER; - switch(yyaccept){ - case 0: goto yy24; - case 1: goto yy26; - } -yy44: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - if(yych == '\n') goto yy43; - goto yy41; -yy45: yych = *++YYCURSOR; -yy46: -#line 110 - { cur = cursor; - yylval.regexp = ranToRE(token()); - return RANGE; } -yy47: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; -yy48: if(yych <= '!'){ - if(yych == '\n') goto yy43; - goto yy47; - } else { - if(yych <= '"') goto yy50; - if(yych != '\\') goto yy47; - } -yy49: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - if(yych == '\n') goto yy43; - goto yy47; -yy50: yych = *++YYCURSOR; -yy51: -#line 105 - { cur = cursor; - yylval.regexp = strToRE(token()); - return STRING; } -yy52: yych = *++YYCURSOR; -yy53: -#line 102 - { tok = cursor; - RETURN(0); } -yy54: yych = *++YYCURSOR; -yy55: -#line 99 - { depth = 1; - goto comment; } -} -#line 134 - - -code: -{ - YYCTYPE yych; - unsigned int yyaccept; - goto yy56; -yy57: ++YYCURSOR; -yy56: - if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); - yych = *YYCURSOR; - if(yych <= '&'){ - if(yych <= '\n'){ - if(yych <= '\t') goto yy64; - goto yy62; - } else { - if(yych == '"') goto yy66; - goto yy64; - } - } else { - if(yych <= '{'){ - if(yych <= '\'') goto yy67; - if(yych <= 'z') goto yy64; - goto yy60; - } else { - if(yych != '}') goto yy64; - } - } -yy58: yych = *++YYCURSOR; -yy59: -#line 138 - { if(--depth == 0){ - cur = cursor; - yylval.token = new Token(token(), tline); - return CODE; - } - goto code; } -yy60: yych = *++YYCURSOR; -yy61: -#line 144 - { ++depth; - goto code; } -yy62: yych = *++YYCURSOR; -yy63: -#line 146 - { if(cursor == eof) fatal("missing '}'"); - pos = cursor; cline++; - goto code; - } -yy64: yych = *++YYCURSOR; -yy65: -#line 150 - { goto code; } -yy66: yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == '\n') goto yy65; - goto yy73; -yy67: yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == '\n') goto yy65; - goto yy69; -yy68: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; -yy69: if(yych <= '&'){ - if(yych != '\n') goto yy68; - } else { - if(yych <= '\'') goto yy64; - if(yych == '\\') goto yy71; - goto yy68; - } -yy70: YYCURSOR = YYMARKER; - switch(yyaccept){ - case 0: goto yy65; - } -yy71: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - if(yych == '\n') goto yy70; - goto yy68; -yy72: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; -yy73: if(yych <= '!'){ - if(yych == '\n') goto yy70; - goto yy72; - } else { - if(yych <= '"') goto yy64; - if(yych != '\\') goto yy72; - } -yy74: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - if(yych == '\n') goto yy70; - goto yy72; -} -#line 151 - - -comment: -{ - YYCTYPE yych; - unsigned int yyaccept; - goto yy75; -yy76: ++YYCURSOR; -yy75: - if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); - yych = *YYCURSOR; - if(yych <= ')'){ - if(yych == '\n') goto yy80; - goto yy82; - } else { - if(yych <= '*') goto yy77; - if(yych == '/') goto yy79; - goto yy82; - } -yy77: yych = *++YYCURSOR; - if(yych == '/') goto yy85; -yy78: -#line 165 - { goto comment; } -yy79: yych = *++YYCURSOR; - if(yych == '*') goto yy83; - goto yy78; -yy80: yych = *++YYCURSOR; -yy81: -#line 161 - { if(cursor == eof) RETURN(0); - tok = pos = cursor; cline++; - goto comment; - } -yy82: yych = *++YYCURSOR; - goto yy78; -yy83: yych = *++YYCURSOR; -yy84: -#line 159 - { ++depth; - goto comment; } -yy85: yych = *++YYCURSOR; -yy86: -#line 155 - { if(--depth == 0) - goto scan; - else - goto comment; } -} -#line 166 - -} - -void Scanner::fatal(char *msg){ - cerr << "line " << tline << ", column " << (tchar + 1) << ": " - << msg << endl; - exit(1); -} diff --git a/tools/re2c/bootstrap/y.tab.h b/tools/re2c/bootstrap/y.tab.h deleted file mode 100644 index d7b3702d..00000000 --- a/tools/re2c/bootstrap/y.tab.h +++ /dev/null @@ -1,12 +0,0 @@ -#define CLOSE 257 -#define ID 258 -#define CODE 259 -#define RANGE 260 -#define STRING 261 -typedef union { - Symbol *symbol; - RegExp *regexp; - Token *token; - char op; -} YYSTYPE; -extern YYSTYPE yylval; diff --git a/tools/re2c/code.cc b/tools/re2c/code.c similarity index 100% rename from tools/re2c/code.cc rename to tools/re2c/code.c diff --git a/tools/re2c/dfa.cc b/tools/re2c/dfa.c similarity index 100% rename from tools/re2c/dfa.cc rename to tools/re2c/dfa.c diff --git a/tools/re2c/main.cc b/tools/re2c/main.c similarity index 100% rename from tools/re2c/main.cc rename to tools/re2c/main.c diff --git a/tools/re2c/parser.cc b/tools/re2c/parser.cc deleted file mode 100644 index 6d664005..00000000 --- a/tools/re2c/parser.cc +++ /dev/null @@ -1,531 +0,0 @@ -#ifndef lint -static char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93"; -#endif -#define YYBYACC 1 -#define YYMAJOR 1 -#define YYMINOR 9 -#define yyclearin (yychar=(-1)) -#define yyerrok (yyerrflag=0) -#define YYRECOVERING (yyerrflag!=0) -#define YYPREFIX "yy" -#line 2 "parser.y" - -#include -#include -#include -#include -#include "globals.h" -#include "parser.h" -int yyparse(); -int yylex(); -void yyerror(char*); - -static uint accept; -static RegExp *spec; -static Scanner *in; - -#line 21 "parser.y" -typedef union { - Symbol *symbol; - RegExp *regexp; - Token *token; - char op; -} YYSTYPE; -#line 35 "y.tab.c" -#define CLOSE 257 -#define ID 258 -#define CODE 259 -#define RANGE 260 -#define STRING 261 -#define YYERRCODE 256 -short yylhs[] = { -1, - 0, 0, 0, 9, 2, 3, 3, 4, 4, 5, - 5, 6, 6, 7, 7, 1, 1, 8, 8, 8, - 8, -}; -short yylen[] = { 2, - 0, 2, 2, 4, 3, 0, 2, 1, 3, 1, - 3, 1, 2, 1, 2, 1, 2, 1, 1, 1, - 3, -}; -short yydefred[] = { 1, - 0, 0, 19, 20, 0, 2, 0, 0, 0, 12, - 0, 3, 0, 18, 0, 0, 0, 0, 0, 13, - 16, 0, 0, 21, 0, 0, 5, 0, 17, 4, -}; -short yydgoto[] = { 1, - 22, 6, 18, 7, 8, 9, 10, 11, 12, -}; -short yysindex[] = { 0, - -27, -49, 0, 0, -23, 0, -44, -84, -23, 0, - -243, 0, -23, 0, -39, -23, -23, -244, -23, 0, - 0, -239, -53, 0, -104, -84, 0, -23, 0, 0, -}; -short yyrindex[] = { 0, - 0, -31, 0, 0, 0, 0, -227, -17, -20, 0, - -40, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -36, 0, 0, -226, -16, 0, -19, 0, 0, -}; -short yygindex[] = { 0, - 0, 0, 0, 21, 18, 17, 1, 0, 0, -}; -#define YYTABLESIZE 243 -short yytable[] = { 14, - 14, 24, 16, 15, 15, 30, 14, 19, 18, 20, - 15, 13, 5, 21, 27, 18, 5, 29, 14, 17, - 10, 11, 15, 8, 9, 15, 10, 11, 20, 8, - 9, 6, 7, 23, 26, 28, 25, 0, 10, 11, - 0, 8, 9, 0, 0, 0, 0, 0, 0, 0, - 0, 14, 0, 0, 0, 15, 0, 0, 0, 0, - 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 17, 10, 11, 0, 0, 0, 0, 0, 0, 17, - 0, 0, 0, 14, 17, 0, 0, 15, 0, 0, - 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 10, 11, 0, 8, 9, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, - 14, 15, 15, 15, 15, 18, 18, 18, 18, 18, - 2, 0, 3, 4, 14, 0, 3, 4, 10, 11, - 0, 8, 9, -}; -short yycheck[] = { 40, - 41, 41, 47, 40, 41, 59, 47, 92, 40, 9, - 47, 61, 40, 257, 259, 47, 40, 257, 59, 124, - 41, 41, 59, 41, 41, 5, 47, 47, 28, 47, - 47, 259, 259, 13, 17, 19, 16, -1, 59, 59, - -1, 59, 59, -1, -1, -1, -1, -1, -1, -1, - -1, 92, -1, -1, -1, 92, -1, -1, -1, -1, - 92, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 124, 92, 92, -1, -1, -1, -1, -1, -1, 124, - -1, -1, -1, 124, 124, -1, -1, 124, -1, -1, - -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 124, 124, -1, 124, 124, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 258, 259, 260, - 261, 258, 259, 260, 261, 257, 258, 259, 260, 261, - 258, -1, 260, 261, 258, -1, 260, 261, 259, 259, - -1, 259, 259, -}; -#define YYFINAL 1 -#ifndef YYDEBUG -#define YYDEBUG 0 -#endif -#define YYMAXTOKEN 261 -#if YYDEBUG -char *yyname[] = { -"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,"'('","')'",0,0,0,0,0,"'/'",0,0,0,0,0,0,0,0,0,0,0,"';'",0,"'='",0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'\\\\'",0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -"CLOSE","ID","CODE","RANGE","STRING", -}; -char *yyrule[] = { -"$accept : spec", -"spec :", -"spec : spec rule", -"spec : spec decl", -"decl : ID '=' expr ';'", -"rule : expr look CODE", -"look :", -"look : '/' expr", -"expr : diff", -"expr : expr '|' diff", -"diff : term", -"diff : diff '\\\\' term", -"term : factor", -"term : term factor", -"factor : primary", -"factor : primary close", -"close : CLOSE", -"close : close CLOSE", -"primary : ID", -"primary : RANGE", -"primary : STRING", -"primary : '(' expr ')'", -}; -#endif -#ifdef YYSTACKSIZE -#undef YYMAXDEPTH -#define YYMAXDEPTH YYSTACKSIZE -#else -#ifdef YYMAXDEPTH -#define YYSTACKSIZE YYMAXDEPTH -#else -#define YYSTACKSIZE 500 -#define YYMAXDEPTH 500 -#endif -#endif -int yydebug; -int yynerrs; -int yyerrflag; -int yychar; -short *yyssp; -YYSTYPE *yyvsp; -YYSTYPE yyval; -YYSTYPE yylval; -short yyss[YYSTACKSIZE]; -YYSTYPE yyvs[YYSTACKSIZE]; -#define yystacksize YYSTACKSIZE -#line 121 "parser.y" - -void yyerror(char* s){ - in->fatal(s); -} - -int yylex(){ - return in->scan(); -} - -void parse(int i, ostream &o){ - char * fnamebuf; - char * token; - - o << "/* Generated by re2c 0.5 on "; - time_t now = time(&now); - o.write(ctime(&now), 24); - o << " */\n"; - - in = new Scanner(i); - - o << "#line " << in->line() << " \""; - if( fileName != NULL ) { - fnamebuf = strdup( fileName ); - } else { - fnamebuf = strdup( "" ); - } - token = strtok( fnamebuf, "\\" ); - for(;;) { - o << token; - token = strtok( NULL, "\\" ); - if( token == NULL ) break; - o << "\\\\"; - } - o << "\"\n"; - free( fnamebuf ); - - while(in->echo(o)){ - yyparse(); - if(spec) - genCode(o, spec); - o << "#line " << in->line() << "\n"; - } -} -#line 235 "y.tab.c" -#define YYABORT goto yyabort -#define YYREJECT goto yyabort -#define YYACCEPT goto yyaccept -#define YYERROR goto yyerrlab -int -yyparse() -{ - register int yym, yyn, yystate; -#if YYDEBUG - register char *yys; - extern char *getenv(); - - if (yys = getenv("YYDEBUG")) - { - yyn = *yys; - if (yyn >= '0' && yyn <= '9') - yydebug = yyn - '0'; - } -#endif - - yynerrs = 0; - yyerrflag = 0; - yychar = (-1); - - yyssp = yyss; - yyvsp = yyvs; - *yyssp = yystate = 0; - -yyloop: - if (yyn = yydefred[yystate]) goto yyreduce; - if (yychar < 0) - { - if ((yychar = yylex()) < 0) yychar = 0; -#if YYDEBUG - if (yydebug) - { - yys = 0; - if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; - if (!yys) yys = "illegal-symbol"; - printf("%sdebug: state %d, reading %d (%s)\n", - YYPREFIX, yystate, yychar, yys); - } -#endif - } - if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && - yyn <= YYTABLESIZE && yycheck[yyn] == yychar) - { -#if YYDEBUG - if (yydebug) - printf("%sdebug: state %d, shifting to state %d\n", - YYPREFIX, yystate, yytable[yyn]); -#endif - if (yyssp >= yyss + yystacksize - 1) - { - goto yyoverflow; - } - *++yyssp = yystate = yytable[yyn]; - *++yyvsp = yylval; - yychar = (-1); - if (yyerrflag > 0) --yyerrflag; - goto yyloop; - } - if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && - yyn <= YYTABLESIZE && yycheck[yyn] == yychar) - { - yyn = yytable[yyn]; - goto yyreduce; - } - if (yyerrflag) goto yyinrecovery; -#ifdef lint - goto yynewerror; -#endif -yynewerror: - yyerror("syntax error"); -#ifdef lint - goto yyerrlab; -#endif -yyerrlab: - ++yynerrs; -yyinrecovery: - if (yyerrflag < 3) - { - yyerrflag = 3; - for (;;) - { - if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 && - yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) - { -#if YYDEBUG - if (yydebug) - printf("%sdebug: state %d, error recovery shifting\ - to state %d\n", YYPREFIX, *yyssp, yytable[yyn]); -#endif - if (yyssp >= yyss + yystacksize - 1) - { - goto yyoverflow; - } - *++yyssp = yystate = yytable[yyn]; - *++yyvsp = yylval; - goto yyloop; - } - else - { -#if YYDEBUG - if (yydebug) - printf("%sdebug: error recovery discarding state %d\n", - YYPREFIX, *yyssp); -#endif - if (yyssp <= yyss) goto yyabort; - --yyssp; - --yyvsp; - } - } - } - else - { - if (yychar == 0) goto yyabort; -#if YYDEBUG - if (yydebug) - { - yys = 0; - if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; - if (!yys) yys = "illegal-symbol"; - printf("%sdebug: state %d, error recovery discards token %d (%s)\n", - YYPREFIX, yystate, yychar, yys); - } -#endif - yychar = (-1); - goto yyloop; - } -yyreduce: -#if YYDEBUG - if (yydebug) - printf("%sdebug: state %d, reducing by rule %d (%s)\n", - YYPREFIX, yystate, yyn, yyrule[yyn]); -#endif - yym = yylen[yyn]; - yyval = yyvsp[1-yym]; - switch (yyn) - { -case 1: -#line 40 "parser.y" -{ accept = 0; - spec = NULL; } -break; -case 2: -#line 43 "parser.y" -{ spec = spec? mkAlt(spec, yyvsp[0].regexp) : yyvsp[0].regexp; } -break; -case 4: -#line 48 "parser.y" -{ if(yyvsp[-3].symbol->re) - in->fatal("sym already defined"); - yyvsp[-3].symbol->re = yyvsp[-1].regexp; } -break; -case 5: -#line 54 "parser.y" -{ yyval.regexp = new RuleOp(yyvsp[-2].regexp, yyvsp[-1].regexp, yyvsp[0].token, accept++); } -break; -case 6: -#line 58 "parser.y" -{ yyval.regexp = new NullOp; } -break; -case 7: -#line 60 "parser.y" -{ yyval.regexp = yyvsp[0].regexp; } -break; -case 8: -#line 64 "parser.y" -{ yyval.regexp = yyvsp[0].regexp; } -break; -case 9: -#line 66 "parser.y" -{ yyval.regexp = mkAlt(yyvsp[-2].regexp, yyvsp[0].regexp); } -break; -case 10: -#line 70 "parser.y" -{ yyval.regexp = yyvsp[0].regexp; } -break; -case 11: -#line 72 "parser.y" -{ yyval.regexp = mkDiff(yyvsp[-2].regexp, yyvsp[0].regexp); - if(!yyval.regexp) - in->fatal("can only difference char sets"); - } -break; -case 12: -#line 79 "parser.y" -{ yyval.regexp = yyvsp[0].regexp; } -break; -case 13: -#line 81 "parser.y" -{ yyval.regexp = new CatOp(yyvsp[-1].regexp, yyvsp[0].regexp); } -break; -case 14: -#line 85 "parser.y" -{ yyval.regexp = yyvsp[0].regexp; } -break; -case 15: -#line 87 "parser.y" -{ - switch(yyvsp[0].op){ - case '*': - yyval.regexp = mkAlt(new CloseOp(yyvsp[-1].regexp), new NullOp()); - break; - case '+': - yyval.regexp = new CloseOp(yyvsp[-1].regexp); - break; - case '?': - yyval.regexp = mkAlt(yyvsp[-1].regexp, new NullOp()); - break; - } - } -break; -case 16: -#line 103 "parser.y" -{ yyval.op = yyvsp[0].op; } -break; -case 17: -#line 105 "parser.y" -{ yyval.op = (yyvsp[-1].op == yyvsp[0].op) ? yyvsp[-1].op : '*'; } -break; -case 18: -#line 109 "parser.y" -{ if(!yyvsp[0].symbol->re) - in->fatal("can't find symbol"); - yyval.regexp = yyvsp[0].symbol->re; } -break; -case 19: -#line 113 "parser.y" -{ yyval.regexp = yyvsp[0].regexp; } -break; -case 20: -#line 115 "parser.y" -{ yyval.regexp = yyvsp[0].regexp; } -break; -case 21: -#line 117 "parser.y" -{ yyval.regexp = yyvsp[-1].regexp; } -break; -#line 476 "y.tab.c" - } - yyssp -= yym; - yystate = *yyssp; - yyvsp -= yym; - yym = yylhs[yyn]; - if (yystate == 0 && yym == 0) - { -#if YYDEBUG - if (yydebug) - printf("%sdebug: after reduction, shifting from state 0 to\ - state %d\n", YYPREFIX, YYFINAL); -#endif - yystate = YYFINAL; - *++yyssp = YYFINAL; - *++yyvsp = yyval; - if (yychar < 0) - { - if ((yychar = yylex()) < 0) yychar = 0; -#if YYDEBUG - if (yydebug) - { - yys = 0; - if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; - if (!yys) yys = "illegal-symbol"; - printf("%sdebug: state %d, reading %d (%s)\n", - YYPREFIX, YYFINAL, yychar, yys); - } -#endif - } - if (yychar == 0) goto yyaccept; - goto yyloop; - } - if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && - yyn <= YYTABLESIZE && yycheck[yyn] == yystate) - yystate = yytable[yyn]; - else - yystate = yydgoto[yym]; -#if YYDEBUG - if (yydebug) - printf("%sdebug: after reduction, shifting from state %d \ -to state %d\n", YYPREFIX, *yyssp, yystate); -#endif - if (yyssp >= yyss + yystacksize - 1) - { - goto yyoverflow; - } - *++yyssp = yystate; - *++yyvsp = yyval; - goto yyloop; -yyoverflow: - yyerror("yacc stack overflow"); -yyabort: - return (1); -yyaccept: - return (0); -} diff --git a/tools/re2c/re2c.c b/tools/re2c/re2c.c new file mode 100644 index 00000000..9e22c23e --- /dev/null +++ b/tools/re2c/re2c.c @@ -0,0 +1,54 @@ +#include +#include +#include +#include + +#include "globals.h" +#include "parser.h" +#include "dfa.h" + +char *fileName; +bool sFlag = false; +bool bFlag = false; + +int main(unsigned argc, char *argv[]){ + fileName = NULL; + if(argc == 1) + goto usage; + while(--argc > 1){ + char *p = *++argv; + while(*++p != '\0'){ + switch(*p){ + case 'e': + xlat = asc2ebc; + talx = ebc2asc; + break; + case 's': + sFlag = true; + break; + case 'b': + sFlag = true; + bFlag = true; + break; + default: + goto usage; + } + } + } + fileName = *++argv; + int fd; + if(fileName[0] == '-' && fileName[1] == '\0'){ + fileName = ""; + fd = 0; + } else { + if((fd = open(fileName, O_RDONLY)) < 0){ + cerr << "can't open " << fileName << "\n"; + return 1; + } + } + parse(fd, cout); + return 0; +usage: + cerr << "usage: re2c [-esb] name\n"; + return 2; +} diff --git a/tools/re2c/scanner.cc b/tools/re2c/scanner.cc deleted file mode 100644 index 19b42597..00000000 --- a/tools/re2c/scanner.cc +++ /dev/null @@ -1,470 +0,0 @@ -/* Generated by re2c 0.5 on Sat May 15 11:35:52 1999 */ -#line 1 "scanner.re" -#include -#include -#include -#include -#include "scanner.h" -#include "parser.h" -#include "y.tab.h" - -extern YYSTYPE yylval; - -#define BSIZE 8192 - -#define YYCTYPE uchar -#define YYCURSOR cursor -#define YYLIMIT lim -#define YYMARKER ptr -#define YYFILL(n) {cursor = fill(cursor);} - -#define RETURN(i) {cur = cursor; return i;} - - -Scanner::Scanner(int i) : in(i), - bot(NULL), tok(NULL), ptr(NULL), cur(NULL), pos(NULL), lim(NULL), - top(NULL), eof(NULL), tchar(0), tline(0), cline(1) { - ; -} - -uchar *Scanner::fill(uchar *cursor){ - if(!eof){ - uint cnt = tok - bot; - if(cnt){ - memcpy(bot, tok, lim - tok); - tok = bot; - ptr -= cnt; - cursor -= cnt; - pos -= cnt; - lim -= cnt; - } - if((top - lim) < BSIZE){ - uchar *buf = new uchar[(lim - bot) + BSIZE]; - memcpy(buf, tok, lim - tok); - tok = buf; - ptr = &buf[ptr - bot]; - cursor = &buf[cursor - bot]; - pos = &buf[pos - bot]; - lim = &buf[lim - bot]; - top = &lim[BSIZE]; - delete [] bot; - bot = buf; - } - if((cnt = read(in, (char*) lim, BSIZE)) != BSIZE){ - eof = &lim[cnt]; *eof++ = '\n'; - } - lim += cnt; - } - return cursor; -} - -#line 68 - - -int Scanner::echo(ostream &out){ - uchar *cursor = cur; - tok = cursor; -echo: -{ - YYCTYPE yych; - unsigned int yyaccept; - goto yy0; -yy1: ++YYCURSOR; -yy0: - if((YYLIMIT - YYCURSOR) < 7) YYFILL(7); - yych = *YYCURSOR; - if(yych == '\n') goto yy4; - if(yych != '/') goto yy6; -yy2: yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == '*') goto yy7; -yy3: -#line 82 - { goto echo; } -yy4: yych = *++YYCURSOR; -yy5: -#line 78 - { if(cursor == eof) RETURN(0); - out.write(tok, cursor - tok); - tok = pos = cursor; cline++; - goto echo; } -yy6: yych = *++YYCURSOR; - goto yy3; -yy7: yych = *++YYCURSOR; - if(yych == '!') goto yy9; -yy8: YYCURSOR = YYMARKER; - switch(yyaccept){ - case 0: goto yy3; - } -yy9: yych = *++YYCURSOR; - if(yych != 'r') goto yy8; -yy10: yych = *++YYCURSOR; - if(yych != 'e') goto yy8; -yy11: yych = *++YYCURSOR; - if(yych != '2') goto yy8; -yy12: yych = *++YYCURSOR; - if(yych != 'c') goto yy8; -yy13: yych = *++YYCURSOR; -yy14: -#line 75 - { out.write(tok, &cursor[-7] - tok); - tok = cursor; - RETURN(1); } -} -#line 83 - -} - - -int Scanner::scan(){ - uchar *cursor = cur; - uint depth; - -scan: - tchar = cursor - pos; - tline = cline; - tok = cursor; -{ - YYCTYPE yych; - unsigned int yyaccept; - goto yy15; -yy16: ++YYCURSOR; -yy15: - if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); - yych = *YYCURSOR; - if(yych <= ':'){ - if(yych <= '"'){ - if(yych <= '\n'){ - if(yych <= '\b') goto yy35; - if(yych <= '\t') goto yy31; - goto yy33; - } else { - if(yych == ' ') goto yy31; - if(yych <= '!') goto yy35; - goto yy23; - } - } else { - if(yych <= '*'){ - if(yych <= '\'') goto yy35; - if(yych <= ')') goto yy27; - goto yy21; - } else { - if(yych <= '+') goto yy28; - if(yych == '/') goto yy19; - goto yy35; - } - } - } else { - if(yych <= 'Z'){ - if(yych <= '='){ - if(yych == '<') goto yy35; - goto yy27; - } else { - if(yych == '?') goto yy28; - if(yych <= '@') goto yy35; - goto yy29; - } - } else { - if(yych <= '`'){ - if(yych <= '[') goto yy25; - if(yych <= '\\') goto yy27; - goto yy35; - } else { - if(yych <= 'z') goto yy29; - if(yych <= '{') goto yy17; - if(yych <= '|') goto yy27; - goto yy35; - } - } - } -yy17: yych = *++YYCURSOR; -yy18: -#line 96 - { depth = 1; - goto code; - } -yy19: yych = *++YYCURSOR; - if(yych == '*') goto yy54; -yy20: -#line 115 - { RETURN(*tok); } -yy21: yych = *++YYCURSOR; - if(yych == '/') goto yy52; -yy22: -#line 117 - { yylval.op = *tok; - RETURN(CLOSE); } -yy23: yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych != '\n') goto yy48; -yy24: -#line 108 - { fatal("bad string"); } -yy25: yyaccept = 1; - yych = *(YYMARKER = ++YYCURSOR); - if(yych != '\n') goto yy42; -yy26: -#line 113 - { fatal("bad character constant"); } -yy27: yych = *++YYCURSOR; - goto yy20; -yy28: yych = *++YYCURSOR; - goto yy22; -yy29: yych = *++YYCURSOR; - goto yy40; -yy30: -#line 120 - { cur = cursor; - yylval.symbol = Symbol::find(token()); - return ID; } -yy31: yych = *++YYCURSOR; - goto yy38; -yy32: -#line 124 - { goto scan; } -yy33: yych = *++YYCURSOR; -yy34: -#line 126 - { if(cursor == eof) RETURN(0); - pos = cursor; cline++; - goto scan; - } -yy35: yych = *++YYCURSOR; -yy36: -#line 131 - { cerr << "unexpected character: " << *tok << endl; - goto scan; - } -yy37: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; -yy38: if(yych == '\t') goto yy37; - if(yych == ' ') goto yy37; - goto yy32; -yy39: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; -yy40: if(yych <= '@'){ - if(yych <= '/') goto yy30; - if(yych <= '9') goto yy39; - goto yy30; - } else { - if(yych <= 'Z') goto yy39; - if(yych <= '`') goto yy30; - if(yych <= 'z') goto yy39; - goto yy30; - } -yy41: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; -yy42: if(yych <= '['){ - if(yych != '\n') goto yy41; - } else { - if(yych <= '\\') goto yy44; - if(yych <= ']') goto yy45; - goto yy41; - } -yy43: YYCURSOR = YYMARKER; - switch(yyaccept){ - case 0: goto yy24; - case 1: goto yy26; - } -yy44: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - if(yych == '\n') goto yy43; - goto yy41; -yy45: yych = *++YYCURSOR; -yy46: -#line 110 - { cur = cursor; - yylval.regexp = ranToRE(token()); - return RANGE; } -yy47: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; -yy48: if(yych <= '!'){ - if(yych == '\n') goto yy43; - goto yy47; - } else { - if(yych <= '"') goto yy50; - if(yych != '\\') goto yy47; - } -yy49: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - if(yych == '\n') goto yy43; - goto yy47; -yy50: yych = *++YYCURSOR; -yy51: -#line 105 - { cur = cursor; - yylval.regexp = strToRE(token()); - return STRING; } -yy52: yych = *++YYCURSOR; -yy53: -#line 102 - { tok = cursor; - RETURN(0); } -yy54: yych = *++YYCURSOR; -yy55: -#line 99 - { depth = 1; - goto comment; } -} -#line 134 - - -code: -{ - YYCTYPE yych; - unsigned int yyaccept; - goto yy56; -yy57: ++YYCURSOR; -yy56: - if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); - yych = *YYCURSOR; - if(yych <= '&'){ - if(yych <= '\n'){ - if(yych <= '\t') goto yy64; - goto yy62; - } else { - if(yych == '"') goto yy66; - goto yy64; - } - } else { - if(yych <= '{'){ - if(yych <= '\'') goto yy67; - if(yych <= 'z') goto yy64; - goto yy60; - } else { - if(yych != '}') goto yy64; - } - } -yy58: yych = *++YYCURSOR; -yy59: -#line 138 - { if(--depth == 0){ - cur = cursor; - yylval.token = new Token(token(), tline); - return CODE; - } - goto code; } -yy60: yych = *++YYCURSOR; -yy61: -#line 144 - { ++depth; - goto code; } -yy62: yych = *++YYCURSOR; -yy63: -#line 146 - { if(cursor == eof) fatal("missing '}'"); - pos = cursor; cline++; - goto code; - } -yy64: yych = *++YYCURSOR; -yy65: -#line 150 - { goto code; } -yy66: yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == '\n') goto yy65; - goto yy73; -yy67: yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == '\n') goto yy65; - goto yy69; -yy68: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; -yy69: if(yych <= '&'){ - if(yych != '\n') goto yy68; - } else { - if(yych <= '\'') goto yy64; - if(yych == '\\') goto yy71; - goto yy68; - } -yy70: YYCURSOR = YYMARKER; - switch(yyaccept){ - case 0: goto yy65; - } -yy71: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - if(yych == '\n') goto yy70; - goto yy68; -yy72: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; -yy73: if(yych <= '!'){ - if(yych == '\n') goto yy70; - goto yy72; - } else { - if(yych <= '"') goto yy64; - if(yych != '\\') goto yy72; - } -yy74: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - if(yych == '\n') goto yy70; - goto yy72; -} -#line 151 - - -comment: -{ - YYCTYPE yych; - unsigned int yyaccept; - goto yy75; -yy76: ++YYCURSOR; -yy75: - if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); - yych = *YYCURSOR; - if(yych <= ')'){ - if(yych == '\n') goto yy80; - goto yy82; - } else { - if(yych <= '*') goto yy77; - if(yych == '/') goto yy79; - goto yy82; - } -yy77: yych = *++YYCURSOR; - if(yych == '/') goto yy85; -yy78: -#line 165 - { goto comment; } -yy79: yych = *++YYCURSOR; - if(yych == '*') goto yy83; - goto yy78; -yy80: yych = *++YYCURSOR; -yy81: -#line 161 - { if(cursor == eof) RETURN(0); - tok = pos = cursor; cline++; - goto comment; - } -yy82: yych = *++YYCURSOR; - goto yy78; -yy83: yych = *++YYCURSOR; -yy84: -#line 159 - { ++depth; - goto comment; } -yy85: yych = *++YYCURSOR; -yy86: -#line 155 - { if(--depth == 0) - goto scan; - else - goto comment; } -} -#line 166 - -} - -void Scanner::fatal(char *msg){ - cerr << "line " << tline << ", column " << (tchar + 1) << ": " - << msg << endl; - exit(1); -} diff --git a/tools/re2c/substr.cc b/tools/re2c/substr.c similarity index 100% rename from tools/re2c/substr.cc rename to tools/re2c/substr.c diff --git a/tools/re2c/translate.cc b/tools/re2c/translate.c similarity index 100% rename from tools/re2c/translate.cc rename to tools/re2c/translate.c diff --git a/tools/re2c/y.tab.h b/tools/re2c/y.tab.h deleted file mode 100644 index d7b3702d..00000000 --- a/tools/re2c/y.tab.h +++ /dev/null @@ -1,12 +0,0 @@ -#define CLOSE 257 -#define ID 258 -#define CODE 259 -#define RANGE 260 -#define STRING 261 -typedef union { - Symbol *symbol; - RegExp *regexp; - Token *token; - char op; -} YYSTYPE; -extern YYSTYPE yylval;