From: Ulya Trofimovich Date: Sun, 23 Aug 2015 10:34:13 +0000 (+0100) Subject: Parse configuration strings in the same way as character strings and classes. X-Git-Tag: 0.15~101 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7bed1b9631475bd58caea306e8f1e69e93f0ee07;p=re2c Parse configuration strings in the same way as character strings and classes. re2c allows configuration strings to contain escape sequencs as long as the escaped code points fit into 1-byte range. Finally both 'Scanner::unescape' functions can be removed along with a whole bunch of [-Wsign-conversion] warnings. :) --- diff --git a/re2c/Makefile.am b/re2c/Makefile.am index a561c74d..347d0e90 100644 --- a/re2c/Makefile.am +++ b/re2c/Makefile.am @@ -67,7 +67,6 @@ SRC_HDR = \ src/util/s_to_n32_unsafe.h \ src/util/smart_ptr.h \ src/util/static_assert.h \ - src/util/substr.h \ src/util/u32lim.h \ src/util/uniq_vector.h \ src/util/wrap_iterator.h diff --git a/re2c/bootstrap/src/parse/scanner_lex.cc b/re2c/bootstrap/src/parse/scanner_lex.cc index 2c0a351b..c3fe4175 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 Sat Aug 22 15:45:34 2015 */ +/* Generated by re2c 0.14.3 on Sun Aug 23 10:47:18 2015 */ #line 1 "../src/parse/scanner_lex.re" #include #include @@ -32,7 +32,7 @@ namespace re2c #line 32 "../src/parse/scanner_lex.re" -#line 53 "../src/parse/scanner_lex.re" +#line 56 "../src/parse/scanner_lex.re" Scanner::ParseMode Scanner::echo() @@ -107,7 +107,7 @@ echo: } } ++YYCURSOR; -#line 196 "../src/parse/scanner_lex.re" +#line 199 "../src/parse/scanner_lex.re" { if (!(ignore_eoc || DFlag || flag_skeleton)) { @@ -123,7 +123,7 @@ echo: yy4: ++YYCURSOR; yy5: -#line 207 "../src/parse/scanner_lex.re" +#line 210 "../src/parse/scanner_lex.re" { goto echo; } @@ -136,7 +136,7 @@ yy6: } if (yych == '#') goto yy91; yy7: -#line 183 "../src/parse/scanner_lex.re" +#line 186 "../src/parse/scanner_lex.re" { if (ignore_eoc) { @@ -234,7 +234,7 @@ yy21: yych = (YYCTYPE)*++YYCURSOR; if (yych != 'c') goto yy12; ++YYCURSOR; -#line 84 "../src/parse/scanner_lex.re" +#line 87 "../src/parse/scanner_lex.re" { if (rFlag) { @@ -253,7 +253,7 @@ yy31: if (yych != 'c') goto yy12; yy32: ++YYCURSOR; -#line 69 "../src/parse/scanner_lex.re" +#line 72 "../src/parse/scanner_lex.re" { if (rFlag) { @@ -284,7 +284,7 @@ yy34: yych = (YYCTYPE)*++YYCURSOR; if (yych != 'c') goto yy12; ++YYCURSOR; -#line 96 "../src/parse/scanner_lex.re" +#line 99 "../src/parse/scanner_lex.re" { if (!rFlag) { @@ -314,7 +314,7 @@ yy42: yych = (YYCTYPE)*++YYCURSOR; if (yych != 'c') goto yy12; ++YYCURSOR; -#line 110 "../src/parse/scanner_lex.re" +#line 113 "../src/parse/scanner_lex.re" { if (!DFlag) { @@ -349,7 +349,7 @@ yy50: yych = (YYCTYPE)*++YYCURSOR; if (yych != 'c') goto yy12; ++YYCURSOR; -#line 119 "../src/parse/scanner_lex.re" +#line 122 "../src/parse/scanner_lex.re" { tok = pos = cur; out.insert_state_goto (topIndent); @@ -377,7 +377,7 @@ yy63: yych = (YYCTYPE)*++YYCURSOR; if (yych != 'c') goto yy12; ++YYCURSOR; -#line 125 "../src/parse/scanner_lex.re" +#line 128 "../src/parse/scanner_lex.re" { tok = pos = cur; ignore_eoc = true; @@ -402,7 +402,7 @@ yy74: yych = (YYCTYPE)*++YYCURSOR; if (yych != 'c') goto yy12; ++YYCURSOR; -#line 130 "../src/parse/scanner_lex.re" +#line 133 "../src/parse/scanner_lex.re" { tok = pos = cur; ignore_eoc = true; @@ -423,7 +423,7 @@ yy84: if (yych == '\n') goto yy87; if (yych == '\r') goto yy86; yy85: -#line 161 "../src/parse/scanner_lex.re" +#line 164 "../src/parse/scanner_lex.re" { if (ignore_eoc) { @@ -448,7 +448,7 @@ yy86: if (yych != '\n') goto yy12; yy87: ++YYCURSOR; -#line 143 "../src/parse/scanner_lex.re" +#line 146 "../src/parse/scanner_lex.re" { cline++; if (ignore_eoc) @@ -542,7 +542,7 @@ yy101: yy103: ++YYCURSOR; YYCURSOR = YYCTXMARKER; -#line 179 "../src/parse/scanner_lex.re" +#line 182 "../src/parse/scanner_lex.re" { set_sourceline (); goto echo; @@ -572,7 +572,7 @@ yy109: if (yych == '\r') goto yy105; goto yy12; } -#line 210 "../src/parse/scanner_lex.re" +#line 213 "../src/parse/scanner_lex.re" } @@ -580,9 +580,6 @@ int Scanner::scan() { uint32_t depth; - char quote; - bool negated_class = false; - std::vector cpoints; scan: tchar = cur - pos; tline = cline; @@ -596,7 +593,7 @@ scan: start: -#line 600 "src/parse/scanner_lex.cc" +#line 597 "src/parse/scanner_lex.cc" { YYCTYPE yych; unsigned int yyaccept = 0; @@ -656,16 +653,16 @@ start: if (yych >= '%') goto yy121; } else { if (yych <= '&') goto yy112; - if (yych <= '\'') goto yy119; - goto yy122; + if (yych <= '\'') goto yy122; + goto yy124; } } else { if (yych <= '+') { - if (yych <= '*') goto yy124; - goto yy126; + if (yych <= '*') goto yy126; + goto yy128; } else { - if (yych <= ',') goto yy122; - if (yych >= '.') goto yy128; + if (yych <= ',') goto yy124; + if (yych >= '.') goto yy130; } } } @@ -673,37 +670,37 @@ start: if (yych <= '[') { if (yych <= '<') { if (yych <= '9') { - if (yych <= '/') goto yy130; - goto yy131; - } else { - if (yych <= ':') goto yy132; - if (yych <= ';') goto yy122; + if (yych <= '/') goto yy132; goto yy133; + } else { + if (yych <= ':') goto yy134; + if (yych <= ';') goto yy124; + goto yy135; } } else { if (yych <= '?') { - if (yych <= '>') goto yy122; - goto yy126; + if (yych <= '>') goto yy124; + goto yy128; } else { if (yych <= '@') goto yy112; - if (yych <= 'Z') goto yy131; - goto yy134; + if (yych <= 'Z') goto yy133; + goto yy136; } } } else { if (yych <= 'q') { if (yych <= '^') { - if (yych <= '\\') goto yy122; + if (yych <= '\\') goto yy124; } else { - if (yych != '`') goto yy131; + if (yych != '`') goto yy133; } } else { if (yych <= 'z') { - if (yych <= 'r') goto yy136; - goto yy131; + if (yych <= 'r') goto yy138; + goto yy133; } else { - if (yych <= '{') goto yy137; - if (yych <= '|') goto yy122; + if (yych <= '{') goto yy139; + if (yych <= '|') goto yy124; } } } @@ -711,197 +708,217 @@ start: yy112: ++YYCURSOR; yy113: -#line 383 "../src/parse/scanner_lex.re" +#line 409 "../src/parse/scanner_lex.re" { fatalf("unexpected character: '%c'", *tok); goto scan; } -#line 720 "src/parse/scanner_lex.cc" +#line 717 "src/parse/scanner_lex.cc" yy114: ++YYCURSOR; yych = (YYCTYPE)*YYCURSOR; - goto yy218; + goto yy220; yy115: -#line 367 "../src/parse/scanner_lex.re" +#line 393 "../src/parse/scanner_lex.re" { goto scan; } -#line 730 "src/parse/scanner_lex.cc" +#line 727 "src/parse/scanner_lex.cc" yy116: yyaccept = 0; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); if (yych <= 0x1F) { - if (yych == '\t') goto yy196; + if (yych == '\t') goto yy198; } else { - if (yych <= ' ') goto yy196; - if (yych == '#') goto yy198; + if (yych <= ' ') goto yy198; + if (yych == '#') goto yy200; } yy117: -#line 376 "../src/parse/scanner_lex.re" +#line 402 "../src/parse/scanner_lex.re" { if (cur == eof) return 0; pos = cur; cline++; goto scan; } -#line 748 "src/parse/scanner_lex.cc" +#line 745 "src/parse/scanner_lex.cc" yy118: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '\n') goto yy195; + if (yych == '\n') goto yy197; goto yy113; yy119: ++YYCURSOR; -#line 262 "../src/parse/scanner_lex.re" - { quote = tok[0]; goto cpoints; } -#line 757 "src/parse/scanner_lex.cc" +#line 270 "../src/parse/scanner_lex.re" + { + std::vector cpoints; + lex_cpoints ('"', cpoints); + yylval.regexp = cpoint_string (cpoints, bCaseInsensitive || bCaseInverted); + return REGEXP; + } +#line 759 "src/parse/scanner_lex.cc" yy121: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '}') goto yy193; + if (yych == '}') goto yy195; goto yy113; yy122: ++YYCURSOR; -yy123: -#line 272 "../src/parse/scanner_lex.re" +#line 263 "../src/parse/scanner_lex.re" + { + std::vector cpoints; + lex_cpoints ('\'', cpoints); + yylval.regexp = cpoint_string (cpoints, bCaseInsensitive || !bCaseInverted); + return REGEXP; + } +#line 773 "src/parse/scanner_lex.cc" +yy124: + ++YYCURSOR; +yy125: +#line 297 "../src/parse/scanner_lex.re" { return *tok; } -#line 769 "src/parse/scanner_lex.cc" -yy124: +#line 781 "src/parse/scanner_lex.cc" +yy126: ++YYCURSOR; - if ((yych = (YYCTYPE)*YYCURSOR) == '/') goto yy193; -#line 276 "../src/parse/scanner_lex.re" + if ((yych = (YYCTYPE)*YYCURSOR) == '/') goto yy195; +#line 301 "../src/parse/scanner_lex.re" { yylval.op = *tok; return STAR; } -#line 778 "src/parse/scanner_lex.cc" -yy126: +#line 790 "src/parse/scanner_lex.cc" +yy128: ++YYCURSOR; -#line 280 "../src/parse/scanner_lex.re" +#line 305 "../src/parse/scanner_lex.re" { yylval.op = *tok; return CLOSE; } -#line 786 "src/parse/scanner_lex.cc" -yy128: +#line 798 "src/parse/scanner_lex.cc" +yy130: ++YYCURSOR; -#line 362 "../src/parse/scanner_lex.re" +#line 388 "../src/parse/scanner_lex.re" { yylval.regexp = mkDot(); - return RANGE; + return REGEXP; } -#line 794 "src/parse/scanner_lex.cc" -yy130: +#line 806 "src/parse/scanner_lex.cc" +yy132: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '*') goto yy189; - if (yych == '/') goto yy191; - goto yy123; -yy131: + if (yych == '*') goto yy191; + if (yych == '/') goto yy193; + goto yy125; +yy133: YYCTXMARKER = YYCURSOR + 1; yych = (YYCTYPE)*++YYCURSOR; - goto yy163; -yy132: + goto yy165; +yy134: YYCTXMARKER = YYCURSOR + 1; yych = (YYCTYPE)*++YYCURSOR; - if (yych == '=') goto yy185; + if (yych == '=') goto yy187; goto yy113; -yy133: +yy135: yyaccept = 1; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych == '!') goto yy176; - if (yych == '>') goto yy178; - goto yy123; -yy134: - ++YYCURSOR; - if ((yych = (YYCTYPE)*YYCURSOR) == '^') goto yy174; -#line 263 "../src/parse/scanner_lex.re" - { quote = ']'; goto cpoints; } -#line 820 "src/parse/scanner_lex.cc" + if (yych == '!') goto yy178; + if (yych == '>') goto yy180; + goto yy125; yy136: + ++YYCURSOR; + if ((yych = (YYCTYPE)*YYCURSOR) == '^') goto yy176; +#line 277 "../src/parse/scanner_lex.re" + { + std::vector cpoints; + lex_cpoints (']', cpoints); + yylval.regexp = cpoint_class (cpoints, false); + return REGEXP; + } +#line 837 "src/parse/scanner_lex.cc" +yy138: YYCTXMARKER = YYCURSOR + 1; yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'e') goto yy164; - goto yy163; -yy137: + if (yych == 'e') goto yy166; + goto yy165; +yy139: yyaccept = 2; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); if (yybm[0+yych] & 16) { - goto yy139; + goto yy141; } if (yych <= 'Z') { - if (yych == ',') goto yy144; - if (yych >= 'A') goto yy142; + if (yych == ',') goto yy146; + if (yych >= 'A') goto yy144; } else { if (yych <= '_') { - if (yych >= '_') goto yy142; + if (yych >= '_') goto yy144; } else { - if (yych <= '`') goto yy138; - if (yych <= 'z') goto yy142; + if (yych <= '`') goto yy140; + if (yych <= 'z') goto yy144; } } -yy138: +yy140: #line 233 "../src/parse/scanner_lex.re" { depth = 1; goto code; } -#line 849 "src/parse/scanner_lex.cc" -yy139: +#line 866 "src/parse/scanner_lex.cc" +yy141: ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = (YYCTYPE)*YYCURSOR; if (yybm[0+yych] & 16) { - goto yy139; + goto yy141; } if (yych <= '^') { if (yych <= ',') { - if (yych >= ',') goto yy150; + if (yych >= ',') goto yy152; } else { - if (yych <= '@') goto yy141; - if (yych <= 'Z') goto yy142; + if (yych <= '@') goto yy143; + if (yych <= 'Z') goto yy144; } } else { if (yych <= 'z') { - if (yych != '`') goto yy142; + if (yych != '`') goto yy144; } else { - if (yych == '}') goto yy148; + if (yych == '}') goto yy150; } } -yy141: +yy143: YYCURSOR = YYMARKER; if (yyaccept <= 1) { if (yyaccept == 0) { goto yy117; } else { - goto yy123; + goto yy125; } } else { if (yyaccept == 2) { - goto yy138; + goto yy140; } else { - goto yy145; + goto yy147; } } -yy142: +yy144: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; if (yybm[0+yych] & 32) { - goto yy142; + goto yy144; } - if (yych == '}') goto yy146; - goto yy141; -yy144: + if (yych == '}') goto yy148; + goto yy143; +yy146: ++YYCURSOR; -yy145: -#line 316 "../src/parse/scanner_lex.re" +yy147: +#line 341 "../src/parse/scanner_lex.re" { fatal("illegal closure form, use '{n}', '{n,}', '{n,m}' where n and m are numbers"); } -#line 902 "src/parse/scanner_lex.cc" -yy146: +#line 919 "src/parse/scanner_lex.cc" +yy148: ++YYCURSOR; -#line 320 "../src/parse/scanner_lex.re" +#line 345 "../src/parse/scanner_lex.re" { if (!FFlag) { fatal("curly braces for names only allowed with -F switch"); @@ -909,10 +926,10 @@ yy146: yylval.str = new std::string (tok + 1, tok_len () - 2); // -2 to omit braces return ID; } -#line 913 "src/parse/scanner_lex.cc" -yy148: +#line 930 "src/parse/scanner_lex.cc" +yy150: ++YYCURSOR; -#line 285 "../src/parse/scanner_lex.re" +#line 310 "../src/parse/scanner_lex.re" { if (!s_to_u32_unsafe (tok + 1, cur - 1, yylval.extop.min)) { @@ -921,15 +938,15 @@ yy148: yylval.extop.max = yylval.extop.min; return CLOSESIZE; } -#line 925 "src/parse/scanner_lex.cc" -yy150: +#line 942 "src/parse/scanner_lex.cc" +yy152: yyaccept = 3; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych <= '/') goto yy145; - if (yych <= '9') goto yy153; - if (yych != '}') goto yy145; + if (yych <= '/') goto yy147; + if (yych <= '9') goto yy155; + if (yych != '}') goto yy147; ++YYCURSOR; -#line 307 "../src/parse/scanner_lex.re" +#line 332 "../src/parse/scanner_lex.re" { if (!s_to_u32_unsafe (tok + 1, cur - 2, yylval.extop.min)) { @@ -938,16 +955,16 @@ yy150: yylval.extop.max = UINT32_MAX; return CLOSESIZE; } -#line 942 "src/parse/scanner_lex.cc" -yy153: +#line 959 "src/parse/scanner_lex.cc" +yy155: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; - if (yych <= '/') goto yy141; - if (yych <= '9') goto yy153; - if (yych != '}') goto yy141; + if (yych <= '/') goto yy143; + if (yych <= '9') goto yy155; + if (yych != '}') goto yy143; ++YYCURSOR; -#line 294 "../src/parse/scanner_lex.re" +#line 319 "../src/parse/scanner_lex.re" { const char * p = strchr (tok, ','); if (!s_to_u32_unsafe (tok + 1, p, yylval.extop.min)) @@ -960,89 +977,90 @@ yy153: } return CLOSESIZE; } -#line 964 "src/parse/scanner_lex.cc" -yy157: +#line 981 "src/parse/scanner_lex.cc" +yy159: ++YYCURSOR; YYCURSOR = YYCTXMARKER; -#line 348 "../src/parse/scanner_lex.re" +#line 373 "../src/parse/scanner_lex.re" { if (!FFlag) { yylval.str = new std::string (tok, tok_len ()); return ID; } else { + std::vector cpoints; for (char * p = tok; p < cur; ++p) { cpoints.push_back (static_cast (*p)); } yylval.regexp = cpoint_string (cpoints, bCaseInsensitive || bCaseInverted); - return STRING; + return REGEXP; } } -#line 982 "src/parse/scanner_lex.cc" -yy159: +#line 1000 "src/parse/scanner_lex.cc" +yy161: yych = (YYCTYPE)*++YYCURSOR; - goto yy172; -yy160: + goto yy174; +yy162: ++YYCURSOR; -yy161: +yy163: YYCURSOR = YYCTXMARKER; -#line 343 "../src/parse/scanner_lex.re" +#line 368 "../src/parse/scanner_lex.re" { yylval.str = new std::string (tok, tok_len ()); return ID; } -#line 995 "src/parse/scanner_lex.cc" -yy162: +#line 1013 "src/parse/scanner_lex.cc" +yy164: YYCTXMARKER = YYCURSOR + 1; ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = (YYCTYPE)*YYCURSOR; -yy163: +yy165: if (yych <= '9') { if (yych <= ' ') { - if (yych == '\t') goto yy159; - if (yych <= 0x1F) goto yy157; - goto yy159; + if (yych == '\t') goto yy161; + if (yych <= 0x1F) goto yy159; + goto yy161; } else { - if (yych == ',') goto yy160; - if (yych <= '/') goto yy157; - goto yy162; + if (yych == ',') goto yy162; + if (yych <= '/') goto yy159; + goto yy164; } } else { if (yych <= 'Z') { - if (yych <= '<') goto yy157; - if (yych <= '>') goto yy160; - if (yych <= '@') goto yy157; - goto yy162; + if (yych <= '<') goto yy159; + if (yych <= '>') goto yy162; + if (yych <= '@') goto yy159; + goto yy164; } else { if (yych <= '_') { - if (yych <= '^') goto yy157; - goto yy162; + if (yych <= '^') goto yy159; + goto yy164; } else { - if (yych <= '`') goto yy157; - if (yych <= 'z') goto yy162; - goto yy157; + if (yych <= '`') goto yy159; + if (yych <= 'z') goto yy164; + goto yy159; } } } -yy164: +yy166: YYCTXMARKER = YYCURSOR + 1; yych = (YYCTYPE)*++YYCURSOR; - if (yych != '2') goto yy163; + if (yych != '2') goto yy165; YYCTXMARKER = YYCURSOR + 1; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'c') goto yy163; + if (yych != 'c') goto yy165; YYCTXMARKER = YYCURSOR + 1; yych = (YYCTYPE)*++YYCURSOR; - if (yych != ':') goto yy163; + if (yych != ':') goto yy165; ++YYCURSOR; -#line 328 "../src/parse/scanner_lex.re" +#line 353 "../src/parse/scanner_lex.re" { goto conf; } -#line 1042 "src/parse/scanner_lex.cc" -yy169: +#line 1060 "src/parse/scanner_lex.cc" +yy171: ++YYCURSOR; YYCURSOR = YYCTXMARKER; -#line 330 "../src/parse/scanner_lex.re" +#line 355 "../src/parse/scanner_lex.re" { yylval.str = new std::string (tok, tok_len ()); if (FFlag) @@ -1055,719 +1073,428 @@ yy169: return ID; } } -#line 1059 "src/parse/scanner_lex.cc" -yy171: +#line 1077 "src/parse/scanner_lex.cc" +yy173: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; -yy172: +yy174: if (yybm[0+yych] & 64) { - goto yy171; + goto yy173; } - if (yych == ',') goto yy173; - if (yych <= '<') goto yy169; - if (yych >= '?') goto yy169; -yy173: + if (yych == ',') goto yy175; + if (yych <= '<') goto yy171; + if (yych >= '?') goto yy171; +yy175: yych = (YYCTYPE)*++YYCURSOR; - goto yy161; -yy174: - ++YYCURSOR; -#line 264 "../src/parse/scanner_lex.re" - { quote = ']'; negated_class = true; goto cpoints; } -#line 1078 "src/parse/scanner_lex.cc" + goto yy163; yy176: ++YYCURSOR; -#line 269 "../src/parse/scanner_lex.re" +#line 284 "../src/parse/scanner_lex.re" + { + std::vector cpoints; + lex_cpoints (']', cpoints); + yylval.regexp = cpoint_class (cpoints, true); + return REGEXP; + } +#line 1101 "src/parse/scanner_lex.cc" +yy178: + ++YYCURSOR; +#line 294 "../src/parse/scanner_lex.re" { return SETUP; } -#line 1085 "src/parse/scanner_lex.cc" -yy178: +#line 1108 "src/parse/scanner_lex.cc" +yy180: YYCTXMARKER = YYCURSOR + 1; yych = (YYCTYPE)*++YYCURSOR; - goto yy180; -yy179: + goto yy182; +yy181: ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = (YYCTYPE)*YYCURSOR; -yy180: +yy182: if (yych <= '9') { if (yych <= '\t') { - if (yych <= 0x08) goto yy141; - goto yy179; + if (yych <= 0x08) goto yy143; + goto yy181; } else { - if (yych == ' ') goto yy179; - goto yy141; + if (yych == ' ') goto yy181; + goto yy143; } } else { if (yych <= '=') { - if (yych <= ':') goto yy184; - if (yych <= '<') goto yy141; - goto yy183; + if (yych <= ':') goto yy186; + if (yych <= '<') goto yy143; + goto yy185; } else { - if (yych != '{') goto yy141; + if (yych != '{') goto yy143; } } -yy181: +yy183: ++YYCURSOR; YYCURSOR = YYCTXMARKER; -#line 266 "../src/parse/scanner_lex.re" +#line 291 "../src/parse/scanner_lex.re" { return NOCOND; } -#line 1119 "src/parse/scanner_lex.cc" -yy183: +#line 1142 "src/parse/scanner_lex.cc" +yy185: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '>') goto yy181; - goto yy141; -yy184: + if (yych == '>') goto yy183; + goto yy143; +yy186: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '=') goto yy181; - goto yy141; -yy185: + if (yych == '=') goto yy183; + goto yy143; +yy187: ++YYCURSOR; - if ((yych = (YYCTYPE)*YYCURSOR) == '>') goto yy187; + if ((yych = (YYCTYPE)*YYCURSOR) == '>') goto yy189; #line 242 "../src/parse/scanner_lex.re" { tok += 2; /* skip ":=" */ depth = 0; goto code; } -#line 1137 "src/parse/scanner_lex.cc" -yy187: +#line 1160 "src/parse/scanner_lex.cc" +yy189: ++YYCURSOR; YYCURSOR = YYCTXMARKER; #line 238 "../src/parse/scanner_lex.re" { return *tok; } -#line 1145 "src/parse/scanner_lex.cc" -yy189: +#line 1168 "src/parse/scanner_lex.cc" +yy191: ++YYCURSOR; #line 251 "../src/parse/scanner_lex.re" { depth = 1; goto comment; } -#line 1153 "src/parse/scanner_lex.cc" -yy191: +#line 1176 "src/parse/scanner_lex.cc" +yy193: ++YYCURSOR; #line 248 "../src/parse/scanner_lex.re" { goto nextLine; } -#line 1160 "src/parse/scanner_lex.cc" -yy193: +#line 1183 "src/parse/scanner_lex.cc" +yy195: ++YYCURSOR; #line 257 "../src/parse/scanner_lex.re" { tok = cur; return 0; } -#line 1168 "src/parse/scanner_lex.cc" -yy195: +#line 1191 "src/parse/scanner_lex.cc" +yy197: yyaccept = 0; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); if (yych <= 0x1F) { if (yych != '\t') goto yy117; } else { - if (yych <= ' ') goto yy196; - if (yych == '#') goto yy198; + if (yych <= ' ') goto yy198; + if (yych == '#') goto yy200; goto yy117; } -yy196: +yy198: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; if (yych <= 0x1F) { - if (yych == '\t') goto yy196; - goto yy141; + if (yych == '\t') goto yy198; + goto yy143; } else { - if (yych <= ' ') goto yy196; - if (yych != '#') goto yy141; + if (yych <= ' ') goto yy198; + if (yych != '#') goto yy143; } -yy198: +yy200: ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 5) YYFILL(5); yych = (YYCTYPE)*YYCURSOR; if (yych <= 0x1F) { - if (yych == '\t') goto yy198; - goto yy141; + if (yych == '\t') goto yy200; + goto yy143; } else { - if (yych <= ' ') goto yy198; - if (yych != 'l') goto yy141; + if (yych <= ' ') goto yy200; + if (yych != 'l') goto yy143; } yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'i') goto yy141; + if (yych != 'i') goto yy143; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'n') goto yy141; + if (yych != 'n') goto yy143; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'e') goto yy141; + if (yych != 'e') goto yy143; yych = (YYCTYPE)*++YYCURSOR; - if (yych <= '0') goto yy205; - if (yych <= '9') goto yy141; - goto yy205; -yy204: + if (yych <= '0') goto yy207; + if (yych <= '9') goto yy143; + goto yy207; +yy206: YYCTXMARKER = YYCURSOR + 1; ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; -yy205: +yy207: if (yych <= 0x1F) { - if (yych == '\t') goto yy204; - goto yy141; + if (yych == '\t') goto yy206; + goto yy143; } else { - if (yych <= ' ') goto yy204; - if (yych <= '0') goto yy141; - if (yych >= ':') goto yy141; + if (yych <= ' ') goto yy206; + if (yych <= '0') goto yy143; + if (yych >= ':') goto yy143; } -yy206: +yy208: ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = (YYCTYPE)*YYCURSOR; if (yych <= '\r') { if (yych <= '\t') { - if (yych <= 0x08) goto yy141; + if (yych <= 0x08) goto yy143; } else { - if (yych <= '\n') goto yy210; - if (yych <= '\f') goto yy141; - goto yy212; + if (yych <= '\n') goto yy212; + if (yych <= '\f') goto yy143; + goto yy214; } } else { if (yych <= ' ') { - if (yych <= 0x1F) goto yy141; + if (yych <= 0x1F) goto yy143; } else { - if (yych <= '/') goto yy141; - if (yych <= '9') goto yy206; - goto yy141; + if (yych <= '/') goto yy143; + if (yych <= '9') goto yy208; + goto yy143; } } -yy208: +yy210: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; if (yych <= 0x1F) { - if (yych == '\t') goto yy208; - goto yy141; + if (yych == '\t') goto yy210; + goto yy143; } else { - if (yych <= ' ') goto yy208; - if (yych == '"') goto yy213; - goto yy141; + if (yych <= ' ') goto yy210; + if (yych == '"') goto yy215; + goto yy143; } -yy210: +yy212: ++YYCURSOR; YYCURSOR = YYCTXMARKER; -#line 371 "../src/parse/scanner_lex.re" +#line 397 "../src/parse/scanner_lex.re" { set_sourceline (); goto scan; } -#line 1266 "src/parse/scanner_lex.cc" -yy212: +#line 1289 "src/parse/scanner_lex.cc" +yy214: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '\n') goto yy210; - goto yy141; -yy213: + if (yych == '\n') goto yy212; + goto yy143; +yy215: ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3); yych = (YYCTYPE)*YYCURSOR; if (yybm[0+yych] & 128) { - goto yy213; + goto yy215; } - if (yych <= '\n') goto yy141; - if (yych <= '"') goto yy216; + if (yych <= '\n') goto yy143; + if (yych <= '"') goto yy218; ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; - if (yych == '\n') goto yy141; - goto yy213; -yy216: + if (yych == '\n') goto yy143; + goto yy215; +yy218: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '\n') goto yy210; - if (yych == '\r') goto yy212; - goto yy141; -yy217: + if (yych == '\n') goto yy212; + if (yych == '\r') goto yy214; + goto yy143; +yy219: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; -yy218: - if (yych == '\t') goto yy217; - if (yych == ' ') goto yy217; +yy220: + if (yych == '\t') goto yy219; + if (yych == ' ') goto yy219; goto yy115; } -#line 387 "../src/parse/scanner_lex.re" +#line 413 "../src/parse/scanner_lex.re" flex_name: -#line 1304 "src/parse/scanner_lex.cc" +#line 1327 "src/parse/scanner_lex.cc" { YYCTYPE yych; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = (YYCTYPE)*YYCURSOR; - if (yych == '\n') goto yy223; - if (yych == '\r') goto yy225; + if (yych == '\n') goto yy225; + if (yych == '\r') goto yy227; ++YYCURSOR; -yy222: -#line 398 "../src/parse/scanner_lex.re" +yy224: +#line 424 "../src/parse/scanner_lex.re" { YYCURSOR = tok; goto start; } -#line 1318 "src/parse/scanner_lex.cc" -yy223: +#line 1341 "src/parse/scanner_lex.cc" +yy225: ++YYCURSOR; -yy224: -#line 392 "../src/parse/scanner_lex.re" +yy226: +#line 418 "../src/parse/scanner_lex.re" { YYCURSOR = tok; lexer_state = LEX_NORMAL; return FID_END; } -#line 1328 "src/parse/scanner_lex.cc" -yy225: +#line 1351 "src/parse/scanner_lex.cc" +yy227: yych = (YYCTYPE)*++YYCURSOR; - if (yych != '\n') goto yy222; + if (yych != '\n') goto yy224; ++YYCURSOR; yych = (YYCTYPE)*YYCURSOR; - goto yy224; + goto yy226; } -#line 402 "../src/parse/scanner_lex.re" +#line 428 "../src/parse/scanner_lex.re" -cpoints: - tok = cur; +code: -#line 1342 "src/parse/scanner_lex.cc" +#line 1364 "src/parse/scanner_lex.cc" { YYCTYPE yych; unsigned int yyaccept = 0; - if ((YYLIMIT - YYCURSOR) < 10) YYFILL(10); + static const unsigned char yybm[] = { + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 112, 0, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 112, 48, 16, 48, 48, 48, 48, 32, + 48, 48, 48, 48, 48, 48, 48, 48, + 176, 176, 176, 176, 176, 176, 176, 176, + 176, 176, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 0, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + }; + if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3); yych = (YYCTYPE)*YYCURSOR; - if (yych == '\n') goto yy231; - if (yych == '\\') goto yy233; - ++YYCURSOR; -#line 426 "../src/parse/scanner_lex.re" - { - const char c = tok[0]; - if (c == quote) - { - switch (quote) - { - case ']': - yylval.regexp = cpoint_class (cpoints, negated_class); - return RANGE; - case '\'': - yylval.regexp = cpoint_string (cpoints, bCaseInsensitive || !bCaseInverted); - return STRING; - case '"': - yylval.regexp = cpoint_string (cpoints, bCaseInsensitive || bCaseInverted); - return STRING; - } + if (yych <= '&') { + if (yych <= '\n') { + if (yych <= 0x00) goto yy231; + if (yych <= '\t') goto yy233; + goto yy235; + } else { + if (yych == '"') goto yy237; + goto yy233; } - else - { - cpoints.push_back (static_cast (c)); - goto cpoints; + } else { + if (yych <= '{') { + if (yych <= '\'') goto yy238; + if (yych <= 'z') goto yy233; + goto yy239; + } else { + if (yych == '}') goto yy241; + goto yy233; } } -#line 1375 "src/parse/scanner_lex.cc" yy231: ++YYCURSOR; -#line 407 "../src/parse/scanner_lex.re" - { fatal ((tok - pos) - tchar, "syntax error"); } -#line 1380 "src/parse/scanner_lex.cc" +#line 491 "../src/parse/scanner_lex.re" + { + if (cur == eof) + { + if (depth) + { + fatal("missing '}'"); + } + return 0; + } + goto code; + } +#line 1437 "src/parse/scanner_lex.cc" yy233: ++YYCURSOR; - if ((yych = (YYCTYPE)*YYCURSOR) <= 'b') { - if (yych <= 'T') { - if (yych <= '/') { - if (yych != '\n') goto yy235; - } else { - if (yych <= '3') goto yy237; - if (yych <= '7') goto yy239; - goto yy235; - } +yy234: +#line 505 "../src/parse/scanner_lex.re" + { + goto code; + } +#line 1445 "src/parse/scanner_lex.cc" +yy235: + YYCTXMARKER = YYCURSOR + 1; + yyaccept = 0; + yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); + if (yych <= '\r') { + if (yych <= '\t') { + if (yych >= '\t') goto yy252; } else { - if (yych <= 'X') { - if (yych <= 'U') goto yy240; - if (yych <= 'W') goto yy235; - goto yy242; - } else { - if (yych == '\\') goto yy243; - if (yych <= '`') goto yy235; - goto yy243; - } + if (yych <= '\n') goto yy254; + if (yych >= '\r') goto yy254; } } else { - if (yych <= 'r') { - if (yych <= 'm') { - if (yych == 'f') goto yy243; - goto yy235; - } else { - if (yych <= 'n') goto yy243; - if (yych <= 'q') goto yy235; - goto yy243; - } + if (yych <= ' ') { + if (yych >= ' ') goto yy252; } else { - if (yych <= 'u') { - if (yych <= 's') goto yy235; - if (yych <= 't') goto yy243; - goto yy242; - } else { - if (yych <= 'v') goto yy243; - if (yych == 'x') goto yy245; - goto yy235; - } + if (yych == '#') goto yy255; } } -#line 410 "../src/parse/scanner_lex.re" - { fatal ((tok - pos) - tchar, "syntax error in escape sequence"); } -#line 1427 "src/parse/scanner_lex.cc" -yy235: - ++YYCURSOR; -#line 416 "../src/parse/scanner_lex.re" +yy236: +#line 472 "../src/parse/scanner_lex.re" { - const char c = tok[1]; - if (c != quote) - { - warn.useless_escape (tline, tok - pos, c); - } - cpoints.push_back (static_cast (c)); - goto cpoints; - } -#line 1440 "src/parse/scanner_lex.cc" + if (depth == 0) + { + tok += strspn(tok, " \t\r\n"); + while (cur > tok && strchr(" \t\r\n", cur[-1])) + { + --cur; + } + yylval.code = new Code (tok, tok_len (), get_fname (), tline); + return CODE; + } + else if (cur == eof) + { + fatal("missing '}'"); + } + pos = cur; + cline++; + goto code; + } +#line 1485 "src/parse/scanner_lex.cc" yy237: - yyaccept = 0; - yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych <= '/') goto yy238; - if (yych <= '7') goto yy260; -yy238: -#line 409 "../src/parse/scanner_lex.re" - { fatal ((tok - pos) - tchar, "syntax error in octal escape sequence"); } -#line 1449 "src/parse/scanner_lex.cc" -yy239: - yych = (YYCTYPE)*++YYCURSOR; - goto yy238; -yy240: yyaccept = 1; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych <= '@') { - if (yych <= '/') goto yy241; - if (yych <= '9') goto yy253; - } else { - if (yych <= 'F') goto yy253; - if (yych <= '`') goto yy241; - if (yych <= 'f') goto yy253; - } -yy241: -#line 408 "../src/parse/scanner_lex.re" - { fatal ((tok - pos) - tchar, "syntax error in hexadecimal escape sequence"); } -#line 1467 "src/parse/scanner_lex.cc" -yy242: + if (yych == '\n') goto yy234; + goto yy250; +yy238: yyaccept = 1; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych <= '@') { - if (yych <= '/') goto yy241; - if (yych <= '9') goto yy250; - goto yy241; - } else { - if (yych <= 'F') goto yy250; - if (yych <= '`') goto yy241; - if (yych <= 'f') goto yy250; - goto yy241; - } -yy243: - ++YYCURSOR; -#line 414 "../src/parse/scanner_lex.re" - { cpoints.push_back (unesc_simple (tok)); goto cpoints; } -#line 1485 "src/parse/scanner_lex.cc" -yy245: - yyaccept = 1; - yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych <= '@') { - if (yych <= '/') goto yy241; - if (yych >= ':') goto yy241; - } else { - if (yych <= 'F') goto yy246; - if (yych <= '`') goto yy241; - if (yych >= 'g') goto yy241; - } -yy246: - yych = (YYCTYPE)*++YYCURSOR; - if (yych <= '@') { - if (yych <= '/') goto yy247; - if (yych <= '9') goto yy248; - } else { - if (yych <= 'F') goto yy248; - if (yych <= '`') goto yy247; - if (yych <= 'f') goto yy248; - } -yy247: - YYCURSOR = YYMARKER; - if (yyaccept == 0) { - goto yy238; - } else { - goto yy241; - } -yy248: - ++YYCURSOR; -#line 412 "../src/parse/scanner_lex.re" - { cpoints.push_back (unesc_hex (tok, cur)); goto cpoints; } -#line 1518 "src/parse/scanner_lex.cc" -yy250: - yych = (YYCTYPE)*++YYCURSOR; - if (yych <= '@') { - if (yych <= '/') goto yy247; - if (yych >= ':') goto yy247; - } else { - if (yych <= 'F') goto yy251; - if (yych <= '`') goto yy247; - if (yych >= 'g') goto yy247; - } -yy251: - yych = (YYCTYPE)*++YYCURSOR; - if (yych <= '@') { - if (yych <= '/') goto yy247; - if (yych >= ':') goto yy247; - } else { - if (yych <= 'F') goto yy252; - if (yych <= '`') goto yy247; - if (yych >= 'g') goto yy247; - } -yy252: - yych = (YYCTYPE)*++YYCURSOR; - if (yych <= '@') { - if (yych <= '/') goto yy247; - if (yych <= '9') goto yy248; - goto yy247; - } else { - if (yych <= 'F') goto yy248; - if (yych <= '`') goto yy247; - if (yych <= 'f') goto yy248; - goto yy247; - } -yy253: - yych = (YYCTYPE)*++YYCURSOR; - if (yych <= '@') { - if (yych <= '/') goto yy247; - if (yych >= ':') goto yy247; - } else { - if (yych <= 'F') goto yy254; - if (yych <= '`') goto yy247; - if (yych >= 'g') goto yy247; - } -yy254: - yych = (YYCTYPE)*++YYCURSOR; - if (yych <= '@') { - if (yych <= '/') goto yy247; - if (yych >= ':') goto yy247; - } else { - if (yych <= 'F') goto yy255; - if (yych <= '`') goto yy247; - if (yych >= 'g') goto yy247; - } -yy255: - yych = (YYCTYPE)*++YYCURSOR; - if (yych <= '@') { - if (yych <= '/') goto yy247; - if (yych >= ':') goto yy247; - } else { - if (yych <= 'F') goto yy256; - if (yych <= '`') goto yy247; - if (yych >= 'g') goto yy247; - } -yy256: - yych = (YYCTYPE)*++YYCURSOR; - if (yych <= '@') { - if (yych <= '/') goto yy247; - if (yych >= ':') goto yy247; - } else { - if (yych <= 'F') goto yy257; - if (yych <= '`') goto yy247; - if (yych >= 'g') goto yy247; - } -yy257: - yych = (YYCTYPE)*++YYCURSOR; - if (yych <= '@') { - if (yych <= '/') goto yy247; - if (yych >= ':') goto yy247; - } else { - if (yych <= 'F') goto yy258; - if (yych <= '`') goto yy247; - if (yych >= 'g') goto yy247; - } -yy258: - yych = (YYCTYPE)*++YYCURSOR; - if (yych <= '@') { - if (yych <= '/') goto yy247; - if (yych >= ':') goto yy247; - } else { - if (yych <= 'F') goto yy259; - if (yych <= '`') goto yy247; - if (yych >= 'g') goto yy247; - } -yy259: - yych = (YYCTYPE)*++YYCURSOR; - if (yych <= '@') { - if (yych <= '/') goto yy247; - if (yych <= '9') goto yy248; - goto yy247; - } else { - if (yych <= 'F') goto yy248; - if (yych <= '`') goto yy247; - if (yych <= 'f') goto yy248; - goto yy247; - } -yy260: - yych = (YYCTYPE)*++YYCURSOR; - if (yych <= '/') goto yy247; - if (yych >= '8') goto yy247; - ++YYCURSOR; -#line 413 "../src/parse/scanner_lex.re" - { cpoints.push_back (unesc_oct (tok, cur)); goto cpoints; } -#line 1630 "src/parse/scanner_lex.cc" -} -#line 449 "../src/parse/scanner_lex.re" - - -code: - -#line 1637 "src/parse/scanner_lex.cc" -{ - YYCTYPE yych; - unsigned int yyaccept = 0; - static const unsigned char yybm[] = { - 48, 48, 48, 48, 48, 48, 48, 48, - 48, 112, 0, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, - 112, 48, 16, 48, 48, 48, 48, 32, - 48, 48, 48, 48, 48, 48, 48, 48, - 176, 176, 176, 176, 176, 176, 176, 176, - 176, 176, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 0, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, - }; - if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3); - yych = (YYCTYPE)*YYCURSOR; - if (yych <= '&') { - if (yych <= '\n') { - if (yych <= 0x00) goto yy265; - if (yych <= '\t') goto yy267; - goto yy269; - } else { - if (yych == '"') goto yy271; - goto yy267; - } - } else { - if (yych <= '{') { - if (yych <= '\'') goto yy272; - if (yych <= 'z') goto yy267; - goto yy273; - } else { - if (yych == '}') goto yy275; - goto yy267; - } - } -yy265: - ++YYCURSOR; -#line 512 "../src/parse/scanner_lex.re" - { - if (cur == eof) - { - if (depth) - { - fatal("missing '}'"); - } - return 0; - } - goto code; - } -#line 1710 "src/parse/scanner_lex.cc" -yy267: - ++YYCURSOR; -yy268: -#line 526 "../src/parse/scanner_lex.re" - { - goto code; - } -#line 1718 "src/parse/scanner_lex.cc" -yy269: - YYCTXMARKER = YYCURSOR + 1; - yyaccept = 0; - yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych <= '\r') { - if (yych <= '\t') { - if (yych >= '\t') goto yy286; - } else { - if (yych <= '\n') goto yy288; - if (yych >= '\r') goto yy288; - } - } else { - if (yych <= ' ') { - if (yych >= ' ') goto yy286; - } else { - if (yych == '#') goto yy289; - } - } -yy270: -#line 493 "../src/parse/scanner_lex.re" - { - if (depth == 0) - { - tok += strspn(tok, " \t\r\n"); - while (cur > tok && strchr(" \t\r\n", cur[-1])) - { - --cur; - } - yylval.code = new Code (tok, tok_len (), get_fname (), tline); - return CODE; - } - else if (cur == eof) - { - fatal("missing '}'"); - } - pos = cur; - cline++; - goto code; - } -#line 1758 "src/parse/scanner_lex.cc" -yy271: - yyaccept = 1; - yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych == '\n') goto yy268; - goto yy284; -yy272: - yyaccept = 1; - yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych == '\n') goto yy268; - goto yy278; -yy273: + if (yych == '\n') goto yy234; + goto yy244; +yy239: ++YYCURSOR; -#line 465 "../src/parse/scanner_lex.re" +#line 444 "../src/parse/scanner_lex.re" { if (depth == 0) { @@ -1779,10 +1506,10 @@ yy273: } goto code; } -#line 1783 "src/parse/scanner_lex.cc" -yy275: +#line 1510 "src/parse/scanner_lex.cc" +yy241: ++YYCURSOR; -#line 453 "../src/parse/scanner_lex.re" +#line 432 "../src/parse/scanner_lex.re" { if (depth == 0) { @@ -1795,69 +1522,69 @@ yy275: } goto code; } -#line 1799 "src/parse/scanner_lex.cc" -yy277: +#line 1526 "src/parse/scanner_lex.cc" +yy243: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; -yy278: +yy244: if (yybm[0+yych] & 16) { - goto yy277; + goto yy243; } - if (yych <= '\n') goto yy279; - if (yych <= '\'') goto yy281; - goto yy280; -yy279: + if (yych <= '\n') goto yy245; + if (yych <= '\'') goto yy247; + goto yy246; +yy245: YYCURSOR = YYMARKER; if (yyaccept <= 1) { if (yyaccept == 0) { - goto yy270; + goto yy236; } else { - goto yy268; + goto yy234; } } else { - goto yy287; + goto yy253; } -yy280: +yy246: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; - if (yych == '\n') goto yy279; - goto yy277; -yy281: + if (yych == '\n') goto yy245; + goto yy243; +yy247: ++YYCURSOR; -#line 523 "../src/parse/scanner_lex.re" +#line 502 "../src/parse/scanner_lex.re" { goto code; } -#line 1834 "src/parse/scanner_lex.cc" -yy283: +#line 1561 "src/parse/scanner_lex.cc" +yy249: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; -yy284: +yy250: if (yybm[0+yych] & 32) { - goto yy283; + goto yy249; } - if (yych <= '\n') goto yy279; - if (yych <= '"') goto yy281; + if (yych <= '\n') goto yy245; + if (yych <= '"') goto yy247; ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; - if (yych == '\n') goto yy279; - goto yy283; -yy286: + if (yych == '\n') goto yy245; + goto yy249; +yy252: yyaccept = 2; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); if (yych <= 0x1F) { - if (yych == '\t') goto yy308; + if (yych == '\t') goto yy274; } else { - if (yych <= ' ') goto yy308; - if (yych == '#') goto yy289; + if (yych <= ' ') goto yy274; + if (yych == '#') goto yy255; } -yy287: +yy253: YYCURSOR = YYCTXMARKER; -#line 480 "../src/parse/scanner_lex.re" +#line 459 "../src/parse/scanner_lex.re" { if (depth == 0) { @@ -1871,123 +1598,123 @@ yy287: cline++; goto code; } -#line 1875 "src/parse/scanner_lex.cc" -yy288: +#line 1602 "src/parse/scanner_lex.cc" +yy254: yych = (YYCTYPE)*++YYCURSOR; - goto yy287; -yy289: + goto yy253; +yy255: ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 5) YYFILL(5); yych = (YYCTYPE)*YYCURSOR; if (yybm[0+yych] & 64) { - goto yy289; + goto yy255; } - if (yych != 'l') goto yy279; + if (yych != 'l') goto yy245; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'i') goto yy279; + if (yych != 'i') goto yy245; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'n') goto yy279; + if (yych != 'n') goto yy245; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'e') goto yy279; + if (yych != 'e') goto yy245; yych = (YYCTYPE)*++YYCURSOR; - if (yych <= '0') goto yy296; - if (yych <= '9') goto yy279; - goto yy296; -yy295: + if (yych <= '0') goto yy262; + if (yych <= '9') goto yy245; + goto yy262; +yy261: YYCTXMARKER = YYCURSOR + 1; ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; -yy296: +yy262: if (yych <= 0x1F) { - if (yych == '\t') goto yy295; - goto yy279; + if (yych == '\t') goto yy261; + goto yy245; } else { - if (yych <= ' ') goto yy295; - if (yych <= '0') goto yy279; - if (yych >= ':') goto yy279; + if (yych <= ' ') goto yy261; + if (yych <= '0') goto yy245; + if (yych >= ':') goto yy245; } -yy297: +yy263: ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = (YYCTYPE)*YYCURSOR; if (yybm[0+yych] & 128) { - goto yy297; + goto yy263; } if (yych <= '\f') { - if (yych <= 0x08) goto yy279; - if (yych <= '\t') goto yy299; - if (yych <= '\n') goto yy301; - goto yy279; + if (yych <= 0x08) goto yy245; + if (yych <= '\t') goto yy265; + if (yych <= '\n') goto yy267; + goto yy245; } else { - if (yych <= '\r') goto yy303; - if (yych != ' ') goto yy279; + if (yych <= '\r') goto yy269; + if (yych != ' ') goto yy245; } -yy299: +yy265: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; if (yych <= 0x1F) { - if (yych == '\t') goto yy299; - goto yy279; + if (yych == '\t') goto yy265; + goto yy245; } else { - if (yych <= ' ') goto yy299; - if (yych == '"') goto yy304; - goto yy279; + if (yych <= ' ') goto yy265; + if (yych == '"') goto yy270; + goto yy245; } -yy301: +yy267: ++YYCURSOR; YYCURSOR = YYCTXMARKER; -#line 476 "../src/parse/scanner_lex.re" +#line 455 "../src/parse/scanner_lex.re" { set_sourceline (); goto code; } -#line 1947 "src/parse/scanner_lex.cc" -yy303: +#line 1674 "src/parse/scanner_lex.cc" +yy269: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '\n') goto yy301; - goto yy279; -yy304: + if (yych == '\n') goto yy267; + goto yy245; +yy270: ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3); yych = (YYCTYPE)*YYCURSOR; if (yych <= '!') { - if (yych == '\n') goto yy279; - goto yy304; + if (yych == '\n') goto yy245; + goto yy270; } else { - if (yych <= '"') goto yy307; - if (yych != '\\') goto yy304; + if (yych <= '"') goto yy273; + if (yych != '\\') goto yy270; } ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; - if (yych == '\n') goto yy279; - goto yy304; -yy307: + if (yych == '\n') goto yy245; + goto yy270; +yy273: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '\n') goto yy301; - if (yych == '\r') goto yy303; - goto yy279; -yy308: + if (yych == '\n') goto yy267; + if (yych == '\r') goto yy269; + goto yy245; +yy274: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; if (yych <= 0x1F) { - if (yych == '\t') goto yy308; - goto yy279; + if (yych == '\t') goto yy274; + goto yy245; } else { - if (yych <= ' ') goto yy308; - if (yych == '#') goto yy289; - goto yy279; + if (yych <= ' ') goto yy274; + if (yych == '#') goto yy255; + goto yy245; } } -#line 529 "../src/parse/scanner_lex.re" +#line 508 "../src/parse/scanner_lex.re" comment: -#line 1991 "src/parse/scanner_lex.cc" +#line 1718 "src/parse/scanner_lex.cc" { YYCTYPE yych; static const unsigned char yybm[] = { @@ -2027,14 +1754,14 @@ comment: if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = (YYCTYPE)*YYCURSOR; if (yych <= ')') { - if (yych == '\n') goto yy314; + if (yych == '\n') goto yy280; } else { - if (yych <= '*') goto yy316; - if (yych == '/') goto yy317; + if (yych <= '*') goto yy282; + if (yych == '/') goto yy283; } ++YYCURSOR; -yy313: -#line 561 "../src/parse/scanner_lex.re" +yy279: +#line 540 "../src/parse/scanner_lex.re" { if (cur == eof) { @@ -2042,15 +1769,15 @@ yy313: } goto comment; } -#line 2046 "src/parse/scanner_lex.cc" -yy314: +#line 1773 "src/parse/scanner_lex.cc" +yy280: yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); if (yybm[0+yych] & 32) { - goto yy322; + goto yy288; } - if (yych == '#') goto yy325; -yy315: -#line 552 "../src/parse/scanner_lex.re" + if (yych == '#') goto yy291; +yy281: +#line 531 "../src/parse/scanner_lex.re" { if (cur == eof) { @@ -2060,25 +1787,25 @@ yy315: cline++; goto comment; } -#line 2064 "src/parse/scanner_lex.cc" -yy316: +#line 1791 "src/parse/scanner_lex.cc" +yy282: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '/') goto yy320; - goto yy313; -yy317: + if (yych == '/') goto yy286; + goto yy279; +yy283: yych = (YYCTYPE)*++YYCURSOR; - if (yych != '*') goto yy313; + if (yych != '*') goto yy279; ++YYCURSOR; -#line 543 "../src/parse/scanner_lex.re" +#line 522 "../src/parse/scanner_lex.re" { ++depth; fatal("ambiguous /* found"); goto comment; } -#line 2079 "src/parse/scanner_lex.cc" -yy320: +#line 1806 "src/parse/scanner_lex.cc" +yy286: ++YYCURSOR; -#line 533 "../src/parse/scanner_lex.re" +#line 512 "../src/parse/scanner_lex.re" { if (--depth == 0) { @@ -2089,136 +1816,136 @@ yy320: goto comment; } } -#line 2093 "src/parse/scanner_lex.cc" -yy322: +#line 1820 "src/parse/scanner_lex.cc" +yy288: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; if (yybm[0+yych] & 32) { - goto yy322; + goto yy288; } - if (yych == '#') goto yy325; -yy324: + if (yych == '#') goto yy291; +yy290: YYCURSOR = YYMARKER; - goto yy315; -yy325: + goto yy281; +yy291: ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 5) YYFILL(5); yych = (YYCTYPE)*YYCURSOR; if (yych <= 0x1F) { - if (yych == '\t') goto yy325; - goto yy324; + if (yych == '\t') goto yy291; + goto yy290; } else { - if (yych <= ' ') goto yy325; - if (yych != 'l') goto yy324; + if (yych <= ' ') goto yy291; + if (yych != 'l') goto yy290; } yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'i') goto yy324; + if (yych != 'i') goto yy290; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'n') goto yy324; + if (yych != 'n') goto yy290; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'e') goto yy324; + if (yych != 'e') goto yy290; yych = (YYCTYPE)*++YYCURSOR; - if (yych <= '0') goto yy332; - if (yych <= '9') goto yy324; - goto yy332; -yy331: + if (yych <= '0') goto yy298; + if (yych <= '9') goto yy290; + goto yy298; +yy297: YYCTXMARKER = YYCURSOR + 1; ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; -yy332: +yy298: if (yych <= 0x1F) { - if (yych == '\t') goto yy331; - goto yy324; + if (yych == '\t') goto yy297; + goto yy290; } else { - if (yych <= ' ') goto yy331; - if (yych <= '0') goto yy324; - if (yych >= ':') goto yy324; + if (yych <= ' ') goto yy297; + if (yych <= '0') goto yy290; + if (yych >= ':') goto yy290; } -yy333: +yy299: ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = (YYCTYPE)*YYCURSOR; if (yybm[0+yych] & 64) { - goto yy333; + goto yy299; } if (yych <= '\f') { - if (yych <= 0x08) goto yy324; - if (yych <= '\t') goto yy335; - if (yych <= '\n') goto yy337; - goto yy324; + if (yych <= 0x08) goto yy290; + if (yych <= '\t') goto yy301; + if (yych <= '\n') goto yy303; + goto yy290; } else { - if (yych <= '\r') goto yy339; - if (yych != ' ') goto yy324; + if (yych <= '\r') goto yy305; + if (yych != ' ') goto yy290; } -yy335: +yy301: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; if (yych <= 0x1F) { - if (yych == '\t') goto yy335; - goto yy324; + if (yych == '\t') goto yy301; + goto yy290; } else { - if (yych <= ' ') goto yy335; - if (yych == '"') goto yy340; - goto yy324; + if (yych <= ' ') goto yy301; + if (yych == '"') goto yy306; + goto yy290; } -yy337: +yy303: ++YYCURSOR; YYCURSOR = YYCTXMARKER; -#line 548 "../src/parse/scanner_lex.re" +#line 527 "../src/parse/scanner_lex.re" { set_sourceline (); goto comment; } -#line 2176 "src/parse/scanner_lex.cc" -yy339: +#line 1903 "src/parse/scanner_lex.cc" +yy305: yych = (YYCTYPE)*++YYCURSOR; - if (yych == '\n') goto yy337; - goto yy324; -yy340: + if (yych == '\n') goto yy303; + goto yy290; +yy306: ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3); yych = (YYCTYPE)*YYCURSOR; if (yybm[0+yych] & 128) { - goto yy340; + goto yy306; } - if (yych <= '\n') goto yy324; - if (yych <= '"') goto yy343; + if (yych <= '\n') goto yy290; + if (yych <= '"') goto yy309; ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; - if (yych == '\n') goto yy324; - goto yy340; -yy343: + if (yych == '\n') goto yy290; + goto yy306; +yy309: ++YYCURSOR; - if ((yych = (YYCTYPE)*YYCURSOR) == '\n') goto yy337; - if (yych == '\r') goto yy339; - goto yy324; + if ((yych = (YYCTYPE)*YYCURSOR) == '\n') goto yy303; + if (yych == '\r') goto yy305; + goto yy290; } -#line 568 "../src/parse/scanner_lex.re" +#line 547 "../src/parse/scanner_lex.re" nextLine: -#line 2206 "src/parse/scanner_lex.cc" +#line 1933 "src/parse/scanner_lex.cc" { YYCTYPE yych; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; - if (yych == '\n') goto yy348; + if (yych == '\n') goto yy314; ++YYCURSOR; -#line 579 "../src/parse/scanner_lex.re" +#line 558 "../src/parse/scanner_lex.re" { if(cur == eof) { return 0; } goto nextLine; } -#line 2219 "src/parse/scanner_lex.cc" -yy348: +#line 1946 "src/parse/scanner_lex.cc" +yy314: ++YYCURSOR; -#line 572 "../src/parse/scanner_lex.re" +#line 551 "../src/parse/scanner_lex.re" { if(cur == eof) { return 0; } @@ -2226,534 +1953,534 @@ yy348: cline++; goto scan; } -#line 2230 "src/parse/scanner_lex.cc" +#line 1957 "src/parse/scanner_lex.cc" } -#line 584 "../src/parse/scanner_lex.re" +#line 563 "../src/parse/scanner_lex.re" conf: tok = cur; lexer_state = LEX_CONF; -#line 2239 "src/parse/scanner_lex.cc" +#line 1966 "src/parse/scanner_lex.cc" { YYCTYPE yych; unsigned int yyaccept = 0; if ((YYLIMIT - YYCURSOR) < 27) YYFILL(27); yych = (YYCTYPE)*YYCURSOR; switch (yych) { - case 'c': goto yy354; - case 'd': goto yy355; - case 'f': goto yy356; - case 'i': goto yy357; - case 'l': goto yy358; - case 's': goto yy359; - case 'v': goto yy360; - case 'y': goto yy361; - default: goto yy352; - } -yy352: - ++YYCURSOR; -yy353: -#line 590 "../src/parse/scanner_lex.re" + case 'c': goto yy320; + case 'd': goto yy321; + case 'f': goto yy322; + case 'i': goto yy323; + case 'l': goto yy324; + case 's': goto yy325; + case 'v': goto yy326; + case 'y': goto yy327; + default: goto yy318; + } +yy318: + ++YYCURSOR; +yy319: +#line 569 "../src/parse/scanner_lex.re" { fatal ((tok - pos) - tchar, "unrecognized configuration"); } -#line 2261 "src/parse/scanner_lex.cc" -yy354: +#line 1988 "src/parse/scanner_lex.cc" +yy320: yyaccept = 0; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych == 'g') goto yy686; - if (yych == 'o') goto yy687; - goto yy353; -yy355: + if (yych == 'g') goto yy652; + if (yych == 'o') goto yy653; + goto yy319; +yy321: yyaccept = 0; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych == 'e') goto yy531; - goto yy353; -yy356: + if (yych == 'e') goto yy497; + goto yy319; +yy322: yyaccept = 0; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych == 'l') goto yy524; - goto yy353; -yy357: + if (yych == 'l') goto yy490; + goto yy319; +yy323: yyaccept = 0; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych == 'n') goto yy507; - goto yy353; -yy358: + if (yych == 'n') goto yy473; + goto yy319; +yy324: yyaccept = 0; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych == 'a') goto yy480; - goto yy353; -yy359: + if (yych == 'a') goto yy446; + goto yy319; +yy325: yyaccept = 0; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych == 't') goto yy451; - goto yy353; -yy360: + if (yych == 't') goto yy417; + goto yy319; +yy326: yyaccept = 0; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych == 'a') goto yy418; - goto yy353; -yy361: + if (yych == 'a') goto yy384; + goto yy319; +yy327: yyaccept = 0; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych != 'y') goto yy353; + if (yych != 'y') goto yy319; yych = (YYCTYPE)*++YYCURSOR; if (yych <= 'c') { - if (yych <= 'a') goto yy363; - if (yych <= 'b') goto yy364; - goto yy365; + if (yych <= 'a') goto yy329; + if (yych <= 'b') goto yy330; + goto yy331; } else { - if (yych == 'f') goto yy366; + if (yych == 'f') goto yy332; } -yy363: +yy329: YYCURSOR = YYMARKER; if (yyaccept <= 1) { if (yyaccept == 0) { - goto yy353; + goto yy319; } else { - goto yy555; + goto yy521; } } else { if (yyaccept == 2) { - goto yy701; + goto yy667; } else { - goto yy711; + goto yy677; } } -yy364: +yy330: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'm') goto yy412; - goto yy363; -yy365: + if (yych == 'm') goto yy378; + goto yy329; +yy331: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'h') goto yy394; - goto yy363; -yy366: + if (yych == 'h') goto yy360; + goto yy329; +yy332: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'i') goto yy363; + if (yych != 'i') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'l') goto yy363; + if (yych != 'l') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'l') goto yy363; + if (yych != 'l') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != ':') goto yy363; + if (yych != ':') goto yy329; yych = (YYCTYPE)*++YYCURSOR; if (yych <= 'd') { - if (yych == 'c') goto yy373; - goto yy363; + if (yych == 'c') goto yy339; + goto yy329; } else { - if (yych <= 'e') goto yy372; - if (yych != 'p') goto yy363; + if (yych <= 'e') goto yy338; + if (yych != 'p') goto yy329; } yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'a') goto yy385; - goto yy363; -yy372: + if (yych == 'a') goto yy351; + goto yy329; +yy338: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'n') goto yy379; - goto yy363; -yy373: + if (yych == 'n') goto yy345; + goto yy329; +yy339: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'h') goto yy363; + if (yych != 'h') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'e') goto yy363; + if (yych != 'e') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'c') goto yy363; + if (yych != 'c') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'k') goto yy363; + if (yych != 'k') goto yy329; ++YYCURSOR; -#line 678 "../src/parse/scanner_lex.re" +#line 657 "../src/parse/scanner_lex.re" { return CONF_YYFILL_CHECK; } -#line 2369 "src/parse/scanner_lex.cc" -yy379: +#line 2096 "src/parse/scanner_lex.cc" +yy345: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'a') goto yy363; + if (yych != 'a') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'b') goto yy363; + if (yych != 'b') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'l') goto yy363; + if (yych != 'l') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'e') goto yy363; + if (yych != 'e') goto yy329; ++YYCURSOR; -#line 679 "../src/parse/scanner_lex.re" +#line 658 "../src/parse/scanner_lex.re" { return CONF_YYFILL_ENABLE; } -#line 2382 "src/parse/scanner_lex.cc" -yy385: +#line 2109 "src/parse/scanner_lex.cc" +yy351: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'r') goto yy363; + if (yych != 'r') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'a') goto yy363; + if (yych != 'a') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'm') goto yy363; + if (yych != 'm') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'e') goto yy363; + if (yych != 'e') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 't') goto yy363; + if (yych != 't') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'e') goto yy363; + if (yych != 'e') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'r') goto yy363; + if (yych != 'r') goto yy329; ++YYCURSOR; -#line 680 "../src/parse/scanner_lex.re" +#line 659 "../src/parse/scanner_lex.re" { return CONF_YYFILL_PARAMETER; } -#line 2401 "src/parse/scanner_lex.cc" -yy394: +#line 2128 "src/parse/scanner_lex.cc" +yy360: yych = (YYCTYPE)*++YYCURSOR; - if (yych != ':') goto yy363; + if (yych != ':') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'c') goto yy397; - if (yych != 'e') goto yy363; + if (yych == 'c') goto yy363; + if (yych != 'e') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'm') goto yy408; - goto yy363; -yy397: + if (yych == 'm') goto yy374; + goto yy329; +yy363: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'o') goto yy363; + if (yych != 'o') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'n') goto yy363; + if (yych != 'n') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'v') goto yy363; + if (yych != 'v') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'e') goto yy363; + if (yych != 'e') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'r') goto yy363; + if (yych != 'r') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 's') goto yy363; + if (yych != 's') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'i') goto yy363; + if (yych != 'i') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'o') goto yy363; + if (yych != 'o') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'n') goto yy363; + if (yych != 'n') goto yy329; ++YYCURSOR; -#line 676 "../src/parse/scanner_lex.re" +#line 655 "../src/parse/scanner_lex.re" { return CONF_YYCH_CONVERSION; } -#line 2433 "src/parse/scanner_lex.cc" -yy408: +#line 2160 "src/parse/scanner_lex.cc" +yy374: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'i') goto yy363; + if (yych != 'i') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 't') goto yy363; + if (yych != 't') goto yy329; ++YYCURSOR; -#line 677 "../src/parse/scanner_lex.re" +#line 656 "../src/parse/scanner_lex.re" { return CONF_YYCH_EMIT; } -#line 2442 "src/parse/scanner_lex.cc" -yy412: +#line 2169 "src/parse/scanner_lex.cc" +yy378: yych = (YYCTYPE)*++YYCURSOR; - if (yych != ':') goto yy363; + if (yych != ':') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'h') goto yy363; + if (yych != 'h') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'e') goto yy363; + if (yych != 'e') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'x') goto yy363; + if (yych != 'x') goto yy329; ++YYCURSOR; -#line 675 "../src/parse/scanner_lex.re" +#line 654 "../src/parse/scanner_lex.re" { return CONF_YYBM_HEX; } -#line 2455 "src/parse/scanner_lex.cc" -yy418: +#line 2182 "src/parse/scanner_lex.cc" +yy384: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'r') goto yy363; + if (yych != 'r') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'i') goto yy363; + if (yych != 'i') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'a') goto yy363; + if (yych != 'a') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'b') goto yy363; + if (yych != 'b') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'l') goto yy363; + if (yych != 'l') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'e') goto yy363; + if (yych != 'e') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != ':') goto yy363; + if (yych != ':') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'y') goto yy363; + if (yych != 'y') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'y') goto yy363; + if (yych != 'y') goto yy329; yych = (YYCTYPE)*++YYCURSOR; if (yych <= 'c') { - if (yych <= '`') goto yy363; - if (yych <= 'a') goto yy428; - if (yych <= 'b') goto yy429; - goto yy430; + if (yych <= '`') goto yy329; + if (yych <= 'a') goto yy394; + if (yych <= 'b') goto yy395; + goto yy396; } else { - if (yych <= 'r') goto yy363; - if (yych <= 's') goto yy431; - if (yych <= 't') goto yy432; - goto yy363; + if (yych <= 'r') goto yy329; + if (yych <= 's') goto yy397; + if (yych <= 't') goto yy398; + goto yy329; } -yy428: +yy394: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'c') goto yy447; - goto yy363; -yy429: + if (yych == 'c') goto yy413; + goto yy329; +yy395: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'm') goto yy437; - goto yy363; -yy430: + if (yych == 'm') goto yy403; + goto yy329; +yy396: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'h') goto yy437; - if (yych == 't') goto yy443; - goto yy363; -yy431: + if (yych == 'h') goto yy403; + if (yych == 't') goto yy409; + goto yy329; +yy397: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 't') goto yy439; - goto yy363; -yy432: + if (yych == 't') goto yy405; + goto yy329; +yy398: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'a') goto yy363; + if (yych != 'a') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'r') goto yy363; + if (yych != 'r') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'g') goto yy363; + if (yych != 'g') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'e') goto yy363; + if (yych != 'e') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 't') goto yy363; -yy437: + if (yych != 't') goto yy329; +yy403: ++YYCURSOR; -#line 637 "../src/parse/scanner_lex.re" +#line 616 "../src/parse/scanner_lex.re" { tok += sizeof "variable:" - 1; yylval.str = new std::string (tok, tok_len ()); return CONF; } -#line 2523 "src/parse/scanner_lex.cc" -yy439: +#line 2250 "src/parse/scanner_lex.cc" +yy405: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'a') goto yy363; + if (yych != 'a') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'b') goto yy363; + if (yych != 'b') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'l') goto yy363; + if (yych != 'l') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'e') goto yy437; - goto yy363; -yy443: + if (yych == 'e') goto yy403; + goto yy329; +yy409: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'a') goto yy363; + if (yych != 'a') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'b') goto yy363; + if (yych != 'b') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'l') goto yy363; + if (yych != 'l') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'e') goto yy437; - goto yy363; -yy447: + if (yych == 'e') goto yy403; + goto yy329; +yy413: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'c') goto yy363; + if (yych != 'c') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'e') goto yy363; + if (yych != 'e') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'p') goto yy363; + if (yych != 'p') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych == 't') goto yy437; - goto yy363; -yy451: + if (yych == 't') goto yy403; + goto yy329; +yy417: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'a') goto yy363; + if (yych != 'a') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'r') goto yy454; - if (yych != 't') goto yy363; + if (yych == 'r') goto yy420; + if (yych != 't') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'e') goto yy462; - goto yy363; -yy454: + if (yych == 'e') goto yy428; + goto yy329; +yy420: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 't') goto yy363; + if (yych != 't') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'l') goto yy363; + if (yych != 'l') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'a') goto yy363; + if (yych != 'a') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'b') goto yy363; + if (yych != 'b') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'e') goto yy363; + if (yych != 'e') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'l') goto yy363; + if (yych != 'l') goto yy329; ++YYCURSOR; -#line 672 "../src/parse/scanner_lex.re" +#line 651 "../src/parse/scanner_lex.re" { return CONF_STARTLABEL; } -#line 2579 "src/parse/scanner_lex.cc" -yy462: +#line 2306 "src/parse/scanner_lex.cc" +yy428: yych = (YYCTYPE)*++YYCURSOR; - if (yych != ':') goto yy363; + if (yych != ':') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'a') goto yy464; - if (yych == 'n') goto yy465; - goto yy363; -yy464: + if (yych == 'a') goto yy430; + if (yych == 'n') goto yy431; + goto yy329; +yy430: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'b') goto yy475; - goto yy363; -yy465: + if (yych == 'b') goto yy441; + goto yy329; +yy431: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'e') goto yy363; + if (yych != 'e') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'x') goto yy363; + if (yych != 'x') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 't') goto yy363; + if (yych != 't') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'l') goto yy363; + if (yych != 'l') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'a') goto yy363; + if (yych != 'a') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'b') goto yy363; + if (yych != 'b') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'e') goto yy363; + if (yych != 'e') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'l') goto yy363; + if (yych != 'l') goto yy329; ++YYCURSOR; -#line 674 "../src/parse/scanner_lex.re" +#line 653 "../src/parse/scanner_lex.re" { return CONF_STATE_NEXTLABEL; } -#line 2611 "src/parse/scanner_lex.cc" -yy475: +#line 2338 "src/parse/scanner_lex.cc" +yy441: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'o') goto yy363; + if (yych != 'o') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'r') goto yy363; + if (yych != 'r') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 't') goto yy363; + if (yych != 't') goto yy329; ++YYCURSOR; -#line 673 "../src/parse/scanner_lex.re" +#line 652 "../src/parse/scanner_lex.re" { return CONF_STATE_ABORT; } -#line 2622 "src/parse/scanner_lex.cc" -yy480: +#line 2349 "src/parse/scanner_lex.cc" +yy446: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'b') goto yy363; + if (yych != 'b') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'e') goto yy363; + if (yych != 'e') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'l') goto yy363; + if (yych != 'l') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych == ':') goto yy485; - if (yych != 'p') goto yy363; + if (yych == ':') goto yy451; + if (yych != 'p') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'r') goto yy501; - goto yy363; -yy485: + if (yych == 'r') goto yy467; + goto yy329; +yy451: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'y') goto yy363; + if (yych != 'y') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'y') goto yy363; + if (yych != 'y') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'F') goto yy488; - if (yych == 'N') goto yy489; - goto yy363; -yy488: + if (yych == 'F') goto yy454; + if (yych == 'N') goto yy455; + goto yy329; +yy454: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'i') goto yy494; - goto yy363; -yy489: + if (yych == 'i') goto yy460; + goto yy329; +yy455: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'e') goto yy363; + if (yych != 'e') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'x') goto yy363; + if (yych != 'x') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 't') goto yy363; -yy492: + if (yych != 't') goto yy329; +yy458: ++YYCURSOR; -#line 623 "../src/parse/scanner_lex.re" +#line 602 "../src/parse/scanner_lex.re" { tok += sizeof "label:" - 1; yylval.str = new std::string (tok, tok_len ()); return CONF; } -#line 2664 "src/parse/scanner_lex.cc" -yy494: +#line 2391 "src/parse/scanner_lex.cc" +yy460: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'l') goto yy363; + if (yych != 'l') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'l') goto yy363; + if (yych != 'l') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'L') goto yy363; + if (yych != 'L') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'a') goto yy363; + if (yych != 'a') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'b') goto yy363; + if (yych != 'b') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'e') goto yy363; + if (yych != 'e') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'l') goto yy492; - goto yy363; -yy501: + if (yych == 'l') goto yy458; + goto yy329; +yy467: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'e') goto yy363; + if (yych != 'e') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'f') goto yy363; + if (yych != 'f') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'i') goto yy363; + if (yych != 'i') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'x') goto yy363; + if (yych != 'x') goto yy329; ++YYCURSOR; -#line 671 "../src/parse/scanner_lex.re" +#line 650 "../src/parse/scanner_lex.re" { return CONF_LABELPREFIX; } -#line 2693 "src/parse/scanner_lex.cc" -yy507: +#line 2420 "src/parse/scanner_lex.cc" +yy473: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'd') goto yy363; + if (yych != 'd') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'e') goto yy363; + if (yych != 'e') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'n') goto yy363; + if (yych != 'n') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 't') goto yy363; + if (yych != 't') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != ':') goto yy363; + if (yych != ':') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 'r') goto yy363; - if (yych <= 's') goto yy514; - if (yych >= 'u') goto yy363; + if (yych <= 'r') goto yy329; + if (yych <= 's') goto yy480; + if (yych >= 'u') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'o') goto yy521; - goto yy363; -yy514: + if (yych == 'o') goto yy487; + goto yy329; +yy480: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 't') goto yy363; + if (yych != 't') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'r') goto yy363; + if (yych != 'r') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'i') goto yy363; + if (yych != 'i') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'n') goto yy363; + if (yych != 'n') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'g') goto yy363; + if (yych != 'g') goto yy329; ++YYCURSOR; -#line 669 "../src/parse/scanner_lex.re" +#line 648 "../src/parse/scanner_lex.re" { return CONF_INDENT_STRING; } -#line 2726 "src/parse/scanner_lex.cc" -yy521: +#line 2453 "src/parse/scanner_lex.cc" +yy487: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'p') goto yy363; + if (yych != 'p') goto yy329; ++YYCURSOR; -#line 670 "../src/parse/scanner_lex.re" +#line 649 "../src/parse/scanner_lex.re" { return CONF_INDENT_TOP; } -#line 2733 "src/parse/scanner_lex.cc" -yy524: +#line 2460 "src/parse/scanner_lex.cc" +yy490: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'a') goto yy363; + if (yych != 'a') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'g') goto yy363; + if (yych != 'g') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 's') goto yy363; + if (yych != 's') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != ':') goto yy363; + if (yych != ':') goto yy329; yych = (YYCTYPE)*++YYCURSOR; if (yych <= 'e') { - if (yych == '8') goto yy529; - if (yych <= 'd') goto yy363; + if (yych == '8') goto yy495; + if (yych <= 'd') goto yy329; } else { if (yych <= 'u') { - if (yych <= 't') goto yy363; + if (yych <= 't') goto yy329; } else { - if (yych <= 'v') goto yy363; - if (yych >= 'y') goto yy363; + if (yych <= 'v') goto yy329; + if (yych >= 'y') goto yy329; } } -yy529: +yy495: ++YYCURSOR; -#line 658 "../src/parse/scanner_lex.re" +#line 637 "../src/parse/scanner_lex.re" { switch (YYCURSOR[-1]) { @@ -2765,584 +2492,584 @@ yy529: } return CONF_FLAGS; } -#line 2769 "src/parse/scanner_lex.cc" -yy531: +#line 2496 "src/parse/scanner_lex.cc" +yy497: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'f') goto yy363; + if (yych != 'f') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'i') goto yy363; + if (yych != 'i') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'n') goto yy363; + if (yych != 'n') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'e') goto yy363; + if (yych != 'e') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != ':') goto yy363; + if (yych != ':') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'Y') goto yy363; + if (yych != 'Y') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'Y') goto yy363; + if (yych != 'Y') goto yy329; yych = (YYCTYPE)*++YYCURSOR; switch (yych) { - case 'B': goto yy542; - case 'C': goto yy543; - case 'D': goto yy544; - case 'F': goto yy541; - case 'G': goto yy540; - case 'L': goto yy545; - case 'M': goto yy546; - case 'P': goto yy547; - case 'R': goto yy548; - case 'S': goto yy539; - default: goto yy363; - } -yy539: - yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'E') goto yy649; - if (yych == 'K') goto yy648; - goto yy363; -yy540: - yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'E') goto yy618; - goto yy363; -yy541: + case 'B': goto yy508; + case 'C': goto yy509; + case 'D': goto yy510; + case 'F': goto yy507; + case 'G': goto yy506; + case 'L': goto yy511; + case 'M': goto yy512; + case 'P': goto yy513; + case 'R': goto yy514; + case 'S': goto yy505; + default: goto yy329; + } +yy505: + yych = (YYCTYPE)*++YYCURSOR; + if (yych == 'E') goto yy615; + if (yych == 'K') goto yy614; + goto yy329; +yy506: + yych = (YYCTYPE)*++YYCURSOR; + if (yych == 'E') goto yy584; + goto yy329; +yy507: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'I') goto yy603; - goto yy363; -yy542: + if (yych == 'I') goto yy569; + goto yy329; +yy508: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'A') goto yy596; - goto yy363; -yy543: + if (yych == 'A') goto yy562; + goto yy329; +yy509: yych = (YYCTYPE)*++YYCURSOR; if (yych <= 'S') { - if (yych == 'O') goto yy579; - goto yy363; + if (yych == 'O') goto yy545; + goto yy329; } else { - if (yych <= 'T') goto yy578; - if (yych <= 'U') goto yy577; - goto yy363; + if (yych <= 'T') goto yy544; + if (yych <= 'U') goto yy543; + goto yy329; } -yy544: +yy510: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'E') goto yy574; - goto yy363; -yy545: + if (yych == 'E') goto yy540; + goto yy329; +yy511: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'E') goto yy566; - if (yych == 'I') goto yy565; - goto yy363; -yy546: + if (yych == 'E') goto yy532; + if (yych == 'I') goto yy531; + goto yy329; +yy512: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'A') goto yy561; - goto yy363; -yy547: + if (yych == 'A') goto yy527; + goto yy329; +yy513: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'E') goto yy559; - goto yy363; -yy548: + if (yych == 'E') goto yy525; + goto yy329; +yy514: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'E') goto yy363; + if (yych != 'E') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'S') goto yy363; + if (yych != 'S') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'T') goto yy363; + if (yych != 'T') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'O') goto yy363; + if (yych != 'O') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'R') goto yy363; + if (yych != 'R') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'E') goto yy363; + if (yych != 'E') goto yy329; yyaccept = 1; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych == 'C') goto yy556; -yy555: -#line 613 "../src/parse/scanner_lex.re" + if (yych == 'C') goto yy522; +yy521: +#line 592 "../src/parse/scanner_lex.re" { tok += sizeof "define:" - 1; yylval.str = new std::string (tok, tok_len ()); return CONF; } -#line 2866 "src/parse/scanner_lex.cc" -yy556: +#line 2593 "src/parse/scanner_lex.cc" +yy522: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'T') goto yy363; + if (yych != 'T') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'X') goto yy363; -yy558: + if (yych != 'X') goto yy329; +yy524: yych = (YYCTYPE)*++YYCURSOR; - goto yy555; -yy559: + goto yy521; +yy525: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'E') goto yy363; + if (yych != 'E') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'K') goto yy558; - goto yy363; -yy561: + if (yych == 'K') goto yy524; + goto yy329; +yy527: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'R') goto yy363; + if (yych != 'R') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'K') goto yy363; + if (yych != 'K') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'E') goto yy363; + if (yych != 'E') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'R') goto yy558; - goto yy363; -yy565: + if (yych == 'R') goto yy524; + goto yy329; +yy531: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'M') goto yy572; - goto yy363; -yy566: + if (yych == 'M') goto yy538; + goto yy329; +yy532: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'S') goto yy363; + if (yych != 'S') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'S') goto yy363; + if (yych != 'S') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'T') goto yy363; + if (yych != 'T') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'H') goto yy363; + if (yych != 'H') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'A') goto yy363; + if (yych != 'A') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'N') goto yy558; - goto yy363; -yy572: + if (yych == 'N') goto yy524; + goto yy329; +yy538: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'I') goto yy363; + if (yych != 'I') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'T') goto yy558; - goto yy363; -yy574: + if (yych == 'T') goto yy524; + goto yy329; +yy540: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'B') goto yy363; + if (yych != 'B') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'U') goto yy363; + if (yych != 'U') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'G') goto yy558; - goto yy363; -yy577: + if (yych == 'G') goto yy524; + goto yy329; +yy543: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'R') goto yy593; - goto yy363; -yy578: + if (yych == 'R') goto yy559; + goto yy329; +yy544: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= 'W') goto yy363; - if (yych <= 'X') goto yy585; - if (yych <= 'Y') goto yy586; - goto yy363; -yy579: + if (yych <= 'W') goto yy329; + if (yych <= 'X') goto yy551; + if (yych <= 'Y') goto yy552; + goto yy329; +yy545: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'N') goto yy363; + if (yych != 'N') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'D') goto yy363; + if (yych != 'D') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'T') goto yy363; + if (yych != 'T') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'Y') goto yy363; + if (yych != 'Y') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'P') goto yy363; + if (yych != 'P') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'E') goto yy558; - goto yy363; -yy585: + if (yych == 'E') goto yy524; + goto yy329; +yy551: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'M') goto yy588; - goto yy363; -yy586: + if (yych == 'M') goto yy554; + goto yy329; +yy552: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'P') goto yy363; + if (yych != 'P') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'E') goto yy558; - goto yy363; -yy588: + if (yych == 'E') goto yy524; + goto yy329; +yy554: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'A') goto yy363; + if (yych != 'A') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'R') goto yy363; + if (yych != 'R') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'K') goto yy363; + if (yych != 'K') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'E') goto yy363; + if (yych != 'E') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'R') goto yy558; - goto yy363; -yy593: + if (yych == 'R') goto yy524; + goto yy329; +yy559: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'S') goto yy363; + if (yych != 'S') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'O') goto yy363; + if (yych != 'O') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'R') goto yy558; - goto yy363; -yy596: + if (yych == 'R') goto yy524; + goto yy329; +yy562: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'C') goto yy363; + if (yych != 'C') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'K') goto yy363; + if (yych != 'K') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'U') goto yy363; + if (yych != 'U') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'P') goto yy363; + if (yych != 'P') goto yy329; yyaccept = 1; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych != 'C') goto yy555; + if (yych != 'C') goto yy521; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'T') goto yy363; + if (yych != 'T') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'X') goto yy558; - goto yy363; -yy603: + if (yych == 'X') goto yy524; + goto yy329; +yy569: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'L') goto yy363; + if (yych != 'L') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'L') goto yy363; + if (yych != 'L') goto yy329; yyaccept = 1; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych == ':') goto yy607; - if (yych != '@') goto yy555; + if (yych == ':') goto yy573; + if (yych != '@') goto yy521; yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'l') goto yy614; - goto yy363; -yy607: + if (yych == 'l') goto yy580; + goto yy329; +yy573: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'n') goto yy363; + if (yych != 'n') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'a') goto yy363; + if (yych != 'a') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'k') goto yy363; + if (yych != 'k') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'e') goto yy363; + if (yych != 'e') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'd') goto yy363; + if (yych != 'd') goto yy329; ++YYCURSOR; -#line 650 "../src/parse/scanner_lex.re" +#line 629 "../src/parse/scanner_lex.re" { return CONF_DEFINE_YYFILL_NAKED; } -#line 3020 "src/parse/scanner_lex.cc" -yy614: +#line 2747 "src/parse/scanner_lex.cc" +yy580: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'e') goto yy363; + if (yych != 'e') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'n') goto yy363; + if (yych != 'n') goto yy329; ++YYCURSOR; -#line 651 "../src/parse/scanner_lex.re" +#line 630 "../src/parse/scanner_lex.re" { return CONF_DEFINE_YYFILL_LEN; } -#line 3029 "src/parse/scanner_lex.cc" -yy618: +#line 2756 "src/parse/scanner_lex.cc" +yy584: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'T') goto yy363; + if (yych != 'T') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'C') goto yy621; - if (yych != 'S') goto yy363; + if (yych == 'C') goto yy587; + if (yych != 'S') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'T') goto yy637; - goto yy363; -yy621: + if (yych == 'T') goto yy603; + goto yy329; +yy587: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'O') goto yy363; + if (yych != 'O') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'N') goto yy363; + if (yych != 'N') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'D') goto yy363; + if (yych != 'D') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'I') goto yy363; + if (yych != 'I') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'T') goto yy363; + if (yych != 'T') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'I') goto yy363; + if (yych != 'I') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'O') goto yy363; + if (yych != 'O') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'N') goto yy363; + if (yych != 'N') goto yy329; yyaccept = 1; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych != ':') goto yy555; + if (yych != ':') goto yy521; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'n') goto yy363; + if (yych != 'n') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'a') goto yy363; + if (yych != 'a') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'k') goto yy363; + if (yych != 'k') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'e') goto yy363; + if (yych != 'e') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'd') goto yy363; + if (yych != 'd') goto yy329; ++YYCURSOR; -#line 652 "../src/parse/scanner_lex.re" +#line 631 "../src/parse/scanner_lex.re" { return CONF_DEFINE_YYGETCONDITION_NAKED; } -#line 3072 "src/parse/scanner_lex.cc" -yy637: +#line 2799 "src/parse/scanner_lex.cc" +yy603: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'A') goto yy363; + if (yych != 'A') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'T') goto yy363; + if (yych != 'T') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'E') goto yy363; + if (yych != 'E') goto yy329; yyaccept = 1; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych != ':') goto yy555; + if (yych != ':') goto yy521; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'n') goto yy363; + if (yych != 'n') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'a') goto yy363; + if (yych != 'a') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'k') goto yy363; + if (yych != 'k') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'e') goto yy363; + if (yych != 'e') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'd') goto yy363; + if (yych != 'd') goto yy329; ++YYCURSOR; -#line 653 "../src/parse/scanner_lex.re" +#line 632 "../src/parse/scanner_lex.re" { return CONF_DEFINE_YYGETSTATE_NAKED; } -#line 3096 "src/parse/scanner_lex.cc" -yy648: +#line 2823 "src/parse/scanner_lex.cc" +yy614: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'I') goto yy685; - goto yy363; -yy649: + if (yych == 'I') goto yy651; + goto yy329; +yy615: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'T') goto yy363; + if (yych != 'T') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'C') goto yy652; - if (yych != 'S') goto yy363; + if (yych == 'C') goto yy618; + if (yych != 'S') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'T') goto yy667; - goto yy363; -yy652: + if (yych == 'T') goto yy633; + goto yy329; +yy618: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'O') goto yy363; + if (yych != 'O') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'N') goto yy363; + if (yych != 'N') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'D') goto yy363; + if (yych != 'D') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'I') goto yy363; + if (yych != 'I') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'T') goto yy363; + if (yych != 'T') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'I') goto yy363; + if (yych != 'I') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'O') goto yy363; + if (yych != 'O') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'N') goto yy363; + if (yych != 'N') goto yy329; yyaccept = 1; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych != '@') goto yy555; + if (yych != '@') goto yy521; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'c') goto yy363; + if (yych != 'c') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'o') goto yy363; + if (yych != 'o') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'n') goto yy363; + if (yych != 'n') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'd') goto yy363; + if (yych != 'd') goto yy329; ++YYCURSOR; -#line 654 "../src/parse/scanner_lex.re" +#line 633 "../src/parse/scanner_lex.re" { return CONF_DEFINE_YYSETCONDITION_COND; } -#line 3141 "src/parse/scanner_lex.cc" -yy667: +#line 2868 "src/parse/scanner_lex.cc" +yy633: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'A') goto yy363; + if (yych != 'A') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'T') goto yy363; + if (yych != 'T') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'E') goto yy363; + if (yych != 'E') goto yy329; yyaccept = 1; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych == ':') goto yy672; - if (yych != '@') goto yy555; + if (yych == ':') goto yy638; + if (yych != '@') goto yy521; yych = (YYCTYPE)*++YYCURSOR; - if (yych == 's') goto yy679; - goto yy363; -yy672: + if (yych == 's') goto yy645; + goto yy329; +yy638: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'n') goto yy363; + if (yych != 'n') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'a') goto yy363; + if (yych != 'a') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'k') goto yy363; + if (yych != 'k') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'e') goto yy363; + if (yych != 'e') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'd') goto yy363; + if (yych != 'd') goto yy329; ++YYCURSOR; -#line 655 "../src/parse/scanner_lex.re" +#line 634 "../src/parse/scanner_lex.re" { return CONF_DEFINE_YYSETSTATE_NAKED; } -#line 3170 "src/parse/scanner_lex.cc" -yy679: +#line 2897 "src/parse/scanner_lex.cc" +yy645: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 't') goto yy363; + if (yych != 't') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'a') goto yy363; + if (yych != 'a') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 't') goto yy363; + if (yych != 't') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'e') goto yy363; + if (yych != 'e') goto yy329; ++YYCURSOR; -#line 656 "../src/parse/scanner_lex.re" +#line 635 "../src/parse/scanner_lex.re" { return CONF_DEFINE_YYSETSTATE_STATE; } -#line 3183 "src/parse/scanner_lex.cc" -yy685: +#line 2910 "src/parse/scanner_lex.cc" +yy651: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'P') goto yy558; - goto yy363; -yy686: + if (yych == 'P') goto yy524; + goto yy329; +yy652: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'o') goto yy734; - goto yy363; -yy687: + if (yych == 'o') goto yy700; + goto yy329; +yy653: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'n') goto yy363; + if (yych != 'n') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'd') goto yy363; + if (yych != 'd') goto yy329; yych = (YYCTYPE)*++YYCURSOR; if (yych <= 'd') { - if (yych == ':') goto yy692; - goto yy363; + if (yych == ':') goto yy658; + goto yy329; } else { - if (yych <= 'e') goto yy691; - if (yych != 'p') goto yy363; + if (yych <= 'e') goto yy657; + if (yych != 'p') goto yy329; } yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'r') goto yy728; - goto yy363; -yy691: + if (yych == 'r') goto yy694; + goto yy329; +yy657: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'n') goto yy718; - goto yy363; -yy692: + if (yych == 'n') goto yy684; + goto yy329; +yy658: yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'd') goto yy694; - if (yych != 'g') goto yy363; + if (yych == 'd') goto yy660; + if (yych != 'g') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych == 'o') goto yy708; - goto yy363; -yy694: + if (yych == 'o') goto yy674; + goto yy329; +yy660: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'i') goto yy363; + if (yych != 'i') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'v') goto yy363; + if (yych != 'v') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'i') goto yy363; + if (yych != 'i') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'd') goto yy363; + if (yych != 'd') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'e') goto yy363; + if (yych != 'e') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'r') goto yy363; + if (yych != 'r') goto yy329; yyaccept = 2; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych == '@') goto yy702; -yy701: -#line 645 "../src/parse/scanner_lex.re" + if (yych == '@') goto yy668; +yy667: +#line 624 "../src/parse/scanner_lex.re" { return CONF_COND_DIVIDER; } -#line 3238 "src/parse/scanner_lex.cc" -yy702: +#line 2965 "src/parse/scanner_lex.cc" +yy668: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'c') goto yy363; + if (yych != 'c') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'o') goto yy363; + if (yych != 'o') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'n') goto yy363; + if (yych != 'n') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'd') goto yy363; + if (yych != 'd') goto yy329; ++YYCURSOR; -#line 646 "../src/parse/scanner_lex.re" +#line 625 "../src/parse/scanner_lex.re" { return CONF_COND_DIVIDER_COND; } -#line 3251 "src/parse/scanner_lex.cc" -yy708: +#line 2978 "src/parse/scanner_lex.cc" +yy674: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 't') goto yy363; + if (yych != 't') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'o') goto yy363; + if (yych != 'o') goto yy329; yyaccept = 3; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych == '@') goto yy712; -yy711: -#line 647 "../src/parse/scanner_lex.re" + if (yych == '@') goto yy678; +yy677: +#line 626 "../src/parse/scanner_lex.re" { return CONF_COND_GOTO; } -#line 3263 "src/parse/scanner_lex.cc" -yy712: +#line 2990 "src/parse/scanner_lex.cc" +yy678: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'c') goto yy363; + if (yych != 'c') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'o') goto yy363; + if (yych != 'o') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'n') goto yy363; + if (yych != 'n') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'd') goto yy363; + if (yych != 'd') goto yy329; ++YYCURSOR; -#line 648 "../src/parse/scanner_lex.re" +#line 627 "../src/parse/scanner_lex.re" { return CONF_COND_GOTO_COND; } -#line 3276 "src/parse/scanner_lex.cc" -yy718: +#line 3003 "src/parse/scanner_lex.cc" +yy684: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'u') goto yy363; + if (yych != 'u') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'm') goto yy363; + if (yych != 'm') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'p') goto yy363; + if (yych != 'p') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'r') goto yy363; + if (yych != 'r') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'e') goto yy363; + if (yych != 'e') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'f') goto yy363; + if (yych != 'f') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'i') goto yy363; + if (yych != 'i') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'x') goto yy363; + if (yych != 'x') goto yy329; ++YYCURSOR; -#line 644 "../src/parse/scanner_lex.re" +#line 623 "../src/parse/scanner_lex.re" { return CONF_CONDENUMPREFIX; } -#line 3297 "src/parse/scanner_lex.cc" -yy728: +#line 3024 "src/parse/scanner_lex.cc" +yy694: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'e') goto yy363; + if (yych != 'e') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'f') goto yy363; + if (yych != 'f') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'i') goto yy363; + if (yych != 'i') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'x') goto yy363; + if (yych != 'x') goto yy329; ++YYCURSOR; -#line 643 "../src/parse/scanner_lex.re" +#line 622 "../src/parse/scanner_lex.re" { return CONF_CONDPREFIX; } -#line 3310 "src/parse/scanner_lex.cc" -yy734: +#line 3037 "src/parse/scanner_lex.cc" +yy700: yych = (YYCTYPE)*++YYCURSOR; - if (yych != 't') goto yy363; + if (yych != 't') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'o') goto yy363; + if (yych != 'o') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != ':') goto yy363; + if (yych != ':') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 't') goto yy363; + if (yych != 't') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'h') goto yy363; + if (yych != 'h') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'r') goto yy363; + if (yych != 'r') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'e') goto yy363; + if (yych != 'e') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 's') goto yy363; + if (yych != 's') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'h') goto yy363; + if (yych != 'h') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'o') goto yy363; + if (yych != 'o') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'l') goto yy363; + if (yych != 'l') goto yy329; yych = (YYCTYPE)*++YYCURSOR; - if (yych != 'd') goto yy363; + if (yych != 'd') goto yy329; ++YYCURSOR; -#line 649 "../src/parse/scanner_lex.re" +#line 628 "../src/parse/scanner_lex.re" { return CONF_CGOTO_THRESHOLD; } -#line 3339 "src/parse/scanner_lex.cc" +#line 3066 "src/parse/scanner_lex.cc" } -#line 681 "../src/parse/scanner_lex.re" +#line 660 "../src/parse/scanner_lex.re" conf_eq: -#line 3346 "src/parse/scanner_lex.cc" +#line 3073 "src/parse/scanner_lex.cc" { YYCTYPE yych; static const unsigned char yybm[] = { @@ -3382,143 +3109,136 @@ conf_eq: if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = (YYCTYPE)*YYCURSOR; if (yych <= 0x1F) { - if (yych == '\t') goto yy752; + if (yych == '\t') goto yy718; } else { - if (yych <= ' ') goto yy752; - if (yych == '=') goto yy753; + if (yych <= ' ') goto yy718; + if (yych == '=') goto yy719; } ++YYCURSOR; -yy751: -#line 685 "../src/parse/scanner_lex.re" +yy717: +#line 664 "../src/parse/scanner_lex.re" { fatal ("missing '=' in configuration"); } -#line 3395 "src/parse/scanner_lex.cc" -yy752: +#line 3122 "src/parse/scanner_lex.cc" +yy718: yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); if (yych <= 0x1F) { - if (yych == '\t') goto yy757; - goto yy751; + if (yych == '\t') goto yy723; + goto yy717; } else { - if (yych <= ' ') goto yy757; - if (yych == '=') goto yy755; - goto yy751; + if (yych <= ' ') goto yy723; + if (yych == '=') goto yy721; + goto yy717; } -yy753: +yy719: ++YYCURSOR; yych = (YYCTYPE)*YYCURSOR; - goto yy756; -yy754: -#line 686 "../src/parse/scanner_lex.re" + goto yy722; +yy720: +#line 665 "../src/parse/scanner_lex.re" { goto conf_val; } -#line 3413 "src/parse/scanner_lex.cc" -yy755: +#line 3140 "src/parse/scanner_lex.cc" +yy721: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; -yy756: +yy722: if (yybm[0+yych] & 128) { - goto yy755; + goto yy721; } - goto yy754; -yy757: + goto yy720; +yy723: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; if (yych <= 0x1F) { - if (yych == '\t') goto yy757; + if (yych == '\t') goto yy723; } else { - if (yych <= ' ') goto yy757; - if (yych == '=') goto yy755; + if (yych <= ' ') goto yy723; + if (yych == '=') goto yy721; } YYCURSOR = YYMARKER; - goto yy751; + goto yy717; } -#line 687 "../src/parse/scanner_lex.re" +#line 666 "../src/parse/scanner_lex.re" conf_val: tok = cur; lexer_state = LEX_NORMAL; -#line 3443 "src/parse/scanner_lex.cc" +#line 3170 "src/parse/scanner_lex.cc" { YYCTYPE yych; static const unsigned char yybm[] = { - 248, 248, 248, 248, 248, 248, 248, 248, - 248, 192, 0, 248, 248, 192, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, - 192, 248, 112, 248, 248, 248, 248, 168, - 248, 248, 248, 248, 248, 248, 248, 248, - 252, 252, 252, 252, 252, 252, 252, 252, - 252, 252, 248, 192, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 32, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 0, 0, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 0, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 128, 0, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, }; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = (YYCTYPE)*YYCURSOR; - if (yych <= '&') { - if (yych <= '\r') { - if (yych <= 0x08) goto yy772; - if (yych <= '\n') goto yy762; - if (yych <= '\f') goto yy772; + if (yych <= '\'') { + if (yych <= ' ') { + if (yych <= 0x08) goto yy736; + if (yych <= '\n') goto yy728; + if (yych <= 0x1F) goto yy736; } else { - if (yych <= ' ') { - if (yych <= 0x1F) goto yy772; - } else { - if (yych == '"') goto yy768; - goto yy772; - } + if (yych == '"') goto yy734; + if (yych <= '&') goto yy736; + goto yy734; } } else { - if (yych <= '/') { - if (yych <= '\'') goto yy770; - if (yych == '-') goto yy765; - goto yy772; + if (yych <= '0') { + if (yych == '-') goto yy731; + if (yych <= '/') goto yy736; + goto yy729; } else { - if (yych <= '9') { - if (yych <= '0') goto yy763; - goto yy766; - } else { - if (yych != ';') goto yy772; - } + if (yych <= '9') goto yy732; + if (yych != ';') goto yy736; } } -yy762: -#line 709 "../src/parse/scanner_lex.re" +yy728: +#line 688 "../src/parse/scanner_lex.re" { yylval.str = new std::string (tok, tok_len ()); - return STR; + return STRING; } -#line 3515 "src/parse/scanner_lex.cc" -yy763: +#line 3235 "src/parse/scanner_lex.cc" +yy729: ++YYCURSOR; - if (yybm[0+(yych = (YYCTYPE)*YYCURSOR)] & 32) { - goto yy772; + if (yybm[0+(yych = (YYCTYPE)*YYCURSOR)] & 128) { + goto yy736; } -yy764: -#line 694 "../src/parse/scanner_lex.re" +yy730: +#line 673 "../src/parse/scanner_lex.re" { if (!s_to_i32_unsafe (tok, cur, yylval.num)) { @@ -3526,173 +3246,352 @@ yy764: } return NUM; } -#line 3530 "src/parse/scanner_lex.cc" -yy765: +#line 3250 "src/parse/scanner_lex.cc" +yy731: yych = (YYCTYPE)*++YYCURSOR; - if (yych <= '0') goto yy773; - if (yych >= ':') goto yy773; -yy766: + if (yych <= '0') goto yy737; + if (yych >= ':') goto yy737; +yy732: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; - if (yybm[0+yych] & 4) { - goto yy766; - } - if (yych <= '\r') { - if (yych <= 0x08) goto yy772; - if (yych <= '\n') goto yy764; - if (yych <= '\f') goto yy772; - goto yy764; - } else { - if (yych <= ' ') { - if (yych <= 0x1F) goto yy772; - goto yy764; - } else { - if (yych == ';') goto yy764; - goto yy772; - } - } -yy768: - YYMARKER = ++YYCURSOR; - if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); - yych = (YYCTYPE)*YYCURSOR; - if (yybm[0+yych] & 8) { - goto yy768; + if (yybm[0+yych] & 64) { + goto yy732; } - if (yych <= ' ') { - if (yych == '\n') goto yy762; - goto yy783; + if (yych <= 0x1F) { + if (yych <= 0x08) goto yy736; + if (yych <= '\n') goto yy730; + goto yy736; } else { - if (yych <= '"') goto yy774; - if (yych <= ';') goto yy783; - goto yy782; + if (yych <= ' ') goto yy730; + if (yych == ';') goto yy730; + goto yy736; } -yy770: - YYMARKER = ++YYCURSOR; - if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); - yych = (YYCTYPE)*YYCURSOR; - if (yybm[0+yych] & 16) { - goto yy770; - } - if (yych <= ' ') { - if (yych == '\n') goto yy762; - goto yy777; - } else { - if (yych <= '\'') goto yy774; - if (yych <= ';') goto yy777; - goto yy776; +yy734: + ++YYCURSOR; +#line 681 "../src/parse/scanner_lex.re" + { + std::vector cpoints; + lex_cpoints (tok[0], cpoints); + yylval.str = cpoint_conf (cpoints); + return STRING; } -yy772: +#line 3280 "src/parse/scanner_lex.cc" +yy736: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; -yy773: - if (yybm[0+yych] & 32) { - goto yy772; - } - goto yy762; -yy774: - ++YYCURSOR; - if (yybm[0+(yych = (YYCTYPE)*YYCURSOR)] & 32) { - goto yy772; +yy737: + if (yybm[0+yych] & 128) { + goto yy736; } -yy775: -#line 702 "../src/parse/scanner_lex.re" + goto yy728; +} +#line 692 "../src/parse/scanner_lex.re" + +} + +static void escape (std::string & dest, const std::string & src) +{ + dest = src; + size_t l = dest.length(); + for (size_t p = 0; p < l; ++p) { - yylval.str = new std::string (); - SubStr s (tok + 1, tok_len () - 2); // skip quotes - unescape (s, *(yylval.str)); - return STR; + if (dest[p] == '\\') + { + dest.insert(++p, "\\"); + ++l; + } } -#line 3608 "src/parse/scanner_lex.cc" -yy776: - YYMARKER = ++YYCURSOR; - if (YYLIMIT <= YYCURSOR) YYFILL(1); +} + +void Scanner::lex_cpoints (char quote, std::vector & cs) +{ + for (;;) + { + tok = cur; + +#line 3315 "src/parse/scanner_lex.cc" +{ + YYCTYPE yych; + unsigned int yyaccept = 0; + if ((YYLIMIT - YYCURSOR) < 10) YYFILL(10); yych = (YYCTYPE)*YYCURSOR; - if (yych <= '\r') { - if (yych <= '\t') { - if (yych <= 0x08) goto yy770; + if (yych == '\n') goto yy742; + if (yych == '\\') goto yy744; + ++YYCURSOR; +#line 734 "../src/parse/scanner_lex.re" + { + const char c = tok[0]; + if (c == quote) + { + return; + } + else + { + cs.push_back (static_cast (c)); + continue; + } + } +#line 3337 "src/parse/scanner_lex.cc" +yy742: + ++YYCURSOR; +#line 715 "../src/parse/scanner_lex.re" + { fatal ((tok - pos) - tchar, "syntax error"); } +#line 3342 "src/parse/scanner_lex.cc" +yy744: + ++YYCURSOR; + if ((yych = (YYCTYPE)*YYCURSOR) <= 'b') { + if (yych <= 'T') { + if (yych <= '/') { + if (yych != '\n') goto yy746; + } else { + if (yych <= '3') goto yy748; + if (yych <= '7') goto yy750; + goto yy746; + } } else { - if (yych <= '\n') goto yy762; - if (yych <= '\f') goto yy770; + if (yych <= 'X') { + if (yych <= 'U') goto yy751; + if (yych <= 'W') goto yy746; + goto yy753; + } else { + if (yych == '\\') goto yy754; + if (yych <= '`') goto yy746; + goto yy754; + } } } else { - if (yych <= ' ') { - if (yych <= 0x1F) goto yy770; + if (yych <= 'r') { + if (yych <= 'm') { + if (yych == 'f') goto yy754; + goto yy746; + } else { + if (yych <= 'n') goto yy754; + if (yych <= 'q') goto yy746; + goto yy754; + } } else { - if (yych != ';') goto yy770; + if (yych <= 'u') { + if (yych <= 's') goto yy746; + if (yych <= 't') goto yy754; + goto yy753; + } else { + if (yych <= 'v') goto yy754; + if (yych == 'x') goto yy756; + goto yy746; + } } } -yy777: +#line 718 "../src/parse/scanner_lex.re" + { fatal ((tok - pos) - tchar, "syntax error in escape sequence"); } +#line 3389 "src/parse/scanner_lex.cc" +yy746: ++YYCURSOR; - if (YYLIMIT <= YYCURSOR) YYFILL(1); - yych = (YYCTYPE)*YYCURSOR; - if (yybm[0+yych] & 64) { - goto yy777; - } - if (yych <= '\n') goto yy779; - if (yych <= '\'') goto yy780; - goto yy781; -yy779: - YYCURSOR = YYMARKER; - goto yy762; -yy780: +#line 724 "../src/parse/scanner_lex.re" + { + const char c = tok[1]; + if (c != quote) + { + warn.useless_escape (tline, tok - pos, c); + } + cs.push_back (static_cast (c)); + continue; + } +#line 3402 "src/parse/scanner_lex.cc" +yy748: + yyaccept = 0; + yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); + if (yych <= '/') goto yy749; + if (yych <= '7') goto yy771; +yy749: +#line 717 "../src/parse/scanner_lex.re" + { fatal ((tok - pos) - tchar, "syntax error in octal escape sequence"); } +#line 3411 "src/parse/scanner_lex.cc" +yy750: yych = (YYCTYPE)*++YYCURSOR; - goto yy775; -yy781: + goto yy749; +yy751: + yyaccept = 1; + yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); + if (yych <= '@') { + if (yych <= '/') goto yy752; + if (yych <= '9') goto yy764; + } else { + if (yych <= 'F') goto yy764; + if (yych <= '`') goto yy752; + if (yych <= 'f') goto yy764; + } +yy752: +#line 716 "../src/parse/scanner_lex.re" + { fatal ((tok - pos) - tchar, "syntax error in hexadecimal escape sequence"); } +#line 3429 "src/parse/scanner_lex.cc" +yy753: + yyaccept = 1; + yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); + if (yych <= '@') { + if (yych <= '/') goto yy752; + if (yych <= '9') goto yy761; + goto yy752; + } else { + if (yych <= 'F') goto yy761; + if (yych <= '`') goto yy752; + if (yych <= 'f') goto yy761; + goto yy752; + } +yy754: ++YYCURSOR; - if (YYLIMIT <= YYCURSOR) YYFILL(1); - yych = (YYCTYPE)*YYCURSOR; - if (yych == '\n') goto yy779; - goto yy777; -yy782: - YYMARKER = ++YYCURSOR; - if (YYLIMIT <= YYCURSOR) YYFILL(1); - yych = (YYCTYPE)*YYCURSOR; - if (yych <= '\r') { - if (yych <= '\t') { - if (yych <= 0x08) goto yy768; - } else { - if (yych <= '\n') goto yy762; - if (yych <= '\f') goto yy768; - } +#line 722 "../src/parse/scanner_lex.re" + { cs.push_back (unesc_simple (tok)); continue; } +#line 3447 "src/parse/scanner_lex.cc" +yy756: + yyaccept = 1; + yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); + if (yych <= '@') { + if (yych <= '/') goto yy752; + if (yych >= ':') goto yy752; } else { - if (yych <= ' ') { - if (yych <= 0x1F) goto yy768; - } else { - if (yych != ';') goto yy768; - } + if (yych <= 'F') goto yy757; + if (yych <= '`') goto yy752; + if (yych >= 'g') goto yy752; } -yy783: +yy757: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= '@') { + if (yych <= '/') goto yy758; + if (yych <= '9') goto yy759; + } else { + if (yych <= 'F') goto yy759; + if (yych <= '`') goto yy758; + if (yych <= 'f') goto yy759; + } +yy758: + YYCURSOR = YYMARKER; + if (yyaccept == 0) { + goto yy749; + } else { + goto yy752; + } +yy759: ++YYCURSOR; - if (YYLIMIT <= YYCURSOR) YYFILL(1); - yych = (YYCTYPE)*YYCURSOR; - if (yybm[0+yych] & 128) { - goto yy783; +#line 720 "../src/parse/scanner_lex.re" + { cs.push_back (unesc_hex (tok, cur)); continue; } +#line 3480 "src/parse/scanner_lex.cc" +yy761: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= '@') { + if (yych <= '/') goto yy758; + if (yych >= ':') goto yy758; + } else { + if (yych <= 'F') goto yy762; + if (yych <= '`') goto yy758; + if (yych >= 'g') goto yy758; + } +yy762: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= '@') { + if (yych <= '/') goto yy758; + if (yych >= ':') goto yy758; + } else { + if (yych <= 'F') goto yy763; + if (yych <= '`') goto yy758; + if (yych >= 'g') goto yy758; + } +yy763: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= '@') { + if (yych <= '/') goto yy758; + if (yych <= '9') goto yy759; + goto yy758; + } else { + if (yych <= 'F') goto yy759; + if (yych <= '`') goto yy758; + if (yych <= 'f') goto yy759; + goto yy758; + } +yy764: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= '@') { + if (yych <= '/') goto yy758; + if (yych >= ':') goto yy758; + } else { + if (yych <= 'F') goto yy765; + if (yych <= '`') goto yy758; + if (yych >= 'g') goto yy758; + } +yy765: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= '@') { + if (yych <= '/') goto yy758; + if (yych >= ':') goto yy758; + } else { + if (yych <= 'F') goto yy766; + if (yych <= '`') goto yy758; + if (yych >= 'g') goto yy758; + } +yy766: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= '@') { + if (yych <= '/') goto yy758; + if (yych >= ':') goto yy758; + } else { + if (yych <= 'F') goto yy767; + if (yych <= '`') goto yy758; + if (yych >= 'g') goto yy758; + } +yy767: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= '@') { + if (yych <= '/') goto yy758; + if (yych >= ':') goto yy758; + } else { + if (yych <= 'F') goto yy768; + if (yych <= '`') goto yy758; + if (yych >= 'g') goto yy758; + } +yy768: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= '@') { + if (yych <= '/') goto yy758; + if (yych >= ':') goto yy758; + } else { + if (yych <= 'F') goto yy769; + if (yych <= '`') goto yy758; + if (yych >= 'g') goto yy758; + } +yy769: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= '@') { + if (yych <= '/') goto yy758; + if (yych >= ':') goto yy758; + } else { + if (yych <= 'F') goto yy770; + if (yych <= '`') goto yy758; + if (yych >= 'g') goto yy758; + } +yy770: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= '@') { + if (yych <= '/') goto yy758; + if (yych <= '9') goto yy759; + goto yy758; + } else { + if (yych <= 'F') goto yy759; + if (yych <= '`') goto yy758; + if (yych <= 'f') goto yy759; + goto yy758; } - if (yych <= '\n') goto yy779; - if (yych <= '"') goto yy780; +yy771: + yych = (YYCTYPE)*++YYCURSOR; + if (yych <= '/') goto yy758; + if (yych >= '8') goto yy758; ++YYCURSOR; - if (YYLIMIT <= YYCURSOR) YYFILL(1); - yych = (YYCTYPE)*YYCURSOR; - if (yych == '\n') goto yy779; - goto yy783; -} -#line 713 "../src/parse/scanner_lex.re" - +#line 721 "../src/parse/scanner_lex.re" + { cs.push_back (unesc_oct (tok, cur)); continue; } +#line 3592 "src/parse/scanner_lex.cc" } +#line 746 "../src/parse/scanner_lex.re" -static void escape (std::string & dest, const std::string & src) -{ - dest = src; - size_t l = dest.length(); - for (size_t p = 0; p < l; ++p) - { - if (dest[p] == '\\') - { - dest.insert(++p, "\\"); - ++l; - } } } @@ -3701,7 +3600,7 @@ void Scanner::set_sourceline () sourceline: tok = cur; -#line 3705 "src/parse/scanner_lex.cc" +#line 3604 "src/parse/scanner_lex.cc" { YYCTYPE yych; static const unsigned char yybm[] = { @@ -3741,23 +3640,23 @@ sourceline: if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = (YYCTYPE)*YYCURSOR; if (yych <= '!') { - if (yych == '\n') goto yy790; + if (yych == '\n') goto yy778; } else { - if (yych <= '"') goto yy792; - if (yych <= '0') goto yy788; - if (yych <= '9') goto yy793; + if (yych <= '"') goto yy780; + if (yych <= '0') goto yy776; + if (yych <= '9') goto yy781; } -yy788: +yy776: ++YYCURSOR; -yy789: -#line 758 "../src/parse/scanner_lex.re" +yy777: +#line 778 "../src/parse/scanner_lex.re" { goto sourceline; } -#line 3758 "src/parse/scanner_lex.cc" -yy790: +#line 3657 "src/parse/scanner_lex.cc" +yy778: ++YYCURSOR; -#line 746 "../src/parse/scanner_lex.re" +#line 766 "../src/parse/scanner_lex.re" { if (cur == eof) { @@ -3770,17 +3669,17 @@ yy790: tok = cur; return; } -#line 3774 "src/parse/scanner_lex.cc" -yy792: +#line 3673 "src/parse/scanner_lex.cc" +yy780: yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); - if (yych == '\n') goto yy789; - goto yy798; -yy793: + if (yych == '\n') goto yy777; + goto yy786; +yy781: ++YYCURSOR; yych = (YYCTYPE)*YYCURSOR; - goto yy796; -yy794: -#line 735 "../src/parse/scanner_lex.re" + goto yy784; +yy782: +#line 755 "../src/parse/scanner_lex.re" { if (!s_to_u32_unsafe (tok, cur, cline)) { @@ -3788,46 +3687,46 @@ yy794: } goto sourceline; } -#line 3792 "src/parse/scanner_lex.cc" -yy795: +#line 3691 "src/parse/scanner_lex.cc" +yy783: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; -yy796: +yy784: if (yybm[0+yych] & 64) { - goto yy795; + goto yy783; } - goto yy794; -yy797: + goto yy782; +yy785: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; -yy798: +yy786: if (yybm[0+yych] & 128) { - goto yy797; + goto yy785; } - if (yych <= '\n') goto yy799; - if (yych <= '"') goto yy801; - goto yy800; -yy799: + if (yych <= '\n') goto yy787; + if (yych <= '"') goto yy789; + goto yy788; +yy787: YYCURSOR = YYMARKER; - goto yy789; -yy800: + goto yy777; +yy788: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = (YYCTYPE)*YYCURSOR; - if (yych == '\n') goto yy799; - goto yy797; -yy801: + if (yych == '\n') goto yy787; + goto yy785; +yy789: ++YYCURSOR; -#line 742 "../src/parse/scanner_lex.re" +#line 762 "../src/parse/scanner_lex.re" { escape (in.file_name, std::string (tok + 1, tok_len () - 2)); // -2 to omit quotes goto sourceline; } -#line 3829 "src/parse/scanner_lex.cc" +#line 3728 "src/parse/scanner_lex.cc" } -#line 761 "../src/parse/scanner_lex.re" +#line 781 "../src/parse/scanner_lex.re" } diff --git a/re2c/src/ir/regexp/regexp.cc b/re2c/src/ir/regexp/regexp.cc index 2771441f..00a25076 100644 --- a/re2c/src/ir/regexp/regexp.cc +++ b/re2c/src/ir/regexp/regexp.cc @@ -199,6 +199,25 @@ RegExp * Scanner::cpoint_class (const std::vector & cs, bool neg) cons return matchSymbolRange (r); } +std::string * Scanner::cpoint_conf (const std::vector & cs) const +{ + const size_t n = cs.size (); + std::string * s = new std::string; + for (size_t i = 0; i < n; ++i) + { + const uint32_t c = cs[i]; + if (c > 0xFF) + { + fatalf ("multibyte character in configuration string: 0x%X", c); + } + else + { + *s += static_cast (c); + } + } + return s; +} + RegExp * Scanner::mkDiff (RegExp * e1, RegExp * e2) const { MatchOp * m1 = dynamic_cast (e1); diff --git a/re2c/src/parse/parser.ypp b/re2c/src/parse/parser.ypp index 1869a633..1e58d3a0 100644 --- a/re2c/src/parse/parser.ypp +++ b/re2c/src/parse/parser.ypp @@ -206,21 +206,19 @@ void default_rule(CondList *clist, const Code * code) %token FID_END %token NOCOND %token NUM -%token RANGE +%token REGEXP %token SETUP %token STAR -%token STR %token STRING -%type CLOSE STAR SETUP close -%type CLOSESIZE -%type CODE -%type RANGE STRING -%type rule look expr diff term factor primary -%type ID FID STR CONF newcond -%type cond clist -%type NUM -%type CONF_FLAGS +%type CLOSE STAR SETUP close +%type CLOSESIZE +%type CODE +%type REGEXP rule look expr diff term factor primary +%type ID FID CONF STRING newcond +%type cond clist +%type NUM +%type CONF_FLAGS %% @@ -262,37 +260,44 @@ decl: { in->fatal("trailing contexts are not allowed in named definitions"); } - | CONF STR ';' + | CONF STRING ';' { if (!mapCodeName.insert (std::make_pair (*$1, *$2)).second) { in->fatalf ("configuration '%s' is already set and cannot be changed", $1->c_str ()); } delete $1; + delete $2; } - | CONF_CONDPREFIX STR ';' + | CONF_CONDPREFIX STRING ';' { condPrefix = *$2; + delete $2; } - | CONF_CONDENUMPREFIX STR ';' + | CONF_CONDENUMPREFIX STRING ';' { condEnumPrefix = *$2; + delete $2; } - | CONF_COND_DIVIDER STR ';' + | CONF_COND_DIVIDER STRING ';' { condDivider = *$2; + delete $2; } - | CONF_COND_DIVIDER_COND STR ';' + | CONF_COND_DIVIDER_COND STRING ';' { condDividerParam = *$2; + delete $2; } - | CONF_COND_GOTO STR ';' + | CONF_COND_GOTO STRING ';' { condGoto = *$2; + delete $2; } - | CONF_COND_GOTO_COND STR ';' + | CONF_COND_GOTO_COND STRING ';' { condGotoParam = *$2; + delete $2; } | CONF_CGOTO_THRESHOLD NUM ';' { @@ -302,10 +307,11 @@ decl: { bUseYYFillNaked = $2 != 0; } - | CONF_DEFINE_YYFILL_LEN STR ';' + | CONF_DEFINE_YYFILL_LEN STRING ';' { yyFillLength = *$2; bUseYYFillParam = false; + delete $2; } | CONF_DEFINE_YYGETCONDITION_NAKED NUM ';' { @@ -315,19 +321,21 @@ decl: { bUseYYGetStateNaked = $2 != 0; } - | CONF_DEFINE_YYSETCONDITION_COND STR ';' + | CONF_DEFINE_YYSETCONDITION_COND STRING ';' { yySetConditionParam = *$2; bUseYYSetConditionParam = false; + delete $2; } | CONF_DEFINE_YYSETSTATE_NAKED NUM ';' { bUseYYSetStateNaked = $2 != 0; } - | CONF_DEFINE_YYSETSTATE_STATE STR ';' + | CONF_DEFINE_YYSETSTATE_STATE STRING ';' { yySetStateParam = *$2; bUseYYSetStateParam = false; + delete $2; } | CONF_FLAGS NUM ';' { @@ -342,9 +350,10 @@ decl: , Enc::name (encoding.type ())); } } - | CONF_INDENT_STRING STR ';' + | CONF_INDENT_STRING STRING ';' { indString = *$2; + delete $2; } | CONF_INDENT_TOP NUM ';' { @@ -354,17 +363,19 @@ decl: } topIndent = $2; } - | CONF_LABELPREFIX STR ';' + | CONF_LABELPREFIX STRING ';' { labelPrefix = *$2; + delete $2; } | CONF_STARTLABEL NUM ';' { in->out.set_force_start_label ($2 != 0); } - | CONF_STARTLABEL STR ';' + | CONF_STARTLABEL STRING ';' { in->out.set_user_start_label (*$2); + delete $2; } | CONF_STATE_ABORT NUM ';' { @@ -661,11 +672,7 @@ primary: } $$ = i->second; } - | RANGE - { - $$ = $1; - } - | STRING + | REGEXP { $$ = $1; } diff --git a/re2c/src/parse/scanner.h b/re2c/src/parse/scanner.h index 79fe665a..41475b71 100644 --- a/re2c/src/parse/scanner.h +++ b/re2c/src/parse/scanner.h @@ -10,7 +10,6 @@ #include "src/parse/input.h" #include "src/util/attribute.h" #include "src/util/forbid_copy.h" -#include "src/util/substr.h" namespace re2c { @@ -60,6 +59,7 @@ public: private: void fill (uint32_t); void set_sourceline (); + void lex_cpoints (char quote, std::vector & cs); size_t tok_len () const; public: @@ -90,9 +90,6 @@ public: void fatal(const char*) const; void fatal(ptrdiff_t, const char*) const; - uint32_t unescape(SubStr &s) const; - std::string& unescape(SubStr& str_in, std::string& str_out) const; - RegExp * matchSymbol (uint32_t c) const; RegExp * matchSymbolRange (Range * r) const; RegExp * mkDiff (RegExp * e1, RegExp * e2) const; @@ -100,6 +97,7 @@ public: RegExp * mkDefault () const; RegExp * cpoint_string (const std::vector & cs, bool case_sensitive) const; RegExp * cpoint_class (const std::vector & cs, bool neg) const; + std::string * cpoint_conf (const std::vector & cs) const; FORBID_COPY (Scanner); }; diff --git a/re2c/src/parse/scanner_lex.re b/re2c/src/parse/scanner_lex.re index 976dcf58..290bcebf 100644 --- a/re2c/src/parse/scanner_lex.re +++ b/re2c/src/parse/scanner_lex.re @@ -50,6 +50,9 @@ lineinf = lineno (space+ dstring)? eol; esc_hex = esc ("x" hex_digit{2} | [uX] hex_digit{4} | "U" hex_digit{8}); esc_oct = esc [0-3] [0-7]{2}; // max 1-byte octal value is '\377' esc_simple = esc [abfnrtv\\]; + + naked_char = . \ (space | [;]); + naked = "" | (naked_char \ ['"]) naked_char*; */ Scanner::ParseMode Scanner::echo() @@ -214,9 +217,6 @@ int Scanner::scan() { uint32_t depth; - char quote; - bool negated_class = false; - std::vector cpoints; scan: tchar = cur - pos; tline = cline; @@ -259,9 +259,34 @@ start: return 0; } - ['"] { quote = tok[0]; goto cpoints; } - "[" { quote = ']'; goto cpoints; } - "[^" { quote = ']'; negated_class = true; goto cpoints; } + "'" + { + std::vector cpoints; + lex_cpoints ('\'', cpoints); + yylval.regexp = cpoint_string (cpoints, bCaseInsensitive || !bCaseInverted); + return REGEXP; + } + "\"" + { + std::vector cpoints; + lex_cpoints ('"', cpoints); + yylval.regexp = cpoint_string (cpoints, bCaseInsensitive || bCaseInverted); + return REGEXP; + } + "[" + { + std::vector cpoints; + lex_cpoints (']', cpoints); + yylval.regexp = cpoint_class (cpoints, false); + return REGEXP; + } + "[^" + { + std::vector cpoints; + lex_cpoints (']', cpoints); + yylval.regexp = cpoint_class (cpoints, true); + return REGEXP; + } "<>" / (space* ("{" | "=>" | ":=")) { return NOCOND; @@ -350,18 +375,19 @@ start: yylval.str = new std::string (tok, tok_len ()); return ID; } else { + std::vector cpoints; for (char * p = tok; p < cur; ++p) { cpoints.push_back (static_cast (*p)); } yylval.regexp = cpoint_string (cpoints, bCaseInsensitive || bCaseInverted); - return STRING; + return REGEXP; } } "." { yylval.regexp = mkDot(); - return RANGE; + return REGEXP; } space+ { @@ -401,53 +427,6 @@ flex_name: } */ -cpoints: - tok = cur; -/*!re2c - * { fatal ((tok - pos) - tchar, "syntax error"); } - esc [xXuU] { fatal ((tok - pos) - tchar, "syntax error in hexadecimal escape sequence"); } - esc [0-7] { fatal ((tok - pos) - tchar, "syntax error in octal escape sequence"); } - esc { fatal ((tok - pos) - tchar, "syntax error in escape sequence"); } - - esc_hex { cpoints.push_back (unesc_hex (tok, cur)); goto cpoints; } - esc_oct { cpoints.push_back (unesc_oct (tok, cur)); goto cpoints; } - esc_simple { cpoints.push_back (unesc_simple (tok)); goto cpoints; } - esc . - { - const char c = tok[1]; - if (c != quote) - { - warn.useless_escape (tline, tok - pos, c); - } - cpoints.push_back (static_cast (c)); - goto cpoints; - } - . \ esc - { - const char c = tok[0]; - if (c == quote) - { - switch (quote) - { - case ']': - yylval.regexp = cpoint_class (cpoints, negated_class); - return RANGE; - case '\'': - yylval.regexp = cpoint_string (cpoints, bCaseInsensitive || !bCaseInverted); - return STRING; - case '"': - yylval.regexp = cpoint_string (cpoints, bCaseInsensitive || bCaseInverted); - return STRING; - } - } - else - { - cpoints.push_back (static_cast (c)); - goto cpoints; - } - } -*/ - code: /*!re2c "}" { @@ -698,17 +677,17 @@ conf_val: } return NUM; } - dstring | sstring + ['"] { - yylval.str = new std::string (); - SubStr s (tok + 1, tok_len () - 2); // skip quotes - unescape (s, *(yylval.str)); - return STR; + std::vector cpoints; + lex_cpoints (tok[0], cpoints); + yylval.str = cpoint_conf (cpoints); + return STRING; } - [^\r\n; \t]* + naked { yylval.str = new std::string (tok, tok_len ()); - return STR; + return STRING; } */ } @@ -727,6 +706,47 @@ static void escape (std::string & dest, const std::string & src) } } +void Scanner::lex_cpoints (char quote, std::vector & cs) +{ + for (;;) + { + tok = cur; + /*!re2c + * { fatal ((tok - pos) - tchar, "syntax error"); } + esc [xXuU] { fatal ((tok - pos) - tchar, "syntax error in hexadecimal escape sequence"); } + esc [0-7] { fatal ((tok - pos) - tchar, "syntax error in octal escape sequence"); } + esc { fatal ((tok - pos) - tchar, "syntax error in escape sequence"); } + + esc_hex { cs.push_back (unesc_hex (tok, cur)); continue; } + esc_oct { cs.push_back (unesc_oct (tok, cur)); continue; } + esc_simple { cs.push_back (unesc_simple (tok)); continue; } + esc . + { + const char c = tok[1]; + if (c != quote) + { + warn.useless_escape (tline, tok - pos, c); + } + cs.push_back (static_cast (c)); + continue; + } + . \ esc + { + const char c = tok[0]; + if (c == quote) + { + return; + } + else + { + cs.push_back (static_cast (c)); + continue; + } + } + */ + } +} + void Scanner::set_sourceline () { sourceline: diff --git a/re2c/src/parse/unescape.cc b/re2c/src/parse/unescape.cc index 3cdf3419..c2df9e0c 100644 --- a/re2c/src/parse/unescape.cc +++ b/re2c/src/parse/unescape.cc @@ -77,216 +77,4 @@ uint32_t unesc_oct (const char * s, const char * s_end) return n; } -uint32_t Scanner::unescape(SubStr &s) const -{ - static const char * hex = "0123456789abcdef"; - static const char * oct = "01234567"; - - s.len--; - uint32_t c, ucb = 0; - - if ((c = *s.str++) != '\\' || s.len == 0) - { - return c; - } - - s.len--; - - switch (c = *s.str++) - { - case 'n': return '\n'; - case 't': return '\t'; - case 'v': return '\v'; - case 'b': return '\b'; - case 'r': return '\r'; - case 'f': return '\f'; - case 'a': return '\a'; - - case 'x': - { - if (s.len < 2) - { - fatal(s.ofs()+s.len, "Illegal hexadecimal character code, two hexadecimal digits are required"); - return ~0u; - } - - const char *p1 = strchr(hex, tolower(s.str[0])); - const char *p2 = strchr(hex, tolower(s.str[1])); - - if (!p1 || !p2) - { - fatal(s.ofs()+(p1?1:0), "Illegal hexadecimal character code"); - return ~0u; - } - else - { - s.len -= 2; - s.str += 2; - - uint32_t v = (uint32_t)((p1 - hex) << 4) - + (uint32_t)((p2 - hex)); - - return v; - } - } - - case 'U': - { - if (s.len < 8) - { - fatal(s.ofs()+s.len, "Illegal unicode character, eight hexadecimal digits are required"); - return ~0u; - } - - uint32_t l = 0; - if (s.str[0] == '0') - { - l++; - if (s.str[1] == '0') - { - l++; - if (s.str[2] == '0' || (s.str[2] == '1' && encoding.szCodePoint() == 4)) - { - l++; - if (encoding.szCodePoint() == 4) - { - const char *u3 = strchr(hex, tolower(s.str[2])); - const char *u4 = strchr(hex, tolower(s.str[3])); - if (u3 && u4) - { - ucb = (uint32_t)((u3 - hex) << 20) - + (uint32_t)((u4 - hex) << 16); - l++; - } - } - else if (s.str[3] == '0') - { - l++; - } - } - } - } - - if (l != 4) - { - fatal(s.ofs()+l, "Illegal unicode character, eight hexadecimal digits are required"); - } - - s.len -= 4; - s.str += 4; - - // no break; - } - case 'X': - case 'u': - { - if (s.len < 4) - { - fatal(s.ofs()+s.len, - c == 'X' - ? "Illegal hexadecimal character code, four hexadecimal digits are required" - : "Illegal unicode character, four hexadecimal digits are required"); - return ~0u; - } - - const char *p1 = strchr(hex, tolower(s.str[0])); - const char *p2 = strchr(hex, tolower(s.str[1])); - const char *p3 = strchr(hex, tolower(s.str[2])); - const char *p4 = strchr(hex, tolower(s.str[3])); - - if (!p1 || !p2 || !p3 || !p4) - { - fatal(s.ofs()+(p1?1:0)+(p2?1:0)+(p3?1:0), - c == 'X' - ? "Illegal hexadecimal character code, non hexxdecimal digit found" - : "Illegal unicode character, non hexadecimal digit found"); - return ~0u; - } - else - { - s.len -= 4; - s.str += 4; - - uint32_t v = (uint32_t)((p1 - hex) << 12) - + (uint32_t)((p2 - hex) << 8) - + (uint32_t)((p3 - hex) << 4) - + (uint32_t)((p4 - hex)) - + ucb; - - if (v >= encoding.nCodePoints()) - { - fatal(s.ofs(), - c == 'X' - ? "Illegal hexadecimal character code, out of range" - : "Illegal unicode character, out of range"); - } - - return v; - } - } - - case '4': - case '5': - case '6': - case '7': - { - fatal(s.ofs()-1, "Illegal octal character code, first digit must be 0 thru 3"); - return ~0u; - } - - case '0': - case '1': - case '2': - case '3': - { - if (s.len < 2) - { - fatal(s.ofs()+s.len, "Illegal octal character code, three octal digits are required"); - return ~0u; - } - - const char *p0 = strchr(oct, c); - const char *p1 = strchr(oct, s.str[0]); - const char *p2 = strchr(oct, s.str[1]); - - if (!p0 || !p1 || !p2) - { - fatal(s.ofs()+(p1?1:0), "Illegal octal character code, non octal digit found"); - return ~0u; - } - else - { - s.len -= 2; - s.str += 2; - - uint32_t v = (uint32_t)((p0 - oct) << 6) + (uint32_t)((p1 - oct) << 3) + (uint32_t)(p2 - oct); - - return v; - } - } - - default: - return c; - } -} - -std::string& Scanner::unescape(SubStr& str_in, std::string& str_out) const -{ - str_out.clear(); - - while(str_in.len) - { - uint32_t c = unescape(str_in); - - if (c > 0xFF) - { - fatal(str_in.ofs(), "Illegal character"); - } - - str_out += static_cast(c); - } - - return str_out; -} - } // namespace re2c diff --git a/re2c/src/util/substr.h b/re2c/src/util/substr.h deleted file mode 100644 index a78c704e..00000000 --- a/re2c/src/util/substr.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef _RE2C_UTIL_SUBSTR_ -#define _RE2C_UTIL_SUBSTR_ - -#include "src/util/forbid_copy.h" - -namespace re2c -{ - -class SubStr -{ -public: - const char * str; - const char * const org; - size_t len; - - inline SubStr (const char * s, size_t l) - : str (s) - , org (s) - , len (l) - {} - inline ptrdiff_t ofs () const - { - return str - org; - } - - FORBID_COPY (SubStr); -}; - -} // namespace re2c - -#endif // _RE2C_UTIL_SUBSTR_ diff --git a/re2c/test/condition_01a.c.c b/re2c/test/condition_01a.c.c index c45c4c77..e296a92a 100644 --- a/re2c/test/condition_01a.c.c +++ b/re2c/test/condition_01a.c.c @@ -1,3 +1,4 @@ +re2c: warning: line 2: column 39: escape has no effect: '\/' [-Wuseless-escape] re2c: warning: line 5: naked default case in condition a (stray code units: [0x00-`][a][b-0xFF]), better add default rule * [-Wnaked-default] re2c: warning: line 5: naked default case in condition b (stray code units: [0x00-`][a][b-0xFF]), better add default rule * [-Wnaked-default] /* Generated by re2c */