From 6d3c3f46510daa5aa9eda4f6be089a4305d73d22 Mon Sep 17 00:00:00 2001 From: Ulya Trofimovich Date: Sun, 16 Aug 2015 20:57:29 +0100 Subject: [PATCH] Lexer: no need to have "{0,}" special case. Now "{0,}" is handled by general case for counted repetition. Had to fix test because of swapped alternatives in construction of regexps of the form "r*" and "r{n,". Added some tests for counted repetition. --- re2c/bootstrap/src/parse/scanner_lex.cc | 1388 +++++++++++------------ re2c/src/parse/scanner_lex.re | 5 - re2c/test/bug1390174.c | 26 +- re2c/test/repeater2.c | 373 ++++++ re2c/test/repeater2.re | 51 + re2c/test/repeater_overflow.c | 1 + re2c/test/repeater_overflow.re | 3 + 7 files changed, 1124 insertions(+), 723 deletions(-) create mode 100644 re2c/test/repeater2.c create mode 100644 re2c/test/repeater2.re create mode 100644 re2c/test/repeater_overflow.c create mode 100644 re2c/test/repeater_overflow.re diff --git a/re2c/bootstrap/src/parse/scanner_lex.cc b/re2c/bootstrap/src/parse/scanner_lex.cc index 612d6597..1774c20d 100644 --- a/re2c/bootstrap/src/parse/scanner_lex.cc +++ b/re2c/bootstrap/src/parse/scanner_lex.cc @@ -1,4 +1,4 @@ -/* Generated by re2c 0.14.3 on Sun Aug 16 11:25:05 2015 */ +/* Generated by re2c 0.14.3 on Sun Aug 16 20:20:10 2015 */ #line 1 "../src/parse/scanner_lex.re" #include #include @@ -708,7 +708,7 @@ start: yy112: ++YYCURSOR; yy113: -#line 441 "../src/parse/scanner_lex.re" +#line 436 "../src/parse/scanner_lex.re" { fatalf("unexpected character: '%c'", *tok); goto scan; @@ -717,9 +717,9 @@ yy113: yy114: ++YYCURSOR; yych = (YYCTYPE)*YYCURSOR; - goto yy248; + goto yy244; yy115: -#line 425 "../src/parse/scanner_lex.re" +#line 420 "../src/parse/scanner_lex.re" { goto scan; } @@ -728,13 +728,13 @@ yy116: yyaccept = 0; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); if (yych <= 0x1F) { - if (yych == '\t') goto yy226; + if (yych == '\t') goto yy222; } else { - if (yych <= ' ') goto yy226; - if (yych == '#') goto yy228; + if (yych <= ' ') goto yy222; + if (yych == '#') goto yy224; } yy117: -#line 434 "../src/parse/scanner_lex.re" +#line 429 "../src/parse/scanner_lex.re" { if (cur == eof) return 0; pos = cur; @@ -744,12 +744,12 @@ yy117: #line 745 "src/parse/scanner_lex.cc" yy118: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '\n') goto yy225; + if (yych == '\n') goto yy221; goto yy113; yy119: yyaccept = 1; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych != '\n') goto yy221; + if (yych != '\n') goto yy217; yy120: #line 286 "../src/parse/scanner_lex.re" { @@ -758,12 +758,12 @@ yy120: #line 759 "src/parse/scanner_lex.cc" yy121: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '}') goto yy213; + if (yych == '}') goto yy209; goto yy113; yy122: yyaccept = 2; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych != '\n') goto yy216; + if (yych != '\n') goto yy212; yy123: #line 289 "../src/parse/scanner_lex.re" { @@ -780,7 +780,7 @@ yy125: #line 781 "src/parse/scanner_lex.cc" yy126: ++YYCURSOR; - if ((yych = (YYCTYPE)*YYCURSOR) == '/') goto yy213; + if ((yych = (YYCTYPE)*YYCURSOR) == '/') goto yy209; #line 319 "../src/parse/scanner_lex.re" { yylval.op = *tok; @@ -797,7 +797,7 @@ yy128: #line 798 "src/parse/scanner_lex.cc" yy130: ++YYCURSOR; -#line 420 "../src/parse/scanner_lex.re" +#line 415 "../src/parse/scanner_lex.re" { yylval.regexp = mkDot(); return RANGE; @@ -805,30 +805,30 @@ yy130: #line 806 "src/parse/scanner_lex.cc" yy132: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '*') goto yy209; - if (yych == '/') goto yy211; + if (yych == '*') goto yy205; + if (yych == '/') goto yy207; goto yy125; yy133: YYCTXMARKER = YYCURSOR + 1; yych = (YYCTYPE)*++YYCURSOR; - goto yy169; + goto yy165; yy134: YYCTXMARKER = YYCURSOR + 1; yych = (YYCTYPE)*++YYCURSOR; - if (yych == '=') goto yy205; + if (yych == '=') goto yy201; goto yy113; yy135: yyaccept = 3; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych == '!') goto yy196; - if (yych == '>') goto yy198; + if (yych == '!') goto yy192; + if (yych == '>') goto yy194; goto yy125; yy136: yyaccept = 4; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); if (yych == '\n') goto yy137; - if (yych == '^') goto yy188; - goto yy187; + if (yych == '^') goto yy184; + goto yy183; yy137: #line 305 "../src/parse/scanner_lex.re" { @@ -838,25 +838,23 @@ yy137: yy138: YYCTXMARKER = YYCURSOR + 1; yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'e') goto yy170; - goto yy169; + if (yych == 'e') goto yy166; + goto yy165; yy139: yyaccept = 5; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych <= '@') { - if (yych <= '/') { - if (yych == ',') goto yy147; - } else { - if (yych <= '0') goto yy141; - if (yych <= '9') goto yy143; - } + if (yybm[0+yych] & 4) { + goto yy141; + } + if (yych <= 'Z') { + if (yych == ',') goto yy146; + if (yych >= 'A') goto yy144; } else { if (yych <= '_') { - if (yych <= 'Z') goto yy145; - if (yych >= '_') goto yy145; + if (yych >= '_') goto yy144; } else { if (yych <= '`') goto yy140; - if (yych <= 'z') goto yy145; + if (yych <= 'z') goto yy144; } } yy140: @@ -865,12 +863,29 @@ yy140: depth = 1; goto code; } -#line 869 "src/parse/scanner_lex.cc" +#line 867 "src/parse/scanner_lex.cc" yy141: - yych = (YYCTYPE)*++YYCURSOR; - if (yych == ',') goto yy160; - goto yy144; -yy142: + ++YYCURSOR; + if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); + yych = (YYCTYPE)*YYCURSOR; + if (yybm[0+yych] & 4) { + goto yy141; + } + if (yych <= '^') { + if (yych <= ',') { + if (yych >= ',') goto yy152; + } else { + if (yych <= '@') goto yy143; + if (yych <= 'Z') goto yy144; + } + } else { + if (yych <= 'z') { + if (yych != '`') goto yy144; + } else { + if (yych == '}') goto yy150; + } + } +yy143: YYCURSOR = YYMARKER; if (yyaccept <= 3) { if (yyaccept <= 1) { @@ -895,56 +910,32 @@ yy142: } } else { if (yyaccept == 6) { - goto yy148; + goto yy147; } else { - goto yy176; + goto yy172; } } } -yy143: - ++YYCURSOR; - if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); - yych = (YYCTYPE)*YYCURSOR; yy144: - if (yybm[0+yych] & 4) { - goto yy143; - } - if (yych <= '^') { - if (yych <= ',') { - if (yych <= '+') goto yy142; - goto yy153; - } else { - if (yych <= '@') goto yy142; - if (yych >= '[') goto yy142; - } - } else { - if (yych <= 'z') { - if (yych == '`') goto yy142; - } else { - if (yych == '}') goto yy151; - goto yy142; - } - } -yy145: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; if (yybm[0+yych] & 8) { - goto yy145; + goto yy144; } - if (yych == '}') goto yy149; - goto yy142; -yy147: + if (yych == '}') goto yy148; + goto yy143; +yy146: ++YYCURSOR; -yy148: -#line 364 "../src/parse/scanner_lex.re" +yy147: +#line 359 "../src/parse/scanner_lex.re" { fatal("illegal closure form, use '{n}', '{n,}', '{n,m}' where n and m are numbers"); } -#line 945 "src/parse/scanner_lex.cc" -yy149: +#line 936 "src/parse/scanner_lex.cc" +yy148: ++YYCURSOR; -#line 368 "../src/parse/scanner_lex.re" +#line 363 "../src/parse/scanner_lex.re" { if (!FFlag) { fatal("curly braces for names only allowed with -F switch"); @@ -952,10 +943,10 @@ yy149: yylval.str = new std::string (tok + 1, tok_len () - 2); // -2 to omit braces return ID; } -#line 956 "src/parse/scanner_lex.cc" -yy151: +#line 947 "src/parse/scanner_lex.cc" +yy150: ++YYCURSOR; -#line 333 "../src/parse/scanner_lex.re" +#line 328 "../src/parse/scanner_lex.re" { if (!s_to_u32_unsafe (tok + 1, cur - 1, yylval.extop.min)) { @@ -964,15 +955,15 @@ yy151: yylval.extop.max = yylval.extop.min; return CLOSESIZE; } -#line 968 "src/parse/scanner_lex.cc" -yy153: +#line 959 "src/parse/scanner_lex.cc" +yy152: yyaccept = 6; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych <= '/') goto yy148; - if (yych <= '9') goto yy156; - if (yych != '}') goto yy148; + if (yych <= '/') goto yy147; + if (yych <= '9') goto yy155; + if (yych != '}') goto yy147; ++YYCURSOR; -#line 355 "../src/parse/scanner_lex.re" +#line 350 "../src/parse/scanner_lex.re" { if (!s_to_u32_unsafe (tok + 1, cur - 2, yylval.extop.min)) { @@ -981,16 +972,16 @@ yy153: yylval.extop.max = UINT32_MAX; return CLOSESIZE; } -#line 985 "src/parse/scanner_lex.cc" -yy156: +#line 976 "src/parse/scanner_lex.cc" +yy155: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; - if (yych <= '/') goto yy142; - if (yych <= '9') goto yy156; - if (yych != '}') goto yy142; + if (yych <= '/') goto yy143; + if (yych <= '9') goto yy155; + if (yych != '}') goto yy143; ++YYCURSOR; -#line 342 "../src/parse/scanner_lex.re" +#line 337 "../src/parse/scanner_lex.re" { const char * p = strchr (tok, ','); if (!s_to_u32_unsafe (tok + 1, p, yylval.extop.min)) @@ -1003,25 +994,12 @@ yy156: } return CLOSESIZE; } -#line 1007 "src/parse/scanner_lex.cc" -yy160: - yyaccept = 6; - yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych <= '/') goto yy148; - if (yych <= '9') goto yy156; - if (yych != '}') goto yy148; - ++YYCURSOR; -#line 328 "../src/parse/scanner_lex.re" - { - yylval.op = '*'; - return CLOSE; - } -#line 1020 "src/parse/scanner_lex.cc" -yy163: +#line 998 "src/parse/scanner_lex.cc" +yy159: ++YYCURSOR; -yy164: +yy160: YYCURSOR = YYCTXMARKER; -#line 401 "../src/parse/scanner_lex.re" +#line 396 "../src/parse/scanner_lex.re" { if (!FFlag) { yylval.str = new std::string (tok, tok_len ()); @@ -1040,165 +1018,165 @@ yy164: return STRING; } } -#line 1044 "src/parse/scanner_lex.cc" -yy165: +#line 1022 "src/parse/scanner_lex.cc" +yy161: yych = (YYCTYPE)*++YYCURSOR; - goto yy184; -yy166: + goto yy180; +yy162: ++YYCURSOR; -yy167: +yy163: YYCURSOR = YYCTXMARKER; -#line 396 "../src/parse/scanner_lex.re" +#line 391 "../src/parse/scanner_lex.re" { yylval.str = new std::string (tok, tok_len ()); return ID; } -#line 1057 "src/parse/scanner_lex.cc" -yy168: +#line 1035 "src/parse/scanner_lex.cc" +yy164: YYCTXMARKER = YYCURSOR + 1; ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = (YYCTYPE)*YYCURSOR; -yy169: +yy165: if (yych <= '9') { if (yych <= ' ') { - if (yych == '\t') goto yy165; - if (yych <= 0x1F) goto yy163; - goto yy165; + if (yych == '\t') goto yy161; + if (yych <= 0x1F) goto yy159; + goto yy161; } else { - if (yych == ',') goto yy166; - if (yych <= '/') goto yy163; - goto yy168; + if (yych == ',') goto yy162; + if (yych <= '/') goto yy159; + goto yy164; } } else { if (yych <= 'Z') { - if (yych <= '<') goto yy163; - if (yych <= '>') goto yy166; - if (yych <= '@') goto yy163; - goto yy168; + if (yych <= '<') goto yy159; + if (yych <= '>') goto yy162; + if (yych <= '@') goto yy159; + goto yy164; } else { if (yych <= '_') { - if (yych <= '^') goto yy163; - goto yy168; + if (yych <= '^') goto yy159; + goto yy164; } else { - if (yych <= '`') goto yy163; - if (yych <= 'z') goto yy168; - goto yy163; + if (yych <= '`') goto yy159; + if (yych <= 'z') goto yy164; + goto yy159; } } } -yy170: +yy166: YYCTXMARKER = YYCURSOR + 1; yych = (YYCTYPE)*++YYCURSOR; - if (yych != '2') goto yy169; + if (yych != '2') goto yy165; YYCTXMARKER = YYCURSOR + 1; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'c') goto yy169; + if (yych != 'c') goto yy165; YYCTXMARKER = YYCURSOR + 1; yych = (YYCTYPE)*++YYCURSOR; - if (yych != ':') goto yy169; + if (yych != ':') goto yy165; yych = (YYCTYPE)*++YYCURSOR; if (yych <= 'Z') { - if (yych <= '/') goto yy164; - if (yych <= '9') goto yy174; - if (yych <= '@') goto yy164; + if (yych <= '/') goto yy160; + if (yych <= '9') goto yy170; + if (yych <= '@') goto yy160; } else { if (yych <= '_') { - if (yych <= '^') goto yy164; + if (yych <= '^') goto yy160; } else { - if (yych <= '`') goto yy164; - if (yych >= '{') goto yy164; + if (yych <= '`') goto yy160; + if (yych >= '{') goto yy160; } } -yy174: +yy170: yyaccept = 7; YYMARKER = ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = (YYCTYPE)*YYCURSOR; if (yych <= '@') { if (yych <= '9') { - if (yych >= '0') goto yy174; + if (yych >= '0') goto yy170; } else { - if (yych <= ':') goto yy178; - if (yych >= '@') goto yy177; + if (yych <= ':') goto yy174; + if (yych >= '@') goto yy173; } } else { if (yych <= '_') { - if (yych <= 'Z') goto yy174; - if (yych >= '_') goto yy174; + if (yych <= 'Z') goto yy170; + if (yych >= '_') goto yy170; } else { - if (yych <= '`') goto yy176; - if (yych <= 'z') goto yy174; + if (yych <= '`') goto yy172; + if (yych <= 'z') goto yy170; } } -yy176: -#line 376 "../src/parse/scanner_lex.re" +yy172: +#line 371 "../src/parse/scanner_lex.re" { tok += 5; /* skip "re2c:" */ lexer_state = LEX_CONFIG; yylval.str = new std::string (tok, tok_len ()); return CONFIG; } -#line 1143 "src/parse/scanner_lex.cc" -yy177: +#line 1121 "src/parse/scanner_lex.cc" +yy173: yych = (YYCTYPE)*++YYCURSOR; if (yych <= 'Z') { - if (yych <= '/') goto yy142; - if (yych <= '9') goto yy179; - if (yych <= '@') goto yy142; - goto yy179; + if (yych <= '/') goto yy143; + if (yych <= '9') goto yy175; + if (yych <= '@') goto yy143; + goto yy175; } else { if (yych <= '_') { - if (yych <= '^') goto yy142; - goto yy179; + if (yych <= '^') goto yy143; + goto yy175; } else { - if (yych <= '`') goto yy142; - if (yych <= 'z') goto yy179; - goto yy142; + if (yych <= '`') goto yy143; + if (yych <= 'z') goto yy175; + goto yy143; } } -yy178: +yy174: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; if (yych <= 'Z') { - if (yych <= '/') goto yy142; - if (yych <= '9') goto yy174; - if (yych <= '@') goto yy142; - goto yy174; + if (yych <= '/') goto yy143; + if (yych <= '9') goto yy170; + if (yych <= '@') goto yy143; + goto yy170; } else { if (yych <= '_') { - if (yych <= '^') goto yy142; - goto yy174; + if (yych <= '^') goto yy143; + goto yy170; } else { - if (yych <= '`') goto yy142; - if (yych <= 'z') goto yy174; - goto yy142; + if (yych <= '`') goto yy143; + if (yych <= 'z') goto yy170; + goto yy143; } } -yy179: +yy175: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; if (yych <= 'Z') { - if (yych <= '/') goto yy176; - if (yych <= '9') goto yy179; - if (yych <= '@') goto yy176; - goto yy179; + if (yych <= '/') goto yy172; + if (yych <= '9') goto yy175; + if (yych <= '@') goto yy172; + goto yy175; } else { if (yych <= '_') { - if (yych <= '^') goto yy176; - goto yy179; + if (yych <= '^') goto yy172; + goto yy175; } else { - if (yych <= '`') goto yy176; - if (yych <= 'z') goto yy179; - goto yy176; + if (yych <= '`') goto yy172; + if (yych <= 'z') goto yy175; + goto yy172; } } -yy181: +yy177: ++YYCURSOR; YYCURSOR = YYCTXMARKER; -#line 383 "../src/parse/scanner_lex.re" +#line 378 "../src/parse/scanner_lex.re" { yylval.str = new std::string (tok, tok_len ()); if (FFlag) @@ -1211,51 +1189,51 @@ yy181: return ID; } } -#line 1215 "src/parse/scanner_lex.cc" -yy183: +#line 1193 "src/parse/scanner_lex.cc" +yy179: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; -yy184: +yy180: if (yybm[0+yych] & 16) { - goto yy183; + goto yy179; } - if (yych == ',') goto yy185; - if (yych <= '<') goto yy181; - if (yych >= '?') goto yy181; -yy185: + if (yych == ',') goto yy181; + if (yych <= '<') goto yy177; + if (yych >= '?') goto yy177; +yy181: yych = (YYCTYPE)*++YYCURSOR; - goto yy167; -yy186: + goto yy163; +yy182: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; -yy187: +yy183: if (yybm[0+yych] & 32) { - goto yy186; + goto yy182; } - if (yych <= '\n') goto yy142; - if (yych <= '\\') goto yy190; - goto yy191; -yy188: + if (yych <= '\n') goto yy143; + if (yych <= '\\') goto yy186; + goto yy187; +yy184: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; if (yych <= '[') { - if (yych == '\n') goto yy142; - goto yy188; + if (yych == '\n') goto yy143; + goto yy184; } else { - if (yych <= '\\') goto yy193; - if (yych <= ']') goto yy194; - goto yy188; + if (yych <= '\\') goto yy189; + if (yych <= ']') goto yy190; + goto yy184; } -yy190: +yy186: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; - if (yych == '\n') goto yy142; - goto yy186; -yy191: + if (yych == '\n') goto yy143; + goto yy182; +yy187: ++YYCURSOR; #line 299 "../src/parse/scanner_lex.re" { @@ -1263,14 +1241,14 @@ yy191: yylval.regexp = ranToRE (s); return RANGE; } -#line 1267 "src/parse/scanner_lex.cc" -yy193: +#line 1245 "src/parse/scanner_lex.cc" +yy189: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; - if (yych == '\n') goto yy142; - goto yy188; -yy194: + if (yych == '\n') goto yy143; + goto yy184; +yy190: ++YYCURSOR; #line 293 "../src/parse/scanner_lex.re" { @@ -1278,113 +1256,113 @@ yy194: yylval.regexp = invToRE (s); return RANGE; } -#line 1282 "src/parse/scanner_lex.cc" -yy196: +#line 1260 "src/parse/scanner_lex.cc" +yy192: ++YYCURSOR; #line 312 "../src/parse/scanner_lex.re" { return SETUP; } -#line 1289 "src/parse/scanner_lex.cc" -yy198: +#line 1267 "src/parse/scanner_lex.cc" +yy194: YYCTXMARKER = YYCURSOR + 1; yych = (YYCTYPE)*++YYCURSOR; - goto yy200; -yy199: + goto yy196; +yy195: ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = (YYCTYPE)*YYCURSOR; -yy200: +yy196: if (yych <= '9') { if (yych <= '\t') { - if (yych <= 0x08) goto yy142; - goto yy199; + if (yych <= 0x08) goto yy143; + goto yy195; } else { - if (yych == ' ') goto yy199; - goto yy142; + if (yych == ' ') goto yy195; + goto yy143; } } else { if (yych <= '=') { - if (yych <= ':') goto yy204; - if (yych <= '<') goto yy142; - goto yy203; + if (yych <= ':') goto yy200; + if (yych <= '<') goto yy143; + goto yy199; } else { - if (yych != '{') goto yy142; + if (yych != '{') goto yy143; } } -yy201: +yy197: ++YYCURSOR; YYCURSOR = YYCTXMARKER; #line 309 "../src/parse/scanner_lex.re" { return NOCOND; } -#line 1323 "src/parse/scanner_lex.cc" -yy203: +#line 1301 "src/parse/scanner_lex.cc" +yy199: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '>') goto yy201; - goto yy142; -yy204: + if (yych == '>') goto yy197; + goto yy143; +yy200: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '=') goto yy201; - goto yy142; -yy205: + if (yych == '=') goto yy197; + goto yy143; +yy201: ++YYCURSOR; - if ((yych = (YYCTYPE)*YYCURSOR) == '>') goto yy207; + if ((yych = (YYCTYPE)*YYCURSOR) == '>') goto yy203; #line 240 "../src/parse/scanner_lex.re" { tok += 2; /* skip ":=" */ depth = 0; goto code; } -#line 1341 "src/parse/scanner_lex.cc" -yy207: +#line 1319 "src/parse/scanner_lex.cc" +yy203: ++YYCURSOR; YYCURSOR = YYCTXMARKER; #line 236 "../src/parse/scanner_lex.re" { return *tok; } -#line 1349 "src/parse/scanner_lex.cc" -yy209: +#line 1327 "src/parse/scanner_lex.cc" +yy205: ++YYCURSOR; #line 249 "../src/parse/scanner_lex.re" { depth = 1; goto comment; } -#line 1357 "src/parse/scanner_lex.cc" -yy211: +#line 1335 "src/parse/scanner_lex.cc" +yy207: ++YYCURSOR; #line 246 "../src/parse/scanner_lex.re" { goto nextLine; } -#line 1364 "src/parse/scanner_lex.cc" -yy213: +#line 1342 "src/parse/scanner_lex.cc" +yy209: ++YYCURSOR; #line 255 "../src/parse/scanner_lex.re" { tok = cur; return 0; } -#line 1372 "src/parse/scanner_lex.cc" -yy215: +#line 1350 "src/parse/scanner_lex.cc" +yy211: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; -yy216: +yy212: if (yybm[0+yych] & 64) { - goto yy215; + goto yy211; } - if (yych <= '\n') goto yy142; - if (yych <= '\'') goto yy218; + if (yych <= '\n') goto yy143; + if (yych <= '\'') goto yy214; ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; - if (yych == '\n') goto yy142; - goto yy215; -yy218: + if (yych == '\n') goto yy143; + goto yy211; +yy214: ++YYCURSOR; #line 273 "../src/parse/scanner_lex.re" { @@ -1399,23 +1377,23 @@ yy218: } return STRING; } -#line 1403 "src/parse/scanner_lex.cc" -yy220: +#line 1381 "src/parse/scanner_lex.cc" +yy216: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; -yy221: +yy217: if (yybm[0+yych] & 128) { - goto yy220; + goto yy216; } - if (yych <= '\n') goto yy142; - if (yych <= '"') goto yy223; + if (yych <= '\n') goto yy143; + if (yych <= '"') goto yy219; ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; - if (yych == '\n') goto yy142; - goto yy220; -yy223: + if (yych == '\n') goto yy143; + goto yy216; +yy219: ++YYCURSOR; #line 260 "../src/parse/scanner_lex.re" { @@ -1430,182 +1408,182 @@ yy223: } return STRING; } -#line 1434 "src/parse/scanner_lex.cc" -yy225: +#line 1412 "src/parse/scanner_lex.cc" +yy221: yyaccept = 0; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); if (yych <= 0x1F) { if (yych != '\t') goto yy117; } else { - if (yych <= ' ') goto yy226; - if (yych == '#') goto yy228; + if (yych <= ' ') goto yy222; + if (yych == '#') goto yy224; goto yy117; } -yy226: +yy222: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; if (yych <= 0x1F) { - if (yych == '\t') goto yy226; - goto yy142; + if (yych == '\t') goto yy222; + goto yy143; } else { - if (yych <= ' ') goto yy226; - if (yych != '#') goto yy142; + if (yych <= ' ') goto yy222; + if (yych != '#') goto yy143; } -yy228: +yy224: ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 5) YYFILL(5); yych = (YYCTYPE)*YYCURSOR; if (yych <= 0x1F) { - if (yych == '\t') goto yy228; - goto yy142; + if (yych == '\t') goto yy224; + goto yy143; } else { - if (yych <= ' ') goto yy228; - if (yych != 'l') goto yy142; + if (yych <= ' ') goto yy224; + if (yych != 'l') goto yy143; } yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'i') goto yy142; + if (yych != 'i') goto yy143; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'n') goto yy142; + if (yych != 'n') goto yy143; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'e') goto yy142; + if (yych != 'e') goto yy143; yych = (YYCTYPE)*++YYCURSOR; - if (yych <= '0') goto yy235; - if (yych <= '9') goto yy142; - goto yy235; -yy234: + if (yych <= '0') goto yy231; + if (yych <= '9') goto yy143; + goto yy231; +yy230: YYCTXMARKER = YYCURSOR + 1; ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; -yy235: +yy231: if (yych <= 0x1F) { - if (yych == '\t') goto yy234; - goto yy142; + if (yych == '\t') goto yy230; + goto yy143; } else { - if (yych <= ' ') goto yy234; - if (yych <= '0') goto yy142; - if (yych >= ':') goto yy142; + if (yych <= ' ') goto yy230; + if (yych <= '0') goto yy143; + if (yych >= ':') goto yy143; } -yy236: +yy232: ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = (YYCTYPE)*YYCURSOR; if (yych <= '\r') { if (yych <= '\t') { - if (yych <= 0x08) goto yy142; + if (yych <= 0x08) goto yy143; } else { - if (yych <= '\n') goto yy240; - if (yych <= '\f') goto yy142; - goto yy242; + if (yych <= '\n') goto yy236; + if (yych <= '\f') goto yy143; + goto yy238; } } else { if (yych <= ' ') { - if (yych <= 0x1F) goto yy142; + if (yych <= 0x1F) goto yy143; } else { - if (yych <= '/') goto yy142; - if (yych <= '9') goto yy236; - goto yy142; + if (yych <= '/') goto yy143; + if (yych <= '9') goto yy232; + goto yy143; } } -yy238: +yy234: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; if (yych <= 0x1F) { - if (yych == '\t') goto yy238; - goto yy142; + if (yych == '\t') goto yy234; + goto yy143; } else { - if (yych <= ' ') goto yy238; - if (yych == '"') goto yy243; - goto yy142; + if (yych <= ' ') goto yy234; + if (yych == '"') goto yy239; + goto yy143; } -yy240: +yy236: ++YYCURSOR; YYCURSOR = YYCTXMARKER; -#line 429 "../src/parse/scanner_lex.re" +#line 424 "../src/parse/scanner_lex.re" { set_sourceline (); goto scan; } -#line 1532 "src/parse/scanner_lex.cc" -yy242: +#line 1510 "src/parse/scanner_lex.cc" +yy238: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '\n') goto yy240; - goto yy142; -yy243: + if (yych == '\n') goto yy236; + goto yy143; +yy239: ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3); yych = (YYCTYPE)*YYCURSOR; if (yych <= '!') { - if (yych == '\n') goto yy142; - goto yy243; + if (yych == '\n') goto yy143; + goto yy239; } else { - if (yych <= '"') goto yy246; - if (yych != '\\') goto yy243; + if (yych <= '"') goto yy242; + if (yych != '\\') goto yy239; } ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; - if (yych == '\n') goto yy142; - goto yy243; -yy246: + if (yych == '\n') goto yy143; + goto yy239; +yy242: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '\n') goto yy240; - if (yych == '\r') goto yy242; - goto yy142; -yy247: + if (yych == '\n') goto yy236; + if (yych == '\r') goto yy238; + goto yy143; +yy243: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; -yy248: - if (yych == '\t') goto yy247; - if (yych == ' ') goto yy247; +yy244: + if (yych == '\t') goto yy243; + if (yych == ' ') goto yy243; goto yy115; } -#line 445 "../src/parse/scanner_lex.re" +#line 440 "../src/parse/scanner_lex.re" flex_name: -#line 1572 "src/parse/scanner_lex.cc" +#line 1550 "src/parse/scanner_lex.cc" { YYCTYPE yych; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = (YYCTYPE)*YYCURSOR; - if (yych == '\n') goto yy253; - if (yych == '\r') goto yy255; + if (yych == '\n') goto yy249; + if (yych == '\r') goto yy251; ++YYCURSOR; -yy252: -#line 456 "../src/parse/scanner_lex.re" +yy248: +#line 451 "../src/parse/scanner_lex.re" { YYCURSOR = tok; goto start; } -#line 1586 "src/parse/scanner_lex.cc" -yy253: +#line 1564 "src/parse/scanner_lex.cc" +yy249: ++YYCURSOR; -yy254: -#line 450 "../src/parse/scanner_lex.re" +yy250: +#line 445 "../src/parse/scanner_lex.re" { YYCURSOR = tok; lexer_state = LEX_NORMAL; return FID_END; } -#line 1596 "src/parse/scanner_lex.cc" -yy255: +#line 1574 "src/parse/scanner_lex.cc" +yy251: yych = (YYCTYPE)*++YYCURSOR; - if (yych != '\n') goto yy252; + if (yych != '\n') goto yy248; ++YYCURSOR; yych = (YYCTYPE)*YYCURSOR; - goto yy254; + goto yy250; } -#line 460 "../src/parse/scanner_lex.re" +#line 455 "../src/parse/scanner_lex.re" code: -#line 1609 "src/parse/scanner_lex.cc" +#line 1587 "src/parse/scanner_lex.cc" { YYCTYPE yych; unsigned int yyaccept = 0; @@ -1647,26 +1625,26 @@ code: yych = (YYCTYPE)*YYCURSOR; if (yych <= '&') { if (yych <= '\n') { - if (yych <= 0x00) goto yy259; - if (yych <= '\t') goto yy261; - goto yy263; + if (yych <= 0x00) goto yy255; + if (yych <= '\t') goto yy257; + goto yy259; } else { - if (yych == '"') goto yy265; - goto yy261; + if (yych == '"') goto yy261; + goto yy257; } } else { if (yych <= '{') { - if (yych <= '\'') goto yy266; - if (yych <= 'z') goto yy261; - goto yy267; + if (yych <= '\'') goto yy262; + if (yych <= 'z') goto yy257; + goto yy263; } else { - if (yych == '}') goto yy269; - goto yy261; + if (yych == '}') goto yy265; + goto yy257; } } -yy259: +yy255: ++YYCURSOR; -#line 523 "../src/parse/scanner_lex.re" +#line 518 "../src/parse/scanner_lex.re" { if (cur == eof) { @@ -1678,35 +1656,35 @@ yy259: } goto code; } -#line 1682 "src/parse/scanner_lex.cc" -yy261: +#line 1660 "src/parse/scanner_lex.cc" +yy257: ++YYCURSOR; -yy262: -#line 537 "../src/parse/scanner_lex.re" +yy258: +#line 532 "../src/parse/scanner_lex.re" { goto code; } -#line 1690 "src/parse/scanner_lex.cc" -yy263: +#line 1668 "src/parse/scanner_lex.cc" +yy259: YYCTXMARKER = YYCURSOR + 1; yyaccept = 0; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); if (yych <= '\r') { if (yych <= '\t') { - if (yych >= '\t') goto yy280; + if (yych >= '\t') goto yy276; } else { - if (yych <= '\n') goto yy282; - if (yych >= '\r') goto yy282; + if (yych <= '\n') goto yy278; + if (yych >= '\r') goto yy278; } } else { if (yych <= ' ') { - if (yych >= ' ') goto yy280; + if (yych >= ' ') goto yy276; } else { - if (yych == '#') goto yy283; + if (yych == '#') goto yy279; } } -yy264: -#line 504 "../src/parse/scanner_lex.re" +yy260: +#line 499 "../src/parse/scanner_lex.re" { if (depth == 0) { @@ -1726,20 +1704,20 @@ yy264: cline++; goto code; } -#line 1730 "src/parse/scanner_lex.cc" -yy265: +#line 1708 "src/parse/scanner_lex.cc" +yy261: yyaccept = 1; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych == '\n') goto yy262; - goto yy278; -yy266: + if (yych == '\n') goto yy258; + goto yy274; +yy262: yyaccept = 1; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych == '\n') goto yy262; - goto yy272; -yy267: + if (yych == '\n') goto yy258; + goto yy268; +yy263: ++YYCURSOR; -#line 476 "../src/parse/scanner_lex.re" +#line 471 "../src/parse/scanner_lex.re" { if (depth == 0) { @@ -1751,10 +1729,10 @@ yy267: } goto code; } -#line 1755 "src/parse/scanner_lex.cc" -yy269: +#line 1733 "src/parse/scanner_lex.cc" +yy265: ++YYCURSOR; -#line 464 "../src/parse/scanner_lex.re" +#line 459 "../src/parse/scanner_lex.re" { if (depth == 0) { @@ -1767,69 +1745,69 @@ yy269: } goto code; } -#line 1771 "src/parse/scanner_lex.cc" -yy271: +#line 1749 "src/parse/scanner_lex.cc" +yy267: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; -yy272: +yy268: if (yybm[0+yych] & 16) { - goto yy271; + goto yy267; } - if (yych <= '\n') goto yy273; - if (yych <= '\'') goto yy275; - goto yy274; -yy273: + if (yych <= '\n') goto yy269; + if (yych <= '\'') goto yy271; + goto yy270; +yy269: YYCURSOR = YYMARKER; if (yyaccept <= 1) { if (yyaccept == 0) { - goto yy264; + goto yy260; } else { - goto yy262; + goto yy258; } } else { - goto yy281; + goto yy277; } -yy274: +yy270: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; - if (yych == '\n') goto yy273; - goto yy271; -yy275: + if (yych == '\n') goto yy269; + goto yy267; +yy271: ++YYCURSOR; -#line 534 "../src/parse/scanner_lex.re" +#line 529 "../src/parse/scanner_lex.re" { goto code; } -#line 1806 "src/parse/scanner_lex.cc" -yy277: +#line 1784 "src/parse/scanner_lex.cc" +yy273: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; -yy278: +yy274: if (yybm[0+yych] & 32) { - goto yy277; + goto yy273; } - if (yych <= '\n') goto yy273; - if (yych <= '"') goto yy275; + if (yych <= '\n') goto yy269; + if (yych <= '"') goto yy271; ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; - if (yych == '\n') goto yy273; - goto yy277; -yy280: + if (yych == '\n') goto yy269; + goto yy273; +yy276: yyaccept = 2; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); if (yych <= 0x1F) { - if (yych == '\t') goto yy302; + if (yych == '\t') goto yy298; } else { - if (yych <= ' ') goto yy302; - if (yych == '#') goto yy283; + if (yych <= ' ') goto yy298; + if (yych == '#') goto yy279; } -yy281: +yy277: YYCURSOR = YYCTXMARKER; -#line 491 "../src/parse/scanner_lex.re" +#line 486 "../src/parse/scanner_lex.re" { if (depth == 0) { @@ -1843,123 +1821,123 @@ yy281: cline++; goto code; } -#line 1847 "src/parse/scanner_lex.cc" -yy282: +#line 1825 "src/parse/scanner_lex.cc" +yy278: yych = (YYCTYPE)*++YYCURSOR; - goto yy281; -yy283: + goto yy277; +yy279: ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 5) YYFILL(5); yych = (YYCTYPE)*YYCURSOR; if (yybm[0+yych] & 64) { - goto yy283; + goto yy279; } - if (yych != 'l') goto yy273; + if (yych != 'l') goto yy269; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'i') goto yy273; + if (yych != 'i') goto yy269; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'n') goto yy273; + if (yych != 'n') goto yy269; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'e') goto yy273; + if (yych != 'e') goto yy269; yych = (YYCTYPE)*++YYCURSOR; - if (yych <= '0') goto yy290; - if (yych <= '9') goto yy273; - goto yy290; -yy289: + if (yych <= '0') goto yy286; + if (yych <= '9') goto yy269; + goto yy286; +yy285: YYCTXMARKER = YYCURSOR + 1; ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; -yy290: +yy286: if (yych <= 0x1F) { - if (yych == '\t') goto yy289; - goto yy273; + if (yych == '\t') goto yy285; + goto yy269; } else { - if (yych <= ' ') goto yy289; - if (yych <= '0') goto yy273; - if (yych >= ':') goto yy273; + if (yych <= ' ') goto yy285; + if (yych <= '0') goto yy269; + if (yych >= ':') goto yy269; } -yy291: +yy287: ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = (YYCTYPE)*YYCURSOR; if (yybm[0+yych] & 128) { - goto yy291; + goto yy287; } if (yych <= '\f') { - if (yych <= 0x08) goto yy273; - if (yych <= '\t') goto yy293; - if (yych <= '\n') goto yy295; - goto yy273; + if (yych <= 0x08) goto yy269; + if (yych <= '\t') goto yy289; + if (yych <= '\n') goto yy291; + goto yy269; } else { - if (yych <= '\r') goto yy297; - if (yych != ' ') goto yy273; + if (yych <= '\r') goto yy293; + if (yych != ' ') goto yy269; } -yy293: +yy289: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; if (yych <= 0x1F) { - if (yych == '\t') goto yy293; - goto yy273; + if (yych == '\t') goto yy289; + goto yy269; } else { - if (yych <= ' ') goto yy293; - if (yych == '"') goto yy298; - goto yy273; + if (yych <= ' ') goto yy289; + if (yych == '"') goto yy294; + goto yy269; } -yy295: +yy291: ++YYCURSOR; YYCURSOR = YYCTXMARKER; -#line 487 "../src/parse/scanner_lex.re" +#line 482 "../src/parse/scanner_lex.re" { set_sourceline (); goto code; } -#line 1919 "src/parse/scanner_lex.cc" -yy297: +#line 1897 "src/parse/scanner_lex.cc" +yy293: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '\n') goto yy295; - goto yy273; -yy298: + if (yych == '\n') goto yy291; + goto yy269; +yy294: ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3); yych = (YYCTYPE)*YYCURSOR; if (yych <= '!') { - if (yych == '\n') goto yy273; - goto yy298; + if (yych == '\n') goto yy269; + goto yy294; } else { - if (yych <= '"') goto yy301; - if (yych != '\\') goto yy298; + if (yych <= '"') goto yy297; + if (yych != '\\') goto yy294; } ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; - if (yych == '\n') goto yy273; - goto yy298; -yy301: + if (yych == '\n') goto yy269; + goto yy294; +yy297: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '\n') goto yy295; - if (yych == '\r') goto yy297; - goto yy273; -yy302: + if (yych == '\n') goto yy291; + if (yych == '\r') goto yy293; + goto yy269; +yy298: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; if (yych <= 0x1F) { - if (yych == '\t') goto yy302; - goto yy273; + if (yych == '\t') goto yy298; + goto yy269; } else { - if (yych <= ' ') goto yy302; - if (yych == '#') goto yy283; - goto yy273; + if (yych <= ' ') goto yy298; + if (yych == '#') goto yy279; + goto yy269; } } -#line 540 "../src/parse/scanner_lex.re" +#line 535 "../src/parse/scanner_lex.re" comment: -#line 1963 "src/parse/scanner_lex.cc" +#line 1941 "src/parse/scanner_lex.cc" { YYCTYPE yych; static const unsigned char yybm[] = { @@ -1999,14 +1977,14 @@ comment: if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = (YYCTYPE)*YYCURSOR; if (yych <= ')') { - if (yych == '\n') goto yy308; + if (yych == '\n') goto yy304; } else { - if (yych <= '*') goto yy310; - if (yych == '/') goto yy311; + if (yych <= '*') goto yy306; + if (yych == '/') goto yy307; } ++YYCURSOR; -yy307: -#line 572 "../src/parse/scanner_lex.re" +yy303: +#line 567 "../src/parse/scanner_lex.re" { if (cur == eof) { @@ -2014,15 +1992,15 @@ yy307: } goto comment; } -#line 2018 "src/parse/scanner_lex.cc" -yy308: +#line 1996 "src/parse/scanner_lex.cc" +yy304: yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); if (yybm[0+yych] & 32) { - goto yy316; + goto yy312; } - if (yych == '#') goto yy319; -yy309: -#line 563 "../src/parse/scanner_lex.re" + if (yych == '#') goto yy315; +yy305: +#line 558 "../src/parse/scanner_lex.re" { if (cur == eof) { @@ -2032,25 +2010,25 @@ yy309: cline++; goto comment; } -#line 2036 "src/parse/scanner_lex.cc" -yy310: +#line 2014 "src/parse/scanner_lex.cc" +yy306: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '/') goto yy314; - goto yy307; -yy311: + if (yych == '/') goto yy310; + goto yy303; +yy307: yych = (YYCTYPE)*++YYCURSOR; - if (yych != '*') goto yy307; + if (yych != '*') goto yy303; ++YYCURSOR; -#line 554 "../src/parse/scanner_lex.re" +#line 549 "../src/parse/scanner_lex.re" { ++depth; fatal("ambiguous /* found"); goto comment; } -#line 2051 "src/parse/scanner_lex.cc" -yy314: +#line 2029 "src/parse/scanner_lex.cc" +yy310: ++YYCURSOR; -#line 544 "../src/parse/scanner_lex.re" +#line 539 "../src/parse/scanner_lex.re" { if (--depth == 0) { @@ -2061,136 +2039,136 @@ yy314: goto comment; } } -#line 2065 "src/parse/scanner_lex.cc" -yy316: +#line 2043 "src/parse/scanner_lex.cc" +yy312: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; if (yybm[0+yych] & 32) { - goto yy316; + goto yy312; } - if (yych == '#') goto yy319; -yy318: + if (yych == '#') goto yy315; +yy314: YYCURSOR = YYMARKER; - goto yy309; -yy319: + goto yy305; +yy315: ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 5) YYFILL(5); yych = (YYCTYPE)*YYCURSOR; if (yych <= 0x1F) { - if (yych == '\t') goto yy319; - goto yy318; + if (yych == '\t') goto yy315; + goto yy314; } else { - if (yych <= ' ') goto yy319; - if (yych != 'l') goto yy318; + if (yych <= ' ') goto yy315; + if (yych != 'l') goto yy314; } yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'i') goto yy318; + if (yych != 'i') goto yy314; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'n') goto yy318; + if (yych != 'n') goto yy314; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'e') goto yy318; + if (yych != 'e') goto yy314; yych = (YYCTYPE)*++YYCURSOR; - if (yych <= '0') goto yy326; - if (yych <= '9') goto yy318; - goto yy326; -yy325: + if (yych <= '0') goto yy322; + if (yych <= '9') goto yy314; + goto yy322; +yy321: YYCTXMARKER = YYCURSOR + 1; ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; -yy326: +yy322: if (yych <= 0x1F) { - if (yych == '\t') goto yy325; - goto yy318; + if (yych == '\t') goto yy321; + goto yy314; } else { - if (yych <= ' ') goto yy325; - if (yych <= '0') goto yy318; - if (yych >= ':') goto yy318; + if (yych <= ' ') goto yy321; + if (yych <= '0') goto yy314; + if (yych >= ':') goto yy314; } -yy327: +yy323: ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = (YYCTYPE)*YYCURSOR; if (yybm[0+yych] & 64) { - goto yy327; + goto yy323; } if (yych <= '\f') { - if (yych <= 0x08) goto yy318; - if (yych <= '\t') goto yy329; - if (yych <= '\n') goto yy331; - goto yy318; + if (yych <= 0x08) goto yy314; + if (yych <= '\t') goto yy325; + if (yych <= '\n') goto yy327; + goto yy314; } else { - if (yych <= '\r') goto yy333; - if (yych != ' ') goto yy318; + if (yych <= '\r') goto yy329; + if (yych != ' ') goto yy314; } -yy329: +yy325: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; if (yych <= 0x1F) { - if (yych == '\t') goto yy329; - goto yy318; + if (yych == '\t') goto yy325; + goto yy314; } else { - if (yych <= ' ') goto yy329; - if (yych == '"') goto yy334; - goto yy318; + if (yych <= ' ') goto yy325; + if (yych == '"') goto yy330; + goto yy314; } -yy331: +yy327: ++YYCURSOR; YYCURSOR = YYCTXMARKER; -#line 559 "../src/parse/scanner_lex.re" +#line 554 "../src/parse/scanner_lex.re" { set_sourceline (); goto comment; } -#line 2148 "src/parse/scanner_lex.cc" -yy333: +#line 2126 "src/parse/scanner_lex.cc" +yy329: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '\n') goto yy331; - goto yy318; -yy334: + if (yych == '\n') goto yy327; + goto yy314; +yy330: ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3); yych = (YYCTYPE)*YYCURSOR; if (yybm[0+yych] & 128) { - goto yy334; + goto yy330; } - if (yych <= '\n') goto yy318; - if (yych <= '"') goto yy337; + if (yych <= '\n') goto yy314; + if (yych <= '"') goto yy333; ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; - if (yych == '\n') goto yy318; - goto yy334; -yy337: + if (yych == '\n') goto yy314; + goto yy330; +yy333: ++YYCURSOR; - if ((yych = (YYCTYPE)*YYCURSOR) == '\n') goto yy331; - if (yych == '\r') goto yy333; - goto yy318; + if ((yych = (YYCTYPE)*YYCURSOR) == '\n') goto yy327; + if (yych == '\r') goto yy329; + goto yy314; } -#line 579 "../src/parse/scanner_lex.re" +#line 574 "../src/parse/scanner_lex.re" nextLine: -#line 2178 "src/parse/scanner_lex.cc" +#line 2156 "src/parse/scanner_lex.cc" { YYCTYPE yych; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; - if (yych == '\n') goto yy342; + if (yych == '\n') goto yy338; ++YYCURSOR; -#line 590 "../src/parse/scanner_lex.re" +#line 585 "../src/parse/scanner_lex.re" { if(cur == eof) { return 0; } goto nextLine; } -#line 2191 "src/parse/scanner_lex.cc" -yy342: +#line 2169 "src/parse/scanner_lex.cc" +yy338: ++YYCURSOR; -#line 583 "../src/parse/scanner_lex.re" +#line 578 "../src/parse/scanner_lex.re" { if(cur == eof) { return 0; } @@ -2198,14 +2176,14 @@ yy342: cline++; goto scan; } -#line 2202 "src/parse/scanner_lex.cc" +#line 2180 "src/parse/scanner_lex.cc" } -#line 595 "../src/parse/scanner_lex.re" +#line 590 "../src/parse/scanner_lex.re" config: -#line 2209 "src/parse/scanner_lex.cc" +#line 2187 "src/parse/scanner_lex.cc" { YYCTYPE yych; static const unsigned char yybm[] = { @@ -2245,62 +2223,62 @@ config: if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = (YYCTYPE)*YYCURSOR; if (yych <= 0x1F) { - if (yych == '\t') goto yy348; + if (yych == '\t') goto yy344; } else { - if (yych <= ' ') goto yy348; - if (yych == '=') goto yy350; + if (yych <= ' ') goto yy344; + if (yych == '=') goto yy346; } ++YYCURSOR; -#line 606 "../src/parse/scanner_lex.re" +#line 601 "../src/parse/scanner_lex.re" { fatal("missing '='"); } -#line 2259 "src/parse/scanner_lex.cc" -yy348: +#line 2237 "src/parse/scanner_lex.cc" +yy344: ++YYCURSOR; yych = (YYCTYPE)*YYCURSOR; - goto yy355; -yy349: -#line 599 "../src/parse/scanner_lex.re" + goto yy351; +yy345: +#line 594 "../src/parse/scanner_lex.re" { goto config; } -#line 2269 "src/parse/scanner_lex.cc" -yy350: +#line 2247 "src/parse/scanner_lex.cc" +yy346: ++YYCURSOR; yych = (YYCTYPE)*YYCURSOR; - goto yy353; -yy351: -#line 602 "../src/parse/scanner_lex.re" + goto yy349; +yy347: +#line 597 "../src/parse/scanner_lex.re" { lexer_state = LEX_CONFIG_VALUE; return '='; } -#line 2280 "src/parse/scanner_lex.cc" -yy352: +#line 2258 "src/parse/scanner_lex.cc" +yy348: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; -yy353: +yy349: if (yybm[0+yych] & 128) { - goto yy352; + goto yy348; } - goto yy351; -yy354: + goto yy347; +yy350: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; -yy355: - if (yych == '\t') goto yy354; - if (yych == ' ') goto yy354; - goto yy349; +yy351: + if (yych == '\t') goto yy350; + if (yych == ' ') goto yy350; + goto yy345; } -#line 609 "../src/parse/scanner_lex.re" +#line 604 "../src/parse/scanner_lex.re" value: -#line 2304 "src/parse/scanner_lex.cc" +#line 2282 "src/parse/scanner_lex.cc" { YYCTYPE yych; static const unsigned char yybm[] = { @@ -2341,46 +2319,46 @@ value: yych = (YYCTYPE)*YYCURSOR; if (yych <= '&') { if (yych <= '\r') { - if (yych <= 0x08) goto yy364; - if (yych <= '\n') goto yy358; - if (yych <= '\f') goto yy364; + if (yych <= 0x08) goto yy360; + if (yych <= '\n') goto yy354; + if (yych <= '\f') goto yy360; } else { if (yych <= ' ') { - if (yych <= 0x1F) goto yy364; + if (yych <= 0x1F) goto yy360; } else { - if (yych == '"') goto yy366; - goto yy364; + if (yych == '"') goto yy362; + goto yy360; } } } else { if (yych <= '/') { - if (yych <= '\'') goto yy368; - if (yych == '-') goto yy361; - goto yy364; + if (yych <= '\'') goto yy364; + if (yych == '-') goto yy357; + goto yy360; } else { if (yych <= '9') { - if (yych <= '0') goto yy359; - goto yy362; + if (yych <= '0') goto yy355; + goto yy358; } else { - if (yych != ';') goto yy364; + if (yych != ';') goto yy360; } } } -yy358: -#line 621 "../src/parse/scanner_lex.re" +yy354: +#line 616 "../src/parse/scanner_lex.re" { yylval.str = new std::string (tok, tok_len ()); lexer_state = LEX_NORMAL; return VALUE; } -#line 2377 "src/parse/scanner_lex.cc" -yy359: +#line 2355 "src/parse/scanner_lex.cc" +yy355: ++YYCURSOR; if (yybm[0+(yych = (YYCTYPE)*YYCURSOR)] & 8) { - goto yy364; + goto yy360; } -yy360: -#line 613 "../src/parse/scanner_lex.re" +yy356: +#line 608 "../src/parse/scanner_lex.re" { if (!s_to_i32_unsafe (tok, cur, yylval.number)) { @@ -2389,150 +2367,150 @@ yy360: lexer_state = LEX_NORMAL; return NUMBER; } -#line 2393 "src/parse/scanner_lex.cc" -yy361: +#line 2371 "src/parse/scanner_lex.cc" +yy357: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= '0') goto yy365; - if (yych >= ':') goto yy365; -yy362: + if (yych <= '0') goto yy361; + if (yych >= ':') goto yy361; +yy358: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; if (yybm[0+yych] & 4) { - goto yy362; + goto yy358; } if (yych <= '\r') { - if (yych <= 0x08) goto yy364; - if (yych <= '\n') goto yy360; - if (yych >= '\r') goto yy360; + if (yych <= 0x08) goto yy360; + if (yych <= '\n') goto yy356; + if (yych >= '\r') goto yy356; } else { if (yych <= ' ') { - if (yych >= ' ') goto yy360; + if (yych >= ' ') goto yy356; } else { - if (yych == ';') goto yy360; + if (yych == ';') goto yy356; } } -yy364: +yy360: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; -yy365: +yy361: if (yybm[0+yych] & 8) { - goto yy364; + goto yy360; } - goto yy358; -yy366: + goto yy354; +yy362: YYMARKER = ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; if (yybm[0+yych] & 16) { - goto yy366; + goto yy362; } if (yych <= ' ') { - if (yych == '\n') goto yy358; - goto yy376; + if (yych == '\n') goto yy354; + goto yy372; } else { - if (yych <= '"') goto yy364; - if (yych <= ';') goto yy376; - goto yy378; + if (yych <= '"') goto yy360; + if (yych <= ';') goto yy372; + goto yy374; } -yy368: +yy364: YYMARKER = ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; if (yybm[0+yych] & 32) { - goto yy368; + goto yy364; } if (yych <= ' ') { - if (yych == '\n') goto yy358; + if (yych == '\n') goto yy354; } else { - if (yych <= '\'') goto yy364; - if (yych >= '<') goto yy373; + if (yych <= '\'') goto yy360; + if (yych >= '<') goto yy369; } -yy370: +yy366: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; if (yybm[0+yych] & 64) { - goto yy370; + goto yy366; } - if (yych <= '\n') goto yy372; - if (yych <= '\'') goto yy374; - goto yy375; -yy372: + if (yych <= '\n') goto yy368; + if (yych <= '\'') goto yy370; + goto yy371; +yy368: YYCURSOR = YYMARKER; - goto yy358; -yy373: + goto yy354; +yy369: YYMARKER = ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; if (yych <= '\r') { if (yych <= '\t') { - if (yych <= 0x08) goto yy368; - goto yy370; + if (yych <= 0x08) goto yy364; + goto yy366; } else { - if (yych <= '\n') goto yy358; - if (yych <= '\f') goto yy368; - goto yy370; + if (yych <= '\n') goto yy354; + if (yych <= '\f') goto yy364; + goto yy366; } } else { if (yych <= ' ') { - if (yych <= 0x1F) goto yy368; - goto yy370; + if (yych <= 0x1F) goto yy364; + goto yy366; } else { - if (yych == ';') goto yy370; - goto yy368; + if (yych == ';') goto yy366; + goto yy364; } } -yy374: +yy370: yych = (YYCTYPE)*++YYCURSOR; - goto yy358; -yy375: + goto yy354; +yy371: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; - if (yych == '\n') goto yy372; - goto yy370; -yy376: + if (yych == '\n') goto yy368; + goto yy366; +yy372: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; if (yybm[0+yych] & 128) { - goto yy376; + goto yy372; } - if (yych <= '\n') goto yy372; - if (yych <= '"') goto yy374; - goto yy379; -yy378: + if (yych <= '\n') goto yy368; + if (yych <= '"') goto yy370; + goto yy375; +yy374: YYMARKER = ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; if (yych <= '\r') { if (yych <= '\t') { - if (yych <= 0x08) goto yy366; - goto yy376; + if (yych <= 0x08) goto yy362; + goto yy372; } else { - if (yych <= '\n') goto yy358; - if (yych <= '\f') goto yy366; - goto yy376; + if (yych <= '\n') goto yy354; + if (yych <= '\f') goto yy362; + goto yy372; } } else { if (yych <= ' ') { - if (yych <= 0x1F) goto yy366; - goto yy376; + if (yych <= 0x1F) goto yy362; + goto yy372; } else { - if (yych == ';') goto yy376; - goto yy366; + if (yych == ';') goto yy372; + goto yy362; } } -yy379: +yy375: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; - if (yych == '\n') goto yy372; - goto yy376; + if (yych == '\n') goto yy368; + goto yy372; } -#line 626 "../src/parse/scanner_lex.re" +#line 621 "../src/parse/scanner_lex.re" } @@ -2555,7 +2533,7 @@ void Scanner::set_sourceline () sourceline: tok = cur; -#line 2559 "src/parse/scanner_lex.cc" +#line 2537 "src/parse/scanner_lex.cc" { YYCTYPE yych; static const unsigned char yybm[] = { @@ -2595,23 +2573,23 @@ sourceline: if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = (YYCTYPE)*YYCURSOR; if (yych <= '!') { - if (yych == '\n') goto yy384; + if (yych == '\n') goto yy380; } else { - if (yych <= '"') goto yy386; - if (yych <= '0') goto yy382; - if (yych <= '9') goto yy387; + if (yych <= '"') goto yy382; + if (yych <= '0') goto yy378; + if (yych <= '9') goto yy383; } -yy382: +yy378: ++YYCURSOR; -yy383: -#line 671 "../src/parse/scanner_lex.re" +yy379: +#line 666 "../src/parse/scanner_lex.re" { goto sourceline; } -#line 2612 "src/parse/scanner_lex.cc" -yy384: +#line 2590 "src/parse/scanner_lex.cc" +yy380: ++YYCURSOR; -#line 659 "../src/parse/scanner_lex.re" +#line 654 "../src/parse/scanner_lex.re" { if (cur == eof) { @@ -2624,17 +2602,17 @@ yy384: tok = cur; return; } -#line 2628 "src/parse/scanner_lex.cc" -yy386: +#line 2606 "src/parse/scanner_lex.cc" +yy382: yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych == '\n') goto yy383; - goto yy392; -yy387: + if (yych == '\n') goto yy379; + goto yy388; +yy383: ++YYCURSOR; yych = (YYCTYPE)*YYCURSOR; - goto yy390; -yy388: -#line 648 "../src/parse/scanner_lex.re" + goto yy386; +yy384: +#line 643 "../src/parse/scanner_lex.re" { if (!s_to_u32_unsafe (tok, cur, cline)) { @@ -2642,46 +2620,46 @@ yy388: } goto sourceline; } -#line 2646 "src/parse/scanner_lex.cc" -yy389: +#line 2624 "src/parse/scanner_lex.cc" +yy385: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; -yy390: +yy386: if (yybm[0+yych] & 64) { - goto yy389; + goto yy385; } - goto yy388; -yy391: + goto yy384; +yy387: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; -yy392: +yy388: if (yybm[0+yych] & 128) { - goto yy391; + goto yy387; } - if (yych <= '\n') goto yy393; - if (yych <= '"') goto yy395; - goto yy394; -yy393: + if (yych <= '\n') goto yy389; + if (yych <= '"') goto yy391; + goto yy390; +yy389: YYCURSOR = YYMARKER; - goto yy383; -yy394: + goto yy379; +yy390: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; - if (yych == '\n') goto yy393; - goto yy391; -yy395: + if (yych == '\n') goto yy389; + goto yy387; +yy391: ++YYCURSOR; -#line 655 "../src/parse/scanner_lex.re" +#line 650 "../src/parse/scanner_lex.re" { escape (in.file_name, std::string (tok + 1, tok_len () - 2)); // -2 to omit quotes goto sourceline; } -#line 2683 "src/parse/scanner_lex.cc" +#line 2661 "src/parse/scanner_lex.cc" } -#line 674 "../src/parse/scanner_lex.re" +#line 669 "../src/parse/scanner_lex.re" } diff --git a/re2c/src/parse/scanner_lex.re b/re2c/src/parse/scanner_lex.re index 91bb7bba..fed503ce 100644 --- a/re2c/src/parse/scanner_lex.re +++ b/re2c/src/parse/scanner_lex.re @@ -325,11 +325,6 @@ start: return CLOSE; } - "{0,}" { - yylval.op = '*'; - return CLOSE; - } - "{" [0-9]+ "}" { if (!s_to_u32_unsafe (tok + 1, cur - 1, yylval.extop.min)) { diff --git a/re2c/test/bug1390174.c b/re2c/test/bug1390174.c index 354515c1..915cdc01 100644 --- a/re2c/test/bug1390174.c +++ b/re2c/test/bug1390174.c @@ -21,35 +21,35 @@ const char *q; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; switch (yych) { - case '\n': goto yy4; + case '\n': goto yy2; case 'A': - case 'a': goto yy2; + case 'a': goto yy4; default: goto yy6; } yy2: + ++YYCURSOR; +yy3: +#line 18 "bug1390174.re" + {RET(1);} +#line 35 "" +yy4: yych = *(YYMARKER = ++YYCURSOR); switch (yych) { case '\n': goto yy7; case 'A': case 'a': goto yy8; - default: goto yy3; + default: goto yy5; } -yy3: +yy5: #line 19 "bug1390174.re" {RET(0);} -#line 41 "" -yy4: - ++YYCURSOR; -yy5: -#line 18 "bug1390174.re" - {RET(1);} #line 47 "" yy6: yych = *++YYCURSOR; - goto yy3; + goto yy5; yy7: yych = *++YYCURSOR; - goto yy5; + goto yy3; yy8: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); @@ -62,7 +62,7 @@ yy8: } yy10: YYCURSOR = YYMARKER; - goto yy3; + goto yy5; } #line 20 "bug1390174.re" diff --git a/re2c/test/repeater2.c b/re2c/test/repeater2.c new file mode 100644 index 00000000..4b702297 --- /dev/null +++ b/re2c/test/repeater2.c @@ -0,0 +1,373 @@ +re2c: warning: line 2: rule matches empty string [-Wmatch-empty-string] +re2c: warning: line 7: naked default case (stray code units: [0x00-`][b-0xFF]), better add default rule * [-Wnaked-default] +re2c: warning: line 11: naked default case (stray code units: [0x00-`][a][b-0xFF]), better add default rule * [-Wnaked-default] +re2c: warning: line 14: rule matches empty string [-Wmatch-empty-string] +re2c: warning: line 19: naked default case (stray code units: [0x00-`][b-0xFF]), better add default rule * [-Wnaked-default] +re2c: warning: line 23: naked default case (stray code units: [0x00-`][a][b-0xFF]), better add default rule * [-Wnaked-default] +re2c: warning: line 26: rule matches empty string [-Wmatch-empty-string] +re2c: warning: line 30: rule matches empty string [-Wmatch-empty-string] +re2c: warning: line 35: naked default case (stray code units: [0x00-`][b-0xFF]), better add default rule * [-Wnaked-default] +re2c: warning: line 39: naked default case (stray code units: [0x00-`][b-0xFF]), better add default rule * [-Wnaked-default] +re2c: warning: line 43: naked default case (stray code units: [0x00-`][a][b-0xFF]), better add default rule * [-Wnaked-default] +re2c: warning: line 47: naked default case (stray code units: [0x00-`][a][b-0xFF]), better add default rule * [-Wnaked-default] +re2c: warning: line 51: naked default case (stray code units: [0x00-`][a][b-0xFF]), better add default rule * [-Wnaked-default] +/* Generated by re2c */ +#line 1 "repeater2.re" + +#line 5 "" +{ + YYCTYPE yych; +#line 2 "repeater2.re" + {} +#line 10 "" +} +#line 3 "repeater2.re" + + + +#line 16 "" +{ + YYCTYPE yych; + if (YYLIMIT <= YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + switch (yych) { + case 'a': goto yy6; + default: goto yy5; + } +yy5: +yy6: + ++YYCURSOR; +#line 6 "repeater2.re" + {} +#line 30 "" +} +#line 7 "repeater2.re" + + + +#line 36 "" +{ + YYCTYPE yych; + if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3); + yych = *YYCURSOR; + switch (yych) { + case 'a': goto yy11; + default: goto yy10; + } +yy10: +yy11: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy12; + default: goto yy10; + } +yy12: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy13; + default: goto yy10; + } +yy13: + ++YYCURSOR; +#line 10 "repeater2.re" + {} +#line 62 "" +} +#line 11 "repeater2.re" + + + +#line 68 "" +{ + YYCTYPE yych; + goto yy15; +yy16: + ++YYCURSOR; +yy15: + if (YYLIMIT <= YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + switch (yych) { + case 'a': goto yy16; + default: goto yy18; + } +yy18: +#line 14 "repeater2.re" + {} +#line 84 "" +} +#line 15 "repeater2.re" + + + +#line 90 "" +{ + YYCTYPE yych; + if (YYLIMIT <= YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + switch (yych) { + case 'a': goto yy22; + default: goto yy21; + } +yy21: +yy22: + ++YYCURSOR; + if (YYLIMIT <= YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + switch (yych) { + case 'a': goto yy22; + default: goto yy24; + } +yy24: +#line 18 "repeater2.re" + {} +#line 111 "" +} +#line 19 "repeater2.re" + + + +#line 117 "" +{ + YYCTYPE yych; + if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3); + yych = *YYCURSOR; + switch (yych) { + case 'a': goto yy28; + default: goto yy27; + } +yy27: +yy28: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy29; + default: goto yy27; + } +yy29: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy30; + default: goto yy27; + } +yy30: + ++YYCURSOR; + if (YYLIMIT <= YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + switch (yych) { + case 'a': goto yy30; + default: goto yy32; + } +yy32: +#line 22 "repeater2.re" + {} +#line 150 "" +} +#line 23 "repeater2.re" + + + +#line 156 "" +{ + YYCTYPE yych; +#line 26 "repeater2.re" + {} +#line 161 "" +} +#line 27 "repeater2.re" + + + +#line 167 "" +{ + YYCTYPE yych; + if (YYLIMIT <= YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + switch (yych) { + case 'a': goto yy39; + default: goto yy38; + } +yy38: +#line 30 "repeater2.re" + {} +#line 179 "" +yy39: + ++YYCURSOR; + yych = *YYCURSOR; + goto yy38; +} +#line 31 "repeater2.re" + + + +#line 189 "" +{ + YYCTYPE yych; + if (YYLIMIT <= YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + switch (yych) { + case 'a': goto yy43; + default: goto yy42; + } +yy42: +yy43: + ++YYCURSOR; +#line 34 "repeater2.re" + {} +#line 203 "" +} +#line 35 "repeater2.re" + + + +#line 209 "" +{ + YYCTYPE yych; + if (YYLIMIT <= YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + switch (yych) { + case 'a': goto yy48; + default: goto yy47; + } +yy47: +yy48: + ++YYCURSOR; +#line 38 "repeater2.re" + {} +#line 223 "" +} +#line 39 "repeater2.re" + + + +#line 229 "" +{ + YYCTYPE yych; + if ((YYLIMIT - YYCURSOR) < 5) YYFILL(5); + yych = *YYCURSOR; + switch (yych) { + case 'a': goto yy53; + default: goto yy52; + } +yy52: +yy53: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy54; + default: goto yy52; + } +yy54: + ++YYCURSOR; + switch ((yych = *YYCURSOR)) { + case 'a': goto yy56; + default: goto yy55; + } +yy55: +#line 42 "repeater2.re" + {} +#line 254 "" +yy56: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy57; + default: goto yy55; + } +yy57: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy58; + default: goto yy55; + } +yy58: + ++YYCURSOR; + yych = *YYCURSOR; + goto yy55; +} +#line 43 "repeater2.re" + + + +#line 276 "" +{ + YYCTYPE yych; + if ((YYLIMIT - YYCURSOR) < 5) YYFILL(5); + yych = *YYCURSOR; + switch (yych) { + case 'a': goto yy62; + default: goto yy61; + } +yy61: +yy62: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy63; + default: goto yy61; + } +yy63: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy64; + default: goto yy61; + } +yy64: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy65; + default: goto yy61; + } +yy65: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy66; + default: goto yy61; + } +yy66: + ++YYCURSOR; +#line 46 "repeater2.re" + {} +#line 314 "" +} +#line 47 "repeater2.re" + + + +#line 320 "" +{ + YYCTYPE yych; + if ((YYLIMIT - YYCURSOR) < 5) YYFILL(5); + yych = *YYCURSOR; + switch (yych) { + case 'a': goto yy71; + default: goto yy70; + } +yy70: +yy71: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy72; + default: goto yy70; + } +yy72: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy73; + default: goto yy70; + } +yy73: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy74; + default: goto yy70; + } +yy74: + yych = *++YYCURSOR; + switch (yych) { + case 'a': goto yy75; + default: goto yy70; + } +yy75: + ++YYCURSOR; +#line 50 "repeater2.re" + {} +#line 358 "" +} +#line 51 "repeater2.re" + diff --git a/re2c/test/repeater2.re b/re2c/test/repeater2.re new file mode 100644 index 00000000..fd244bd5 --- /dev/null +++ b/re2c/test/repeater2.re @@ -0,0 +1,51 @@ +/*!re2c + "a"{0} {} +*/ + +/*!re2c + "a"{1} {} +*/ + +/*!re2c + "a"{3} {} +*/ + +/*!re2c + "a"{0,} {} +*/ + +/*!re2c + "a"{1,} {} +*/ + +/*!re2c + "a"{3,} {} +*/ + +/*!re2c + "a"{0,0} {} +*/ + +/*!re2c + "a"{0,1} {} +*/ + +/*!re2c + "a"{1,0} {} +*/ + +/*!re2c + "a"{1,1} {} +*/ + +/*!re2c + "a"{2,5} {} +*/ + +/*!re2c + "a"{5,2} {} +*/ + +/*!re2c + "a"{5,5} {} +*/ diff --git a/re2c/test/repeater_overflow.c b/re2c/test/repeater_overflow.c new file mode 100644 index 00000000..026ef268 --- /dev/null +++ b/re2c/test/repeater_overflow.c @@ -0,0 +1 @@ +re2c: error: line 2, column 5: repetition count overflow diff --git a/re2c/test/repeater_overflow.re b/re2c/test/repeater_overflow.re new file mode 100644 index 00000000..6b8d6fcc --- /dev/null +++ b/re2c/test/repeater_overflow.re @@ -0,0 +1,3 @@ +/*!re2c + "a"{12345678901} {} +*/ -- 2.40.0