]> granicus.if.org Git - re2c/commitdiff
- Fix bug 1390174 re2c cannot accept {0,}
authorhelly <helly@642ea486-5414-0410-9d7f-a0204ed87703>
Tue, 27 Dec 2005 22:59:09 +0000 (22:59 +0000)
committerhelly <helly@642ea486-5414-0410-9d7f-a0204ed87703>
Tue, 27 Dec 2005 22:59:09 +0000 (22:59 +0000)
CHANGELOG
bootstrap/scanner.cc
scanner.re

index 3f3c49a28c6f5dce8e5ad93c70fa7a2dcb9e1e70..def7f3aad9e08d3de7423fe1a500e67b31b7cf1c 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,5 +1,6 @@
 Version 0.9.12 (????-??-??)
 ---------------------------
+- Fixed bug #1390174 re2c cannot accept {0,}.
 
 Version 0.9.11 (2005-12-18)
 ---------------------------
index ab3525ae51d99853358423d167c90a9c848cacc1..fc534a745ce657cba162b3af91146fb04f88e369 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.9.11.dev on Thu Oct 27 20:29:19 2005 */
+/* Generated by re2c 0.9.12.dev on Tue Dec 27 23:51:46 2005 */
 #line 1 "scanner.re"
 /* $Id$ */
 #include <stdlib.h>
@@ -233,7 +233,7 @@ scan:
        goto yy29;
        ++YYCURSOR;
 yy29:
