]> granicus.if.org Git - re2c/commitdiff
Adding test suite.
authornuffer <nuffer@642ea486-5414-0410-9d7f-a0204ed87703>
Mon, 6 Sep 2004 22:09:26 +0000 (22:09 +0000)
committernuffer <nuffer@642ea486-5414-0410-9d7f-a0204ed87703>
Mon, 6 Sep 2004 22:09:26 +0000 (22:09 +0000)
28 files changed:
Makefile.am
configure.in
test/.cvsignore [new file with mode: 0644]
test/c.c [new file with mode: 0644]
test/c.re [new file with mode: 0644]
test/cmmap.c [new file with mode: 0644]
test/cmmap.re [new file with mode: 0644]
test/cnokw.c [new file with mode: 0644]
test/cnokw.re [new file with mode: 0644]
test/cunroll.c [new file with mode: 0644]
test/cunroll.re [new file with mode: 0644]
test/input1.c [new file with mode: 0644]
test/input1.re [new file with mode: 0644]
test/input2.c [new file with mode: 0644]
test/input2.re [new file with mode: 0644]
test/input3.c [new file with mode: 0644]
test/input3.re [new file with mode: 0644]
test/modula.c [new file with mode: 0644]
test/modula.re [new file with mode: 0644]
test/repeater.c [new file with mode: 0644]
test/repeater.re [new file with mode: 0644]
test/run_tests.sh.in [new file with mode: 0644]
test/sample.c [new file with mode: 0644]
test/sample.re [new file with mode: 0644]
test/scanner.c [new file with mode: 0644]
test/scanner.re [new file with mode: 0644]
test/simple.c [new file with mode: 0644]
test/simple.re [new file with mode: 0644]

