+++ /dev/null
-#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 <time.h>
-#include <iostream.h>
-#include <string.h>
-#include <malloc.h>
-#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( "<stdin>" );
- }
- 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);
-}
+++ /dev/null
-/* Generated by re2c 0.5 on Sat May 15 11:35:52 1999 */
-#line 1 "scanner.re"
-#include <stdlib.h>
-#include <string.h>
-#include <iostream.h>
-#include <unistd.h>
-#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);
-}
+++ /dev/null
-#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;
+++ /dev/null
-#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 <time.h>
-#include <iostream.h>
-#include <string.h>
-#include <malloc.h>
-#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( "<stdin>" );
- }
- 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);
-}
--- /dev/null
+#include <fstream.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+#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 = "<stdin>";
+ 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;
+}
+++ /dev/null
-/* Generated by re2c 0.5 on Sat May 15 11:35:52 1999 */
-#line 1 "scanner.re"
-#include <stdlib.h>
-#include <string.h>
-#include <iostream.h>
-#include <unistd.h>
-#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);
-}
+++ /dev/null
-#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;