-/* Generated by re2c 0.9.8 on Sun Jun 26 14:33:21 2005 */
+/* Generated by re2c 0.9.9.dev on Sat Jul 9 12:50:01 2005 */
#line 1 "scanner.re"
/* $Id$ */
#include <stdlib.h>
return cursor;
}
-#line 76 "scanner.re"
+#line 77 "scanner.re"
int Scanner::echo(std::ostream &out){
if(yych == '*') goto yy12;
goto yy3;
yy3:
-#line 122 "scanner.re"
+#line 123 "scanner.re"
{
goto echo;
}
yy5: ++YYCURSOR;
goto yy6;
yy6:
-#line 111 "scanner.re"
+#line 112 "scanner.re"
{
out.write((const char*)(tok), (const char*)(cursor) - (const char*)(tok));
tok = pos = cursor; cline++; oline++;
yy7: ++YYCURSOR;
goto yy8;
yy8:
-#line 116 "scanner.re"
+#line 117 "scanner.re"
{
out.write((const char*)(tok), (const char*)(cursor) - (const char*)(tok) - 1); // -1 so we don't write out the \0
if(cursor == eof) {
yy10: ++YYCURSOR;
goto yy11;
yy11:
-#line 102 "scanner.re"
+#line 103 "scanner.re"
{
if (ignore_eoc) {
ignore_eoc = false;
yy19: ++YYCURSOR;
goto yy20;
yy20:
-#line 91 "scanner.re"
+#line 92 "scanner.re"
{
out.write((const char*)(tok), (const char*)(&cursor[-7]) - (const char*)(tok));
tok = cursor;
yy27: ++YYCURSOR;
goto yy28;
yy28:
-#line 96 "scanner.re"
+#line 97 "scanner.re"
{
out << "#define YYMAXFILL " << maxFill << std::endl;
tok = pos = cursor;
}
#line 214 "scanner.cc"
}
-#line 125 "scanner.re"
+#line 126 "scanner.re"
}
yy31: yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
if(yych <= '/') goto yy32;
- if(yych <= '9') goto yy77;
+ if(yych <= '9') goto yy82;
goto yy32;
yy32:
-#line 138 "scanner.re"
+#line 139 "scanner.re"
{ depth = 1;
goto code;
}
#line 296 "scanner.cc"
yy33: ++YYCURSOR;
- if((yych = *YYCURSOR) == '*') goto yy75;
+ if((yych = *YYCURSOR) == '*') goto yy80;
goto yy34;
yy34:
-#line 164 "scanner.re"
+#line 169 "scanner.re"
{ RETURN(*tok); }
#line 303 "scanner.cc"
yy35: ++YYCURSOR;
- if((yych = *YYCURSOR) == '/') goto yy73;
+ if((yych = *YYCURSOR) == '/') goto yy78;
goto yy36;
yy36:
-#line 166 "scanner.re"
+#line 171 "scanner.re"
{ yylval.op = *tok;
RETURN(CLOSE); }
#line 311 "scanner.cc"
yy37: yyaccept = 1;
yych = *(YYMARKER = ++YYCURSOR);
- if(yych != 0x0A) goto yy69;
+ if(yych != 0x0A) goto yy74;
goto yy38;
yy38:
-#line 155 "scanner.re"
+#line 156 "scanner.re"
{ fatal("unterminated string constant (missing \")"); }
#line 319 "scanner.cc"
yy39: yyaccept = 2;
yych = *(YYMARKER = ++YYCURSOR);
- if(yych != 0x0A) goto yy64;
+ if(yych != 0x0A) goto yy69;
goto yy40;
yy40:
-#line 156 "scanner.re"
+#line 157 "scanner.re"
{ fatal("unterminated string constant (missing ')"); }
#line 327 "scanner.cc"
yy41: yyaccept = 3;
yych = *(YYMARKER = ++YYCURSOR);
- if(yych != 0x0A) goto yy58;
- goto yy42;
+ if(yych == 0x0A) goto yy42;
+ if(yych == '^') goto yy60;
+ goto yy58;
yy42:
-#line 162 "scanner.re"
+#line 167 "scanner.re"
{ fatal("unterminated range (missing ])"); }
-#line 335 "scanner.cc"
+#line 336 "scanner.cc"
yy43: yych = *++YYCURSOR;
goto yy34;
yy44: yych = *++YYCURSOR;
yych = *YYCURSOR;
goto yy56;
yy46:
-#line 181 "scanner.re"
+#line 186 "scanner.re"
{ cur = cursor;
yylval.symbol = Symbol::find(token());
return ID; }
-#line 348 "scanner.cc"
+#line 349 "scanner.cc"
yy47: ++YYCURSOR;
yych = *YYCURSOR;
goto yy54;
yy48:
-#line 185 "scanner.re"
+#line 190 "scanner.re"
{ goto scan; }
-#line 355 "scanner.cc"
+#line 356 "scanner.cc"
yy49: ++YYCURSOR;
goto yy50;
yy50:
-#line 187 "scanner.re"
+#line 192 "scanner.re"
{ if(cursor == eof) RETURN(0);
pos = cursor; cline++;
goto scan;
}
-#line 364 "scanner.cc"
+#line 365 "scanner.cc"
yy51: ++YYCURSOR;
goto yy52;
yy52:
-#line 192 "scanner.re"
+#line 197 "scanner.re"
{ std::cerr << "unexpected character: " << *tok << std::endl;
goto scan;
}
-#line 372 "scanner.cc"
+#line 373 "scanner.cc"
yy53: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
if(yych != 0x0A) goto yy57;
goto yy59;
} else {
- if(yych <= '\\') goto yy60;
- if(yych <= ']') goto yy61;
+ if(yych <= '\\') goto yy62;
+ if(yych <= ']') goto yy63;
goto yy57;
}
yy59: YYCURSOR = YYMARKER;
case 3: goto yy42;
}
yy60: ++YYCURSOR;
+ if(YYLIMIT == YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ goto yy61;
+yy61: if(yych <= '['){
+ if(yych == 0x0A) goto yy59;
+ goto yy60;
+ } else {
+ if(yych <= '\\') goto yy65;
+ if(yych <= ']') goto yy66;
+ goto yy60;
+ }
+yy62: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
if(yych == 0x0A) goto yy59;
goto yy57;
-yy61: ++YYCURSOR;
- goto yy62;
-yy62:
-#line 158 "scanner.re"
+yy63: ++YYCURSOR;
+ goto yy64;
+yy64:
+#line 163 "scanner.re"
{ cur = cursor;
yylval.regexp = ranToRE(token());
return RANGE; }
-#line 425 "scanner.cc"
-yy63: ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- goto yy64;
-yy64: if(yych <= '&'){
- if(yych == 0x0A) goto yy59;
- goto yy63;
- } else {
- if(yych <= '\'') goto yy66;
- if(yych != '\\') goto yy63;
- goto yy65;
- }
+#line 438 "scanner.cc"
yy65: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
if(yych == 0x0A) goto yy59;
- goto yy63;
+ goto yy60;
yy66: ++YYCURSOR;
goto yy67;
yy67:
-#line 151 "scanner.re"
+#line 159 "scanner.re"
{ cur = cursor;
- yylval.regexp = strToCaseInsensitiveRE(token());
- return STRING; }
-#line 450 "scanner.cc"
+ yylval.regexp = invToRE(token());
+ return RANGE; }
+#line 451 "scanner.cc"
yy68: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
goto yy69;
-yy69: if(yych <= '!'){
+yy69: if(yych <= '&'){
if(yych == 0x0A) goto yy59;
goto yy68;
} else {
- if(yych <= '"') goto yy71;
+ if(yych <= '\'') goto yy71;
if(yych != '\\') goto yy68;
goto yy70;
}
yy71: ++YYCURSOR;
goto yy72;
yy72:
-#line 147 "scanner.re"
+#line 152 "scanner.re"
{ cur = cursor;
- yylval.regexp = strToRE(token());
+ yylval.regexp = strToCaseInsensitiveRE(token());
return STRING; }
-#line 475 "scanner.cc"
+#line 476 "scanner.cc"
yy73: ++YYCURSOR;
+ if(YYLIMIT == YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
goto yy74;
-yy74:
-#line 144 "scanner.re"
+yy74: if(yych <= '!'){
+ if(yych == 0x0A) goto yy59;
+ goto yy73;
+ } else {
+ if(yych <= '"') goto yy76;
+ if(yych != '\\') goto yy73;
+ goto yy75;
+ }
+yy75: ++YYCURSOR;
+ if(YYLIMIT == YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ if(yych == 0x0A) goto yy59;
+ goto yy73;
+yy76: ++YYCURSOR;
+ goto yy77;
+yy77:
+#line 148 "scanner.re"
+{ cur = cursor;
+ yylval.regexp = strToRE(token());
+ return STRING; }
+#line 501 "scanner.cc"
+yy78: ++YYCURSOR;
+ goto yy79;
+yy79:
+#line 145 "scanner.re"
{ tok = cursor;
RETURN(0); }
-#line 482 "scanner.cc"
-yy75: ++YYCURSOR;
- goto yy76;
-yy76:
-#line 141 "scanner.re"
+#line 508 "scanner.cc"
+yy80: ++YYCURSOR;
+ goto yy81;
+yy81:
+#line 142 "scanner.re"
{ depth = 1;
goto comment; }
-#line 489 "scanner.cc"
-yy77: ++YYCURSOR;
+#line 515 "scanner.cc"
+yy82: ++YYCURSOR;
if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
yych = *YYCURSOR;
- goto yy78;
-yy78: if(yych <= '/'){
- if(yych == ',') goto yy81;
+ goto yy83;
+yy83: if(yych <= '/'){
+ if(yych == ',') goto yy86;
goto yy59;
} else {
- if(yych <= '9') goto yy77;
+ if(yych <= '9') goto yy82;
if(yych != '}') goto yy59;
- goto yy79;
+ goto yy84;
}
-yy79: ++YYCURSOR;
- goto yy80;
-yy80:
-#line 169 "scanner.re"
+yy84: ++YYCURSOR;
+ goto yy85;
+yy85:
+#line 174 "scanner.re"
{ yylval.extop.minsize = atoi((char *)tok+1);
yylval.extop.maxsize = atoi((char *)tok+1);
RETURN(CLOSESIZE); }
-#line 509 "scanner.cc"
-yy81: yych = *++YYCURSOR;
- if(yych != '}') goto yy85;
- goto yy82;
-yy82: ++YYCURSOR;
- goto yy83;
-yy83:
-#line 177 "scanner.re"
+#line 535 "scanner.cc"
+yy86: yych = *++YYCURSOR;
+ if(yych != '}') goto yy90;
+ goto yy87;
+yy87: ++YYCURSOR;
+ goto yy88;
+yy88:
+#line 182 "scanner.re"
{ yylval.extop.minsize = atoi((char *)tok+1);
yylval.extop.maxsize = -1;
RETURN(CLOSESIZE); }
-#line 520 "scanner.cc"
-yy84: ++YYCURSOR;
+#line 546 "scanner.cc"
+yy89: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
- goto yy85;
-yy85: if(yych <= '/') goto yy59;
- if(yych <= '9') goto yy84;
+ goto yy90;
+yy90: if(yych <= '/') goto yy59;
+ if(yych <= '9') goto yy89;
if(yych != '}') goto yy59;
- goto yy86;
-yy86: ++YYCURSOR;
- goto yy87;
-yy87:
-#line 173 "scanner.re"
+ goto yy91;
+yy91: ++YYCURSOR;
+ goto yy92;
+yy92:
+#line 178 "scanner.re"
{ yylval.extop.minsize = atoi((char *)tok+1);
yylval.extop.maxsize = MAX(yylval.extop.minsize,atoi(strchr((char *)tok, ',')+1));
RETURN(CLOSESIZE); }
-#line 536 "scanner.cc"
+#line 562 "scanner.cc"
}
-#line 195 "scanner.re"
+#line 200 "scanner.re"
code:
-#line 543 "scanner.cc"
+#line 569 "scanner.cc"
{
YYCTYPE yych;
unsigned int yyaccept;
- goto yy88;
+ goto yy93;
++YYCURSOR;
-yy88:
+yy93:
if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
yych = *YYCURSOR;
if(yych <= '&'){
if(yych <= 0x0A){
- if(yych <= 0x09) goto yy96;
- goto yy94;
+ if(yych <= 0x09) goto yy101;
+ goto yy99;
} else {
- if(yych == '"') goto yy98;
- goto yy96;
+ if(yych == '"') goto yy103;
+ goto yy101;
}
} else {
if(yych <= '{'){
- if(yych <= '\'') goto yy99;
- if(yych <= 'z') goto yy96;
- goto yy92;
+ if(yych <= '\'') goto yy104;
+ if(yych <= 'z') goto yy101;
+ goto yy97;
} else {
- if(yych != '}') goto yy96;
- goto yy90;
+ if(yych != '}') goto yy101;
+ goto yy95;
}
}
-yy90: ++YYCURSOR;
- goto yy91;
-yy91:
-#line 199 "scanner.re"
+yy95: ++YYCURSOR;
+ goto yy96;
+yy96:
+#line 204 "scanner.re"
{ if(--depth == 0){
cur = cursor;
yylval.token = new Token(token(), tline);
return CODE;
}
goto code; }
-#line 580 "scanner.cc"
-yy92: ++YYCURSOR;
- goto yy93;
-yy93:
-#line 205 "scanner.re"
+#line 606 "scanner.cc"
+yy97: ++YYCURSOR;
+ goto yy98;
+yy98:
+#line 210 "scanner.re"
{ ++depth;
goto code; }
-#line 587 "scanner.cc"
-yy94: ++YYCURSOR;
- goto yy95;
-yy95:
-#line 207 "scanner.re"
+#line 613 "scanner.cc"
+yy99: ++YYCURSOR;
+ goto yy100;
+yy100:
+#line 212 "scanner.re"
{ if(cursor == eof) fatal("missing '}'");
pos = cursor; cline++;
goto code;
}
-#line 596 "scanner.cc"
-yy96: ++YYCURSOR;
- goto yy97;
-yy97:
-#line 211 "scanner.re"
+#line 622 "scanner.cc"
+yy101: ++YYCURSOR;
+ goto yy102;
+yy102:
+#line 216 "scanner.re"
{ goto code; }
-#line 602 "scanner.cc"
-yy98: yyaccept = 0;
+#line 628 "scanner.cc"
+yy103: yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 0x0A) goto yy97;
- goto yy105;
-yy99: yyaccept = 0;
+ if(yych == 0x0A) goto yy102;
+ goto yy110;
+yy104: yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 0x0A) goto yy97;
- goto yy101;
-yy100: ++YYCURSOR;
+ if(yych == 0x0A) goto yy102;
+ goto yy106;
+yy105: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
- goto yy101;
-yy101: if(yych <= '&'){
- if(yych != 0x0A) goto yy100;
- goto yy102;
+ goto yy106;
+yy106: if(yych <= '&'){
+ if(yych != 0x0A) goto yy105;
+ goto yy107;
} else {
- if(yych <= '\'') goto yy96;
- if(yych == '\\') goto yy103;
- goto yy100;
+ if(yych <= '\'') goto yy101;
+ if(yych == '\\') goto yy108;
+ goto yy105;
}
-yy102: YYCURSOR = YYMARKER;
+yy107: YYCURSOR = YYMARKER;
switch(yyaccept){
- case 0: goto yy97;
+ case 0: goto yy102;
}
-yy103: ++YYCURSOR;
+yy108: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
- if(yych == 0x0A) goto yy102;
- goto yy100;
-yy104: ++YYCURSOR;
+ if(yych == 0x0A) goto yy107;
+ goto yy105;
+yy109: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
- goto yy105;
-yy105: if(yych <= '!'){
- if(yych == 0x0A) goto yy102;
- goto yy104;
+ goto yy110;
+yy110: if(yych <= '!'){
+ if(yych == 0x0A) goto yy107;
+ goto yy109;
} else {
- if(yych <= '"') goto yy96;
- if(yych != '\\') goto yy104;
- goto yy106;
+ if(yych <= '"') goto yy101;
+ if(yych != '\\') goto yy109;
+ goto yy111;
}
-yy106: ++YYCURSOR;
+yy111: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
- if(yych == 0x0A) goto yy102;
- goto yy104;
+ if(yych == 0x0A) goto yy107;
+ goto yy109;
}
-#line 212 "scanner.re"
+#line 217 "scanner.re"
comment:
-#line 655 "scanner.cc"
+#line 681 "scanner.cc"
{
YYCTYPE yych;
- goto yy107;
+ goto yy112;
++YYCURSOR;
-yy107:
+yy112:
if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
yych = *YYCURSOR;
if(yych <= ')'){
- if(yych == 0x0A) goto yy112;
- goto yy114;
+ if(yych == 0x0A) goto yy117;
+ goto yy119;
} else {
- if(yych <= '*') goto yy109;
- if(yych == '/') goto yy111;
- goto yy114;
+ if(yych <= '*') goto yy114;
+ if(yych == '/') goto yy116;
+ goto yy119;
}
-yy109: ++YYCURSOR;
- if((yych = *YYCURSOR) == '/') goto yy117;
- goto yy110;
-yy110:
-#line 226 "scanner.re"
+yy114: ++YYCURSOR;
+ if((yych = *YYCURSOR) == '/') goto yy122;
+ goto yy115;
+yy115:
+#line 231 "scanner.re"
{ goto comment; }
-#line 677 "scanner.cc"
-yy111: yych = *++YYCURSOR;
- if(yych == '*') goto yy115;
- goto yy110;
-yy112: ++YYCURSOR;
- goto yy113;
-yy113:
-#line 222 "scanner.re"
+#line 703 "scanner.cc"
+yy116: yych = *++YYCURSOR;
+ if(yych == '*') goto yy120;
+ goto yy115;
+yy117: ++YYCURSOR;
+ goto yy118;
+yy118:
+#line 227 "scanner.re"
{ if(cursor == eof) RETURN(0);
tok = pos = cursor; cline++;
goto comment;
}
-#line 689 "scanner.cc"
-yy114: yych = *++YYCURSOR;
- goto yy110;
-yy115: ++YYCURSOR;
- goto yy116;
-yy116:
-#line 220 "scanner.re"
+#line 715 "scanner.cc"
+yy119: yych = *++YYCURSOR;
+ goto yy115;
+yy120: ++YYCURSOR;
+ goto yy121;
+yy121:
+#line 225 "scanner.re"
{ ++depth;
goto comment; }
-#line 698 "scanner.cc"
-yy117: ++YYCURSOR;
- goto yy118;
-yy118:
-#line 216 "scanner.re"
+#line 724 "scanner.cc"
+yy122: ++YYCURSOR;
+ goto yy123;
+yy123:
+#line 221 "scanner.re"
{ if(--depth == 0)
goto scan;
else
goto comment; }
-#line 707 "scanner.cc"
+#line 733 "scanner.cc"
}
-#line 227 "scanner.re"
+#line 232 "scanner.re"
}
#include <stdio.h>
#include <string.h>
-#define RET(n) printf("%d\n", n); return n
+#define RET(n) return n
-int scan(char *s, int l){
-char *p = s;
-char *q;
+int scan(const char *s, int l){
+const char *p = s;
+const char *q;
#define YYCTYPE char
#define YYCURSOR p
#define YYLIMIT (s+l)
if((YYLIMIT - YYCURSOR) < 7) YYFILL(7);
yych = *YYCURSOR;
switch(yych){
- case 0x0A: case '^': case 'q': goto yy6;
- case 'A': goto yy3;
+ case 0x0A: case 'q': goto yy7;
+ case 'A': goto yy2;
case 'a': goto yy4;
- default: goto yy2;
+ default: goto yy6;
}
-yy2: YYCURSOR = YYMARKER;
- switch(yyaccept){
- case 0: goto yy5;
- }
-yy3: yych = *++YYCURSOR;
+yy2: yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
switch(yych){
- case 0x0A: goto yy8;
- case 'A': case 'a': goto yy7;
- default: goto yy2;
+ case 0x0A: goto yy10;
+ case 'A': case 'a': goto yy8;
+ default: goto yy3;
}
-yy4: yyaccept = 0;
+yy3:
+#line 22 "repeater.re"
+{RET(5);}
+#line 44 "<stdout>"
+yy4: yyaccept = 1;
yych = *(YYMARKER = ++YYCURSOR);
switch(yych){
- case 0x0A: goto yy8;
- case 'A': case 'a': goto yy7;
+ case 0x0A: goto yy10;
+ case 'A': case 'a': goto yy8;
default: goto yy5;
}
yy5:
-#line 20 "repeater.re"
+#line 23 "repeater.re"
{RET(0);}
-#line 54 "<stdout>"
+#line 55 "<stdout>"
yy6: yych = *++YYCURSOR;
- goto yy5;
+ goto yy3;
yy7: yych = *++YYCURSOR;
+ goto yy5;
+yy8: yych = *++YYCURSOR;
switch(yych){
- case 0x0A: goto yy11;
- case 'A': case 'a': goto yy10;
- default: goto yy2;
+ case 0x0A: goto yy13;
+ case 'A': case 'a': goto yy12;
+ default: goto yy9;
}
-yy8: ++YYCURSOR;
- goto yy9;
-yy9:
-#line 16 "repeater.re"
+yy9: YYCURSOR = YYMARKER;
+ switch(yyaccept){
+ case 0: goto yy3;
+ case 1: goto yy5;
+ }
+yy10: ++YYCURSOR;
+ goto yy11;
+yy11:
+#line 18 "repeater.re"
{RET(1);}
-#line 68 "<stdout>"
-yy10: yych = *++YYCURSOR;
+#line 76 "<stdout>"
+yy12: yych = *++YYCURSOR;
switch(yych){
- case 0x0A: goto yy11;
- case 'A': case 'a': goto yy13;
- default: goto yy2;
+ case 0x0A: goto yy13;
+ case 'A': case 'a': goto yy15;
+ default: goto yy9;
}
-yy11: ++YYCURSOR;
- goto yy12;
-yy12:
-#line 17 "repeater.re"
+yy13: ++YYCURSOR;
+ goto yy14;
+yy14:
+#line 19 "repeater.re"
{RET(2);}
-#line 80 "<stdout>"
-yy13: yych = *++YYCURSOR;
+#line 88 "<stdout>"
+yy15: yych = *++YYCURSOR;
switch(yych){
- case 0x0A: goto yy15;
- case 'A': case 'a': goto yy14;
- default: goto yy2;
+ case 0x0A: goto yy17;
+ case 'A': case 'a': goto yy16;
+ default: goto yy9;
}
-yy14: yych = *++YYCURSOR;
+yy16: yych = *++YYCURSOR;
switch(yych){
- case 0x0A: goto yy15;
- case 'A': case 'a': goto yy17;
- default: goto yy2;
+ case 0x0A: goto yy17;
+ case 'A': case 'a': goto yy19;
+ default: goto yy9;
}
-yy15: ++YYCURSOR;
- goto yy16;
-yy16:
-#line 19 "repeater.re"
-{RET(3);}
-#line 98 "<stdout>"
-yy17: yych = *++YYCURSOR;
+yy17: ++YYCURSOR;
+ goto yy18;
+yy18:
+#line 21 "repeater.re"
+{RET(4);}
+#line 106 "<stdout>"
+yy19: yych = *++YYCURSOR;
switch(yych){
- case 0x0A: goto yy18;
- default: goto yy21;
+ case 0x0A: goto yy20;
+ default: goto yy23;
}
-yy18: ++YYCURSOR;
- goto yy19;
-yy19:
-#line 18 "repeater.re"
-{RET(4);}
-#line 109 "<stdout>"
yy20: ++YYCURSOR;
+ goto yy21;
+yy21:
+#line 20 "repeater.re"
+{RET(3);}
+#line 117 "<stdout>"
+yy22: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
- goto yy21;
-yy21: switch(yych){
- case 0x0A: goto yy15;
- case 'A': case 'a': goto yy20;
- default: goto yy2;
+ goto yy23;
+yy23: switch(yych){
+ case 0x0A: goto yy17;
+ case 'A': case 'a': goto yy22;
+ default: goto yy9;
}
}
-#line 21 "repeater.re"
+#line 24 "repeater.re"
}
-#define do_scan(str) scan(str, strlen(str))
+void _do_scan(int exp, const char * str, int len)
+{
+ int ret = scan(str, len);
+
+ printf("%d %s %d\n", exp, exp == ret ? "==" : "!=", ret);
+}
+
+#define do_scan(exp, str) _do_scan(exp, str, sizeof(str) - 1)
main()
{
- do_scan("a\n");
- do_scan("aa\n");
- do_scan("aaa\n");
- do_scan("aaaa\n");
- do_scan("q");
- do_scan("a");
- do_scan("A\n");
- do_scan("AA\n");
- do_scan("aAa\n");
- do_scan("AaaA\n");
- do_scan("Q");
- do_scan("AaaAa\n");
- do_scan("AaaAaA\n");
- do_scan("A");
- do_scan("\n");
- do_scan("0");
+ do_scan(1, "a\n");
+ do_scan(2, "aa\n");
+ do_scan(2, "aaa\n");
+ do_scan(4, "aaaa\n");
+ do_scan(0, "q");
+ do_scan(0, "a");
+ do_scan(1, "A\n");
+ do_scan(2, "AA\n");
+ do_scan(2, "aAa\n");
+ do_scan(4, "AaaA\n");
+ do_scan(5, "Q");
+ do_scan(4, "AaaAa\n");
+ do_scan(3, "AaaAaA\n");
+ do_scan(5, "A");
+ do_scan(0, "\n");
+ do_scan(5, "0");
+ do_scan(0, "a");
+ do_scan(0, "q");
+ do_scan(5, "x");
}