index ba22761e449a7b7217bd5ec6d3627617324a4327..38466db5a3cf8f704c08346a8ff60392801adbe2 100755 (executable)
@@ -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
+
index 5733f3a0730a98447a507eda7f4efa5eeec360d8..207ba0c51ad15e85dd8c74909c09ca69f5c2702d 100644 (file)
@@ -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 (file)
index 0000000..e89b4c1
--- /dev/null
@@ -0,0 +1 @@
+run_tests.sh
diff --git a/test/c.c b/test/c.c
new file mode 100644 (file)
index 0000000..8866e54
--- /dev/null
+++ b/test/c.c
@@ -0,0 +1,4088 @@
+
+#line 1 "c.re"
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#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 "<stdout>"
+{
+       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 "<stdout>"
+yy4:   ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case 'u':       goto yy335;
+       default:        goto yy180;
+       }
+yy5:
+#line 171 "c.re"
+{ RET(ID); }
+#line 124 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+yy31:  ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '<':       goto yy110;
+       case '=':       goto yy108;
+       default:        goto yy32;
+       }
+yy32:
+#line 224 "c.re"
+{ RET('<'); }
+#line 279 "<stdout>"
+yy33:  ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '+':       goto yy104;
+       case '=':       goto yy106;
+       default:        goto yy34;
+       }
+yy34:
+#line 220 "c.re"
+{ RET('+'); }
+#line 289 "<stdout>"
+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 "<stdout>"
+yy37:  ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '=':       goto yy96;
+       default:        goto yy38;
+       }
+yy38:
+#line 221 "c.re"
+{ RET('*'); }
+#line 309 "<stdout>"
+yy39:  ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '=':       goto yy94;
+       default:        goto yy40;
+       }
+yy40:
+#line 223 "c.re"
+{ RET('%'); }
+#line 318 "<stdout>"
+yy41:  ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '&':       goto yy90;
+       case '=':       goto yy92;
+       default:        goto yy42;
+       }
+yy42:
+#line 216 "c.re"
+{ RET('&'); }
+#line 328 "<stdout>"
+yy43:  ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '=':       goto yy88;
+       default:        goto yy44;
+       }
+yy44:
+#line 226 "c.re"
+{ RET('^'); }
+#line 337 "<stdout>"
+yy45:  ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '=':       goto yy86;
+       case '|':       goto yy84;
+       default:        goto yy46;
+       }
+yy46:
+#line 227 "c.re"
+{ RET('|'); }
+#line 347 "<stdout>"
+yy47:  ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '=':       goto yy82;
+       default:        goto yy48;
+       }
+yy48:
+#line 210 "c.re"
+{ RET('='); }
+#line 356 "<stdout>"
+yy49:  ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '=':       goto yy80;
+       default:        goto yy50;
+       }
+yy50:
+#line 217 "c.re"
+{ RET('!'); }
+#line 365 "<stdout>"
+yy51:  ++YYCURSOR;
+       goto yy52;
+yy52:
+#line 205 "c.re"
+{ RET(';'); }
+#line 371 "<stdout>"
+yy53:  ++YYCURSOR;
+       goto yy54;
+yy54:
+#line 206 "c.re"
+{ RET('{'); }
+#line 377 "<stdout>"
+yy55:  ++YYCURSOR;
+       goto yy56;
+yy56:
+#line 207 "c.re"
+{ RET('}'); }
+#line 383 "<stdout>"
+yy57:  ++YYCURSOR;
+       goto yy58;
+yy58:
+#line 208 "c.re"
+{ RET(','); }
+#line 389 "<stdout>"
+yy59:  ++YYCURSOR;
+       goto yy60;
+yy60:
+#line 209 "c.re"
+{ RET(':'); }
+#line 395 "<stdout>"
+yy61:  ++YYCURSOR;
+       goto yy62;
+yy62:
+#line 211 "c.re"
+{ RET('('); }
+#line 401 "<stdout>"
+yy63:  ++YYCURSOR;
+       goto yy64;
+yy64:
+#line 212 "c.re"
+{ RET(')'); }
+#line 407 "<stdout>"
+yy65:  ++YYCURSOR;
+       goto yy66;
+yy66:
+#line 213 "c.re"
+{ RET('['); }
+#line 413 "<stdout>"
+yy67:  ++YYCURSOR;
+       goto yy68;
+yy68:
+#line 214 "c.re"
+{ RET(']'); }
+#line 419 "<stdout>"
+yy69:  ++YYCURSOR;
+       goto yy70;
+yy70:
+#line 218 "c.re"
+{ RET('~'); }
+#line 425 "<stdout>"
+yy71:  ++YYCURSOR;
+       goto yy72;
+yy72:
+#line 228 "c.re"
+{ RET('?'); }
+#line 431 "<stdout>"
+yy73:  ++YYCURSOR;
+       yych = *YYCURSOR;
+       goto yy79;
+yy74:
+#line 231 "c.re"
+{ goto std; }
+#line 437 "<stdout>"
+yy75:  ++YYCURSOR;
+       goto yy76;
+yy76:
+#line 234 "c.re"
+{
+               if(cursor == s->eof) RET(EOI);
+               s->pos = cursor; s->line++;
+               goto std;
+           }
+#line 447 "<stdout>"
+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 "<stdout>"
+yy82:  ++YYCURSOR;
+       goto yy83;
+yy83:
+#line 203 "c.re"
+{ RET(EQL); }
+#line 471 "<stdout>"
+yy84:  ++YYCURSOR;
+       goto yy85;
+yy85:
+#line 200 "c.re"
+{ RET(OROR); }
+#line 477 "<stdout>"
+yy86:  ++YYCURSOR;
+       goto yy87;
+yy87:
+#line 193 "c.re"
+{ RET(OREQ); }
+#line 483 "<stdout>"
+yy88:  ++YYCURSOR;
+       goto yy89;
+yy89:
+#line 192 "c.re"
+{ RET(XOREQ); }
+#line 489 "<stdout>"
+yy90:  ++YYCURSOR;
+       goto yy91;
+yy91:
+#line 199 "c.re"
+{ RET(ANDAND); }
+#line 495 "<stdout>"
+yy92:  ++YYCURSOR;
+       goto yy93;
+yy93:
+#line 191 "c.re"
+{ RET(ANDEQ); }
+#line 501 "<stdout>"
+yy94:  ++YYCURSOR;
+       goto yy95;
+yy95:
+#line 190 "c.re"
+{ RET(MODEQ); }
+#line 507 "<stdout>"
+yy96:  ++YYCURSOR;
+       goto yy97;
+yy97:
+#line 188 "c.re"
+{ RET(MULEQ); }
+#line 513 "<stdout>"
+yy98:  ++YYCURSOR;
+       goto yy99;
+yy99:
+#line 198 "c.re"
+{ RET(DEREF); }
+#line 519 "<stdout>"
+yy100: ++YYCURSOR;
+       goto yy101;
+yy101:
+#line 197 "c.re"
+{ RET(DECR); }
+#line 525 "<stdout>"
+yy102: ++YYCURSOR;
+       goto yy103;
+yy103:
+#line 187 "c.re"
+{ RET(SUBEQ); }
+#line 531 "<stdout>"
+yy104: ++YYCURSOR;
+       goto yy105;
+yy105:
+#line 196 "c.re"
+{ RET(INCR); }
+#line 537 "<stdout>"
+yy106: ++YYCURSOR;
+       goto yy107;
+yy107:
+#line 186 "c.re"
+{ RET(ADDEQ); }
+#line 543 "<stdout>"
+yy108: ++YYCURSOR;
+       goto yy109;
+yy109:
+#line 201 "c.re"
+{ RET(LEQ); }
+#line 549 "<stdout>"
+yy110: ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '=':       goto yy112;
+       default:        goto yy111;
+       }
+yy111:
+#line 195 "c.re"
+{ RET(LSHIFT); }
+#line 558 "<stdout>"
+yy112: ++YYCURSOR;
+       goto yy113;
+yy113:
+#line 185 "c.re"
+{ RET(LSHIFTEQ); }
+#line 564 "<stdout>"
+yy114: ++YYCURSOR;
+       goto yy115;
+yy115:
+#line 202 "c.re"
+{ RET(GEQ); }
+#line 570 "<stdout>"
+yy116: ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '=':       goto yy118;
+       default:        goto yy117;
+       }
+yy117:
+#line 194 "c.re"
+{ RET(RSHIFT); }
+#line 579 "<stdout>"
+yy118: ++YYCURSOR;
+       goto yy119;
+yy119:
+#line 184 "c.re"
+{ RET(RSHIFTEQ); }
+#line 585 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+yy339: ++YYCURSOR;
+       goto yy340;
+yy340:
+#line 189 "c.re"
+{ RET(DIVEQ); }
+#line 3914 "<stdout>"
+yy341: ++YYCURSOR;
+       goto yy342;
+yy342:
+#line 136 "c.re"
+{ goto comment; }
+#line 3920 "<stdout>"
+}
+#line 245 "c.re"
+
+
+comment:
+
+#line 3924 "<stdout>"
+{
+       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 "<stdout>"
+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 "<stdout>"
+yy349: yych = *++YYCURSOR;
+       goto yy346;
+yy350: ++YYCURSOR;
+       goto yy351;
+yy351:
+#line 249 "c.re"
+{ goto std; }
+#line 3964 "<stdout>"
+}
+#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 (file)
index 0000000..7e413e2
--- /dev/null
+++ b/test/c.re
@@ -0,0 +1,272 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#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 (file)
index 0000000..00c9d76
--- /dev/null
@@ -0,0 +1,4083 @@
+
+#line 1 "cmmap.re"
+#include <stdlib.h>
+#include <stdio.h>
+#include <sys/stat.h>
+#include <sys/mman.h>
+#include <string.h>
+
+#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 "<stdout>"
+{
+       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 "<stdout>"
+yy4:   ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case 'u':       goto yy335;
+       default:        goto yy180;
+       }
+yy5:
+#line 154 "cmmap.re"
+{ RET(ID); }
+#line 124 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+yy31:  ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '<':       goto yy110;
+       case '=':       goto yy108;
+       default:        goto yy32;
+       }
+yy32:
+#line 207 "cmmap.re"
+{ RET('<'); }
+#line 279 "<stdout>"
+yy33:  ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '+':       goto yy104;
+       case '=':       goto yy106;
+       default:        goto yy34;
+       }
+yy34:
+#line 203 "cmmap.re"
+{ RET('+'); }
+#line 289 "<stdout>"
+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 "<stdout>"
+yy37:  ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '=':       goto yy96;
+       default:        goto yy38;
+       }
+yy38:
+#line 204 "cmmap.re"
+{ RET('*'); }
+#line 309 "<stdout>"
+yy39:  ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '=':       goto yy94;
+       default:        goto yy40;
+       }
+yy40:
+#line 206 "cmmap.re"
+{ RET('%'); }
+#line 318 "<stdout>"
+yy41:  ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '&':       goto yy90;
+       case '=':       goto yy92;
+       default:        goto yy42;
+       }
+yy42:
+#line 199 "cmmap.re"
+{ RET('&'); }
+#line 328 "<stdout>"
+yy43:  ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '=':       goto yy88;
+       default:        goto yy44;
+       }
+yy44:
+#line 209 "cmmap.re"
+{ RET('^'); }
+#line 337 "<stdout>"
+yy45:  ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '=':       goto yy86;
+       case '|':       goto yy84;
+       default:        goto yy46;
+       }
+yy46:
+#line 210 "cmmap.re"
+{ RET('|'); }
+#line 347 "<stdout>"
+yy47:  ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '=':       goto yy82;
+       default:        goto yy48;
+       }
+yy48:
+#line 193 "cmmap.re"
+{ RET('='); }
+#line 356 "<stdout>"
+yy49:  ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '=':       goto yy80;
+       default:        goto yy50;
+       }
+yy50:
+#line 200 "cmmap.re"
+{ RET('!'); }
+#line 365 "<stdout>"
+yy51:  ++YYCURSOR;
+       goto yy52;
+yy52:
+#line 188 "cmmap.re"
+{ RET(';'); }
+#line 371 "<stdout>"
+yy53:  ++YYCURSOR;
+       goto yy54;
+yy54:
+#line 189 "cmmap.re"
+{ RET('{'); }
+#line 377 "<stdout>"
+yy55:  ++YYCURSOR;
+       goto yy56;
+yy56:
+#line 190 "cmmap.re"
+{ RET('}'); }
+#line 383 "<stdout>"
+yy57:  ++YYCURSOR;
+       goto yy58;
+yy58:
+#line 191 "cmmap.re"
+{ RET(','); }
+#line 389 "<stdout>"
+yy59:  ++YYCURSOR;
+       goto yy60;
+yy60:
+#line 192 "cmmap.re"
+{ RET(':'); }
+#line 395 "<stdout>"
+yy61:  ++YYCURSOR;
+       goto yy62;
+yy62:
+#line 194 "cmmap.re"
+{ RET('('); }
+#line 401 "<stdout>"
+yy63:  ++YYCURSOR;
+       goto yy64;
+yy64:
+#line 195 "cmmap.re"
+{ RET(')'); }
+#line 407 "<stdout>"
+yy65:  ++YYCURSOR;
+       goto yy66;
+yy66:
+#line 196 "cmmap.re"
+{ RET('['); }
+#line 413 "<stdout>"
+yy67:  ++YYCURSOR;
+       goto yy68;
+yy68:
+#line 197 "cmmap.re"
+{ RET(']'); }
+#line 419 "<stdout>"
+yy69:  ++YYCURSOR;
+       goto yy70;
+yy70:
+#line 201 "cmmap.re"
+{ RET('~'); }
+#line 425 "<stdout>"
+yy71:  ++YYCURSOR;
+       goto yy72;
+yy72:
+#line 211 "cmmap.re"
+{ RET('?'); }
+#line 431 "<stdout>"
+yy73:  ++YYCURSOR;
+       yych = *YYCURSOR;
+       goto yy79;
+yy74:
+#line 214 "cmmap.re"
+{ goto std; }
+#line 437 "<stdout>"
+yy75:  ++YYCURSOR;
+       goto yy76;
+yy76:
+#line 217 "cmmap.re"
+{
+               if(cursor == s->eof) RET(EOI);
+               s->pos = cursor; s->line++;
+               goto std;
+           }
+#line 447 "<stdout>"
+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 "<stdout>"
+yy82:  ++YYCURSOR;
+       goto yy83;
+yy83:
+#line 186 "cmmap.re"
+{ RET(EQL); }
+#line 471 "<stdout>"
+yy84:  ++YYCURSOR;
+       goto yy85;
+yy85:
+#line 183 "cmmap.re"
+{ RET(OROR); }
+#line 477 "<stdout>"
+yy86:  ++YYCURSOR;
+       goto yy87;
+yy87:
+#line 176 "cmmap.re"
+{ RET(OREQ); }
+#line 483 "<stdout>"
+yy88:  ++YYCURSOR;
+       goto yy89;
+yy89:
+#line 175 "cmmap.re"
+{ RET(XOREQ); }
+#line 489 "<stdout>"
+yy90:  ++YYCURSOR;
+       goto yy91;
+yy91:
+#line 182 "cmmap.re"
+{ RET(ANDAND); }
+#line 495 "<stdout>"
+yy92:  ++YYCURSOR;
+       goto yy93;
+yy93:
+#line 174 "cmmap.re"
+{ RET(ANDEQ); }
+#line 501 "<stdout>"
+yy94:  ++YYCURSOR;
+       goto yy95;
+yy95:
+#line 173 "cmmap.re"
+{ RET(MODEQ); }
+#line 507 "<stdout>"
+yy96:  ++YYCURSOR;
+       goto yy97;
+yy97:
+#line 171 "cmmap.re"
+{ RET(MULEQ); }
+#line 513 "<stdout>"
+yy98:  ++YYCURSOR;
+       goto yy99;
+yy99:
+#line 181 "cmmap.re"
+{ RET(DEREF); }
+#line 519 "<stdout>"
+yy100: ++YYCURSOR;
+       goto yy101;
+yy101:
+#line 180 "cmmap.re"
+{ RET(DECR); }
+#line 525 "<stdout>"
+yy102: ++YYCURSOR;
+       goto yy103;
+yy103:
+#line 170 "cmmap.re"
+{ RET(SUBEQ); }
+#line 531 "<stdout>"
+yy104: ++YYCURSOR;
+       goto yy105;
+yy105:
+#line 179 "cmmap.re"
+{ RET(INCR); }
+#line 537 "<stdout>"
+yy106: ++YYCURSOR;
+       goto yy107;
+yy107:
+#line 169 "cmmap.re"
+{ RET(ADDEQ); }
+#line 543 "<stdout>"
+yy108: ++YYCURSOR;
+       goto yy109;
+yy109:
+#line 184 "cmmap.re"
+{ RET(LEQ); }
+#line 549 "<stdout>"
+yy110: ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '=':       goto yy112;
+       default:        goto yy111;
+       }
+yy111:
+#line 178 "cmmap.re"
+{ RET(LSHIFT); }
+#line 558 "<stdout>"
+yy112: ++YYCURSOR;
+       goto yy113;
+yy113:
+#line 168 "cmmap.re"
+{ RET(LSHIFTEQ); }
+#line 564 "<stdout>"
+yy114: ++YYCURSOR;
+       goto yy115;
+yy115:
+#line 185 "cmmap.re"
+{ RET(GEQ); }
+#line 570 "<stdout>"
+yy116: ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '=':       goto yy118;
+       default:        goto yy117;
+       }
+yy117:
+#line 177 "cmmap.re"
+{ RET(RSHIFT); }
+#line 579 "<stdout>"
+yy118: ++YYCURSOR;
+       goto yy119;
+yy119:
+#line 167 "cmmap.re"
+{ RET(RSHIFTEQ); }
+#line 585 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+yy339: ++YYCURSOR;
+       goto yy340;
+yy340:
+#line 172 "cmmap.re"
+{ RET(DIVEQ); }
+#line 3914 "<stdout>"
+yy341: ++YYCURSOR;
+       goto yy342;
+yy342:
+#line 119 "cmmap.re"
+{ goto comment; }
+#line 3920 "<stdout>"
+}
+#line 228 "cmmap.re"
+
+
+comment:
+
+#line 3924 "<stdout>"
+{
+       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 "<stdout>"
+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 "<stdout>"
+yy349: yych = *++YYCURSOR;
+       goto yy346;
+yy350: ++YYCURSOR;
+       goto yy351;
+yy351:
+#line 232 "cmmap.re"
+{ goto std; }
+#line 3964 "<stdout>"
+}
+#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 (file)
index 0000000..bc4d498
--- /dev/null
@@ -0,0 +1,267 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <sys/stat.h>
+#include <sys/mman.h>
+#include <string.h>
+
+#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 (file)
index 0000000..fcdd728
--- /dev/null
@@ -0,0 +1,1356 @@
+
+#line 1 "cnokw.re"
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#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 "<stdout>"
+{
+       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 "<stdout>"
+yy4:   ++YYCURSOR;
+       yych = *YYCURSOR;
+       goto yy165;
+yy5:
+#line 138 "cnokw.re"
+{ RET(ID); }
+#line 124 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+yy16:  ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '<':       goto yy95;
+       case '=':       goto yy93;
+       default:        goto yy17;
+       }
+yy17:
+#line 191 "cnokw.re"
+{ RET('<'); }
+#line 197 "<stdout>"
+yy18:  ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '+':       goto yy89;
+       case '=':       goto yy91;
+       default:        goto yy19;
+       }
+yy19:
+#line 187 "cnokw.re"
+{ RET('+'); }
+#line 207 "<stdout>"
+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 "<stdout>"
+yy22:  ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '=':       goto yy81;
+       default:        goto yy23;
+       }
+yy23:
+#line 188 "cnokw.re"
+{ RET('*'); }
+#line 227 "<stdout>"
+yy24:  ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '=':       goto yy79;
+       default:        goto yy25;
+       }
+yy25:
+#line 190 "cnokw.re"
+{ RET('%'); }
+#line 236 "<stdout>"
+yy26:  ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '&':       goto yy75;
+       case '=':       goto yy77;
+       default:        goto yy27;
+       }
+yy27:
+#line 183 "cnokw.re"
+{ RET('&'); }
+#line 246 "<stdout>"
+yy28:  ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '=':       goto yy73;
+       default:        goto yy29;
+       }
+yy29:
+#line 193 "cnokw.re"
+{ RET('^'); }
+#line 255 "<stdout>"
+yy30:  ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '=':       goto yy71;
+       case '|':       goto yy69;
+       default:        goto yy31;
+       }
+yy31:
+#line 194 "cnokw.re"
+{ RET('|'); }
+#line 265 "<stdout>"
+yy32:  ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '=':       goto yy67;
+       default:        goto yy33;
+       }
+yy33:
+#line 177 "cnokw.re"
+{ RET('='); }
+#line 274 "<stdout>"
+yy34:  ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '=':       goto yy65;
+       default:        goto yy35;
+       }
+yy35:
+#line 184 "cnokw.re"
+{ RET('!'); }
+#line 283 "<stdout>"
+yy36:  ++YYCURSOR;
+       goto yy37;
+yy37:
+#line 172 "cnokw.re"
+{ RET(';'); }
+#line 289 "<stdout>"
+yy38:  ++YYCURSOR;
+       goto yy39;
+yy39:
+#line 173 "cnokw.re"
+{ RET('{'); }
+#line 295 "<stdout>"
+yy40:  ++YYCURSOR;
+       goto yy41;
+yy41:
+#line 174 "cnokw.re"
+{ RET('}'); }
+#line 301 "<stdout>"
+yy42:  ++YYCURSOR;
+       goto yy43;
+yy43:
+#line 175 "cnokw.re"
+{ RET(','); }
+#line 307 "<stdout>"
+yy44:  ++YYCURSOR;
+       goto yy45;
+yy45:
+#line 176 "cnokw.re"
+{ RET(':'); }
+#line 313 "<stdout>"
+yy46:  ++YYCURSOR;
+       goto yy47;
+yy47:
+#line 178 "cnokw.re"
+{ RET('('); }
+#line 319 "<stdout>"
+yy48:  ++YYCURSOR;
+       goto yy49;
+yy49:
+#line 179 "cnokw.re"
+{ RET(')'); }
+#line 325 "<stdout>"
+yy50:  ++YYCURSOR;
+       goto yy51;
+yy51:
+#line 180 "cnokw.re"
+{ RET('['); }
+#line 331 "<stdout>"
+yy52:  ++YYCURSOR;
+       goto yy53;
+yy53:
+#line 181 "cnokw.re"
+{ RET(']'); }
+#line 337 "<stdout>"
+yy54:  ++YYCURSOR;
+       goto yy55;
+yy55:
+#line 185 "cnokw.re"
+{ RET('~'); }
+#line 343 "<stdout>"
+yy56:  ++YYCURSOR;
+       goto yy57;
+yy57:
+#line 195 "cnokw.re"
+{ RET('?'); }
+#line 349 "<stdout>"
+yy58:  ++YYCURSOR;
+       yych = *YYCURSOR;
+       goto yy64;
+yy59:
+#line 198 "cnokw.re"
+{ goto std; }
+#line 355 "<stdout>"
+yy60:  ++YYCURSOR;
+       goto yy61;
+yy61:
+#line 201 "cnokw.re"
+{
+               if(cursor == s->eof) RET(EOI);
+               s->pos = cursor; s->line++;
+               goto std;
+           }
+#line 365 "<stdout>"
+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 "<stdout>"
+yy67:  ++YYCURSOR;
+       goto yy68;
+yy68:
+#line 170 "cnokw.re"
+{ RET(EQL); }
+#line 389 "<stdout>"
+yy69:  ++YYCURSOR;
+       goto yy70;
+yy70:
+#line 167 "cnokw.re"
+{ RET(OROR); }
+#line 395 "<stdout>"
+yy71:  ++YYCURSOR;
+       goto yy72;
+yy72:
+#line 160 "cnokw.re"
+{ RET(OREQ); }
+#line 401 "<stdout>"
+yy73:  ++YYCURSOR;
+       goto yy74;
+yy74:
+#line 159 "cnokw.re"
+{ RET(XOREQ); }
+#line 407 "<stdout>"
+yy75:  ++YYCURSOR;
+       goto yy76;
+yy76:
+#line 166 "cnokw.re"
+{ RET(ANDAND); }
+#line 413 "<stdout>"
+yy77:  ++YYCURSOR;
+       goto yy78;
+yy78:
+#line 158 "cnokw.re"
+{ RET(ANDEQ); }
+#line 419 "<stdout>"
+yy79:  ++YYCURSOR;
+       goto yy80;
+yy80:
+#line 157 "cnokw.re"
+{ RET(MODEQ); }
+#line 425 "<stdout>"
+yy81:  ++YYCURSOR;
+       goto yy82;
+yy82:
+#line 155 "cnokw.re"
+{ RET(MULEQ); }
+#line 431 "<stdout>"
+yy83:  ++YYCURSOR;
+       goto yy84;
+yy84:
+#line 165 "cnokw.re"
+{ RET(DEREF); }
+#line 437 "<stdout>"
+yy85:  ++YYCURSOR;
+       goto yy86;
+yy86:
+#line 164 "cnokw.re"
+{ RET(DECR); }
+#line 443 "<stdout>"
+yy87:  ++YYCURSOR;
+       goto yy88;
+yy88:
+#line 154 "cnokw.re"
+{ RET(SUBEQ); }
+#line 449 "<stdout>"
+yy89:  ++YYCURSOR;
+       goto yy90;
+yy90:
+#line 163 "cnokw.re"
+{ RET(INCR); }
+#line 455 "<stdout>"
+yy91:  ++YYCURSOR;
+       goto yy92;
+yy92:
+#line 153 "cnokw.re"
+{ RET(ADDEQ); }
+#line 461 "<stdout>"
+yy93:  ++YYCURSOR;
+       goto yy94;
+yy94:
+#line 168 "cnokw.re"
+{ RET(LEQ); }
+#line 467 "<stdout>"
+yy95:  ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '=':       goto yy97;
+       default:        goto yy96;
+       }
+yy96:
+#line 162 "cnokw.re"
+{ RET(LSHIFT); }
+#line 476 "<stdout>"
+yy97:  ++YYCURSOR;
+       goto yy98;
+yy98:
+#line 152 "cnokw.re"
+{ RET(LSHIFTEQ); }
+#line 482 "<stdout>"
+yy99:  ++YYCURSOR;
+       goto yy100;
+yy100:
+#line 169 "cnokw.re"
+{ RET(GEQ); }
+#line 488 "<stdout>"
+yy101: ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '=':       goto yy103;
+       default:        goto yy102;
+       }
+yy102:
+#line 161 "cnokw.re"
+{ RET(RSHIFT); }
+#line 497 "<stdout>"
+yy103: ++YYCURSOR;
+       goto yy104;
+yy104:
+#line 151 "cnokw.re"
+{ RET(RSHIFTEQ); }
+#line 503 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+yy168: ++YYCURSOR;
+       goto yy169;
+yy169:
+#line 136 "cnokw.re"
+{ goto comment; }
+#line 1187 "<stdout>"
+}
+#line 212 "cnokw.re"
+
+
+comment:
+
+#line 1191 "<stdout>"
+{
+       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 "<stdout>"
+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 "<stdout>"
+yy176: yych = *++YYCURSOR;
+       goto yy173;
+yy177: ++YYCURSOR;
+       goto yy178;
+yy178:
+#line 216 "cnokw.re"
+{ goto std; }
+#line 1231 "<stdout>"
+}
+#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 (file)
index 0000000..bdc1279
--- /dev/null
@@ -0,0 +1,239 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#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 (file)
index 0000000..4ae3cd0
--- /dev/null
@@ -0,0 +1,1970 @@
+
+#line 1 "cunroll.re"
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#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 "<stdout>"
+{
+       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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+yy16:  ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '<':       goto yy95;
+       case '=':       goto yy93;
+       default:        goto yy17;
+       }
+yy17:
+#line 202 "cunroll.re"
+{ RET('<'); }
+#line 259 "<stdout>"
+yy18:  ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '+':       goto yy89;
+       case '=':       goto yy91;
+       default:        goto yy19;
+       }
+yy19:
+#line 198 "cunroll.re"
+{ RET('+'); }
+#line 269 "<stdout>"
+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 "<stdout>"
+yy22:  ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '=':       goto yy81;
+       default:        goto yy23;
+       }
+yy23:
+#line 199 "cunroll.re"
+{ RET('*'); }
+#line 289 "<stdout>"
+yy24:  ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '=':       goto yy79;
+       default:        goto yy25;
+       }
+yy25:
+#line 201 "cunroll.re"
+{ RET('%'); }
+#line 298 "<stdout>"
+yy26:  ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '&':       goto yy75;
+       case '=':       goto yy77;
+       default:        goto yy27;
+       }
+yy27:
+#line 194 "cunroll.re"
+{ RET('&'); }
+#line 308 "<stdout>"
+yy28:  ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '=':       goto yy73;
+       default:        goto yy29;
+       }
+yy29:
+#line 204 "cunroll.re"
+{ RET('^'); }
+#line 317 "<stdout>"
+yy30:  ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '=':       goto yy71;
+       case '|':       goto yy69;
+       default:        goto yy31;
+       }
+yy31:
+#line 205 "cunroll.re"
+{ RET('|'); }
+#line 327 "<stdout>"
+yy32:  ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '=':       goto yy67;
+       default:        goto yy33;
+       }
+yy33:
+#line 188 "cunroll.re"
+{ RET('='); }
+#line 336 "<stdout>"
+yy34:  ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '=':       goto yy65;
+       default:        goto yy35;
+       }
+yy35:
+#line 195 "cunroll.re"
+{ RET('!'); }
+#line 345 "<stdout>"
+yy36:  ++YYCURSOR;
+       goto yy37;
+yy37:
+#line 183 "cunroll.re"
+{ RET(';'); }
+#line 351 "<stdout>"
+yy38:  ++YYCURSOR;
+       goto yy39;
+yy39:
+#line 184 "cunroll.re"
+{ RET('{'); }
+#line 357 "<stdout>"
+yy40:  ++YYCURSOR;
+       goto yy41;
+yy41:
+#line 185 "cunroll.re"
+{ RET('}'); }
+#line 363 "<stdout>"
+yy42:  ++YYCURSOR;
+       goto yy43;
+yy43:
+#line 186 "cunroll.re"
+{ RET(','); }
+#line 369 "<stdout>"
+yy44:  ++YYCURSOR;
+       goto yy45;
+yy45:
+#line 187 "cunroll.re"
+{ RET(':'); }
+#line 375 "<stdout>"
+yy46:  ++YYCURSOR;
+       goto yy47;
+yy47:
+#line 189 "cunroll.re"
+{ RET('('); }
+#line 381 "<stdout>"
+yy48:  ++YYCURSOR;
+       goto yy49;
+yy49:
+#line 190 "cunroll.re"
+{ RET(')'); }
+#line 387 "<stdout>"
+yy50:  ++YYCURSOR;
+       goto yy51;
+yy51:
+#line 191 "cunroll.re"
+{ RET('['); }
+#line 393 "<stdout>"
+yy52:  ++YYCURSOR;
+       goto yy53;
+yy53:
+#line 192 "cunroll.re"
+{ RET(']'); }
+#line 399 "<stdout>"
+yy54:  ++YYCURSOR;
+       goto yy55;
+yy55:
+#line 196 "cunroll.re"
+{ RET('~'); }
+#line 405 "<stdout>"
+yy56:  ++YYCURSOR;
+       goto yy57;
+yy57:
+#line 206 "cunroll.re"
+{ RET('?'); }
+#line 411 "<stdout>"
+yy58:  ++YYCURSOR;
+       yych = *YYCURSOR;
+       goto yy64;
+yy59:
+#line 209 "cunroll.re"
+{ goto std; }
+#line 417 "<stdout>"
+yy60:  ++YYCURSOR;
+       goto yy61;
+yy61:
+#line 212 "cunroll.re"
+{
+               if(cursor == s->eof) RET(EOI);
+               s->pos = cursor; s->line++;
+               goto std;
+           }
+#line 427 "<stdout>"
+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 "<stdout>"
+yy67:  ++YYCURSOR;
+       goto yy68;
+yy68:
+#line 181 "cunroll.re"
+{ RET(EQL); }
+#line 451 "<stdout>"
+yy69:  ++YYCURSOR;
+       goto yy70;
+yy70:
+#line 178 "cunroll.re"
+{ RET(OROR); }
+#line 457 "<stdout>"
+yy71:  ++YYCURSOR;
+       goto yy72;
+yy72:
+#line 171 "cunroll.re"
+{ RET(OREQ); }
+#line 463 "<stdout>"
+yy73:  ++YYCURSOR;
+       goto yy74;
+yy74:
+#line 170 "cunroll.re"
+{ RET(XOREQ); }
+#line 469 "<stdout>"
+yy75:  ++YYCURSOR;
+       goto yy76;
+yy76:
+#line 177 "cunroll.re"
+{ RET(ANDAND); }
+#line 475 "<stdout>"
+yy77:  ++YYCURSOR;
+       goto yy78;
+yy78:
+#line 169 "cunroll.re"
+{ RET(ANDEQ); }
+#line 481 "<stdout>"
+yy79:  ++YYCURSOR;
+       goto yy80;
+yy80:
+#line 168 "cunroll.re"
+{ RET(MODEQ); }
+#line 487 "<stdout>"
+yy81:  ++YYCURSOR;
+       goto yy82;
+yy82:
+#line 166 "cunroll.re"
+{ RET(MULEQ); }
+#line 493 "<stdout>"
+yy83:  ++YYCURSOR;
+       goto yy84;
+yy84:
+#line 176 "cunroll.re"
+{ RET(DEREF); }
+#line 499 "<stdout>"
+yy85:  ++YYCURSOR;
+       goto yy86;
+yy86:
+#line 175 "cunroll.re"
+{ RET(DECR); }
+#line 505 "<stdout>"
+yy87:  ++YYCURSOR;
+       goto yy88;
+yy88:
+#line 165 "cunroll.re"
+{ RET(SUBEQ); }
+#line 511 "<stdout>"
+yy89:  ++YYCURSOR;
+       goto yy90;
+yy90:
+#line 174 "cunroll.re"
+{ RET(INCR); }
+#line 517 "<stdout>"
+yy91:  ++YYCURSOR;
+       goto yy92;
+yy92:
+#line 164 "cunroll.re"
+{ RET(ADDEQ); }
+#line 523 "<stdout>"
+yy93:  ++YYCURSOR;
+       goto yy94;
+yy94:
+#line 179 "cunroll.re"
+{ RET(LEQ); }
+#line 529 "<stdout>"
+yy95:  ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '=':       goto yy97;
+       default:        goto yy96;
+       }
+yy96:
+#line 173 "cunroll.re"
+{ RET(LSHIFT); }
+#line 538 "<stdout>"
+yy97:  ++YYCURSOR;
+       goto yy98;
+yy98:
+#line 163 "cunroll.re"
+{ RET(LSHIFTEQ); }
+#line 544 "<stdout>"
+yy99:  ++YYCURSOR;
+       goto yy100;
+yy100:
+#line 180 "cunroll.re"
+{ RET(GEQ); }
+#line 550 "<stdout>"
+yy101: ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '=':       goto yy103;
+       default:        goto yy102;
+       }
+yy102:
+#line 172 "cunroll.re"
+{ RET(RSHIFT); }
+#line 559 "<stdout>"
+yy103: ++YYCURSOR;
+       goto yy104;
+yy104:
+#line 162 "cunroll.re"
+{ RET(RSHIFTEQ); }
+#line 565 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+yy181: ++YYCURSOR;
+       goto yy182;
+yy182:
+#line 167 "cunroll.re"
+{ RET(DIVEQ); }
+#line 1723 "<stdout>"
+yy183: ++YYCURSOR;
+       goto yy184;
+yy184:
+#line 138 "cunroll.re"
+{ goto comment; }
+#line 1729 "<stdout>"
+}
+#line 223 "cunroll.re"
+
+
+comment:
+
+#line 1733 "<stdout>"
+{
+       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 "<stdout>"
+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 "<stdout>"
+yy191: ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '*':       case '/':       goto yy192;
+       default:        goto yy194;
+       }
+yy192:
+#line 234 "cunroll.re"
+{ goto comment; }
+#line 1778 "<stdout>"
+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 "<stdout>"
+yy196: ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '*':       case '/':       goto yy197;
+       default:        goto yy198;
+       }
+yy197:
+#line 236 "cunroll.re"
+{ goto comment; }
+#line 1798 "<stdout>"
+yy198: ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '*':       case '/':       goto yy199;
+       default:        goto yy200;
+       }
+yy199:
+#line 237 "cunroll.re"
+{ goto comment; }
+#line 1807 "<stdout>"
+yy200: ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '*':       case '/':       goto yy201;
+       default:        goto yy202;
+       }
+yy201:
+#line 238 "cunroll.re"
+{ goto comment; }
+#line 1816 "<stdout>"
+yy202: ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '*':       case '/':       goto yy203;
+       default:        goto yy204;
+       }
+yy203:
+#line 239 "cunroll.re"
+{ goto comment; }
+#line 1825 "<stdout>"
+yy204: ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '*':       case '/':       goto yy205;
+       default:        goto yy206;
+       }
+yy205:
+#line 240 "cunroll.re"
+{ goto comment; }
+#line 1834 "<stdout>"
+yy206: ++YYCURSOR;
+       goto yy207;
+yy207:
+#line 241 "cunroll.re"
+{ goto comment; }
+#line 1840 "<stdout>"
+yy208: ++YYCURSOR;
+       goto yy209;
+yy209:
+#line 227 "cunroll.re"
+{ goto std; }
+#line 1846 "<stdout>"
+}
+#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 (file)
index 0000000..dd9d805
--- /dev/null
@@ -0,0 +1,258 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#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 (file)
index 0000000..d515699
--- /dev/null
@@ -0,0 +1,55 @@
+
+#line 1 "input1.re"
+
+#line 6 "<stdout>"
+{
+       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 "<stdout>"
+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 "<stdout>"
+}
+#line 6 "input1.re"
+
diff --git a/test/input1.re b/test/input1.re
new file mode 100644 (file)
index 0000000..0a6890d
--- /dev/null
@@ -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 (file)
index 0000000..7076382
--- /dev/null
@@ -0,0 +1,39 @@
+
+#line 1 "input2.re"
+
+#line 6 "<stdout>"
+{
+       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 "<stdout>"
+}
+#line 5 "input2.re"
+
diff --git a/test/input2.re b/test/input2.re
new file mode 100644 (file)
index 0000000..6df2519
--- /dev/null
@@ -0,0 +1,5 @@
+/*!re2c
+
+[a]+ "bb"  { return 1; }
+
+*/
diff --git a/test/input3.c b/test/input3.c
new file mode 100644 (file)
index 0000000..f3a80ae
--- /dev/null
@@ -0,0 +1,39 @@
+
+#line 1 "input3.re"
+
+#line 6 "<stdout>"
+{
+       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 "<stdout>"
+}
+#line 5 "input3.re"
+
diff --git a/test/input3.re b/test/input3.re
new file mode 100644 (file)
index 0000000..18a6e7d
--- /dev/null
@@ -0,0 +1,5 @@
+/*!re2c
+
+"a" [a]* "bb"  { return 1; }
+
+*/
diff --git a/test/modula.c b/test/modula.c
new file mode 100644 (file)
index 0000000..485dcbe
--- /dev/null
@@ -0,0 +1,4120 @@
+
+#line 1 "modula.re"
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+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 "<stdout>"
+{
+       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 "<stdout>"
+yy4:   yyaccept = 0;
+       yych = *(YYMARKER = ++YYCURSOR);
+       goto yy292;
+yy5:
+#line 69 "modula.re"
+{RETURN(1);}
+#line 119 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+yy12:  ++YYCURSOR;
+       goto yy13;
+yy13:
+#line 78 "modula.re"
+{RETURN(8);}
+#line 153 "<stdout>"
+yy14:  ++YYCURSOR;
+       goto yy15;
+yy15:
+#line 80 "modula.re"
+{RETURN(10);}
+#line 159 "<stdout>"
+yy16:  ++YYCURSOR;
+       goto yy17;
+yy17:
+#line 81 "modula.re"
+{RETURN(11);}
+#line 165 "<stdout>"
+yy18:  ++YYCURSOR;
+       goto yy19;
+yy19:
+#line 82 "modula.re"
+{RETURN(12);}
+#line 171 "<stdout>"
+yy20:  ++YYCURSOR;
+       goto yy21;
+yy21:
+#line 83 "modula.re"
+{RETURN(13);}
+#line 177 "<stdout>"
+yy22:  ++YYCURSOR;
+       goto yy23;
+yy23:
+#line 84 "modula.re"
+{RETURN(14);}
+#line 183 "<stdout>"
+yy24:  ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '.':       goto yy266;
+       default:        goto yy25;
+       }
+yy25:
+#line 85 "modula.re"
+{RETURN(15);}
+#line 192 "<stdout>"
+yy26:  ++YYCURSOR;
+       goto yy27;
+yy27:
+#line 87 "modula.re"
+{RETURN(17);}
+#line 198 "<stdout>"
+yy28:  ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '=':       goto yy264;
+       default:        goto yy29;
+       }
+yy29:
+#line 88 "modula.re"
+{RETURN(18);}
+#line 207 "<stdout>"
+yy30:  ++YYCURSOR;
+       goto yy31;
+yy31:
+#line 90 "modula.re"
+{RETURN(20);}
+#line 213 "<stdout>"
+yy32:  ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '=':       goto yy262;
+       case '>':       goto yy260;
+       default:        goto yy33;
+       }
+yy33:
+#line 91 "modula.re"
+{RETURN(21);}
+#line 223 "<stdout>"
+yy34:  ++YYCURSOR;
+       goto yy35;
+yy35:
+#line 94 "modula.re"
+{RETURN(24);}
+#line 229 "<stdout>"
+yy36:  ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '=':       goto yy258;
+       default:        goto yy37;
+       }
+yy37:
+#line 95 "modula.re"
+{RETURN(25);}
+#line 238 "<stdout>"
+yy38:  ++YYCURSOR;
+       goto yy39;
+yy39:
+#line 97 "modula.re"
+{RETURN(27);}
+#line 244 "<stdout>"
+yy40:  ++YYCURSOR;
+       goto yy41;
+yy41:
+#line 98 "modula.re"
+{RETURN(28);}
+#line 250 "<stdout>"
+yy42:  ++YYCURSOR;
+       goto yy43;
+yy43:
+#line 99 "modula.re"
+{RETURN(29);}
+#line 256 "<stdout>"
+yy44:  ++YYCURSOR;
+       goto yy45;
+yy45:
+#line 100 "modula.re"
+{RETURN(30);}
+#line 262 "<stdout>"
+yy46:  ++YYCURSOR;
+       goto yy47;
+yy47:
+#line 101 "modula.re"
+{RETURN(31);}
+#line 268 "<stdout>"
+yy48:  ++YYCURSOR;
+       goto yy49;
+yy49:
+#line 102 "modula.re"
+{RETURN(32);}
+#line 274 "<stdout>"
+yy50:  ++YYCURSOR;
+       goto yy51;
+yy51:
+#line 103 "modula.re"
+{RETURN(33);}
+#line 280 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+yy75:  ++YYCURSOR;
+       goto yy76;
+yy76:
+#line 151 "modula.re"
+{
+               if(cursor == s->eof) RETURN(0);
+               s->pos = cursor; s->line++;
+               goto std;
+           }
+#line 412 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+yy258: ++YYCURSOR;
+       goto yy259;
+yy259:
+#line 96 "modula.re"
+{RETURN(26);}
+#line 3701 "<stdout>"
+yy260: ++YYCURSOR;
+       goto yy261;
+yy261:
+#line 93 "modula.re"
+{RETURN(23);}
+#line 3707 "<stdout>"
+yy262: ++YYCURSOR;
+       goto yy263;
+yy263:
+#line 92 "modula.re"
+{RETURN(22);}
+#line 3713 "<stdout>"
+yy264: ++YYCURSOR;
+       goto yy265;
+yy265:
+#line 89 "modula.re"
+{RETURN(19);}
+#line 3719 "<stdout>"
+yy266: ++YYCURSOR;
+       goto yy267;
+yy267:
+#line 86 "modula.re"
+{RETURN(16);}
+#line 3725 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+yy283: ++YYCURSOR;
+       goto yy284;
+yy284: YYCURSOR -= 2;
+#line 70 "modula.re"
+{RETURN(1);}
+#line 3831 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+yy297: ++YYCURSOR;
+       goto yy298;
+yy298:
+#line 67 "modula.re"
+{ depth = 1; goto comment; }
+#line 3978 "<stdout>"
+}
+#line 162 "modula.re"
+
+comment:
+
+#line 3982 "<stdout>"
+{
+       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 "<stdout>"
+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 "<stdout>"
+yy306: yych = *++YYCURSOR;
+       goto yy302;
+yy307: ++YYCURSOR;
+       goto yy308;
+yy308:
+#line 172 "modula.re"
+{ ++depth; goto comment; }
+#line 4028 "<stdout>"
+yy309: ++YYCURSOR;
+       goto yy310;
+yy310:
+#line 166 "modula.re"
+{
+               if(--depth == 0)
+                   goto std;
+               else
+                   goto comment;
+           }
+#line 4039 "<stdout>"
+}
+#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 (file)
index 0000000..0468ba4
--- /dev/null
@@ -0,0 +1,202 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+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 (file)
index 0000000..95503f1
--- /dev/null
@@ -0,0 +1,143 @@
+
+#line 1 "repeater.re"
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#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 "<stdout>"
+{
+       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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 (file)
index 0000000..05c4c88
--- /dev/null
@@ -0,0 +1,44 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#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 (file)
index 0000000..dd17913
--- /dev/null
@@ -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 (file)
index 0000000..4d943e1
--- /dev/null
@@ -0,0 +1,230 @@
+
+#line 1 "sample.re"
+
+#line 6 "<stdout>"
+{
+       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 "<stdout>"
+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 "<stdout>"
+yy7:   yych = *++YYCURSOR;
+       goto yy11;
+yy8:   ++YYCURSOR;
+       goto yy9;
+yy9:
+#line 6 "sample.re"
+{return ERR;}
+#line 81 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+}
+#line 7 "sample.re"
+
diff --git a/test/sample.re b/test/sample.re
new file mode 100644 (file)
index 0000000..2f497a3
--- /dev/null
@@ -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 (file)
index 0000000..29b397e
--- /dev/null
@@ -0,0 +1,760 @@
+
+#line 1 "scanner.re"
+/* $Id$ */
+#include <stdlib.h>
+#include <string.h>
+#include <iostream>
+#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 "<stdout>"
+{
+       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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+}
+#line 92 "scanner.re"
+
+}
+
+
+int Scanner::scan(){
+    char *cursor = cur;
+    uint depth;
+
+scan:
+    tchar = cursor - pos;
+    tline = cline;
+    tok = cursor;
+
+#line 82 "<stdout>"
+{
+       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 "<stdout>"
+yy19:  ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '*':       goto yy61;
+       default:        goto yy20;
+       }
+yy20:
+#line 131 "scanner.re"
+{ RETURN(*tok); }
+#line 185 "<stdout>"
+yy21:  ++YYCURSOR;
+       switch((yych = *YYCURSOR)) {
+       case '/':       goto yy59;
+       default:        goto yy22;
+       }
+yy22:
+#line 133 "scanner.re"
+{ yylval.op = *tok;
+                                 RETURN(CLOSE); }
+#line 195 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+yy33:  ++YYCURSOR;
+       yych = *YYCURSOR;
+       goto yy40;
+yy34:
+#line 152 "scanner.re"
+{ goto scan; }
+#line 243 "<stdout>"
+yy35:  ++YYCURSOR;
+       goto yy36;
+yy36:
+#line 154 "scanner.re"
+{ if(cursor == eof) RETURN(0);
+                                 pos = cursor; cline++;
+                                 goto scan;
+                               }
+#line 252 "<stdout>"
+yy37:  ++YYCURSOR;
+       goto yy38;
+yy38:
+#line 159 "scanner.re"
+{ std::cerr << "unexpected character: " << *tok << std::endl;
+                                 goto scan;
+                               }
+#line 260 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+yy59:  ++YYCURSOR;
+       goto yy60;
+yy60:
+#line 111 "scanner.re"
+{ tok = cursor;
+                                 RETURN(0); }
+#line 432 "<stdout>"
+yy61:  ++YYCURSOR;
+       goto yy62;
+yy62:
+#line 108 "scanner.re"
+{ depth = 1;
+                                 goto comment; }
+#line 439 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+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 "<stdout>"
+}
+#line 162 "scanner.re"
+
+
+code:
+
+#line 511 "<stdout>"
+{
+       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 "<stdout>"
+yy78:  ++YYCURSOR;
+       goto yy79;
+yy79:
+#line 172 "scanner.re"
+{ ++depth;
+                                 goto code; }
+#line 545 "<stdout>"
+yy80:  ++YYCURSOR;
+       goto yy81;
+yy81:
+#line 174 "scanner.re"
+{ if(cursor == eof) fatal("missing '}'");
+                                 pos = cursor; cline++;
+                                 goto code;
+                               }
+#line 554 "<stdout>"
+yy82:  ++YYCURSOR;
+       goto yy83;
+yy83:
+#line 178 "scanner.re"
+{ goto code; }
+#line 560 "<stdout>"
+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 "<stdout>"
+{
+       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 "<stdout>"
+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 "<stdout>"
+yy100: yych = *++YYCURSOR;
+       goto yy96;
+yy101: ++YYCURSOR;
+       goto yy102;
+yy102:
+#line 187 "scanner.re"
+{ ++depth;
+                                 goto comment; }
+#line 664 "<stdout>"
+yy103: ++YYCURSOR;
+       goto yy104;
+yy104:
+#line 183 "scanner.re"
+{ if(--depth == 0)
+                                       goto scan;
+                                   else
+                                       goto comment; }
+#line 673 "<stdout>"
+}
+#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 (file)
index 0000000..88a9bb8
--- /dev/null
@@ -0,0 +1,201 @@
+/* $Id$ */
+#include <stdlib.h>
+#include <string.h>
+#include <iostream>
+#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 (file)
index 0000000..5f254c6
--- /dev/null
@@ -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 "<stdout>"
+{
+       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 "<stdout>"
+yy4:   ++YYCURSOR;
+       goto yy5;
+yy5:
+#line 11 "simple.re"
+{return NULL;}
+#line 39 "<stdout>"
+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 (file)
index 0000000..5fd8891
--- /dev/null
@@ -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;}
+*/
+}