From: nuffer Date: Mon, 6 Sep 2004 22:09:26 +0000 (+0000) Subject: Adding test suite. X-Git-Tag: 0.13.6~686 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=529f4b21629204e8527192f0c0e2f9ab3dd8536a;p=re2c Adding test suite. --- diff --git a/Makefile.am b/Makefile.am index ba22761e..38466db5 100755 --- a/Makefile.am +++ b/Makefile.am @@ -21,11 +21,13 @@ DISTCLEANFILES = makerpm re2c.spec README scanner.cc re2c$(EXEEXT) EXTRA_DIST = $(man_MANS) README parser.y scanner.re makerpm.in re2c.spec.in \ README.in y.tab.h \ - examples/basemmap.c examples/c.re examples/cmmap.re \ - examples/cnokw.re examples/cunroll.re examples/modula.re \ - examples/sample.re examples/simple.re examples/rexx/README \ - examples/rexx/rexx.l examples/rexx/scanio.c doc/loplas.ps \ - doc/sample.bib + doc examples test + +dist-hook: + rm -rf `find $(distdir)/doc -name CVS` + rm -rf `find $(distdir)/examples -name CVS` + rm -rf `find $(distdir)/test -name CVS` + rpm-files: $(bin_PROGRAMS) $(EXTRA_DIST) @@ -45,3 +47,6 @@ scanner.cc: $(top_srcdir)/scanner.re .version: echo $(PACKAGE_VERSION) > .version + +TESTS = test/run_tests.sh + diff --git a/configure.in b/configure.in index 5733f3a0..207ba0c5 100644 --- a/configure.in +++ b/configure.in @@ -54,6 +54,13 @@ AC_CHECK_TYPE([ulong], [ AC_DEFINE([HAVE_ULONG], [1], [Define to 1 if you have ulong type definition]) ]) -AC_CONFIG_FILES([Makefile README makerpm re2c.1 re2c.spec]) -AC_OUTPUT_COMMANDS([chmod +x makerpm]) +AC_CONFIG_FILES([\ +Makefile \ +README \ +makerpm \ +re2c.1 \ +re2c.spec \ +test/run_tests.sh \ +]) +AC_OUTPUT_COMMANDS([chmod +x makerpm test/run_tests.sh]) AC_OUTPUT diff --git a/test/.cvsignore b/test/.cvsignore new file mode 100644 index 00000000..e89b4c13 --- /dev/null +++ b/test/.cvsignore @@ -0,0 +1 @@ +run_tests.sh diff --git a/test/c.c b/test/c.c new file mode 100644 index 00000000..8866e54c --- /dev/null +++ b/test/c.c @@ -0,0 +1,4088 @@ + +#line 1 "c.re" +#include +#include +#include + +#define ADDEQ 257 +#define ANDAND 258 +#define ANDEQ 259 +#define ARRAY 260 +#define ASM 261 +#define AUTO 262 +#define BREAK 263 +#define CASE 264 +#define CHAR 265 +#define CONST 266 +#define CONTINUE 267 +#define DECR 268 +#define DEFAULT 269 +#define DEREF 270 +#define DIVEQ 271 +#define DO 272 +#define DOUBLE 273 +#define ELLIPSIS 274 +#define ELSE 275 +#define ENUM 276 +#define EQL 277 +#define EXTERN 278 +#define FCON 279 +#define FLOAT 280 +#define FOR 281 +#define FUNCTION 282 +#define GEQ 283 +#define GOTO 284 +#define ICON 285 +#define ID 286 +#define IF 287 +#define INCR 288 +#define INT 289 +#define LEQ 290 +#define LONG 291 +#define LSHIFT 292 +#define LSHIFTEQ 293 +#define MODEQ 294 +#define MULEQ 295 +#define NEQ 296 +#define OREQ 297 +#define OROR 298 +#define POINTER 299 +#define REGISTER 300 +#define RETURN 301 +#define RSHIFT 302 +#define RSHIFTEQ 303 +#define SCON 304 +#define SHORT 305 +#define SIGNED 306 +#define SIZEOF 307 +#define STATIC 308 +#define STRUCT 309 +#define SUBEQ 310 +#define SWITCH 311 +#define TYPEDEF 312 +#define UNION 313 +#define UNSIGNED 314 +#define VOID 315 +#define VOLATILE 316 +#define WHILE 317 +#define XOREQ 318 +#define EOI 319 + +typedef unsigned int uint; +typedef unsigned char uchar; + +#define BSIZE 8192 + +#define YYCTYPE uchar +#define YYCURSOR cursor +#define YYLIMIT s->lim +#define YYMARKER s->ptr +#define YYFILL(n) {cursor = fill(s, cursor);} + +#define RET(i) {s->cur = cursor; return i;} + +typedef struct Scanner { + int fd; + uchar *bot, *tok, *ptr, *cur, *pos, *lim, *top, *eof; + uint line; +} Scanner; + +uchar *fill(Scanner *s, uchar *cursor){ + if(!s->eof) { + uint cnt = s->tok - s->bot; + if(cnt){ + memcpy(s->bot, s->tok, s->lim - s->tok); + s->tok = s->bot; + s->ptr -= cnt; + cursor -= cnt; + s->pos -= cnt; + s->lim -= cnt; + } + if((s->top - s->lim) < BSIZE){ + uchar *buf = (uchar*) malloc(((s->lim - s->bot) + BSIZE)*sizeof(uchar)); + memcpy(buf, s->tok, s->lim - s->tok); + s->tok = buf; + s->ptr = &buf[s->ptr - s->bot]; + cursor = &buf[cursor - s->bot]; + s->pos = &buf[s->pos - s->bot]; + s->lim = &buf[s->lim - s->bot]; + s->top = &s->lim[BSIZE]; + free(s->bot); + s->bot = buf; + } + if((cnt = read(s->fd, (char*) s->lim, BSIZE)) != BSIZE){ + s->eof = &s->lim[cnt]; *(s->eof)++ = '\n'; + } + s->lim += cnt; + } + return cursor; +} + +int scan(Scanner *s){ + uchar *cursor = s->cur; +std: + s->tok = cursor; +#line 133 "c.re" + + + +#line 7 "" +{ + YYCTYPE yych; + unsigned int yyaccept; + goto yy0; +yy1: ++YYCURSOR; +yy0: + if((YYLIMIT - YYCURSOR) < 9) YYFILL(9); + yych = *YYCURSOR; + switch(yych){ + case 0x09: case 0x0B: + case 0x0C: case ' ': goto yy73; + case 0x0A: goto yy75; + case '!': goto yy49; + case '"': goto yy28; + case '%': goto yy39; + case '&': goto yy41; + case '\'': goto yy24; + case '(': goto yy61; + case ')': goto yy63; + case '*': goto yy37; + case '+': goto yy33; + case ',': goto yy57; + case '-': goto yy35; + case '.': goto yy26; + case '/': goto yy2; + case '0': goto yy21; + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy23; + case ':': goto yy59; + case ';': goto yy51; + case '<': goto yy31; + case '=': goto yy47; + case '>': goto yy29; + case '?': goto yy71; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'h': case 'j': + case 'k': case 'm': + case 'n': + case 'o': + case 'p': + case 'q': case 'x': + case 'y': + case 'z': goto yy20; + case '[': goto yy65; + case ']': goto yy67; + case '^': goto yy43; + case 'a': goto yy4; + case 'b': goto yy6; + case 'c': goto yy7; + case 'd': goto yy8; + case 'e': goto yy9; + case 'f': goto yy10; + case 'g': goto yy11; + case 'i': goto yy12; + case 'l': goto yy13; + case 'r': goto yy14; + case 's': goto yy15; + case 't': goto yy16; + case 'u': goto yy17; + case 'v': goto yy18; + case 'w': goto yy19; + case '{': goto yy53; + case '|': goto yy45; + case '}': goto yy55; + case '~': goto yy69; + default: goto yy77; + } +yy2: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '*': goto yy341; + case '=': goto yy339; + default: goto yy3; + } +yy3: +#line 222 "c.re" +{ RET('/'); } +#line 115 "" +yy4: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case 'u': goto yy335; + default: goto yy180; + } +yy5: +#line 171 "c.re" +{ RET(ID); } +#line 124 "" +yy6: yych = *++YYCURSOR; + switch(yych){ + case 'r': goto yy330; + default: goto yy180; + } +yy7: yych = *++YYCURSOR; + switch(yych){ + case 'a': goto yy311; + case 'h': goto yy312; + case 'o': goto yy313; + default: goto yy180; + } +yy8: yych = *++YYCURSOR; + switch(yych){ + case 'e': goto yy297; + case 'o': goto yy298; + default: goto yy180; + } +yy9: yych = *++YYCURSOR; + switch(yych){ + case 'l': goto yy283; + case 'n': goto yy284; + case 'x': goto yy285; + default: goto yy180; + } +yy10: yych = *++YYCURSOR; + switch(yych){ + case 'l': goto yy275; + case 'o': goto yy276; + default: goto yy180; + } +yy11: yych = *++YYCURSOR; + switch(yych){ + case 'o': goto yy271; + default: goto yy180; + } +yy12: yych = *++YYCURSOR; + switch(yych){ + case 'f': goto yy266; + case 'n': goto yy268; + default: goto yy180; + } +yy13: yych = *++YYCURSOR; + switch(yych){ + case 'o': goto yy262; + default: goto yy180; + } +yy14: yych = *++YYCURSOR; + switch(yych){ + case 'e': goto yy249; + default: goto yy180; + } +yy15: yych = *++YYCURSOR; + switch(yych){ + case 'h': goto yy216; + case 'i': goto yy217; + case 't': goto yy218; + case 'w': goto yy219; + default: goto yy180; + } +yy16: yych = *++YYCURSOR; + switch(yych){ + case 'y': goto yy209; + default: goto yy180; + } +yy17: yych = *++YYCURSOR; + switch(yych){ + case 'n': goto yy197; + default: goto yy180; + } +yy18: yych = *++YYCURSOR; + switch(yych){ + case 'o': goto yy186; + default: goto yy180; + } +yy19: yych = *++YYCURSOR; + switch(yych){ + case 'h': goto yy181; + default: goto yy180; + } +yy20: yych = *++YYCURSOR; + goto yy180; +yy21: yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + switch(yych){ + case 'L': case 'U': case 'l': case 'u': goto yy155; + case 'X': case 'x': goto yy172; + default: goto yy171; + } +yy22: +#line 175 "c.re" +{ RET(ICON); } +#line 217 "" +yy23: yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + goto yy153; +yy24: yyaccept = 1; + yych = *(YYMARKER = ++YYCURSOR); + switch(yych){ + case 0x0A: goto yy25; + default: goto yy143; + } +yy25: +#line 241 "c.re" +{ + printf("unexpected character: %c\n", *s->tok); + goto std; + } +#line 233 "" +yy26: yyaccept = 2; + yych = *(YYMARKER = ++YYCURSOR); + switch(yych){ + case '.': goto yy131; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy132; + default: goto yy27; + } +yy27: +#line 215 "c.re" +{ RET('.'); } +#line 253 "" +yy28: yyaccept = 1; + yych = *(YYMARKER = ++YYCURSOR); + switch(yych){ + case 0x0A: goto yy25; + default: goto yy121; + } +yy29: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '=': goto yy114; + case '>': goto yy116; + default: goto yy30; + } +yy30: +#line 225 "c.re" +{ RET('>'); } +#line 269 "" +yy31: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '<': goto yy110; + case '=': goto yy108; + default: goto yy32; + } +yy32: +#line 224 "c.re" +{ RET('<'); } +#line 279 "" +yy33: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '+': goto yy104; + case '=': goto yy106; + default: goto yy34; + } +yy34: +#line 220 "c.re" +{ RET('+'); } +#line 289 "" +yy35: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '-': goto yy100; + case '=': goto yy102; + case '>': goto yy98; + default: goto yy36; + } +yy36: +#line 219 "c.re" +{ RET('-'); } +#line 300 "" +yy37: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '=': goto yy96; + default: goto yy38; + } +yy38: +#line 221 "c.re" +{ RET('*'); } +#line 309 "" +yy39: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '=': goto yy94; + default: goto yy40; + } +yy40: +#line 223 "c.re" +{ RET('%'); } +#line 318 "" +yy41: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '&': goto yy90; + case '=': goto yy92; + default: goto yy42; + } +yy42: +#line 216 "c.re" +{ RET('&'); } +#line 328 "" +yy43: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '=': goto yy88; + default: goto yy44; + } +yy44: +#line 226 "c.re" +{ RET('^'); } +#line 337 "" +yy45: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '=': goto yy86; + case '|': goto yy84; + default: goto yy46; + } +yy46: +#line 227 "c.re" +{ RET('|'); } +#line 347 "" +yy47: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '=': goto yy82; + default: goto yy48; + } +yy48: +#line 210 "c.re" +{ RET('='); } +#line 356 "" +yy49: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '=': goto yy80; + default: goto yy50; + } +yy50: +#line 217 "c.re" +{ RET('!'); } +#line 365 "" +yy51: ++YYCURSOR; + goto yy52; +yy52: +#line 205 "c.re" +{ RET(';'); } +#line 371 "" +yy53: ++YYCURSOR; + goto yy54; +yy54: +#line 206 "c.re" +{ RET('{'); } +#line 377 "" +yy55: ++YYCURSOR; + goto yy56; +yy56: +#line 207 "c.re" +{ RET('}'); } +#line 383 "" +yy57: ++YYCURSOR; + goto yy58; +yy58: +#line 208 "c.re" +{ RET(','); } +#line 389 "" +yy59: ++YYCURSOR; + goto yy60; +yy60: +#line 209 "c.re" +{ RET(':'); } +#line 395 "" +yy61: ++YYCURSOR; + goto yy62; +yy62: +#line 211 "c.re" +{ RET('('); } +#line 401 "" +yy63: ++YYCURSOR; + goto yy64; +yy64: +#line 212 "c.re" +{ RET(')'); } +#line 407 "" +yy65: ++YYCURSOR; + goto yy66; +yy66: +#line 213 "c.re" +{ RET('['); } +#line 413 "" +yy67: ++YYCURSOR; + goto yy68; +yy68: +#line 214 "c.re" +{ RET(']'); } +#line 419 "" +yy69: ++YYCURSOR; + goto yy70; +yy70: +#line 218 "c.re" +{ RET('~'); } +#line 425 "" +yy71: ++YYCURSOR; + goto yy72; +yy72: +#line 228 "c.re" +{ RET('?'); } +#line 431 "" +yy73: ++YYCURSOR; + yych = *YYCURSOR; + goto yy79; +yy74: +#line 231 "c.re" +{ goto std; } +#line 437 "" +yy75: ++YYCURSOR; + goto yy76; +yy76: +#line 234 "c.re" +{ + if(cursor == s->eof) RET(EOI); + s->pos = cursor; s->line++; + goto std; + } +#line 447 "" +yy77: yych = *++YYCURSOR; + goto yy25; +yy78: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy79; +yy79: switch(yych){ + case 0x09: case 0x0B: + case 0x0C: case ' ': goto yy78; + default: goto yy74; + } +yy80: ++YYCURSOR; + goto yy81; +yy81: +#line 204 "c.re" +{ RET(NEQ); } +#line 465 "" +yy82: ++YYCURSOR; + goto yy83; +yy83: +#line 203 "c.re" +{ RET(EQL); } +#line 471 "" +yy84: ++YYCURSOR; + goto yy85; +yy85: +#line 200 "c.re" +{ RET(OROR); } +#line 477 "" +yy86: ++YYCURSOR; + goto yy87; +yy87: +#line 193 "c.re" +{ RET(OREQ); } +#line 483 "" +yy88: ++YYCURSOR; + goto yy89; +yy89: +#line 192 "c.re" +{ RET(XOREQ); } +#line 489 "" +yy90: ++YYCURSOR; + goto yy91; +yy91: +#line 199 "c.re" +{ RET(ANDAND); } +#line 495 "" +yy92: ++YYCURSOR; + goto yy93; +yy93: +#line 191 "c.re" +{ RET(ANDEQ); } +#line 501 "" +yy94: ++YYCURSOR; + goto yy95; +yy95: +#line 190 "c.re" +{ RET(MODEQ); } +#line 507 "" +yy96: ++YYCURSOR; + goto yy97; +yy97: +#line 188 "c.re" +{ RET(MULEQ); } +#line 513 "" +yy98: ++YYCURSOR; + goto yy99; +yy99: +#line 198 "c.re" +{ RET(DEREF); } +#line 519 "" +yy100: ++YYCURSOR; + goto yy101; +yy101: +#line 197 "c.re" +{ RET(DECR); } +#line 525 "" +yy102: ++YYCURSOR; + goto yy103; +yy103: +#line 187 "c.re" +{ RET(SUBEQ); } +#line 531 "" +yy104: ++YYCURSOR; + goto yy105; +yy105: +#line 196 "c.re" +{ RET(INCR); } +#line 537 "" +yy106: ++YYCURSOR; + goto yy107; +yy107: +#line 186 "c.re" +{ RET(ADDEQ); } +#line 543 "" +yy108: ++YYCURSOR; + goto yy109; +yy109: +#line 201 "c.re" +{ RET(LEQ); } +#line 549 "" +yy110: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '=': goto yy112; + default: goto yy111; + } +yy111: +#line 195 "c.re" +{ RET(LSHIFT); } +#line 558 "" +yy112: ++YYCURSOR; + goto yy113; +yy113: +#line 185 "c.re" +{ RET(LSHIFTEQ); } +#line 564 "" +yy114: ++YYCURSOR; + goto yy115; +yy115: +#line 202 "c.re" +{ RET(GEQ); } +#line 570 "" +yy116: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '=': goto yy118; + default: goto yy117; + } +yy117: +#line 194 "c.re" +{ RET(RSHIFT); } +#line 579 "" +yy118: ++YYCURSOR; + goto yy119; +yy119: +#line 184 "c.re" +{ RET(RSHIFTEQ); } +#line 585 "" +yy120: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy121; +yy121: switch(yych){ + case 0x0A: goto yy122; + case '"': goto yy124; + case '\\': goto yy123; + default: goto yy120; + } +yy122: YYCURSOR = YYMARKER; + switch(yyaccept){ + case 0: goto yy22; + case 3: goto yy134; + case 2: goto yy27; + case 1: goto yy25; + } +yy123: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + switch(yych){ + case '"': case '\'': case '?': case '\\': case 'a': + case 'b': case 'f': case 'n': case 'r': case 't': case 'v': goto yy120; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': goto yy127; + case 'x': goto yy126; + default: goto yy122; + } +yy124: ++YYCURSOR; + goto yy125; +yy125: +#line 181 "c.re" +{ RET(SCON); } +#line 627 "" +yy126: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': goto yy129; + default: goto yy122; + } +yy127: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy128; +yy128: switch(yych){ + case 0x0A: goto yy122; + case '"': goto yy124; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': goto yy127; + case '\\': goto yy123; + default: goto yy120; + } +yy129: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy130; +yy130: switch(yych){ + case 0x0A: goto yy122; + case '"': goto yy124; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': goto yy129; + case '\\': goto yy123; + default: goto yy120; + } +yy131: yych = *++YYCURSOR; + switch(yych){ + case '.': goto yy140; + default: goto yy122; + } +yy132: yyaccept = 3; + YYMARKER = ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy133; +yy133: switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy132; + case 'E': case 'e': goto yy135; + case 'F': case 'L': case 'f': case 'l': goto yy136; + default: goto yy134; + } +yy134: +#line 178 "c.re" +{ RET(FCON); } +#line 733 "" +yy135: yych = *++YYCURSOR; + switch(yych){ + case '+': case '-': goto yy137; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy138; + default: goto yy122; + } +yy136: yych = *++YYCURSOR; + goto yy134; +yy137: yych = *++YYCURSOR; + switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy138; + default: goto yy122; + } +yy138: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy139; +yy139: switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy138; + case 'F': case 'L': case 'f': case 'l': goto yy136; + default: goto yy134; + } +yy140: ++YYCURSOR; + goto yy141; +yy141: +#line 183 "c.re" +{ RET(ELLIPSIS); } +#line 789 "" +yy142: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy143; +yy143: switch(yych){ + case 0x0A: goto yy122; + case '\'': goto yy145; + case '\\': goto yy144; + default: goto yy142; + } +yy144: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + switch(yych){ + case '"': case '\'': case '?': case '\\': case 'a': + case 'b': case 'f': case 'n': case 'r': case 't': case 'v': goto yy142; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': goto yy147; + case 'x': goto yy146; + default: goto yy122; + } +yy145: yych = *++YYCURSOR; + goto yy22; +yy146: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': goto yy149; + default: goto yy122; + } +yy147: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy148; +yy148: switch(yych){ + case 0x0A: goto yy122; + case '\'': goto yy145; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': goto yy147; + case '\\': goto yy144; + default: goto yy142; + } +yy149: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy150; +yy150: switch(yych){ + case 0x0A: goto yy122; + case '\'': goto yy145; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': goto yy149; + case '\\': goto yy144; + default: goto yy142; + } +yy151: yyaccept = 3; + yych = *(YYMARKER = ++YYCURSOR); + switch(yych){ + case 'E': case 'e': goto yy162; + default: goto yy161; + } +yy152: yyaccept = 0; + YYMARKER = ++YYCURSOR; + if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); + yych = *YYCURSOR; + goto yy153; +yy153: switch(yych){ + case '.': goto yy151; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy152; + case 'E': case 'e': goto yy154; + case 'L': case 'U': case 'l': case 'u': goto yy155; + default: goto yy22; + } +yy154: yych = *++YYCURSOR; + switch(yych){ + case '+': case '-': goto yy157; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy158; + default: goto yy122; + } +yy155: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy156; +yy156: switch(yych){ + case 'L': case 'U': case 'l': case 'u': goto yy155; + default: goto yy22; + } +yy157: yych = *++YYCURSOR; + switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy158; + default: goto yy122; + } +yy158: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy159; +yy159: switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy158; + case 'F': case 'L': case 'f': case 'l': goto yy136; + default: goto yy134; + } +yy160: yyaccept = 3; + YYMARKER = ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy161; +yy161: switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy160; + case 'E': case 'e': goto yy166; + case 'F': case 'L': case 'f': case 'l': goto yy136; + default: goto yy134; + } +yy162: yych = *++YYCURSOR; + switch(yych){ + case '+': case '-': goto yy163; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy164; + default: goto yy122; + } +yy163: yych = *++YYCURSOR; + switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy164; + default: goto yy122; + } +yy164: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy165; +yy165: switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy164; + case 'F': case 'L': case 'f': case 'l': goto yy136; + default: goto yy134; + } +yy166: yych = *++YYCURSOR; + switch(yych){ + case '+': case '-': goto yy167; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy168; + default: goto yy122; + } +yy167: yych = *++YYCURSOR; + switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy168; + default: goto yy122; + } +yy168: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy169; +yy169: switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy168; + case 'F': case 'L': case 'f': case 'l': goto yy136; + default: goto yy134; + } +yy170: yyaccept = 0; + YYMARKER = ++YYCURSOR; + if((YYLIMIT - YYCURSOR) < 4) YYFILL(4); + yych = *YYCURSOR; + goto yy171; +yy171: switch(yych){ + case '.': goto yy151; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy170; + case 'E': case 'e': goto yy154; + case 'L': case 'U': case 'l': case 'u': goto yy177; + default: goto yy22; + } +yy172: yych = *++YYCURSOR; + switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': goto yy173; + default: goto yy122; + } +yy173: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy174; +yy174: switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': goto yy173; + case 'L': case 'U': case 'l': case 'u': goto yy175; + default: goto yy22; + } +yy175: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy176; +yy176: switch(yych){ + case 'L': case 'U': case 'l': case 'u': goto yy175; + default: goto yy22; + } +yy177: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy178; +yy178: switch(yych){ + case 'L': case 'U': case 'l': case 'u': goto yy177; + default: goto yy22; + } +yy179: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy180; +yy180: switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy5; + } +yy181: yych = *++YYCURSOR; + switch(yych){ + case 'i': goto yy182; + default: goto yy180; + } +yy182: yych = *++YYCURSOR; + switch(yych){ + case 'l': goto yy183; + default: goto yy180; + } +yy183: yych = *++YYCURSOR; + switch(yych){ + case 'e': goto yy184; + default: goto yy180; + } +yy184: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy185; + } +yy185: +#line 169 "c.re" +{ RET(WHILE); } +#line 1340 "" +yy186: yych = *++YYCURSOR; + switch(yych){ + case 'i': goto yy187; + case 'l': goto yy188; + default: goto yy180; + } +yy187: yych = *++YYCURSOR; + switch(yych){ + case 'd': goto yy195; + default: goto yy180; + } +yy188: yych = *++YYCURSOR; + switch(yych){ + case 'a': goto yy189; + default: goto yy180; + } +yy189: yych = *++YYCURSOR; + switch(yych){ + case 't': goto yy190; + default: goto yy180; + } +yy190: yych = *++YYCURSOR; + switch(yych){ + case 'i': goto yy191; + default: goto yy180; + } +yy191: yych = *++YYCURSOR; + switch(yych){ + case 'l': goto yy192; + default: goto yy180; + } +yy192: yych = *++YYCURSOR; + switch(yych){ + case 'e': goto yy193; + default: goto yy180; + } +yy193: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy194; + } +yy194: +#line 168 "c.re" +{ RET(VOLATILE); } +#line 1444 "" +yy195: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy196; + } +yy196: +#line 167 "c.re" +{ RET(VOID); } +#line 1512 "" +yy197: yych = *++YYCURSOR; + switch(yych){ + case 'i': goto yy198; + case 's': goto yy199; + default: goto yy180; + } +yy198: yych = *++YYCURSOR; + switch(yych){ + case 'o': goto yy206; + default: goto yy180; + } +yy199: yych = *++YYCURSOR; + switch(yych){ + case 'i': goto yy200; + default: goto yy180; + } +yy200: yych = *++YYCURSOR; + switch(yych){ + case 'g': goto yy201; + default: goto yy180; + } +yy201: yych = *++YYCURSOR; + switch(yych){ + case 'n': goto yy202; + default: goto yy180; + } +yy202: yych = *++YYCURSOR; + switch(yych){ + case 'e': goto yy203; + default: goto yy180; + } +yy203: yych = *++YYCURSOR; + switch(yych){ + case 'd': goto yy204; + default: goto yy180; + } +yy204: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy205; + } +yy205: +#line 166 "c.re" +{ RET(UNSIGNED); } +#line 1616 "" +yy206: yych = *++YYCURSOR; + switch(yych){ + case 'n': goto yy207; + default: goto yy180; + } +yy207: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy208; + } +yy208: +#line 165 "c.re" +{ RET(UNION); } +#line 1689 "" +yy209: yych = *++YYCURSOR; + switch(yych){ + case 'p': goto yy210; + default: goto yy180; + } +yy210: yych = *++YYCURSOR; + switch(yych){ + case 'e': goto yy211; + default: goto yy180; + } +yy211: yych = *++YYCURSOR; + switch(yych){ + case 'd': goto yy212; + default: goto yy180; + } +yy212: yych = *++YYCURSOR; + switch(yych){ + case 'e': goto yy213; + default: goto yy180; + } +yy213: yych = *++YYCURSOR; + switch(yych){ + case 'f': goto yy214; + default: goto yy180; + } +yy214: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy215; + } +yy215: +#line 164 "c.re" +{ RET(TYPEDEF); } +#line 1782 "" +yy216: yych = *++YYCURSOR; + switch(yych){ + case 'o': goto yy245; + default: goto yy180; + } +yy217: yych = *++YYCURSOR; + switch(yych){ + case 'g': goto yy235; + case 'z': goto yy236; + default: goto yy180; + } +yy218: yych = *++YYCURSOR; + switch(yych){ + case 'a': goto yy225; + case 'r': goto yy226; + default: goto yy180; + } +yy219: yych = *++YYCURSOR; + switch(yych){ + case 'i': goto yy220; + default: goto yy180; + } +yy220: yych = *++YYCURSOR; + switch(yych){ + case 't': goto yy221; + default: goto yy180; + } +yy221: yych = *++YYCURSOR; + switch(yych){ + case 'c': goto yy222; + default: goto yy180; + } +yy222: yych = *++YYCURSOR; + switch(yych){ + case 'h': goto yy223; + default: goto yy180; + } +yy223: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy224; + } +yy224: +#line 163 "c.re" +{ RET(SWITCH); } +#line 1887 "" +yy225: yych = *++YYCURSOR; + switch(yych){ + case 't': goto yy231; + default: goto yy180; + } +yy226: yych = *++YYCURSOR; + switch(yych){ + case 'u': goto yy227; + default: goto yy180; + } +yy227: yych = *++YYCURSOR; + switch(yych){ + case 'c': goto yy228; + default: goto yy180; + } +yy228: yych = *++YYCURSOR; + switch(yych){ + case 't': goto yy229; + default: goto yy180; + } +yy229: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy230; + } +yy230: +#line 162 "c.re" +{ RET(STRUCT); } +#line 1975 "" +yy231: yych = *++YYCURSOR; + switch(yych){ + case 'i': goto yy232; + default: goto yy180; + } +yy232: yych = *++YYCURSOR; + switch(yych){ + case 'c': goto yy233; + default: goto yy180; + } +yy233: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy234; + } +yy234: +#line 161 "c.re" +{ RET(STATIC); } +#line 2053 "" +yy235: yych = *++YYCURSOR; + switch(yych){ + case 'n': goto yy241; + default: goto yy180; + } +yy236: yych = *++YYCURSOR; + switch(yych){ + case 'e': goto yy237; + default: goto yy180; + } +yy237: yych = *++YYCURSOR; + switch(yych){ + case 'o': goto yy238; + default: goto yy180; + } +yy238: yych = *++YYCURSOR; + switch(yych){ + case 'f': goto yy239; + default: goto yy180; + } +yy239: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy240; + } +yy240: +#line 160 "c.re" +{ RET(SIZEOF); } +#line 2141 "" +yy241: yych = *++YYCURSOR; + switch(yych){ + case 'e': goto yy242; + default: goto yy180; + } +yy242: yych = *++YYCURSOR; + switch(yych){ + case 'd': goto yy243; + default: goto yy180; + } +yy243: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy244; + } +yy244: +#line 159 "c.re" +{ RET(SIGNED); } +#line 2219 "" +yy245: yych = *++YYCURSOR; + switch(yych){ + case 'r': goto yy246; + default: goto yy180; + } +yy246: yych = *++YYCURSOR; + switch(yych){ + case 't': goto yy247; + default: goto yy180; + } +yy247: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy248; + } +yy248: +#line 158 "c.re" +{ RET(SHORT); } +#line 2297 "" +yy249: yych = *++YYCURSOR; + switch(yych){ + case 'g': goto yy250; + case 't': goto yy251; + default: goto yy180; + } +yy250: yych = *++YYCURSOR; + switch(yych){ + case 'i': goto yy256; + default: goto yy180; + } +yy251: yych = *++YYCURSOR; + switch(yych){ + case 'u': goto yy252; + default: goto yy180; + } +yy252: yych = *++YYCURSOR; + switch(yych){ + case 'r': goto yy253; + default: goto yy180; + } +yy253: yych = *++YYCURSOR; + switch(yych){ + case 'n': goto yy254; + default: goto yy180; + } +yy254: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy255; + } +yy255: +#line 157 "c.re" +{ RET(RETURN); } +#line 2391 "" +yy256: yych = *++YYCURSOR; + switch(yych){ + case 's': goto yy257; + default: goto yy180; + } +yy257: yych = *++YYCURSOR; + switch(yych){ + case 't': goto yy258; + default: goto yy180; + } +yy258: yych = *++YYCURSOR; + switch(yych){ + case 'e': goto yy259; + default: goto yy180; + } +yy259: yych = *++YYCURSOR; + switch(yych){ + case 'r': goto yy260; + default: goto yy180; + } +yy260: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy261; + } +yy261: +#line 156 "c.re" +{ RET(REGISTER); } +#line 2479 "" +yy262: yych = *++YYCURSOR; + switch(yych){ + case 'n': goto yy263; + default: goto yy180; + } +yy263: yych = *++YYCURSOR; + switch(yych){ + case 'g': goto yy264; + default: goto yy180; + } +yy264: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy265; + } +yy265: +#line 155 "c.re" +{ RET(LONG); } +#line 2557 "" +yy266: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy267; + } +yy267: +#line 153 "c.re" +{ RET(IF); } +#line 2625 "" +yy268: yych = *++YYCURSOR; + switch(yych){ + case 't': goto yy269; + default: goto yy180; + } +yy269: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy270; + } +yy270: +#line 154 "c.re" +{ RET(INT); } +#line 2698 "" +yy271: yych = *++YYCURSOR; + switch(yych){ + case 't': goto yy272; + default: goto yy180; + } +yy272: yych = *++YYCURSOR; + switch(yych){ + case 'o': goto yy273; + default: goto yy180; + } +yy273: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy274; + } +yy274: +#line 152 "c.re" +{ RET(GOTO); } +#line 2776 "" +yy275: yych = *++YYCURSOR; + switch(yych){ + case 'o': goto yy279; + default: goto yy180; + } +yy276: yych = *++YYCURSOR; + switch(yych){ + case 'r': goto yy277; + default: goto yy180; + } +yy277: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy278; + } +yy278: +#line 151 "c.re" +{ RET(FOR); } +#line 2854 "" +yy279: yych = *++YYCURSOR; + switch(yych){ + case 'a': goto yy280; + default: goto yy180; + } +yy280: yych = *++YYCURSOR; + switch(yych){ + case 't': goto yy281; + default: goto yy180; + } +yy281: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy282; + } +yy282: +#line 150 "c.re" +{ RET(FLOAT); } +#line 2932 "" +yy283: yych = *++YYCURSOR; + switch(yych){ + case 's': goto yy294; + default: goto yy180; + } +yy284: yych = *++YYCURSOR; + switch(yych){ + case 'u': goto yy291; + default: goto yy180; + } +yy285: yych = *++YYCURSOR; + switch(yych){ + case 't': goto yy286; + default: goto yy180; + } +yy286: yych = *++YYCURSOR; + switch(yych){ + case 'e': goto yy287; + default: goto yy180; + } +yy287: yych = *++YYCURSOR; + switch(yych){ + case 'r': goto yy288; + default: goto yy180; + } +yy288: yych = *++YYCURSOR; + switch(yych){ + case 'n': goto yy289; + default: goto yy180; + } +yy289: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy290; + } +yy290: +#line 149 "c.re" +{ RET(EXTERN); } +#line 3030 "" +yy291: yych = *++YYCURSOR; + switch(yych){ + case 'm': goto yy292; + default: goto yy180; + } +yy292: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy293; + } +yy293: +#line 148 "c.re" +{ RET(ENUM); } +#line 3103 "" +yy294: yych = *++YYCURSOR; + switch(yych){ + case 'e': goto yy295; + default: goto yy180; + } +yy295: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy296; + } +yy296: +#line 147 "c.re" +{ RET(ELSE); } +#line 3176 "" +yy297: yych = *++YYCURSOR; + switch(yych){ + case 'f': goto yy305; + default: goto yy180; + } +yy298: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + case 'u': goto yy300; + default: goto yy299; + } +yy299: +#line 145 "c.re" +{ RET(DO); } +#line 3248 "" +yy300: yych = *++YYCURSOR; + switch(yych){ + case 'b': goto yy301; + default: goto yy180; + } +yy301: yych = *++YYCURSOR; + switch(yych){ + case 'l': goto yy302; + default: goto yy180; + } +yy302: yych = *++YYCURSOR; + switch(yych){ + case 'e': goto yy303; + default: goto yy180; + } +yy303: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy304; + } +yy304: +#line 146 "c.re" +{ RET(DOUBLE); } +#line 3331 "" +yy305: yych = *++YYCURSOR; + switch(yych){ + case 'a': goto yy306; + default: goto yy180; + } +yy306: yych = *++YYCURSOR; + switch(yych){ + case 'u': goto yy307; + default: goto yy180; + } +yy307: yych = *++YYCURSOR; + switch(yych){ + case 'l': goto yy308; + default: goto yy180; + } +yy308: yych = *++YYCURSOR; + switch(yych){ + case 't': goto yy309; + default: goto yy180; + } +yy309: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy310; + } +yy310: +#line 144 "c.re" +{ RET(DEFAULT); } +#line 3419 "" +yy311: yych = *++YYCURSOR; + switch(yych){ + case 's': goto yy327; + default: goto yy180; + } +yy312: yych = *++YYCURSOR; + switch(yych){ + case 'a': goto yy324; + default: goto yy180; + } +yy313: yych = *++YYCURSOR; + switch(yych){ + case 'n': goto yy314; + default: goto yy180; + } +yy314: yych = *++YYCURSOR; + switch(yych){ + case 's': goto yy315; + case 't': goto yy316; + default: goto yy180; + } +yy315: yych = *++YYCURSOR; + switch(yych){ + case 't': goto yy322; + default: goto yy180; + } +yy316: yych = *++YYCURSOR; + switch(yych){ + case 'i': goto yy317; + default: goto yy180; + } +yy317: yych = *++YYCURSOR; + switch(yych){ + case 'n': goto yy318; + default: goto yy180; + } +yy318: yych = *++YYCURSOR; + switch(yych){ + case 'u': goto yy319; + default: goto yy180; + } +yy319: yych = *++YYCURSOR; + switch(yych){ + case 'e': goto yy320; + default: goto yy180; + } +yy320: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy321; + } +yy321: +#line 143 "c.re" +{ RET(CONTINUE); } +#line 3533 "" +yy322: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy323; + } +yy323: +#line 142 "c.re" +{ RET(CONST); } +#line 3601 "" +yy324: yych = *++YYCURSOR; + switch(yych){ + case 'r': goto yy325; + default: goto yy180; + } +yy325: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy326; + } +yy326: +#line 141 "c.re" +{ RET(CHAR); } +#line 3674 "" +yy327: yych = *++YYCURSOR; + switch(yych){ + case 'e': goto yy328; + default: goto yy180; + } +yy328: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy329; + } +yy329: +#line 140 "c.re" +{ RET(CASE); } +#line 3747 "" +yy330: yych = *++YYCURSOR; + switch(yych){ + case 'e': goto yy331; + default: goto yy180; + } +yy331: yych = *++YYCURSOR; + switch(yych){ + case 'a': goto yy332; + default: goto yy180; + } +yy332: yych = *++YYCURSOR; + switch(yych){ + case 'k': goto yy333; + default: goto yy180; + } +yy333: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy334; + } +yy334: +#line 139 "c.re" +{ RET(BREAK); } +#line 3830 "" +yy335: yych = *++YYCURSOR; + switch(yych){ + case 't': goto yy336; + default: goto yy180; + } +yy336: yych = *++YYCURSOR; + switch(yych){ + case 'o': goto yy337; + default: goto yy180; + } +yy337: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy338; + } +yy338: +#line 138 "c.re" +{ RET(AUTO); } +#line 3908 "" +yy339: ++YYCURSOR; + goto yy340; +yy340: +#line 189 "c.re" +{ RET(DIVEQ); } +#line 3914 "" +yy341: ++YYCURSOR; + goto yy342; +yy342: +#line 136 "c.re" +{ goto comment; } +#line 3920 "" +} +#line 245 "c.re" + + +comment: + +#line 3924 "" +{ + YYCTYPE yych; + unsigned int yyaccept; + goto yy343; +yy344: ++YYCURSOR; +yy343: + if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); + yych = *YYCURSOR; + switch(yych){ + case 0x0A: goto yy347; + case '*': goto yy345; + default: goto yy349; + } +yy345: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '/': goto yy350; + default: goto yy346; + } +yy346: +#line 256 "c.re" +{ goto comment; } +#line 3946 "" +yy347: ++YYCURSOR; + goto yy348; +yy348: +#line 251 "c.re" +{ + if(cursor == s->eof) RET(EOI); + s->tok = s->pos = cursor; s->line++; + goto comment; + } +#line 3956 "" +yy349: yych = *++YYCURSOR; + goto yy346; +yy350: ++YYCURSOR; + goto yy351; +yy351: +#line 249 "c.re" +{ goto std; } +#line 3964 "" +} +#line 257 "c.re" + +} + +main(){ + Scanner in; + int t; + memset((char*) &in, 0, sizeof(in)); + in.fd = 0; + while((t = scan(&in)) != EOI){ +/* + printf("%d\t%.*s\n", t, in.cur - in.tok, in.tok); + printf("%d\n", t); +*/ + } + close(in.fd); +} diff --git a/test/c.re b/test/c.re new file mode 100644 index 00000000..7e413e2d --- /dev/null +++ b/test/c.re @@ -0,0 +1,272 @@ +#include +#include +#include + +#define ADDEQ 257 +#define ANDAND 258 +#define ANDEQ 259 +#define ARRAY 260 +#define ASM 261 +#define AUTO 262 +#define BREAK 263 +#define CASE 264 +#define CHAR 265 +#define CONST 266 +#define CONTINUE 267 +#define DECR 268 +#define DEFAULT 269 +#define DEREF 270 +#define DIVEQ 271 +#define DO 272 +#define DOUBLE 273 +#define ELLIPSIS 274 +#define ELSE 275 +#define ENUM 276 +#define EQL 277 +#define EXTERN 278 +#define FCON 279 +#define FLOAT 280 +#define FOR 281 +#define FUNCTION 282 +#define GEQ 283 +#define GOTO 284 +#define ICON 285 +#define ID 286 +#define IF 287 +#define INCR 288 +#define INT 289 +#define LEQ 290 +#define LONG 291 +#define LSHIFT 292 +#define LSHIFTEQ 293 +#define MODEQ 294 +#define MULEQ 295 +#define NEQ 296 +#define OREQ 297 +#define OROR 298 +#define POINTER 299 +#define REGISTER 300 +#define RETURN 301 +#define RSHIFT 302 +#define RSHIFTEQ 303 +#define SCON 304 +#define SHORT 305 +#define SIGNED 306 +#define SIZEOF 307 +#define STATIC 308 +#define STRUCT 309 +#define SUBEQ 310 +#define SWITCH 311 +#define TYPEDEF 312 +#define UNION 313 +#define UNSIGNED 314 +#define VOID 315 +#define VOLATILE 316 +#define WHILE 317 +#define XOREQ 318 +#define EOI 319 + +typedef unsigned int uint; +typedef unsigned char uchar; + +#define BSIZE 8192 + +#define YYCTYPE uchar +#define YYCURSOR cursor +#define YYLIMIT s->lim +#define YYMARKER s->ptr +#define YYFILL(n) {cursor = fill(s, cursor);} + +#define RET(i) {s->cur = cursor; return i;} + +typedef struct Scanner { + int fd; + uchar *bot, *tok, *ptr, *cur, *pos, *lim, *top, *eof; + uint line; +} Scanner; + +uchar *fill(Scanner *s, uchar *cursor){ + if(!s->eof) { + uint cnt = s->tok - s->bot; + if(cnt){ + memcpy(s->bot, s->tok, s->lim - s->tok); + s->tok = s->bot; + s->ptr -= cnt; + cursor -= cnt; + s->pos -= cnt; + s->lim -= cnt; + } + if((s->top - s->lim) < BSIZE){ + uchar *buf = (uchar*) malloc(((s->lim - s->bot) + BSIZE)*sizeof(uchar)); + memcpy(buf, s->tok, s->lim - s->tok); + s->tok = buf; + s->ptr = &buf[s->ptr - s->bot]; + cursor = &buf[cursor - s->bot]; + s->pos = &buf[s->pos - s->bot]; + s->lim = &buf[s->lim - s->bot]; + s->top = &s->lim[BSIZE]; + free(s->bot); + s->bot = buf; + } + if((cnt = read(s->fd, (char*) s->lim, BSIZE)) != BSIZE){ + s->eof = &s->lim[cnt]; *(s->eof)++ = '\n'; + } + s->lim += cnt; + } + return cursor; +} + +int scan(Scanner *s){ + uchar *cursor = s->cur; +std: + s->tok = cursor; +/*!re2c +any = [\000-\377]; +O = [0-7]; +D = [0-9]; +L = [a-zA-Z_]; +H = [a-fA-F0-9]; +E = [Ee] [+-]? D+; +FS = [fFlL]; +IS = [uUlL]*; +ESC = [\\] ([abfnrtv?'"\\] | "x" H+ | O+); +*/ + +/*!re2c + "/*" { goto comment; } + + "auto" { RET(AUTO); } + "break" { RET(BREAK); } + "case" { RET(CASE); } + "char" { RET(CHAR); } + "const" { RET(CONST); } + "continue" { RET(CONTINUE); } + "default" { RET(DEFAULT); } + "do" { RET(DO); } + "double" { RET(DOUBLE); } + "else" { RET(ELSE); } + "enum" { RET(ENUM); } + "extern" { RET(EXTERN); } + "float" { RET(FLOAT); } + "for" { RET(FOR); } + "goto" { RET(GOTO); } + "if" { RET(IF); } + "int" { RET(INT); } + "long" { RET(LONG); } + "register" { RET(REGISTER); } + "return" { RET(RETURN); } + "short" { RET(SHORT); } + "signed" { RET(SIGNED); } + "sizeof" { RET(SIZEOF); } + "static" { RET(STATIC); } + "struct" { RET(STRUCT); } + "switch" { RET(SWITCH); } + "typedef" { RET(TYPEDEF); } + "union" { RET(UNION); } + "unsigned" { RET(UNSIGNED); } + "void" { RET(VOID); } + "volatile" { RET(VOLATILE); } + "while" { RET(WHILE); } + + L (L|D)* { RET(ID); } + + ("0" [xX] H+ IS?) | ("0" D+ IS?) | (D+ IS?) | + (['] (ESC|any\[\n\\'])* [']) + { RET(ICON); } + + (D+ E FS?) | (D* "." D+ E? FS?) | (D+ "." D* E? FS?) + { RET(FCON); } + + (["] (ESC|any\[\n\\"])* ["]) + { RET(SCON); } + + "..." { RET(ELLIPSIS); } + ">>=" { RET(RSHIFTEQ); } + "<<=" { RET(LSHIFTEQ); } + "+=" { RET(ADDEQ); } + "-=" { RET(SUBEQ); } + "*=" { RET(MULEQ); } + "/=" { RET(DIVEQ); } + "%=" { RET(MODEQ); } + "&=" { RET(ANDEQ); } + "^=" { RET(XOREQ); } + "|=" { RET(OREQ); } + ">>" { RET(RSHIFT); } + "<<" { RET(LSHIFT); } + "++" { RET(INCR); } + "--" { RET(DECR); } + "->" { RET(DEREF); } + "&&" { RET(ANDAND); } + "||" { RET(OROR); } + "<=" { RET(LEQ); } + ">=" { RET(GEQ); } + "==" { RET(EQL); } + "!=" { RET(NEQ); } + ";" { RET(';'); } + "{" { RET('{'); } + "}" { RET('}'); } + "," { RET(','); } + ":" { RET(':'); } + "=" { RET('='); } + "(" { RET('('); } + ")" { RET(')'); } + "[" { RET('['); } + "]" { RET(']'); } + "." { RET('.'); } + "&" { RET('&'); } + "!" { RET('!'); } + "~" { RET('~'); } + "-" { RET('-'); } + "+" { RET('+'); } + "*" { RET('*'); } + "/" { RET('/'); } + "%" { RET('%'); } + "<" { RET('<'); } + ">" { RET('>'); } + "^" { RET('^'); } + "|" { RET('|'); } + "?" { RET('?'); } + + + [ \t\v\f]+ { goto std; } + + "\n" + { + if(cursor == s->eof) RET(EOI); + s->pos = cursor; s->line++; + goto std; + } + + any + { + printf("unexpected character: %c\n", *s->tok); + goto std; + } +*/ + +comment: +/*!re2c + "*/" { goto std; } + "\n" + { + if(cursor == s->eof) RET(EOI); + s->tok = s->pos = cursor; s->line++; + goto comment; + } + any { goto comment; } +*/ +} + +main(){ + Scanner in; + int t; + memset((char*) &in, 0, sizeof(in)); + in.fd = 0; + while((t = scan(&in)) != EOI){ +/* + printf("%d\t%.*s\n", t, in.cur - in.tok, in.tok); + printf("%d\n", t); +*/ + } + close(in.fd); +} diff --git a/test/cmmap.c b/test/cmmap.c new file mode 100644 index 00000000..00c9d764 --- /dev/null +++ b/test/cmmap.c @@ -0,0 +1,4083 @@ + +#line 1 "cmmap.re" +#include +#include +#include +#include +#include + +#define ADDEQ 257 +#define ANDAND 258 +#define ANDEQ 259 +#define ARRAY 260 +#define ASM 261 +#define AUTO 262 +#define BREAK 263 +#define CASE 264 +#define CHAR 265 +#define CONST 266 +#define CONTINUE 267 +#define DECR 268 +#define DEFAULT 269 +#define DEREF 270 +#define DIVEQ 271 +#define DO 272 +#define DOUBLE 273 +#define ELLIPSIS 274 +#define ELSE 275 +#define ENUM 276 +#define EQL 277 +#define EXTERN 278 +#define FCON 279 +#define FLOAT 280 +#define FOR 281 +#define FUNCTION 282 +#define GEQ 283 +#define GOTO 284 +#define ICON 285 +#define ID 286 +#define IF 287 +#define INCR 288 +#define INT 289 +#define LEQ 290 +#define LONG 291 +#define LSHIFT 292 +#define LSHIFTEQ 293 +#define MODEQ 294 +#define MULEQ 295 +#define NEQ 296 +#define OREQ 297 +#define OROR 298 +#define POINTER 299 +#define REGISTER 300 +#define RETURN 301 +#define RSHIFT 302 +#define RSHIFTEQ 303 +#define SCON 304 +#define SHORT 305 +#define SIGNED 306 +#define SIZEOF 307 +#define STATIC 308 +#define STRUCT 309 +#define SUBEQ 310 +#define SWITCH 311 +#define TYPEDEF 312 +#define UNION 313 +#define UNSIGNED 314 +#define VOID 315 +#define VOLATILE 316 +#define WHILE 317 +#define XOREQ 318 +#define EOI 319 + +typedef unsigned int unint; +typedef unsigned char uchar; + +#define YYCTYPE uchar +#define YYCURSOR cursor +#define YYLIMIT s->lim +#define YYMARKER s->ptr +#define YYFILL(n) {cursor = fill(s, cursor);} + +#define RET(i) {s->cur = cursor; return i;} + +typedef struct Scanner { + uchar *tok, *ptr, *cur, *pos, *lim, *eof; + unint line; +} Scanner; + +uchar *fill(Scanner *s, uchar *cursor){ + if(!s->eof){ + unint cnt = s->lim - s->tok; + uchar *buf = malloc((cnt + 1)*sizeof(uchar)); + memcpy(buf, s->tok, cnt); + cursor = &buf[cursor - s->tok]; + s->pos = &buf[s->pos - s->tok]; + s->ptr = &buf[s->ptr - s->tok]; + s->lim = &buf[cnt]; + s->eof = s->lim; *(s->eof)++ = '\n'; + s->tok = buf; + } + return cursor; +} + +int scan(Scanner *s){ + uchar *cursor = s->cur; +std: + s->tok = cursor; +#line 116 "cmmap.re" + + + +#line 7 "" +{ + YYCTYPE yych; + unsigned int yyaccept; + goto yy0; +yy1: ++YYCURSOR; +yy0: + if((YYLIMIT - YYCURSOR) < 9) YYFILL(9); + yych = *YYCURSOR; + switch(yych){ + case 0x09: case 0x0B: + case 0x0C: case ' ': goto yy73; + case 0x0A: goto yy75; + case '!': goto yy49; + case '"': goto yy28; + case '%': goto yy39; + case '&': goto yy41; + case '\'': goto yy24; + case '(': goto yy61; + case ')': goto yy63; + case '*': goto yy37; + case '+': goto yy33; + case ',': goto yy57; + case '-': goto yy35; + case '.': goto yy26; + case '/': goto yy2; + case '0': goto yy21; + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy23; + case ':': goto yy59; + case ';': goto yy51; + case '<': goto yy31; + case '=': goto yy47; + case '>': goto yy29; + case '?': goto yy71; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'h': case 'j': + case 'k': case 'm': + case 'n': + case 'o': + case 'p': + case 'q': case 'x': + case 'y': + case 'z': goto yy20; + case '[': goto yy65; + case ']': goto yy67; + case '^': goto yy43; + case 'a': goto yy4; + case 'b': goto yy6; + case 'c': goto yy7; + case 'd': goto yy8; + case 'e': goto yy9; + case 'f': goto yy10; + case 'g': goto yy11; + case 'i': goto yy12; + case 'l': goto yy13; + case 'r': goto yy14; + case 's': goto yy15; + case 't': goto yy16; + case 'u': goto yy17; + case 'v': goto yy18; + case 'w': goto yy19; + case '{': goto yy53; + case '|': goto yy45; + case '}': goto yy55; + case '~': goto yy69; + default: goto yy77; + } +yy2: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '*': goto yy341; + case '=': goto yy339; + default: goto yy3; + } +yy3: +#line 205 "cmmap.re" +{ RET('/'); } +#line 115 "" +yy4: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case 'u': goto yy335; + default: goto yy180; + } +yy5: +#line 154 "cmmap.re" +{ RET(ID); } +#line 124 "" +yy6: yych = *++YYCURSOR; + switch(yych){ + case 'r': goto yy330; + default: goto yy180; + } +yy7: yych = *++YYCURSOR; + switch(yych){ + case 'a': goto yy311; + case 'h': goto yy312; + case 'o': goto yy313; + default: goto yy180; + } +yy8: yych = *++YYCURSOR; + switch(yych){ + case 'e': goto yy297; + case 'o': goto yy298; + default: goto yy180; + } +yy9: yych = *++YYCURSOR; + switch(yych){ + case 'l': goto yy283; + case 'n': goto yy284; + case 'x': goto yy285; + default: goto yy180; + } +yy10: yych = *++YYCURSOR; + switch(yych){ + case 'l': goto yy275; + case 'o': goto yy276; + default: goto yy180; + } +yy11: yych = *++YYCURSOR; + switch(yych){ + case 'o': goto yy271; + default: goto yy180; + } +yy12: yych = *++YYCURSOR; + switch(yych){ + case 'f': goto yy266; + case 'n': goto yy268; + default: goto yy180; + } +yy13: yych = *++YYCURSOR; + switch(yych){ + case 'o': goto yy262; + default: goto yy180; + } +yy14: yych = *++YYCURSOR; + switch(yych){ + case 'e': goto yy249; + default: goto yy180; + } +yy15: yych = *++YYCURSOR; + switch(yych){ + case 'h': goto yy216; + case 'i': goto yy217; + case 't': goto yy218; + case 'w': goto yy219; + default: goto yy180; + } +yy16: yych = *++YYCURSOR; + switch(yych){ + case 'y': goto yy209; + default: goto yy180; + } +yy17: yych = *++YYCURSOR; + switch(yych){ + case 'n': goto yy197; + default: goto yy180; + } +yy18: yych = *++YYCURSOR; + switch(yych){ + case 'o': goto yy186; + default: goto yy180; + } +yy19: yych = *++YYCURSOR; + switch(yych){ + case 'h': goto yy181; + default: goto yy180; + } +yy20: yych = *++YYCURSOR; + goto yy180; +yy21: yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + switch(yych){ + case 'L': case 'U': case 'l': case 'u': goto yy155; + case 'X': case 'x': goto yy172; + default: goto yy171; + } +yy22: +#line 158 "cmmap.re" +{ RET(ICON); } +#line 217 "" +yy23: yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + goto yy153; +yy24: yyaccept = 1; + yych = *(YYMARKER = ++YYCURSOR); + switch(yych){ + case 0x0A: goto yy25; + default: goto yy143; + } +yy25: +#line 224 "cmmap.re" +{ + printf("unexpected character: %c\n", *s->tok); + goto std; + } +#line 233 "" +yy26: yyaccept = 2; + yych = *(YYMARKER = ++YYCURSOR); + switch(yych){ + case '.': goto yy131; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy132; + default: goto yy27; + } +yy27: +#line 198 "cmmap.re" +{ RET('.'); } +#line 253 "" +yy28: yyaccept = 1; + yych = *(YYMARKER = ++YYCURSOR); + switch(yych){ + case 0x0A: goto yy25; + default: goto yy121; + } +yy29: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '=': goto yy114; + case '>': goto yy116; + default: goto yy30; + } +yy30: +#line 208 "cmmap.re" +{ RET('>'); } +#line 269 "" +yy31: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '<': goto yy110; + case '=': goto yy108; + default: goto yy32; + } +yy32: +#line 207 "cmmap.re" +{ RET('<'); } +#line 279 "" +yy33: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '+': goto yy104; + case '=': goto yy106; + default: goto yy34; + } +yy34: +#line 203 "cmmap.re" +{ RET('+'); } +#line 289 "" +yy35: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '-': goto yy100; + case '=': goto yy102; + case '>': goto yy98; + default: goto yy36; + } +yy36: +#line 202 "cmmap.re" +{ RET('-'); } +#line 300 "" +yy37: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '=': goto yy96; + default: goto yy38; + } +yy38: +#line 204 "cmmap.re" +{ RET('*'); } +#line 309 "" +yy39: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '=': goto yy94; + default: goto yy40; + } +yy40: +#line 206 "cmmap.re" +{ RET('%'); } +#line 318 "" +yy41: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '&': goto yy90; + case '=': goto yy92; + default: goto yy42; + } +yy42: +#line 199 "cmmap.re" +{ RET('&'); } +#line 328 "" +yy43: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '=': goto yy88; + default: goto yy44; + } +yy44: +#line 209 "cmmap.re" +{ RET('^'); } +#line 337 "" +yy45: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '=': goto yy86; + case '|': goto yy84; + default: goto yy46; + } +yy46: +#line 210 "cmmap.re" +{ RET('|'); } +#line 347 "" +yy47: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '=': goto yy82; + default: goto yy48; + } +yy48: +#line 193 "cmmap.re" +{ RET('='); } +#line 356 "" +yy49: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '=': goto yy80; + default: goto yy50; + } +yy50: +#line 200 "cmmap.re" +{ RET('!'); } +#line 365 "" +yy51: ++YYCURSOR; + goto yy52; +yy52: +#line 188 "cmmap.re" +{ RET(';'); } +#line 371 "" +yy53: ++YYCURSOR; + goto yy54; +yy54: +#line 189 "cmmap.re" +{ RET('{'); } +#line 377 "" +yy55: ++YYCURSOR; + goto yy56; +yy56: +#line 190 "cmmap.re" +{ RET('}'); } +#line 383 "" +yy57: ++YYCURSOR; + goto yy58; +yy58: +#line 191 "cmmap.re" +{ RET(','); } +#line 389 "" +yy59: ++YYCURSOR; + goto yy60; +yy60: +#line 192 "cmmap.re" +{ RET(':'); } +#line 395 "" +yy61: ++YYCURSOR; + goto yy62; +yy62: +#line 194 "cmmap.re" +{ RET('('); } +#line 401 "" +yy63: ++YYCURSOR; + goto yy64; +yy64: +#line 195 "cmmap.re" +{ RET(')'); } +#line 407 "" +yy65: ++YYCURSOR; + goto yy66; +yy66: +#line 196 "cmmap.re" +{ RET('['); } +#line 413 "" +yy67: ++YYCURSOR; + goto yy68; +yy68: +#line 197 "cmmap.re" +{ RET(']'); } +#line 419 "" +yy69: ++YYCURSOR; + goto yy70; +yy70: +#line 201 "cmmap.re" +{ RET('~'); } +#line 425 "" +yy71: ++YYCURSOR; + goto yy72; +yy72: +#line 211 "cmmap.re" +{ RET('?'); } +#line 431 "" +yy73: ++YYCURSOR; + yych = *YYCURSOR; + goto yy79; +yy74: +#line 214 "cmmap.re" +{ goto std; } +#line 437 "" +yy75: ++YYCURSOR; + goto yy76; +yy76: +#line 217 "cmmap.re" +{ + if(cursor == s->eof) RET(EOI); + s->pos = cursor; s->line++; + goto std; + } +#line 447 "" +yy77: yych = *++YYCURSOR; + goto yy25; +yy78: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy79; +yy79: switch(yych){ + case 0x09: case 0x0B: + case 0x0C: case ' ': goto yy78; + default: goto yy74; + } +yy80: ++YYCURSOR; + goto yy81; +yy81: +#line 187 "cmmap.re" +{ RET(NEQ); } +#line 465 "" +yy82: ++YYCURSOR; + goto yy83; +yy83: +#line 186 "cmmap.re" +{ RET(EQL); } +#line 471 "" +yy84: ++YYCURSOR; + goto yy85; +yy85: +#line 183 "cmmap.re" +{ RET(OROR); } +#line 477 "" +yy86: ++YYCURSOR; + goto yy87; +yy87: +#line 176 "cmmap.re" +{ RET(OREQ); } +#line 483 "" +yy88: ++YYCURSOR; + goto yy89; +yy89: +#line 175 "cmmap.re" +{ RET(XOREQ); } +#line 489 "" +yy90: ++YYCURSOR; + goto yy91; +yy91: +#line 182 "cmmap.re" +{ RET(ANDAND); } +#line 495 "" +yy92: ++YYCURSOR; + goto yy93; +yy93: +#line 174 "cmmap.re" +{ RET(ANDEQ); } +#line 501 "" +yy94: ++YYCURSOR; + goto yy95; +yy95: +#line 173 "cmmap.re" +{ RET(MODEQ); } +#line 507 "" +yy96: ++YYCURSOR; + goto yy97; +yy97: +#line 171 "cmmap.re" +{ RET(MULEQ); } +#line 513 "" +yy98: ++YYCURSOR; + goto yy99; +yy99: +#line 181 "cmmap.re" +{ RET(DEREF); } +#line 519 "" +yy100: ++YYCURSOR; + goto yy101; +yy101: +#line 180 "cmmap.re" +{ RET(DECR); } +#line 525 "" +yy102: ++YYCURSOR; + goto yy103; +yy103: +#line 170 "cmmap.re" +{ RET(SUBEQ); } +#line 531 "" +yy104: ++YYCURSOR; + goto yy105; +yy105: +#line 179 "cmmap.re" +{ RET(INCR); } +#line 537 "" +yy106: ++YYCURSOR; + goto yy107; +yy107: +#line 169 "cmmap.re" +{ RET(ADDEQ); } +#line 543 "" +yy108: ++YYCURSOR; + goto yy109; +yy109: +#line 184 "cmmap.re" +{ RET(LEQ); } +#line 549 "" +yy110: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '=': goto yy112; + default: goto yy111; + } +yy111: +#line 178 "cmmap.re" +{ RET(LSHIFT); } +#line 558 "" +yy112: ++YYCURSOR; + goto yy113; +yy113: +#line 168 "cmmap.re" +{ RET(LSHIFTEQ); } +#line 564 "" +yy114: ++YYCURSOR; + goto yy115; +yy115: +#line 185 "cmmap.re" +{ RET(GEQ); } +#line 570 "" +yy116: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '=': goto yy118; + default: goto yy117; + } +yy117: +#line 177 "cmmap.re" +{ RET(RSHIFT); } +#line 579 "" +yy118: ++YYCURSOR; + goto yy119; +yy119: +#line 167 "cmmap.re" +{ RET(RSHIFTEQ); } +#line 585 "" +yy120: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy121; +yy121: switch(yych){ + case 0x0A: goto yy122; + case '"': goto yy124; + case '\\': goto yy123; + default: goto yy120; + } +yy122: YYCURSOR = YYMARKER; + switch(yyaccept){ + case 0: goto yy22; + case 3: goto yy134; + case 2: goto yy27; + case 1: goto yy25; + } +yy123: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + switch(yych){ + case '"': case '\'': case '?': case '\\': case 'a': + case 'b': case 'f': case 'n': case 'r': case 't': case 'v': goto yy120; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': goto yy127; + case 'x': goto yy126; + default: goto yy122; + } +yy124: ++YYCURSOR; + goto yy125; +yy125: +#line 164 "cmmap.re" +{ RET(SCON); } +#line 627 "" +yy126: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': goto yy129; + default: goto yy122; + } +yy127: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy128; +yy128: switch(yych){ + case 0x0A: goto yy122; + case '"': goto yy124; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': goto yy127; + case '\\': goto yy123; + default: goto yy120; + } +yy129: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy130; +yy130: switch(yych){ + case 0x0A: goto yy122; + case '"': goto yy124; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': goto yy129; + case '\\': goto yy123; + default: goto yy120; + } +yy131: yych = *++YYCURSOR; + switch(yych){ + case '.': goto yy140; + default: goto yy122; + } +yy132: yyaccept = 3; + YYMARKER = ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy133; +yy133: switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy132; + case 'E': case 'e': goto yy135; + case 'F': case 'L': case 'f': case 'l': goto yy136; + default: goto yy134; + } +yy134: +#line 161 "cmmap.re" +{ RET(FCON); } +#line 733 "" +yy135: yych = *++YYCURSOR; + switch(yych){ + case '+': case '-': goto yy137; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy138; + default: goto yy122; + } +yy136: yych = *++YYCURSOR; + goto yy134; +yy137: yych = *++YYCURSOR; + switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy138; + default: goto yy122; + } +yy138: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy139; +yy139: switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy138; + case 'F': case 'L': case 'f': case 'l': goto yy136; + default: goto yy134; + } +yy140: ++YYCURSOR; + goto yy141; +yy141: +#line 166 "cmmap.re" +{ RET(ELLIPSIS); } +#line 789 "" +yy142: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy143; +yy143: switch(yych){ + case 0x0A: goto yy122; + case '\'': goto yy145; + case '\\': goto yy144; + default: goto yy142; + } +yy144: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + switch(yych){ + case '"': case '\'': case '?': case '\\': case 'a': + case 'b': case 'f': case 'n': case 'r': case 't': case 'v': goto yy142; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': goto yy147; + case 'x': goto yy146; + default: goto yy122; + } +yy145: yych = *++YYCURSOR; + goto yy22; +yy146: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': goto yy149; + default: goto yy122; + } +yy147: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy148; +yy148: switch(yych){ + case 0x0A: goto yy122; + case '\'': goto yy145; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': goto yy147; + case '\\': goto yy144; + default: goto yy142; + } +yy149: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy150; +yy150: switch(yych){ + case 0x0A: goto yy122; + case '\'': goto yy145; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': goto yy149; + case '\\': goto yy144; + default: goto yy142; + } +yy151: yyaccept = 3; + yych = *(YYMARKER = ++YYCURSOR); + switch(yych){ + case 'E': case 'e': goto yy162; + default: goto yy161; + } +yy152: yyaccept = 0; + YYMARKER = ++YYCURSOR; + if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); + yych = *YYCURSOR; + goto yy153; +yy153: switch(yych){ + case '.': goto yy151; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy152; + case 'E': case 'e': goto yy154; + case 'L': case 'U': case 'l': case 'u': goto yy155; + default: goto yy22; + } +yy154: yych = *++YYCURSOR; + switch(yych){ + case '+': case '-': goto yy157; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy158; + default: goto yy122; + } +yy155: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy156; +yy156: switch(yych){ + case 'L': case 'U': case 'l': case 'u': goto yy155; + default: goto yy22; + } +yy157: yych = *++YYCURSOR; + switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy158; + default: goto yy122; + } +yy158: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy159; +yy159: switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy158; + case 'F': case 'L': case 'f': case 'l': goto yy136; + default: goto yy134; + } +yy160: yyaccept = 3; + YYMARKER = ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy161; +yy161: switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy160; + case 'E': case 'e': goto yy166; + case 'F': case 'L': case 'f': case 'l': goto yy136; + default: goto yy134; + } +yy162: yych = *++YYCURSOR; + switch(yych){ + case '+': case '-': goto yy163; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy164; + default: goto yy122; + } +yy163: yych = *++YYCURSOR; + switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy164; + default: goto yy122; + } +yy164: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy165; +yy165: switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy164; + case 'F': case 'L': case 'f': case 'l': goto yy136; + default: goto yy134; + } +yy166: yych = *++YYCURSOR; + switch(yych){ + case '+': case '-': goto yy167; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy168; + default: goto yy122; + } +yy167: yych = *++YYCURSOR; + switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy168; + default: goto yy122; + } +yy168: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy169; +yy169: switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy168; + case 'F': case 'L': case 'f': case 'l': goto yy136; + default: goto yy134; + } +yy170: yyaccept = 0; + YYMARKER = ++YYCURSOR; + if((YYLIMIT - YYCURSOR) < 4) YYFILL(4); + yych = *YYCURSOR; + goto yy171; +yy171: switch(yych){ + case '.': goto yy151; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy170; + case 'E': case 'e': goto yy154; + case 'L': case 'U': case 'l': case 'u': goto yy177; + default: goto yy22; + } +yy172: yych = *++YYCURSOR; + switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': goto yy173; + default: goto yy122; + } +yy173: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy174; +yy174: switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': goto yy173; + case 'L': case 'U': case 'l': case 'u': goto yy175; + default: goto yy22; + } +yy175: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy176; +yy176: switch(yych){ + case 'L': case 'U': case 'l': case 'u': goto yy175; + default: goto yy22; + } +yy177: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy178; +yy178: switch(yych){ + case 'L': case 'U': case 'l': case 'u': goto yy177; + default: goto yy22; + } +yy179: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy180; +yy180: switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy5; + } +yy181: yych = *++YYCURSOR; + switch(yych){ + case 'i': goto yy182; + default: goto yy180; + } +yy182: yych = *++YYCURSOR; + switch(yych){ + case 'l': goto yy183; + default: goto yy180; + } +yy183: yych = *++YYCURSOR; + switch(yych){ + case 'e': goto yy184; + default: goto yy180; + } +yy184: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy185; + } +yy185: +#line 152 "cmmap.re" +{ RET(WHILE); } +#line 1340 "" +yy186: yych = *++YYCURSOR; + switch(yych){ + case 'i': goto yy187; + case 'l': goto yy188; + default: goto yy180; + } +yy187: yych = *++YYCURSOR; + switch(yych){ + case 'd': goto yy195; + default: goto yy180; + } +yy188: yych = *++YYCURSOR; + switch(yych){ + case 'a': goto yy189; + default: goto yy180; + } +yy189: yych = *++YYCURSOR; + switch(yych){ + case 't': goto yy190; + default: goto yy180; + } +yy190: yych = *++YYCURSOR; + switch(yych){ + case 'i': goto yy191; + default: goto yy180; + } +yy191: yych = *++YYCURSOR; + switch(yych){ + case 'l': goto yy192; + default: goto yy180; + } +yy192: yych = *++YYCURSOR; + switch(yych){ + case 'e': goto yy193; + default: goto yy180; + } +yy193: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy194; + } +yy194: +#line 151 "cmmap.re" +{ RET(VOLATILE); } +#line 1444 "" +yy195: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy196; + } +yy196: +#line 150 "cmmap.re" +{ RET(VOID); } +#line 1512 "" +yy197: yych = *++YYCURSOR; + switch(yych){ + case 'i': goto yy198; + case 's': goto yy199; + default: goto yy180; + } +yy198: yych = *++YYCURSOR; + switch(yych){ + case 'o': goto yy206; + default: goto yy180; + } +yy199: yych = *++YYCURSOR; + switch(yych){ + case 'i': goto yy200; + default: goto yy180; + } +yy200: yych = *++YYCURSOR; + switch(yych){ + case 'g': goto yy201; + default: goto yy180; + } +yy201: yych = *++YYCURSOR; + switch(yych){ + case 'n': goto yy202; + default: goto yy180; + } +yy202: yych = *++YYCURSOR; + switch(yych){ + case 'e': goto yy203; + default: goto yy180; + } +yy203: yych = *++YYCURSOR; + switch(yych){ + case 'd': goto yy204; + default: goto yy180; + } +yy204: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy205; + } +yy205: +#line 149 "cmmap.re" +{ RET(UNSIGNED); } +#line 1616 "" +yy206: yych = *++YYCURSOR; + switch(yych){ + case 'n': goto yy207; + default: goto yy180; + } +yy207: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy208; + } +yy208: +#line 148 "cmmap.re" +{ RET(UNION); } +#line 1689 "" +yy209: yych = *++YYCURSOR; + switch(yych){ + case 'p': goto yy210; + default: goto yy180; + } +yy210: yych = *++YYCURSOR; + switch(yych){ + case 'e': goto yy211; + default: goto yy180; + } +yy211: yych = *++YYCURSOR; + switch(yych){ + case 'd': goto yy212; + default: goto yy180; + } +yy212: yych = *++YYCURSOR; + switch(yych){ + case 'e': goto yy213; + default: goto yy180; + } +yy213: yych = *++YYCURSOR; + switch(yych){ + case 'f': goto yy214; + default: goto yy180; + } +yy214: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy215; + } +yy215: +#line 147 "cmmap.re" +{ RET(TYPEDEF); } +#line 1782 "" +yy216: yych = *++YYCURSOR; + switch(yych){ + case 'o': goto yy245; + default: goto yy180; + } +yy217: yych = *++YYCURSOR; + switch(yych){ + case 'g': goto yy235; + case 'z': goto yy236; + default: goto yy180; + } +yy218: yych = *++YYCURSOR; + switch(yych){ + case 'a': goto yy225; + case 'r': goto yy226; + default: goto yy180; + } +yy219: yych = *++YYCURSOR; + switch(yych){ + case 'i': goto yy220; + default: goto yy180; + } +yy220: yych = *++YYCURSOR; + switch(yych){ + case 't': goto yy221; + default: goto yy180; + } +yy221: yych = *++YYCURSOR; + switch(yych){ + case 'c': goto yy222; + default: goto yy180; + } +yy222: yych = *++YYCURSOR; + switch(yych){ + case 'h': goto yy223; + default: goto yy180; + } +yy223: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy224; + } +yy224: +#line 146 "cmmap.re" +{ RET(SWITCH); } +#line 1887 "" +yy225: yych = *++YYCURSOR; + switch(yych){ + case 't': goto yy231; + default: goto yy180; + } +yy226: yych = *++YYCURSOR; + switch(yych){ + case 'u': goto yy227; + default: goto yy180; + } +yy227: yych = *++YYCURSOR; + switch(yych){ + case 'c': goto yy228; + default: goto yy180; + } +yy228: yych = *++YYCURSOR; + switch(yych){ + case 't': goto yy229; + default: goto yy180; + } +yy229: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy230; + } +yy230: +#line 145 "cmmap.re" +{ RET(STRUCT); } +#line 1975 "" +yy231: yych = *++YYCURSOR; + switch(yych){ + case 'i': goto yy232; + default: goto yy180; + } +yy232: yych = *++YYCURSOR; + switch(yych){ + case 'c': goto yy233; + default: goto yy180; + } +yy233: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy234; + } +yy234: +#line 144 "cmmap.re" +{ RET(STATIC); } +#line 2053 "" +yy235: yych = *++YYCURSOR; + switch(yych){ + case 'n': goto yy241; + default: goto yy180; + } +yy236: yych = *++YYCURSOR; + switch(yych){ + case 'e': goto yy237; + default: goto yy180; + } +yy237: yych = *++YYCURSOR; + switch(yych){ + case 'o': goto yy238; + default: goto yy180; + } +yy238: yych = *++YYCURSOR; + switch(yych){ + case 'f': goto yy239; + default: goto yy180; + } +yy239: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy240; + } +yy240: +#line 143 "cmmap.re" +{ RET(SIZEOF); } +#line 2141 "" +yy241: yych = *++YYCURSOR; + switch(yych){ + case 'e': goto yy242; + default: goto yy180; + } +yy242: yych = *++YYCURSOR; + switch(yych){ + case 'd': goto yy243; + default: goto yy180; + } +yy243: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy244; + } +yy244: +#line 142 "cmmap.re" +{ RET(SIGNED); } +#line 2219 "" +yy245: yych = *++YYCURSOR; + switch(yych){ + case 'r': goto yy246; + default: goto yy180; + } +yy246: yych = *++YYCURSOR; + switch(yych){ + case 't': goto yy247; + default: goto yy180; + } +yy247: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy248; + } +yy248: +#line 141 "cmmap.re" +{ RET(SHORT); } +#line 2297 "" +yy249: yych = *++YYCURSOR; + switch(yych){ + case 'g': goto yy250; + case 't': goto yy251; + default: goto yy180; + } +yy250: yych = *++YYCURSOR; + switch(yych){ + case 'i': goto yy256; + default: goto yy180; + } +yy251: yych = *++YYCURSOR; + switch(yych){ + case 'u': goto yy252; + default: goto yy180; + } +yy252: yych = *++YYCURSOR; + switch(yych){ + case 'r': goto yy253; + default: goto yy180; + } +yy253: yych = *++YYCURSOR; + switch(yych){ + case 'n': goto yy254; + default: goto yy180; + } +yy254: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy255; + } +yy255: +#line 140 "cmmap.re" +{ RET(RETURN); } +#line 2391 "" +yy256: yych = *++YYCURSOR; + switch(yych){ + case 's': goto yy257; + default: goto yy180; + } +yy257: yych = *++YYCURSOR; + switch(yych){ + case 't': goto yy258; + default: goto yy180; + } +yy258: yych = *++YYCURSOR; + switch(yych){ + case 'e': goto yy259; + default: goto yy180; + } +yy259: yych = *++YYCURSOR; + switch(yych){ + case 'r': goto yy260; + default: goto yy180; + } +yy260: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy261; + } +yy261: +#line 139 "cmmap.re" +{ RET(REGISTER); } +#line 2479 "" +yy262: yych = *++YYCURSOR; + switch(yych){ + case 'n': goto yy263; + default: goto yy180; + } +yy263: yych = *++YYCURSOR; + switch(yych){ + case 'g': goto yy264; + default: goto yy180; + } +yy264: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy265; + } +yy265: +#line 138 "cmmap.re" +{ RET(LONG); } +#line 2557 "" +yy266: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy267; + } +yy267: +#line 136 "cmmap.re" +{ RET(IF); } +#line 2625 "" +yy268: yych = *++YYCURSOR; + switch(yych){ + case 't': goto yy269; + default: goto yy180; + } +yy269: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy270; + } +yy270: +#line 137 "cmmap.re" +{ RET(INT); } +#line 2698 "" +yy271: yych = *++YYCURSOR; + switch(yych){ + case 't': goto yy272; + default: goto yy180; + } +yy272: yych = *++YYCURSOR; + switch(yych){ + case 'o': goto yy273; + default: goto yy180; + } +yy273: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy274; + } +yy274: +#line 135 "cmmap.re" +{ RET(GOTO); } +#line 2776 "" +yy275: yych = *++YYCURSOR; + switch(yych){ + case 'o': goto yy279; + default: goto yy180; + } +yy276: yych = *++YYCURSOR; + switch(yych){ + case 'r': goto yy277; + default: goto yy180; + } +yy277: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy278; + } +yy278: +#line 134 "cmmap.re" +{ RET(FOR); } +#line 2854 "" +yy279: yych = *++YYCURSOR; + switch(yych){ + case 'a': goto yy280; + default: goto yy180; + } +yy280: yych = *++YYCURSOR; + switch(yych){ + case 't': goto yy281; + default: goto yy180; + } +yy281: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy282; + } +yy282: +#line 133 "cmmap.re" +{ RET(FLOAT); } +#line 2932 "" +yy283: yych = *++YYCURSOR; + switch(yych){ + case 's': goto yy294; + default: goto yy180; + } +yy284: yych = *++YYCURSOR; + switch(yych){ + case 'u': goto yy291; + default: goto yy180; + } +yy285: yych = *++YYCURSOR; + switch(yych){ + case 't': goto yy286; + default: goto yy180; + } +yy286: yych = *++YYCURSOR; + switch(yych){ + case 'e': goto yy287; + default: goto yy180; + } +yy287: yych = *++YYCURSOR; + switch(yych){ + case 'r': goto yy288; + default: goto yy180; + } +yy288: yych = *++YYCURSOR; + switch(yych){ + case 'n': goto yy289; + default: goto yy180; + } +yy289: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy290; + } +yy290: +#line 132 "cmmap.re" +{ RET(EXTERN); } +#line 3030 "" +yy291: yych = *++YYCURSOR; + switch(yych){ + case 'm': goto yy292; + default: goto yy180; + } +yy292: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy293; + } +yy293: +#line 131 "cmmap.re" +{ RET(ENUM); } +#line 3103 "" +yy294: yych = *++YYCURSOR; + switch(yych){ + case 'e': goto yy295; + default: goto yy180; + } +yy295: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy296; + } +yy296: +#line 130 "cmmap.re" +{ RET(ELSE); } +#line 3176 "" +yy297: yych = *++YYCURSOR; + switch(yych){ + case 'f': goto yy305; + default: goto yy180; + } +yy298: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + case 'u': goto yy300; + default: goto yy299; + } +yy299: +#line 128 "cmmap.re" +{ RET(DO); } +#line 3248 "" +yy300: yych = *++YYCURSOR; + switch(yych){ + case 'b': goto yy301; + default: goto yy180; + } +yy301: yych = *++YYCURSOR; + switch(yych){ + case 'l': goto yy302; + default: goto yy180; + } +yy302: yych = *++YYCURSOR; + switch(yych){ + case 'e': goto yy303; + default: goto yy180; + } +yy303: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy304; + } +yy304: +#line 129 "cmmap.re" +{ RET(DOUBLE); } +#line 3331 "" +yy305: yych = *++YYCURSOR; + switch(yych){ + case 'a': goto yy306; + default: goto yy180; + } +yy306: yych = *++YYCURSOR; + switch(yych){ + case 'u': goto yy307; + default: goto yy180; + } +yy307: yych = *++YYCURSOR; + switch(yych){ + case 'l': goto yy308; + default: goto yy180; + } +yy308: yych = *++YYCURSOR; + switch(yych){ + case 't': goto yy309; + default: goto yy180; + } +yy309: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy310; + } +yy310: +#line 127 "cmmap.re" +{ RET(DEFAULT); } +#line 3419 "" +yy311: yych = *++YYCURSOR; + switch(yych){ + case 's': goto yy327; + default: goto yy180; + } +yy312: yych = *++YYCURSOR; + switch(yych){ + case 'a': goto yy324; + default: goto yy180; + } +yy313: yych = *++YYCURSOR; + switch(yych){ + case 'n': goto yy314; + default: goto yy180; + } +yy314: yych = *++YYCURSOR; + switch(yych){ + case 's': goto yy315; + case 't': goto yy316; + default: goto yy180; + } +yy315: yych = *++YYCURSOR; + switch(yych){ + case 't': goto yy322; + default: goto yy180; + } +yy316: yych = *++YYCURSOR; + switch(yych){ + case 'i': goto yy317; + default: goto yy180; + } +yy317: yych = *++YYCURSOR; + switch(yych){ + case 'n': goto yy318; + default: goto yy180; + } +yy318: yych = *++YYCURSOR; + switch(yych){ + case 'u': goto yy319; + default: goto yy180; + } +yy319: yych = *++YYCURSOR; + switch(yych){ + case 'e': goto yy320; + default: goto yy180; + } +yy320: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy321; + } +yy321: +#line 126 "cmmap.re" +{ RET(CONTINUE); } +#line 3533 "" +yy322: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy323; + } +yy323: +#line 125 "cmmap.re" +{ RET(CONST); } +#line 3601 "" +yy324: yych = *++YYCURSOR; + switch(yych){ + case 'r': goto yy325; + default: goto yy180; + } +yy325: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy326; + } +yy326: +#line 124 "cmmap.re" +{ RET(CHAR); } +#line 3674 "" +yy327: yych = *++YYCURSOR; + switch(yych){ + case 'e': goto yy328; + default: goto yy180; + } +yy328: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy329; + } +yy329: +#line 123 "cmmap.re" +{ RET(CASE); } +#line 3747 "" +yy330: yych = *++YYCURSOR; + switch(yych){ + case 'e': goto yy331; + default: goto yy180; + } +yy331: yych = *++YYCURSOR; + switch(yych){ + case 'a': goto yy332; + default: goto yy180; + } +yy332: yych = *++YYCURSOR; + switch(yych){ + case 'k': goto yy333; + default: goto yy180; + } +yy333: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy334; + } +yy334: +#line 122 "cmmap.re" +{ RET(BREAK); } +#line 3830 "" +yy335: yych = *++YYCURSOR; + switch(yych){ + case 't': goto yy336; + default: goto yy180; + } +yy336: yych = *++YYCURSOR; + switch(yych){ + case 'o': goto yy337; + default: goto yy180; + } +yy337: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy179; + default: goto yy338; + } +yy338: +#line 121 "cmmap.re" +{ RET(AUTO); } +#line 3908 "" +yy339: ++YYCURSOR; + goto yy340; +yy340: +#line 172 "cmmap.re" +{ RET(DIVEQ); } +#line 3914 "" +yy341: ++YYCURSOR; + goto yy342; +yy342: +#line 119 "cmmap.re" +{ goto comment; } +#line 3920 "" +} +#line 228 "cmmap.re" + + +comment: + +#line 3924 "" +{ + YYCTYPE yych; + unsigned int yyaccept; + goto yy343; +yy344: ++YYCURSOR; +yy343: + if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); + yych = *YYCURSOR; + switch(yych){ + case 0x0A: goto yy347; + case '*': goto yy345; + default: goto yy349; + } +yy345: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '/': goto yy350; + default: goto yy346; + } +yy346: +#line 239 "cmmap.re" +{ goto comment; } +#line 3946 "" +yy347: ++YYCURSOR; + goto yy348; +yy348: +#line 234 "cmmap.re" +{ + if(cursor == s->eof) RET(EOI); + s->tok = s->pos = cursor; s->line++; + goto comment; + } +#line 3956 "" +yy349: yych = *++YYCURSOR; + goto yy346; +yy350: ++YYCURSOR; + goto yy351; +yy351: +#line 232 "cmmap.re" +{ goto std; } +#line 3964 "" +} +#line 240 "cmmap.re" + +} + +#ifndef MAP_NORESERVE +#define MAP_NORESERVE 0 +#endif + +main(){ + Scanner in; + struct stat statbuf; + uchar *buf; + fstat(0, &statbuf); + buf = mmap(NULL, statbuf.st_size, PROT_READ, MAP_SHARED|MAP_NORESERVE, + 0, 0); + if(buf != (uchar*)(-1)){ + int t; + in.lim = &(in.cur = buf)[statbuf.st_size]; + in.pos = NULL; + in.eof = NULL; + while((t = scan(&in)) != EOI){ +/* + printf("%d\t%.*s\n", t, in.cur - in.tok, in.tok); + printf("%d\n", t); +*/ + } + munmap(buf, statbuf.st_size); + } +} diff --git a/test/cmmap.re b/test/cmmap.re new file mode 100644 index 00000000..bc4d498a --- /dev/null +++ b/test/cmmap.re @@ -0,0 +1,267 @@ +#include +#include +#include +#include +#include + +#define ADDEQ 257 +#define ANDAND 258 +#define ANDEQ 259 +#define ARRAY 260 +#define ASM 261 +#define AUTO 262 +#define BREAK 263 +#define CASE 264 +#define CHAR 265 +#define CONST 266 +#define CONTINUE 267 +#define DECR 268 +#define DEFAULT 269 +#define DEREF 270 +#define DIVEQ 271 +#define DO 272 +#define DOUBLE 273 +#define ELLIPSIS 274 +#define ELSE 275 +#define ENUM 276 +#define EQL 277 +#define EXTERN 278 +#define FCON 279 +#define FLOAT 280 +#define FOR 281 +#define FUNCTION 282 +#define GEQ 283 +#define GOTO 284 +#define ICON 285 +#define ID 286 +#define IF 287 +#define INCR 288 +#define INT 289 +#define LEQ 290 +#define LONG 291 +#define LSHIFT 292 +#define LSHIFTEQ 293 +#define MODEQ 294 +#define MULEQ 295 +#define NEQ 296 +#define OREQ 297 +#define OROR 298 +#define POINTER 299 +#define REGISTER 300 +#define RETURN 301 +#define RSHIFT 302 +#define RSHIFTEQ 303 +#define SCON 304 +#define SHORT 305 +#define SIGNED 306 +#define SIZEOF 307 +#define STATIC 308 +#define STRUCT 309 +#define SUBEQ 310 +#define SWITCH 311 +#define TYPEDEF 312 +#define UNION 313 +#define UNSIGNED 314 +#define VOID 315 +#define VOLATILE 316 +#define WHILE 317 +#define XOREQ 318 +#define EOI 319 + +typedef unsigned int unint; +typedef unsigned char uchar; + +#define YYCTYPE uchar +#define YYCURSOR cursor +#define YYLIMIT s->lim +#define YYMARKER s->ptr +#define YYFILL(n) {cursor = fill(s, cursor);} + +#define RET(i) {s->cur = cursor; return i;} + +typedef struct Scanner { + uchar *tok, *ptr, *cur, *pos, *lim, *eof; + unint line; +} Scanner; + +uchar *fill(Scanner *s, uchar *cursor){ + if(!s->eof){ + unint cnt = s->lim - s->tok; + uchar *buf = malloc((cnt + 1)*sizeof(uchar)); + memcpy(buf, s->tok, cnt); + cursor = &buf[cursor - s->tok]; + s->pos = &buf[s->pos - s->tok]; + s->ptr = &buf[s->ptr - s->tok]; + s->lim = &buf[cnt]; + s->eof = s->lim; *(s->eof)++ = '\n'; + s->tok = buf; + } + return cursor; +} + +int scan(Scanner *s){ + uchar *cursor = s->cur; +std: + s->tok = cursor; +/*!re2c +any = [\000-\377]; +O = [0-7]; +D = [0-9]; +L = [a-zA-Z_]; +H = [a-fA-F0-9]; +E = [Ee] [+-]? D+; +FS = [fFlL]; +IS = [uUlL]*; +ESC = [\\] ([abfnrtv?'"\\] | "x" H+ | O+); +*/ + +/*!re2c + "/*" { goto comment; } + + "auto" { RET(AUTO); } + "break" { RET(BREAK); } + "case" { RET(CASE); } + "char" { RET(CHAR); } + "const" { RET(CONST); } + "continue" { RET(CONTINUE); } + "default" { RET(DEFAULT); } + "do" { RET(DO); } + "double" { RET(DOUBLE); } + "else" { RET(ELSE); } + "enum" { RET(ENUM); } + "extern" { RET(EXTERN); } + "float" { RET(FLOAT); } + "for" { RET(FOR); } + "goto" { RET(GOTO); } + "if" { RET(IF); } + "int" { RET(INT); } + "long" { RET(LONG); } + "register" { RET(REGISTER); } + "return" { RET(RETURN); } + "short" { RET(SHORT); } + "signed" { RET(SIGNED); } + "sizeof" { RET(SIZEOF); } + "static" { RET(STATIC); } + "struct" { RET(STRUCT); } + "switch" { RET(SWITCH); } + "typedef" { RET(TYPEDEF); } + "union" { RET(UNION); } + "unsigned" { RET(UNSIGNED); } + "void" { RET(VOID); } + "volatile" { RET(VOLATILE); } + "while" { RET(WHILE); } + + L (L|D)* { RET(ID); } + + ("0" [xX] H+ IS?) | ("0" D+ IS?) | (D+ IS?) | + (['] (ESC|any\[\n\\'])* [']) + { RET(ICON); } + + (D+ E FS?) | (D* "." D+ E? FS?) | (D+ "." D* E? FS?) + { RET(FCON); } + + (["] (ESC|any\[\n\\"])* ["]) + { RET(SCON); } + + "..." { RET(ELLIPSIS); } + ">>=" { RET(RSHIFTEQ); } + "<<=" { RET(LSHIFTEQ); } + "+=" { RET(ADDEQ); } + "-=" { RET(SUBEQ); } + "*=" { RET(MULEQ); } + "/=" { RET(DIVEQ); } + "%=" { RET(MODEQ); } + "&=" { RET(ANDEQ); } + "^=" { RET(XOREQ); } + "|=" { RET(OREQ); } + ">>" { RET(RSHIFT); } + "<<" { RET(LSHIFT); } + "++" { RET(INCR); } + "--" { RET(DECR); } + "->" { RET(DEREF); } + "&&" { RET(ANDAND); } + "||" { RET(OROR); } + "<=" { RET(LEQ); } + ">=" { RET(GEQ); } + "==" { RET(EQL); } + "!=" { RET(NEQ); } + ";" { RET(';'); } + "{" { RET('{'); } + "}" { RET('}'); } + "," { RET(','); } + ":" { RET(':'); } + "=" { RET('='); } + "(" { RET('('); } + ")" { RET(')'); } + "[" { RET('['); } + "]" { RET(']'); } + "." { RET('.'); } + "&" { RET('&'); } + "!" { RET('!'); } + "~" { RET('~'); } + "-" { RET('-'); } + "+" { RET('+'); } + "*" { RET('*'); } + "/" { RET('/'); } + "%" { RET('%'); } + "<" { RET('<'); } + ">" { RET('>'); } + "^" { RET('^'); } + "|" { RET('|'); } + "?" { RET('?'); } + + + [ \t\v\f]+ { goto std; } + + "\n" + { + if(cursor == s->eof) RET(EOI); + s->pos = cursor; s->line++; + goto std; + } + + any + { + printf("unexpected character: %c\n", *s->tok); + goto std; + } +*/ + +comment: +/*!re2c + "*/" { goto std; } + "\n" + { + if(cursor == s->eof) RET(EOI); + s->tok = s->pos = cursor; s->line++; + goto comment; + } + any { goto comment; } +*/ +} + +#ifndef MAP_NORESERVE +#define MAP_NORESERVE 0 +#endif + +main(){ + Scanner in; + struct stat statbuf; + uchar *buf; + fstat(0, &statbuf); + buf = mmap(NULL, statbuf.st_size, PROT_READ, MAP_SHARED|MAP_NORESERVE, + 0, 0); + if(buf != (uchar*)(-1)){ + int t; + in.lim = &(in.cur = buf)[statbuf.st_size]; + in.pos = NULL; + in.eof = NULL; + while((t = scan(&in)) != EOI){ +/* + printf("%d\t%.*s\n", t, in.cur - in.tok, in.tok); + printf("%d\n", t); +*/ + } + munmap(buf, statbuf.st_size); + } +} diff --git a/test/cnokw.c b/test/cnokw.c new file mode 100644 index 00000000..fcdd7285 --- /dev/null +++ b/test/cnokw.c @@ -0,0 +1,1356 @@ + +#line 1 "cnokw.re" +#include +#include +#include + +#define ADDEQ 257 +#define ANDAND 258 +#define ANDEQ 259 +#define ARRAY 260 +#define ASM 261 +#define AUTO 262 +#define BREAK 263 +#define CASE 264 +#define CHAR 265 +#define CONST 266 +#define CONTINUE 267 +#define DECR 268 +#define DEFAULT 269 +#define DEREF 270 +#define DIVEQ 271 +#define DO 272 +#define DOUBLE 273 +#define ELLIPSIS 274 +#define ELSE 275 +#define ENUM 276 +#define EQL 277 +#define EXTERN 278 +#define FCON 279 +#define FLOAT 280 +#define FOR 281 +#define FUNCTION 282 +#define GEQ 283 +#define GOTO 284 +#define ICON 285 +#define ID 286 +#define IF 287 +#define INCR 288 +#define INT 289 +#define LEQ 290 +#define LONG 291 +#define LSHIFT 292 +#define LSHIFTEQ 293 +#define MODEQ 294 +#define MULEQ 295 +#define NEQ 296 +#define OREQ 297 +#define OROR 298 +#define POINTER 299 +#define REGISTER 300 +#define RETURN 301 +#define RSHIFT 302 +#define RSHIFTEQ 303 +#define SCON 304 +#define SHORT 305 +#define SIGNED 306 +#define SIZEOF 307 +#define STATIC 308 +#define STRUCT 309 +#define SUBEQ 310 +#define SWITCH 311 +#define TYPEDEF 312 +#define UNION 313 +#define UNSIGNED 314 +#define VOID 315 +#define VOLATILE 316 +#define WHILE 317 +#define XOREQ 318 +#define EOI 319 + +typedef unsigned int uint; +typedef unsigned char uchar; + +#define BSIZE 8192 + +#define YYCTYPE uchar +#define YYCURSOR cursor +#define YYLIMIT s->lim +#define YYMARKER s->ptr +#define YYFILL(n) {cursor = fill(s, cursor);} + +#define RET(i) {s->cur = cursor; return i;} + +typedef struct Scanner { + int fd; + uchar *bot, *tok, *ptr, *cur, *pos, *lim, *top, *eof; + uint line; +} Scanner; + +uchar *fill(Scanner *s, uchar *cursor){ + if(!s->eof){ + uint cnt = s->tok - s->bot; + if(cnt){ + memcpy(s->bot, s->tok, s->lim - s->tok); + s->tok = s->bot; + s->ptr -= cnt; + cursor -= cnt; + s->pos -= cnt; + s->lim -= cnt; + } + if((s->top - s->lim) < BSIZE){ + uchar *buf = (uchar*) malloc(((s->lim - s->bot) + BSIZE)*sizeof(uchar)); + memcpy(buf, s->tok, s->lim - s->tok); + s->tok = buf; + s->ptr = &buf[s->ptr - s->bot]; + cursor = &buf[cursor - s->bot]; + s->pos = &buf[s->pos - s->bot]; + s->lim = &buf[s->lim - s->bot]; + s->top = &s->lim[BSIZE]; + free(s->bot); + s->bot = buf; + } + if((cnt = read(s->fd, (char*) s->lim, BSIZE)) != BSIZE){ + s->eof = &s->lim[cnt]; *(s->eof)++ = '\n'; + } + s->lim += cnt; + } + return cursor; +} + +int scan(Scanner *s){ + uchar *cursor = s->cur; +std: + s->tok = cursor; +#line 133 "cnokw.re" + + + +#line 7 "" +{ + YYCTYPE yych; + unsigned int yyaccept; + goto yy0; +yy1: ++YYCURSOR; +yy0: + if((YYLIMIT - YYCURSOR) < 5) YYFILL(5); + yych = *YYCURSOR; + switch(yych){ + case 0x09: case 0x0B: + case 0x0C: case ' ': goto yy58; + case 0x0A: goto yy60; + case '!': goto yy34; + case '"': goto yy13; + case '%': goto yy24; + case '&': goto yy26; + case '\'': goto yy9; + case '(': goto yy46; + case ')': goto yy48; + case '*': goto yy22; + case '+': goto yy18; + case ',': goto yy42; + case '-': goto yy20; + case '.': goto yy11; + case '/': goto yy2; + case '0': goto yy6; + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy8; + case ':': goto yy44; + case ';': goto yy36; + case '<': goto yy16; + case '=': goto yy32; + case '>': goto yy14; + case '?': goto yy56; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy4; + case '[': goto yy50; + case ']': goto yy52; + case '^': goto yy28; + case '{': goto yy38; + case '|': goto yy30; + case '}': goto yy40; + case '~': goto yy54; + default: goto yy62; + } +yy2: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '*': goto yy168; + case '=': goto yy166; + default: goto yy3; + } +yy3: +#line 189 "cnokw.re" +{ RET('/'); } +#line 118 "" +yy4: ++YYCURSOR; + yych = *YYCURSOR; + goto yy165; +yy5: +#line 138 "cnokw.re" +{ RET(ID); } +#line 124 "" +yy6: yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + switch(yych){ + case 'L': case 'U': case 'l': case 'u': goto yy140; + case 'X': case 'x': goto yy157; + default: goto yy156; + } +yy7: +#line 142 "cnokw.re" +{ RET(ICON); } +#line 135 "" +yy8: yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + goto yy138; +yy9: yyaccept = 1; + yych = *(YYMARKER = ++YYCURSOR); + switch(yych){ + case 0x0A: goto yy10; + default: goto yy128; + } +yy10: +#line 208 "cnokw.re" +{ + printf("unexpected character: %c\n", *s->tok); + goto std; + } +#line 151 "" +yy11: yyaccept = 2; + yych = *(YYMARKER = ++YYCURSOR); + switch(yych){ + case '.': goto yy116; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy117; + default: goto yy12; + } +yy12: +#line 182 "cnokw.re" +{ RET('.'); } +#line 171 "" +yy13: yyaccept = 1; + yych = *(YYMARKER = ++YYCURSOR); + switch(yych){ + case 0x0A: goto yy10; + default: goto yy106; + } +yy14: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '=': goto yy99; + case '>': goto yy101; + default: goto yy15; + } +yy15: +#line 192 "cnokw.re" +{ RET('>'); } +#line 187 "" +yy16: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '<': goto yy95; + case '=': goto yy93; + default: goto yy17; + } +yy17: +#line 191 "cnokw.re" +{ RET('<'); } +#line 197 "" +yy18: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '+': goto yy89; + case '=': goto yy91; + default: goto yy19; + } +yy19: +#line 187 "cnokw.re" +{ RET('+'); } +#line 207 "" +yy20: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '-': goto yy85; + case '=': goto yy87; + case '>': goto yy83; + default: goto yy21; + } +yy21: +#line 186 "cnokw.re" +{ RET('-'); } +#line 218 "" +yy22: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '=': goto yy81; + default: goto yy23; + } +yy23: +#line 188 "cnokw.re" +{ RET('*'); } +#line 227 "" +yy24: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '=': goto yy79; + default: goto yy25; + } +yy25: +#line 190 "cnokw.re" +{ RET('%'); } +#line 236 "" +yy26: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '&': goto yy75; + case '=': goto yy77; + default: goto yy27; + } +yy27: +#line 183 "cnokw.re" +{ RET('&'); } +#line 246 "" +yy28: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '=': goto yy73; + default: goto yy29; + } +yy29: +#line 193 "cnokw.re" +{ RET('^'); } +#line 255 "" +yy30: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '=': goto yy71; + case '|': goto yy69; + default: goto yy31; + } +yy31: +#line 194 "cnokw.re" +{ RET('|'); } +#line 265 "" +yy32: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '=': goto yy67; + default: goto yy33; + } +yy33: +#line 177 "cnokw.re" +{ RET('='); } +#line 274 "" +yy34: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '=': goto yy65; + default: goto yy35; + } +yy35: +#line 184 "cnokw.re" +{ RET('!'); } +#line 283 "" +yy36: ++YYCURSOR; + goto yy37; +yy37: +#line 172 "cnokw.re" +{ RET(';'); } +#line 289 "" +yy38: ++YYCURSOR; + goto yy39; +yy39: +#line 173 "cnokw.re" +{ RET('{'); } +#line 295 "" +yy40: ++YYCURSOR; + goto yy41; +yy41: +#line 174 "cnokw.re" +{ RET('}'); } +#line 301 "" +yy42: ++YYCURSOR; + goto yy43; +yy43: +#line 175 "cnokw.re" +{ RET(','); } +#line 307 "" +yy44: ++YYCURSOR; + goto yy45; +yy45: +#line 176 "cnokw.re" +{ RET(':'); } +#line 313 "" +yy46: ++YYCURSOR; + goto yy47; +yy47: +#line 178 "cnokw.re" +{ RET('('); } +#line 319 "" +yy48: ++YYCURSOR; + goto yy49; +yy49: +#line 179 "cnokw.re" +{ RET(')'); } +#line 325 "" +yy50: ++YYCURSOR; + goto yy51; +yy51: +#line 180 "cnokw.re" +{ RET('['); } +#line 331 "" +yy52: ++YYCURSOR; + goto yy53; +yy53: +#line 181 "cnokw.re" +{ RET(']'); } +#line 337 "" +yy54: ++YYCURSOR; + goto yy55; +yy55: +#line 185 "cnokw.re" +{ RET('~'); } +#line 343 "" +yy56: ++YYCURSOR; + goto yy57; +yy57: +#line 195 "cnokw.re" +{ RET('?'); } +#line 349 "" +yy58: ++YYCURSOR; + yych = *YYCURSOR; + goto yy64; +yy59: +#line 198 "cnokw.re" +{ goto std; } +#line 355 "" +yy60: ++YYCURSOR; + goto yy61; +yy61: +#line 201 "cnokw.re" +{ + if(cursor == s->eof) RET(EOI); + s->pos = cursor; s->line++; + goto std; + } +#line 365 "" +yy62: yych = *++YYCURSOR; + goto yy10; +yy63: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy64; +yy64: switch(yych){ + case 0x09: case 0x0B: + case 0x0C: case ' ': goto yy63; + default: goto yy59; + } +yy65: ++YYCURSOR; + goto yy66; +yy66: +#line 171 "cnokw.re" +{ RET(NEQ); } +#line 383 "" +yy67: ++YYCURSOR; + goto yy68; +yy68: +#line 170 "cnokw.re" +{ RET(EQL); } +#line 389 "" +yy69: ++YYCURSOR; + goto yy70; +yy70: +#line 167 "cnokw.re" +{ RET(OROR); } +#line 395 "" +yy71: ++YYCURSOR; + goto yy72; +yy72: +#line 160 "cnokw.re" +{ RET(OREQ); } +#line 401 "" +yy73: ++YYCURSOR; + goto yy74; +yy74: +#line 159 "cnokw.re" +{ RET(XOREQ); } +#line 407 "" +yy75: ++YYCURSOR; + goto yy76; +yy76: +#line 166 "cnokw.re" +{ RET(ANDAND); } +#line 413 "" +yy77: ++YYCURSOR; + goto yy78; +yy78: +#line 158 "cnokw.re" +{ RET(ANDEQ); } +#line 419 "" +yy79: ++YYCURSOR; + goto yy80; +yy80: +#line 157 "cnokw.re" +{ RET(MODEQ); } +#line 425 "" +yy81: ++YYCURSOR; + goto yy82; +yy82: +#line 155 "cnokw.re" +{ RET(MULEQ); } +#line 431 "" +yy83: ++YYCURSOR; + goto yy84; +yy84: +#line 165 "cnokw.re" +{ RET(DEREF); } +#line 437 "" +yy85: ++YYCURSOR; + goto yy86; +yy86: +#line 164 "cnokw.re" +{ RET(DECR); } +#line 443 "" +yy87: ++YYCURSOR; + goto yy88; +yy88: +#line 154 "cnokw.re" +{ RET(SUBEQ); } +#line 449 "" +yy89: ++YYCURSOR; + goto yy90; +yy90: +#line 163 "cnokw.re" +{ RET(INCR); } +#line 455 "" +yy91: ++YYCURSOR; + goto yy92; +yy92: +#line 153 "cnokw.re" +{ RET(ADDEQ); } +#line 461 "" +yy93: ++YYCURSOR; + goto yy94; +yy94: +#line 168 "cnokw.re" +{ RET(LEQ); } +#line 467 "" +yy95: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '=': goto yy97; + default: goto yy96; + } +yy96: +#line 162 "cnokw.re" +{ RET(LSHIFT); } +#line 476 "" +yy97: ++YYCURSOR; + goto yy98; +yy98: +#line 152 "cnokw.re" +{ RET(LSHIFTEQ); } +#line 482 "" +yy99: ++YYCURSOR; + goto yy100; +yy100: +#line 169 "cnokw.re" +{ RET(GEQ); } +#line 488 "" +yy101: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '=': goto yy103; + default: goto yy102; + } +yy102: +#line 161 "cnokw.re" +{ RET(RSHIFT); } +#line 497 "" +yy103: ++YYCURSOR; + goto yy104; +yy104: +#line 151 "cnokw.re" +{ RET(RSHIFTEQ); } +#line 503 "" +yy105: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy106; +yy106: switch(yych){ + case 0x0A: goto yy107; + case '"': goto yy109; + case '\\': goto yy108; + default: goto yy105; + } +yy107: YYCURSOR = YYMARKER; + switch(yyaccept){ + case 0: goto yy7; + case 3: goto yy119; + case 2: goto yy12; + case 1: goto yy10; + } +yy108: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + switch(yych){ + case '"': case '\'': case '?': case '\\': case 'a': + case 'b': case 'f': case 'n': case 'r': case 't': case 'v': goto yy105; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': goto yy112; + case 'x': goto yy111; + default: goto yy107; + } +yy109: ++YYCURSOR; + goto yy110; +yy110: +#line 148 "cnokw.re" +{ RET(SCON); } +#line 545 "" +yy111: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': goto yy114; + default: goto yy107; + } +yy112: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy113; +yy113: switch(yych){ + case 0x0A: goto yy107; + case '"': goto yy109; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': goto yy112; + case '\\': goto yy108; + default: goto yy105; + } +yy114: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy115; +yy115: switch(yych){ + case 0x0A: goto yy107; + case '"': goto yy109; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': goto yy114; + case '\\': goto yy108; + default: goto yy105; + } +yy116: yych = *++YYCURSOR; + switch(yych){ + case '.': goto yy125; + default: goto yy107; + } +yy117: yyaccept = 3; + YYMARKER = ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy118; +yy118: switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy117; + case 'E': case 'e': goto yy120; + case 'F': case 'L': case 'f': case 'l': goto yy121; + default: goto yy119; + } +yy119: +#line 145 "cnokw.re" +{ RET(FCON); } +#line 651 "" +yy120: yych = *++YYCURSOR; + switch(yych){ + case '+': case '-': goto yy122; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy123; + default: goto yy107; + } +yy121: yych = *++YYCURSOR; + goto yy119; +yy122: yych = *++YYCURSOR; + switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy123; + default: goto yy107; + } +yy123: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy124; +yy124: switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy123; + case 'F': case 'L': case 'f': case 'l': goto yy121; + default: goto yy119; + } +yy125: ++YYCURSOR; + goto yy126; +yy126: +#line 150 "cnokw.re" +{ RET(ELLIPSIS); } +#line 707 "" +yy127: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy128; +yy128: switch(yych){ + case 0x0A: goto yy107; + case '\'': goto yy130; + case '\\': goto yy129; + default: goto yy127; + } +yy129: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + switch(yych){ + case '"': case '\'': case '?': case '\\': case 'a': + case 'b': case 'f': case 'n': case 'r': case 't': case 'v': goto yy127; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': goto yy132; + case 'x': goto yy131; + default: goto yy107; + } +yy130: yych = *++YYCURSOR; + goto yy7; +yy131: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': goto yy134; + default: goto yy107; + } +yy132: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy133; +yy133: switch(yych){ + case 0x0A: goto yy107; + case '\'': goto yy130; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': goto yy132; + case '\\': goto yy129; + default: goto yy127; + } +yy134: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy135; +yy135: switch(yych){ + case 0x0A: goto yy107; + case '\'': goto yy130; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': goto yy134; + case '\\': goto yy129; + default: goto yy127; + } +yy136: yyaccept = 3; + yych = *(YYMARKER = ++YYCURSOR); + switch(yych){ + case 'E': case 'e': goto yy147; + default: goto yy146; + } +yy137: yyaccept = 0; + YYMARKER = ++YYCURSOR; + if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); + yych = *YYCURSOR; + goto yy138; +yy138: switch(yych){ + case '.': goto yy136; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy137; + case 'E': case 'e': goto yy139; + case 'L': case 'U': case 'l': case 'u': goto yy140; + default: goto yy7; + } +yy139: yych = *++YYCURSOR; + switch(yych){ + case '+': case '-': goto yy142; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy143; + default: goto yy107; + } +yy140: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy141; +yy141: switch(yych){ + case 'L': case 'U': case 'l': case 'u': goto yy140; + default: goto yy7; + } +yy142: yych = *++YYCURSOR; + switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy143; + default: goto yy107; + } +yy143: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy144; +yy144: switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy143; + case 'F': case 'L': case 'f': case 'l': goto yy121; + default: goto yy119; + } +yy145: yyaccept = 3; + YYMARKER = ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy146; +yy146: switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy145; + case 'E': case 'e': goto yy151; + case 'F': case 'L': case 'f': case 'l': goto yy121; + default: goto yy119; + } +yy147: yych = *++YYCURSOR; + switch(yych){ + case '+': case '-': goto yy148; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy149; + default: goto yy107; + } +yy148: yych = *++YYCURSOR; + switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy149; + default: goto yy107; + } +yy149: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy150; +yy150: switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy149; + case 'F': case 'L': case 'f': case 'l': goto yy121; + default: goto yy119; + } +yy151: yych = *++YYCURSOR; + switch(yych){ + case '+': case '-': goto yy152; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy153; + default: goto yy107; + } +yy152: yych = *++YYCURSOR; + switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy153; + default: goto yy107; + } +yy153: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy154; +yy154: switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy153; + case 'F': case 'L': case 'f': case 'l': goto yy121; + default: goto yy119; + } +yy155: yyaccept = 0; + YYMARKER = ++YYCURSOR; + if((YYLIMIT - YYCURSOR) < 4) YYFILL(4); + yych = *YYCURSOR; + goto yy156; +yy156: switch(yych){ + case '.': goto yy136; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy155; + case 'E': case 'e': goto yy139; + case 'L': case 'U': case 'l': case 'u': goto yy162; + default: goto yy7; + } +yy157: yych = *++YYCURSOR; + switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': goto yy158; + default: goto yy107; + } +yy158: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy159; +yy159: switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': goto yy158; + case 'L': case 'U': case 'l': case 'u': goto yy160; + default: goto yy7; + } +yy160: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy161; +yy161: switch(yych){ + case 'L': case 'U': case 'l': case 'u': goto yy160; + default: goto yy7; + } +yy162: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy163; +yy163: switch(yych){ + case 'L': case 'U': case 'l': case 'u': goto yy162; + default: goto yy7; + } +yy164: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy165; +yy165: switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy164; + default: goto yy5; + } +yy166: ++YYCURSOR; + goto yy167; +yy167: +#line 156 "cnokw.re" +{ RET(DIVEQ); } +#line 1181 "" +yy168: ++YYCURSOR; + goto yy169; +yy169: +#line 136 "cnokw.re" +{ goto comment; } +#line 1187 "" +} +#line 212 "cnokw.re" + + +comment: + +#line 1191 "" +{ + YYCTYPE yych; + unsigned int yyaccept; + goto yy170; +yy171: ++YYCURSOR; +yy170: + if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); + yych = *YYCURSOR; + switch(yych){ + case 0x0A: goto yy174; + case '*': goto yy172; + default: goto yy176; + } +yy172: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '/': goto yy177; + default: goto yy173; + } +yy173: +#line 223 "cnokw.re" +{ goto comment; } +#line 1213 "" +yy174: ++YYCURSOR; + goto yy175; +yy175: +#line 218 "cnokw.re" +{ + if(cursor == s->eof) RET(EOI); + s->tok = s->pos = cursor; s->line++; + goto comment; + } +#line 1223 "" +yy176: yych = *++YYCURSOR; + goto yy173; +yy177: ++YYCURSOR; + goto yy178; +yy178: +#line 216 "cnokw.re" +{ goto std; } +#line 1231 "" +} +#line 224 "cnokw.re" + +} + +main(){ + Scanner in; + int t; + memset((char*) &in, 0, sizeof(in)); + in.fd = 0; + while((t = scan(&in)) != EOI){ +/* + printf("%d\t%.*s\n", t, in.cur - in.tok, in.tok); + printf("%d\n", t); +*/ + } + close(in.fd); +} diff --git a/test/cnokw.re b/test/cnokw.re new file mode 100644 index 00000000..bdc12793 --- /dev/null +++ b/test/cnokw.re @@ -0,0 +1,239 @@ +#include +#include +#include + +#define ADDEQ 257 +#define ANDAND 258 +#define ANDEQ 259 +#define ARRAY 260 +#define ASM 261 +#define AUTO 262 +#define BREAK 263 +#define CASE 264 +#define CHAR 265 +#define CONST 266 +#define CONTINUE 267 +#define DECR 268 +#define DEFAULT 269 +#define DEREF 270 +#define DIVEQ 271 +#define DO 272 +#define DOUBLE 273 +#define ELLIPSIS 274 +#define ELSE 275 +#define ENUM 276 +#define EQL 277 +#define EXTERN 278 +#define FCON 279 +#define FLOAT 280 +#define FOR 281 +#define FUNCTION 282 +#define GEQ 283 +#define GOTO 284 +#define ICON 285 +#define ID 286 +#define IF 287 +#define INCR 288 +#define INT 289 +#define LEQ 290 +#define LONG 291 +#define LSHIFT 292 +#define LSHIFTEQ 293 +#define MODEQ 294 +#define MULEQ 295 +#define NEQ 296 +#define OREQ 297 +#define OROR 298 +#define POINTER 299 +#define REGISTER 300 +#define RETURN 301 +#define RSHIFT 302 +#define RSHIFTEQ 303 +#define SCON 304 +#define SHORT 305 +#define SIGNED 306 +#define SIZEOF 307 +#define STATIC 308 +#define STRUCT 309 +#define SUBEQ 310 +#define SWITCH 311 +#define TYPEDEF 312 +#define UNION 313 +#define UNSIGNED 314 +#define VOID 315 +#define VOLATILE 316 +#define WHILE 317 +#define XOREQ 318 +#define EOI 319 + +typedef unsigned int uint; +typedef unsigned char uchar; + +#define BSIZE 8192 + +#define YYCTYPE uchar +#define YYCURSOR cursor +#define YYLIMIT s->lim +#define YYMARKER s->ptr +#define YYFILL(n) {cursor = fill(s, cursor);} + +#define RET(i) {s->cur = cursor; return i;} + +typedef struct Scanner { + int fd; + uchar *bot, *tok, *ptr, *cur, *pos, *lim, *top, *eof; + uint line; +} Scanner; + +uchar *fill(Scanner *s, uchar *cursor){ + if(!s->eof){ + uint cnt = s->tok - s->bot; + if(cnt){ + memcpy(s->bot, s->tok, s->lim - s->tok); + s->tok = s->bot; + s->ptr -= cnt; + cursor -= cnt; + s->pos -= cnt; + s->lim -= cnt; + } + if((s->top - s->lim) < BSIZE){ + uchar *buf = (uchar*) malloc(((s->lim - s->bot) + BSIZE)*sizeof(uchar)); + memcpy(buf, s->tok, s->lim - s->tok); + s->tok = buf; + s->ptr = &buf[s->ptr - s->bot]; + cursor = &buf[cursor - s->bot]; + s->pos = &buf[s->pos - s->bot]; + s->lim = &buf[s->lim - s->bot]; + s->top = &s->lim[BSIZE]; + free(s->bot); + s->bot = buf; + } + if((cnt = read(s->fd, (char*) s->lim, BSIZE)) != BSIZE){ + s->eof = &s->lim[cnt]; *(s->eof)++ = '\n'; + } + s->lim += cnt; + } + return cursor; +} + +int scan(Scanner *s){ + uchar *cursor = s->cur; +std: + s->tok = cursor; +/*!re2c +any = [\000-\377]; +O = [0-7]; +D = [0-9]; +L = [a-zA-Z_]; +H = [a-fA-F0-9]; +E = [Ee] [+-]? D+; +FS = [fFlL]; +IS = [uUlL]*; +ESC = [\\] ([abfnrtv?'"\\] | "x" H+ | O+); +*/ + +/*!re2c + "/*" { goto comment; } + + L (L|D)* { RET(ID); } + + ("0" [xX] H+ IS?) | ("0" D+ IS?) | (D+ IS?) | + (['] (ESC|any\[\n\\'])* [']) + { RET(ICON); } + + (D+ E FS?) | (D* "." D+ E? FS?) | (D+ "." D* E? FS?) + { RET(FCON); } + + (["] (ESC|any\[\n\\"])* ["]) + { RET(SCON); } + + "..." { RET(ELLIPSIS); } + ">>=" { RET(RSHIFTEQ); } + "<<=" { RET(LSHIFTEQ); } + "+=" { RET(ADDEQ); } + "-=" { RET(SUBEQ); } + "*=" { RET(MULEQ); } + "/=" { RET(DIVEQ); } + "%=" { RET(MODEQ); } + "&=" { RET(ANDEQ); } + "^=" { RET(XOREQ); } + "|=" { RET(OREQ); } + ">>" { RET(RSHIFT); } + "<<" { RET(LSHIFT); } + "++" { RET(INCR); } + "--" { RET(DECR); } + "->" { RET(DEREF); } + "&&" { RET(ANDAND); } + "||" { RET(OROR); } + "<=" { RET(LEQ); } + ">=" { RET(GEQ); } + "==" { RET(EQL); } + "!=" { RET(NEQ); } + ";" { RET(';'); } + "{" { RET('{'); } + "}" { RET('}'); } + "," { RET(','); } + ":" { RET(':'); } + "=" { RET('='); } + "(" { RET('('); } + ")" { RET(')'); } + "[" { RET('['); } + "]" { RET(']'); } + "." { RET('.'); } + "&" { RET('&'); } + "!" { RET('!'); } + "~" { RET('~'); } + "-" { RET('-'); } + "+" { RET('+'); } + "*" { RET('*'); } + "/" { RET('/'); } + "%" { RET('%'); } + "<" { RET('<'); } + ">" { RET('>'); } + "^" { RET('^'); } + "|" { RET('|'); } + "?" { RET('?'); } + + + [ \t\v\f]+ { goto std; } + + "\n" + { + if(cursor == s->eof) RET(EOI); + s->pos = cursor; s->line++; + goto std; + } + + any + { + printf("unexpected character: %c\n", *s->tok); + goto std; + } +*/ + +comment: +/*!re2c + "*/" { goto std; } + "\n" + { + if(cursor == s->eof) RET(EOI); + s->tok = s->pos = cursor; s->line++; + goto comment; + } + any { goto comment; } +*/ +} + +main(){ + Scanner in; + int t; + memset((char*) &in, 0, sizeof(in)); + in.fd = 0; + while((t = scan(&in)) != EOI){ +/* + printf("%d\t%.*s\n", t, in.cur - in.tok, in.tok); + printf("%d\n", t); +*/ + } + close(in.fd); +} diff --git a/test/cunroll.c b/test/cunroll.c new file mode 100644 index 00000000..4ae3cd05 --- /dev/null +++ b/test/cunroll.c @@ -0,0 +1,1970 @@ + +#line 1 "cunroll.re" +#include +#include +#include + +#define ADDEQ 257 +#define ANDAND 258 +#define ANDEQ 259 +#define ARRAY 260 +#define ASM 261 +#define AUTO 262 +#define BREAK 263 +#define CASE 264 +#define CHAR 265 +#define CONST 266 +#define CONTINUE 267 +#define DECR 268 +#define DEFAULT 269 +#define DEREF 270 +#define DIVEQ 271 +#define DO 272 +#define DOUBLE 273 +#define ELLIPSIS 274 +#define ELSE 275 +#define ENUM 276 +#define EQL 277 +#define EXTERN 278 +#define FCON 279 +#define FLOAT 280 +#define FOR 281 +#define FUNCTION 282 +#define GEQ 283 +#define GOTO 284 +#define ICON 285 +#define ID 286 +#define IF 287 +#define INCR 288 +#define INT 289 +#define LEQ 290 +#define LONG 291 +#define LSHIFT 292 +#define LSHIFTEQ 293 +#define MODEQ 294 +#define MULEQ 295 +#define NEQ 296 +#define OREQ 297 +#define OROR 298 +#define POINTER 299 +#define REGISTER 300 +#define RETURN 301 +#define RSHIFT 302 +#define RSHIFTEQ 303 +#define SCON 304 +#define SHORT 305 +#define SIGNED 306 +#define SIZEOF 307 +#define STATIC 308 +#define STRUCT 309 +#define SUBEQ 310 +#define SWITCH 311 +#define TYPEDEF 312 +#define UNION 313 +#define UNSIGNED 314 +#define VOID 315 +#define VOLATILE 316 +#define WHILE 317 +#define XOREQ 318 +#define EOI 319 + +typedef unsigned int uint; +typedef unsigned char uchar; + +#define BSIZE 8192 + +#define YYCTYPE uchar +#define YYCURSOR cursor +#define YYLIMIT s->lim +#define YYMARKER s->ptr +#define YYFILL(n) {cursor = fill(s, cursor);} + +#define RET(i) {s->cur = cursor; return i;} + +typedef struct Scanner { + int fd; + uchar *bot, *tok, *ptr, *cur, *pos, *lim, *top, *eof; + uint line; +} Scanner; + +uchar *fill(Scanner *s, uchar *cursor){ + if(!s->eof){ + uint cnt = s->tok - s->bot; + if(cnt){ + memcpy(s->bot, s->tok, s->lim - s->tok); + s->tok = s->bot; + s->ptr -= cnt; + cursor -= cnt; + s->pos -= cnt; + s->lim -= cnt; + } + if((s->top - s->lim) < BSIZE){ + uchar *buf = (uchar*) malloc(((s->lim - s->bot) + BSIZE)*sizeof(uchar)); + memcpy(buf, s->tok, s->lim - s->tok); + s->tok = buf; + s->ptr = &buf[s->ptr - s->bot]; + cursor = &buf[cursor - s->bot]; + s->pos = &buf[s->pos - s->bot]; + s->lim = &buf[s->lim - s->bot]; + s->top = &s->lim[BSIZE]; + free(s->bot); + s->bot = buf; + } + if((cnt = read(s->fd, (char*) s->lim, BSIZE)) != BSIZE){ + s->eof = &s->lim[cnt]; *(s->eof)++ = '\n'; + } + s->lim += cnt; + } + return cursor; +} + +int scan(Scanner *s){ + uchar *cursor = s->cur; +std: + s->tok = cursor; +#line 135 "cunroll.re" + + + +#line 7 "" +{ + YYCTYPE yych; + unsigned int yyaccept; + goto yy0; +yy1: ++YYCURSOR; +yy0: + if((YYLIMIT - YYCURSOR) < 9) YYFILL(9); + yych = *YYCURSOR; + switch(yych){ + case 0x09: case 0x0B: + case 0x0C: case ' ': goto yy58; + case 0x0A: goto yy60; + case '!': goto yy34; + case '"': goto yy13; + case '%': goto yy24; + case '&': goto yy26; + case '\'': goto yy9; + case '(': goto yy46; + case ')': goto yy48; + case '*': goto yy22; + case '+': goto yy18; + case ',': goto yy42; + case '-': goto yy20; + case '.': goto yy11; + case '/': goto yy2; + case '0': goto yy6; + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy8; + case ':': goto yy44; + case ';': goto yy36; + case '<': goto yy16; + case '=': goto yy32; + case '>': goto yy14; + case '?': goto yy56; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy4; + case '[': goto yy50; + case ']': goto yy52; + case '^': goto yy28; + case '{': goto yy38; + case '|': goto yy30; + case '}': goto yy40; + case '~': goto yy54; + default: goto yy62; + } +yy2: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '*': goto yy183; + case '=': goto yy181; + default: goto yy3; + } +yy3: +#line 200 "cunroll.re" +{ RET('/'); } +#line 118 "" +yy4: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy164; + default: goto yy5; + } +yy5: +#line 141 "cunroll.re" +{ RET(ID); } +#line 186 "" +yy6: yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + switch(yych){ + case 'L': case 'U': case 'l': case 'u': goto yy140; + case 'X': case 'x': goto yy157; + default: goto yy156; + } +yy7: +#line 153 "cunroll.re" +{ RET(ICON); } +#line 197 "" +yy8: yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + goto yy138; +yy9: yyaccept = 1; + yych = *(YYMARKER = ++YYCURSOR); + switch(yych){ + case 0x0A: goto yy10; + default: goto yy128; + } +yy10: +#line 219 "cunroll.re" +{ + printf("unexpected character: %c\n", *s->tok); + goto std; + } +#line 213 "" +yy11: yyaccept = 2; + yych = *(YYMARKER = ++YYCURSOR); + switch(yych){ + case '.': goto yy116; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy117; + default: goto yy12; + } +yy12: +#line 193 "cunroll.re" +{ RET('.'); } +#line 233 "" +yy13: yyaccept = 1; + yych = *(YYMARKER = ++YYCURSOR); + switch(yych){ + case 0x0A: goto yy10; + default: goto yy106; + } +yy14: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '=': goto yy99; + case '>': goto yy101; + default: goto yy15; + } +yy15: +#line 203 "cunroll.re" +{ RET('>'); } +#line 249 "" +yy16: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '<': goto yy95; + case '=': goto yy93; + default: goto yy17; + } +yy17: +#line 202 "cunroll.re" +{ RET('<'); } +#line 259 "" +yy18: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '+': goto yy89; + case '=': goto yy91; + default: goto yy19; + } +yy19: +#line 198 "cunroll.re" +{ RET('+'); } +#line 269 "" +yy20: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '-': goto yy85; + case '=': goto yy87; + case '>': goto yy83; + default: goto yy21; + } +yy21: +#line 197 "cunroll.re" +{ RET('-'); } +#line 280 "" +yy22: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '=': goto yy81; + default: goto yy23; + } +yy23: +#line 199 "cunroll.re" +{ RET('*'); } +#line 289 "" +yy24: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '=': goto yy79; + default: goto yy25; + } +yy25: +#line 201 "cunroll.re" +{ RET('%'); } +#line 298 "" +yy26: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '&': goto yy75; + case '=': goto yy77; + default: goto yy27; + } +yy27: +#line 194 "cunroll.re" +{ RET('&'); } +#line 308 "" +yy28: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '=': goto yy73; + default: goto yy29; + } +yy29: +#line 204 "cunroll.re" +{ RET('^'); } +#line 317 "" +yy30: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '=': goto yy71; + case '|': goto yy69; + default: goto yy31; + } +yy31: +#line 205 "cunroll.re" +{ RET('|'); } +#line 327 "" +yy32: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '=': goto yy67; + default: goto yy33; + } +yy33: +#line 188 "cunroll.re" +{ RET('='); } +#line 336 "" +yy34: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '=': goto yy65; + default: goto yy35; + } +yy35: +#line 195 "cunroll.re" +{ RET('!'); } +#line 345 "" +yy36: ++YYCURSOR; + goto yy37; +yy37: +#line 183 "cunroll.re" +{ RET(';'); } +#line 351 "" +yy38: ++YYCURSOR; + goto yy39; +yy39: +#line 184 "cunroll.re" +{ RET('{'); } +#line 357 "" +yy40: ++YYCURSOR; + goto yy41; +yy41: +#line 185 "cunroll.re" +{ RET('}'); } +#line 363 "" +yy42: ++YYCURSOR; + goto yy43; +yy43: +#line 186 "cunroll.re" +{ RET(','); } +#line 369 "" +yy44: ++YYCURSOR; + goto yy45; +yy45: +#line 187 "cunroll.re" +{ RET(':'); } +#line 375 "" +yy46: ++YYCURSOR; + goto yy47; +yy47: +#line 189 "cunroll.re" +{ RET('('); } +#line 381 "" +yy48: ++YYCURSOR; + goto yy49; +yy49: +#line 190 "cunroll.re" +{ RET(')'); } +#line 387 "" +yy50: ++YYCURSOR; + goto yy51; +yy51: +#line 191 "cunroll.re" +{ RET('['); } +#line 393 "" +yy52: ++YYCURSOR; + goto yy53; +yy53: +#line 192 "cunroll.re" +{ RET(']'); } +#line 399 "" +yy54: ++YYCURSOR; + goto yy55; +yy55: +#line 196 "cunroll.re" +{ RET('~'); } +#line 405 "" +yy56: ++YYCURSOR; + goto yy57; +yy57: +#line 206 "cunroll.re" +{ RET('?'); } +#line 411 "" +yy58: ++YYCURSOR; + yych = *YYCURSOR; + goto yy64; +yy59: +#line 209 "cunroll.re" +{ goto std; } +#line 417 "" +yy60: ++YYCURSOR; + goto yy61; +yy61: +#line 212 "cunroll.re" +{ + if(cursor == s->eof) RET(EOI); + s->pos = cursor; s->line++; + goto std; + } +#line 427 "" +yy62: yych = *++YYCURSOR; + goto yy10; +yy63: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy64; +yy64: switch(yych){ + case 0x09: case 0x0B: + case 0x0C: case ' ': goto yy63; + default: goto yy59; + } +yy65: ++YYCURSOR; + goto yy66; +yy66: +#line 182 "cunroll.re" +{ RET(NEQ); } +#line 445 "" +yy67: ++YYCURSOR; + goto yy68; +yy68: +#line 181 "cunroll.re" +{ RET(EQL); } +#line 451 "" +yy69: ++YYCURSOR; + goto yy70; +yy70: +#line 178 "cunroll.re" +{ RET(OROR); } +#line 457 "" +yy71: ++YYCURSOR; + goto yy72; +yy72: +#line 171 "cunroll.re" +{ RET(OREQ); } +#line 463 "" +yy73: ++YYCURSOR; + goto yy74; +yy74: +#line 170 "cunroll.re" +{ RET(XOREQ); } +#line 469 "" +yy75: ++YYCURSOR; + goto yy76; +yy76: +#line 177 "cunroll.re" +{ RET(ANDAND); } +#line 475 "" +yy77: ++YYCURSOR; + goto yy78; +yy78: +#line 169 "cunroll.re" +{ RET(ANDEQ); } +#line 481 "" +yy79: ++YYCURSOR; + goto yy80; +yy80: +#line 168 "cunroll.re" +{ RET(MODEQ); } +#line 487 "" +yy81: ++YYCURSOR; + goto yy82; +yy82: +#line 166 "cunroll.re" +{ RET(MULEQ); } +#line 493 "" +yy83: ++YYCURSOR; + goto yy84; +yy84: +#line 176 "cunroll.re" +{ RET(DEREF); } +#line 499 "" +yy85: ++YYCURSOR; + goto yy86; +yy86: +#line 175 "cunroll.re" +{ RET(DECR); } +#line 505 "" +yy87: ++YYCURSOR; + goto yy88; +yy88: +#line 165 "cunroll.re" +{ RET(SUBEQ); } +#line 511 "" +yy89: ++YYCURSOR; + goto yy90; +yy90: +#line 174 "cunroll.re" +{ RET(INCR); } +#line 517 "" +yy91: ++YYCURSOR; + goto yy92; +yy92: +#line 164 "cunroll.re" +{ RET(ADDEQ); } +#line 523 "" +yy93: ++YYCURSOR; + goto yy94; +yy94: +#line 179 "cunroll.re" +{ RET(LEQ); } +#line 529 "" +yy95: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '=': goto yy97; + default: goto yy96; + } +yy96: +#line 173 "cunroll.re" +{ RET(LSHIFT); } +#line 538 "" +yy97: ++YYCURSOR; + goto yy98; +yy98: +#line 163 "cunroll.re" +{ RET(LSHIFTEQ); } +#line 544 "" +yy99: ++YYCURSOR; + goto yy100; +yy100: +#line 180 "cunroll.re" +{ RET(GEQ); } +#line 550 "" +yy101: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '=': goto yy103; + default: goto yy102; + } +yy102: +#line 172 "cunroll.re" +{ RET(RSHIFT); } +#line 559 "" +yy103: ++YYCURSOR; + goto yy104; +yy104: +#line 162 "cunroll.re" +{ RET(RSHIFTEQ); } +#line 565 "" +yy105: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy106; +yy106: switch(yych){ + case 0x0A: goto yy107; + case '"': goto yy109; + case '\\': goto yy108; + default: goto yy105; + } +yy107: YYCURSOR = YYMARKER; + switch(yyaccept){ + case 0: goto yy7; + case 3: goto yy119; + case 2: goto yy12; + case 1: goto yy10; + } +yy108: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + switch(yych){ + case '"': case '\'': case '?': case '\\': case 'a': + case 'b': case 'f': case 'n': case 'r': case 't': case 'v': goto yy105; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': goto yy112; + case 'x': goto yy111; + default: goto yy107; + } +yy109: ++YYCURSOR; + goto yy110; +yy110: +#line 159 "cunroll.re" +{ RET(SCON); } +#line 607 "" +yy111: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': goto yy114; + default: goto yy107; + } +yy112: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy113; +yy113: switch(yych){ + case 0x0A: goto yy107; + case '"': goto yy109; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': goto yy112; + case '\\': goto yy108; + default: goto yy105; + } +yy114: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy115; +yy115: switch(yych){ + case 0x0A: goto yy107; + case '"': goto yy109; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': goto yy114; + case '\\': goto yy108; + default: goto yy105; + } +yy116: yych = *++YYCURSOR; + switch(yych){ + case '.': goto yy125; + default: goto yy107; + } +yy117: yyaccept = 3; + YYMARKER = ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy118; +yy118: switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy117; + case 'E': case 'e': goto yy120; + case 'F': case 'L': case 'f': case 'l': goto yy121; + default: goto yy119; + } +yy119: +#line 156 "cunroll.re" +{ RET(FCON); } +#line 713 "" +yy120: yych = *++YYCURSOR; + switch(yych){ + case '+': case '-': goto yy122; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy123; + default: goto yy107; + } +yy121: yych = *++YYCURSOR; + goto yy119; +yy122: yych = *++YYCURSOR; + switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy123; + default: goto yy107; + } +yy123: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy124; +yy124: switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy123; + case 'F': case 'L': case 'f': case 'l': goto yy121; + default: goto yy119; + } +yy125: ++YYCURSOR; + goto yy126; +yy126: +#line 161 "cunroll.re" +{ RET(ELLIPSIS); } +#line 769 "" +yy127: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy128; +yy128: switch(yych){ + case 0x0A: goto yy107; + case '\'': goto yy130; + case '\\': goto yy129; + default: goto yy127; + } +yy129: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + switch(yych){ + case '"': case '\'': case '?': case '\\': case 'a': + case 'b': case 'f': case 'n': case 'r': case 't': case 'v': goto yy127; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': goto yy132; + case 'x': goto yy131; + default: goto yy107; + } +yy130: yych = *++YYCURSOR; + goto yy7; +yy131: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': goto yy134; + default: goto yy107; + } +yy132: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy133; +yy133: switch(yych){ + case 0x0A: goto yy107; + case '\'': goto yy130; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': goto yy132; + case '\\': goto yy129; + default: goto yy127; + } +yy134: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy135; +yy135: switch(yych){ + case 0x0A: goto yy107; + case '\'': goto yy130; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': goto yy134; + case '\\': goto yy129; + default: goto yy127; + } +yy136: yyaccept = 3; + yych = *(YYMARKER = ++YYCURSOR); + switch(yych){ + case 'E': case 'e': goto yy147; + default: goto yy146; + } +yy137: yyaccept = 0; + YYMARKER = ++YYCURSOR; + if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); + yych = *YYCURSOR; + goto yy138; +yy138: switch(yych){ + case '.': goto yy136; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy137; + case 'E': case 'e': goto yy139; + case 'L': case 'U': case 'l': case 'u': goto yy140; + default: goto yy7; + } +yy139: yych = *++YYCURSOR; + switch(yych){ + case '+': case '-': goto yy142; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy143; + default: goto yy107; + } +yy140: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy141; +yy141: switch(yych){ + case 'L': case 'U': case 'l': case 'u': goto yy140; + default: goto yy7; + } +yy142: yych = *++YYCURSOR; + switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy143; + default: goto yy107; + } +yy143: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy144; +yy144: switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy143; + case 'F': case 'L': case 'f': case 'l': goto yy121; + default: goto yy119; + } +yy145: yyaccept = 3; + YYMARKER = ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy146; +yy146: switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy145; + case 'E': case 'e': goto yy151; + case 'F': case 'L': case 'f': case 'l': goto yy121; + default: goto yy119; + } +yy147: yych = *++YYCURSOR; + switch(yych){ + case '+': case '-': goto yy148; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy149; + default: goto yy107; + } +yy148: yych = *++YYCURSOR; + switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy149; + default: goto yy107; + } +yy149: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy150; +yy150: switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy149; + case 'F': case 'L': case 'f': case 'l': goto yy121; + default: goto yy119; + } +yy151: yych = *++YYCURSOR; + switch(yych){ + case '+': case '-': goto yy152; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy153; + default: goto yy107; + } +yy152: yych = *++YYCURSOR; + switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy153; + default: goto yy107; + } +yy153: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy154; +yy154: switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy153; + case 'F': case 'L': case 'f': case 'l': goto yy121; + default: goto yy119; + } +yy155: yyaccept = 0; + YYMARKER = ++YYCURSOR; + if((YYLIMIT - YYCURSOR) < 4) YYFILL(4); + yych = *YYCURSOR; + goto yy156; +yy156: switch(yych){ + case '.': goto yy136; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy155; + case 'E': case 'e': goto yy139; + case 'L': case 'U': case 'l': case 'u': goto yy162; + default: goto yy7; + } +yy157: yych = *++YYCURSOR; + switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': goto yy158; + default: goto yy107; + } +yy158: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy159; +yy159: switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': goto yy158; + case 'L': case 'U': case 'l': case 'u': goto yy160; + default: goto yy7; + } +yy160: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy161; +yy161: switch(yych){ + case 'L': case 'U': case 'l': case 'u': goto yy160; + default: goto yy7; + } +yy162: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy163; +yy163: switch(yych){ + case 'L': case 'U': case 'l': case 'u': goto yy162; + default: goto yy7; + } +yy164: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy166; + default: goto yy165; + } +yy165: +#line 142 "cunroll.re" +{ RET(ID); } +#line 1237 "" +yy166: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy168; + default: goto yy167; + } +yy167: +#line 143 "cunroll.re" +{ RET(ID); } +#line 1305 "" +yy168: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy170; + default: goto yy169; + } +yy169: +#line 144 "cunroll.re" +{ RET(ID); } +#line 1373 "" +yy170: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy172; + default: goto yy171; + } +yy171: +#line 145 "cunroll.re" +{ RET(ID); } +#line 1441 "" +yy172: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy174; + default: goto yy173; + } +yy173: +#line 146 "cunroll.re" +{ RET(ID); } +#line 1509 "" +yy174: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy176; + default: goto yy175; + } +yy175: +#line 147 "cunroll.re" +{ RET(ID); } +#line 1577 "" +yy176: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy178; + default: goto yy177; + } +yy177: +#line 148 "cunroll.re" +{ RET(ID); } +#line 1645 "" +yy178: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy179; +yy179: switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case '_': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy178; + default: goto yy180; + } +yy180: +#line 149 "cunroll.re" +{ RET(ID); } +#line 1717 "" +yy181: ++YYCURSOR; + goto yy182; +yy182: +#line 167 "cunroll.re" +{ RET(DIVEQ); } +#line 1723 "" +yy183: ++YYCURSOR; + goto yy184; +yy184: +#line 138 "cunroll.re" +{ goto comment; } +#line 1729 "" +} +#line 223 "cunroll.re" + + +comment: + +#line 1733 "" +{ + YYCTYPE yych; + unsigned int yyaccept; + goto yy185; +yy186: ++YYCURSOR; +yy185: + if((YYLIMIT - YYCURSOR) < 8) YYFILL(8); + yych = *YYCURSOR; + switch(yych){ + case 0x0A: goto yy189; + case '*': goto yy187; + case '/': goto yy193; + default: goto yy191; + } +yy187: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '/': goto yy208; + default: goto yy188; + } +yy188: +#line 242 "cunroll.re" +{ goto comment; } +#line 1756 "" +yy189: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '*': case '/': goto yy190; + default: goto yy194; + } +yy190: +#line 229 "cunroll.re" +{ + if(cursor == s->eof) RET(EOI); + s->tok = s->pos = cursor; s->line++; + goto comment; + } +#line 1769 "" +yy191: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '*': case '/': goto yy192; + default: goto yy194; + } +yy192: +#line 234 "cunroll.re" +{ goto comment; } +#line 1778 "" +yy193: yych = *++YYCURSOR; + goto yy188; +yy194: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '*': case '/': goto yy195; + default: goto yy196; + } +yy195: +#line 235 "cunroll.re" +{ goto comment; } +#line 1789 "" +yy196: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '*': case '/': goto yy197; + default: goto yy198; + } +yy197: +#line 236 "cunroll.re" +{ goto comment; } +#line 1798 "" +yy198: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '*': case '/': goto yy199; + default: goto yy200; + } +yy199: +#line 237 "cunroll.re" +{ goto comment; } +#line 1807 "" +yy200: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '*': case '/': goto yy201; + default: goto yy202; + } +yy201: +#line 238 "cunroll.re" +{ goto comment; } +#line 1816 "" +yy202: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '*': case '/': goto yy203; + default: goto yy204; + } +yy203: +#line 239 "cunroll.re" +{ goto comment; } +#line 1825 "" +yy204: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '*': case '/': goto yy205; + default: goto yy206; + } +yy205: +#line 240 "cunroll.re" +{ goto comment; } +#line 1834 "" +yy206: ++YYCURSOR; + goto yy207; +yy207: +#line 241 "cunroll.re" +{ goto comment; } +#line 1840 "" +yy208: ++YYCURSOR; + goto yy209; +yy209: +#line 227 "cunroll.re" +{ goto std; } +#line 1846 "" +} +#line 243 "cunroll.re" + +} + +main(){ + Scanner in; + int t; + memset((char*) &in, 0, sizeof(in)); + in.fd = 0; + while((t = scan(&in)) != EOI){ +/* + printf("%d\t%.*s\n", t, in.cur - in.tok, in.tok); + printf("%d\n", t); +*/ + } + close(in.fd); +} diff --git a/test/cunroll.re b/test/cunroll.re new file mode 100644 index 00000000..dd9d8054 --- /dev/null +++ b/test/cunroll.re @@ -0,0 +1,258 @@ +#include +#include +#include + +#define ADDEQ 257 +#define ANDAND 258 +#define ANDEQ 259 +#define ARRAY 260 +#define ASM 261 +#define AUTO 262 +#define BREAK 263 +#define CASE 264 +#define CHAR 265 +#define CONST 266 +#define CONTINUE 267 +#define DECR 268 +#define DEFAULT 269 +#define DEREF 270 +#define DIVEQ 271 +#define DO 272 +#define DOUBLE 273 +#define ELLIPSIS 274 +#define ELSE 275 +#define ENUM 276 +#define EQL 277 +#define EXTERN 278 +#define FCON 279 +#define FLOAT 280 +#define FOR 281 +#define FUNCTION 282 +#define GEQ 283 +#define GOTO 284 +#define ICON 285 +#define ID 286 +#define IF 287 +#define INCR 288 +#define INT 289 +#define LEQ 290 +#define LONG 291 +#define LSHIFT 292 +#define LSHIFTEQ 293 +#define MODEQ 294 +#define MULEQ 295 +#define NEQ 296 +#define OREQ 297 +#define OROR 298 +#define POINTER 299 +#define REGISTER 300 +#define RETURN 301 +#define RSHIFT 302 +#define RSHIFTEQ 303 +#define SCON 304 +#define SHORT 305 +#define SIGNED 306 +#define SIZEOF 307 +#define STATIC 308 +#define STRUCT 309 +#define SUBEQ 310 +#define SWITCH 311 +#define TYPEDEF 312 +#define UNION 313 +#define UNSIGNED 314 +#define VOID 315 +#define VOLATILE 316 +#define WHILE 317 +#define XOREQ 318 +#define EOI 319 + +typedef unsigned int uint; +typedef unsigned char uchar; + +#define BSIZE 8192 + +#define YYCTYPE uchar +#define YYCURSOR cursor +#define YYLIMIT s->lim +#define YYMARKER s->ptr +#define YYFILL(n) {cursor = fill(s, cursor);} + +#define RET(i) {s->cur = cursor; return i;} + +typedef struct Scanner { + int fd; + uchar *bot, *tok, *ptr, *cur, *pos, *lim, *top, *eof; + uint line; +} Scanner; + +uchar *fill(Scanner *s, uchar *cursor){ + if(!s->eof){ + uint cnt = s->tok - s->bot; + if(cnt){ + memcpy(s->bot, s->tok, s->lim - s->tok); + s->tok = s->bot; + s->ptr -= cnt; + cursor -= cnt; + s->pos -= cnt; + s->lim -= cnt; + } + if((s->top - s->lim) < BSIZE){ + uchar *buf = (uchar*) malloc(((s->lim - s->bot) + BSIZE)*sizeof(uchar)); + memcpy(buf, s->tok, s->lim - s->tok); + s->tok = buf; + s->ptr = &buf[s->ptr - s->bot]; + cursor = &buf[cursor - s->bot]; + s->pos = &buf[s->pos - s->bot]; + s->lim = &buf[s->lim - s->bot]; + s->top = &s->lim[BSIZE]; + free(s->bot); + s->bot = buf; + } + if((cnt = read(s->fd, (char*) s->lim, BSIZE)) != BSIZE){ + s->eof = &s->lim[cnt]; *(s->eof)++ = '\n'; + } + s->lim += cnt; + } + return cursor; +} + +int scan(Scanner *s){ + uchar *cursor = s->cur; +std: + s->tok = cursor; +/*!re2c +any = [\000-\377]; +O = [0-7]; +D = [0-9]; +L = [a-zA-Z_]; +I = L|D; +H = [a-fA-F0-9]; +E = [Ee] [+-]? D+; +FS = [fFlL]; +IS = [uUlL]*; +ESC = [\\] ([abfnrtv?'"\\] | "x" H+ | O+); +X = any\[*/]; +*/ + +/*!re2c + "/*" { goto comment; } + + + L { RET(ID); } + L I { RET(ID); } + L I I { RET(ID); } + L I I I { RET(ID); } + L I I I I { RET(ID); } + L I I I I I { RET(ID); } + L I I I I I I { RET(ID); } + L I I I I I I I { RET(ID); } + L I* { RET(ID); } + + ("0" [xX] H+ IS?) | ("0" D+ IS?) | (D+ IS?) | + (['] (ESC|any\[\n\\'])* [']) + { RET(ICON); } + + (D+ E FS?) | (D* "." D+ E? FS?) | (D+ "." D* E? FS?) + { RET(FCON); } + + (["] (ESC|any\[\n\\"])* ["]) + { RET(SCON); } + + "..." { RET(ELLIPSIS); } + ">>=" { RET(RSHIFTEQ); } + "<<=" { RET(LSHIFTEQ); } + "+=" { RET(ADDEQ); } + "-=" { RET(SUBEQ); } + "*=" { RET(MULEQ); } + "/=" { RET(DIVEQ); } + "%=" { RET(MODEQ); } + "&=" { RET(ANDEQ); } + "^=" { RET(XOREQ); } + "|=" { RET(OREQ); } + ">>" { RET(RSHIFT); } + "<<" { RET(LSHIFT); } + "++" { RET(INCR); } + "--" { RET(DECR); } + "->" { RET(DEREF); } + "&&" { RET(ANDAND); } + "||" { RET(OROR); } + "<=" { RET(LEQ); } + ">=" { RET(GEQ); } + "==" { RET(EQL); } + "!=" { RET(NEQ); } + ";" { RET(';'); } + "{" { RET('{'); } + "}" { RET('}'); } + "," { RET(','); } + ":" { RET(':'); } + "=" { RET('='); } + "(" { RET('('); } + ")" { RET(')'); } + "[" { RET('['); } + "]" { RET(']'); } + "." { RET('.'); } + "&" { RET('&'); } + "!" { RET('!'); } + "~" { RET('~'); } + "-" { RET('-'); } + "+" { RET('+'); } + "*" { RET('*'); } + "/" { RET('/'); } + "%" { RET('%'); } + "<" { RET('<'); } + ">" { RET('>'); } + "^" { RET('^'); } + "|" { RET('|'); } + "?" { RET('?'); } + + + [ \t\v\f]+ { goto std; } + + "\n" + { + if(cursor == s->eof) RET(EOI); + s->pos = cursor; s->line++; + goto std; + } + + any + { + printf("unexpected character: %c\n", *s->tok); + goto std; + } +*/ + +comment: +/*!re2c + "*/" { goto std; } + "\n" + { + if(cursor == s->eof) RET(EOI); + s->tok = s->pos = cursor; s->line++; + goto comment; + } + X { goto comment; } + X X { goto comment; } + X X X { goto comment; } + X X X X { goto comment; } + X X X X X { goto comment; } + X X X X X X { goto comment; } + X X X X X X X { goto comment; } + X X X X X X X X { goto comment; } + any { goto comment; } +*/ +} + +main(){ + Scanner in; + int t; + memset((char*) &in, 0, sizeof(in)); + in.fd = 0; + while((t = scan(&in)) != EOI){ +/* + printf("%d\t%.*s\n", t, in.cur - in.tok, in.tok); + printf("%d\n", t); +*/ + } + close(in.fd); +} diff --git a/test/input1.c b/test/input1.c new file mode 100644 index 00000000..d5156992 --- /dev/null +++ b/test/input1.c @@ -0,0 +1,55 @@ + +#line 1 "input1.re" + +#line 6 "" +{ + YYCTYPE yych; + unsigned int yyaccept; + goto yy0; +yy1: ++YYCURSOR; +yy0: + if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); + yych = *YYCURSOR; + switch(yych){ + case 'a': goto yy2; + default: goto yy4; + } +yy2: yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + switch(yych){ + case 'b': goto yy5; + default: goto yy3; + } +yy3: +#line 4 "input1.re" +{ return 0; } +#line 28 "" +yy4: yych = *++YYCURSOR; + goto yy3; +yy5: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy6; +yy6: switch(yych){ + case 'b': goto yy5; + case 'c': goto yy8; + default: goto yy7; + } +yy7: YYCURSOR = YYMARKER; + switch(yyaccept){ + case 0: goto yy3; + } +yy8: yych = *++YYCURSOR; + switch(yych){ + case 'c': goto yy9; + default: goto yy7; + } +yy9: ++YYCURSOR; + goto yy10; +yy10: +#line 3 "input1.re" +{ return 1; } +#line 55 "" +} +#line 6 "input1.re" + diff --git a/test/input1.re b/test/input1.re new file mode 100644 index 00000000..0a6890d5 --- /dev/null +++ b/test/input1.re @@ -0,0 +1,6 @@ +/*!re2c + +[a][b]+ "cc" { return 1; } +[\000-\377] { return 0; } + +*/ diff --git a/test/input2.c b/test/input2.c new file mode 100644 index 00000000..70763826 --- /dev/null +++ b/test/input2.c @@ -0,0 +1,39 @@ + +#line 1 "input2.re" + +#line 6 "" +{ + YYCTYPE yych; + unsigned int yyaccept; + goto yy0; +yy1: ++YYCURSOR; +yy0: + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + switch(yych){ + case 'a': goto yy3; + default: goto yy2; + } +yy2:yy3: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy4; +yy4: switch(yych){ + case 'a': goto yy3; + case 'b': goto yy5; + default: goto yy2; + } +yy5: yych = *++YYCURSOR; + switch(yych){ + case 'b': goto yy6; + default: goto yy2; + } +yy6: ++YYCURSOR; + goto yy7; +yy7: +#line 3 "input2.re" +{ return 1; } +#line 39 "" +} +#line 5 "input2.re" + diff --git a/test/input2.re b/test/input2.re new file mode 100644 index 00000000..6df25196 --- /dev/null +++ b/test/input2.re @@ -0,0 +1,5 @@ +/*!re2c + +[a]+ "bb" { return 1; } + +*/ diff --git a/test/input3.c b/test/input3.c new file mode 100644 index 00000000..f3a80ae1 --- /dev/null +++ b/test/input3.c @@ -0,0 +1,39 @@ + +#line 1 "input3.re" + +#line 6 "" +{ + YYCTYPE yych; + unsigned int yyaccept; + goto yy0; +yy1: ++YYCURSOR; +yy0: + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + switch(yych){ + case 'a': goto yy3; + default: goto yy2; + } +yy2:yy3: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy4; +yy4: switch(yych){ + case 'a': goto yy3; + case 'b': goto yy5; + default: goto yy2; + } +yy5: yych = *++YYCURSOR; + switch(yych){ + case 'b': goto yy6; + default: goto yy2; + } +yy6: ++YYCURSOR; + goto yy7; +yy7: +#line 3 "input3.re" +{ return 1; } +#line 39 "" +} +#line 5 "input3.re" + diff --git a/test/input3.re b/test/input3.re new file mode 100644 index 00000000..18a6e7d1 --- /dev/null +++ b/test/input3.re @@ -0,0 +1,5 @@ +/*!re2c + +"a" [a]* "bb" { return 1; } + +*/ diff --git a/test/modula.c b/test/modula.c new file mode 100644 index 00000000..485dcbec --- /dev/null +++ b/test/modula.c @@ -0,0 +1,4120 @@ + +#line 1 "modula.re" +#include +#include +#include + +typedef unsigned int uint; +typedef unsigned char uchar; + +#define BSIZE 8192 + +#define YYCTYPE uchar +#define YYCURSOR cursor +#define YYLIMIT s->lim +#define YYMARKER s->ptr +#define YYFILL {cursor = fill(s, cursor);} + +#define RETURN(i) {s->cur = cursor; return i;} + +typedef struct Scanner { + int fd; + uchar *bot, *tok, *ptr, *cur, *pos, *lim, *top, *eof; + uint line; +} Scanner; + +uchar *fill(Scanner *s, uchar *cursor){ + if(!s->eof){ + uint cnt = s->tok - s->bot; + if(cnt){ + memcpy(s->bot, s->tok, s->lim - s->tok); + s->tok = s->bot; + s->ptr -= cnt; + cursor -= cnt; + s->pos -= cnt; + s->lim -= cnt; + } + if((s->top - s->lim) < BSIZE){ + uchar *buf = (uchar*) malloc(((s->lim - s->bot) + BSIZE)*sizeof(uchar)); + memcpy(buf, s->tok, s->lim - s->tok); + s->tok = buf; + s->ptr = &buf[s->ptr - s->bot]; + cursor = &buf[cursor - s->bot]; + s->pos = &buf[s->pos - s->bot]; + s->lim = &buf[s->lim - s->bot]; + s->top = &s->lim[BSIZE]; + free(s->bot); + s->bot = buf; + } + if((cnt = read(s->fd, (char*) s->lim, BSIZE)) != BSIZE){ + s->eof = &s->lim[cnt]; *(s->eof)++ = '\n'; + } + s->lim += cnt; + } + return cursor; +} + +int scan(Scanner *s){ + uchar *cursor = s->cur; + uint depth; +std: + s->tok = cursor; +#line 64 "modula.re" + + + +#line 7 "" +{ + YYCTYPE yych; + unsigned int yyaccept; + goto yy0; +yy1: ++YYCURSOR; +yy0: + if((YYLIMIT - YYCURSOR) < 15) YYFILL(15); + yych = *YYCURSOR; + switch(yych){ + case 0x09: case ' ': goto yy73; + case 0x0A: goto yy75; + case '"': goto yy9; + case '#': goto yy10; + case '&': goto yy12; + case '\'': goto yy7; + case '(': goto yy2; + case ')': goto yy14; + case '*': goto yy16; + case '+': goto yy18; + case ',': goto yy20; + case '-': goto yy22; + case '.': goto yy24; + case '/': goto yy26; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': goto yy4; + case '8': + case '9': goto yy6; + case ':': goto yy28; + case ';': goto yy30; + case '<': goto yy32; + case '=': goto yy34; + case '>': goto yy36; + case 'A': goto yy52; + case 'B': goto yy54; + case 'C': goto yy55; + case 'D': goto yy56; + case 'E': goto yy57; + case 'F': goto yy58; + case 'G': + case 'H': case 'J': + case 'K': case 'X': + case 'Y': + case 'Z': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy72; + case 'I': goto yy59; + case 'L': goto yy60; + case 'M': goto yy61; + case 'N': goto yy62; + case 'O': goto yy63; + case 'P': goto yy64; + case 'Q': goto yy65; + case 'R': goto yy66; + case 'S': goto yy67; + case 'T': goto yy68; + case 'U': goto yy69; + case 'V': goto yy70; + case 'W': goto yy71; + case '[': goto yy38; + case ']': goto yy40; + case '^': goto yy42; + case '{': goto yy44; + case '|': goto yy46; + case '}': goto yy48; + case '~': goto yy50; + default: goto yy77; + } +yy2: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '*': goto yy297; + default: goto yy3; + } +yy3: +#line 79 "modula.re" +{RETURN(9);} +#line 112 "" +yy4: yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + goto yy292; +yy5: +#line 69 "modula.re" +{RETURN(1);} +#line 119 "" +yy6: yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + goto yy278; +yy7: yyaccept = 1; + yych = *(YYMARKER = ++YYCURSOR); + switch(yych){ + case 0x0A: goto yy8; + default: goto yy274; + } +yy8: +#line 158 "modula.re" +{ + printf("unexpected character: %c\n", *s->tok); + goto std; + } +#line 135 "" +yy9: yyaccept = 1; + yych = *(YYMARKER = ++YYCURSOR); + switch(yych){ + case 0x0A: goto yy8; + default: goto yy269; + } +yy10: ++YYCURSOR; + goto yy11; +yy11: +#line 77 "modula.re" +{RETURN(7);} +#line 147 "" +yy12: ++YYCURSOR; + goto yy13; +yy13: +#line 78 "modula.re" +{RETURN(8);} +#line 153 "" +yy14: ++YYCURSOR; + goto yy15; +yy15: +#line 80 "modula.re" +{RETURN(10);} +#line 159 "" +yy16: ++YYCURSOR; + goto yy17; +yy17: +#line 81 "modula.re" +{RETURN(11);} +#line 165 "" +yy18: ++YYCURSOR; + goto yy19; +yy19: +#line 82 "modula.re" +{RETURN(12);} +#line 171 "" +yy20: ++YYCURSOR; + goto yy21; +yy21: +#line 83 "modula.re" +{RETURN(13);} +#line 177 "" +yy22: ++YYCURSOR; + goto yy23; +yy23: +#line 84 "modula.re" +{RETURN(14);} +#line 183 "" +yy24: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '.': goto yy266; + default: goto yy25; + } +yy25: +#line 85 "modula.re" +{RETURN(15);} +#line 192 "" +yy26: ++YYCURSOR; + goto yy27; +yy27: +#line 87 "modula.re" +{RETURN(17);} +#line 198 "" +yy28: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '=': goto yy264; + default: goto yy29; + } +yy29: +#line 88 "modula.re" +{RETURN(18);} +#line 207 "" +yy30: ++YYCURSOR; + goto yy31; +yy31: +#line 90 "modula.re" +{RETURN(20);} +#line 213 "" +yy32: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '=': goto yy262; + case '>': goto yy260; + default: goto yy33; + } +yy33: +#line 91 "modula.re" +{RETURN(21);} +#line 223 "" +yy34: ++YYCURSOR; + goto yy35; +yy35: +#line 94 "modula.re" +{RETURN(24);} +#line 229 "" +yy36: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '=': goto yy258; + default: goto yy37; + } +yy37: +#line 95 "modula.re" +{RETURN(25);} +#line 238 "" +yy38: ++YYCURSOR; + goto yy39; +yy39: +#line 97 "modula.re" +{RETURN(27);} +#line 244 "" +yy40: ++YYCURSOR; + goto yy41; +yy41: +#line 98 "modula.re" +{RETURN(28);} +#line 250 "" +yy42: ++YYCURSOR; + goto yy43; +yy43: +#line 99 "modula.re" +{RETURN(29);} +#line 256 "" +yy44: ++YYCURSOR; + goto yy45; +yy45: +#line 100 "modula.re" +{RETURN(30);} +#line 262 "" +yy46: ++YYCURSOR; + goto yy47; +yy47: +#line 101 "modula.re" +{RETURN(31);} +#line 268 "" +yy48: ++YYCURSOR; + goto yy49; +yy49: +#line 102 "modula.re" +{RETURN(32);} +#line 274 "" +yy50: ++YYCURSOR; + goto yy51; +yy51: +#line 103 "modula.re" +{RETURN(33);} +#line 280 "" +yy52: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case 'N': goto yy250; + case 'R': goto yy251; + default: goto yy81; + } +yy53: +#line 146 "modula.re" +{RETURN(74);} +#line 290 "" +yy54: yych = *++YYCURSOR; + switch(yych){ + case 'E': goto yy243; + case 'Y': goto yy244; + default: goto yy81; + } +yy55: yych = *++YYCURSOR; + switch(yych){ + case 'A': goto yy234; + case 'O': goto yy235; + default: goto yy81; + } +yy56: yych = *++YYCURSOR; + switch(yych){ + case 'E': goto yy219; + case 'I': goto yy220; + case 'O': goto yy221; + default: goto yy81; + } +yy57: yych = *++YYCURSOR; + switch(yych){ + case 'L': goto yy200; + case 'N': goto yy201; + case 'X': goto yy202; + default: goto yy81; + } +yy58: yych = *++YYCURSOR; + switch(yych){ + case 'O': goto yy193; + case 'R': goto yy194; + default: goto yy81; + } +yy59: yych = *++YYCURSOR; + switch(yych){ + case 'F': goto yy171; + case 'M': goto yy173; + case 'N': goto yy174; + default: goto yy81; + } +yy60: yych = *++YYCURSOR; + switch(yych){ + case 'O': goto yy167; + default: goto yy81; + } +yy61: yych = *++YYCURSOR; + switch(yych){ + case 'O': goto yy160; + default: goto yy81; + } +yy62: yych = *++YYCURSOR; + switch(yych){ + case 'O': goto yy157; + default: goto yy81; + } +yy63: yych = *++YYCURSOR; + switch(yych){ + case 'F': goto yy153; + case 'R': goto yy155; + default: goto yy81; + } +yy64: yych = *++YYCURSOR; + switch(yych){ + case 'O': goto yy137; + case 'R': goto yy138; + default: goto yy81; + } +yy65: yych = *++YYCURSOR; + switch(yych){ + case 'U': goto yy128; + default: goto yy81; + } +yy66: yych = *++YYCURSOR; + switch(yych){ + case 'E': goto yy112; + default: goto yy81; + } +yy67: yych = *++YYCURSOR; + switch(yych){ + case 'E': goto yy109; + default: goto yy81; + } +yy68: yych = *++YYCURSOR; + switch(yych){ + case 'H': goto yy99; + case 'O': goto yy100; + case 'Y': goto yy102; + default: goto yy81; + } +yy69: yych = *++YYCURSOR; + switch(yych){ + case 'N': goto yy94; + default: goto yy81; + } +yy70: yych = *++YYCURSOR; + switch(yych){ + case 'A': goto yy91; + default: goto yy81; + } +yy71: yych = *++YYCURSOR; + switch(yych){ + case 'H': goto yy82; + case 'I': goto yy83; + default: goto yy81; + } +yy72: yych = *++YYCURSOR; + goto yy81; +yy73: ++YYCURSOR; + yych = *YYCURSOR; + goto yy79; +yy74: +#line 148 "modula.re" +{ goto std; } +#line 402 "" +yy75: ++YYCURSOR; + goto yy76; +yy76: +#line 151 "modula.re" +{ + if(cursor == s->eof) RETURN(0); + s->pos = cursor; s->line++; + goto std; + } +#line 412 "" +yy77: yych = *++YYCURSOR; + goto yy8; +yy78: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy79; +yy79: switch(yych){ + case 0x09: case ' ': goto yy78; + default: goto yy74; + } +yy80: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy81; +yy81: switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy80; + default: goto yy53; + } +yy82: yych = *++YYCURSOR; + switch(yych){ + case 'I': goto yy87; + default: goto yy81; + } +yy83: yych = *++YYCURSOR; + switch(yych){ + case 'T': goto yy84; + default: goto yy81; + } +yy84: yych = *++YYCURSOR; + switch(yych){ + case 'H': goto yy85; + default: goto yy81; + } +yy85: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy80; + default: goto yy86; + } +yy86: +#line 144 "modula.re" +{RETURN(73);} +#line 574 "" +yy87: yych = *++YYCURSOR; + switch(yych){ + case 'L': goto yy88; + default: goto yy81; + } +yy88: yych = *++YYCURSOR; + switch(yych){ + case 'E': goto yy89; + default: goto yy81; + } +yy89: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy80; + default: goto yy90; + } +yy90: +#line 143 "modula.re" +{RETURN(72);} +#line 652 "" +yy91: yych = *++YYCURSOR; + switch(yych){ + case 'R': goto yy92; + default: goto yy81; + } +yy92: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy80; + default: goto yy93; + } +yy93: +#line 142 "modula.re" +{RETURN(71);} +#line 725 "" +yy94: yych = *++YYCURSOR; + switch(yych){ + case 'T': goto yy95; + default: goto yy81; + } +yy95: yych = *++YYCURSOR; + switch(yych){ + case 'I': goto yy96; + default: goto yy81; + } +yy96: yych = *++YYCURSOR; + switch(yych){ + case 'L': goto yy97; + default: goto yy81; + } +yy97: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy80; + default: goto yy98; + } +yy98: +#line 141 "modula.re" +{RETURN(70);} +#line 808 "" +yy99: yych = *++YYCURSOR; + switch(yych){ + case 'E': goto yy106; + default: goto yy81; + } +yy100: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy80; + default: goto yy101; + } +yy101: +#line 139 "modula.re" +{RETURN(68);} +#line 881 "" +yy102: yych = *++YYCURSOR; + switch(yych){ + case 'P': goto yy103; + default: goto yy81; + } +yy103: yych = *++YYCURSOR; + switch(yych){ + case 'E': goto yy104; + default: goto yy81; + } +yy104: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy80; + default: goto yy105; + } +yy105: +#line 140 "modula.re" +{RETURN(69);} +#line 959 "" +yy106: yych = *++YYCURSOR; + switch(yych){ + case 'N': goto yy107; + default: goto yy81; + } +yy107: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy80; + default: goto yy108; + } +yy108: +#line 138 "modula.re" +{RETURN(67);} +#line 1032 "" +yy109: yych = *++YYCURSOR; + switch(yych){ + case 'T': goto yy110; + default: goto yy81; + } +yy110: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy80; + default: goto yy111; + } +yy111: +#line 137 "modula.re" +{RETURN(66);} +#line 1105 "" +yy112: yych = *++YYCURSOR; + switch(yych){ + case 'C': goto yy113; + case 'P': goto yy114; + case 'T': goto yy115; + default: goto yy81; + } +yy113: yych = *++YYCURSOR; + switch(yych){ + case 'O': goto yy124; + default: goto yy81; + } +yy114: yych = *++YYCURSOR; + switch(yych){ + case 'E': goto yy120; + default: goto yy81; + } +yy115: yych = *++YYCURSOR; + switch(yych){ + case 'U': goto yy116; + default: goto yy81; + } +yy116: yych = *++YYCURSOR; + switch(yych){ + case 'R': goto yy117; + default: goto yy81; + } +yy117: yych = *++YYCURSOR; + switch(yych){ + case 'N': goto yy118; + default: goto yy81; + } +yy118: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy80; + default: goto yy119; + } +yy119: +#line 136 "modula.re" +{RETURN(65);} +#line 1205 "" +yy120: yych = *++YYCURSOR; + switch(yych){ + case 'A': goto yy121; + default: goto yy81; + } +yy121: yych = *++YYCURSOR; + switch(yych){ + case 'T': goto yy122; + default: goto yy81; + } +yy122: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy80; + default: goto yy123; + } +yy123: +#line 135 "modula.re" +{RETURN(64);} +#line 1283 "" +yy124: yych = *++YYCURSOR; + switch(yych){ + case 'R': goto yy125; + default: goto yy81; + } +yy125: yych = *++YYCURSOR; + switch(yych){ + case 'D': goto yy126; + default: goto yy81; + } +yy126: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy80; + default: goto yy127; + } +yy127: +#line 134 "modula.re" +{RETURN(63);} +#line 1361 "" +yy128: yych = *++YYCURSOR; + switch(yych){ + case 'A': goto yy129; + default: goto yy81; + } +yy129: yych = *++YYCURSOR; + switch(yych){ + case 'L': goto yy130; + default: goto yy81; + } +yy130: yych = *++YYCURSOR; + switch(yych){ + case 'I': goto yy131; + default: goto yy81; + } +yy131: yych = *++YYCURSOR; + switch(yych){ + case 'F': goto yy132; + default: goto yy81; + } +yy132: yych = *++YYCURSOR; + switch(yych){ + case 'I': goto yy133; + default: goto yy81; + } +yy133: yych = *++YYCURSOR; + switch(yych){ + case 'E': goto yy134; + default: goto yy81; + } +yy134: yych = *++YYCURSOR; + switch(yych){ + case 'D': goto yy135; + default: goto yy81; + } +yy135: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy80; + default: goto yy136; + } +yy136: +#line 133 "modula.re" +{RETURN(62);} +#line 1464 "" +yy137: yych = *++YYCURSOR; + switch(yych){ + case 'I': goto yy147; + default: goto yy81; + } +yy138: yych = *++YYCURSOR; + switch(yych){ + case 'O': goto yy139; + default: goto yy81; + } +yy139: yych = *++YYCURSOR; + switch(yych){ + case 'C': goto yy140; + default: goto yy81; + } +yy140: yych = *++YYCURSOR; + switch(yych){ + case 'E': goto yy141; + default: goto yy81; + } +yy141: yych = *++YYCURSOR; + switch(yych){ + case 'D': goto yy142; + default: goto yy81; + } +yy142: yych = *++YYCURSOR; + switch(yych){ + case 'U': goto yy143; + default: goto yy81; + } +yy143: yych = *++YYCURSOR; + switch(yych){ + case 'R': goto yy144; + default: goto yy81; + } +yy144: yych = *++YYCURSOR; + switch(yych){ + case 'E': goto yy145; + default: goto yy81; + } +yy145: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy80; + default: goto yy146; + } +yy146: +#line 132 "modula.re" +{RETURN(61);} +#line 1572 "" +yy147: yych = *++YYCURSOR; + switch(yych){ + case 'N': goto yy148; + default: goto yy81; + } +yy148: yych = *++YYCURSOR; + switch(yych){ + case 'T': goto yy149; + default: goto yy81; + } +yy149: yych = *++YYCURSOR; + switch(yych){ + case 'E': goto yy150; + default: goto yy81; + } +yy150: yych = *++YYCURSOR; + switch(yych){ + case 'R': goto yy151; + default: goto yy81; + } +yy151: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy80; + default: goto yy152; + } +yy152: +#line 131 "modula.re" +{RETURN(60);} +#line 1660 "" +yy153: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy80; + default: goto yy154; + } +yy154: +#line 129 "modula.re" +{RETURN(58);} +#line 1728 "" +yy155: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy80; + default: goto yy156; + } +yy156: +#line 130 "modula.re" +{RETURN(59);} +#line 1796 "" +yy157: yych = *++YYCURSOR; + switch(yych){ + case 'T': goto yy158; + default: goto yy81; + } +yy158: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy80; + default: goto yy159; + } +yy159: +#line 128 "modula.re" +{RETURN(57);} +#line 1869 "" +yy160: yych = *++YYCURSOR; + switch(yych){ + case 'D': goto yy161; + default: goto yy81; + } +yy161: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy80; + case 'U': goto yy163; + default: goto yy162; + } +yy162: +#line 126 "modula.re" +{RETURN(55);} +#line 1941 "" +yy163: yych = *++YYCURSOR; + switch(yych){ + case 'L': goto yy164; + default: goto yy81; + } +yy164: yych = *++YYCURSOR; + switch(yych){ + case 'E': goto yy165; + default: goto yy81; + } +yy165: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy80; + default: goto yy166; + } +yy166: +#line 127 "modula.re" +{RETURN(56);} +#line 2019 "" +yy167: yych = *++YYCURSOR; + switch(yych){ + case 'O': goto yy168; + default: goto yy81; + } +yy168: yych = *++YYCURSOR; + switch(yych){ + case 'P': goto yy169; + default: goto yy81; + } +yy169: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy80; + default: goto yy170; + } +yy170: +#line 125 "modula.re" +{RETURN(54);} +#line 2097 "" +yy171: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy80; + default: goto yy172; + } +yy172: +#line 121 "modula.re" +{RETURN(50);} +#line 2165 "" +yy173: yych = *++YYCURSOR; + switch(yych){ + case 'P': goto yy176; + default: goto yy81; + } +yy174: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy80; + default: goto yy175; + } +yy175: +#line 124 "modula.re" +{RETURN(53);} +#line 2238 "" +yy176: yych = *++YYCURSOR; + switch(yych){ + case 'L': goto yy177; + case 'O': goto yy178; + default: goto yy81; + } +yy177: yych = *++YYCURSOR; + switch(yych){ + case 'E': goto yy182; + default: goto yy81; + } +yy178: yych = *++YYCURSOR; + switch(yych){ + case 'R': goto yy179; + default: goto yy81; + } +yy179: yych = *++YYCURSOR; + switch(yych){ + case 'T': goto yy180; + default: goto yy81; + } +yy180: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy80; + default: goto yy181; + } +yy181: +#line 123 "modula.re" +{RETURN(52);} +#line 2327 "" +yy182: yych = *++YYCURSOR; + switch(yych){ + case 'M': goto yy183; + default: goto yy81; + } +yy183: yych = *++YYCURSOR; + switch(yych){ + case 'E': goto yy184; + default: goto yy81; + } +yy184: yych = *++YYCURSOR; + switch(yych){ + case 'N': goto yy185; + default: goto yy81; + } +yy185: yych = *++YYCURSOR; + switch(yych){ + case 'T': goto yy186; + default: goto yy81; + } +yy186: yych = *++YYCURSOR; + switch(yych){ + case 'A': goto yy187; + default: goto yy81; + } +yy187: yych = *++YYCURSOR; + switch(yych){ + case 'T': goto yy188; + default: goto yy81; + } +yy188: yych = *++YYCURSOR; + switch(yych){ + case 'I': goto yy189; + default: goto yy81; + } +yy189: yych = *++YYCURSOR; + switch(yych){ + case 'O': goto yy190; + default: goto yy81; + } +yy190: yych = *++YYCURSOR; + switch(yych){ + case 'N': goto yy191; + default: goto yy81; + } +yy191: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy80; + default: goto yy192; + } +yy192: +#line 122 "modula.re" +{RETURN(51);} +#line 2440 "" +yy193: yych = *++YYCURSOR; + switch(yych){ + case 'R': goto yy198; + default: goto yy81; + } +yy194: yych = *++YYCURSOR; + switch(yych){ + case 'O': goto yy195; + default: goto yy81; + } +yy195: yych = *++YYCURSOR; + switch(yych){ + case 'M': goto yy196; + default: goto yy81; + } +yy196: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy80; + default: goto yy197; + } +yy197: +#line 120 "modula.re" +{RETURN(49);} +#line 2523 "" +yy198: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy80; + default: goto yy199; + } +yy199: +#line 119 "modula.re" +{RETURN(48);} +#line 2591 "" +yy200: yych = *++YYCURSOR; + switch(yych){ + case 'S': goto yy213; + default: goto yy81; + } +yy201: yych = *++YYCURSOR; + switch(yych){ + case 'D': goto yy211; + default: goto yy81; + } +yy202: yych = *++YYCURSOR; + switch(yych){ + case 'I': goto yy203; + case 'P': goto yy204; + default: goto yy81; + } +yy203: yych = *++YYCURSOR; + switch(yych){ + case 'T': goto yy209; + default: goto yy81; + } +yy204: yych = *++YYCURSOR; + switch(yych){ + case 'O': goto yy205; + default: goto yy81; + } +yy205: yych = *++YYCURSOR; + switch(yych){ + case 'R': goto yy206; + default: goto yy81; + } +yy206: yych = *++YYCURSOR; + switch(yych){ + case 'T': goto yy207; + default: goto yy81; + } +yy207: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy80; + default: goto yy208; + } +yy208: +#line 118 "modula.re" +{RETURN(47);} +#line 2695 "" +yy209: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy80; + default: goto yy210; + } +yy210: +#line 117 "modula.re" +{RETURN(46);} +#line 2763 "" +yy211: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy80; + default: goto yy212; + } +yy212: +#line 116 "modula.re" +{RETURN(45);} +#line 2831 "" +yy213: yych = *++YYCURSOR; + switch(yych){ + case 'E': goto yy214; + case 'I': goto yy216; + default: goto yy81; + } +yy214: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy80; + default: goto yy215; + } +yy215: +#line 114 "modula.re" +{RETURN(43);} +#line 2905 "" +yy216: yych = *++YYCURSOR; + switch(yych){ + case 'F': goto yy217; + default: goto yy81; + } +yy217: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy80; + default: goto yy218; + } +yy218: +#line 115 "modula.re" +{RETURN(44);} +#line 2978 "" +yy219: yych = *++YYCURSOR; + switch(yych){ + case 'F': goto yy225; + default: goto yy81; + } +yy220: yych = *++YYCURSOR; + switch(yych){ + case 'V': goto yy223; + default: goto yy81; + } +yy221: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy80; + default: goto yy222; + } +yy222: +#line 113 "modula.re" +{RETURN(42);} +#line 3056 "" +yy223: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy80; + default: goto yy224; + } +yy224: +#line 112 "modula.re" +{RETURN(41);} +#line 3124 "" +yy225: yych = *++YYCURSOR; + switch(yych){ + case 'I': goto yy226; + default: goto yy81; + } +yy226: yych = *++YYCURSOR; + switch(yych){ + case 'N': goto yy227; + default: goto yy81; + } +yy227: yych = *++YYCURSOR; + switch(yych){ + case 'I': goto yy228; + default: goto yy81; + } +yy228: yych = *++YYCURSOR; + switch(yych){ + case 'T': goto yy229; + default: goto yy81; + } +yy229: yych = *++YYCURSOR; + switch(yych){ + case 'I': goto yy230; + default: goto yy81; + } +yy230: yych = *++YYCURSOR; + switch(yych){ + case 'O': goto yy231; + default: goto yy81; + } +yy231: yych = *++YYCURSOR; + switch(yych){ + case 'N': goto yy232; + default: goto yy81; + } +yy232: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy80; + default: goto yy233; + } +yy233: +#line 111 "modula.re" +{RETURN(40);} +#line 3227 "" +yy234: yych = *++YYCURSOR; + switch(yych){ + case 'S': goto yy240; + default: goto yy81; + } +yy235: yych = *++YYCURSOR; + switch(yych){ + case 'N': goto yy236; + default: goto yy81; + } +yy236: yych = *++YYCURSOR; + switch(yych){ + case 'S': goto yy237; + default: goto yy81; + } +yy237: yych = *++YYCURSOR; + switch(yych){ + case 'T': goto yy238; + default: goto yy81; + } +yy238: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy80; + default: goto yy239; + } +yy239: +#line 110 "modula.re" +{RETURN(39);} +#line 3315 "" +yy240: yych = *++YYCURSOR; + switch(yych){ + case 'E': goto yy241; + default: goto yy81; + } +yy241: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy80; + default: goto yy242; + } +yy242: +#line 109 "modula.re" +{RETURN(38);} +#line 3388 "" +yy243: yych = *++YYCURSOR; + switch(yych){ + case 'G': goto yy246; + default: goto yy81; + } +yy244: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy80; + default: goto yy245; + } +yy245: +#line 108 "modula.re" +{RETURN(37);} +#line 3461 "" +yy246: yych = *++YYCURSOR; + switch(yych){ + case 'I': goto yy247; + default: goto yy81; + } +yy247: yych = *++YYCURSOR; + switch(yych){ + case 'N': goto yy248; + default: goto yy81; + } +yy248: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy80; + default: goto yy249; + } +yy249: +#line 107 "modula.re" +{RETURN(36);} +#line 3539 "" +yy250: yych = *++YYCURSOR; + switch(yych){ + case 'D': goto yy256; + default: goto yy81; + } +yy251: yych = *++YYCURSOR; + switch(yych){ + case 'R': goto yy252; + default: goto yy81; + } +yy252: yych = *++YYCURSOR; + switch(yych){ + case 'A': goto yy253; + default: goto yy81; + } +yy253: yych = *++YYCURSOR; + switch(yych){ + case 'Y': goto yy254; + default: goto yy81; + } +yy254: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy80; + default: goto yy255; + } +yy255: +#line 106 "modula.re" +{RETURN(35);} +#line 3627 "" +yy256: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy80; + default: goto yy257; + } +yy257: +#line 105 "modula.re" +{RETURN(34);} +#line 3695 "" +yy258: ++YYCURSOR; + goto yy259; +yy259: +#line 96 "modula.re" +{RETURN(26);} +#line 3701 "" +yy260: ++YYCURSOR; + goto yy261; +yy261: +#line 93 "modula.re" +{RETURN(23);} +#line 3707 "" +yy262: ++YYCURSOR; + goto yy263; +yy263: +#line 92 "modula.re" +{RETURN(22);} +#line 3713 "" +yy264: ++YYCURSOR; + goto yy265; +yy265: +#line 89 "modula.re" +{RETURN(19);} +#line 3719 "" +yy266: ++YYCURSOR; + goto yy267; +yy267: +#line 86 "modula.re" +{RETURN(16);} +#line 3725 "" +yy268: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy269; +yy269: switch(yych){ + case 0x0A: goto yy270; + case '"': goto yy271; + default: goto yy268; + } +yy270: YYCURSOR = YYMARKER; + switch(yyaccept){ + case 0: goto yy5; + case 3: goto yy294; + case 4: goto yy296; + case 2: goto yy276; + case 1: goto yy8; + } +yy271: ++YYCURSOR; + goto yy272; +yy272: +#line 75 "modula.re" +{RETURN(6);} +#line 3749 "" +yy273: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy274; +yy274: switch(yych){ + case 0x0A: goto yy270; + case '\'': goto yy271; + default: goto yy273; + } +yy275: yyaccept = 2; + yych = *(YYMARKER = ++YYCURSOR); + switch(yych){ + case '.': goto yy283; + default: goto yy286; + } +yy276: +#line 74 "modula.re" +{RETURN(5);} +#line 3769 "" +yy277: yyaccept = 0; + YYMARKER = ++YYCURSOR; + if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); + yych = *YYCURSOR; + goto yy278; +yy278: switch(yych){ + case '.': goto yy275; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy277; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': goto yy279; + case 'H': goto yy281; + default: goto yy5; + } +yy279: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy280; +yy280: switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': goto yy279; + case 'H': goto yy281; + default: goto yy270; + } +yy281: ++YYCURSOR; + goto yy282; +yy282: +#line 73 "modula.re" +{RETURN(4);} +#line 3825 "" +yy283: ++YYCURSOR; + goto yy284; +yy284: YYCURSOR -= 2; +#line 70 "modula.re" +{RETURN(1);} +#line 3831 "" +yy285: yyaccept = 2; + YYMARKER = ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy286; +yy286: switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy285; + case 'E': goto yy287; + default: goto yy276; + } +yy287: yych = *++YYCURSOR; + switch(yych){ + case '+': case '-': goto yy288; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy289; + default: goto yy270; + } +yy288: yych = *++YYCURSOR; + switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy289; + default: goto yy270; + } +yy289: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy290; +yy290: switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy289; + default: goto yy276; + } +yy291: yyaccept = 0; + YYMARKER = ++YYCURSOR; + if((YYLIMIT - YYCURSOR) < 4) YYFILL(4); + yych = *YYCURSOR; + goto yy292; +yy292: switch(yych){ + case '.': goto yy275; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': goto yy291; + case '8': + case '9': goto yy277; + case 'A': case 'D': + case 'E': + case 'F': goto yy279; + case 'B': goto yy293; + case 'C': goto yy295; + case 'H': goto yy281; + default: goto yy5; + } +yy293: yyaccept = 3; + yych = *(YYMARKER = ++YYCURSOR); + switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': goto yy279; + case 'H': goto yy281; + default: goto yy294; + } +yy294: +#line 71 "modula.re" +{RETURN(2);} +#line 3947 "" +yy295: yyaccept = 4; + yych = *(YYMARKER = ++YYCURSOR); + switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': goto yy279; + case 'H': goto yy281; + default: goto yy296; + } +yy296: +#line 72 "modula.re" +{RETURN(3);} +#line 3972 "" +yy297: ++YYCURSOR; + goto yy298; +yy298: +#line 67 "modula.re" +{ depth = 1; goto comment; } +#line 3978 "" +} +#line 162 "modula.re" + +comment: + +#line 3982 "" +{ + YYCTYPE yych; + unsigned int yyaccept; + goto yy299; +yy300: ++YYCURSOR; +yy299: + if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); + yych = *YYCURSOR; + switch(yych){ + case 0x0A: goto yy304; + case '(': goto yy303; + case '*': goto yy301; + default: goto yy306; + } +yy301: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case ')': goto yy309; + default: goto yy302; + } +yy302: +#line 179 "modula.re" +{ goto comment; } +#line 4005 "" +yy303: yych = *++YYCURSOR; + switch(yych){ + case '*': goto yy307; + default: goto yy302; + } +yy304: ++YYCURSOR; + goto yy305; +yy305: +#line 174 "modula.re" +{ + if(cursor == s->eof) RETURN(0); + s->tok = s->pos = cursor; s->line++; + goto comment; + } +#line 4020 "" +yy306: yych = *++YYCURSOR; + goto yy302; +yy307: ++YYCURSOR; + goto yy308; +yy308: +#line 172 "modula.re" +{ ++depth; goto comment; } +#line 4028 "" +yy309: ++YYCURSOR; + goto yy310; +yy310: +#line 166 "modula.re" +{ + if(--depth == 0) + goto std; + else + goto comment; + } +#line 4039 "" +} +#line 180 "modula.re" + +} + +/* +void putStr(FILE *o, char *s, uint l){ + while(l-- > 0) + putc(*s++, o); +} +*/ + +main(){ + Scanner in; + memset((char*) &in, 0, sizeof(in)); + in.fd = 0; + while(scan(&in)){ +/* + putc('<', stdout); + putStr(stdout, (char*) in.tok, in.cur - in.tok); + putc('>', stdout); + putc('\n', stdout); +*/ + } +} diff --git a/test/modula.re b/test/modula.re new file mode 100644 index 00000000..0468ba4e --- /dev/null +++ b/test/modula.re @@ -0,0 +1,202 @@ +#include +#include +#include + +typedef unsigned int uint; +typedef unsigned char uchar; + +#define BSIZE 8192 + +#define YYCTYPE uchar +#define YYCURSOR cursor +#define YYLIMIT s->lim +#define YYMARKER s->ptr +#define YYFILL {cursor = fill(s, cursor);} + +#define RETURN(i) {s->cur = cursor; return i;} + +typedef struct Scanner { + int fd; + uchar *bot, *tok, *ptr, *cur, *pos, *lim, *top, *eof; + uint line; +} Scanner; + +uchar *fill(Scanner *s, uchar *cursor){ + if(!s->eof){ + uint cnt = s->tok - s->bot; + if(cnt){ + memcpy(s->bot, s->tok, s->lim - s->tok); + s->tok = s->bot; + s->ptr -= cnt; + cursor -= cnt; + s->pos -= cnt; + s->lim -= cnt; + } + if((s->top - s->lim) < BSIZE){ + uchar *buf = (uchar*) malloc(((s->lim - s->bot) + BSIZE)*sizeof(uchar)); + memcpy(buf, s->tok, s->lim - s->tok); + s->tok = buf; + s->ptr = &buf[s->ptr - s->bot]; + cursor = &buf[cursor - s->bot]; + s->pos = &buf[s->pos - s->bot]; + s->lim = &buf[s->lim - s->bot]; + s->top = &s->lim[BSIZE]; + free(s->bot); + s->bot = buf; + } + if((cnt = read(s->fd, (char*) s->lim, BSIZE)) != BSIZE){ + s->eof = &s->lim[cnt]; *(s->eof)++ = '\n'; + } + s->lim += cnt; + } + return cursor; +} + +int scan(Scanner *s){ + uchar *cursor = s->cur; + uint depth; +std: + s->tok = cursor; +/*!re2c +any = [\000-\377]; +digit = [0-9]; +letter = [a-zA-Z]; +*/ + +/*!re2c + "(*" { depth = 1; goto comment; } + + digit + {RETURN(1);} + digit + / ".." {RETURN(1);} + [0-7] + "B" {RETURN(2);} + [0-7] + "C" {RETURN(3);} + digit [0-9A-F] * "H" {RETURN(4);} + digit + "." digit * ("E" ([+-]) ? digit +) ? {RETURN(5);} + ['] (any\[\n']) * ['] | ["] (any\[\n"]) * ["] {RETURN(6);} + + "#" {RETURN(7);} + "&" {RETURN(8);} + "(" {RETURN(9);} + ")" {RETURN(10);} + "*" {RETURN(11);} + "+" {RETURN(12);} + "," {RETURN(13);} + "-" {RETURN(14);} + "." {RETURN(15);} + ".." {RETURN(16);} + "/" {RETURN(17);} + ":" {RETURN(18);} + ":=" {RETURN(19);} + ";" {RETURN(20);} + "<" {RETURN(21);} + "<=" {RETURN(22);} + "<>" {RETURN(23);} + "=" {RETURN(24);} + ">" {RETURN(25);} + ">=" {RETURN(26);} + "[" {RETURN(27);} + "]" {RETURN(28);} + "^" {RETURN(29);} + "{" {RETURN(30);} + "|" {RETURN(31);} + "}" {RETURN(32);} + "~" {RETURN(33);} + + "AND" {RETURN(34);} + "ARRAY" {RETURN(35);} + "BEGIN" {RETURN(36);} + "BY" {RETURN(37);} + "CASE" {RETURN(38);} + "CONST" {RETURN(39);} + "DEFINITION" {RETURN(40);} + "DIV" {RETURN(41);} + "DO" {RETURN(42);} + "ELSE" {RETURN(43);} + "ELSIF" {RETURN(44);} + "END" {RETURN(45);} + "EXIT" {RETURN(46);} + "EXPORT" {RETURN(47);} + "FOR" {RETURN(48);} + "FROM" {RETURN(49);} + "IF" {RETURN(50);} + "IMPLEMENTATION" {RETURN(51);} + "IMPORT" {RETURN(52);} + "IN" {RETURN(53);} + "LOOP" {RETURN(54);} + "MOD" {RETURN(55);} + "MODULE" {RETURN(56);} + "NOT" {RETURN(57);} + "OF" {RETURN(58);} + "OR" {RETURN(59);} + "POINTER" {RETURN(60);} + "PROCEDURE" {RETURN(61);} + "QUALIFIED" {RETURN(62);} + "RECORD" {RETURN(63);} + "REPEAT" {RETURN(64);} + "RETURN" {RETURN(65);} + "SET" {RETURN(66);} + "THEN" {RETURN(67);} + "TO" {RETURN(68);} + "TYPE" {RETURN(69);} + "UNTIL" {RETURN(70);} + "VAR" {RETURN(71);} + "WHILE" {RETURN(72);} + "WITH" {RETURN(73);} + + letter (letter | digit) * {RETURN(74);} + + [ \t]+ { goto std; } + + "\n" + { + if(cursor == s->eof) RETURN(0); + s->pos = cursor; s->line++; + goto std; + } + + any + { + printf("unexpected character: %c\n", *s->tok); + goto std; + } +*/ +comment: +/*!re2c + "*)" + { + if(--depth == 0) + goto std; + else + goto comment; + } + "(*" { ++depth; goto comment; } + "\n" + { + if(cursor == s->eof) RETURN(0); + s->tok = s->pos = cursor; s->line++; + goto comment; + } + any { goto comment; } +*/ +} + +/* +void putStr(FILE *o, char *s, uint l){ + while(l-- > 0) + putc(*s++, o); +} +*/ + +main(){ + Scanner in; + memset((char*) &in, 0, sizeof(in)); + in.fd = 0; + while(scan(&in)){ +/* + putc('<', stdout); + putStr(stdout, (char*) in.tok, in.cur - in.tok); + putc('>', stdout); + putc('\n', stdout); +*/ + } +} diff --git a/test/repeater.c b/test/repeater.c new file mode 100644 index 00000000..95503f16 --- /dev/null +++ b/test/repeater.c @@ -0,0 +1,143 @@ + +#line 1 "repeater.re" +#include +#include +#include + +#define RET(n) printf("%d\n", n); return n + +int scan(char *s, int l){ +char *p = s; +char *q; +#define YYCTYPE char +#define YYCURSOR p +#define YYLIMIT (s+l) +#define YYMARKER q +#define YYFILL(n) + +#line 6 "" +{ + YYCTYPE yych; + unsigned int yyaccept; + goto yy0; +yy1: ++YYCURSOR; +yy0: + if((YYLIMIT - YYCURSOR) < 7) YYFILL(7); + yych = *YYCURSOR; + switch(yych){ + case 0x0A: case '^': case 'q': goto yy6; + case 'A': goto yy3; + case 'a': goto yy4; + default: goto yy2; + } +yy2: YYCURSOR = YYMARKER; + switch(yyaccept){ + case 0: goto yy5; + } +yy3: yych = *++YYCURSOR; + switch(yych){ + case 0x0A: goto yy8; + case 'A': case 'a': goto yy7; + default: goto yy2; + } +yy4: yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + switch(yych){ + case 0x0A: goto yy8; + case 'A': case 'a': goto yy7; + default: goto yy5; + } +yy5: +#line 20 "repeater.re" +{RET(0);} +#line 41 "" +yy6: yych = *++YYCURSOR; + goto yy5; +yy7: yych = *++YYCURSOR; + switch(yych){ + case 0x0A: goto yy11; + case 'A': case 'a': goto yy10; + default: goto yy2; + } +yy8: ++YYCURSOR; + goto yy9; +yy9: +#line 16 "repeater.re" +{RET(1);} +#line 55 "" +yy10: yych = *++YYCURSOR; + switch(yych){ + case 0x0A: goto yy11; + case 'A': case 'a': goto yy13; + default: goto yy2; + } +yy11: ++YYCURSOR; + goto yy12; +yy12: +#line 17 "repeater.re" +{RET(2);} +#line 67 "" +yy13: yych = *++YYCURSOR; + switch(yych){ + case 0x0A: goto yy15; + case 'A': case 'a': goto yy14; + default: goto yy2; + } +yy14: yych = *++YYCURSOR; + switch(yych){ + case 0x0A: goto yy15; + case 'A': case 'a': goto yy17; + default: goto yy2; + } +yy15: ++YYCURSOR; + goto yy16; +yy16: +#line 19 "repeater.re" +{RET(3);} +#line 85 "" +yy17: yych = *++YYCURSOR; + switch(yych){ + case 0x0A: goto yy18; + default: goto yy21; + } +yy18: ++YYCURSOR; + goto yy19; +yy19: +#line 18 "repeater.re" +{RET(4);} +#line 96 "" +yy20: ++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; + } +} +#line 21 "repeater.re" + +} + +#define do_scan(str) scan(str, strlen(str)) + +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"); +} diff --git a/test/repeater.re b/test/repeater.re new file mode 100644 index 00000000..05c4c884 --- /dev/null +++ b/test/repeater.re @@ -0,0 +1,44 @@ +#include +#include +#include + +#define RET(n) printf("%d\n", n); return n + +int scan(char *s, int l){ +char *p = s; +char *q; +#define YYCTYPE char +#define YYCURSOR p +#define YYLIMIT (s+l) +#define YYMARKER q +#define YYFILL(n) +/*!re2c + 'a'{1}"\n" {RET(1);} + 'a'{2,3}"\n" {RET(2);} + 'a'{6}"\n" {RET(4);} + 'a'{4,}"\n" {RET(3);} + [^aq]|"\n" {RET(0);} +*/ +} + +#define do_scan(str) scan(str, strlen(str)) + +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"); +} diff --git a/test/run_tests.sh.in b/test/run_tests.sh.in new file mode 100644 index 00000000..dd179133 --- /dev/null +++ b/test/run_tests.sh.in @@ -0,0 +1,14 @@ +#!/bin/sh +for x in @srcdir@/test/*.re; do + echo $x + # don't use the -o flag, since it makes it harder to diff. + @builddir@/re2c $x | sed -e "s,$x,`basename $x`,g" -e "s,/\* Generated by re2c .*\*/,,g" > ${x%.re}.temp + if diff ${x%.re}.c ${x%.re}.temp; then + echo "Passed." + rm ${x%.re}.temp + else + echo "Failed." + exit 1 + fi +done + diff --git a/test/sample.c b/test/sample.c new file mode 100644 index 00000000..4d943e1c --- /dev/null +++ b/test/sample.c @@ -0,0 +1,230 @@ + +#line 1 "sample.re" + +#line 6 "" +{ + YYCTYPE yych; + unsigned int yyaccept; + goto yy0; +yy1: ++YYCURSOR; +yy0: + if((YYLIMIT - YYCURSOR) < 6) YYFILL(6); + yych = *YYCURSOR; + switch(yych){ + case '0': goto yy5; + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy7; + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy4; + case 'p': goto yy2; + default: goto yy8; + } +yy2: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case 'r': goto yy19; + default: goto yy18; + } +yy3: +#line 3 "sample.re" +{return ID;} +#line 61 "" +yy4: yych = *++YYCURSOR; + goto yy18; +yy5: yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + switch(yych){ + case 'x': goto yy12; + default: goto yy11; + } +yy6: +#line 4 "sample.re" +{return DEC;} +#line 73 "" +yy7: yych = *++YYCURSOR; + goto yy11; +yy8: ++YYCURSOR; + goto yy9; +yy9: +#line 6 "sample.re" +{return ERR;} +#line 81 "" +yy10: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy11; +yy11: switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy10; + default: goto yy6; + } +yy12: yych = *++YYCURSOR; + switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': goto yy14; + default: goto yy13; + } +yy13: YYCURSOR = YYMARKER; + switch(yyaccept){ + case 0: goto yy6; + } +yy14: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy15; +yy15: switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': goto yy14; + default: goto yy16; + } +yy16: +#line 5 "sample.re" +{return HEX;} +#line 149 "" +yy17: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy18; +yy18: switch(yych){ + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy17; + default: goto yy3; + } +yy19: yych = *++YYCURSOR; + switch(yych){ + case 'i': goto yy20; + default: goto yy18; + } +yy20: yych = *++YYCURSOR; + switch(yych){ + case 'n': goto yy21; + default: goto yy18; + } +yy21: yych = *++YYCURSOR; + switch(yych){ + case 't': goto yy22; + default: goto yy18; + } +yy22: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy17; + default: goto yy23; + } +yy23: +#line 2 "sample.re" +{return PRINT;} +#line 232 "" +} +#line 7 "sample.re" + diff --git a/test/sample.re b/test/sample.re new file mode 100644 index 00000000..2f497a3b --- /dev/null +++ b/test/sample.re @@ -0,0 +1,7 @@ +/*!re2c + "print" {return PRINT;} + [a-z]+ {return ID;} + [0-9]+ {return DEC;} + "0x" [0-9a-f]+ {return HEX;} + [\000-\377] {return ERR;} +*/ diff --git a/test/scanner.c b/test/scanner.c new file mode 100644 index 00000000..29b397e9 --- /dev/null +++ b/test/scanner.c @@ -0,0 +1,760 @@ + +#line 1 "scanner.re" +/* $Id$ */ +#include +#include +#include +#include "scanner.h" +#include "parser.h" +#include "y.tab.h" + +extern YYSTYPE yylval; + +#ifndef MAX +#define MAX(a,b) (((a)>(b))?(a):(b)) +#endif + +#define BSIZE 8192 + +#define YYCTYPE char +#define YYCURSOR cursor +#define YYLIMIT lim +#define YYMARKER ptr +#define YYFILL(n) {cursor = fill(cursor);} + +#define RETURN(i) {cur = cursor; return i;} + + +Scanner::Scanner(std::istream& 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) { + ; +} + +char *Scanner::fill(char *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){ + char *buf = new char[(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 = in.rdbuf()->sgetn((char*) lim, BSIZE)) != BSIZE){ + eof = &lim[cnt]; *eof++ = '\n'; + } + lim += cnt; + } + return cursor; +} + +#line 72 "scanner.re" + + +int Scanner::echo(std::ostream &out){ + char *cursor = cur; + + // Catch EOF + if (eof && cursor == eof) + return 0; + + tok = cursor; +echo: + +#line 7 "" +{ + YYCTYPE yych; + unsigned int yyaccept; + goto yy0; +yy1: ++YYCURSOR; +yy0: + if((YYLIMIT - YYCURSOR) < 7) YYFILL(7); + yych = *YYCURSOR; + switch(yych){ + case 0x0A: goto yy4; + case '/': goto yy2; + default: goto yy6; + } +yy2: yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + switch(yych){ + case '*': goto yy7; + default: goto yy3; + } +yy3: +#line 91 "scanner.re" +{ goto echo; } +#line 30 "" +yy4: ++YYCURSOR; + goto yy5; +yy5: +#line 87 "scanner.re" +{ if(cursor == eof) RETURN(0); + out.write((const char*)(tok), (const char*)(cursor) - (const char*)(tok)); + tok = pos = cursor; cline++; + goto echo; } +#line 39 "" +yy6: yych = *++YYCURSOR; + goto yy3; +yy7: yych = *++YYCURSOR; + switch(yych){ + case '!': goto yy9; + default: goto yy8; + } +yy8: YYCURSOR = YYMARKER; + switch(yyaccept){ + case 0: goto yy3; + } +yy9: yych = *++YYCURSOR; + switch(yych){ + case 'r': goto yy10; + default: goto yy8; + } +yy10: yych = *++YYCURSOR; + switch(yych){ + case 'e': goto yy11; + default: goto yy8; + } +yy11: yych = *++YYCURSOR; + switch(yych){ + case '2': goto yy12; + default: goto yy8; + } +yy12: yych = *++YYCURSOR; + switch(yych){ + case 'c': goto yy13; + default: goto yy8; + } +yy13: ++YYCURSOR; + goto yy14; +yy14: +#line 84 "scanner.re" +{ out.write((const char*)(tok), (const char*)(&cursor[-7]) - (const char*)(tok)); + tok = cursor; + RETURN(1); } +#line 78 "" +} +#line 92 "scanner.re" + +} + + +int Scanner::scan(){ + char *cursor = cur; + uint depth; + +scan: + tchar = cursor - pos; + tline = cline; + tok = cursor; + +#line 82 "" +{ + YYCTYPE yych; + unsigned int yyaccept; + goto yy15; +yy16: ++YYCURSOR; +yy15: + if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); + yych = *YYCURSOR; + switch(yych){ + case 0x09: case ' ': goto yy33; + case 0x0A: goto yy35; + case '"': goto yy23; + case '\'': goto yy25; + case '(': + case ')': case ';': case '=': case '\\': case '|': goto yy29; + case '*': goto yy21; + case '+': case '?': goto yy30; + case '/': goto yy19; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy31; + case '[': goto yy27; + case '{': goto yy17; + default: goto yy37; + } +yy17: yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy63; + default: goto yy18; + } +yy18: +#line 105 "scanner.re" +{ depth = 1; + goto code; + } +#line 176 "" +yy19: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '*': goto yy61; + default: goto yy20; + } +yy20: +#line 131 "scanner.re" +{ RETURN(*tok); } +#line 185 "" +yy21: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '/': goto yy59; + default: goto yy22; + } +yy22: +#line 133 "scanner.re" +{ yylval.op = *tok; + RETURN(CLOSE); } +#line 195 "" +yy23: yyaccept = 1; + yych = *(YYMARKER = ++YYCURSOR); + switch(yych){ + case 0x0A: goto yy24; + default: goto yy55; + } +yy24: +#line 122 "scanner.re" +{ fatal("unterminated string constant (missing \")"); } +#line 205 "" +yy25: yyaccept = 2; + yych = *(YYMARKER = ++YYCURSOR); + switch(yych){ + case 0x0A: goto yy26; + default: goto yy50; + } +yy26: +#line 123 "scanner.re" +{ fatal("unterminated string constant (missing ')"); } +#line 215 "" +yy27: yyaccept = 3; + yych = *(YYMARKER = ++YYCURSOR); + switch(yych){ + case 0x0A: goto yy28; + default: goto yy44; + } +yy28: +#line 129 "scanner.re" +{ fatal("unterminated range (missing ])"); } +#line 225 "" +yy29: yych = *++YYCURSOR; + goto yy20; +yy30: yych = *++YYCURSOR; + goto yy22; +yy31: ++YYCURSOR; + yych = *YYCURSOR; + goto yy42; +yy32: +#line 148 "scanner.re" +{ cur = cursor; + yylval.symbol = Symbol::find(token()); + return ID; } +#line 237 "" +yy33: ++YYCURSOR; + yych = *YYCURSOR; + goto yy40; +yy34: +#line 152 "scanner.re" +{ goto scan; } +#line 243 "" +yy35: ++YYCURSOR; + goto yy36; +yy36: +#line 154 "scanner.re" +{ if(cursor == eof) RETURN(0); + pos = cursor; cline++; + goto scan; + } +#line 252 "" +yy37: ++YYCURSOR; + goto yy38; +yy38: +#line 159 "scanner.re" +{ std::cerr << "unexpected character: " << *tok << std::endl; + goto scan; + } +#line 260 "" +yy39: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy40; +yy40: switch(yych){ + case 0x09: case ' ': goto yy39; + default: goto yy34; + } +yy41: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy42; +yy42: switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy41; + default: goto yy32; + } +yy43: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy44; +yy44: switch(yych){ + case 0x0A: goto yy45; + case '\\': goto yy46; + case ']': goto yy47; + default: goto yy43; + } +yy45: YYCURSOR = YYMARKER; + switch(yyaccept){ + case 0: goto yy18; + case 1: goto yy24; + case 2: goto yy26; + case 3: goto yy28; + } +yy46: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + switch(yych){ + case 0x0A: goto yy45; + default: goto yy43; + } +yy47: ++YYCURSOR; + goto yy48; +yy48: +#line 125 "scanner.re" +{ cur = cursor; + yylval.regexp = ranToRE(token()); + return RANGE; } +#line 371 "" +yy49: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy50; +yy50: switch(yych){ + case 0x0A: goto yy45; + case '\'': goto yy52; + case '\\': goto yy51; + default: goto yy49; + } +yy51: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + switch(yych){ + case 0x0A: goto yy45; + default: goto yy49; + } +yy52: ++YYCURSOR; + goto yy53; +yy53: +#line 118 "scanner.re" +{ cur = cursor; + yylval.regexp = strToCaseInsensitiveRE(token()); + return STRING; } +#line 398 "" +yy54: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy55; +yy55: switch(yych){ + case 0x0A: goto yy45; + case '"': goto yy57; + case '\\': goto yy56; + default: goto yy54; + } +yy56: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + switch(yych){ + case 0x0A: goto yy45; + default: goto yy54; + } +yy57: ++YYCURSOR; + goto yy58; +yy58: +#line 114 "scanner.re" +{ cur = cursor; + yylval.regexp = strToRE(token()); + return STRING; } +#line 425 "" +yy59: ++YYCURSOR; + goto yy60; +yy60: +#line 111 "scanner.re" +{ tok = cursor; + RETURN(0); } +#line 432 "" +yy61: ++YYCURSOR; + goto yy62; +yy62: +#line 108 "scanner.re" +{ depth = 1; + goto comment; } +#line 439 "" +yy63: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy64; +yy64: switch(yych){ + case ',': goto yy67; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy63; + case '}': goto yy65; + default: goto yy45; + } +yy65: ++YYCURSOR; + goto yy66; +yy66: +#line 136 "scanner.re" +{ yylval.extop.minsize = atoi((char *)tok+1); + yylval.extop.maxsize = atoi((char *)tok+1); + RETURN(CLOSESIZE); } +#line 467 "" +yy67: yych = *++YYCURSOR; + switch(yych){ + case '}': goto yy68; + default: goto yy71; + } +yy68: ++YYCURSOR; + goto yy69; +yy69: +#line 144 "scanner.re" +{ yylval.extop.minsize = atoi((char *)tok+1); + yylval.extop.maxsize = -1; + RETURN(CLOSESIZE); } +#line 480 "" +yy70: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy71; +yy71: switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy70; + case '}': goto yy72; + default: goto yy45; + } +yy72: ++YYCURSOR; + goto yy73; +yy73: +#line 140 "scanner.re" +{ yylval.extop.minsize = atoi((char *)tok+1); + yylval.extop.maxsize = MAX(yylval.extop.minsize,atoi(strchr((char *)tok, ',')+1)); + RETURN(CLOSESIZE); } +#line 507 "" +} +#line 162 "scanner.re" + + +code: + +#line 511 "" +{ + YYCTYPE yych; + unsigned int yyaccept; + goto yy74; +yy75: ++YYCURSOR; +yy74: + if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); + yych = *YYCURSOR; + switch(yych){ + case 0x0A: goto yy80; + case '"': goto yy84; + case '\'': goto yy85; + case '{': goto yy78; + case '}': goto yy76; + default: goto yy82; + } +yy76: ++YYCURSOR; + goto yy77; +yy77: +#line 166 "scanner.re" +{ if(--depth == 0){ + cur = cursor; + yylval.token = new Token(token(), tline); + return CODE; + } + goto code; } +#line 538 "" +yy78: ++YYCURSOR; + goto yy79; +yy79: +#line 172 "scanner.re" +{ ++depth; + goto code; } +#line 545 "" +yy80: ++YYCURSOR; + goto yy81; +yy81: +#line 174 "scanner.re" +{ if(cursor == eof) fatal("missing '}'"); + pos = cursor; cline++; + goto code; + } +#line 554 "" +yy82: ++YYCURSOR; + goto yy83; +yy83: +#line 178 "scanner.re" +{ goto code; } +#line 560 "" +yy84: yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + switch(yych){ + case 0x0A: goto yy83; + default: goto yy91; + } +yy85: yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + switch(yych){ + case 0x0A: goto yy83; + default: goto yy87; + } +yy86: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy87; +yy87: switch(yych){ + case 0x0A: goto yy88; + case '\'': goto yy82; + case '\\': goto yy89; + default: goto yy86; + } +yy88: YYCURSOR = YYMARKER; + switch(yyaccept){ + case 0: goto yy83; + } +yy89: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + switch(yych){ + case 0x0A: goto yy88; + default: goto yy86; + } +yy90: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy91; +yy91: switch(yych){ + case 0x0A: goto yy88; + case '"': goto yy82; + case '\\': goto yy92; + default: goto yy90; + } +yy92: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + switch(yych){ + case 0x0A: goto yy88; + default: goto yy90; + } +} +#line 179 "scanner.re" + + +comment: + +#line 618 "" +{ + YYCTYPE yych; + unsigned int yyaccept; + goto yy93; +yy94: ++YYCURSOR; +yy93: + if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); + yych = *YYCURSOR; + switch(yych){ + case 0x0A: goto yy98; + case '*': goto yy95; + case '/': goto yy97; + default: goto yy100; + } +yy95: ++YYCURSOR; + switch((yych = *YYCURSOR)) { + case '/': goto yy103; + default: goto yy96; + } +yy96: +#line 193 "scanner.re" +{ goto comment; } +#line 641 "" +yy97: yych = *++YYCURSOR; + switch(yych){ + case '*': goto yy101; + default: goto yy96; + } +yy98: ++YYCURSOR; + goto yy99; +yy99: +#line 189 "scanner.re" +{ if(cursor == eof) RETURN(0); + tok = pos = cursor; cline++; + goto comment; + } +#line 655 "" +yy100: yych = *++YYCURSOR; + goto yy96; +yy101: ++YYCURSOR; + goto yy102; +yy102: +#line 187 "scanner.re" +{ ++depth; + goto comment; } +#line 664 "" +yy103: ++YYCURSOR; + goto yy104; +yy104: +#line 183 "scanner.re" +{ if(--depth == 0) + goto scan; + else + goto comment; } +#line 673 "" +} +#line 194 "scanner.re" + +} + +void Scanner::fatal(char *msg){ + std::cerr << "line " << tline << ", column " << (tchar + 1) << ": " + << msg << std::endl; + exit(1); +} diff --git a/test/scanner.re b/test/scanner.re new file mode 100644 index 00000000..88a9bb8a --- /dev/null +++ b/test/scanner.re @@ -0,0 +1,201 @@ +/* $Id$ */ +#include +#include +#include +#include "scanner.h" +#include "parser.h" +#include "y.tab.h" + +extern YYSTYPE yylval; + +#ifndef MAX +#define MAX(a,b) (((a)>(b))?(a):(b)) +#endif + +#define BSIZE 8192 + +#define YYCTYPE char +#define YYCURSOR cursor +#define YYLIMIT lim +#define YYMARKER ptr +#define YYFILL(n) {cursor = fill(cursor);} + +#define RETURN(i) {cur = cursor; return i;} + + +Scanner::Scanner(std::istream& 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) { + ; +} + +char *Scanner::fill(char *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){ + char *buf = new char[(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 = in.rdbuf()->sgetn((char*) lim, BSIZE)) != BSIZE){ + eof = &lim[cnt]; *eof++ = '\n'; + } + lim += cnt; + } + return cursor; +} + +/*!re2c +any = [\000-\377]; +dot = any \ [\n]; +esc = dot \ [\\]; +cstring = "[" ((esc \ [\]]) | "\\" dot)* "]" ; +dstring = "\"" ((esc \ ["] ) | "\\" dot)* "\""; +sstring = "'" ((esc \ ['] ) | "\\" dot)* "'" ; +letter = [a-zA-Z]; +digit = [0-9]; +*/ + +int Scanner::echo(std::ostream &out){ + char *cursor = cur; + + // Catch EOF + if (eof && cursor == eof) + return 0; + + tok = cursor; +echo: +/*!re2c + "/*!re2c" { out.write((const char*)(tok), (const char*)(&cursor[-7]) - (const char*)(tok)); + tok = cursor; + RETURN(1); } + "\n" { if(cursor == eof) RETURN(0); + out.write((const char*)(tok), (const char*)(cursor) - (const char*)(tok)); + tok = pos = cursor; cline++; + goto echo; } + any { goto echo; } +*/ +} + + +int Scanner::scan(){ + char *cursor = cur; + uint depth; + +scan: + tchar = cursor - pos; + tline = cline; + tok = cursor; +/*!re2c + "{" { depth = 1; + goto code; + } + "/*" { depth = 1; + goto comment; } + + "*/" { tok = cursor; + RETURN(0); } + + dstring { cur = cursor; + yylval.regexp = strToRE(token()); + return STRING; } + + sstring { cur = cursor; + yylval.regexp = strToCaseInsensitiveRE(token()); + return STRING; } + + "\"" { fatal("unterminated string constant (missing \")"); } + "'" { fatal("unterminated string constant (missing ')"); } + + cstring { cur = cursor; + yylval.regexp = ranToRE(token()); + return RANGE; } + + "[" { fatal("unterminated range (missing ])"); } + + [()|=;/\\] { RETURN(*tok); } + + [*+?] { yylval.op = *tok; + RETURN(CLOSE); } + + "{" [0-9]+ "}" { yylval.extop.minsize = atoi((char *)tok+1); + yylval.extop.maxsize = atoi((char *)tok+1); + RETURN(CLOSESIZE); } + + "{" [0-9]+ "," [0-9]+ "}" { yylval.extop.minsize = atoi((char *)tok+1); + yylval.extop.maxsize = MAX(yylval.extop.minsize,atoi(strchr((char *)tok, ',')+1)); + RETURN(CLOSESIZE); } + + "{" [0-9]+ ",}" { yylval.extop.minsize = atoi((char *)tok+1); + yylval.extop.maxsize = -1; + RETURN(CLOSESIZE); } + + letter (letter|digit)* { cur = cursor; + yylval.symbol = Symbol::find(token()); + return ID; } + + [ \t]+ { goto scan; } + + "\n" { if(cursor == eof) RETURN(0); + pos = cursor; cline++; + goto scan; + } + + any { std::cerr << "unexpected character: " << *tok << std::endl; + goto scan; + } +*/ + +code: +/*!re2c + "}" { if(--depth == 0){ + cur = cursor; + yylval.token = new Token(token(), tline); + return CODE; + } + goto code; } + "{" { ++depth; + goto code; } + "\n" { if(cursor == eof) fatal("missing '}'"); + pos = cursor; cline++; + goto code; + } + dstring | sstring | any { goto code; } +*/ + +comment: +/*!re2c + "*/" { if(--depth == 0) + goto scan; + else + goto comment; } + "/*" { ++depth; + goto comment; } + "\n" { if(cursor == eof) RETURN(0); + tok = pos = cursor; cline++; + goto comment; + } + any { goto comment; } +*/ +} + +void Scanner::fatal(char *msg){ + std::cerr << "line " << tline << ", column " << (tchar + 1) << ": " + << msg << std::endl; + exit(1); +} diff --git a/test/simple.c b/test/simple.c new file mode 100644 index 00000000..5f254c6b --- /dev/null +++ b/test/simple.c @@ -0,0 +1,67 @@ + +#line 1 "simple.re" +#define NULL ((char*) 0) +char *scan(char *p){ +char *q; +#define YYCTYPE char +#define YYCURSOR p +#define YYLIMIT p +#define YYMARKER q +#define YYFILL(n) + +#line 6 "" +{ + YYCTYPE yych; + unsigned int yyaccept; + goto yy0; +yy1: ++YYCURSOR; +yy0: + if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); + yych = *YYCURSOR; + switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy2; + default: goto yy4; + } +yy2: ++YYCURSOR; + yych = *YYCURSOR; + goto yy7; +yy3: +#line 10 "simple.re" +{return YYCURSOR;} +#line 33 "" +yy4: ++YYCURSOR; + goto yy5; +yy5: +#line 11 "simple.re" +{return NULL;} +#line 39 "" +yy6: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy7; +yy7: switch(yych){ + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy6; + default: goto yy3; + } +} +#line 12 "simple.re" + +} diff --git a/test/simple.re b/test/simple.re new file mode 100644 index 00000000..5fd8891f --- /dev/null +++ b/test/simple.re @@ -0,0 +1,13 @@ +#define NULL ((char*) 0) +char *scan(char *p){ +char *q; +#define YYCTYPE char +#define YYCURSOR p +#define YYLIMIT p +#define YYMARKER q +#define YYFILL(n) +/*!re2c + [0-9]+ {return YYCURSOR;} + [\000-\377] {return NULL;} +*/ +}