From: helly Date: Sun, 16 Apr 2006 18:04:39 +0000 (+0000) Subject: - Added -t switch to force two pass generation. X-Git-Tag: 0.13.6~380 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=889c5cb5f3916105f4ec2e4134f7e5f8c6300f3f;p=re2c - Added -t switch to force two pass generation. --- diff --git a/CHANGELOG b/CHANGELOG index 6852abfa..7ba14857 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,5 +1,7 @@ Version 0.10.2 (2006-??-??) --------------------------- +- Added -t switch to force two pass generation. +- Changed to not generate YYMARKER unless needed. - Fixed -i switch. - Added configuration 'yyfill:enable' to allow suppression of YYFILL() blocks. - Added tutorial like lessons to re2c. diff --git a/bootstrap/scanner.cc b/bootstrap/scanner.cc index 8aa1b055..2e180c99 100644 --- a/bootstrap/scanner.cc +++ b/bootstrap/scanner.cc @@ -1,4 +1,4 @@ -/* Generated by re2c 0.10.2.dev on Sat Apr 15 08:54:49 2006 */ +/* Generated by re2c 0.10.2.dev on Sun Apr 16 13:38:11 2006 */ #line 1 "scanner.re" /* $Id$ */ #include @@ -111,7 +111,7 @@ echo: yych = *(YYMARKER = ++YYCURSOR); if(yych == '*') goto yy16; yy3: -#line 165 "scanner.re" +#line 172 "scanner.re" { goto echo; } @@ -122,7 +122,7 @@ yy4: goto yy3; yy5: ++YYCURSOR; -#line 150 "scanner.re" +#line 157 "scanner.re" { if (!ignore_eoc) { out.write((const char*)(tok), (const char*)(cursor) - (const char*)(tok)); @@ -133,7 +133,7 @@ yy5: #line 134 "scanner.cc" yy7: ++YYCURSOR; -#line 157 "scanner.re" +#line 164 "scanner.re" { if (!ignore_eoc) { out.write((const char*)(tok), (const char*)(cursor) - (const char*)(tok) - 1); // -1 so we don't write out the \0 @@ -152,7 +152,7 @@ yy10: if(yych == 0x0A) goto yy14; if(yych == 0x0D) goto yy12; yy11: -#line 141 "scanner.re" +#line 148 "scanner.re" { if (ignore_eoc) { ignore_eoc = false; @@ -174,7 +174,7 @@ yy13: } yy14: ++YYCURSOR; -#line 132 "scanner.re" +#line 139 "scanner.re" { if (ignore_eoc) { ignore_eoc = false; @@ -217,12 +217,15 @@ yy21: if(yych != 'c') goto yy13; ++YYCURSOR; #line 110 "scanner.re" - { + { + if (bUsedYYMaxFill && bLastPass && !tFlag) { + fatal("found scanner block after YYMAXFILL declaration"); + } out.write((const char*)(tok), (const char*)(&cursor[-7]) - (const char*)(tok)); tok = cursor; RETURN(1); } -#line 226 "scanner.cc" +#line 229 "scanner.cc" yy26: yych = *++YYCURSOR; if(yych != 'x') goto yy13; @@ -237,14 +240,18 @@ yy26: yych = *++YYCURSOR; if(yych != 'c') goto yy13; ++YYCURSOR; -#line 115 "scanner.re" +#line 118 "scanner.re" { + if (bUsedYYMaxFill) { + fatal("cannot generate YYMAXFILL twice"); + } out << "#define YYMAXFILL " << maxFill << std::endl; tok = pos = cursor; ignore_eoc = true; + bUsedYYMaxFill = true; goto echo; } -#line 248 "scanner.cc" +#line 255 "scanner.cc" yy34: yych = *++YYCURSOR; if(yych != 't') goto yy13; @@ -269,14 +276,14 @@ yy34: yych = *++YYCURSOR; if(yych != 'c') goto yy13; ++YYCURSOR; -#line 121 "scanner.re" +#line 128 "scanner.re" { tok = pos = cursor; genGetState(out, topIndent, 0); ignore_eoc = true; goto echo; } -#line 280 "scanner.cc" +#line 287 "scanner.cc" yy47: yych = *++YYCURSOR; if(yych != 'n') goto yy13; @@ -297,15 +304,15 @@ yy47: yych = *++YYCURSOR; if(yych != 'c') goto yy13; ++YYCURSOR; -#line 127 "scanner.re" +#line 134 "scanner.re" { tok = pos = cursor; ignore_eoc = true; goto echo; } -#line 307 "scanner.cc" +#line 314 "scanner.cc" } -#line 168 "scanner.re" +#line 175 "scanner.re" } @@ -328,7 +335,7 @@ scan: goto value; } -#line 332 "scanner.cc" +#line 339 "scanner.cc" { YYCTYPE yych; unsigned int yyaccept = 0; @@ -402,42 +409,42 @@ yy60: if(yych <= '9') goto yy124; } yy61: -#line 190 "scanner.re" +#line 197 "scanner.re" { depth = 1; goto code; } -#line 410 "scanner.cc" +#line 417 "scanner.cc" yy62: ++YYCURSOR; if((yych = *YYCURSOR) == '*') goto yy121; yy63: -#line 220 "scanner.re" +#line 227 "scanner.re" { RETURN(*tok); } -#line 417 "scanner.cc" +#line 424 "scanner.cc" yy64: ++YYCURSOR; if((yych = *YYCURSOR) == '/') goto yy119; yy65: -#line 222 "scanner.re" +#line 229 "scanner.re" { yylval.op = *tok; RETURN(CLOSE); } -#line 425 "scanner.cc" +#line 432 "scanner.cc" yy66: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); if(yych != 0x0A) goto yy115; yy67: -#line 207 "scanner.re" +#line 214 "scanner.re" { fatal("unterminated string constant (missing \")"); } -#line 433 "scanner.cc" +#line 440 "scanner.cc" yy68: yyaccept = 2; yych = *(YYMARKER = ++YYCURSOR); if(yych != 0x0A) goto yy110; yy69: -#line 208 "scanner.re" +#line 215 "scanner.re" { fatal("unterminated string constant (missing ')"); } -#line 441 "scanner.cc" +#line 448 "scanner.cc" yy70: yyaccept = 3; yych = *(YYMARKER = ++YYCURSOR); @@ -445,9 +452,9 @@ yy70: if(yych == '^') goto yy101; goto yy100; yy71: -#line 218 "scanner.re" +#line 225 "scanner.re" { fatal("unterminated range (missing ])"); } -#line 451 "scanner.cc" +#line 458 "scanner.cc" yy72: yych = *++YYCURSOR; goto yy63; @@ -459,51 +466,51 @@ yy74: if((yych = *YYCURSOR) == 'e') goto yy91; goto yy90; yy75: -#line 249 "scanner.re" +#line 256 "scanner.re" { cur = cursor; yylval.symbol = Symbol::find(token()); return ID; } -#line 467 "scanner.cc" +#line 474 "scanner.cc" yy76: yych = *++YYCURSOR; goto yy90; yy77: ++YYCURSOR; -#line 253 "scanner.re" +#line 260 "scanner.re" { cur = cursor; yylval.regexp = mkDot(); return RANGE; } -#line 478 "scanner.cc" +#line 485 "scanner.cc" yy79: ++YYCURSOR; yych = *YYCURSOR; goto yy88; yy80: -#line 258 "scanner.re" +#line 265 "scanner.re" { goto scan; } -#line 486 "scanner.cc" +#line 493 "scanner.cc" yy81: ++YYCURSOR; yy82: -#line 260 "scanner.re" +#line 267 "scanner.re" { if(cursor == eof) RETURN(0); pos = cursor; cline++; goto scan; } -#line 495 "scanner.cc" +#line 502 "scanner.cc" yy83: ++YYCURSOR; if((yych = *YYCURSOR) == 0x0A) goto yy86; yy84: -#line 265 "scanner.re" +#line 272 "scanner.re" { std::ostringstream msg; msg << "unexpected character: "; prtChOrHex(msg, *tok); fatal(msg.str().c_str()); goto scan; } -#line 507 "scanner.cc" +#line 514 "scanner.cc" yy85: yych = *++YYCURSOR; goto yy84; @@ -581,14 +588,14 @@ yy96: } } yy98: -#line 242 "scanner.re" +#line 249 "scanner.re" { cur = cursor; tok+= 5; /* skip "re2c:" */ iscfg = 1; yylval.str = new Str(token()); return CONFIG; } -#line 592 "scanner.cc" +#line 599 "scanner.cc" yy99: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); @@ -622,11 +629,11 @@ yy103: goto yy99; yy104: ++YYCURSOR; -#line 214 "scanner.re" +#line 221 "scanner.re" { cur = cursor; yylval.regexp = ranToRE(token()); return RANGE; } -#line 630 "scanner.cc" +#line 637 "scanner.cc" yy106: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); @@ -635,11 +642,11 @@ yy106: goto yy101; yy107: ++YYCURSOR; -#line 210 "scanner.re" +#line 217 "scanner.re" { cur = cursor; yylval.regexp = invToRE(token()); return RANGE; } -#line 643 "scanner.cc" +#line 650 "scanner.cc" yy109: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); @@ -659,11 +666,11 @@ yy110: goto yy109; yy112: ++YYCURSOR; -#line 203 "scanner.re" +#line 210 "scanner.re" { cur = cursor; yylval.regexp = strToCaseInsensitiveRE(token()); return STRING; } -#line 667 "scanner.cc" +#line 674 "scanner.cc" yy114: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); @@ -683,23 +690,23 @@ yy115: goto yy114; yy117: ++YYCURSOR; -#line 199 "scanner.re" +#line 206 "scanner.re" { cur = cursor; yylval.regexp = strToRE(token()); return STRING; } -#line 691 "scanner.cc" +#line 698 "scanner.cc" yy119: ++YYCURSOR; -#line 196 "scanner.re" +#line 203 "scanner.re" { tok = cursor; RETURN(0); } -#line 697 "scanner.cc" +#line 704 "scanner.cc" yy121: ++YYCURSOR; -#line 193 "scanner.re" +#line 200 "scanner.re" { depth = 1; goto comment; } -#line 703 "scanner.cc" +#line 710 "scanner.cc" yy123: yych = *++YYCURSOR; if(yych == ',') goto yy137; @@ -720,16 +727,16 @@ yy125: yy126: ++YYCURSOR; yy127: -#line 240 "scanner.re" +#line 247 "scanner.re" { fatal("illegal closure form, use '{n}', '{n,}', '{n,m}' where n and m are numbers"); } -#line 726 "scanner.cc" +#line 733 "scanner.cc" yy128: ++YYCURSOR; -#line 228 "scanner.re" +#line 235 "scanner.re" { yylval.extop.minsize = atoi((char *)tok+1); yylval.extop.maxsize = atoi((char *)tok+1); RETURN(CLOSESIZE); } -#line 733 "scanner.cc" +#line 740 "scanner.cc" yy130: yyaccept = 6; yych = *(YYMARKER = ++YYCURSOR); @@ -737,11 +744,11 @@ yy130: if(yych <= '9') goto yy133; if(yych != '}') goto yy127; ++YYCURSOR; -#line 236 "scanner.re" +#line 243 "scanner.re" { yylval.extop.minsize = atoi((char *)tok+1); yylval.extop.maxsize = -1; RETURN(CLOSESIZE); } -#line 745 "scanner.cc" +#line 752 "scanner.cc" yy133: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); @@ -750,11 +757,11 @@ yy133: if(yych <= '9') goto yy133; if(yych != '}') goto yy95; ++YYCURSOR; -#line 232 "scanner.re" +#line 239 "scanner.re" { yylval.extop.minsize = atoi((char *)tok+1); yylval.extop.maxsize = MAX(yylval.extop.minsize,atoi(strchr((char *)tok, ',')+1)); RETURN(CLOSESIZE); } -#line 758 "scanner.cc" +#line 765 "scanner.cc" yy137: yyaccept = 6; yych = *(YYMARKER = ++YYCURSOR); @@ -762,17 +769,17 @@ yy137: if(yych <= '9') goto yy133; if(yych != '}') goto yy127; ++YYCURSOR; -#line 225 "scanner.re" +#line 232 "scanner.re" { yylval.op = '*'; RETURN(CLOSE); } -#line 769 "scanner.cc" +#line 776 "scanner.cc" } -#line 271 "scanner.re" +#line 278 "scanner.re" code: -#line 776 "scanner.cc" +#line 783 "scanner.cc" { YYCTYPE yych; if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); @@ -795,34 +802,34 @@ code: } } ++YYCURSOR; -#line 275 "scanner.re" +#line 282 "scanner.re" { if(--depth == 0){ cur = cursor; yylval.token = new Token(token(), tline); return CODE; } goto code; } -#line 806 "scanner.cc" +#line 813 "scanner.cc" yy144: ++YYCURSOR; -#line 281 "scanner.re" +#line 288 "scanner.re" { ++depth; goto code; } -#line 812 "scanner.cc" +#line 819 "scanner.cc" yy146: ++YYCURSOR; -#line 283 "scanner.re" +#line 290 "scanner.re" { if(cursor == eof) fatal("missing '}'"); pos = cursor; cline++; goto code; } -#line 820 "scanner.cc" +#line 827 "scanner.cc" yy148: ++YYCURSOR; yy149: -#line 287 "scanner.re" +#line 294 "scanner.re" { goto code; } -#line 826 "scanner.cc" +#line 833 "scanner.cc" yy150: yych = *(YYMARKER = ++YYCURSOR); if(yych == 0x0A) goto yy149; @@ -870,12 +877,12 @@ yy157: if(yych == 0x0A) goto yy154; goto yy156; } -#line 288 "scanner.re" +#line 295 "scanner.re" comment: -#line 879 "scanner.cc" +#line 886 "scanner.cc" { YYCTYPE yych; if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); @@ -892,47 +899,47 @@ yy161: ++YYCURSOR; if((yych = *YYCURSOR) == '/') goto yy169; yy162: -#line 303 "scanner.re" +#line 310 "scanner.re" { if(cursor == eof) RETURN(0); goto comment; } -#line 899 "scanner.cc" +#line 906 "scanner.cc" yy163: yych = *++YYCURSOR; if(yych == '*') goto yy167; goto yy162; yy164: ++YYCURSOR; -#line 299 "scanner.re" +#line 306 "scanner.re" { if(cursor == eof) RETURN(0); tok = pos = cursor; cline++; goto comment; } -#line 911 "scanner.cc" +#line 918 "scanner.cc" yy166: yych = *++YYCURSOR; goto yy162; yy167: ++YYCURSOR; -#line 296 "scanner.re" +#line 303 "scanner.re" { ++depth; fatal("ambiguous /* found"); goto comment; } -#line 921 "scanner.cc" +#line 928 "scanner.cc" yy169: ++YYCURSOR; -#line 292 "scanner.re" +#line 299 "scanner.re" { if(--depth == 0) goto scan; else goto comment; } -#line 929 "scanner.cc" +#line 936 "scanner.cc" } -#line 305 "scanner.re" +#line 312 "scanner.re" config: -#line 936 "scanner.cc" +#line 943 "scanner.cc" { YYCTYPE yych; if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); @@ -949,25 +956,25 @@ yy173: yych = *YYCURSOR; goto yy182; yy174: -#line 309 "scanner.re" +#line 316 "scanner.re" { goto config; } -#line 955 "scanner.cc" +#line 962 "scanner.cc" yy175: ++YYCURSOR; yych = *YYCURSOR; goto yy180; yy176: -#line 310 "scanner.re" +#line 317 "scanner.re" { iscfg = 2; cur = cursor; RETURN('='); } -#line 966 "scanner.cc" +#line 973 "scanner.cc" yy177: ++YYCURSOR; -#line 314 "scanner.re" +#line 321 "scanner.re" { fatal("missing '='"); } -#line 971 "scanner.cc" +#line 978 "scanner.cc" yy179: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); @@ -985,12 +992,12 @@ yy182: if(yych == ' ') goto yy181; goto yy174; } -#line 315 "scanner.re" +#line 322 "scanner.re" value: -#line 994 "scanner.cc" +#line 1001 "scanner.cc" { YYCTYPE yych; if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); @@ -1023,13 +1030,13 @@ value: } } yy185: -#line 324 "scanner.re" +#line 331 "scanner.re" { cur = cursor; yylval.str = new Str(token()); iscfg = 0; return VALUE; } -#line 1033 "scanner.cc" +#line 1040 "scanner.cc" yy186: ++YYCURSOR; if((yych = *YYCURSOR) <= 0x0D) { @@ -1044,13 +1051,13 @@ yy186: } } yy187: -#line 319 "scanner.re" +#line 326 "scanner.re" { cur = cursor; yylval.number = atoi(token().to_string().c_str()); iscfg = 0; return NUMBER; } -#line 1054 "scanner.cc" +#line 1061 "scanner.cc" yy188: yych = *++YYCURSOR; if(yych <= '0') goto yy192; @@ -1224,7 +1231,7 @@ yy206: if(yych == 0x0A) goto yy199; goto yy203; } -#line 329 "scanner.re" +#line 336 "scanner.re" } diff --git a/code.cc b/code.cc index f75830e3..25ea82e2 100644 --- a/code.cc +++ b/code.cc @@ -396,11 +396,11 @@ void Initial::emit(std::ostream &o, uint ind, bool &readCh) const } if (state->link) { - need(o, ind, state->depth, readCh, setMarker && bUseYYMarker); + need(o, ind, state->depth, readCh, setMarker && bUsedYYMarker); } else { - if (setMarker && bUseYYMarker) + if (setMarker && bUsedYYMarker) { o << indent(ind) << "YYMARKER = YYCURSOR;\n"; } @@ -417,7 +417,7 @@ void Save::emit(std::ostream &o, uint ind, bool &readCh) const if (state->link) { - if (bUseYYMarker) + if (bUsedYYMarker) { o << indent(ind) << "YYMARKER = ++YYCURSOR;\n"; } @@ -425,7 +425,7 @@ void Save::emit(std::ostream &o, uint ind, bool &readCh) const } else { - if (bUseYYMarker) + if (bUsedYYMarker) { o << indent(ind) << "yych = *(YYMARKER = ++YYCURSOR);\n"; } @@ -474,7 +474,7 @@ void Accept::emit(std::ostream &o, uint ind, bool &readCh) const if (first) { first = false; - bUseYYMarker = true; + bUsedYYMarker = true; o << indent(ind) << "YYCURSOR = YYMARKER;\n"; if (bUsedYYAccept && cases > 1) { @@ -1234,7 +1234,6 @@ void DFA::emit(std::ostream &o, uint ind) uint nRules = 0; - maxFill = 1; for (s = head; s; s = s->next) { s->depth = maxDist(s); diff --git a/globals.h b/globals.h index 323d1c70..8c74f719 100644 --- a/globals.h +++ b/globals.h @@ -21,8 +21,14 @@ extern bool fFlag; extern bool iFlag; extern bool sFlag; extern bool wFlag; +extern bool tFlag; + +extern bool bLastPass; extern bool bUsedYYAccept; +extern bool bUsedYYMaxFill; +extern bool bUsedYYMarker; + extern bool bUseStartLabel; extern std::string startLabelName; extern uint maxFill; @@ -36,7 +42,6 @@ extern bool bUseStateAbort; extern bool bUseStateNext; extern bool bWroteGetState; extern bool bUseYYFill; -extern bool bUseYYMarker; extern uint asc2ebc[256]; extern uint ebc2asc[256]; diff --git a/htdocs/index.html b/htdocs/index.html index ca954398..71289dbe 100755 --- a/htdocs/index.html +++ b/htdocs/index.html @@ -78,6 +78,8 @@ provide re2c packages.

Changelog

2006-??-??: 0.10.2