-       if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+       if((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
        yych = *YYCURSOR;
        if(yych <= '/'){
                if(yych <= '"'){
@@ -286,21 +286,22 @@ yy29:
 yy31:  yyaccept = 0;
        yych = *(YYMARKER = ++YYCURSOR);
        if(yych <= '/') goto yy32;
-       if(yych <= '9') goto yy84;
+       if(yych <= '0') goto yy84;
+       if(yych <= '9') goto yy85;
        goto yy32;
 yy32:
 #line 139 "scanner.re"
 { depth = 1;
                                  goto code;
                                }
-#line 297 "scanner.cc"
+#line 298 "scanner.cc"
 yy33:  ++YYCURSOR;
        if((yych = *YYCURSOR) == '*')   goto yy82;
        goto yy34;
 yy34:
 #line 169 "scanner.re"
 { RETURN(*tok); }
-#line 304 "scanner.cc"
+#line 305 "scanner.cc"
 yy35:  ++YYCURSOR;
        if((yych = *YYCURSOR) == '/')   goto yy80;
        goto yy36;
@@ -308,7 +309,7 @@ yy36:
 #line 171 "scanner.re"
 { yylval.op = *tok;
                                  RETURN(CLOSE); }
-#line 312 "scanner.cc"
+#line 313 "scanner.cc"
 yy37:  yyaccept = 1;
        yych = *(YYMARKER = ++YYCURSOR);
        if(yych != 0x0A)        goto yy76;
@@ -316,7 +317,7 @@ yy37:       yyaccept = 1;
 yy38:
 #line 156 "scanner.re"
 { fatal("unterminated string constant (missing \")"); }
-#line 320 "scanner.cc"
+#line 321 "scanner.cc"
 yy39:  yyaccept = 2;
        yych = *(YYMARKER = ++YYCURSOR);
        if(yych != 0x0A)        goto yy71;
@@ -324,7 +325,7 @@ yy39:       yyaccept = 2;
 yy40:
 #line 157 "scanner.re"
 { fatal("unterminated string constant (missing ')"); }
-#line 328 "scanner.cc"
+#line 329 "scanner.cc"
 yy41:  yyaccept = 3;
        yych = *(YYMARKER = ++YYCURSOR);
        if(yych == 0x0A)        goto yy42;
@@ -333,7 +334,7 @@ yy41:       yyaccept = 3;
 yy42:
 #line 167 "scanner.re"
 { fatal("unterminated range (missing ])"); }
-#line 337 "scanner.cc"
+#line 338 "scanner.cc"
 yy43:  yych = *++YYCURSOR;
        goto yy34;
 yy44:  yych = *++YYCURSOR;
@@ -342,44 +343,44 @@ yy45:     ++YYCURSOR;
        yych = *YYCURSOR;
        goto yy58;
 yy46:
-#line 186 "scanner.re"
+#line 189 "scanner.re"
 { cur = cursor;
                                  yylval.symbol = Symbol::find(token());
                                  return ID; }
-#line 350 "scanner.cc"
+#line 351 "scanner.cc"
 yy47:  ++YYCURSOR;
        goto yy48;
 yy48:
-#line 190 "scanner.re"
+#line 193 "scanner.re"
 { cur = cursor;
                                  yylval.regexp = mkDot();
                                  return RANGE;
                                }
-#line 359 "scanner.cc"
+#line 360 "scanner.cc"
 yy49:  ++YYCURSOR;
        yych = *YYCURSOR;
        goto yy56;
 yy50:
-#line 195 "scanner.re"
+#line 198 "scanner.re"
 { goto scan; }
-#line 366 "scanner.cc"
+#line 367 "scanner.cc"
 yy51:  ++YYCURSOR;
        goto yy52;
 yy52:
-#line 197 "scanner.re"
+#line 200 "scanner.re"
 { if(cursor == eof) RETURN(0);
                                  pos = cursor; cline++;
                                  goto scan;
                                }
-#line 375 "scanner.cc"
+#line 376 "scanner.cc"
 yy53:  ++YYCURSOR;
        goto yy54;
 yy54:
-#line 202 "scanner.re"
+#line 205 "scanner.re"
 { std::cerr << "unexpected character: " << *tok << std::endl;
                                  goto scan;
                                }
-#line 383 "scanner.cc"
+#line 384 "scanner.cc"
 yy55:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
@@ -444,7 +445,7 @@ yy66:
 { cur = cursor;
                                  yylval.regexp = ranToRE(token());
                                  return RANGE; }
-#line 448 "scanner.cc"
+#line 449 "scanner.cc"
 yy67:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
@@ -457,7 +458,7 @@ yy69:
 { cur = cursor;
                                  yylval.regexp = invToRE(token());
                                  return RANGE; }
-#line 461 "scanner.cc"
+#line 462 "scanner.cc"
 yy70:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
@@ -482,7 +483,7 @@ yy74:
 { cur = cursor;
                                  yylval.regexp = strToCaseInsensitiveRE(token());
                                  return STRING; }
-#line 486 "scanner.cc"
+#line 487 "scanner.cc"
 yy75:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
@@ -507,241 +508,254 @@ yy79:
 { cur = cursor;
                                  yylval.regexp = strToRE(token());
                                  return STRING; }
-#line 511 "scanner.cc"
+#line 512 "scanner.cc"
 yy80:  ++YYCURSOR;
        goto yy81;
 yy81:
 #line 145 "scanner.re"
 { tok = cursor;
                                  RETURN(0); }
-#line 518 "scanner.cc"
+#line 519 "scanner.cc"
 yy82:  ++YYCURSOR;
        goto yy83;
 yy83:
 #line 142 "scanner.re"
 { depth = 1;
                                  goto comment; }
-#line 525 "scanner.cc"
-yy84:  ++YYCURSOR;
+#line 526 "scanner.cc"
+yy84:  yych = *++YYCURSOR;
+       if(yych == ',') goto yy96;
+       goto yy86;
+yy85:  ++YYCURSOR;
        if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
-       goto yy85;
-yy85:  if(yych <= '/'){
-               if(yych == ',') goto yy88;
+       goto yy86;
+yy86:  if(yych <= '/'){
+               if(yych == ',') goto yy89;
                goto yy61;
        } else {
-               if(yych <= '9') goto yy84;
+               if(yych <= '9') goto yy85;
                if(yych != '}') goto yy61;
-               goto yy86;
+               goto yy87;
        }
-yy86:  ++YYCURSOR;
-       goto yy87;
-yy87:
-#line 174 "scanner.re"
+yy87:  ++YYCURSOR;
+       goto yy88;
+yy88:
+#line 177 "scanner.re"
 { yylval.extop.minsize = atoi((char *)tok+1);
                                  yylval.extop.maxsize = atoi((char *)tok+1);
                                  RETURN(CLOSESIZE); }
-#line 545 "scanner.cc"
-yy88:  yych = *++YYCURSOR;
-       if(yych != '}') goto yy92;
-       goto yy89;
-yy89:  ++YYCURSOR;
+#line 549 "scanner.cc"
+yy89:  yych = *++YYCURSOR;
+       if(yych != '}') goto yy93;
        goto yy90;
-yy90:
-#line 182 "scanner.re"
+yy90:  ++YYCURSOR;
+       goto yy91;
+yy91:
+#line 185 "scanner.re"
 { yylval.extop.minsize = atoi((char *)tok+1);
                                  yylval.extop.maxsize = -1;
                                  RETURN(CLOSESIZE); }
-#line 556 "scanner.cc"
-yy91:  ++YYCURSOR;
+#line 560 "scanner.cc"
+yy92:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       goto yy92;
-yy92:  if(yych <= '/') goto yy61;
-       if(yych <= '9') goto yy91;
-       if(yych != '}') goto yy61;
        goto yy93;
-yy93:  ++YYCURSOR;
+yy93:  if(yych <= '/') goto yy61;
+       if(yych <= '9') goto yy92;
+       if(yych != '}') goto yy61;
        goto yy94;
-yy94:
-#line 178 "scanner.re"
+yy94:  ++YYCURSOR;
+       goto yy95;
+yy95:
+#line 181 "scanner.re"
 { yylval.extop.minsize = atoi((char *)tok+1);
                                  yylval.extop.maxsize = MAX(yylval.extop.minsize,atoi(strchr((char *)tok, ',')+1));
                                  RETURN(CLOSESIZE); }
-#line 572 "scanner.cc"
+#line 576 "scanner.cc"
+yy96:  yych = *++YYCURSOR;
+       if(yych != '}') goto yy93;
+       goto yy97;
+yy97:  ++YYCURSOR;
+       goto yy98;
+yy98:
+#line 174 "scanner.re"
+{ yylval.op = '*';
+                                 RETURN(CLOSE); }
+#line 586 "scanner.cc"
 }
-#line 205 "scanner.re"
+#line 208 "scanner.re"
 
 
 code:
 
-#line 579 "scanner.cc"
+#line 593 "scanner.cc"
 {
        YYCTYPE yych;
        unsigned int yyaccept = 0;
-       goto yy95;
+       goto yy99;
        ++YYCURSOR;
-yy95:
+yy99:
        if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
        if(yych <= '&'){
                if(yych <= 0x0A){
-                       if(yych <= 0x09)        goto yy103;
-                       goto yy101;
+                       if(yych <= 0x09)        goto yy107;
+                       goto yy105;
                } else {
-                       if(yych == '"') goto yy105;
-                       goto yy103;
+                       if(yych == '"') goto yy109;
+                       goto yy107;
                }
        } else {
                if(yych <= '{'){
-                       if(yych <= '\'')        goto yy106;
-                       if(yych <= 'z') goto yy103;
-                       goto yy99;
+                       if(yych <= '\'')        goto yy110;
+                       if(yych <= 'z') goto yy107;
+                       goto yy103;
                } else {
-                       if(yych != '}') goto yy103;
-                       goto yy97;
+                       if(yych != '}') goto yy107;
+                       goto yy101;
                }
        }
-yy97:  ++YYCURSOR;
-       goto yy98;
-yy98:
-#line 209 "scanner.re"
+yy101: ++YYCURSOR;
+       goto yy102;
+yy102:
+#line 212 "scanner.re"
 { if(--depth == 0){
                                        cur = cursor;
                                        yylval.token = new Token(token(), tline);
                                        return CODE;
                                  }
                                  goto code; }
-#line 616 "scanner.cc"
-yy99:  ++YYCURSOR;
-       goto yy100;
-yy100:
-#line 215 "scanner.re"
+#line 630 "scanner.cc"
+yy103: ++YYCURSOR;
+       goto yy104;
+yy104:
+#line 218 "scanner.re"
 { ++depth;
                                  goto code; }
-#line 623 "scanner.cc"
-yy101: ++YYCURSOR;
-       goto yy102;
-yy102:
-#line 217 "scanner.re"
+#line 637 "scanner.cc"
+yy105: ++YYCURSOR;
+       goto yy106;
+yy106:
+#line 220 "scanner.re"
 { if(cursor == eof) fatal("missing '}'");
                                  pos = cursor; cline++;
                                  goto code;
                                }
-#line 632 "scanner.cc"
-yy103: ++YYCURSOR;
-       goto yy104;
-yy104:
-#line 221 "scanner.re"
+#line 646 "scanner.cc"
+yy107: ++YYCURSOR;
+       goto yy108;
+yy108:
+#line 224 "scanner.re"
 { goto code; }
-#line 638 "scanner.cc"
-yy105: yyaccept = 0;
+#line 652 "scanner.cc"
+yy109: yyaccept = 0;
        yych = *(YYMARKER = ++YYCURSOR);
-       if(yych == 0x0A)        goto yy104;
-       goto yy112;
-yy106: yyaccept = 0;
+       if(yych == 0x0A)        goto yy108;
+       goto yy116;
+yy110: yyaccept = 0;
        yych = *(YYMARKER = ++YYCURSOR);
-       if(yych == 0x0A)        goto yy104;
-       goto yy108;
-yy107: ++YYCURSOR;
+       if(yych == 0x0A)        goto yy108;
+       goto yy112;
+yy111: ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       goto yy108;
-yy108: if(yych <= '&'){
-               if(yych != 0x0A)        goto yy107;
-               goto yy109;
+       goto yy112;
+yy112: if(yych <= '&'){
+               if(yych != 0x0A)        goto yy111;
+               goto yy113;
        } else {
-               if(yych <= '\'')        goto yy103;
-               if(yych == '\\')        goto yy110;
-               goto yy107;
+               if(yych <= '\'')        goto yy107;
+               if(yych == '\\')        goto yy114;
+               goto yy111;
        }
-yy109: YYCURSOR = YYMARKER;
+yy113: YYCURSOR = YYMARKER;
        switch(yyaccept){
-       case 0: goto yy104;
+       case 0: goto yy108;
        }
-yy110: ++YYCURSOR;
+yy114: ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if(yych == 0x0A)        goto yy109;
-       goto yy107;
-yy111: ++YYCURSOR;
+       if(yych == 0x0A)        goto yy113;
+       goto yy111;
+yy115: ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       goto yy112;
-yy112: if(yych <= '!'){
-               if(yych == 0x0A)        goto yy109;
-               goto yy111;
+       goto yy116;
+yy116: if(yych <= '!'){
+               if(yych == 0x0A)        goto yy113;
+               goto yy115;
        } else {
-               if(yych <= '"') goto yy103;
-               if(yych != '\\')        goto yy111;
-               goto yy113;
+               if(yych <= '"') goto yy107;
+               if(yych != '\\')        goto yy115;
+               goto yy117;
        }
-yy113: ++YYCURSOR;
+yy117: ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if(yych == 0x0A)        goto yy109;
-       goto yy111;
+       if(yych == 0x0A)        goto yy113;
+       goto yy115;
 }
-#line 222 "scanner.re"
+#line 225 "scanner.re"
 
 
 comment:
 
-#line 691 "scanner.cc"
+#line 705 "scanner.cc"
 {
        YYCTYPE yych;
-       goto yy114;
+       goto yy118;
        ++YYCURSOR;
-yy114:
+yy118:
        if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
        if(yych <= ')'){
-               if(yych == 0x0A)        goto yy119;
-               goto yy121;
+               if(yych == 0x0A)        goto yy123;
+               goto yy125;
        } else {
-               if(yych <= '*') goto yy116;
-               if(yych == '/') goto yy118;
-               goto yy121;
+               if(yych <= '*') goto yy120;
+               if(yych == '/') goto yy122;
+               goto yy125;
        }
-yy116: ++YYCURSOR;
-       if((yych = *YYCURSOR) == '/')   goto yy124;
-       goto yy117;
-yy117:
-#line 236 "scanner.re"
+yy120: ++YYCURSOR;
+       if((yych = *YYCURSOR) == '/')   goto yy128;
+       goto yy121;
+yy121:
+#line 239 "scanner.re"
 { goto comment; }
-#line 713 "scanner.cc"
-yy118: yych = *++YYCURSOR;
-       if(yych == '*') goto yy122;
-       goto yy117;
-yy119: ++YYCURSOR;
-       goto yy120;
-yy120:
-#line 232 "scanner.re"
+#line 727 "scanner.cc"
+yy122: yych = *++YYCURSOR;
+       if(yych == '*') goto yy126;
+       goto yy121;
+yy123: ++YYCURSOR;
+       goto yy124;
+yy124:
+#line 235 "scanner.re"
 { if(cursor == eof) RETURN(0);
                                  tok = pos = cursor; cline++;
                                  goto comment;
                                }
-#line 725 "scanner.cc"
-yy121: yych = *++YYCURSOR;
-       goto yy117;
-yy122: ++YYCURSOR;
-       goto yy123;
-yy123:
-#line 230 "scanner.re"
+#line 739 "scanner.cc"
+yy125: yych = *++YYCURSOR;
+       goto yy121;
+yy126: ++YYCURSOR;
+       goto yy127;
+yy127:
+#line 233 "scanner.re"
 { ++depth;
                                  goto comment; }
-#line 734 "scanner.cc"
-yy124: ++YYCURSOR;
-       goto yy125;
-yy125:
-#line 226 "scanner.re"
+#line 748 "scanner.cc"
+yy128: ++YYCURSOR;
+       goto yy129;
+yy129:
+#line 229 "scanner.re"
 { if(--depth == 0)
                                        goto scan;
                                    else
                                        goto comment; }
-#line 743 "scanner.cc"
+#line 757 "scanner.cc"
 }
-#line 237 "scanner.re"
+#line 240 "scanner.re"
 
 }
 
index 15b10e2b4aeccc8e5dd66eccf1052d879ce3d19a..fb819917fcee1a54101ad1cff6bbc9d6e2ec98a4 100644 (file)
@@ -171,6 +171,9 @@ scan:
        [*+?]                   { yylval.op = *tok;
                                  RETURN(CLOSE); }
 
+       "{0,}"          { yylval.op = '*';
+                                 RETURN(CLOSE); }
+
        "{" [0-9]+ "}"          { yylval.extop.minsize = atoi((char *)tok+1);
                                  yylval.extop.maxsize = atoi((char *)tok+1);
                                  RETURN(CLOSESIZE); }