mirror of https://github.com/yasm/yasm.git
parent
7cd8fdd1a0
commit
910d5c64aa
13 changed files with 54 additions and 2026 deletions
@ -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 <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); |
||||
} |
@ -1,470 +0,0 @@ |
||||
/* 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); |
||||
} |
@ -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; |
@ -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 <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); |
||||
} |
@ -0,0 +1,54 @@ |
||||
#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; |
||||
} |
@ -1,470 +0,0 @@ |
||||
/* 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); |
||||
} |
@ -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; |
Loading…
Reference in new issue