]> granicus.if.org Git - re2c/commitdiff
- Allow to have types inlined into generated .c file
authorhelly <helly@642ea486-5414-0410-9d7f-a0204ed87703>
Sun, 29 Apr 2007 15:36:42 +0000 (15:36 +0000)
committerhelly <helly@642ea486-5414-0410-9d7f-a0204ed87703>
Sun, 29 Apr 2007 15:36:42 +0000 (15:36 +0000)
- Allow to specify parameter inside YYFILL config
- Add prefix to condition enum constants
- Add/Fix tests
- MFB Prevent build issues with strange compilers

15 files changed:
re2c/bootstrap/parser.cc
re2c/bootstrap/scanner.cc
re2c/code.cc
re2c/globals.h
re2c/main.cc
re2c/parser.y
re2c/re.h
re2c/scanner.re
re2c/test/condition_01.c.c
re2c/test/condition_02.c.c
re2c/test/condition_05.cgitcondition_05.cgit.h.h
re2c/test/condition_05.cgtcondition_05.cgt.h.h
re2c/test/condition_06.cs.c [new file with mode: 0755]
re2c/test/condition_06.cs.re [new file with mode: 0755]
re2c/translate.cc

index 6238ab805479266b3921a086d3db56d1aadff7e4..7b90c02d46c35d8c416edbc56d68e11126c7bd20 100644 (file)
@@ -1887,6 +1887,10 @@ void parse(Scanner& i, std::ostream& o, std::ostream* h)
                        {
                                genHeader(*h, 0, specMap);
                        }
+                       else
+                       {
+                               genTypes(typesInline, 0, specMap);
+                       }
                }
                else if(spec)
                {
index d31d82d335804b41342ef439bb70513441ac4056..d93b4e873c28af89e2fffb0701d317f53a1b42d5 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.13.0.dev on Sun Apr 22 14:24:30 2007 */
+/* Generated by re2c 0.13.0.dev on Sat Apr 28 15:49:28 2007 */
 #line 1 "scanner.re"
 /* $Id$ */
 #include <stdlib.h>
@@ -114,7 +114,7 @@ echo:
        yych = *(YYMARKER = ++YYCURSOR);
        if(yych == '*') goto yy16;
 yy3:
-#line 204 "scanner.re"
+#line 221 "scanner.re"
        {
                                        goto echo;
                                }
@@ -125,7 +125,7 @@ yy4:
        goto yy3;
 yy5:
        ++YYCURSOR;
-#line 180 "scanner.re"
+#line 197 "scanner.re"
        {
                                        if (ignore_eoc)
                                        {
@@ -142,7 +142,7 @@ yy5:
 #line 143 "scanner.cc"
 yy7:
        ++YYCURSOR;
-#line 193 "scanner.re"
+#line 210 "scanner.re"
        {
                                        if (!ignore_eoc)
                                        {
@@ -164,7 +164,7 @@ yy10:
        if(yych == 0x0A) goto yy14;
        if(yych == 0x0D) goto yy12;
 yy11:
-#line 163 "scanner.re"
+#line 180 "scanner.re"
        {
                                        if (ignore_eoc)
                                        {
@@ -195,7 +195,7 @@ yy13:
        }
 yy14:
        ++YYCURSOR;
-#line 145 "scanner.re"
+#line 162 "scanner.re"
        {
                                        cline++;
                                        if (ignore_eoc)
@@ -220,25 +220,30 @@ yy16:
        if(yych != '!') goto yy13;
        yych = *++YYCURSOR;
        switch(yych) {
-       case 'g':       goto yy19;
-       case 'i':       goto yy18;
-       case 'm':       goto yy20;
-       case 'r':       goto yy21;
+       case 'g':       goto yy20;
+       case 'i':       goto yy19;
+       case 'm':       goto yy21;
+       case 'r':       goto yy22;
+       case 't':       goto yy18;
        default:        goto yy13;
        }
 yy18:
        yych = *++YYCURSOR;
-       if(yych == 'g') goto yy47;
+       if(yych == 'y') goto yy59;
        goto yy13;
 yy19:
        yych = *++YYCURSOR;
-       if(yych == 'e') goto yy34;
+       if(yych == 'g') goto yy48;
        goto yy13;
 yy20:
        yych = *++YYCURSOR;
-       if(yych == 'a') goto yy26;
+       if(yych == 'e') goto yy35;
        goto yy13;
 yy21:
+       yych = *++YYCURSOR;
+       if(yych == 'a') goto yy27;
+       goto yy13;
+yy22:
        yych = *++YYCURSOR;
        if(yych != 'e') goto yy13;
        yych = *++YYCURSOR;
@@ -256,8 +261,8 @@ yy21:
                                        tok = cursor;
                                        RETURN(1);
                                }
-#line 260 "scanner.cc"
-yy26:
+#line 265 "scanner.cc"
+yy27:
        yych = *++YYCURSOR;
        if(yych != 'x') goto yy13;
        yych = *++YYCURSOR;
@@ -283,8 +288,8 @@ yy26:
                                        bUsedYYMaxFill = true;
                                        goto echo;
                                }
-#line 287 "scanner.cc"
-yy34:
+#line 292 "scanner.cc"
+yy35:
        yych = *++YYCURSOR;
        if(yych != 't') goto yy13;
        yych = *++YYCURSOR;
@@ -315,8 +320,8 @@ yy34:
                                        ignore_eoc = true;
                                        goto echo;
                                }
-#line 319 "scanner.cc"
-yy47:
+#line 324 "scanner.cc"
+yy48:
        yych = *++YYCURSOR;
        if(yych != 'n') goto yy13;
        yych = *++YYCURSOR;
@@ -342,9 +347,46 @@ yy47:
                                        ignore_eoc = true;
                                        goto echo;
                                }
-#line 346 "scanner.cc"
+#line 351 "scanner.cc"
+yy59:
+       yych = *++YYCURSOR;
+       if(yych != 'p') goto yy13;
+       yych = *++YYCURSOR;
+       if(yych != 'e') goto yy13;
+       yych = *++YYCURSOR;
+       if(yych != 's') goto yy13;
+       yych = *++YYCURSOR;
+       if(yych != ':') goto yy13;
+       yych = *++YYCURSOR;
+       if(yych != 'r') goto yy13;
+       yych = *++YYCURSOR;
+       if(yych != 'e') goto yy13;
+       yych = *++YYCURSOR;
+       if(yych != '2') goto yy13;
+       yych = *++YYCURSOR;
+       if(yych != 'c') goto yy13;
+       ++YYCURSOR;
+#line 145 "scanner.re"
+       {
+                                       if (bSinglePass)
+                                       {
+                                               fatal("cannot generate types inline in single pass mode");
+                                       }
+                                       tok = pos = cursor;
+                                       ignore_eoc = true;
+                                       if (bLastPass)
+                                       {
+                                               out << outputFileInfo;
+                                               out << "\n";
+                                               out << typesInline;
+                                               out << "\n";
+                                               out << sourceFileInfo;
+                                       }
+                                       goto echo;
+                               }
+#line 388 "scanner.cc"
 }
-#line 207 "scanner.re"
+#line 224 "scanner.re"
 
 }
 
@@ -367,7 +409,7 @@ scan:
                goto value;
        }
 
