From: nuffer Date: Mon, 1 Nov 2004 06:18:41 +0000 (+0000) Subject: Changed scanner to use a 0 as a terminator for the input, since using a \n caused... X-Git-Tag: 0.13.6~681 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ec3c35be6cb5728bf51183c74bf89def3329e7d0;p=re2c Changed scanner to use a 0 as a terminator for the input, since using a \n caused various problems. Fixing bug [ 1012748 ] re2c does not emit last line if '\n' missing. --- diff --git a/bootstrap/scanner.cc b/bootstrap/scanner.cc index 2d641bbb..878286ad 100644 --- a/bootstrap/scanner.cc +++ b/bootstrap/scanner.cc @@ -1,4 +1,4 @@ -/* Generated by re2c 0.9.4 on Sun Oct 31 21:27:49 2004 */ +/* Generated by re2c 0.9.4 on Sun Oct 31 23:17:13 2004 */ #line 1 "scanner.re" /* $Id$ */ #include @@ -57,14 +57,14 @@ char *Scanner::fill(char *cursor){ bot = buf; } if((cnt = in.rdbuf()->sgetn((char*) lim, BSIZE)) != BSIZE){ - eof = &lim[cnt]; *eof++ = '\n'; + eof = &lim[cnt]; *eof++ = '\0'; } lim += cnt; } return cursor; } -#line 74 "scanner.re" +#line 75 "scanner.re" int Scanner::echo(std::ostream &out){ @@ -72,7 +72,9 @@ int Scanner::echo(std::ostream &out){ // Catch EOF if (eof && cursor == eof) + { return 0; + } tok = cursor; echo: @@ -86,57 +88,68 @@ yy1: ++YYCURSOR; yy0: if((YYLIMIT - YYCURSOR) < 7) YYFILL(7); yych = *YYCURSOR; - if(yych == 0x0A) goto yy4; - if(yych != '/') goto yy6; - goto yy2; + if(yych <= 0x0A){ + if(yych <= 0x00) goto yy6; + if(yych <= 0x09) goto yy8; + goto yy4; + } else { + if(yych != '/') goto yy8; + goto yy2; + } yy2: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if(yych == '*') goto yy7; + if(yych == '*') goto yy9; goto yy3; yy3: -#line 93 "scanner.re" +#line 97 "scanner.re" { goto echo; } -#line 26 "scanner.cc" +#line 31 "scanner.cc" yy4: ++YYCURSOR; goto yy5; yy5: -#line 89 "scanner.re" -{ if(cursor == eof) RETURN(0); - out.write((const char*)(tok), (const char*)(cursor) - (const char*)(tok)); +#line 92 "scanner.re" +{ out.write((const char*)(tok), (const char*)(cursor) - (const char*)(tok)); tok = pos = cursor; cline++; goto echo; } -#line 35 "scanner.cc" -yy6: yych = *++YYCURSOR; +#line 39 "scanner.cc" +yy6: ++YYCURSOR; + goto yy7; +yy7: +#line 95 "scanner.re" +{ out.write((const char*)(tok), (const char*)(cursor) - (const char*)(tok) - 1); // -1 so we don't write out the \0 + if(cursor == eof) { RETURN(0); } } +#line 46 "scanner.cc" +yy8: yych = *++YYCURSOR; goto yy3; -yy7: yych = *++YYCURSOR; - if(yych == '!') goto yy9; - goto yy8; -yy8: YYCURSOR = YYMARKER; +yy9: yych = *++YYCURSOR; + if(yych == '!') goto yy11; + goto yy10; +yy10: 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; + if(yych != 'r') goto yy10; goto yy12; yy12: yych = *++YYCURSOR; - if(yych != 'c') goto yy8; + if(yych != 'e') goto yy10; goto yy13; -yy13: ++YYCURSOR; +yy13: yych = *++YYCURSOR; + if(yych != '2') goto yy10; goto yy14; -yy14: -#line 86 "scanner.re" +yy14: yych = *++YYCURSOR; + if(yych != 'c') goto yy10; + goto yy15; +yy15: ++YYCURSOR; + goto yy16; +yy16: +#line 89 "scanner.re" { out.write((const char*)(tok), (const char*)(&cursor[-7]) - (const char*)(tok)); tok = cursor; RETURN(1); } -#line 64 "scanner.cc" +#line 75 "scanner.cc" } -#line 94 "scanner.re" +#line 98 "scanner.re" } @@ -150,487 +163,487 @@ scan: tline = cline; tok = cursor; -#line 68 "scanner.cc" +#line 79 "scanner.cc" { YYCTYPE yych; unsigned int yyaccept; - goto yy15; -yy16: ++YYCURSOR; -yy15: + goto yy17; +yy18: ++YYCURSOR; +yy17: if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; if(yych <= '/'){ if(yych <= '"'){ if(yych <= 0x0A){ - if(yych <= 0x08) goto yy37; - if(yych <= 0x09) goto yy33; - goto yy35; + if(yych <= 0x08) goto yy39; + if(yych <= 0x09) goto yy35; + goto yy37; } else { - if(yych == ' ') goto yy33; - if(yych <= '!') goto yy37; - goto yy23; + if(yych == ' ') goto yy35; + if(yych <= '!') goto yy39; + goto yy25; } } else { if(yych <= ')'){ - if(yych <= '&') goto yy37; - if(yych <= '\'') goto yy25; - goto yy29; + if(yych <= '&') goto yy39; + if(yych <= '\'') goto yy27; + goto yy31; } else { - if(yych <= '*') goto yy21; - if(yych <= '+') goto yy30; - if(yych <= '.') goto yy37; - goto yy19; + if(yych <= '*') goto yy23; + if(yych <= '+') goto yy32; + if(yych <= '.') goto yy39; + goto yy21; } } } else { if(yych <= '@'){ if(yych <= '<'){ - if(yych == ';') goto yy29; - goto yy37; + if(yych == ';') goto yy31; + goto yy39; } else { - if(yych <= '=') goto yy29; - if(yych == '?') goto yy30; - goto yy37; + if(yych <= '=') goto yy31; + if(yych == '?') goto yy32; + goto yy39; } } else { if(yych <= '`'){ - if(yych <= 'Z') goto yy31; - if(yych <= '[') goto yy27; - if(yych <= '\\') goto yy29; - goto yy37; + if(yych <= 'Z') goto yy33; + if(yych <= '[') goto yy29; + if(yych <= '\\') goto yy31; + goto yy39; } else { - if(yych <= 'z') goto yy31; - if(yych <= '{') goto yy17; - if(yych <= '|') goto yy29; - goto yy37; + if(yych <= 'z') goto yy33; + if(yych <= '{') goto yy19; + if(yych <= '|') goto yy31; + goto yy39; } } } -yy17: yyaccept = 0; +yy19: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') goto yy18; - if(yych <= '9') goto yy63; - goto yy18; -yy18: -#line 107 "scanner.re" + if(yych <= '/') goto yy20; + if(yych <= '9') goto yy65; + goto yy20; +yy20: +#line 111 "scanner.re" { depth = 1; goto code; } -#line 134 "scanner.cc" -yy19: ++YYCURSOR; - if((yych = *YYCURSOR) == '*') goto yy61; - goto yy20; -yy20: -#line 133 "scanner.re" -{ RETURN(*tok); } -#line 141 "scanner.cc" +#line 145 "scanner.cc" yy21: ++YYCURSOR; - if((yych = *YYCURSOR) == '/') goto yy59; + if((yych = *YYCURSOR) == '*') goto yy63; goto yy22; yy22: -#line 135 "scanner.re" -{ yylval.op = *tok; - RETURN(CLOSE); } -#line 149 "scanner.cc" -yy23: yyaccept = 1; - yych = *(YYMARKER = ++YYCURSOR); - if(yych != 0x0A) goto yy55; +#line 137 "scanner.re" +{ RETURN(*tok); } +#line 152 "scanner.cc" +yy23: ++YYCURSOR; + if((yych = *YYCURSOR) == '/') goto yy61; goto yy24; yy24: -#line 124 "scanner.re" -{ fatal("unterminated string constant (missing \")"); } -#line 157 "scanner.cc" -yy25: yyaccept = 2; +#line 139 "scanner.re" +{ yylval.op = *tok; + RETURN(CLOSE); } +#line 160 "scanner.cc" +yy25: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); - if(yych != 0x0A) goto yy50; + if(yych != 0x0A) goto yy57; goto yy26; yy26: -#line 125 "scanner.re" -{ fatal("unterminated string constant (missing ')"); } -#line 165 "scanner.cc" -yy27: yyaccept = 3; +#line 128 "scanner.re" +{ fatal("unterminated string constant (missing \")"); } +#line 168 "scanner.cc" +yy27: yyaccept = 2; yych = *(YYMARKER = ++YYCURSOR); - if(yych != 0x0A) goto yy44; + if(yych != 0x0A) goto yy52; goto yy28; yy28: -#line 131 "scanner.re" +#line 129 "scanner.re" +{ fatal("unterminated string constant (missing ')"); } +#line 176 "scanner.cc" +yy29: yyaccept = 3; + yych = *(YYMARKER = ++YYCURSOR); + if(yych != 0x0A) goto yy46; + goto yy30; +yy30: +#line 135 "scanner.re" { fatal("unterminated range (missing ])"); } -#line 173 "scanner.cc" -yy29: yych = *++YYCURSOR; - goto yy20; -yy30: yych = *++YYCURSOR; +#line 184 "scanner.cc" +yy31: yych = *++YYCURSOR; goto yy22; -yy31: ++YYCURSOR; - yych = *YYCURSOR; - goto yy42; -yy32: -#line 150 "scanner.re" -{ cur = cursor; - yylval.symbol = Symbol::find(token()); - return ID; } -#line 185 "scanner.cc" +yy32: yych = *++YYCURSOR; + goto yy24; yy33: ++YYCURSOR; yych = *YYCURSOR; - goto yy40; + goto yy44; yy34: #line 154 "scanner.re" -{ goto scan; } -#line 191 "scanner.cc" +{ cur = cursor; + yylval.symbol = Symbol::find(token()); + return ID; } +#line 196 "scanner.cc" yy35: ++YYCURSOR; - goto yy36; + yych = *YYCURSOR; + goto yy42; yy36: -#line 156 "scanner.re" +#line 158 "scanner.re" +{ goto scan; } +#line 202 "scanner.cc" +yy37: ++YYCURSOR; + goto yy38; +yy38: +#line 160 "scanner.re" { if(cursor == eof) RETURN(0); pos = cursor; cline++; goto scan; } -#line 200 "scanner.cc" -yy37: ++YYCURSOR; - goto yy38; -yy38: -#line 161 "scanner.re" +#line 211 "scanner.cc" +yy39: ++YYCURSOR; + goto yy40; +yy40: +#line 165 "scanner.re" { std::cerr << "unexpected character: " << *tok << std::endl; goto scan; } -#line 208 "scanner.cc" -yy39: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy40; -yy40: if(yych == 0x09) goto yy39; - if(yych == ' ') goto yy39; - goto yy34; +#line 219 "scanner.cc" yy41: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; goto yy42; -yy42: if(yych <= '@'){ - if(yych <= '/') goto yy32; - if(yych <= '9') goto yy41; - goto yy32; - } else { - if(yych <= 'Z') goto yy41; - if(yych <= '`') goto yy32; - if(yych <= 'z') goto yy41; - goto yy32; - } +yy42: if(yych == 0x09) goto yy41; + if(yych == ' ') goto yy41; + goto yy36; yy43: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; goto yy44; -yy44: if(yych <= '['){ - if(yych != 0x0A) goto yy43; - goto yy45; +yy44: if(yych <= '@'){ + if(yych <= '/') goto yy34; + if(yych <= '9') goto yy43; + goto yy34; } else { - if(yych <= '\\') goto yy46; - if(yych <= ']') goto yy47; - goto yy43; + if(yych <= 'Z') goto yy43; + if(yych <= '`') goto yy34; + if(yych <= 'z') goto yy43; + goto yy34; } -yy45: YYCURSOR = YYMARKER; +yy45: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy46; +yy46: if(yych <= '['){ + if(yych != 0x0A) goto yy45; + goto yy47; + } else { + if(yych <= '\\') goto yy48; + if(yych <= ']') goto yy49; + goto yy45; + } +yy47: YYCURSOR = YYMARKER; switch(yyaccept){ - case 0: goto yy18; - case 1: goto yy24; - case 2: goto yy26; - case 3: goto yy28; + case 0: goto yy20; + case 1: goto yy26; + case 2: goto yy28; + case 3: goto yy30; } -yy46: ++YYCURSOR; +yy48: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; - if(yych == 0x0A) goto yy45; - goto yy43; -yy47: ++YYCURSOR; - goto yy48; -yy48: -#line 127 "scanner.re" + if(yych == 0x0A) goto yy47; + goto yy45; +yy49: ++YYCURSOR; + goto yy50; +yy50: +#line 131 "scanner.re" { cur = cursor; yylval.regexp = ranToRE(token()); return RANGE; } -#line 265 "scanner.cc" -yy49: ++YYCURSOR; +#line 276 "scanner.cc" +yy51: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; - goto yy50; -yy50: if(yych <= '&'){ - if(yych == 0x0A) goto yy45; - goto yy49; - } else { - if(yych <= '\'') goto yy52; - if(yych != '\\') goto yy49; + goto yy52; +yy52: if(yych <= '&'){ + if(yych == 0x0A) goto yy47; goto yy51; + } else { + if(yych <= '\'') goto yy54; + if(yych != '\\') goto yy51; + goto yy53; } -yy51: ++YYCURSOR; +yy53: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; - if(yych == 0x0A) goto yy45; - goto yy49; -yy52: ++YYCURSOR; - goto yy53; -yy53: -#line 120 "scanner.re" + if(yych == 0x0A) goto yy47; + goto yy51; +yy54: ++YYCURSOR; + goto yy55; +yy55: +#line 124 "scanner.re" { cur = cursor; yylval.regexp = strToCaseInsensitiveRE(token()); return STRING; } -#line 292 "scanner.cc" -yy54: ++YYCURSOR; +#line 303 "scanner.cc" +yy56: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; - goto yy55; -yy55: if(yych <= '!'){ - if(yych == 0x0A) goto yy45; - goto yy54; - } else { - if(yych <= '"') goto yy57; - if(yych != '\\') goto yy54; + goto yy57; +yy57: if(yych <= '!'){ + if(yych == 0x0A) goto yy47; goto yy56; + } else { + if(yych <= '"') goto yy59; + if(yych != '\\') goto yy56; + goto yy58; } -yy56: ++YYCURSOR; +yy58: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; - if(yych == 0x0A) goto yy45; - goto yy54; -yy57: ++YYCURSOR; - goto yy58; -yy58: -#line 116 "scanner.re" -{ cur = cursor; - yylval.regexp = strToRE(token()); - return STRING; } -#line 319 "scanner.cc" + if(yych == 0x0A) goto yy47; + goto yy56; yy59: ++YYCURSOR; goto yy60; yy60: -#line 113 "scanner.re" -{ tok = cursor; - RETURN(0); } -#line 326 "scanner.cc" +#line 120 "scanner.re" +{ cur = cursor; + yylval.regexp = strToRE(token()); + return STRING; } +#line 330 "scanner.cc" yy61: ++YYCURSOR; goto yy62; yy62: -#line 110 "scanner.re" +#line 117 "scanner.re" +{ tok = cursor; + RETURN(0); } +#line 337 "scanner.cc" +yy63: ++YYCURSOR; + goto yy64; +yy64: +#line 114 "scanner.re" { depth = 1; goto comment; } -#line 333 "scanner.cc" -yy63: ++YYCURSOR; +#line 344 "scanner.cc" +yy65: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; - goto yy64; -yy64: if(yych <= '/'){ - if(yych == ',') goto yy67; - goto yy45; + goto yy66; +yy66: if(yych <= '/'){ + if(yych == ',') goto yy69; + goto yy47; } else { - if(yych <= '9') goto yy63; - if(yych != '}') goto yy45; - goto yy65; + if(yych <= '9') goto yy65; + if(yych != '}') goto yy47; + goto yy67; } -yy65: ++YYCURSOR; - goto yy66; -yy66: -#line 138 "scanner.re" +yy67: ++YYCURSOR; + goto yy68; +yy68: +#line 142 "scanner.re" { yylval.extop.minsize = atoi((char *)tok+1); yylval.extop.maxsize = atoi((char *)tok+1); RETURN(CLOSESIZE); } -#line 354 "scanner.cc" -yy67: yych = *++YYCURSOR; - if(yych != '}') goto yy71; - goto yy68; -yy68: ++YYCURSOR; - goto yy69; -yy69: -#line 146 "scanner.re" +#line 365 "scanner.cc" +yy69: yych = *++YYCURSOR; + if(yych != '}') goto yy73; + goto yy70; +yy70: ++YYCURSOR; + goto yy71; +yy71: +#line 150 "scanner.re" { yylval.extop.minsize = atoi((char *)tok+1); yylval.extop.maxsize = -1; RETURN(CLOSESIZE); } -#line 365 "scanner.cc" -yy70: ++YYCURSOR; +#line 376 "scanner.cc" +yy72: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; - goto yy71; -yy71: if(yych <= '/') goto yy45; - if(yych <= '9') goto yy70; - if(yych != '}') goto yy45; - goto yy72; -yy72: ++YYCURSOR; goto yy73; -yy73: -#line 142 "scanner.re" +yy73: if(yych <= '/') goto yy47; + if(yych <= '9') goto yy72; + if(yych != '}') goto yy47; + goto yy74; +yy74: ++YYCURSOR; + goto yy75; +yy75: +#line 146 "scanner.re" { yylval.extop.minsize = atoi((char *)tok+1); yylval.extop.maxsize = MAX(yylval.extop.minsize,atoi(strchr((char *)tok, ',')+1)); RETURN(CLOSESIZE); } -#line 382 "scanner.cc" +#line 393 "scanner.cc" } -#line 164 "scanner.re" +#line 168 "scanner.re" code: -#line 386 "scanner.cc" +#line 397 "scanner.cc" { YYCTYPE yych; unsigned int yyaccept; - goto yy74; -yy75: ++YYCURSOR; -yy74: + goto yy76; +yy77: ++YYCURSOR; +yy76: if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; if(yych <= '&'){ if(yych <= 0x0A){ - if(yych <= 0x09) goto yy82; - goto yy80; - } else { - if(yych == '"') goto yy84; + if(yych <= 0x09) goto yy84; goto yy82; + } else { + if(yych == '"') goto yy86; + goto yy84; } } else { if(yych <= '{'){ - if(yych <= '\'') goto yy85; - if(yych <= 'z') goto yy82; - goto yy78; + if(yych <= '\'') goto yy87; + if(yych <= 'z') goto yy84; + goto yy80; } else { - if(yych != '}') goto yy82; - goto yy76; + if(yych != '}') goto yy84; + goto yy78; } } -yy76: ++YYCURSOR; - goto yy77; -yy77: -#line 168 "scanner.re" +yy78: ++YYCURSOR; + goto yy79; +yy79: +#line 172 "scanner.re" { if(--depth == 0){ cur = cursor; yylval.token = new Token(token(), tline); return CODE; } goto code; } -#line 423 "scanner.cc" -yy78: ++YYCURSOR; - goto yy79; -yy79: -#line 174 "scanner.re" -{ ++depth; - goto code; } -#line 430 "scanner.cc" +#line 434 "scanner.cc" yy80: ++YYCURSOR; goto yy81; yy81: -#line 176 "scanner.re" -{ if(cursor == eof) fatal("missing '}'"); - pos = cursor; cline++; - goto code; - } -#line 439 "scanner.cc" +#line 178 "scanner.re" +{ ++depth; + goto code; } +#line 441 "scanner.cc" yy82: ++YYCURSOR; goto yy83; yy83: #line 180 "scanner.re" +{ if(cursor == eof) fatal("missing '}'"); + pos = cursor; cline++; + goto code; + } +#line 450 "scanner.cc" +yy84: ++YYCURSOR; + goto yy85; +yy85: +#line 184 "scanner.re" { goto code; } -#line 445 "scanner.cc" -yy84: yyaccept = 0; +#line 456 "scanner.cc" +yy86: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if(yych == 0x0A) goto yy83; - goto yy91; -yy85: yyaccept = 0; + if(yych == 0x0A) goto yy85; + goto yy93; +yy87: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if(yych == 0x0A) goto yy83; - goto yy87; -yy86: ++YYCURSOR; + if(yych == 0x0A) goto yy85; + goto yy89; +yy88: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; - goto yy87; -yy87: if(yych <= '&'){ - if(yych != 0x0A) goto yy86; - goto yy88; + goto yy89; +yy89: if(yych <= '&'){ + if(yych != 0x0A) goto yy88; + goto yy90; } else { - if(yych <= '\'') goto yy82; - if(yych == '\\') goto yy89; - goto yy86; + if(yych <= '\'') goto yy84; + if(yych == '\\') goto yy91; + goto yy88; } -yy88: YYCURSOR = YYMARKER; +yy90: YYCURSOR = YYMARKER; switch(yyaccept){ - case 0: goto yy83; + case 0: goto yy85; } -yy89: ++YYCURSOR; +yy91: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; - if(yych == 0x0A) goto yy88; - goto yy86; -yy90: ++YYCURSOR; + if(yych == 0x0A) goto yy90; + goto yy88; +yy92: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; - goto yy91; -yy91: if(yych <= '!'){ - if(yych == 0x0A) goto yy88; - goto yy90; - } else { - if(yych <= '"') goto yy82; - if(yych != '\\') goto yy90; + goto yy93; +yy93: if(yych <= '!'){ + if(yych == 0x0A) goto yy90; goto yy92; + } else { + if(yych <= '"') goto yy84; + if(yych != '\\') goto yy92; + goto yy94; } -yy92: ++YYCURSOR; +yy94: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; - if(yych == 0x0A) goto yy88; - goto yy90; + if(yych == 0x0A) goto yy90; + goto yy92; } -#line 181 "scanner.re" +#line 185 "scanner.re" comment: -#line 499 "scanner.cc" +#line 510 "scanner.cc" { YYCTYPE yych; unsigned int yyaccept; - goto yy93; -yy94: ++YYCURSOR; -yy93: + goto yy95; +yy96: ++YYCURSOR; +yy95: if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; if(yych <= ')'){ - if(yych == 0x0A) goto yy98; - goto yy100; + if(yych == 0x0A) goto yy100; + goto yy102; } else { - if(yych <= '*') goto yy95; - if(yych == '/') goto yy97; - goto yy100; + if(yych <= '*') goto yy97; + if(yych == '/') goto yy99; + goto yy102; } -yy95: ++YYCURSOR; - if((yych = *YYCURSOR) == '/') goto yy103; - goto yy96; -yy96: -#line 195 "scanner.re" +yy97: ++YYCURSOR; + if((yych = *YYCURSOR) == '/') goto yy105; + goto yy98; +yy98: +#line 199 "scanner.re" { goto comment; } -#line 522 "scanner.cc" -yy97: yych = *++YYCURSOR; - if(yych == '*') goto yy101; - goto yy96; -yy98: ++YYCURSOR; - goto yy99; -yy99: -#line 191 "scanner.re" +#line 533 "scanner.cc" +yy99: yych = *++YYCURSOR; + if(yych == '*') goto yy103; + goto yy98; +yy100: ++YYCURSOR; + goto yy101; +yy101: +#line 195 "scanner.re" { if(cursor == eof) RETURN(0); tok = pos = cursor; cline++; goto comment; } -#line 534 "scanner.cc" -yy100: yych = *++YYCURSOR; - goto yy96; -yy101: ++YYCURSOR; - goto yy102; -yy102: -#line 189 "scanner.re" -{ ++depth; - goto comment; } -#line 543 "scanner.cc" +#line 545 "scanner.cc" +yy102: yych = *++YYCURSOR; + goto yy98; yy103: ++YYCURSOR; goto yy104; yy104: -#line 185 "scanner.re" +#line 193 "scanner.re" +{ ++depth; + goto comment; } +#line 554 "scanner.cc" +yy105: ++YYCURSOR; + goto yy106; +yy106: +#line 189 "scanner.re" { if(--depth == 0) goto scan; else goto comment; } -#line 552 "scanner.cc" +#line 563 "scanner.cc" } -#line 196 "scanner.re" +#line 200 "scanner.re" } diff --git a/scanner.re b/scanner.re index 1ab6433b..12f265ae 100644 --- a/scanner.re +++ b/scanner.re @@ -55,7 +55,7 @@ char *Scanner::fill(char *cursor){ bot = buf; } if((cnt = in.rdbuf()->sgetn((char*) lim, BSIZE)) != BSIZE){ - eof = &lim[cnt]; *eof++ = '\n'; + eof = &lim[cnt]; *eof++ = '\0'; } lim += cnt; } @@ -63,6 +63,7 @@ char *Scanner::fill(char *cursor){ } /*!re2c +zero = "\000"; any = [\000-\377]; dot = any \ [\n]; esc = dot \ [\\]; @@ -78,7 +79,9 @@ int Scanner::echo(std::ostream &out){ // Catch EOF if (eof && cursor == eof) + { return 0; + } tok = cursor; echo: @@ -86,11 +89,12 @@ echo: "/*!re2c" { out.write((const char*)(tok), (const char*)(&cursor[-7]) - (const char*)(tok)); tok = cursor; RETURN(1); } - "\n" { if(cursor == eof) RETURN(0); - out.write((const char*)(tok), (const char*)(cursor) - (const char*)(tok)); + "\n" { out.write((const char*)(tok), (const char*)(cursor) - (const char*)(tok)); tok = pos = cursor; cline++; goto echo; } - any { goto echo; } + zero { out.write((const char*)(tok), (const char*)(cursor) - (const char*)(tok) - 1); // -1 so we don't write out the \0 + if(cursor == eof) { RETURN(0); } } + any { goto echo; } */ }