From: helly Date: Tue, 27 Dec 2005 22:59:09 +0000 (+0000) Subject: - Fix bug 1390174 re2c cannot accept {0,} X-Git-Tag: 0.13.6~580 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=19a9a2d8989689359e216a9f5e547c4b866b028a;p=re2c - Fix bug 1390174 re2c cannot accept {0,} --- diff --git a/CHANGELOG b/CHANGELOG index 3f3c49a2..def7f3aa 100644 --- 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) --------------------------- diff --git a/bootstrap/scanner.cc b/bootstrap/scanner.cc index ab3525ae..fc534a74 100644 --- a/bootstrap/scanner.cc +++ b/bootstrap/scanner.cc @@ -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 @@ -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" } diff --git a/scanner.re b/scanner.re index 15b10e2b..fb819917 100644 --- a/scanner.re +++ b/scanner.re @@ -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); }