-#line 371 "scanner.cc"
+#line 413 "scanner.cc"
 {
        YYCTYPE yych;
        unsigned int yyaccept = 0;
@@ -410,202 +452,202 @@ scan:
        if(yych <= '/') {
                if(yych <= '"') {
                        if(yych <= 0x0C) {
-                               if(yych <= 0x08) goto yy87;
-                               if(yych <= 0x09) goto yy81;
-                               if(yych <= 0x0A) goto yy83;
-                               goto yy87;
+                               if(yych <= 0x08) goto yy98;
+                               if(yych <= 0x09) goto yy92;
+                               if(yych <= 0x0A) goto yy94;
+                               goto yy98;
                        } else {
                                if(yych <= 0x1F) {
-                                       if(yych <= 0x0D) goto yy85;
-                                       goto yy87;
+                                       if(yych <= 0x0D) goto yy96;
+                                       goto yy98;
                                } else {
-                                       if(yych <= ' ') goto yy81;
-                                       if(yych <= '!') goto yy87;
-                                       goto yy66;
+                                       if(yych <= ' ') goto yy92;
+                                       if(yych <= '!') goto yy98;
+                                       goto yy77;
                                }
                        }
                } else {
                        if(yych <= '*') {
-                               if(yych <= '&') goto yy87;
-                               if(yych <= '\'') goto yy68;
-                               if(yych <= ')') goto yy73;
-                               goto yy64;
+                               if(yych <= '&') goto yy98;
+                               if(yych <= '\'') goto yy79;
+                               if(yych <= ')') goto yy84;
+                               goto yy75;
                        } else {
                                if(yych <= ',') {
-                                       if(yych <= '+') goto yy74;
-                                       goto yy73;
+                                       if(yych <= '+') goto yy85;
+                                       goto yy84;
                                } else {
-                                       if(yych <= '-') goto yy87;
-                                       if(yych <= '.') goto yy79;
-                                       goto yy62;
+                                       if(yych <= '-') goto yy98;
+                                       if(yych <= '.') goto yy90;
+                                       goto yy73;
                                }
                        }
                }
        } else {
                if(yych <= '\\') {
                        if(yych <= '>') {
-                               if(yych <= ':') goto yy87;
-                               if(yych == '<') goto yy72;
-                               goto yy73;
+                               if(yych <= ':') goto yy98;
+                               if(yych == '<') goto yy83;
+                               goto yy84;
                        } else {
                                if(yych <= '@') {
-                                       if(yych <= '?') goto yy74;
-                                       goto yy87;
+                                       if(yych <= '?') goto yy85;
+                                       goto yy98;
                                } else {
-                                       if(yych <= 'Z') goto yy78;
-                                       if(yych <= '[') goto yy70;
-                                       goto yy73;
+                                       if(yych <= 'Z') goto yy89;
+                                       if(yych <= '[') goto yy81;
+                                       goto yy84;
                                }
                        }
                } else {
                        if(yych <= 'q') {
-                               if(yych == '_') goto yy78;
-                               if(yych <= '`') goto yy87;
-                               goto yy78;
+                               if(yych == '_') goto yy89;
+                               if(yych <= '`') goto yy98;
+                               goto yy89;
                        } else {
                                if(yych <= 'z') {
-                                       if(yych <= 'r') goto yy76;
-                                       goto yy78;
+                                       if(yych <= 'r') goto yy87;
+                                       goto yy89;
                                } else {
-                                       if(yych <= '{') goto yy60;
-                                       if(yych <= '|') goto yy73;
-                                       goto yy87;
+                                       if(yych <= '{') goto yy71;
+                                       if(yych <= '|') goto yy84;
+                                       goto yy98;
                                }
                        }
                }
        }
-yy60:
+yy71:
        yyaccept = 0;
        yych = *(YYMARKER = ++YYCURSOR);
        if(yych <= '/') {
-               if(yych == ',') goto yy133;
+               if(yych == ',') goto yy144;
        } else {
-               if(yych <= '0') goto yy130;
-               if(yych <= '9') goto yy131;
+               if(yych <= '0') goto yy141;
+               if(yych <= '9') goto yy142;
        }
-yy61:
-#line 229 "scanner.re"
+yy72:
+#line 246 "scanner.re"
        {
                                        depth = 1;
                                        goto code;
                                }
-#line 493 "scanner.cc"
-yy62:
+#line 535 "scanner.cc"
+yy73:
        ++YYCURSOR;
-       if((yych = *YYCURSOR) == '*') goto yy128;
-yy63:
-#line 282 "scanner.re"
+       if((yych = *YYCURSOR) == '*') goto yy139;
+yy74:
+#line 299 "scanner.re"
        {
                                        RETURN(*tok);
                                }
-#line 502 "scanner.cc"
-yy64:
+#line 544 "scanner.cc"
+yy75:
        ++YYCURSOR;
-       if((yych = *YYCURSOR) == '/') goto yy126;
-#line 286 "scanner.re"
+       if((yych = *YYCURSOR) == '/') goto yy137;
+#line 303 "scanner.re"
        {
                                        yylval.op = *tok;
                                        RETURN(STAR);
                                }
-#line 511 "scanner.cc"
-yy66:
+#line 553 "scanner.cc"
+yy77:
        yyaccept = 1;
        yych = *(YYMARKER = ++YYCURSOR);
-       if(yych != 0x0A) goto yy122;
-yy67:
-#line 256 "scanner.re"
+       if(yych != 0x0A) goto yy133;
+yy78:
+#line 273 "scanner.re"
        {
                                        fatal("unterminated string constant (missing \")");
                                }
-#line 521 "scanner.cc"
-yy68:
+#line 563 "scanner.cc"
+yy79:
        yyaccept = 2;
        yych = *(YYMARKER = ++YYCURSOR);
-       if(yych != 0x0A) goto yy117;
-yy69:
-#line 259 "scanner.re"
+       if(yych != 0x0A) goto yy128;
+yy80:
+#line 276 "scanner.re"
        {
                                        fatal("unterminated string constant (missing ')");
                                }
-#line 531 "scanner.cc"
-yy70:
+#line 573 "scanner.cc"
+yy81:
        yyaccept = 3;
        yych = *(YYMARKER = ++YYCURSOR);
-       if(yych == 0x0A) goto yy71;
-       if(yych == '^') goto yy108;
-       goto yy107;
-yy71:
-#line 275 "scanner.re"
+       if(yych == 0x0A) goto yy82;
+       if(yych == '^') goto yy119;
+       goto yy118;
+yy82:
+#line 292 "scanner.re"
        {
                                        fatal("unterminated range (missing ])");
                                }
-#line 543 "scanner.cc"
-yy72:
+#line 585 "scanner.cc"
+yy83:
        yyaccept = 4;
        yych = *(YYMARKER = ++YYCURSOR);
-       if(yych == '>') goto yy101;
-       goto yy63;
-yy73:
+       if(yych == '>') goto yy112;
+       goto yy74;
+yy84:
        yych = *++YYCURSOR;
-       goto yy63;
-yy74:
+       goto yy74;
+yy85:
        ++YYCURSOR;
-#line 290 "scanner.re"
+#line 307 "scanner.re"
        {
                                        yylval.op = *tok;
                                        RETURN(CLOSE);
                                }
-#line 559 "scanner.cc"
-yy76:
+#line 601 "scanner.cc"
+yy87:
        ++YYCURSOR;
-       if((yych = *YYCURSOR) == 'e') goto yy93;
-       goto yy92;
-yy77:
-#line 330 "scanner.re"
+       if((yych = *YYCURSOR) == 'e') goto yy104;
+       goto yy103;
+yy88:
+#line 347 "scanner.re"
        {
                                        cur = cursor;
                                        yylval.symbol = Symbol::find(token());
                                        return ID;
                                }
-#line 571 "scanner.cc"
-yy78:
+#line 613 "scanner.cc"
+yy89:
        yych = *++YYCURSOR;
-       goto yy92;
-yy79:
+       goto yy103;
+yy90:
        ++YYCURSOR;
-#line 336 "scanner.re"
+#line 353 "scanner.re"
        {
                                        cur = cursor;
                                        yylval.regexp = mkDot();
                                        return RANGE;
                                }
-#line 583 "scanner.cc"
-yy81:
+#line 625 "scanner.cc"
+yy92:
        ++YYCURSOR;
        yych = *YYCURSOR;
-       goto yy90;
-yy82:
-#line 342 "scanner.re"
+       goto yy101;
+yy93:
+#line 359 "scanner.re"
        {
                                        goto scan;
                                }
-#line 593 "scanner.cc"
-yy83:
+#line 635 "scanner.cc"
+yy94:
        ++YYCURSOR;
-yy84:
-#line 346 "scanner.re"
+yy95:
+#line 363 "scanner.re"
        {
                                        if(cursor == eof) RETURN(0);
                                        pos = cursor;
                                        cline++;
                                        goto scan;
                                }
-#line 604 "scanner.cc"
-yy85:
+#line 646 "scanner.cc"
+yy96:
        ++YYCURSOR;
-       if((yych = *YYCURSOR) == 0x0A) goto yy88;
-yy86:
-#line 353 "scanner.re"
+       if((yych = *YYCURSOR) == 0x0A) goto yy99;
+yy97:
+#line 370 "scanner.re"
        {
                                        std::ostringstream msg;
                                        msg << "unexpected character: ";
@@ -613,103 +655,103 @@ yy86:
                                        fatal(msg.str().c_str());
                                        goto scan;
                                }
-#line 617 "scanner.cc"
-yy87:
+#line 659 "scanner.cc"
+yy98:
        yych = *++YYCURSOR;
-       goto yy86;
-yy88:
+       goto yy97;
+yy99:
        yych = *++YYCURSOR;
-       goto yy84;
-yy89:
+       goto yy95;
+yy100:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-yy90:
+yy101:
        if(yybm[0+yych] & 2) {
-               goto yy89;
+               goto yy100;
        }
-       goto yy82;
-yy91:
+       goto yy93;
+yy102:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-yy92:
+yy103:
        if(yybm[0+yych] & 4) {
-               goto yy91;
+               goto yy102;
        }
-       goto yy77;
-yy93:
+       goto yy88;
+yy104:
        yych = *++YYCURSOR;
-       if(yych != '2') goto yy92;
+       if(yych != '2') goto yy103;
        yych = *++YYCURSOR;
-       if(yych != 'c') goto yy92;
+       if(yych != 'c') goto yy103;
        yyaccept = 5;
        yych = *(YYMARKER = ++YYCURSOR);
-       if(yych != ':') goto yy92;
-yy96:
+       if(yych != ':') goto yy103;
+yy107:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        if(yych <= '^') {
-               if(yych <= '@') goto yy97;
-               if(yych <= 'Z') goto yy98;
+               if(yych <= '@') goto yy108;
+               if(yych <= 'Z') goto yy109;
        } else {
-               if(yych == '`') goto yy97;
-               if(yych <= 'z') goto yy98;
+               if(yych == '`') goto yy108;
+               if(yych <= 'z') goto yy109;
        }
-yy97:
+yy108:
        YYCURSOR = YYMARKER;
        if(yyaccept <= 3) {
                if(yyaccept <= 1) {
                        if(yyaccept <= 0) {
-                               goto yy61;
+                               goto yy72;
                        } else {
-                               goto yy67;
+                               goto yy78;
                        }
                } else {
                        if(yyaccept <= 2) {
-                               goto yy69;
+                               goto yy80;
                        } else {
-                               goto yy71;
+                               goto yy82;
                        }
                }
        } else {
                if(yyaccept <= 5) {
                        if(yyaccept <= 4) {
-                               goto yy63;
+                               goto yy74;
                        } else {
-                               goto yy77;
+                               goto yy88;
                        }
                } else {
                        if(yyaccept <= 6) {
-                               goto yy100;
+                               goto yy111;
                        } else {
-                               goto yy134;
+                               goto yy145;
                        }
                }
        }
-yy98:
+yy109:
        yyaccept = 6;
        YYMARKER = ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        if(yych <= 'Z') {
                if(yych <= '9') {
-                       if(yych >= '0') goto yy98;
+                       if(yych >= '0') goto yy109;
                } else {
-                       if(yych <= ':') goto yy96;
-                       if(yych >= 'A') goto yy98;
+                       if(yych <= ':') goto yy107;
+                       if(yych >= 'A') goto yy109;
                }
        } else {
                if(yych <= '_') {
-                       if(yych >= '_') goto yy98;
+                       if(yych >= '_') goto yy109;
                } else {
-                       if(yych <= '`') goto yy100;
-                       if(yych <= 'z') goto yy98;
+                       if(yych <= '`') goto yy111;
+                       if(yych <= 'z') goto yy109;
                }
        }
-yy100:
-#line 322 "scanner.re"
+yy111:
+#line 339 "scanner.re"
        {
                                        cur = cursor;
                                        tok+= 5; /* skip "re2c:" */
@@ -717,225 +759,225 @@ yy100:
                                        yylval.str = new Str(token());
                                        return CONFIG;
                                }
-#line 721 "scanner.cc"
-yy101:
+#line 763 "scanner.cc"
+yy112:
        YYCTXMARKER = YYCURSOR + 1;
        yych = *++YYCURSOR;
-       goto yy103;
-yy102:
+       goto yy114;
+yy113:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-yy103:
+yy114:
        if(yybm[0+yych] & 8) {
-               goto yy102;
+               goto yy113;
        }
-       if(yych != '{') goto yy97;
+       if(yych != '{') goto yy108;
        ++YYCURSOR;
        YYCURSOR = YYCTXMARKER;
-#line 279 "scanner.re"
+#line 296 "scanner.re"
        {
                                        RETURN(NOCOND);
                                }
-#line 741 "scanner.cc"
-yy106:
+#line 783 "scanner.cc"
+yy117:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-yy107:
+yy118:
        if(yybm[0+yych] & 16) {
-               goto yy106;
+               goto yy117;
        }
-       if(yych <= '[') goto yy97;
-       if(yych <= '\\') goto yy110;
-       goto yy111;
-yy108:
+       if(yych <= '[') goto yy108;
+       if(yych <= '\\') goto yy121;
+       goto yy122;
+yy119:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        if(yych <= '[') {
-               if(yych == 0x0A) goto yy97;
-               goto yy108;
+               if(yych == 0x0A) goto yy108;
+               goto yy119;
        } else {
-               if(yych <= '\\') goto yy113;
-               if(yych <= ']') goto yy114;
-               goto yy108;
+               if(yych <= '\\') goto yy124;
+               if(yych <= ']') goto yy125;
+               goto yy119;
        }
-yy110:
+yy121:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if(yych == 0x0A) goto yy97;
-       goto yy106;
-yy111:
+       if(yych == 0x0A) goto yy108;
+       goto yy117;
+yy122:
        ++YYCURSOR;
-#line 269 "scanner.re"
+#line 286 "scanner.re"
        {
                                        cur = cursor;
                                        yylval.regexp = ranToRE(token());
                                        return RANGE;
                                }
-#line 779 "scanner.cc"
-yy113:
+#line 821 "scanner.cc"
+yy124:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if(yych == 0x0A) goto yy97;
-       goto yy108;
-yy114:
+       if(yych == 0x0A) goto yy108;
+       goto yy119;
+yy125:
        ++YYCURSOR;
-#line 263 "scanner.re"
+#line 280 "scanner.re"
        {
                                        cur = cursor;
                                        yylval.regexp = invToRE(token());
                                        return RANGE;
                                }
-#line 794 "scanner.cc"
-yy116:
+#line 836 "scanner.cc"
+yy127:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-yy117:
+yy128:
        if(yybm[0+yych] & 32) {
-               goto yy116;
+               goto yy127;
        }
-       if(yych <= '&') goto yy97;
-       if(yych <= '\'') goto yy119;
+       if(yych <= '&') goto yy108;
+       if(yych <= '\'') goto yy130;
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if(yych == 0x0A) goto yy97;
-       goto yy116;
-yy119:
+       if(yych == 0x0A) goto yy108;
+       goto yy127;
+yy130:
        ++YYCURSOR;
-#line 250 "scanner.re"
+#line 267 "scanner.re"
        {
                                        cur = cursor;
                                        yylval.regexp = strToCaseInsensitiveRE(token());
                                        return STRING;
                                }
-#line 818 "scanner.cc"
-yy121:
+#line 860 "scanner.cc"
+yy132:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-yy122:
+yy133:
        if(yybm[0+yych] & 64) {
-               goto yy121;
+               goto yy132;
        }
-       if(yych <= '!') goto yy97;
-       if(yych <= '"') goto yy124;
+       if(yych <= '!') goto yy108;
+       if(yych <= '"') goto yy135;
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if(yych == 0x0A) goto yy97;
-       goto yy121;
-yy124:
+       if(yych == 0x0A) goto yy108;
+       goto yy132;
+yy135:
        ++YYCURSOR;
-#line 244 "scanner.re"
+#line 261 "scanner.re"
        {
                                        cur = cursor;
                                        yylval.regexp = strToRE(token());
                                        return STRING;
                                }
-#line 842 "scanner.cc"
-yy126:
+#line 884 "scanner.cc"
+yy137:
        ++YYCURSOR;
-#line 239 "scanner.re"
+#line 256 "scanner.re"
        {
                                        tok = cursor;
                                        RETURN(0);
                                }
-#line 850 "scanner.cc"
-yy128:
+#line 892 "scanner.cc"
+yy139:
        ++YYCURSOR;
-#line 234 "scanner.re"
+#line 251 "scanner.re"
        {
                                        depth = 1;
                                        goto comment;
                                }
-#line 858 "scanner.cc"
-yy130:
+#line 900 "scanner.cc"
+yy141:
        yych = *++YYCURSOR;
-       if(yych == ',') goto yy144;
-       goto yy132;
-yy131:
+       if(yych == ',') goto yy155;
+       goto yy143;
+yy142:
        ++YYCURSOR;
        if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
-yy132:
+yy143:
        if(yybm[0+yych] & 128) {
-               goto yy131;
+               goto yy142;
        }
-       if(yych == ',') goto yy137;
-       if(yych == '}') goto yy135;
-       goto yy97;
-yy133:
+       if(yych == ',') goto yy148;
+       if(yych == '}') goto yy146;
+       goto yy108;
+yy144:
        ++YYCURSOR;
-yy134:
-#line 318 "scanner.re"
+yy145:
+#line 335 "scanner.re"
        {
                                        fatal("illegal closure form, use '{n}', '{n,}', '{n,m}' where n and m are numbers");
                                }
-#line 881 "scanner.cc"
-yy135:
+#line 923 "scanner.cc"
+yy146:
        ++YYCURSOR;
-#line 300 "scanner.re"
+#line 317 "scanner.re"
        {
                                        yylval.extop.minsize = atoi((char *)tok+1);
                                        yylval.extop.maxsize = atoi((char *)tok+1);
                                        RETURN(CLOSESIZE);
                                }
-#line 890 "scanner.cc"
-yy137:
+#line 932 "scanner.cc"
+yy148:
        yyaccept = 7;
        yych = *(YYMARKER = ++YYCURSOR);
-       if(yych <= '/') goto yy134;
-       if(yych <= '9') goto yy140;
-       if(yych != '}') goto yy134;
+       if(yych <= '/') goto yy145;
+       if(yych <= '9') goto yy151;
+       if(yych != '}') goto yy145;
        ++YYCURSOR;
-#line 312 "scanner.re"
+#line 329 "scanner.re"
        {
                                        yylval.extop.minsize = atoi((char *)tok+1);
                                        yylval.extop.maxsize = -1;
                                        RETURN(CLOSESIZE);
                                }
-#line 904 "scanner.cc"
-yy140:
+#line 946 "scanner.cc"
+yy151:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if(yych <= '/') goto yy97;
-       if(yych <= '9') goto yy140;
-       if(yych != '}') goto yy97;
+       if(yych <= '/') goto yy108;
+       if(yych <= '9') goto yy151;
+       if(yych != '}') goto yy108;
        ++YYCURSOR;
-#line 306 "scanner.re"
+#line 323 "scanner.re"
        {
                                        yylval.extop.minsize = atoi((char *)tok+1);
                                        yylval.extop.maxsize = MAX(yylval.extop.minsize,atoi(strchr((char *)tok, ',')+1));
                                        RETURN(CLOSESIZE);
                                }
-#line 919 "scanner.cc"
-yy144:
+#line 961 "scanner.cc"
+yy155:
        yyaccept = 7;
        yych = *(YYMARKER = ++YYCURSOR);
-       if(yych <= '/') goto yy134;
-       if(yych <= '9') goto yy140;
-       if(yych != '}') goto yy134;
+       if(yych <= '/') goto yy145;
+       if(yych <= '9') goto yy151;
+       if(yych != '}') goto yy145;
        ++YYCURSOR;
-#line 295 "scanner.re"
+#line 312 "scanner.re"
        {
                                        yylval.op = '*';
                                        RETURN(CLOSE);
                                }
-#line 932 "scanner.cc"
+#line 974 "scanner.cc"
 }
