From: nuffer Date: Sat, 31 Jan 2004 17:42:53 +0000 (+0000) Subject: Integrated patch from UTF2000 wiki. X-Git-Tag: 0.13.6~741 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9471000d61ab7582e7afcb1d1e25eff350baa8e8;p=re2c Integrated patch from UTF2000 wiki. --- diff --git a/bootstrap/scanner.cc b/bootstrap/scanner.cc index af2d4888..9ed57b1f 100644 --- a/bootstrap/scanner.cc +++ b/bootstrap/scanner.cc @@ -1,4 +1,4 @@ -/* Generated by re2c 0.9.2 on Sat Jan 31 10:36:26 2004 */ +/* Generated by re2c 0.9.2 on Sat Jan 31 10:43:47 2004 */ #line 1 "scanner.re" /* $Id$ */ #include @@ -83,44 +83,53 @@ yy0: yych = *YYCURSOR; if(yych == '\n') goto yy4; if(yych != '/') goto yy6; + goto yy2; yy2: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if(yych == '*') goto yy7; + goto yy3; yy3: #line 88 "scanner.re" { goto echo; } -#line 24 "re2c-output.c" +#line 26 "re2c-output.c" yy4: yych = *++YYCURSOR; + goto yy5; yy5: #line 84 "scanner.re" { if(cursor == eof) RETURN(0); out.write((const char*)(tok), cursor - tok); tok = pos = cursor; cline++; goto echo; } -#line 32 "re2c-output.c" +#line 35 "re2c-output.c" yy6: yych = *++YYCURSOR; goto yy3; yy7: yych = *++YYCURSOR; if(yych == '!') goto yy9; + goto yy8; yy8: YYCURSOR = YYMARKER; switch(yyaccept){ case 0: goto yy3; } yy9: yych = *++YYCURSOR; if(yych != 'r') goto yy8; + goto yy10; yy10: yych = *++YYCURSOR; if(yych != 'e') goto yy8; + goto yy11; yy11: yych = *++YYCURSOR; if(yych != '2') goto yy8; + goto yy12; yy12: yych = *++YYCURSOR; if(yych != 'c') goto yy8; + goto yy13; yy13: yych = *++YYCURSOR; + goto yy14; yy14: #line 81 "scanner.re" { out.write((const char*)(tok), &cursor[-7] - tok); tok = cursor; RETURN(1); } -#line 55 "re2c-output.c" +#line 64 "re2c-output.c" } #line 89 "scanner.re" @@ -136,7 +145,7 @@ scan: tline = cline; tok = cursor; -#line 59 "re2c-output.c" +#line 68 "re2c-output.c" { YYCTYPE yych; unsigned int yyaccept; @@ -191,39 +200,44 @@ yy15: } } yy17: yych = *++YYCURSOR; + goto yy18; yy18: #line 102 "scanner.re" { depth = 1; goto code; } -#line 119 "re2c-output.c" +#line 129 "re2c-output.c" yy19: yych = *++YYCURSOR; if(yych == '*') goto yy54; + goto yy20; yy20: #line 121 "scanner.re" { RETURN(*tok); } -#line 125 "re2c-output.c" +#line 136 "re2c-output.c" yy21: yych = *++YYCURSOR; if(yych == '/') goto yy52; + goto yy22; yy22: #line 123 "scanner.re" { yylval.op = *tok; RETURN(CLOSE); } -#line 132 "re2c-output.c" +#line 144 "re2c-output.c" yy23: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if(yych != '\n') goto yy48; + goto yy24; yy24: #line 114 "scanner.re" { fatal("bad string"); } -#line 139 "re2c-output.c" +#line 152 "re2c-output.c" yy25: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); if(yych != '\n') goto yy42; + goto yy26; yy26: #line 119 "scanner.re" { fatal("bad character constant"); } -#line 146 "re2c-output.c" +#line 160 "re2c-output.c" yy27: yych = *++YYCURSOR; goto yy20; yy28: yych = *++YYCURSOR; @@ -235,37 +249,41 @@ yy30: { cur = cursor; yylval.symbol = Symbol::find(token()); return ID; } -#line 158 "re2c-output.c" +#line 172 "re2c-output.c" yy31: yych = *++YYCURSOR; goto yy38; yy32: #line 130 "scanner.re" { goto scan; } -#line 164 "re2c-output.c" +#line 178 "re2c-output.c" yy33: yych = *++YYCURSOR; + goto yy34; yy34: #line 132 "scanner.re" { if(cursor == eof) RETURN(0); pos = cursor; cline++; goto scan; } -#line 172 "re2c-output.c" +#line 187 "re2c-output.c" yy35: yych = *++YYCURSOR; + goto yy36; yy36: #line 137 "scanner.re" { cerr << "unexpected character: " << *tok << endl; goto scan; } -#line 179 "re2c-output.c" +#line 195 "re2c-output.c" yy37: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; + goto yy38; yy38: if(yych == '\t') goto yy37; if(yych == ' ') goto yy37; goto yy32; yy39: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; + goto yy40; yy40: if(yych <= '@'){ if(yych <= '/') goto yy30; if(yych <= '9') goto yy39; @@ -279,8 +297,10 @@ yy40: if(yych <= '@'){ yy41: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; + goto yy42; yy42: if(yych <= '['){ if(yych != '\n') goto yy41; + goto yy43; } else { if(yych <= '\\') goto yy44; if(yych <= ']') goto yy45; @@ -297,21 +317,24 @@ yy44: ++YYCURSOR; if(yych == '\n') goto yy43; goto yy41; yy45: yych = *++YYCURSOR; + goto yy46; yy46: #line 116 "scanner.re" { cur = cursor; yylval.regexp = ranToRE(token()); return RANGE; } -#line 225 "re2c-output.c" +#line 246 "re2c-output.c" yy47: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; + goto yy48; yy48: if(yych <= '!'){ if(yych == '\n') goto yy43; goto yy47; } else { if(yych <= '"') goto yy50; if(yych != '\\') goto yy47; + goto yy49; } yy49: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); @@ -319,31 +342,34 @@ yy49: ++YYCURSOR; if(yych == '\n') goto yy43; goto yy47; yy50: yych = *++YYCURSOR; + goto yy51; yy51: #line 111 "scanner.re" { cur = cursor; yylval.regexp = strToRE(token()); return STRING; } -#line 247 "re2c-output.c" +#line 271 "re2c-output.c" yy52: yych = *++YYCURSOR; + goto yy53; yy53: #line 108 "scanner.re" { tok = cursor; RETURN(0); } -#line 253 "re2c-output.c" +#line 278 "re2c-output.c" yy54: yych = *++YYCURSOR; + goto yy55; yy55: #line 105 "scanner.re" { depth = 1; goto comment; } -#line 259 "re2c-output.c" +#line 285 "re2c-output.c" } #line 140 "scanner.re" code: -#line 263 "re2c-output.c" +#line 289 "re2c-output.c" { YYCTYPE yych; unsigned int yyaccept; @@ -367,9 +393,11 @@ yy56: goto yy60; } else { if(yych != '}') goto yy64; + goto yy58; } } yy58: yych = *++YYCURSOR; + goto yy59; yy59: #line 144 "scanner.re" { if(--depth == 0){ @@ -378,26 +406,29 @@ yy59: return CODE; } goto code; } -#line 298 "re2c-output.c" +#line 326 "re2c-output.c" yy60: yych = *++YYCURSOR; + goto yy61; yy61: #line 150 "scanner.re" { ++depth; goto code; } -#line 304 "re2c-output.c" +#line 333 "re2c-output.c" yy62: yych = *++YYCURSOR; + goto yy63; yy63: #line 152 "scanner.re" { if(cursor == eof) fatal("missing '}'"); pos = cursor; cline++; goto code; } -#line 312 "re2c-output.c" +#line 342 "re2c-output.c" yy64: yych = *++YYCURSOR; + goto yy65; yy65: #line 156 "scanner.re" { goto code; } -#line 317 "re2c-output.c" +#line 348 "re2c-output.c" yy66: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if(yych == '\n') goto yy65; @@ -409,8 +440,10 @@ yy67: yyaccept = 0; yy68: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; + goto yy69; yy69: if(yych <= '&'){ if(yych != '\n') goto yy68; + goto yy70; } else { if(yych <= '\'') goto yy64; if(yych == '\\') goto yy71; @@ -428,12 +461,14 @@ yy71: ++YYCURSOR; yy72: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; + goto yy73; yy73: if(yych <= '!'){ if(yych == '\n') goto yy70; goto yy72; } else { if(yych <= '"') goto yy64; if(yych != '\\') goto yy72; + goto yy74; } yy74: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); @@ -446,7 +481,7 @@ yy74: ++YYCURSOR; comment: -#line 363 "re2c-output.c" +#line 398 "re2c-output.c" { YYCTYPE yych; unsigned int yyaccept; @@ -465,37 +500,41 @@ yy75: } yy77: yych = *++YYCURSOR; if(yych == '/') goto yy85; + goto yy78; yy78: #line 171 "scanner.re" { goto comment; } -#line 385 "re2c-output.c" +#line 421 "re2c-output.c" yy79: yych = *++YYCURSOR; if(yych == '*') goto yy83; goto yy78; yy80: yych = *++YYCURSOR; + goto yy81; yy81: #line 167 "scanner.re" { if(cursor == eof) RETURN(0); tok = pos = cursor; cline++; goto comment; } -#line 396 "re2c-output.c" +#line 433 "re2c-output.c" yy82: yych = *++YYCURSOR; goto yy78; yy83: yych = *++YYCURSOR; + goto yy84; yy84: #line 165 "scanner.re" { ++depth; goto comment; } -#line 404 "re2c-output.c" +#line 442 "re2c-output.c" yy85: yych = *++YYCURSOR; + goto yy86; yy86: #line 161 "scanner.re" { if(--depth == 0) goto scan; else goto comment; } -#line 412 "re2c-output.c" +#line 451 "re2c-output.c" } #line 172 "scanner.re" diff --git a/code.cc b/code.cc index f114d465..b6331d18 100644 --- a/code.cc +++ b/code.cc @@ -279,6 +279,7 @@ void doLinear(ostream &o, uint i, Span *s, uint n, State *next){ while(n >= 3 && s[2].to == bg && (s[1].ub - s[0].ub) == 1){ if(s[1].to == next && n == 3){ indent(o, i); genIf(o, "!=", s[0].ub); genGoTo(o, bg); + indent(o, i); genGoTo(o, next); return; } else { indent(o, i); genIf(o, "==", s[0].ub); genGoTo(o, s[1].to); @@ -286,18 +287,20 @@ void doLinear(ostream &o, uint i, Span *s, uint n, State *next){ n -= 2; s += 2; } if(n == 1){ - if(bg != next){ +// if(bg != next){ indent(o, i); genGoTo(o, s[0].to); - } +// } return; } else if(n == 2 && bg == next){ indent(o, i); genIf(o, ">=", s[0].ub); genGoTo(o, s[1].to); + indent(o, i); genGoTo(o, next); return; } else { indent(o, i); genIf(o, "<=", s[0].ub - 1); genGoTo(o, bg); n -= 1; s += 1; } } + indent(o, i); genGoTo(o, next); } void Go::genLinear(ostream &o, State *next){ diff --git a/scanner.cc b/scanner.cc index af2d4888..9ed57b1f 100644 --- a/scanner.cc +++ b/scanner.cc @@ -1,4 +1,4 @@ -/* Generated by re2c 0.9.2 on Sat Jan 31 10:36:26 2004 */ +/* Generated by re2c 0.9.2 on Sat Jan 31 10:43:47 2004 */ #line 1 "scanner.re" /* $Id$ */ #include @@ -83,44 +83,53 @@ yy0: yych = *YYCURSOR; if(yych == '\n') goto yy4; if(yych != '/') goto yy6; + goto yy2; yy2: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if(yych == '*') goto yy7; + goto yy3; yy3: #line 88 "scanner.re" { goto echo; } -#line 24 "re2c-output.c" +#line 26 "re2c-output.c" yy4: yych = *++YYCURSOR; + goto yy5; yy5: #line 84 "scanner.re" { if(cursor == eof) RETURN(0); out.write((const char*)(tok), cursor - tok); tok = pos = cursor; cline++; goto echo; } -#line 32 "re2c-output.c" +#line 35 "re2c-output.c" yy6: yych = *++YYCURSOR; goto yy3; yy7: yych = *++YYCURSOR; if(yych == '!') goto yy9; + goto yy8; yy8: YYCURSOR = YYMARKER; switch(yyaccept){ case 0: goto yy3; } yy9: yych = *++YYCURSOR; if(yych != 'r') goto yy8; + goto yy10; yy10: yych = *++YYCURSOR; if(yych != 'e') goto yy8; + goto yy11; yy11: yych = *++YYCURSOR; if(yych != '2') goto yy8; + goto yy12; yy12: yych = *++YYCURSOR; if(yych != 'c') goto yy8; + goto yy13; yy13: yych = *++YYCURSOR; + goto yy14; yy14: #line 81 "scanner.re" { out.write((const char*)(tok), &cursor[-7] - tok); tok = cursor; RETURN(1); } -#line 55 "re2c-output.c" +#line 64 "re2c-output.c" } #line 89 "scanner.re" @@ -136,7 +145,7 @@ scan: tline = cline; tok = cursor; -#line 59 "re2c-output.c" +#line 68 "re2c-output.c" { YYCTYPE yych; unsigned int yyaccept; @@ -191,39 +200,44 @@ yy15: } } yy17: yych = *++YYCURSOR; + goto yy18; yy18: #line 102 "scanner.re" { depth = 1; goto code; } -#line 119 "re2c-output.c" +#line 129 "re2c-output.c" yy19: yych = *++YYCURSOR; if(yych == '*') goto yy54; + goto yy20; yy20: #line 121 "scanner.re" { RETURN(*tok); } -#line 125 "re2c-output.c" +#line 136 "re2c-output.c" yy21: yych = *++YYCURSOR; if(yych == '/') goto yy52; + goto yy22; yy22: #line 123 "scanner.re" { yylval.op = *tok; RETURN(CLOSE); } -#line 132 "re2c-output.c" +#line 144 "re2c-output.c" yy23: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if(yych != '\n') goto yy48; + goto yy24; yy24: #line 114 "scanner.re" { fatal("bad string"); } -#line 139 "re2c-output.c" +#line 152 "re2c-output.c" yy25: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); if(yych != '\n') goto yy42; + goto yy26; yy26: #line 119 "scanner.re" { fatal("bad character constant"); } -#line 146 "re2c-output.c" +#line 160 "re2c-output.c" yy27: yych = *++YYCURSOR; goto yy20; yy28: yych = *++YYCURSOR; @@ -235,37 +249,41 @@ yy30: { cur = cursor; yylval.symbol = Symbol::find(token()); return ID; } -#line 158 "re2c-output.c" +#line 172 "re2c-output.c" yy31: yych = *++YYCURSOR; goto yy38; yy32: #line 130 "scanner.re" { goto scan; } -#line 164 "re2c-output.c" +#line 178 "re2c-output.c" yy33: yych = *++YYCURSOR; + goto yy34; yy34: #line 132 "scanner.re" { if(cursor == eof) RETURN(0); pos = cursor; cline++; goto scan; } -#line 172 "re2c-output.c" +#line 187 "re2c-output.c" yy35: yych = *++YYCURSOR; + goto yy36; yy36: #line 137 "scanner.re" { cerr << "unexpected character: " << *tok << endl; goto scan; } -#line 179 "re2c-output.c" +#line 195 "re2c-output.c" yy37: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; + goto yy38; yy38: if(yych == '\t') goto yy37; if(yych == ' ') goto yy37; goto yy32; yy39: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; + goto yy40; yy40: if(yych <= '@'){ if(yych <= '/') goto yy30; if(yych <= '9') goto yy39; @@ -279,8 +297,10 @@ yy40: if(yych <= '@'){ yy41: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; + goto yy42; yy42: if(yych <= '['){ if(yych != '\n') goto yy41; + goto yy43; } else { if(yych <= '\\') goto yy44; if(yych <= ']') goto yy45; @@ -297,21 +317,24 @@ yy44: ++YYCURSOR; if(yych == '\n') goto yy43; goto yy41; yy45: yych = *++YYCURSOR; + goto yy46; yy46: #line 116 "scanner.re" { cur = cursor; yylval.regexp = ranToRE(token()); return RANGE; } -#line 225 "re2c-output.c" +#line 246 "re2c-output.c" yy47: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; + goto yy48; yy48: if(yych <= '!'){ if(yych == '\n') goto yy43; goto yy47; } else { if(yych <= '"') goto yy50; if(yych != '\\') goto yy47; + goto yy49; } yy49: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); @@ -319,31 +342,34 @@ yy49: ++YYCURSOR; if(yych == '\n') goto yy43; goto yy47; yy50: yych = *++YYCURSOR; + goto yy51; yy51: #line 111 "scanner.re" { cur = cursor; yylval.regexp = strToRE(token()); return STRING; } -#line 247 "re2c-output.c" +#line 271 "re2c-output.c" yy52: yych = *++YYCURSOR; + goto yy53; yy53: #line 108 "scanner.re" { tok = cursor; RETURN(0); } -#line 253 "re2c-output.c" +#line 278 "re2c-output.c" yy54: yych = *++YYCURSOR; + goto yy55; yy55: #line 105 "scanner.re" { depth = 1; goto comment; } -#line 259 "re2c-output.c" +#line 285 "re2c-output.c" } #line 140 "scanner.re" code: -#line 263 "re2c-output.c" +#line 289 "re2c-output.c" { YYCTYPE yych; unsigned int yyaccept; @@ -367,9 +393,11 @@ yy56: goto yy60; } else { if(yych != '}') goto yy64; + goto yy58; } } yy58: yych = *++YYCURSOR; + goto yy59; yy59: #line 144 "scanner.re" { if(--depth == 0){ @@ -378,26 +406,29 @@ yy59: return CODE; } goto code; } -#line 298 "re2c-output.c" +#line 326 "re2c-output.c" yy60: yych = *++YYCURSOR; + goto yy61; yy61: #line 150 "scanner.re" { ++depth; goto code; } -#line 304 "re2c-output.c" +#line 333 "re2c-output.c" yy62: yych = *++YYCURSOR; + goto yy63; yy63: #line 152 "scanner.re" { if(cursor == eof) fatal("missing '}'"); pos = cursor; cline++; goto code; } -#line 312 "re2c-output.c" +#line 342 "re2c-output.c" yy64: yych = *++YYCURSOR; + goto yy65; yy65: #line 156 "scanner.re" { goto code; } -#line 317 "re2c-output.c" +#line 348 "re2c-output.c" yy66: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if(yych == '\n') goto yy65; @@ -409,8 +440,10 @@ yy67: yyaccept = 0; yy68: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; + goto yy69; yy69: if(yych <= '&'){ if(yych != '\n') goto yy68; + goto yy70; } else { if(yych <= '\'') goto yy64; if(yych == '\\') goto yy71; @@ -428,12 +461,14 @@ yy71: ++YYCURSOR; yy72: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; + goto yy73; yy73: if(yych <= '!'){ if(yych == '\n') goto yy70; goto yy72; } else { if(yych <= '"') goto yy64; if(yych != '\\') goto yy72; + goto yy74; } yy74: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); @@ -446,7 +481,7 @@ yy74: ++YYCURSOR; comment: -#line 363 "re2c-output.c" +#line 398 "re2c-output.c" { YYCTYPE yych; unsigned int yyaccept; @@ -465,37 +500,41 @@ yy75: } yy77: yych = *++YYCURSOR; if(yych == '/') goto yy85; + goto yy78; yy78: #line 171 "scanner.re" { goto comment; } -#line 385 "re2c-output.c" +#line 421 "re2c-output.c" yy79: yych = *++YYCURSOR; if(yych == '*') goto yy83; goto yy78; yy80: yych = *++YYCURSOR; + goto yy81; yy81: #line 167 "scanner.re" { if(cursor == eof) RETURN(0); tok = pos = cursor; cline++; goto comment; } -#line 396 "re2c-output.c" +#line 433 "re2c-output.c" yy82: yych = *++YYCURSOR; goto yy78; yy83: yych = *++YYCURSOR; + goto yy84; yy84: #line 165 "scanner.re" { ++depth; goto comment; } -#line 404 "re2c-output.c" +#line 442 "re2c-output.c" yy85: yych = *++YYCURSOR; + goto yy86; yy86: #line 161 "scanner.re" { if(--depth == 0) goto scan; else goto comment; } -#line 412 "re2c-output.c" +#line 451 "re2c-output.c" } #line 172 "scanner.re"