-#line 360 "scanner.re"
+#line 377 "scanner.re"
 
 
 code:
 
-#line 939 "scanner.cc"
+#line 981 "scanner.cc"
 {
        YYCTYPE yych;
        static const unsigned char yybm[] = {
@@ -976,24 +1018,24 @@ code:
        yych = *YYCURSOR;
        if(yych <= '&') {
                if(yych <= 0x0A) {
-                       if(yych <= 0x00) goto yy155;
-                       if(yych <= 0x09) goto yy157;
-                       goto yy153;
+                       if(yych <= 0x00) goto yy166;
+                       if(yych <= 0x09) goto yy168;
+                       goto yy164;
                } else {
-                       if(yych == '"') goto yy159;
-                       goto yy157;
+                       if(yych == '"') goto yy170;
+                       goto yy168;
                }
        } else {
                if(yych <= '{') {
-                       if(yych <= '\'') goto yy160;
-                       if(yych <= 'z') goto yy157;
-                       goto yy151;
+                       if(yych <= '\'') goto yy171;
+                       if(yych <= 'z') goto yy168;
+                       goto yy162;
                } else {
-                       if(yych != '}') goto yy157;
+                       if(yych != '}') goto yy168;
                }
        }
        ++YYCURSOR;
-#line 364 "scanner.re"
+#line 381 "scanner.re"
        {
                                        if(--depth == 0)
                                        {
@@ -1003,18 +1045,18 @@ code:
                                        }
                                        goto code;
                                }
-#line 1007 "scanner.cc"
-yy151:
+#line 1049 "scanner.cc"
+yy162:
        ++YYCURSOR;
-#line 373 "scanner.re"
+#line 390 "scanner.re"
        {
                                        ++depth;
                                        goto code;
                                }
-#line 1015 "scanner.cc"
-yy153:
+#line 1057 "scanner.cc"
+yy164:
        ++YYCURSOR;
-#line 377 "scanner.re"
+#line 394 "scanner.re"
        {
                                        if(cursor == eof)
                                        {
@@ -1024,10 +1066,10 @@ yy153:
                                        cline++;
                                        goto code;
                                }
-#line 1028 "scanner.cc"
-yy155:
+#line 1070 "scanner.cc"
+yy166:
        ++YYCURSOR;
-#line 386 "scanner.re"
+#line 403 "scanner.re"
        {
                                        if(cursor == eof)
                                        {
@@ -1039,82 +1081,82 @@ yy155:
                                        }
                                        goto code;
                                }
-#line 1043 "scanner.cc"
-yy157:
+#line 1085 "scanner.cc"
+yy168:
        ++YYCURSOR;
-yy158:
-#line 397 "scanner.re"
+yy169:
+#line 414 "scanner.re"
        {
                                        goto code;
                                }
-#line 1051 "scanner.cc"
-yy159:
+#line 1093 "scanner.cc"
+yy170:
        yych = *(YYMARKER = ++YYCURSOR);
-       if(yych == 0x0A) goto yy158;
-       goto yy166;
-yy160:
+       if(yych == 0x0A) goto yy169;
+       goto yy177;
+yy171:
        yych = *(YYMARKER = ++YYCURSOR);
-       if(yych == 0x0A) goto yy158;
-       goto yy162;
-yy161:
+       if(yych == 0x0A) goto yy169;
+       goto yy173;
+yy172:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-yy162:
+yy173:
        if(yybm[0+yych] & 64) {
-               goto yy161;
+               goto yy172;
        }
-       if(yych <= '&') goto yy163;
-       if(yych <= '\'') goto yy157;
-       goto yy164;
-yy163:
+       if(yych <= '&') goto yy174;
+       if(yych <= '\'') goto yy168;
+       goto yy175;
+yy174:
        YYCURSOR = YYMARKER;
-       goto yy158;
-yy164:
+       goto yy169;
+yy175:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if(yych == 0x0A) goto yy163;
-       goto yy161;
-yy165:
+       if(yych == 0x0A) goto yy174;
+       goto yy172;
+yy176:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-yy166:
+yy177:
        if(yybm[0+yych] & 128) {
-               goto yy165;
+               goto yy176;
        }
-       if(yych <= '!') goto yy163;
-       if(yych <= '"') goto yy157;
+       if(yych <= '!') goto yy174;
+       if(yych <= '"') goto yy168;
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if(yych == 0x0A) goto yy163;
-       goto yy165;
+       if(yych == 0x0A) goto yy174;
+       goto yy176;
 }
-#line 400 "scanner.re"
+#line 417 "scanner.re"
 
 
 comment:
 
-#line 1101 "scanner.cc"
+#line 1143 "scanner.cc"
 {
        YYCTYPE yych;
        if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
        if(yych <= ')') {
-               if(yych == 0x0A) goto yy173;
-               goto yy175;
+               if(yych == 0x0A) goto yy184;
+               goto yy186;
        } else {
-               if(yych <= '*') goto yy170;
-               if(yych == '/') goto yy172;
-               goto yy175;
+               if(yych <= '*') goto yy181;
+               if(yych == '/') goto yy183;
+               goto yy186;
        }
-yy170:
+yy181:
        ++YYCURSOR;
-       if((yych = *YYCURSOR) == '/') goto yy178;
-yy171:
-#line 428 "scanner.re"
+       if((yych = *YYCURSOR) == '/') goto yy189;
+yy182:
+#line 445 "scanner.re"
        {
                                        if(cursor == eof)
                                        {
@@ -1122,14 +1164,14 @@ yy171:
                                        }
                                        goto comment;
                                }
-#line 1126 "scanner.cc"
-yy172:
+#line 1168 "scanner.cc"
+yy183:
        yych = *++YYCURSOR;
-       if(yych == '*') goto yy176;
-       goto yy171;
-yy173:
+       if(yych == '*') goto yy187;
+       goto yy182;
+yy184:
        ++YYCURSOR;
-#line 419 "scanner.re"
+#line 436 "scanner.re"
        {
                                        if(cursor == eof)
                                        {
@@ -1139,22 +1181,22 @@ yy173:
                                        cline++;
                                        goto comment;
                                }
-#line 1143 "scanner.cc"
-yy175:
+#line 1185 "scanner.cc"
+yy186:
        yych = *++YYCURSOR;
-       goto yy171;
-yy176:
+       goto yy182;
+yy187:
        ++YYCURSOR;
-#line 414 "scanner.re"
+#line 431 "scanner.re"
        {
                                        ++depth;
                                        fatal("ambiguous /* found");
                                        goto comment;
                                }
-#line 1155 "scanner.cc"
-yy178:
+#line 1197 "scanner.cc"
+yy189:
        ++YYCURSOR;
-#line 404 "scanner.re"
+#line 421 "scanner.re"
        {
                                        if(--depth == 0)
                                        {
@@ -1165,14 +1207,14 @@ yy178:
                                                goto comment;
                                        }
                                }
-#line 1169 "scanner.cc"
+#line 1211 "scanner.cc"
 }
-#line 435 "scanner.re"
+#line 452 "scanner.re"
 
 
 config:
 
-#line 1176 "scanner.cc"
+#line 1218 "scanner.cc"
 {
        YYCTYPE yych;
        static const unsigned char yybm[] = {
@@ -1212,65 +1254,65 @@ config:
        if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
        if(yych <= 0x1F) {
-               if(yych != 0x09) goto yy186;
+               if(yych != 0x09) goto yy197;
        } else {
-               if(yych <= ' ') goto yy182;
-               if(yych == '=') goto yy184;
-               goto yy186;
+               if(yych <= ' ') goto yy193;
+               if(yych == '=') goto yy195;
+               goto yy197;
        }
-yy182:
+yy193:
        ++YYCURSOR;
        yych = *YYCURSOR;
-       goto yy191;
-yy183:
-#line 439 "scanner.re"
+       goto yy202;
+yy194:
+#line 456 "scanner.re"
        {
                                        goto config;
                                }
-#line 1231 "scanner.cc"
-yy184:
+#line 1273 "scanner.cc"
+yy195:
        ++YYCURSOR;
        yych = *YYCURSOR;
-       goto yy189;
-yy185:
-#line 442 "scanner.re"
+       goto yy200;
+yy196:
+#line 459 "scanner.re"
        {
                                        iscfg = 2;
                                        cur = cursor;
                                        RETURN('=');
                                }
-#line 1243 "scanner.cc"
-yy186:
+#line 1285 "scanner.cc"
+yy197:
        ++YYCURSOR;
-#line 447 "scanner.re"
+#line 464 "scanner.re"
        {
                                        fatal("missing '='");
                                }
-#line 1250 "scanner.cc"
-yy188:
+#line 1292 "scanner.cc"
+yy199:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-yy189:
+yy200:
        if(yybm[0+yych] & 128) {
-               goto yy188;
+               goto yy199;
        }
-       goto yy185;
-yy190:
+       goto yy196;
+yy201:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-yy191:
-       if(yych == 0x09) goto yy190;
-       if(yych == ' ') goto yy190;
-       goto yy183;
+yy202:
+       if(yych == 0x09) goto yy201;
+       if(yych == ' ') goto yy201;
+       goto yy194;
 }
-#line 450 "scanner.re"
+#line 467 "scanner.re"
 
 
 value:
 
-#line 1274 "scanner.cc"
+#line 1316 "scanner.cc"
 {
        YYCTYPE yych;
        static const unsigned char yybm[] = {
@@ -1311,197 +1353,197 @@ value:
        yych = *YYCURSOR;
        if(yych <= '&') {
                if(yych <= 0x0D) {
-                       if(yych <= 0x08) goto yy200;
-                       if(yych <= 0x0A) goto yy194;
-                       if(yych <= 0x0C) goto yy200;
+                       if(yych <= 0x08) goto yy211;
+                       if(yych <= 0x0A) goto yy205;
+                       if(yych <= 0x0C) goto yy211;
                } else {
                        if(yych <= ' ') {
-                               if(yych <= 0x1F) goto yy200;
+                               if(yych <= 0x1F) goto yy211;
                        } else {
-                               if(yych == '"') goto yy202;
-                               goto yy200;
+                               if(yych == '"') goto yy213;
+                               goto yy211;
                        }
                }
        } else {
                if(yych <= '/') {
-                       if(yych <= '\'') goto yy204;
-                       if(yych == '-') goto yy197;
-                       goto yy200;
+                       if(yych <= '\'') goto yy215;
+                       if(yych == '-') goto yy208;
+                       goto yy211;
                } else {
                        if(yych <= '9') {
-                               if(yych <= '0') goto yy195;
-                               goto yy198;
+                               if(yych <= '0') goto yy206;
+                               goto yy209;
                        } else {
-                               if(yych != ';') goto yy200;
+                               if(yych != ';') goto yy211;
                        }
                }
        }
-yy194:
-#line 460 "scanner.re"
+yy205:
+#line 477 "scanner.re"
        {
                                        cur = cursor;
                                        yylval.str = new Str(token());
                                        iscfg = 0;
                                        return VALUE;
                                }
-#line 1348 "scanner.cc"
-yy195:
+#line 1390 "scanner.cc"
+yy206:
        ++YYCURSOR;
        if(yybm[0+(yych = *YYCURSOR)] & 8) {
-               goto yy200;
+               goto yy211;
        }
-yy196:
-#line 454 "scanner.re"
+yy207:
+#line 471 "scanner.re"
        {
                                        cur = cursor;
                                        yylval.number = atoi(token().to_string().c_str());
                                        iscfg = 0;
                                        return NUMBER;
                                }
-#line 1362 "scanner.cc"
-yy197:
+#line 1404 "scanner.cc"
+yy208:
        yych = *++YYCURSOR;
-       if(yych <= '0') goto yy201;
-       if(yych >= ':') goto yy201;
-yy198:
+       if(yych <= '0') goto yy212;
+       if(yych >= ':') goto yy212;
+yy209:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        if(yybm[0+yych] & 4) {
-               goto yy198;
+               goto yy209;
        }
        if(yych <= 0x0D) {
-               if(yych <= 0x08) goto yy200;
-               if(yych <= 0x0A) goto yy196;
-               if(yych >= 0x0D) goto yy196;
+               if(yych <= 0x08) goto yy211;
+               if(yych <= 0x0A) goto yy207;
+               if(yych >= 0x0D) goto yy207;
        } else {
                if(yych <= ' ') {
-                       if(yych >= ' ') goto yy196;
+                       if(yych >= ' ') goto yy207;
                } else {
-                       if(yych == ';') goto yy196;
+                       if(yych == ';') goto yy207;
                }
        }
-yy200:
+yy211:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-yy201:
+yy212:
        if(yybm[0+yych] & 8) {
-               goto yy200;
+               goto yy211;
        }
-       goto yy194;
-yy202:
+       goto yy205;
+yy213:
        YYMARKER = ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        if(yybm[0+yych] & 16) {
-               goto yy202;
+               goto yy213;
        }
        if(yych <= '!') {
-               if(yych == 0x0A) goto yy194;
-               goto yy212;
+               if(yych == 0x0A) goto yy205;
+               goto yy223;
        } else {
-               if(yych <= '"') goto yy200;
-               if(yych <= '[') goto yy212;
-               goto yy214;
+               if(yych <= '"') goto yy211;
+               if(yych <= '[') goto yy223;
+               goto yy225;
        }
-yy204:
+yy215:
        YYMARKER = ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        if(yybm[0+yych] & 32) {
-               goto yy204;
+               goto yy215;
        }
        if(yych <= '&') {
-               if(yych == 0x0A) goto yy194;
+               if(yych == 0x0A) goto yy205;
        } else {
-               if(yych <= '\'') goto yy200;
-               if(yych >= '\\') goto yy209;
+               if(yych <= '\'') goto yy211;
+               if(yych >= '\\') goto yy220;
        }
-yy206:
+yy217:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        if(yybm[0+yych] & 64) {
-               goto yy206;
+               goto yy217;
        }
-       if(yych <= '&') goto yy208;
-       if(yych <= '\'') goto yy210;
-       goto yy211;
-yy208:
+       if(yych <= '&') goto yy219;
+       if(yych <= '\'') goto yy221;
+       goto yy222;
+yy219:
        YYCURSOR = YYMARKER;
-       goto yy194;
-yy209:
+       goto yy205;
+yy220:
        YYMARKER = ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        if(yych <= 0x0D) {
                if(yych <= 0x09) {
-                       if(yych <= 0x08) goto yy204;
-                       goto yy206;
+                       if(yych <= 0x08) goto yy215;
+                       goto yy217;
                } else {
-                       if(yych <= 0x0A) goto yy194;
-                       if(yych <= 0x0C) goto yy204;
-                       goto yy206;
+                       if(yych <= 0x0A) goto yy205;
+                       if(yych <= 0x0C) goto yy215;
+                       goto yy217;
                }
        } else {
                if(yych <= ' ') {
-                       if(yych <= 0x1F) goto yy204;
-                       goto yy206;
+                       if(yych <= 0x1F) goto yy215;
+                       goto yy217;
                } else {
-                       if(yych == ';') goto yy206;
-                       goto yy204;
+                       if(yych == ';') goto yy217;
+                       goto yy215;
                }
        }
-yy210:
+yy221:
        yych = *++YYCURSOR;
-       goto yy194;
-yy211:
+       goto yy205;
+yy222:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if(yych == 0x0A) goto yy208;
-       goto yy206;
-yy212:
+       if(yych == 0x0A) goto yy219;
+       goto yy217;
+yy223:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        if(yybm[0+yych] & 128) {
-               goto yy212;
+               goto yy223;
        }
-       if(yych <= '!') goto yy208;
-       if(yych <= '"') goto yy210;
-       goto yy215;
-yy214:
+       if(yych <= '!') goto yy219;
+       if(yych <= '"') goto yy221;
+       goto yy226;
+yy225:
        YYMARKER = ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        if(yych <= 0x0D) {
                if(yych <= 0x09) {
-                       if(yych <= 0x08) goto yy202;
-                       goto yy212;
+                       if(yych <= 0x08) goto yy213;
+                       goto yy223;
                } else {
-                       if(yych <= 0x0A) goto yy194;
-                       if(yych <= 0x0C) goto yy202;
-                       goto yy212;
+                       if(yych <= 0x0A) goto yy205;
+                       if(yych <= 0x0C) goto yy213;
+                       goto yy223;
                }
        } else {
                if(yych <= ' ') {
-                       if(yych <= 0x1F) goto yy202;
-                       goto yy212;
+                       if(yych <= 0x1F) goto yy213;
+                       goto yy223;
                } else {
-                       if(yych == ';') goto yy212;
-                       goto yy202;
+                       if(yych == ';') goto yy223;
+                       goto yy213;
                }
        }
-yy215:
+yy226:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if(yych == 0x0A) goto yy208;
-       goto yy212;
+       if(yych == 0x0A) goto yy219;
+       goto yy223;
 }
-#line 466 "scanner.re"
+#line 483 "scanner.re"
 
 }
 
index d284e967f266706e436d59831e4f89250555b1ea..d01c2b302e2fa4b2b303316734a2bb6ee9a68dba 100644 (file)
@@ -313,6 +313,28 @@ void genIf(std::ostream &o, uint ind, const char *cmp, uint v, bool &readCh)
        o << ") ";
 }
 
+static void genYyfill(std::ostream &o, uint ind, uint need)
+{
+       if (bUseYYFillParam)
+       {
+               o << mapCodeName["YYFILL"] << "(" << need << ")";
+       }
+       else
+       {
+               std::string yyfill(mapCodeName["YYFILL"]);
+               std::string::size_type pos;
+               char cnt[16];
+
+               sprintf(cnt, "%d", need);
+
+               while((pos = yyfill.find(yyfillLength)) != std::string::npos)
+               {
+                       yyfill.replace(pos, yyfillLength.length(), cnt);
+               }
+               o << yyfill;
+       }
+}
+
 static void need(std::ostream &o, uint ind, uint n, bool & readCh, bool bSetMarker)
 {
        uint fillIndex = next_fill_index;
@@ -327,15 +349,13 @@ static void need(std::ostream &o, uint ind, uint n, bool & readCh, bool bSetMark
        {
                if (n == 1)
                {
-                       o << indent(ind) << "if(" << mapCodeName["YYLIMIT"] << " == " << mapCodeName["YYCURSOR"] << ") " << mapCodeName["YYFILL"];
+                       o << indent(ind) << "if(" << mapCodeName["YYLIMIT"] << " == " << mapCodeName["YYCURSOR"] << ") ";
+                       genYyfill(o, ind, n);
                }
                else
                {
-                       o << indent(ind) << "if((" << mapCodeName["YYLIMIT"] << " - " << mapCodeName["YYCURSOR"] << ") < " << n << ") " << mapCodeName["YYFILL"];
-               }
-               if (bUseYYFillParam)
-               {
-                       o << "(" << n << ")";
+                       o << indent(ind) << "if((" << mapCodeName["YYLIMIT"] << " - " << mapCodeName["YYCURSOR"] << ") < " << n << ") ";
+                       genYyfill(o, ind, n);
                }
                o << ";\n";
        }
@@ -1721,7 +1741,7 @@ void genCondGoto(std::ostream &o, uint ind, const RegExpMap& specMap)
        
                                for(RegExpMap::const_iterator it = specMap.begin(); it != specMap.end(); ++it)
                                {
-                                       o << indent(ind) << "case " << it->first << ": goto " << condPrefix << it->first << ";\n";
+                                       o << indent(ind) << "case " << condEnumPrefix << it->first << ": goto " << condPrefix << it->first << ";\n";
                                }
                                o << indent(ind) << "}\n";
                        }
@@ -1730,6 +1750,18 @@ void genCondGoto(std::ostream &o, uint ind, const RegExpMap& specMap)
        }
 }
 
+void genTypes(std::string& o, uint ind, const RegExpMap& specMap)
+{
+       o.clear();
+
+       o += indent(ind++) + "enum " + mapCodeName["YYCONDTYPE"] + " {\n";
+       for(RegExpMap::const_iterator it = specMap.begin(); it != specMap.end(); ++it)
+       {
+               o += indent(ind) + condEnumPrefix + it->first + ",\n";
+       }
+       o += indent(--ind) + "};\n";
+}
+
 void genHeader(std::ostream &o, uint ind, const RegExpMap& specMap)
 {
        o << "/* Generated by re2c " PACKAGE_VERSION;
@@ -1743,12 +1775,8 @@ void genHeader(std::ostream &o, uint ind, const RegExpMap& specMap)
        o << headerFileInfo;
        o << "\n";
        // now the type(s)
-       o << indent(ind++) << "enum " << mapCodeName["YYCONDTYPE"] << " {\n";
-       for(RegExpMap::const_iterator it = specMap.begin(); it != specMap.end(); ++it)
-       {
-               o << indent(ind) << it->first << ",\n";
-       }
-       o << indent(--ind) << "}\n";
+       genTypes(typesInline, ind, specMap);
+       o << typesInline;
 }
 
 std::ostream& operator << (std::ostream& o, const file_info& li)
@@ -1881,9 +1909,13 @@ void Scanner::config(const Str& cfg, const Str& val)
        {
                condPrefix = strVal;
        }
-       else if (cfg.to_string() == "yych:conversion")
+       else if (cfg.to_string() == "condenumprefix")
+       {
+               condEnumPrefix = strVal;
+       }
+       else if (cfg.to_string() == "define:YYFILL:len")
        {
-               yychConversion = mapCodeName["YYCTYPE"];
+               yyfillLength = strVal;
        }
        else if (mapVariableKeys.find(cfg.to_string()) != mapVariableKeys.end())
     {
index 21dc7d7d608cc082967b77d6eebd93ae0802facb..fea02d4b0595c720f809cfcaca1a141ec7a64c6c 100644 (file)
@@ -41,7 +41,9 @@ extern bool bUseStartLabel;
 extern std::string startLabelName;
 extern std::string labelPrefix;
 extern std::string condPrefix;
+extern std::string condEnumPrefix;
 extern std::string yychConversion;
+extern std::string yyfillLength;
 extern uint maxFill;
 extern uint next_label;
 extern uint cGotoThreshold;
@@ -52,10 +54,10 @@ extern std::string indString;
 extern bool yybmHexTable;
 extern bool bUseStateAbort;
 extern bool bUseStateNext;
-extern bool bWroteGetState;
-extern bool bWroteCondCheck;
 extern bool bUseYYFill;
 extern bool bUseYYFillParam;
+extern bool bWroteGetState;
+extern bool bWroteCondCheck;
 
 extern uint asc2ebc[256];
 extern uint ebc2asc[256];
@@ -65,21 +67,13 @@ extern uint *xlat, *talx;
 extern uint next_fill_index;
 extern uint last_fill_index;
 extern std::set<uint> vUsedLabels;
-extern re2c::CodeNames mapCodeName;
+extern CodeNames mapCodeName;
+extern std::string typesInline;
 
 extern uint nRealChars;
 
-inline char octCh(uint c)
-{
-       return '0' + c % 8;
-}
-
-inline char hexCh(uint c)
-{
-       static const char * sHex = "0123456789ABCDEF";
-       
-       return sHex[c & 0x0F];
-}
+extern char octCh(uint c);
+extern char hexCh(uint c);
 
 } // end namespace re2c
 
index e0980836eb7ded117fef4b3422c1ed0a2bdcc903..bced4c9d0a8a71fc99abc1a4c306aac51bae05d3 100644 (file)
@@ -51,7 +51,9 @@ bool bUseYYFillParam = true;
 std::string startLabelName;
 std::string labelPrefix("yy");
 std::string condPrefix("yyc_");
+std::string condEnumPrefix("yyc");
 std::string yychConversion("");
+std::string yyfillLength("@@");
 uint maxFill = 1;
 uint next_label = 0;
 uint cGotoThreshold = 9;
@@ -68,7 +70,8 @@ uint nRealChars = 256;
 uint next_fill_index = 0;
 uint last_fill_index = 0;
 std::set<uint> vUsedLabels;
-re2c::CodeNames mapCodeName;
+CodeNames mapCodeName;
+std::string typesInline;
 
 free_list<RegExp*> RegExp::vFreeList;
 free_list<Range*>  Range::vFreeList;
index ec62df9f314afc45bd02c4a4b3e389b0652a3346..2ea0175a0b4bddaff5524595a03b45cf20e08467 100644 (file)
@@ -416,6 +416,10 @@ void parse(Scanner& i, std::ostream& o, std::ostream* h)
                        {
                                genHeader(*h, 0, specMap);
                        }
+                       else
+                       {
+                               genTypes(typesInline, 0, specMap);
+                       }
                }
                else if(spec)
                {
index 9dd676900d4cd372fcea884bc7ab7e585862057c..c6b927b6114138618b0a819a1784330643573e6e 100644 (file)
--- a/re2c/re.h
+++ b/re2c/re.h
@@ -7,6 +7,7 @@
 #include <map>
 #include <list>
 #include <vector>
+#include <string>
 #include "token.h"
 #include "ins.h"
 #include "globals.h"
@@ -495,9 +496,10 @@ typedef std::list<RuleOp*>              RuleOpList;
 
 extern void genCode(std::ostream&, uint&, RegExp*, const RegExpMap*, const std::string&, bool);
 extern void genGetState(std::ostream&, uint&, uint);
-extern void genCondTable(std::ostream &o, uint, const RegExpMap&);
-extern void genCondGoto(std::ostream &o, uint, const RegExpMap&);
-extern void genHeader(std::ostream &o, uint, const RegExpMap&);
+extern void genCondTable(std::ostream&, uint, const RegExpMap&);
+extern void genCondGoto(std::ostream&, uint, const RegExpMap&);
+extern void genTypes(std::string&, uint, const RegExpMap&);
+extern void genHeader(std::ostream&, uint, const RegExpMap&);
 
 extern RegExp *mkDiff(RegExp*, RegExp*);
 extern RegExp *mkAlt(RegExp*, RegExp*);
index 38843f3c3ca60eb0c3fbac8144c89c80347624c0..b0f14dbb2148bb160fd6c27de1752bc313f8f87c 100644 (file)
@@ -142,6 +142,23 @@ echo:
                                        ignore_eoc = true;
                                        goto echo;
                                }
+       "/*!types:re2c" {
+                                       if (bSinglePass)
+                                       {
+                                               fatal("cannot generate types inline in single pass mode");
+                                       }
+                                       tok = pos = cursor;
+                                       ignore_eoc = true;
+                                       if (bLastPass)
+                                       {
+                                               out << outputFileInfo;
+                                               out << "\n";
+                                               out << typesInline;
+                                               out << "\n";
+                                               out << sourceFileInfo;
+                                       }
+                                       goto echo;
+                               }
        "*" "/" "\r"? "\n"      {
                                        cline++;
                                        if (ignore_eoc)
index 0343dfafefa1268d60b26c26632a0e8ee0b5b793..78557556d961c38dab4fa17e55f9b1be5627b68c 100755 (executable)
@@ -5,8 +5,8 @@
 {
        YYCTYPE yych;
        switch(YYCONDITION) {
-       case a: goto yyc_a;
-       case b: goto yyc_b;
+       case yyca: goto yyc_a;
+       case yycb: goto yyc_b;
        }
 /* *********************************** */
 yyc_a:
index 7644fbcfe6e8c7de9ca09d74e9431977586deaba..f9b152ec0f01686f6812567e24a4ef8135987535 100755 (executable)
@@ -5,9 +5,9 @@
 {
        YYCTYPE yych;
        switch(YYCONDITION) {
-       case 0: goto yyc_0;
-       case r1: goto yyc_r1;
-       case r2: goto yyc_r2;
+       case yyc0: goto yyc_0;
+       case yycr1: goto yyc_r1;
+       case yycr2: goto yyc_r2;
        }
 /* *********************************** */
 yyc_0:
index 9cda0d7849ce978024a9e8cf321aa5bec02be302..74bc7ef94b27266c560caa642462dfeb18e6d099 100755 (executable)
@@ -1,6 +1,6 @@
 /* Generated by re2c */
 
 enum YYCONDTYPE {
-       comment,
-       normal,
-}
+       yyccomment,
+       yycnormal,
+};
index 9c472d7a937291a126e147f838b519944ebf7e79..29a8d28bcfdfdfa0bb2a4542673a5e7305bb9f0a 100755 (executable)
@@ -2,6 +2,6 @@
 #line 3 "condition_05.cgt.h"
 
 enum YYCONDTYPE {
-       comment,
-       normal,
-}
+       yyccomment,
+       yycnormal,
+};
diff --git a/re2c/test/condition_06.cs.c b/re2c/test/condition_06.cs.c
new file mode 100755 (executable)
index 0000000..9eef88d
--- /dev/null
@@ -0,0 +1,391 @@
+/* Generated by re2c */
+#line 1 "condition_06.cs.re"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define        BSIZE   8192
+
+typedef struct Scanner
+{
+       FILE                    *fp;
+       unsigned char   *cur, *tok, *lim, *eof;
+       unsigned char   buffer[BSIZE];
+} Scanner;
+
+int fill(Scanner *s, int len)
+{
+       if (!len)
+       {
+               s->cur = s->tok = s->lim = s->buffer;
+               s->eof = 0;
+       }
+       if (!s->eof)
+       {
+               int got, cnt = s->tok - s->buffer;
+
+               if (cnt > 0)
+               {
+                       memcpy(s->buffer, s->tok, s->lim - s->tok);
+                       s->tok -= cnt;
+                       s->cur -= cnt;
+                       s->lim -= cnt;
+               }
+               cnt = BSIZE - cnt;
+               if ((got = fread(s->lim, 1, cnt, s->fp)) != cnt)
+               {
+                       s->eof = &s->lim[got];
+               }
+               s->lim += got;
+       }
+       else if (s->cur + len > s->eof)
+       {
+               return 0; /* not enough input data */
+       }
+       return -1;
+}
+
+void fputl(const char *s, size_t len, FILE *stream)
+{
+       while(len-- > 0)
+       {
+               fputc(*s++, stream);
+       }
+}
+
+#line 57 "<stdout>"
+
+enum YYCONDTYPE {
+       EStateComment,
+       EStateNormal,
+       EStateSkiptoeol,
+       EStateString,
+};
+
+#line 54 "condition_06.cs.re"
+
+void scan(Scanner *s)
+{
+       int state = EStateNormal;
+       
+       fill(s, 0);
+
+       for(;;)
+       {
+               s->tok = s->cur;
+
+#line 78 "<stdout>"
+               {
+                       unsigned char yych;
+                       if (state < 2) {
+                               if (state < 1) {
+                                       goto yyc_Comment;
+                               } else {
+                                       goto yyc_Normal;
+                               }
+                       } else {
+                               if (state < 3) {
+                                       goto yyc_Skiptoeol;
+                               } else {
+                                       goto yyc_String;
+                               }
+                       }
+/* *********************************** */
+yyc_Comment:
+
+                       if((s->lim - s->cur) < 2) { if(fill(s, 2) >= 0) break; };
+                       yych = *s->cur;
+                       if(yych != '*') goto yy4;
+                       ++s->cur;
+                       if((yych = *s->cur) == '/') goto yy5;
+yy3:
+#line 147 "condition_06.cs.re"
+                       {
+                               goto yyc_Comment;
+                       }
+#line 107 "<stdout>"
+yy4:
+                       yych = *++s->cur;
+                       goto yy3;
+yy5:
+                       ++s->cur;
+#line 143 "condition_06.cs.re"
+                       {
+                               continue;
+                       }
+#line 117 "<stdout>"
+/* *********************************** */
+yyc_Normal:
+                       if((s->lim - s->cur) < 3) { if(fill(s, 3) >= 0) break; };
+                       yych = *s->cur;
+                       if(yych <= '.') {
+                               if(yych == '"') goto yy12;
+                               goto yy14;
+                       } else {
+                               if(yych <= '/') goto yy11;
+                               if(yych != '?') goto yy14;
+                       }
+                       yych = *(s->tok = ++s->cur);
+                       if(yych == '?') goto yy19;
+yy10:
+#line 138 "condition_06.cs.re"
+                       {
+                               fputc(*s->tok, stdout);
+                               continue;
+                       }
+#line 137 "<stdout>"
+yy11:
+                       yych = *++s->cur;
+                       if(yych == '*') goto yy17;
+                       if(yych == '/') goto yy15;
+                       goto yy10;
+yy12:
+                       ++s->cur;
+#line 132 "condition_06.cs.re"
+                       {
+                               fputc(*s->tok, stdout);
+                               state = EStateString;
+                               continue;
+                       }
+#line 151 "<stdout>"
+yy14:
+                       yych = *++s->cur;
+                       goto yy10;
+yy15:
+                       ++s->cur;
+#line 128 "condition_06.cs.re"
+                       {
+                               goto yyc_Skiptoeol;
+                       }
+#line 161 "<stdout>"
+yy17:
+                       ++s->cur;
+#line 124 "condition_06.cs.re"
+                       {
+                               goto yyc_Comment;
+                       }
+#line 168 "<stdout>"
+yy19:
+                       yych = *++s->cur;
+                       switch(yych) {
+                       case '!':       goto yy35;
+                       case '\'':      goto yy33;
+                       case '(':       goto yy21;
+                       case ')':       goto yy23;
+                       case '-':       goto yy37;
+                       case '/':       goto yy31;
+                       case '<':       goto yy25;
+                       case '=':       goto yy29;
+                       case '>':       goto yy27;
+                       default:        goto yy20;
+                       }
+yy20:
+                       s->cur = s->tok;
+                       goto yy10;
+yy21:
+                       ++s->cur;
+#line 79 "condition_06.cs.re"
+                       {
+                               fputc('[', stdout);
+                               continue;
+                       }
+#line 193 "<stdout>"
+yy23:
+                       ++s->cur;
+#line 84 "condition_06.cs.re"
+                       {
+                               fputc(']', stdout);
+                               continue;
+                       }
+#line 201 "<stdout>"
+yy25:
+                       ++s->cur;
+#line 89 "condition_06.cs.re"
+                       {
+                               fputc('{', stdout);
+                               continue;
+                       }
+#line 209 "<stdout>"
+yy27:
+                       ++s->cur;
+#line 94 "condition_06.cs.re"
+                       {
+                               fputc('}', stdout);
+                               continue;
+                       }
+#line 217 "<stdout>"
+yy29:
+                       ++s->cur;
+#line 99 "condition_06.cs.re"
+                       {
+                               fputc('#', stdout);
+                               continue;
+                       }
+#line 225 "<stdout>"
+yy31:
+                       ++s->cur;
+#line 104 "condition_06.cs.re"
+                       {
+                               fputc('\\', stdout);
+                               continue;
+                       }
+#line 233 "<stdout>"
+yy33:
+                       ++s->cur;
+#line 109 "condition_06.cs.re"
+                       {
+                               fputc('^', stdout);
+                               continue;
+                       }
+#line 241 "<stdout>"
+yy35:
+                       ++s->cur;
+#line 114 "condition_06.cs.re"
+                       {
+                               fputc('|', stdout);
+                               continue;
+                       }
+#line 249 "<stdout>"
+yy37:
+                       ++s->cur;
+#line 119 "condition_06.cs.re"
+                       {
+                               fputc('~', stdout);
+                               continue;
+                       }
+#line 257 "<stdout>"
+/* *********************************** */
+yyc_Skiptoeol:
+                       if((s->lim - s->cur) < 5) { if(fill(s, 5) >= 0) break; };
+                       yych = *s->cur;
+                       if(yych <= '>') {
+                               if(yych == 0x0A) goto yy44;
+                               goto yy46;
+                       } else {
+                               if(yych <= '?') goto yy41;
+                               if(yych == '\\') goto yy43;
+                               goto yy46;
+                       }
+yy41:
+                       yych = *(s->tok = ++s->cur);
+                       if(yych == '?') goto yy51;
+yy42:
+#line 163 "condition_06.cs.re"
+                       {
+                               goto yyc_Skiptoeol;
+                       }
+#line 278 "<stdout>"
+yy43:
+                       yych = *(s->tok = ++s->cur);
+                       if(yych == 0x0A) goto yy49;
+                       if(yych == 0x0D) goto yy47;
+                       goto yy42;
+yy44:
+                       ++s->cur;
+#line 159 "condition_06.cs.re"
+                       {
+                               continue;
+                       }
+#line 290 "<stdout>"
+yy46:
+                       yych = *++s->cur;
+                       goto yy42;
+yy47:
+                       yych = *++s->cur;
+                       if(yych == 0x0A) goto yy49;
+yy48:
+                       s->cur = s->tok;
+                       goto yy42;
+yy49:
+                       ++s->cur;
+#line 155 "condition_06.cs.re"
+                       {
+                               goto yyc_Skiptoeol;
+                       }
+#line 306 "<stdout>"
+yy51:
+                       yych = *++s->cur;
+                       if(yych != '/') goto yy48;
+                       yych = *++s->cur;
+                       if(yych == 0x0A) goto yy54;
+                       if(yych != 0x0D) goto yy48;
+                       yych = *++s->cur;
+                       if(yych != 0x0A) goto yy48;
+yy54:
+                       ++s->cur;
+#line 151 "condition_06.cs.re"
+                       {
+                               goto yyc_Skiptoeol;
+                       }
+#line 321 "<stdout>"
+/* *********************************** */
+yyc_String:
+                       if((s->lim - s->cur) < 2) { if(fill(s, 2) >= 0) break; };
+                       yych = *s->cur;
+                       if(yych == '"') goto yy60;
+                       if(yych != '\\') goto yy62;
+                       ++s->cur;
+                       if((yych = *s->cur) != 0x0A) goto yy63;
+yy59:
+#line 177 "condition_06.cs.re"
+                       {
+                               fputc(*s->tok, stdout);
+                               continue;
+                       }
+#line 336 "<stdout>"
+yy60:
+                       ++s->cur;
+#line 172 "condition_06.cs.re"
+                       {
+                               fputc(*s->tok, stdout);
+                               continue;
+                       }
+#line 344 "<stdout>"
+yy62:
+                       yych = *++s->cur;
+                       goto yy59;
+yy63:
+                       ++s->cur;
+#line 167 "condition_06.cs.re"
+                       {
+                               fputl((const char*)s->tok, 2, stdout);
+                               continue;
+                       }
+#line 355 "<stdout>"
+               }
+#line 181 "condition_06.cs.re"
+
+       }
+}
+
+int main(int argc, char **argv)
+{
+       Scanner in;
+       char c;
+
+       if (argc != 2)
+       {
+               fprintf(stderr, "%s <file>\n", argv[0]);
+               return 1;;
+       }
+
+       memset((char*) &in, 0, sizeof(in));
+
+       if (!strcmp(argv[1], "-"))
+       {
+               in.fp = stdin;
+       }
+       else if ((in.fp = fopen(argv[1], "r")) == NULL)
+       {
+               fprintf(stderr, "Cannot open file '%s'\n", argv[1]);
+               return 1;
+       }
+
+       scan(&in);
+
+       if (in.fp != stdin)
+       {
+               fclose(in.fp);
+       }
+       return 0;
+}
diff --git a/re2c/test/condition_06.cs.re b/re2c/test/condition_06.cs.re
new file mode 100755 (executable)
index 0000000..6615229
--- /dev/null
@@ -0,0 +1,215 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define        BSIZE   8192
+
+typedef struct Scanner
+{
+       FILE                    *fp;
+       unsigned char   *cur, *tok, *lim, *eof;
+       unsigned char   buffer[BSIZE];
+} Scanner;
+
+int fill(Scanner *s, int len)
+{
+       if (!len)
+       {
+               s->cur = s->tok = s->lim = s->buffer;
+               s->eof = 0;
+       }
+       if (!s->eof)
+       {
+               int got, cnt = s->tok - s->buffer;
+
+               if (cnt > 0)
+               {
+                       memcpy(s->buffer, s->tok, s->lim - s->tok);
+                       s->tok -= cnt;
+                       s->cur -= cnt;
+                       s->lim -= cnt;
+               }
+               cnt = BSIZE - cnt;
+               if ((got = fread(s->lim, 1, cnt, s->fp)) != cnt)
+               {
+                       s->eof = &s->lim[got];
+               }
+               s->lim += got;
+       }
+       else if (s->cur + len > s->eof)
+       {
+               return 0; /* not enough input data */
+       }
+       return -1;
+}
+
+void fputl(const char *s, size_t len, FILE *stream)
+{
+       while(len-- > 0)
+       {
+               fputc(*s++, stream);
+       }
+}
+
+/*!types:re2c */
+
+void scan(Scanner *s)
+{
+       int state = EStateNormal;
+       
+       fill(s, 0);
+
+       for(;;)
+       {
+               s->tok = s->cur;
+/*!re2c
+
+re2c:define:YYCTYPE     = "unsigned char";
+re2c:define:YYCURSOR    = s->cur;
+re2c:define:YYLIMIT     = s->lim;
+re2c:define:YYMARKER    = s->tok;
+re2c:define:YYFILL:len  = #;
+re2c:define:YYFILL      = "{ if(fill(s, #) >= 0) break; }";
+re2c:define:YYCONDITION = state;
+re2c:yyfill:parameter   = 0;
+re2c:indent:top         = 2;
+re2c:condenumprefix     = EState;
+
+<Normal>       "??("
+                       {
+                               fputc('[', stdout);
+                               continue;
+                       }
+<Normal>       "??)"
+                       {
+                               fputc(']', stdout);
+                               continue;
+                       }
+<Normal>       "??<"
+                       {
+                               fputc('{', stdout);
+                               continue;
+                       }
+<Normal>       "??>"
+                       {
+                               fputc('}', stdout);
+                               continue;
+                       }
+<Normal>       "??="
+                       {
+                               fputc('#', stdout);
+                               continue;
+                       }
+<Normal>       "??/"
+                       {
+                               fputc('\\', stdout);
+                               continue;
+                       }
+<Normal>       "??'"
+                       {
+                               fputc('^', stdout);
+                               continue;
+                       }
+<Normal>       "??!"
+                       {
+                               fputc('|', stdout);
+                               continue;
+                       }
+<Normal>       "??-"
+                       {
+                               fputc('~', stdout);
+                               continue;
+                       }
+<Normal>       "/*"
+                       {
+                               goto yyc_Comment;
+                       }
+<Normal>       "//"
+                       {
+                               goto yyc_Skiptoeol;
+                       }
+<Normal>       '"'
+                       {
+                               fputc(*s->tok, stdout);
+                               state = EStateString;
+                               continue;
+                       }
+<Normal>       [^]
+                       {
+                               fputc(*s->tok, stdout);
+                               continue;
+                       }
+<Comment>      "*" "/"
+                       {
+                               continue;
+                       }
+<Comment>      [^]
+                       {
+                               goto yyc_Comment;
+                       }
+<Skiptoeol>    "??/" "\r"? "\n"
+                       {
+                               goto yyc_Skiptoeol;
+                       }
+<Skiptoeol>    "\\" "\r"? "\n"
+                       {
+                               goto yyc_Skiptoeol;
+                       }
+<Skiptoeol>    "\n"
+                       {
+                               continue;
+                       }
+<Skiptoeol> [^]
+                       {
+                               goto yyc_Skiptoeol;
+                       }
+<String>       '\\' .
+                       {
+                               fputl((const char*)s->tok, 2, stdout);
+                               continue;
+                       }
+<String>       '"'
+                       {
+                               fputc(*s->tok, stdout);
+                               continue;
+                       }
+<String>       [^]
+                       {
+                               fputc(*s->tok, stdout);
+                               continue;
+                       }
+*/
+       }
+}
+
+int main(int argc, char **argv)
+{
+       Scanner in;
+       char c;
+
+       if (argc != 2)
+       {
+               fprintf(stderr, "%s <file>\n", argv[0]);
+               return 1;;
+       }
+
+       memset((char*) &in, 0, sizeof(in));
+
+       if (!strcmp(argv[1], "-"))
+       {
+               in.fp = stdin;
+       }
+       else if ((in.fp = fopen(argv[1], "r")) == NULL)
+       {
+               fprintf(stderr, "Cannot open file '%s'\n", argv[1]);
+               return 1;
+       }
+
+       scan(&in);
+
+       if (in.fp != stdin)
+       {
+               fclose(in.fp);
+       }
+       return 0;
+}
index a8be85ed34d74adbcadb901cdcb086e78e6e858f..ef690ca546ed3eb1d21dead030fca244f5793a09 100644 (file)
@@ -4,6 +4,18 @@
 namespace re2c
 {
 
+char octCh(uint c)
+{
+       return '0' + c % 8;
+}
+
+static const char * sHex = "0123456789ABCDEF";
+
+char hexCh(uint c)
+{
+       return sHex[c & 0x0F];
+}
+
 uint asc2asc[256] =
     {
         0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,