From: Ulya Trofimovich Date: Sat, 22 Dec 2018 23:34:41 +0000 (+0000) Subject: Initial support of EOF rule. X-Git-Tag: 1.2~286 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f087e872684ce60ee2c2ddab781da92ac7e83ee6;p=re2c Initial support of EOF rule. --- diff --git a/re2c/bootstrap/src/ast/lex.cc b/re2c/bootstrap/src/ast/lex.cc index 69f4ae3c..bbaeee18 100644 --- a/re2c/bootstrap/src/ast/lex.cc +++ b/re2c/bootstrap/src/ast/lex.cc @@ -1,4 +1,4 @@ -/* Generated by re2c 1.1.1 on Thu Dec 6 21:59:06 2018 */ +/* Generated by re2c 1.1.1 on Sat Dec 22 19:57:50 2018 */ #line 1 "../src/ast/lex.re" #include "src/util/c99_stdint.h" #include @@ -1077,18 +1077,19 @@ scan: if (yych >= '"') goto yy209; } else { if (yych <= '#') goto yy211; - if (yych >= '%') goto yy212; + if (yych <= '$') goto yy212; + goto yy214; } } } else { if (yych <= '*') { if (yych <= '&') goto yy201; - if (yych <= '\'') goto yy213; - if (yych <= ')') goto yy215; + if (yych <= '\'') goto yy215; + if (yych <= ')') goto yy212; goto yy217; } else { if (yych <= '-') { - if (yych <= '+') goto yy215; + if (yych <= '+') goto yy212; } else { if (yych <= '.') goto yy218; if (yych <= '/') goto yy220; @@ -1099,12 +1100,12 @@ scan: if (yych <= '[') { if (yych <= '=') { if (yych <= ':') goto yy221; - if (yych <= ';') goto yy215; + if (yych <= ';') goto yy212; if (yych <= '<') goto yy222; goto yy224; } else { if (yych <= '?') { - if (yych >= '?') goto yy215; + if (yych >= '?') goto yy212; } else { if (yych <= '@') goto yy211; if (yych <= 'Z') goto yy225; @@ -1114,7 +1115,7 @@ scan: } else { if (yych <= 'q') { if (yych <= '^') { - if (yych <= '\\') goto yy215; + if (yych <= '\\') goto yy212; } else { if (yych != '`') goto yy225; } @@ -1124,7 +1125,7 @@ scan: goto yy225; } else { if (yych <= '{') goto yy231; - if (yych <= '|') goto yy215; + if (yych <= '|') goto yy212; } } } @@ -1137,7 +1138,7 @@ yy202: fatal_lc(get_cline(), get_column(), "unexpected character: '%c'", *tok); goto scan; } -#line 1141 "src/ast/lex.cc" +#line 1142 "src/ast/lex.cc" yy203: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); @@ -1147,7 +1148,7 @@ yy203: } #line 367 "../src/ast/lex.re" { goto scan; } -#line 1151 "src/ast/lex.cc" +#line 1152 "src/ast/lex.cc" yy206: yyaccept = 0; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); @@ -1170,7 +1171,7 @@ yy207: goto scan; } } -#line 1174 "src/ast/lex.cc" +#line 1175 "src/ast/lex.cc" yy208: yych = (YYCTYPE)*++YYCURSOR; if (yych == '\n') goto yy206; @@ -1179,7 +1180,7 @@ yy209: ++YYCURSOR; #line 285 "../src/ast/lex.re" { yylval.regexp = lex_str('"'); return TOKEN_REGEXP; } -#line 1183 "src/ast/lex.cc" +#line 1184 "src/ast/lex.cc" yy211: yych = (YYCTYPE)*++YYCURSOR; if (yych <= '^') { @@ -1192,24 +1193,24 @@ yy211: goto yy202; } yy212: + ++YYCURSOR; +yy213: +#line 295 "../src/ast/lex.re" + { return *tok; } +#line 1201 "src/ast/lex.cc" +yy214: yych = (YYCTYPE)*++YYCURSOR; if (yych == '}') goto yy241; goto yy202; -yy213: +yy215: ++YYCURSOR; #line 284 "../src/ast/lex.re" { yylval.regexp = lex_str('\''); return TOKEN_REGEXP; } -#line 1203 "src/ast/lex.cc" -yy215: - ++YYCURSOR; -yy216: -#line 295 "../src/ast/lex.re" - { return *tok; } -#line 1209 "src/ast/lex.cc" +#line 1210 "src/ast/lex.cc" yy217: yych = (YYCTYPE)*++YYCURSOR; if (yych == '/') goto yy241; - goto yy216; + goto yy213; yy218: ++YYCURSOR; #line 362 "../src/ast/lex.re" @@ -1217,12 +1218,12 @@ yy218: yylval.regexp = ast_dot(cline, get_column()); return TOKEN_REGEXP; } -#line 1221 "src/ast/lex.cc" +#line 1222 "src/ast/lex.cc" yy220: yych = (YYCTYPE)*++YYCURSOR; if (yych == '*') goto yy243; if (yych == '/') goto yy245; - goto yy216; + goto yy213; yy221: yych = (YYCTYPE)*++YYCURSOR; if (yych == '=') goto yy247; @@ -1231,12 +1232,12 @@ yy222: ++YYCURSOR; #line 277 "../src/ast/lex.re" { return lex_clist(); } -#line 1235 "src/ast/lex.cc" +#line 1236 "src/ast/lex.cc" yy224: yyaccept = 1; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); if (yych == '>') goto yy249; - goto yy216; + goto yy213; yy225: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); @@ -1268,13 +1269,13 @@ yy226: return TOKEN_REGEXP; } } -#line 1272 "src/ast/lex.cc" +#line 1273 "src/ast/lex.cc" yy228: yych = (YYCTYPE)*++YYCURSOR; if (yych == '^') goto yy251; #line 286 "../src/ast/lex.re" { yylval.regexp = lex_cls(false); return TOKEN_REGEXP; } -#line 1278 "src/ast/lex.cc" +#line 1279 "src/ast/lex.cc" yy230: yych = (YYCTYPE)*++YYCURSOR; if (yych == 'e') goto yy253; @@ -1299,7 +1300,7 @@ yy231: yy232: #line 269 "../src/ast/lex.re" { lex_code_in_braces(); return TOKEN_CODE; } -#line 1303 "src/ast/lex.cc" +#line 1304 "src/ast/lex.cc" yy233: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); @@ -1317,7 +1318,7 @@ yy235: if (yyaccept == 0) { goto yy207; } else { - goto yy216; + goto yy213; } } else { goto yy232; @@ -1364,22 +1365,22 @@ yy240: yylval.regexp = ast_tag(cline, get_column(), name, tok[0] == '#'); return TOKEN_REGEXP; } -#line 1368 "src/ast/lex.cc" +#line 1369 "src/ast/lex.cc" yy241: ++YYCURSOR; #line 282 "../src/ast/lex.re" { tok = cur; return 0; } -#line 1373 "src/ast/lex.cc" +#line 1374 "src/ast/lex.cc" yy243: ++YYCURSOR; #line 280 "../src/ast/lex.re" { lex_c_comment(); goto scan; } -#line 1378 "src/ast/lex.cc" +#line 1379 "src/ast/lex.cc" yy245: ++YYCURSOR; #line 279 "../src/ast/lex.re" { lex_cpp_comment(); goto scan; } -#line 1383 "src/ast/lex.cc" +#line 1384 "src/ast/lex.cc" yy247: yyaccept = 3; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); @@ -1387,7 +1388,7 @@ yy247: yy248: #line 270 "../src/ast/lex.re" { lex_code_indented(); return TOKEN_CODE; } -#line 1391 "src/ast/lex.cc" +#line 1392 "src/ast/lex.cc" yy249: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); @@ -1422,7 +1423,7 @@ yy251: ++YYCURSOR; #line 287 "../src/ast/lex.re" { yylval.regexp = lex_cls(true); return TOKEN_REGEXP; } -#line 1426 "src/ast/lex.cc" +#line 1427 "src/ast/lex.cc" yy253: yych = (YYCTYPE)*++YYCURSOR; if (yych == '2') goto yy264; @@ -1435,7 +1436,7 @@ yy255: fatal_lc(get_cline(), get_column(), "illegal closure form, use '{n}', '{n,}', '{n,m}' where n and m are numbers"); } -#line 1439 "src/ast/lex.cc" +#line 1440 "src/ast/lex.cc" yy256: ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); @@ -1498,7 +1499,7 @@ yy263: yylval.str = new std::string(p, static_cast(cur - p)); return tok[0] == ':' ? TOKEN_CJUMP : TOKEN_CNEXT; } -#line 1502 "src/ast/lex.cc" +#line 1503 "src/ast/lex.cc" yy264: yych = (YYCTYPE)*++YYCURSOR; if (yych == 'c') goto yy271; @@ -1520,7 +1521,7 @@ yy266: yylval.bounds.max = yylval.bounds.min; return TOKEN_CLOSESIZE; } -#line 1524 "src/ast/lex.cc" +#line 1525 "src/ast/lex.cc" yy268: ++YYCURSOR; #line 328 "../src/ast/lex.re" @@ -1532,7 +1533,7 @@ yy268: yylval.str = new std::string (tok + 1, tok_len () - 2); // -2 to omit braces return TOKEN_ID; } -#line 1536 "src/ast/lex.cc" +#line 1537 "src/ast/lex.cc" yy270: yych = (YYCTYPE)*++YYCURSOR; if (yych == 'n') goto yy276; @@ -1559,7 +1560,7 @@ yy274: yylval.bounds.max = std::numeric_limits::max(); return TOKEN_CLOSESIZE; } -#line 1563 "src/ast/lex.cc" +#line 1564 "src/ast/lex.cc" yy276: yych = (YYCTYPE)*++YYCURSOR; if (yych == 'e') goto yy281; @@ -1568,7 +1569,7 @@ yy277: ++YYCURSOR; #line 337 "../src/ast/lex.re" { return TOKEN_CONF; } -#line 1572 "src/ast/lex.cc" +#line 1573 "src/ast/lex.cc" yy279: ++YYCURSOR; p = yyt1; @@ -1582,7 +1583,7 @@ yy279: } return TOKEN_CLOSESIZE; } -#line 1586 "src/ast/lex.cc" +#line 1587 "src/ast/lex.cc" yy281: yych = (YYCTYPE)*++YYCURSOR; if (yych <= '0') goto yy283; @@ -1643,7 +1644,7 @@ yy288: set_sourceline (); return TOKEN_LINE_INFO; } -#line 1647 "src/ast/lex.cc" +#line 1648 "src/ast/lex.cc" yy290: yych = (YYCTYPE)*++YYCURSOR; if (yych == '\n') goto yy288; @@ -1676,7 +1677,7 @@ yy294: bool Scanner::lex_namedef_context_re2c() { -#line 1680 "src/ast/lex.cc" +#line 1681 "src/ast/lex.cc" { YYCTYPE yych; static const unsigned char yybm[] = { @@ -1733,7 +1734,7 @@ bool Scanner::lex_namedef_context_re2c() yy297: #line 397 "../src/ast/lex.re" { return false; } -#line 1737 "src/ast/lex.cc" +#line 1738 "src/ast/lex.cc" yy298: ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); @@ -1752,7 +1753,7 @@ yy301: YYCURSOR = yyt1; #line 396 "../src/ast/lex.re" { return true; } -#line 1756 "src/ast/lex.cc" +#line 1757 "src/ast/lex.cc" } #line 398 "../src/ast/lex.re" @@ -1761,7 +1762,7 @@ yy301: bool Scanner::lex_namedef_context_flex() { -#line 1765 "src/ast/lex.cc" +#line 1766 "src/ast/lex.cc" { YYCTYPE yych; static const unsigned char yybm[] = { @@ -1810,7 +1811,7 @@ bool Scanner::lex_namedef_context_flex() } #line 406 "../src/ast/lex.re" { return false; } -#line 1814 "src/ast/lex.cc" +#line 1815 "src/ast/lex.cc" yy307: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); @@ -1827,13 +1828,13 @@ yy307: YYCURSOR = yyt1; #line 405 "../src/ast/lex.re" { return true; } -#line 1831 "src/ast/lex.cc" +#line 1832 "src/ast/lex.cc" yy310: ++YYCURSOR; YYCURSOR = yyt1; #line 404 "../src/ast/lex.re" { return false; } -#line 1837 "src/ast/lex.cc" +#line 1838 "src/ast/lex.cc" } #line 407 "../src/ast/lex.re" @@ -1844,7 +1845,7 @@ int Scanner::lex_clist() int kind = TOKEN_CLIST; CondList *cl = new CondList; -#line 1848 "src/ast/lex.cc" +#line 1849 "src/ast/lex.cc" { YYCTYPE yych; static const unsigned char yybm[] = { @@ -1896,7 +1897,7 @@ yy312: yy315: #line 417 "../src/ast/lex.re" { goto cond; } -#line 1900 "src/ast/lex.cc" +#line 1901 "src/ast/lex.cc" yy316: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); @@ -1905,19 +1906,19 @@ yy316: if (yych == ' ') goto yy316; #line 415 "../src/ast/lex.re" { kind = TOKEN_CSETUP; goto cond; } -#line 1909 "src/ast/lex.cc" +#line 1910 "src/ast/lex.cc" yy319: ++YYCURSOR; #line 416 "../src/ast/lex.re" { kind = TOKEN_CZERO; goto end; } -#line 1914 "src/ast/lex.cc" +#line 1915 "src/ast/lex.cc" } #line 418 "../src/ast/lex.re" cond: tok = cur; -#line 1921 "src/ast/lex.cc" +#line 1922 "src/ast/lex.cc" { YYCTYPE yych; static const unsigned char yybm[] = { @@ -1971,12 +1972,12 @@ yy323: ++YYCURSOR; #line 424 "../src/ast/lex.re" { goto error; } -#line 1975 "src/ast/lex.cc" +#line 1976 "src/ast/lex.cc" yy325: ++YYCURSOR; #line 423 "../src/ast/lex.re" { if (!cl->empty()) goto error; cl->insert("*"); goto next; } -#line 1980 "src/ast/lex.cc" +#line 1981 "src/ast/lex.cc" yy327: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); @@ -1986,13 +1987,13 @@ yy327: } #line 422 "../src/ast/lex.re" { cl->insert(std::string(tok, tok_len())); goto next; } -#line 1990 "src/ast/lex.cc" +#line 1991 "src/ast/lex.cc" } #line 425 "../src/ast/lex.re" next: -#line 1996 "src/ast/lex.cc" +#line 1997 "src/ast/lex.cc" { YYCTYPE yych; static const unsigned char yybm[] = { @@ -2045,7 +2046,7 @@ next: yy333: #line 430 "../src/ast/lex.re" { goto error; } -#line 2049 "src/ast/lex.cc" +#line 2050 "src/ast/lex.cc" yy334: yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); if (yych <= ' ') { @@ -2069,12 +2070,12 @@ yy335: } #line 428 "../src/ast/lex.re" { goto cond; } -#line 2073 "src/ast/lex.cc" +#line 2074 "src/ast/lex.cc" yy338: ++YYCURSOR; #line 429 "../src/ast/lex.re" { goto end; } -#line 2078 "src/ast/lex.cc" +#line 2079 "src/ast/lex.cc" yy340: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); @@ -2108,7 +2109,7 @@ void Scanner::lex_code_indented() tok = cur; code: -#line 2112 "src/ast/lex.cc" +#line 2113 "src/ast/lex.cc" { YYCTYPE yych; if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3); @@ -2138,13 +2139,13 @@ yy345: ++YYCURSOR; #line 454 "../src/ast/lex.re" { fail_if_eof(); goto code; } -#line 2142 "src/ast/lex.cc" +#line 2143 "src/ast/lex.cc" yy347: ++YYCURSOR; yy348: #line 459 "../src/ast/lex.re" { goto code; } -#line 2148 "src/ast/lex.cc" +#line 2149 "src/ast/lex.cc" yy349: yych = (YYCTYPE)*++YYCURSOR; if (yych <= '\f') { @@ -2162,7 +2163,7 @@ yy350: yylval.code = new Code(get_fname (), line, tok, tok_len ()); return; } -#line 2166 "src/ast/lex.cc" +#line 2167 "src/ast/lex.cc" yy351: yych = (YYCTYPE)*++YYCURSOR; if (yych == '\n') goto yy349; @@ -2171,7 +2172,7 @@ yy352: ++YYCURSOR; #line 458 "../src/ast/lex.re" { lex_string(cur[-1]); goto code; } -#line 2175 "src/ast/lex.cc" +#line 2176 "src/ast/lex.cc" yy354: yych = (YYCTYPE)*++YYCURSOR; if (yych == '*') goto yy359; @@ -2181,23 +2182,23 @@ yy355: ++YYCURSOR; #line 455 "../src/ast/lex.re" { fatal_l(get_cline(), "Curly braces are not allowed after ':='"); } -#line 2185 "src/ast/lex.cc" +#line 2186 "src/ast/lex.cc" yy357: ++YYCURSOR; YYCURSOR -= 1; #line 446 "../src/ast/lex.re" { goto code; } -#line 2191 "src/ast/lex.cc" +#line 2192 "src/ast/lex.cc" yy359: ++YYCURSOR; #line 456 "../src/ast/lex.re" { lex_c_comment(); goto code; } -#line 2196 "src/ast/lex.cc" +#line 2197 "src/ast/lex.cc" yy361: ++YYCURSOR; #line 457 "../src/ast/lex.re" { lex_cpp_comment(); goto code; } -#line 2201 "src/ast/lex.cc" +#line 2202 "src/ast/lex.cc" } #line 460 "../src/ast/lex.re" @@ -2209,7 +2210,7 @@ void Scanner::lex_code_in_braces() uint32_t depth = 1; code: -#line 2213 "src/ast/lex.cc" +#line 2214 "src/ast/lex.cc" { YYCTYPE yych; static const unsigned char yybm[] = { @@ -2273,13 +2274,13 @@ yy365: ++YYCURSOR; #line 480 "../src/ast/lex.re" { fail_if_eof(); goto code; } -#line 2277 "src/ast/lex.cc" +#line 2278 "src/ast/lex.cc" yy367: ++YYCURSOR; yy368: #line 484 "../src/ast/lex.re" { goto code; } -#line 2283 "src/ast/lex.cc" +#line 2284 "src/ast/lex.cc" yy369: yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); if (yybm[0+yych] & 32) { @@ -2289,7 +2290,7 @@ yy369: yy370: #line 479 "../src/ast/lex.re" { pos = cur; cline++; goto code; } -#line 2293 "src/ast/lex.cc" +#line 2294 "src/ast/lex.cc" yy371: yych = (YYCTYPE)*++YYCURSOR; if (yych == '\n') goto yy369; @@ -2298,7 +2299,7 @@ yy372: ++YYCURSOR; #line 483 "../src/ast/lex.re" { lex_string(cur[-1]); goto code; } -#line 2302 "src/ast/lex.cc" +#line 2303 "src/ast/lex.cc" yy374: yych = (YYCTYPE)*++YYCURSOR; if (yych == '*') goto yy384; @@ -2308,7 +2309,7 @@ yy375: ++YYCURSOR; #line 477 "../src/ast/lex.re" { ++depth; goto code; } -#line 2312 "src/ast/lex.cc" +#line 2313 "src/ast/lex.cc" yy377: ++YYCURSOR; #line 469 "../src/ast/lex.re" @@ -2319,7 +2320,7 @@ yy377: } goto code; } -#line 2323 "src/ast/lex.cc" +#line 2324 "src/ast/lex.cc" yy379: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); @@ -2347,12 +2348,12 @@ yy384: ++YYCURSOR; #line 481 "../src/ast/lex.re" { lex_c_comment(); goto code; } -#line 2351 "src/ast/lex.cc" +#line 2352 "src/ast/lex.cc" yy386: ++YYCURSOR; #line 482 "../src/ast/lex.re" { lex_cpp_comment(); goto code; } -#line 2356 "src/ast/lex.cc" +#line 2357 "src/ast/lex.cc" yy388: yych = (YYCTYPE)*++YYCURSOR; if (yych != 'i') goto yy381; @@ -2411,7 +2412,7 @@ yy398: YYCURSOR = yyt1; #line 478 "../src/ast/lex.re" { set_sourceline (); goto code; } -#line 2415 "src/ast/lex.cc" +#line 2416 "src/ast/lex.cc" yy400: yych = (YYCTYPE)*++YYCURSOR; if (yych == '\n') goto yy398; @@ -2445,7 +2446,7 @@ void Scanner::lex_string(char delim) { loop: -#line 2449 "src/ast/lex.cc" +#line 2450 "src/ast/lex.cc" { YYCTYPE yych; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); @@ -2473,18 +2474,18 @@ yy407: ++YYCURSOR; #line 495 "../src/ast/lex.re" { fail_if_eof(); goto loop; } -#line 2477 "src/ast/lex.cc" +#line 2478 "src/ast/lex.cc" yy409: ++YYCURSOR; yy410: #line 496 "../src/ast/lex.re" { goto loop; } -#line 2483 "src/ast/lex.cc" +#line 2484 "src/ast/lex.cc" yy411: ++YYCURSOR; #line 494 "../src/ast/lex.re" { pos = cur; ++cline; goto loop; } -#line 2488 "src/ast/lex.cc" +#line 2489 "src/ast/lex.cc" yy413: yych = (YYCTYPE)*++YYCURSOR; if (yych == '\n') goto yy411; @@ -2493,7 +2494,7 @@ yy414: ++YYCURSOR; #line 492 "../src/ast/lex.re" { if (cur[-1] == delim) return; else goto loop; } -#line 2497 "src/ast/lex.cc" +#line 2498 "src/ast/lex.cc" yy416: yych = (YYCTYPE)*++YYCURSOR; if (yych <= '&') { @@ -2506,7 +2507,7 @@ yy417: ++YYCURSOR; #line 493 "../src/ast/lex.re" { goto loop; } -#line 2510 "src/ast/lex.cc" +#line 2511 "src/ast/lex.cc" } #line 497 "../src/ast/lex.re" @@ -2516,7 +2517,7 @@ void Scanner::lex_c_comment() { loop: -#line 2520 "src/ast/lex.cc" +#line 2521 "src/ast/lex.cc" { YYCTYPE yych; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); @@ -2534,18 +2535,18 @@ yy421: ++YYCURSOR; #line 506 "../src/ast/lex.re" { fail_if_eof(); goto loop; } -#line 2538 "src/ast/lex.cc" +#line 2539 "src/ast/lex.cc" yy423: ++YYCURSOR; yy424: #line 507 "../src/ast/lex.re" { goto loop; } -#line 2544 "src/ast/lex.cc" +#line 2545 "src/ast/lex.cc" yy425: ++YYCURSOR; #line 505 "../src/ast/lex.re" { pos = cur; ++cline; goto loop; } -#line 2549 "src/ast/lex.cc" +#line 2550 "src/ast/lex.cc" yy427: yych = (YYCTYPE)*++YYCURSOR; if (yych == '\n') goto yy425; @@ -2556,7 +2557,7 @@ yy428: ++YYCURSOR; #line 504 "../src/ast/lex.re" { return; } -#line 2560 "src/ast/lex.cc" +#line 2561 "src/ast/lex.cc" } #line 508 "../src/ast/lex.re" @@ -2566,7 +2567,7 @@ void Scanner::lex_cpp_comment() { loop: -#line 2570 "src/ast/lex.cc" +#line 2571 "src/ast/lex.cc" { YYCTYPE yych; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); @@ -2583,18 +2584,18 @@ yy433: ++YYCURSOR; #line 516 "../src/ast/lex.re" { fail_if_eof(); goto loop; } -#line 2587 "src/ast/lex.cc" +#line 2588 "src/ast/lex.cc" yy435: ++YYCURSOR; yy436: #line 517 "../src/ast/lex.re" { goto loop; } -#line 2593 "src/ast/lex.cc" +#line 2594 "src/ast/lex.cc" yy437: ++YYCURSOR; #line 515 "../src/ast/lex.re" { pos = cur; ++cline; return; } -#line 2598 "src/ast/lex.cc" +#line 2599 "src/ast/lex.cc" yy439: yych = (YYCTYPE)*++YYCURSOR; if (yych == '\n') goto yy437; @@ -2612,7 +2613,7 @@ fst: tok = cur; c = get_column(); -#line 2616 "src/ast/lex.cc" +#line 2617 "src/ast/lex.cc" { YYCTYPE yych; if (YYLIMIT <= YYCURSOR) YYFILL(1); @@ -2620,18 +2621,18 @@ fst: if (yych == ']') goto yy443; #line 530 "../src/ast/lex.re" { l = lex_cls_chr(); goto snd; } -#line 2624 "src/ast/lex.cc" +#line 2625 "src/ast/lex.cc" yy443: ++YYCURSOR; #line 529 "../src/ast/lex.re" { return ast_cls(cline, c0, cls, neg); } -#line 2629 "src/ast/lex.cc" +#line 2630 "src/ast/lex.cc" } #line 531 "../src/ast/lex.re" snd: -#line 2635 "src/ast/lex.cc" +#line 2636 "src/ast/lex.cc" { YYCTYPE yych; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); @@ -2640,7 +2641,7 @@ snd: yy447: #line 534 "../src/ast/lex.re" { u = l; goto add; } -#line 2644 "src/ast/lex.cc" +#line 2645 "src/ast/lex.cc" yy448: yych = (YYCTYPE)*++YYCURSOR; if (yych != ']') goto yy450; @@ -2658,7 +2659,7 @@ yy450: } goto add; } -#line 2662 "src/ast/lex.cc" +#line 2663 "src/ast/lex.cc" } #line 543 "../src/ast/lex.re" @@ -2672,7 +2673,7 @@ uint32_t Scanner::lex_cls_chr() tok = cur; const uint32_t l = get_cline(), c = get_column(); -#line 2676 "src/ast/lex.cc" +#line 2677 "src/ast/lex.cc" { YYCTYPE yych; unsigned int yyaccept = 0; @@ -2691,18 +2692,18 @@ yy454: ++YYCURSOR; #line 555 "../src/ast/lex.re" { fail_if_eof(); return 0; } -#line 2695 "src/ast/lex.cc" +#line 2696 "src/ast/lex.cc" yy456: ++YYCURSOR; yy457: #line 561 "../src/ast/lex.re" { return static_cast(tok[0]); } -#line 2701 "src/ast/lex.cc" +#line 2702 "src/ast/lex.cc" yy458: ++YYCURSOR; #line 556 "../src/ast/lex.re" { fatal_lc(l, c, "newline in character class"); } -#line 2706 "src/ast/lex.cc" +#line 2707 "src/ast/lex.cc" yy460: yych = (YYCTYPE)*++YYCURSOR; if (yych == '\n') goto yy458; @@ -2763,7 +2764,7 @@ yy461: yy462: #line 559 "../src/ast/lex.re" { fatal_lc(l, c, "syntax error in escape sequence"); } -#line 2767 "src/ast/lex.cc" +#line 2768 "src/ast/lex.cc" yy463: ++YYCURSOR; yy464: @@ -2772,7 +2773,7 @@ yy464: warn.useless_escape(cline, get_column(), tok[1]); return static_cast(tok[1]); } -#line 2776 "src/ast/lex.cc" +#line 2777 "src/ast/lex.cc" yy465: yych = (YYCTYPE)*++YYCURSOR; if (yych == '\n') goto yy458; @@ -2781,7 +2782,7 @@ yy466: ++YYCURSOR; #line 572 "../src/ast/lex.re" { return static_cast('-'); } -#line 2785 "src/ast/lex.cc" +#line 2786 "src/ast/lex.cc" yy468: yyaccept = 0; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); @@ -2790,7 +2791,7 @@ yy468: yy469: #line 558 "../src/ast/lex.re" { fatal_lc(l, c, "syntax error in octal escape sequence"); } -#line 2794 "src/ast/lex.cc" +#line 2795 "src/ast/lex.cc" yy470: ++YYCURSOR; goto yy469; @@ -2808,7 +2809,7 @@ yy471: yy472: #line 557 "../src/ast/lex.re" { fatal_lc(l, c, "syntax error in hexadecimal escape sequence"); } -#line 2812 "src/ast/lex.cc" +#line 2813 "src/ast/lex.cc" yy473: yyaccept = 1; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); @@ -2826,47 +2827,47 @@ yy474: ++YYCURSOR; #line 571 "../src/ast/lex.re" { return static_cast('\\'); } -#line 2830 "src/ast/lex.cc" +#line 2831 "src/ast/lex.cc" yy476: ++YYCURSOR; #line 573 "../src/ast/lex.re" { return static_cast(']'); } -#line 2835 "src/ast/lex.cc" +#line 2836 "src/ast/lex.cc" yy478: ++YYCURSOR; #line 564 "../src/ast/lex.re" { return static_cast('\a'); } -#line 2840 "src/ast/lex.cc" +#line 2841 "src/ast/lex.cc" yy480: ++YYCURSOR; #line 565 "../src/ast/lex.re" { return static_cast('\b'); } -#line 2845 "src/ast/lex.cc" +#line 2846 "src/ast/lex.cc" yy482: ++YYCURSOR; #line 566 "../src/ast/lex.re" { return static_cast('\f'); } -#line 2850 "src/ast/lex.cc" +#line 2851 "src/ast/lex.cc" yy484: ++YYCURSOR; #line 567 "../src/ast/lex.re" { return static_cast('\n'); } -#line 2855 "src/ast/lex.cc" +#line 2856 "src/ast/lex.cc" yy486: ++YYCURSOR; #line 568 "../src/ast/lex.re" { return static_cast('\r'); } -#line 2860 "src/ast/lex.cc" +#line 2861 "src/ast/lex.cc" yy488: ++YYCURSOR; #line 569 "../src/ast/lex.re" { return static_cast('\t'); } -#line 2865 "src/ast/lex.cc" +#line 2866 "src/ast/lex.cc" yy490: ++YYCURSOR; #line 570 "../src/ast/lex.re" { return static_cast('\v'); } -#line 2870 "src/ast/lex.cc" +#line 2871 "src/ast/lex.cc" yy492: yyaccept = 1; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); @@ -2931,7 +2932,7 @@ yy498: ++YYCURSOR; #line 563 "../src/ast/lex.re" { return unesc_oct(tok, cur); } -#line 2935 "src/ast/lex.cc" +#line 2936 "src/ast/lex.cc" yy500: yych = (YYCTYPE)*++YYCURSOR; if (yych <= '@') { @@ -2960,7 +2961,7 @@ yy502: ++YYCURSOR; #line 562 "../src/ast/lex.re" { return unesc_hex(tok, cur); } -#line 2964 "src/ast/lex.cc" +#line 2965 "src/ast/lex.cc" yy504: yych = (YYCTYPE)*++YYCURSOR; if (yych <= '@') { @@ -2994,7 +2995,7 @@ uint32_t Scanner::lex_str_chr(char quote, bool &end) tok = cur; const uint32_t l = get_cline(), c = get_column(); -#line 2998 "src/ast/lex.cc" +#line 2999 "src/ast/lex.cc" { YYCTYPE yych; unsigned int yyaccept = 0; @@ -3013,7 +3014,7 @@ yy508: ++YYCURSOR; #line 588 "../src/ast/lex.re" { fail_if_eof(); return 0; } -#line 3017 "src/ast/lex.cc" +#line 3018 "src/ast/lex.cc" yy510: ++YYCURSOR; yy511: @@ -3022,12 +3023,12 @@ yy511: end = tok[0] == quote; return static_cast(tok[0]); } -#line 3026 "src/ast/lex.cc" +#line 3027 "src/ast/lex.cc" yy512: ++YYCURSOR; #line 589 "../src/ast/lex.re" { fatal_lc(l, c, "newline in character string"); } -#line 3031 "src/ast/lex.cc" +#line 3032 "src/ast/lex.cc" yy514: yych = (YYCTYPE)*++YYCURSOR; if (yych == '\n') goto yy512; @@ -3083,7 +3084,7 @@ yy515: yy516: #line 592 "../src/ast/lex.re" { fatal_lc(l, c, "syntax error in escape sequence"); } -#line 3087 "src/ast/lex.cc" +#line 3088 "src/ast/lex.cc" yy517: ++YYCURSOR; yy518: @@ -3094,7 +3095,7 @@ yy518: } return static_cast(tok[1]); } -#line 3098 "src/ast/lex.cc" +#line 3099 "src/ast/lex.cc" yy519: yych = (YYCTYPE)*++YYCURSOR; if (yych == '\n') goto yy512; @@ -3107,7 +3108,7 @@ yy520: yy521: #line 591 "../src/ast/lex.re" { fatal_lc(l, c, "syntax error in octal escape sequence"); } -#line 3111 "src/ast/lex.cc" +#line 3112 "src/ast/lex.cc" yy522: ++YYCURSOR; goto yy521; @@ -3125,7 +3126,7 @@ yy523: yy524: #line 590 "../src/ast/lex.re" { fatal_lc(l, c, "syntax error in hexadecimal escape sequence"); } -#line 3129 "src/ast/lex.cc" +#line 3130 "src/ast/lex.cc" yy525: yyaccept = 1; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); @@ -3143,42 +3144,42 @@ yy526: ++YYCURSOR; #line 607 "../src/ast/lex.re" { return static_cast('\\'); } -#line 3147 "src/ast/lex.cc" +#line 3148 "src/ast/lex.cc" yy528: ++YYCURSOR; #line 600 "../src/ast/lex.re" { return static_cast('\a'); } -#line 3152 "src/ast/lex.cc" +#line 3153 "src/ast/lex.cc" yy530: ++YYCURSOR; #line 601 "../src/ast/lex.re" { return static_cast('\b'); } -#line 3157 "src/ast/lex.cc" +#line 3158 "src/ast/lex.cc" yy532: ++YYCURSOR; #line 602 "../src/ast/lex.re" { return static_cast('\f'); } -#line 3162 "src/ast/lex.cc" +#line 3163 "src/ast/lex.cc" yy534: ++YYCURSOR; #line 603 "../src/ast/lex.re" { return static_cast('\n'); } -#line 3167 "src/ast/lex.cc" +#line 3168 "src/ast/lex.cc" yy536: ++YYCURSOR; #line 604 "../src/ast/lex.re" { return static_cast('\r'); } -#line 3172 "src/ast/lex.cc" +#line 3173 "src/ast/lex.cc" yy538: ++YYCURSOR; #line 605 "../src/ast/lex.re" { return static_cast('\t'); } -#line 3177 "src/ast/lex.cc" +#line 3178 "src/ast/lex.cc" yy540: ++YYCURSOR; #line 606 "../src/ast/lex.re" { return static_cast('\v'); } -#line 3182 "src/ast/lex.cc" +#line 3183 "src/ast/lex.cc" yy542: yyaccept = 1; yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR); @@ -3243,7 +3244,7 @@ yy548: ++YYCURSOR; #line 599 "../src/ast/lex.re" { return unesc_oct(tok, cur); } -#line 3247 "src/ast/lex.cc" +#line 3248 "src/ast/lex.cc" yy550: yych = (YYCTYPE)*++YYCURSOR; if (yych <= '@') { @@ -3272,7 +3273,7 @@ yy552: ++YYCURSOR; #line 598 "../src/ast/lex.re" { return unesc_hex(tok, cur); } -#line 3276 "src/ast/lex.cc" +#line 3277 "src/ast/lex.cc" yy554: yych = (YYCTYPE)*++YYCURSOR; if (yych <= '@') { @@ -3316,7 +3317,7 @@ void Scanner::set_sourceline () sourceline: tok = cur; -#line 3320 "src/ast/lex.cc" +#line 3321 "src/ast/lex.cc" { YYCTYPE yych; static const unsigned char yybm[] = { @@ -3376,18 +3377,18 @@ sourceline: ++YYCURSOR; #line 647 "../src/ast/lex.re" { --cur; return; } -#line 3380 "src/ast/lex.cc" +#line 3381 "src/ast/lex.cc" yy560: ++YYCURSOR; yy561: #line 648 "../src/ast/lex.re" { goto sourceline; } -#line 3386 "src/ast/lex.cc" +#line 3387 "src/ast/lex.cc" yy562: ++YYCURSOR; #line 646 "../src/ast/lex.re" { tok = cur; return; } -#line 3391 "src/ast/lex.cc" +#line 3392 "src/ast/lex.cc" yy564: yych = (YYCTYPE)*++YYCURSOR; if (yych == '\n') goto yy562; @@ -3411,7 +3412,7 @@ yy566: } goto sourceline; } -#line 3415 "src/ast/lex.cc" +#line 3416 "src/ast/lex.cc" yy569: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); @@ -3434,7 +3435,7 @@ yy572: strrreplace (in.escaped_file_name, "\\", "\\\\"); goto sourceline; } -#line 3438 "src/ast/lex.cc" +#line 3439 "src/ast/lex.cc" yy574: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); diff --git a/re2c/bootstrap/src/ast/lex.h b/re2c/bootstrap/src/ast/lex.h index add8cb16..f83447c0 100644 --- a/re2c/bootstrap/src/ast/lex.h +++ b/re2c/bootstrap/src/ast/lex.h @@ -1,4 +1,4 @@ -/* Generated by re2c 1.1.1 on Thu Dec 6 21:59:06 2018 */ +/* Generated by re2c 1.1.1 on Sat Dec 22 19:57:50 2018 */ #include diff --git a/re2c/bootstrap/src/ast/lex_conf.cc b/re2c/bootstrap/src/ast/lex_conf.cc index f22779e8..ba90734f 100644 --- a/re2c/bootstrap/src/ast/lex_conf.cc +++ b/re2c/bootstrap/src/ast/lex_conf.cc @@ -1,4 +1,4 @@ -/* Generated by re2c 1.1.1 on Thu Dec 6 21:40:14 2018 */ +/* Generated by re2c 1.1.1 on Sat Dec 22 19:57:50 2018 */ #line 1 "../src/ast/lex_conf.re" #include "src/util/c99_stdint.h" #include @@ -78,33 +78,33 @@ void Scanner::lex_conf(Opt &opts) if (yych <= 'b') goto yy3; if (yych <= 'c') goto yy5; if (yych <= 'd') goto yy6; - goto yy3; + goto yy7; } } } else { if (yych <= 's') { if (yych <= 'i') { - if (yych <= 'f') goto yy7; + if (yych <= 'f') goto yy8; if (yych <= 'h') goto yy3; - goto yy8; + goto yy9; } else { - if (yych == 'l') goto yy9; + if (yych == 'l') goto yy10; if (yych <= 'r') goto yy3; - goto yy10; + goto yy11; } } else { if (yych <= 'v') { - if (yych <= 't') goto yy11; + if (yych <= 't') goto yy12; if (yych <= 'u') goto yy3; - goto yy12; + goto yy13; } else { - if (yych == 'y') goto yy13; + if (yych == 'y') goto yy14; if (yych <= 'z') goto yy3; } } } yy2: -#line 164 "../src/ast/lex_conf.re" +#line 171 "../src/ast/lex_conf.re" { fatal_lc(l, c, "unrecognized configuration '%.*s'", static_cast(cur - tok), tok); @@ -121,403 +121,424 @@ yy4: goto yy2; yy5: yych = (unsigned char)*++cur; - if (yych == 'g') goto yy14; - if (yych == 'o') goto yy15; + if (yych == 'g') goto yy15; + if (yych == 'o') goto yy16; goto yy4; yy6: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy16; + if (yych == 'e') goto yy17; goto yy4; yy7: yych = (unsigned char)*++cur; - if (yych == 'l') goto yy17; + if (yych == 'o') goto yy18; goto yy4; yy8: yych = (unsigned char)*++cur; - if (yych == 'n') goto yy18; + if (yych == 'l') goto yy19; goto yy4; yy9: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy19; + if (yych == 'n') goto yy20; goto yy4; yy10: yych = (unsigned char)*++cur; - if (yych == 't') goto yy20; + if (yych == 'a') goto yy21; goto yy4; yy11: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy21; + if (yych == 't') goto yy22; goto yy4; yy12: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy22; + if (yych == 'a') goto yy23; goto yy4; yy13: yych = (unsigned char)*++cur; - if (yych == 'y') goto yy23; + if (yych == 'a') goto yy24; goto yy4; yy14: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy24; + if (yych == 'y') goto yy25; goto yy4; yy15: yych = (unsigned char)*++cur; - if (yych == 'n') goto yy25; + if (yych == 'o') goto yy26; goto yy4; yy16: yych = (unsigned char)*++cur; - if (yych == 'f') goto yy26; + if (yych == 'n') goto yy27; goto yy4; yy17: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy27; + if (yych == 'f') goto yy28; goto yy4; yy18: yych = (unsigned char)*++cur; - if (yych == 'd') goto yy28; + if (yych == 'f') goto yy29; goto yy4; yy19: yych = (unsigned char)*++cur; - if (yych == 'b') goto yy29; + if (yych == 'a') goto yy31; goto yy4; yy20: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy30; + if (yych == 'd') goto yy32; goto yy4; yy21: yych = (unsigned char)*++cur; - if (yych == 'g') goto yy31; + if (yych == 'b') goto yy33; goto yy4; yy22: yych = (unsigned char)*++cur; - if (yych == 'r') goto yy32; + if (yych == 'a') goto yy34; goto yy4; yy23: yych = (unsigned char)*++cur; - if (yych <= 'c') { - if (yych <= 'a') goto yy4; - if (yych <= 'b') goto yy33; - goto yy34; - } else { - if (yych == 'f') goto yy35; - goto yy4; - } + if (yych == 'g') goto yy35; + goto yy4; yy24: yych = (unsigned char)*++cur; - if (yych == 't') goto yy36; + if (yych == 'r') goto yy36; goto yy4; yy25: yych = (unsigned char)*++cur; - if (yych == 'd') goto yy37; - goto yy4; + if (yych <= 'c') { + if (yych <= 'a') goto yy4; + if (yych <= 'b') goto yy37; + goto yy38; + } else { + if (yych == 'f') goto yy39; + goto yy4; + } yy26: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy38; + if (yych == 't') goto yy40; goto yy4; yy27: yych = (unsigned char)*++cur; - if (yych == 'g') goto yy39; + if (yych == 'd') goto yy41; goto yy4; yy28: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy40; + if (yych == 'i') goto yy42; goto yy4; yy29: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy41; - goto yy4; -yy30: - yych = (unsigned char)*++cur; - if (yych == 'r') goto yy42; - if (yych == 't') goto yy43; - goto yy4; + if (yybm[0+yych] & 32) { + goto yy3; + } +#line 69 "../src/ast/lex_conf.re" + { + const int32_t eof = lex_conf_number(); + if (eof < 0) fatal_lc(l, c, "eof cannot have negative value"); + opts.set_eof(static_cast(eof)); + return; + } +#line 238 "src/ast/lex_conf.cc" yy31: yych = (unsigned char)*++cur; - if (yych == 's') goto yy44; + if (yych == 'g') goto yy43; goto yy4; yy32: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy45; + if (yych == 'e') goto yy44; goto yy4; yy33: yych = (unsigned char)*++cur; - if (yych == 'm') goto yy46; + if (yych == 'e') goto yy45; goto yy4; yy34: yych = (unsigned char)*++cur; - if (yych == 'h') goto yy47; + if (yych == 'r') goto yy46; + if (yych == 't') goto yy47; goto yy4; yy35: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy48; + if (yych == 's') goto yy48; goto yy4; yy36: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy49; + if (yych == 'i') goto yy49; goto yy4; yy37: yych = (unsigned char)*++cur; - if (yych <= 'd') { - if (yych == ':') goto yy50; - goto yy4; - } else { - if (yych <= 'e') goto yy51; - if (yych == 'p') goto yy52; - goto yy4; - } + if (yych == 'm') goto yy50; + goto yy4; yy38: yych = (unsigned char)*++cur; - if (yych == 'n') goto yy53; + if (yych == 'h') goto yy51; goto yy4; yy39: yych = (unsigned char)*++cur; - if (yych == 's') goto yy54; + if (yych == 'i') goto yy52; goto yy4; yy40: yych = (unsigned char)*++cur; - if (yych == 'n') goto yy55; + if (yych == 'o') goto yy53; goto yy4; yy41: yych = (unsigned char)*++cur; - if (yych == 'l') goto yy56; - goto yy4; + if (yych <= 'd') { + if (yych == ':') goto yy54; + goto yy4; + } else { + if (yych <= 'e') goto yy55; + if (yych == 'p') goto yy56; + goto yy4; + } yy42: yych = (unsigned char)*++cur; - if (yych == 't') goto yy57; + if (yych == 'n') goto yy57; goto yy4; yy43: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy58; + if (yych == 's') goto yy58; goto yy4; yy44: yych = (unsigned char)*++cur; - if (yych == ':') goto yy59; + if (yych == 'n') goto yy59; goto yy4; yy45: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy60; + if (yych == 'l') goto yy60; goto yy4; yy46: yych = (unsigned char)*++cur; - if (yych == ':') goto yy61; + if (yych == 't') goto yy61; goto yy4; yy47: yych = (unsigned char)*++cur; - if (yych == ':') goto yy62; + if (yych == 'e') goto yy62; goto yy4; yy48: yych = (unsigned char)*++cur; - if (yych == 'l') goto yy63; + if (yych == ':') goto yy63; goto yy4; yy49: yych = (unsigned char)*++cur; - if (yych == ':') goto yy64; + if (yych == 'a') goto yy64; goto yy4; yy50: yych = (unsigned char)*++cur; - if (yych == 'd') goto yy65; - if (yych == 'g') goto yy66; + if (yych == ':') goto yy65; goto yy4; yy51: yych = (unsigned char)*++cur; - if (yych == 'n') goto yy67; + if (yych == ':') goto yy66; goto yy4; yy52: yych = (unsigned char)*++cur; - if (yych == 'r') goto yy68; + if (yych == 'l') goto yy67; goto yy4; yy53: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy69; + if (yych == ':') goto yy68; goto yy4; yy54: yych = (unsigned char)*++cur; - if (yych == ':') goto yy70; + if (yych == 'd') goto yy69; + if (yych == 'g') goto yy70; goto yy4; yy55: yych = (unsigned char)*++cur; - if (yych == 't') goto yy71; + if (yych == 'n') goto yy71; goto yy4; yy56: yych = (unsigned char)*++cur; - if (yych == ':') goto yy72; - if (yych == 'p') goto yy73; + if (yych == 'r') goto yy72; goto yy4; yy57: yych = (unsigned char)*++cur; - if (yych == 'l') goto yy74; + if (yych == 'e') goto yy73; goto yy4; yy58: yych = (unsigned char)*++cur; - if (yych == ':') goto yy75; + if (yych == ':') goto yy74; goto yy4; yy59: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy76; - if (yych == 'p') goto yy77; + if (yych == 't') goto yy75; goto yy4; yy60: yych = (unsigned char)*++cur; - if (yych == 'b') goto yy78; + if (yych == ':') goto yy76; + if (yych == 'p') goto yy77; goto yy4; yy61: yych = (unsigned char)*++cur; - if (yych == 'h') goto yy79; + if (yych == 'l') goto yy78; goto yy4; yy62: yych = (unsigned char)*++cur; - if (yych == 'c') goto yy80; - if (yych == 'e') goto yy81; + if (yych == ':') goto yy79; goto yy4; yy63: yych = (unsigned char)*++cur; - if (yych == 'l') goto yy82; + if (yych == 'e') goto yy80; + if (yych == 'p') goto yy81; goto yy4; yy64: yych = (unsigned char)*++cur; - if (yych == 't') goto yy83; + if (yych == 'b') goto yy82; goto yy4; yy65: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy84; + if (yych == 'h') goto yy83; goto yy4; yy66: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy85; + if (yych == 'c') goto yy84; + if (yych == 'e') goto yy85; goto yy4; yy67: yych = (unsigned char)*++cur; - if (yych == 'u') goto yy86; + if (yych == 'l') goto yy86; goto yy4; yy68: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy87; + if (yych == 't') goto yy87; goto yy4; yy69: yych = (unsigned char)*++cur; - if (yych == ':') goto yy88; + if (yych == 'i') goto yy88; goto yy4; yy70: yych = (unsigned char)*++cur; - switch (yych) { - case '8': goto yy89; - case 'P': goto yy91; - case 'T': goto yy93; - case 'b': goto yy95; - case 'c': goto yy97; - case 'd': goto yy98; - case 'e': goto yy100; - case 'g': goto yy102; - case 'i': goto yy104; - case 'l': goto yy106; - case 'n': goto yy107; - case 'o': goto yy108; - case 'p': goto yy110; - case 's': goto yy111; - case 't': goto yy113; - case 'u': goto yy115; - case 'w': goto yy117; - case 'x': goto yy119; - default: goto yy4; - } + if (yych == 'o') goto yy89; + goto yy4; yy71: yych = (unsigned char)*++cur; - if (yych == ':') goto yy121; + if (yych == 'u') goto yy90; goto yy4; yy72: yych = (unsigned char)*++cur; - if (yych == 'y') goto yy122; + if (yych == 'e') goto yy91; goto yy4; yy73: yych = (unsigned char)*++cur; - if (yych == 'r') goto yy123; + if (yych == ':') goto yy92; goto yy4; yy74: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy124; - goto yy4; + switch (yych) { + case '8': goto yy93; + case 'P': goto yy95; + case 'T': goto yy97; + case 'b': goto yy99; + case 'c': goto yy101; + case 'd': goto yy102; + case 'e': goto yy104; + case 'g': goto yy106; + case 'i': goto yy108; + case 'l': goto yy110; + case 'n': goto yy111; + case 'o': goto yy112; + case 'p': goto yy114; + case 's': goto yy115; + case 't': goto yy117; + case 'u': goto yy119; + case 'w': goto yy121; + case 'x': goto yy123; + default: goto yy4; + } yy75: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy125; - if (yych == 'n') goto yy126; + if (yych == ':') goto yy125; goto yy4; yy76: yych = (unsigned char)*++cur; - if (yych == 'x') goto yy127; + if (yych == 'y') goto yy126; goto yy4; yy77: yych = (unsigned char)*++cur; - if (yych == 'r') goto yy128; + if (yych == 'r') goto yy127; goto yy4; yy78: yych = (unsigned char)*++cur; - if (yych == 'l') goto yy129; + if (yych == 'a') goto yy128; goto yy4; yy79: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy130; + if (yych == 'a') goto yy129; + if (yych == 'n') goto yy130; goto yy4; yy80: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy131; + if (yych == 'x') goto yy131; goto yy4; yy81: yych = (unsigned char)*++cur; - if (yych == 'm') goto yy132; + if (yych == 'r') goto yy132; goto yy4; yy82: yych = (unsigned char)*++cur; - if (yych == ':') goto yy133; + if (yych == 'l') goto yy133; goto yy4; yy83: yych = (unsigned char)*++cur; - if (yych == 'h') goto yy134; + if (yych == 'e') goto yy134; goto yy4; yy84: yych = (unsigned char)*++cur; - if (yych == 'v') goto yy135; + if (yych == 'o') goto yy135; goto yy4; yy85: yych = (unsigned char)*++cur; - if (yych == 't') goto yy136; + if (yych == 'm') goto yy136; goto yy4; yy86: yych = (unsigned char)*++cur; - if (yych == 'm') goto yy137; + if (yych == ':') goto yy137; goto yy4; yy87: yych = (unsigned char)*++cur; - if (yych == 'f') goto yy138; + if (yych == 'h') goto yy138; goto yy4; yy88: yych = (unsigned char)*++cur; - if (yych == 'Y') goto yy139; + if (yych == 'v') goto yy139; goto yy4; yy89: + yych = (unsigned char)*++cur; + if (yych == 't') goto yy140; + goto yy4; +yy90: + yych = (unsigned char)*++cur; + if (yych == 'm') goto yy141; + goto yy4; +yy91: + yych = (unsigned char)*++cur; + if (yych == 'f') goto yy142; + goto yy4; +yy92: + yych = (unsigned char)*++cur; + if (yych == 'Y') goto yy143; + goto yy4; +yy93: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } #line 62 "../src/ast/lex_conf.re" { lex_conf_enc(Enc::UTF8, opts); return; } -#line 504 "src/ast/lex_conf.cc" -yy91: +#line 525 "src/ast/lex_conf.cc" +yy95: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } #line 49 "../src/ast/lex_conf.re" { opts.set_posix_captures (lex_conf_bool()); return; } -#line 512 "src/ast/lex_conf.cc" -yy93: +#line 533 "src/ast/lex_conf.cc" +yy97: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } #line 48 "../src/ast/lex_conf.re" { opts.set_tags (lex_conf_bool()); return; } -#line 520 "src/ast/lex_conf.cc" -yy95: +#line 541 "src/ast/lex_conf.cc" +yy99: yych = (unsigned char)*++cur; if (yych <= 'Z') { if (yych <= '/') { @@ -530,82 +551,82 @@ yy95: if (yych <= '`') { if (yych == '_') goto yy3; } else { - if (yych == 'i') goto yy140; + if (yych == 'i') goto yy144; if (yych <= 'z') goto yy3; } } -yy96: +yy100: #line 43 "../src/ast/lex_conf.re" { opts.set_bFlag (lex_conf_bool()); return; } -#line 541 "src/ast/lex_conf.cc" -yy97: +#line 562 "src/ast/lex_conf.cc" +yy101: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy141; - if (yych == 'o') goto yy142; + if (yych == 'a') goto yy145; + if (yych == 'o') goto yy146; goto yy4; -yy98: +yy102: yych = (unsigned char)*++cur; if (yych <= '^') { if (yych <= '/') { if (yych == '-') goto yy3; } else { if (yych <= ':') goto yy3; - if (yych <= '@') goto yy99; + if (yych <= '@') goto yy103; if (yych <= 'Z') goto yy3; } } else { if (yych <= 'd') { if (yych != '`') goto yy3; } else { - if (yych <= 'e') goto yy143; - if (yych <= 'f') goto yy144; + if (yych <= 'e') goto yy147; + if (yych <= 'f') goto yy148; if (yych <= 'z') goto yy3; } } -yy99: +yy103: #line 44 "../src/ast/lex_conf.re" { opts.set_dFlag (lex_conf_bool()); return; } -#line 569 "src/ast/lex_conf.cc" -yy100: +#line 590 "src/ast/lex_conf.cc" +yy104: yych = (unsigned char)*++cur; if (yych <= '_') { if (yych <= ':') { if (yych == '-') goto yy3; if (yych >= '0') goto yy3; } else { - if (yych <= '@') goto yy101; + if (yych <= '@') goto yy105; if (yych <= 'Z') goto yy3; if (yych >= '_') goto yy3; } } else { if (yych <= 'c') { - if (yych <= '`') goto yy101; - if (yych <= 'a') goto yy145; + if (yych <= '`') goto yy105; + if (yych <= 'a') goto yy149; if (yych <= 'b') goto yy3; - goto yy146; + goto yy150; } else { if (yych <= 'm') { if (yych <= 'l') goto yy3; - goto yy147; + goto yy151; } else { - if (yych <= 'n') goto yy148; + if (yych <= 'n') goto yy152; if (yych <= 'z') goto yy3; } } } -yy101: +yy105: #line 58 "../src/ast/lex_conf.re" { lex_conf_enc(Enc::EBCDIC, opts); return; } -#line 600 "src/ast/lex_conf.cc" -yy102: +#line 621 "src/ast/lex_conf.cc" +yy106: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } #line 45 "../src/ast/lex_conf.re" { opts.set_gFlag (lex_conf_bool()); return; } -#line 608 "src/ast/lex_conf.cc" -yy104: +#line 629 "src/ast/lex_conf.cc" +yy108: yych = (unsigned char)*++cur; if (yych <= 'Z') { if (yych <= '/') { @@ -618,107 +639,107 @@ yy104: if (yych <= '`') { if (yych == '_') goto yy3; } else { - if (yych == 'n') goto yy149; + if (yych == 'n') goto yy153; if (yych <= 'z') goto yy3; } } -yy105: +yy109: #line 46 "../src/ast/lex_conf.re" { opts.set_iFlag (lex_conf_bool()); return; } -#line 629 "src/ast/lex_conf.cc" -yy106: +#line 650 "src/ast/lex_conf.cc" +yy110: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy150; + if (yych == 'o') goto yy154; goto yy4; -yy107: +yy111: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy151; - if (yych == 'o') goto yy152; + if (yych == 'e') goto yy155; + if (yych == 'o') goto yy156; goto yy4; -yy108: +yy112: yych = (unsigned char)*++cur; if (yych <= '^') { if (yych <= '/') { if (yych == '-') goto yy3; } else { if (yych <= ':') goto yy3; - if (yych <= '@') goto yy109; + if (yych <= '@') goto yy113; if (yych <= 'Z') goto yy3; } } else { if (yych <= 'p') { - if (yych == '`') goto yy109; + if (yych == '`') goto yy113; if (yych <= 'o') goto yy3; - goto yy153; + goto yy157; } else { - if (yych == 'u') goto yy154; + if (yych == 'u') goto yy158; if (yych <= 'z') goto yy3; } } -yy109: +yy113: #line 55 "../src/ast/lex_conf.re" { opts.set_output_file (lex_conf_string()); return; } -#line 662 "src/ast/lex_conf.cc" -yy110: +#line 683 "src/ast/lex_conf.cc" +yy114: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy155; + if (yych == 'o') goto yy159; goto yy4; -yy111: +yy115: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } #line 47 "../src/ast/lex_conf.re" { opts.set_sFlag (lex_conf_bool()); return; } -#line 674 "src/ast/lex_conf.cc" -yy113: +#line 695 "src/ast/lex_conf.cc" +yy117: yych = (unsigned char)*++cur; if (yych <= '^') { if (yych <= '/') { if (yych == '-') goto yy3; } else { if (yych <= ':') goto yy3; - if (yych <= '@') goto yy114; + if (yych <= '@') goto yy118; if (yych <= 'Z') goto yy3; } } else { if (yych <= 'a') { if (yych <= '_') goto yy3; - if (yych >= 'a') goto yy156; + if (yych >= 'a') goto yy160; } else { - if (yych == 'y') goto yy157; + if (yych == 'y') goto yy161; if (yych <= 'z') goto yy3; } } -yy114: +yy118: #line 56 "../src/ast/lex_conf.re" { opts.set_header_file (lex_conf_string()); return; } -#line 697 "src/ast/lex_conf.cc" -yy115: +#line 718 "src/ast/lex_conf.cc" +yy119: yych = (unsigned char)*++cur; if (yych <= '^') { if (yych <= '/') { if (yych == '-') goto yy3; } else { if (yych <= ':') goto yy3; - if (yych <= '@') goto yy116; + if (yych <= '@') goto yy120; if (yych <= 'Z') goto yy3; } } else { if (yych <= 'n') { - if (yych == '`') goto yy116; + if (yych == '`') goto yy120; if (yych <= 'm') goto yy3; - goto yy158; + goto yy162; } else { - if (yych == 't') goto yy159; + if (yych == 't') goto yy163; if (yych <= 'z') goto yy3; } } -yy116: +yy120: #line 59 "../src/ast/lex_conf.re" { lex_conf_enc(Enc::UTF32, opts); return; } -#line 721 "src/ast/lex_conf.cc" -yy117: +#line 742 "src/ast/lex_conf.cc" +yy121: yych = (unsigned char)*++cur; if (yych <= 'Z') { if (yych <= '/') { @@ -731,165 +752,149 @@ yy117: if (yych <= '`') { if (yych == '_') goto yy3; } else { - if (yych == 'i') goto yy160; + if (yych == 'i') goto yy164; if (yych <= 'z') goto yy3; } } -yy118: +yy122: #line 60 "../src/ast/lex_conf.re" { lex_conf_enc(Enc::UCS2, opts); return; } -#line 742 "src/ast/lex_conf.cc" -yy119: +#line 763 "src/ast/lex_conf.cc" +yy123: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } #line 61 "../src/ast/lex_conf.re" { lex_conf_enc(Enc::UTF16, opts); return; } -#line 750 "src/ast/lex_conf.cc" -yy121: - yych = (unsigned char)*++cur; - if (yych <= 'r') goto yy4; - if (yych <= 's') goto yy161; - if (yych <= 't') goto yy162; - goto yy4; -yy122: - yych = (unsigned char)*++cur; - if (yych == 'y') goto yy163; - goto yy4; -yy123: - yych = (unsigned char)*++cur; - if (yych == 'e') goto yy164; - goto yy4; -yy124: - yych = (unsigned char)*++cur; - if (yych == 'b') goto yy165; - goto yy4; +#line 771 "src/ast/lex_conf.cc" yy125: yych = (unsigned char)*++cur; - if (yych == 'b') goto yy166; + if (yych <= 'r') goto yy4; + if (yych <= 's') goto yy165; + if (yych <= 't') goto yy166; goto yy4; yy126: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy167; + if (yych == 'y') goto yy167; goto yy4; yy127: yych = (unsigned char)*++cur; - if (yych == 'p') goto yy168; + if (yych == 'e') goto yy168; goto yy4; yy128: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy169; + if (yych == 'b') goto yy169; goto yy4; yy129: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy170; + if (yych == 'b') goto yy170; goto yy4; yy130: yych = (unsigned char)*++cur; - if (yych == 'x') goto yy171; + if (yych == 'e') goto yy171; goto yy4; yy131: yych = (unsigned char)*++cur; - if (yych == 'n') goto yy173; + if (yych == 'p') goto yy172; goto yy4; yy132: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy174; + if (yych == 'e') goto yy173; goto yy4; yy133: yych = (unsigned char)*++cur; - if (yych <= 'd') { - if (yych == 'c') goto yy175; - goto yy4; - } else { - if (yych <= 'e') goto yy176; - if (yych == 'p') goto yy177; - goto yy4; - } + if (yych == 'e') goto yy174; + goto yy4; yy134: yych = (unsigned char)*++cur; - if (yych == 'r') goto yy178; + if (yych == 'x') goto yy175; goto yy4; yy135: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy179; + if (yych == 'n') goto yy177; goto yy4; yy136: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy180; + if (yych == 'i') goto yy178; goto yy4; yy137: yych = (unsigned char)*++cur; - if (yych == 'p') goto yy182; - goto yy4; + if (yych <= 'd') { + if (yych == 'c') goto yy179; + goto yy4; + } else { + if (yych <= 'e') goto yy180; + if (yych == 'p') goto yy181; + goto yy4; + } yy138: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy183; + if (yych == 'r') goto yy182; goto yy4; yy139: yych = (unsigned char)*++cur; - if (yych == 'Y') goto yy184; + if (yych == 'i') goto yy183; goto yy4; yy140: yych = (unsigned char)*++cur; - if (yych == 't') goto yy185; + if (yych == 'o') goto yy184; goto yy4; yy141: yych = (unsigned char)*++cur; - if (yych == 's') goto yy186; + if (yych == 'p') goto yy186; goto yy4; yy142: yych = (unsigned char)*++cur; - if (yych == 'm') goto yy187; + if (yych == 'i') goto yy187; goto yy4; yy143: yych = (unsigned char)*++cur; - if (yych == 'b') goto yy188; + if (yych == 'Y') goto yy188; goto yy4; yy144: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy189; + if (yych == 't') goto yy189; goto yy4; yy145: yych = (unsigned char)*++cur; - if (yych == 'g') goto yy190; + if (yych == 's') goto yy190; goto yy4; yy146: yych = (unsigned char)*++cur; - if (yych == 'b') goto yy191; + if (yych == 'm') goto yy191; goto yy4; yy147: yych = (unsigned char)*++cur; - if (yych == 'p') goto yy192; + if (yych == 'b') goto yy192; goto yy4; yy148: yych = (unsigned char)*++cur; - if (yych == 'c') goto yy193; + if (yych == 'a') goto yy193; goto yy4; yy149: yych = (unsigned char)*++cur; - if (yych == 'p') goto yy194; + if (yych == 'g') goto yy194; goto yy4; yy150: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy195; + if (yych == 'b') goto yy195; goto yy4; yy151: yych = (unsigned char)*++cur; - if (yych == 's') goto yy196; + if (yych == 'p') goto yy196; goto yy4; yy152: yych = (unsigned char)*++cur; - if (yych == '-') goto yy197; + if (yych == 'c') goto yy197; goto yy4; yy153: yych = (unsigned char)*++cur; - if (yych == 't') goto yy198; + if (yych == 'p') goto yy198; goto yy4; yy154: yych = (unsigned char)*++cur; - if (yych == 't') goto yy199; + if (yych == 'o') goto yy199; goto yy4; yy155: yych = (unsigned char)*++cur; @@ -897,151 +902,151 @@ yy155: goto yy4; yy156: yych = (unsigned char)*++cur; - if (yych == 'g') goto yy201; + if (yych == '-') goto yy201; goto yy4; yy157: yych = (unsigned char)*++cur; - if (yych == 'p') goto yy202; + if (yych == 't') goto yy202; goto yy4; yy158: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy203; + if (yych == 't') goto yy203; goto yy4; yy159: yych = (unsigned char)*++cur; - if (yych == 'f') goto yy204; + if (yych == 's') goto yy204; goto yy4; yy160: yych = (unsigned char)*++cur; - if (yych == 'd') goto yy205; + if (yych == 'g') goto yy205; goto yy4; yy161: yych = (unsigned char)*++cur; - if (yych == 't') goto yy206; + if (yych == 'p') goto yy206; goto yy4; yy162: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy207; + if (yych == 'i') goto yy207; goto yy4; yy163: yych = (unsigned char)*++cur; - if (yych == 'F') goto yy208; - if (yych == 'N') goto yy209; + if (yych == 'f') goto yy208; goto yy4; yy164: yych = (unsigned char)*++cur; - if (yych == 'f') goto yy210; + if (yych == 'd') goto yy209; goto yy4; yy165: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy211; + if (yych == 't') goto yy210; goto yy4; yy166: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy212; + if (yych == 'o') goto yy211; goto yy4; yy167: yych = (unsigned char)*++cur; - if (yych == 'x') goto yy213; + if (yych == 'F') goto yy212; + if (yych == 'N') goto yy213; goto yy4; yy168: yych = (unsigned char)*++cur; - if (yych == 'r') goto yy214; + if (yych == 'f') goto yy214; goto yy4; yy169: yych = (unsigned char)*++cur; - if (yych == 'f') goto yy215; + if (yych == 'e') goto yy215; goto yy4; yy170: yych = (unsigned char)*++cur; - if (yych == ':') goto yy216; + if (yych == 'o') goto yy216; goto yy4; yy171: yych = (unsigned char)*++cur; - if (yybm[0+yych] & 32) { - goto yy3; - } -#line 95 "../src/ast/lex_conf.re" - { opts.set_yybmHexTable (lex_conf_bool()); return; } -#line 967 "src/ast/lex_conf.cc" + if (yych == 'x') goto yy217; + goto yy4; +yy172: + yych = (unsigned char)*++cur; + if (yych == 'r') goto yy218; + goto yy4; yy173: yych = (unsigned char)*++cur; - if (yych == 'v') goto yy217; + if (yych == 'f') goto yy219; goto yy4; yy174: yych = (unsigned char)*++cur; - if (yych == 't') goto yy218; + if (yych == ':') goto yy220; goto yy4; yy175: yych = (unsigned char)*++cur; - if (yych == 'h') goto yy220; - goto yy4; -yy176: - yych = (unsigned char)*++cur; - if (yych == 'n') goto yy221; - goto yy4; + if (yybm[0+yych] & 32) { + goto yy3; + } +#line 102 "../src/ast/lex_conf.re" + { opts.set_yybmHexTable (lex_conf_bool()); return; } +#line 988 "src/ast/lex_conf.cc" yy177: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy222; + if (yych == 'v') goto yy221; goto yy4; yy178: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy223; + if (yych == 't') goto yy222; goto yy4; yy179: yych = (unsigned char)*++cur; - if (yych == 'd') goto yy224; + if (yych == 'h') goto yy224; goto yy4; yy180: - yyaccept = 0; - yych = (unsigned char)*(mar = ++cur); - if (yybm[0+yych] & 32) { - goto yy3; - } - if (yych == '@') goto yy225; + yych = (unsigned char)*++cur; + if (yych == 'n') goto yy225; + goto yy4; yy181: -#line 79 "../src/ast/lex_conf.re" - { opts.set_condGoto (lex_conf_string ()); return; } -#line 1006 "src/ast/lex_conf.cc" + yych = (unsigned char)*++cur; + if (yych == 'a') goto yy226; + goto yy4; yy182: yych = (unsigned char)*++cur; - if (yych == 'r') goto yy227; + if (yych == 'e') goto yy227; goto yy4; yy183: yych = (unsigned char)*++cur; - if (yych == 'x') goto yy228; + if (yych == 'd') goto yy228; goto yy4; yy184: - yych = (unsigned char)*++cur; - switch (yych) { - case 'B': goto yy230; - case 'C': goto yy231; - case 'D': goto yy232; - case 'F': goto yy233; - case 'G': goto yy234; - case 'L': goto yy235; - case 'M': goto yy236; - case 'P': goto yy237; - case 'R': goto yy238; - case 'S': goto yy239; - default: goto yy4; + yyaccept = 0; + yych = (unsigned char)*(mar = ++cur); + if (yybm[0+yych] & 32) { + goto yy3; } + if (yych == '@') goto yy229; yy185: - yych = (unsigned char)*++cur; - if (yych == '-') goto yy240; - goto yy4; +#line 86 "../src/ast/lex_conf.re" + { opts.set_condGoto (lex_conf_string ()); return; } +#line 1027 "src/ast/lex_conf.cc" yy186: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy241; + if (yych == 'r') goto yy231; goto yy4; yy187: yych = (unsigned char)*++cur; - if (yych == 'p') goto yy242; + if (yych == 'x') goto yy232; goto yy4; yy188: yych = (unsigned char)*++cur; - if (yych == 'u') goto yy243; - goto yy4; + switch (yych) { + case 'B': goto yy234; + case 'C': goto yy235; + case 'D': goto yy236; + case 'F': goto yy237; + case 'G': goto yy238; + case 'L': goto yy239; + case 'M': goto yy240; + case 'P': goto yy241; + case 'R': goto yy242; + case 'S': goto yy243; + default: goto yy4; + } yy189: yych = (unsigned char)*++cur; if (yych == '-') goto yy244; @@ -1052,321 +1057,337 @@ yy190: goto yy4; yy191: yych = (unsigned char)*++cur; - if (yybm[0+yych] & 32) { - goto yy3; - } - goto yy101; + if (yych == 'p') goto yy246; + goto yy4; yy192: yych = (unsigned char)*++cur; - if (yych == 't') goto yy246; + if (yych == 'u') goto yy247; goto yy4; yy193: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy247; + if (yych == '-') goto yy248; goto yy4; yy194: yych = (unsigned char)*++cur; - if (yych == 'u') goto yy248; + if (yych == 'e') goto yy249; goto yy4; yy195: yych = (unsigned char)*++cur; - if (yych == 'k') goto yy249; - goto yy4; + if (yybm[0+yych] & 32) { + goto yy3; + } + goto yy105; yy196: yych = (unsigned char)*++cur; if (yych == 't') goto yy250; goto yy4; yy197: yych = (unsigned char)*++cur; - if (yych == 'd') goto yy251; + if (yych == 'o') goto yy251; goto yy4; yy198: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy252; + if (yych == 'u') goto yy252; goto yy4; yy199: yych = (unsigned char)*++cur; - if (yych == 'p') goto yy253; + if (yych == 'k') goto yy253; goto yy4; yy200: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy254; + if (yych == 't') goto yy254; goto yy4; yy201: yych = (unsigned char)*++cur; - if (yych == 's') goto yy93; + if (yych == 'd') goto yy255; goto yy4; yy202: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy255; + if (yych == 'i') goto yy256; goto yy4; yy203: yych = (unsigned char)*++cur; - if (yych == 'c') goto yy256; + if (yych == 'p') goto yy257; goto yy4; yy204: yych = (unsigned char)*++cur; - if (yych == '-') goto yy257; + if (yych == 'i') goto yy258; goto yy4; yy205: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy258; + if (yych == 's') goto yy97; goto yy4; yy206: yych = (unsigned char)*++cur; - if (yych == 'r') goto yy259; + if (yych == 'e') goto yy259; goto yy4; yy207: yych = (unsigned char)*++cur; - if (yych == 'p') goto yy260; + if (yych == 'c') goto yy260; goto yy4; yy208: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy262; + if (yych == '-') goto yy261; goto yy4; yy209: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy263; + if (yych == 'e') goto yy262; goto yy4; yy210: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy264; + if (yych == 'r') goto yy263; goto yy4; yy211: yych = (unsigned char)*++cur; - if (yych == 'l') goto yy265; + if (yych == 'p') goto yy264; goto yy4; yy212: yych = (unsigned char)*++cur; - if (yych == 'r') goto yy267; + if (yych == 'i') goto yy266; goto yy4; yy213: yych = (unsigned char)*++cur; - if (yych == 't') goto yy268; + if (yych == 'e') goto yy267; goto yy4; yy214: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy269; + if (yych == 'i') goto yy268; goto yy4; yy215: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy270; + if (yych == 'l') goto yy269; goto yy4; yy216: yych = (unsigned char)*++cur; - if (yych == 'y') goto yy271; + if (yych == 'r') goto yy271; goto yy4; yy217: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy272; + if (yych == 't') goto yy272; goto yy4; yy218: - yych = (unsigned char)*++cur; - if (yybm[0+yych] & 32) { - goto yy3; - } -#line 146 "../src/ast/lex_conf.re" - { opts.set_bEmitYYCh (lex_conf_bool()); return; } -#line 1171 "src/ast/lex_conf.cc" -yy220: yych = (unsigned char)*++cur; if (yych == 'e') goto yy273; goto yy4; -yy221: +yy219: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy274; + if (yych == 'i') goto yy274; goto yy4; -yy222: +yy220: yych = (unsigned char)*++cur; - if (yych == 'r') goto yy275; + if (yych == 'y') goto yy275; goto yy4; -yy223: +yy221: yych = (unsigned char)*++cur; - if (yych == 's') goto yy276; + if (yych == 'e') goto yy276; goto yy4; +yy222: + yych = (unsigned char)*++cur; + if (yybm[0+yych] & 32) { + goto yy3; + } +#line 153 "../src/ast/lex_conf.re" + { opts.set_bEmitYYCh (lex_conf_bool()); return; } +#line 1192 "src/ast/lex_conf.cc" yy224: yych = (unsigned char)*++cur; if (yych == 'e') goto yy277; goto yy4; yy225: yych = (unsigned char)*++cur; - if (yych == 'c') goto yy278; + if (yych == 'a') goto yy278; + goto yy4; yy226: + yych = (unsigned char)*++cur; + if (yych == 'r') goto yy279; + goto yy4; +yy227: + yych = (unsigned char)*++cur; + if (yych == 's') goto yy280; + goto yy4; +yy228: + yych = (unsigned char)*++cur; + if (yych == 'e') goto yy281; + goto yy4; +yy229: + yych = (unsigned char)*++cur; + if (yych == 'c') goto yy282; +yy230: cur = mar; if (yyaccept <= 2) { if (yyaccept <= 1) { if (yyaccept == 0) { - goto yy181; + goto yy185; } else { - goto yy266; + goto yy270; } } else { - goto yy338; + goto yy342; } } else { if (yyaccept <= 4) { if (yyaccept == 3) { - goto yy407; + goto yy411; } else { - goto yy614; + goto yy618; } } else { - goto yy692; + goto yy696; } } -yy227: +yy231: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy279; + if (yych == 'e') goto yy283; goto yy4; -yy228: +yy232: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } -#line 75 "../src/ast/lex_conf.re" +#line 82 "../src/ast/lex_conf.re" { opts.set_condPrefix (lex_conf_string ()); return; } -#line 1229 "src/ast/lex_conf.cc" -yy230: +#line 1250 "src/ast/lex_conf.cc" +yy234: yych = (unsigned char)*++cur; - if (yych == 'A') goto yy280; + if (yych == 'A') goto yy284; goto yy4; -yy231: +yy235: yych = (unsigned char)*++cur; if (yych <= 'S') { - if (yych == 'O') goto yy281; + if (yych == 'O') goto yy285; goto yy4; } else { - if (yych <= 'T') goto yy282; - if (yych <= 'U') goto yy283; + if (yych <= 'T') goto yy286; + if (yych <= 'U') goto yy287; goto yy4; } -yy232: - yych = (unsigned char)*++cur; - if (yych == 'E') goto yy284; - goto yy4; -yy233: - yych = (unsigned char)*++cur; - if (yych == 'I') goto yy285; - goto yy4; -yy234: - yych = (unsigned char)*++cur; - if (yych == 'E') goto yy286; - goto yy4; -yy235: - yych = (unsigned char)*++cur; - if (yych == 'E') goto yy287; - if (yych == 'I') goto yy288; - goto yy4; yy236: yych = (unsigned char)*++cur; - if (yych == 'A') goto yy289; - if (yych == 'T') goto yy290; + if (yych == 'E') goto yy288; goto yy4; yy237: yych = (unsigned char)*++cur; - if (yych == 'E') goto yy291; + if (yych == 'I') goto yy289; goto yy4; yy238: yych = (unsigned char)*++cur; - if (yych == 'E') goto yy292; + if (yych == 'E') goto yy290; goto yy4; yy239: yych = (unsigned char)*++cur; - if (yych <= 'J') { - if (yych == 'E') goto yy293; - goto yy4; - } else { - if (yych <= 'K') goto yy294; - if (yych == 'T') goto yy295; - goto yy4; - } + if (yych == 'E') goto yy291; + if (yych == 'I') goto yy292; + goto yy4; yy240: yych = (unsigned char)*++cur; - if (yych == 'v') goto yy296; + if (yych == 'A') goto yy293; + if (yych == 'T') goto yy294; goto yy4; yy241: yych = (unsigned char)*++cur; - if (yych == '-') goto yy297; + if (yych == 'E') goto yy295; goto yy4; yy242: yych = (unsigned char)*++cur; - if (yych == 'u') goto yy298; + if (yych == 'E') goto yy296; goto yy4; yy243: yych = (unsigned char)*++cur; - if (yych == 'g') goto yy299; - goto yy4; + if (yych <= 'J') { + if (yych == 'E') goto yy297; + goto yy4; + } else { + if (yych <= 'K') goto yy298; + if (yych == 'T') goto yy299; + goto yy4; + } yy244: yych = (unsigned char)*++cur; - if (yych == 'm') goto yy300; + if (yych == 'v') goto yy300; goto yy4; yy245: yych = (unsigned char)*++cur; - if (yych == 'r') goto yy301; + if (yych == '-') goto yy301; goto yy4; yy246: yych = (unsigned char)*++cur; - if (yych == 'y') goto yy302; + if (yych == 'u') goto yy302; goto yy4; yy247: yych = (unsigned char)*++cur; - if (yych == 'd') goto yy303; + if (yych == 'g') goto yy303; goto yy4; yy248: yych = (unsigned char)*++cur; - if (yych == 't') goto yy304; + if (yych == 'm') goto yy304; goto yy4; yy249: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy306; + if (yych == 'r') goto yy305; goto yy4; yy250: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy307; + if (yych == 'y') goto yy306; goto yy4; yy251: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy308; + if (yych == 'd') goto yy307; goto yy4; yy252: yych = (unsigned char)*++cur; - if (yych == 'm') goto yy309; + if (yych == 't') goto yy308; goto yy4; yy253: yych = (unsigned char)*++cur; - if (yych == 'u') goto yy310; + if (yych == 'a') goto yy310; goto yy4; yy254: yych = (unsigned char)*++cur; - if (yych == 'x') goto yy311; + if (yych == 'e') goto yy311; goto yy4; yy255: yych = (unsigned char)*++cur; - if (yych == '-') goto yy312; + if (yych == 'e') goto yy312; goto yy4; yy256: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy313; + if (yych == 'm') goto yy313; goto yy4; yy257: yych = (unsigned char)*++cur; - if (yych == '1') goto yy314; - if (yych == '8') goto yy89; + if (yych == 'u') goto yy314; goto yy4; yy258: yych = (unsigned char)*++cur; - if (yych == '-') goto yy315; + if (yych == 'x') goto yy315; goto yy4; yy259: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy316; + if (yych == '-') goto yy316; goto yy4; yy260: + yych = (unsigned char)*++cur; + if (yych == 'o') goto yy317; + goto yy4; +yy261: + yych = (unsigned char)*++cur; + if (yych == '1') goto yy318; + if (yych == '8') goto yy93; + goto yy4; +yy262: + yych = (unsigned char)*++cur; + if (yych == '-') goto yy319; + goto yy4; +yy263: + yych = (unsigned char)*++cur; + if (yych == 'i') goto yy320; + goto yy4; +yy264: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } -#line 131 "../src/ast/lex_conf.re" +#line 138 "../src/ast/lex_conf.re" { const int32_t n = lex_conf_number (); if (n < 0) @@ -1376,20 +1397,20 @@ yy260: opts.set_topIndent (static_cast (n)); return; } -#line 1380 "src/ast/lex_conf.cc" -yy262: +#line 1401 "src/ast/lex_conf.cc" +yy266: yych = (unsigned char)*++cur; - if (yych == 'l') goto yy317; + if (yych == 'l') goto yy321; goto yy4; -yy263: +yy267: yych = (unsigned char)*++cur; - if (yych == 'x') goto yy318; + if (yych == 'x') goto yy322; goto yy4; -yy264: +yy268: yych = (unsigned char)*++cur; - if (yych == 'x') goto yy319; + if (yych == 'x') goto yy323; goto yy4; -yy265: +yy269: yyaccept = 1; yych = (unsigned char)*(mar = ++cur); if (yybm[0+yych] & 32) { @@ -1398,612 +1419,612 @@ yy265: if (yych <= 0x1F) { if (yych == '\t') { ctx = cur; - goto yy321; + goto yy325; } } else { if (yych <= ' ') { ctx = cur; - goto yy321; + goto yy325; } if (yych == '=') { ctx = cur; - goto yy323; + goto yy327; } } -yy266: -#line 159 "../src/ast/lex_conf.re" - { opts.set_startlabel (lex_conf_string()); return; } -#line 1417 "src/ast/lex_conf.cc" -yy267: - yych = (unsigned char)*++cur; - if (yych == 't') goto yy325; - goto yy4; -yy268: - yych = (unsigned char)*++cur; - if (yych == 'l') goto yy327; - goto yy4; -yy269: - yych = (unsigned char)*++cur; - if (yych == 's') goto yy328; - goto yy4; yy270: - yych = (unsigned char)*++cur; - if (yych == 'x') goto yy329; - goto yy4; +#line 166 "../src/ast/lex_conf.re" + { opts.set_startlabel (lex_conf_string()); return; } +#line 1438 "src/ast/lex_conf.cc" yy271: yych = (unsigned char)*++cur; - if (yych == 'y') goto yy331; + if (yych == 't') goto yy329; goto yy4; yy272: yych = (unsigned char)*++cur; - if (yych == 'r') goto yy332; + if (yych == 'l') goto yy331; goto yy4; yy273: yych = (unsigned char)*++cur; - if (yych == 'c') goto yy333; + if (yych == 's') goto yy332; goto yy4; yy274: yych = (unsigned char)*++cur; - if (yych == 'b') goto yy334; + if (yych == 'x') goto yy333; goto yy4; yy275: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy335; + if (yych == 'y') goto yy335; goto yy4; yy276: yych = (unsigned char)*++cur; - if (yych == 'h') goto yy336; + if (yych == 'r') goto yy336; goto yy4; yy277: yych = (unsigned char)*++cur; - if (yych == 'r') goto yy337; + if (yych == 'c') goto yy337; goto yy4; yy278: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy339; - goto yy226; + if (yych == 'b') goto yy338; + goto yy4; yy279: yych = (unsigned char)*++cur; - if (yych == 'f') goto yy340; + if (yych == 'a') goto yy339; goto yy4; yy280: yych = (unsigned char)*++cur; - if (yych == 'C') goto yy341; + if (yych == 'h') goto yy340; goto yy4; yy281: yych = (unsigned char)*++cur; - if (yych == 'N') goto yy342; + if (yych == 'r') goto yy341; goto yy4; yy282: yych = (unsigned char)*++cur; - if (yych <= 'W') goto yy4; - if (yych <= 'X') goto yy343; - if (yych <= 'Y') goto yy344; - goto yy4; + if (yych == 'o') goto yy343; + goto yy230; yy283: yych = (unsigned char)*++cur; - if (yych == 'R') goto yy345; + if (yych == 'f') goto yy344; goto yy4; yy284: yych = (unsigned char)*++cur; - if (yych == 'B') goto yy346; + if (yych == 'C') goto yy345; goto yy4; yy285: yych = (unsigned char)*++cur; - if (yych == 'L') goto yy347; + if (yych == 'N') goto yy346; goto yy4; yy286: yych = (unsigned char)*++cur; - if (yych == 'T') goto yy348; + if (yych <= 'W') goto yy4; + if (yych <= 'X') goto yy347; + if (yych <= 'Y') goto yy348; goto yy4; yy287: yych = (unsigned char)*++cur; - if (yych == 'S') goto yy349; + if (yych == 'R') goto yy349; goto yy4; yy288: yych = (unsigned char)*++cur; - if (yych == 'M') goto yy350; + if (yych == 'B') goto yy350; goto yy4; yy289: yych = (unsigned char)*++cur; - if (yych == 'R') goto yy351; + if (yych == 'L') goto yy351; goto yy4; yy290: yych = (unsigned char)*++cur; - if (yych == 'A') goto yy352; + if (yych == 'T') goto yy352; goto yy4; yy291: yych = (unsigned char)*++cur; - if (yych == 'E') goto yy353; + if (yych == 'S') goto yy353; goto yy4; yy292: yych = (unsigned char)*++cur; - if (yych == 'S') goto yy354; + if (yych == 'M') goto yy354; goto yy4; yy293: yych = (unsigned char)*++cur; - if (yych == 'T') goto yy355; + if (yych == 'R') goto yy355; goto yy4; yy294: yych = (unsigned char)*++cur; - if (yych == 'I') goto yy356; + if (yych == 'A') goto yy356; goto yy4; yy295: yych = (unsigned char)*++cur; - if (yych == 'A') goto yy357; + if (yych == 'E') goto yy357; goto yy4; yy296: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy358; + if (yych == 'S') goto yy358; goto yy4; yy297: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy359; + if (yych == 'T') goto yy359; goto yy4; yy298: yych = (unsigned char)*++cur; - if (yych == 't') goto yy360; + if (yych == 'I') goto yy360; goto yy4; yy299: yych = (unsigned char)*++cur; - if (yych == '-') goto yy361; + if (yych == 'A') goto yy361; goto yy4; yy300: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy362; + if (yych == 'e') goto yy362; goto yy4; yy301: yych = (unsigned char)*++cur; - if (yych == '-') goto yy363; + if (yych == 'i') goto yy363; goto yy4; yy302: yych = (unsigned char)*++cur; - if (yych == '-') goto yy364; + if (yych == 't') goto yy364; goto yy4; yy303: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy365; + if (yych == '-') goto yy365; goto yy4; yy304: yych = (unsigned char)*++cur; - if (yybm[0+yych] & 32) { - goto yy3; - } -#line 65 "../src/ast/lex_conf.re" - { lex_conf_input(opts); return; } -#line 1575 "src/ast/lex_conf.cc" -yy306: - yych = (unsigned char)*++cur; - if (yych == 'h') goto yy366; + if (yych == 'i') goto yy366; goto yy4; -yy307: +yy305: yych = (unsigned char)*++cur; - if (yych == 'd') goto yy367; + if (yych == '-') goto yy367; goto yy4; -yy308: +yy306: yych = (unsigned char)*++cur; - if (yych == 'b') goto yy368; + if (yych == '-') goto yy368; goto yy4; -yy309: +yy307: yych = (unsigned char)*++cur; if (yych == 'i') goto yy369; goto yy4; +yy308: + yych = (unsigned char)*++cur; + if (yybm[0+yych] & 32) { + goto yy3; + } +#line 65 "../src/ast/lex_conf.re" + { lex_conf_input(opts); return; } +#line 1596 "src/ast/lex_conf.cc" yy310: yych = (unsigned char)*++cur; - if (yych == 't') goto yy370; + if (yych == 'h') goto yy370; goto yy4; yy311: yych = (unsigned char)*++cur; - if (yych == '-') goto yy371; + if (yych == 'd') goto yy371; goto yy4; yy312: yych = (unsigned char)*++cur; - if (yych == 'h') goto yy372; + if (yych == 'b') goto yy372; goto yy4; yy313: yych = (unsigned char)*++cur; - if (yych == 'd') goto yy373; + if (yych == 'i') goto yy373; goto yy4; yy314: yych = (unsigned char)*++cur; - if (yych == '6') goto yy119; + if (yych == 't') goto yy374; goto yy4; yy315: yych = (unsigned char)*++cur; - if (yych == 'c') goto yy374; + if (yych == '-') goto yy375; goto yy4; yy316: yych = (unsigned char)*++cur; - if (yych == 'n') goto yy375; + if (yych == 'h') goto yy376; goto yy4; yy317: yych = (unsigned char)*++cur; - if (yych == 'l') goto yy376; + if (yych == 'd') goto yy377; goto yy4; yy318: yych = (unsigned char)*++cur; - if (yych == 't') goto yy377; + if (yych == '6') goto yy123; goto yy4; yy319: + yych = (unsigned char)*++cur; + if (yych == 'c') goto yy378; + goto yy4; +yy320: + yych = (unsigned char)*++cur; + if (yych == 'n') goto yy379; + goto yy4; +yy321: + yych = (unsigned char)*++cur; + if (yych == 'l') goto yy380; + goto yy4; +yy322: + yych = (unsigned char)*++cur; + if (yych == 't') goto yy381; + goto yy4; +yy323: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } -#line 155 "../src/ast/lex_conf.re" +#line 162 "../src/ast/lex_conf.re" { opts.set_labelPrefix (lex_conf_string ()); return; } -#line 1635 "src/ast/lex_conf.cc" -yy321: +#line 1656 "src/ast/lex_conf.cc" +yy325: ++cur; if (lim <= cur) YYFILL(1); yych = (unsigned char)*cur; if (yybm[0+yych] & 64) { - goto yy321; + goto yy325; } - if (yych != '=') goto yy226; -yy323: + if (yych != '=') goto yy230; +yy327: ++cur; if ((lim - cur) < 2) YYFILL(2); yych = (unsigned char)*cur; if (yych <= ',') { if (yych <= '\t') { - if (yych <= 0x08) goto yy226; - goto yy323; + if (yych <= 0x08) goto yy230; + goto yy327; } else { - if (yych == ' ') goto yy323; - goto yy226; + if (yych == ' ') goto yy327; + goto yy230; } } else { if (yych <= '/') { - if (yych <= '-') goto yy379; - goto yy226; + if (yych <= '-') goto yy383; + goto yy230; } else { - if (yych <= '0') goto yy380; - if (yych <= '9') goto yy382; - goto yy226; + if (yych <= '0') goto yy384; + if (yych <= '9') goto yy386; + goto yy230; } } -yy325: +yy329: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } -#line 90 "../src/ast/lex_conf.re" +#line 97 "../src/ast/lex_conf.re" { opts.set_bUseStateAbort (lex_conf_bool()); return; } -#line 1673 "src/ast/lex_conf.cc" -yy327: +#line 1694 "src/ast/lex_conf.cc" +yy331: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy384; + if (yych == 'a') goto yy388; goto yy4; -yy328: +yy332: yych = (unsigned char)*++cur; - if (yych == 's') goto yy385; + if (yych == 's') goto yy389; goto yy4; -yy329: +yy333: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } -#line 126 "../src/ast/lex_conf.re" +#line 133 "../src/ast/lex_conf.re" { opts.set_tags_prefix (lex_conf_string ()); return; } -#line 1689 "src/ast/lex_conf.cc" -yy331: +#line 1710 "src/ast/lex_conf.cc" +yy335: yych = (unsigned char)*++cur; if (yych <= 'c') { if (yych <= '`') goto yy4; - if (yych <= 'a') goto yy386; - if (yych <= 'b') goto yy387; - goto yy388; + if (yych <= 'a') goto yy390; + if (yych <= 'b') goto yy391; + goto yy392; } else { if (yych <= 'r') goto yy4; - if (yych <= 's') goto yy389; - if (yych <= 't') goto yy390; + if (yych <= 's') goto yy393; + if (yych <= 't') goto yy394; goto yy4; } -yy332: +yy336: yych = (unsigned char)*++cur; - if (yych == 's') goto yy391; + if (yych == 's') goto yy395; goto yy4; -yy333: +yy337: yych = (unsigned char)*++cur; - if (yych == 'k') goto yy392; + if (yych == 'k') goto yy396; goto yy4; -yy334: +yy338: yych = (unsigned char)*++cur; - if (yych == 'l') goto yy394; + if (yych == 'l') goto yy398; goto yy4; -yy335: +yy339: yych = (unsigned char)*++cur; - if (yych == 'm') goto yy395; + if (yych == 'm') goto yy399; goto yy4; -yy336: +yy340: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy396; + if (yych == 'o') goto yy400; goto yy4; -yy337: +yy341: yyaccept = 2; yych = (unsigned char)*(mar = ++cur); if (yybm[0+yych] & 32) { goto yy3; } - if (yych == '@') goto yy397; -yy338: -#line 77 "../src/ast/lex_conf.re" - { opts.set_condDivider (lex_conf_string ()); return; } -#line 1733 "src/ast/lex_conf.cc" -yy339: - yych = (unsigned char)*++cur; - if (yych == 'n') goto yy398; - goto yy226; -yy340: - yych = (unsigned char)*++cur; - if (yych == 'i') goto yy399; - goto yy4; -yy341: - yych = (unsigned char)*++cur; - if (yych == 'K') goto yy400; - goto yy4; + if (yych == '@') goto yy401; yy342: - yych = (unsigned char)*++cur; - if (yych == 'D') goto yy401; - goto yy4; +#line 84 "../src/ast/lex_conf.re" + { opts.set_condDivider (lex_conf_string ()); return; } +#line 1754 "src/ast/lex_conf.cc" yy343: yych = (unsigned char)*++cur; - if (yych == 'M') goto yy402; - goto yy4; + if (yych == 'n') goto yy402; + goto yy230; yy344: yych = (unsigned char)*++cur; - if (yych == 'P') goto yy403; + if (yych == 'i') goto yy403; goto yy4; yy345: yych = (unsigned char)*++cur; - if (yych == 'S') goto yy404; + if (yych == 'K') goto yy404; goto yy4; yy346: yych = (unsigned char)*++cur; - if (yych == 'U') goto yy405; + if (yych == 'D') goto yy405; goto yy4; yy347: yych = (unsigned char)*++cur; - if (yych == 'L') goto yy406; + if (yych == 'M') goto yy406; goto yy4; yy348: yych = (unsigned char)*++cur; - if (yych == 'C') goto yy408; - if (yych == 'S') goto yy409; + if (yych == 'P') goto yy407; goto yy4; yy349: yych = (unsigned char)*++cur; - if (yych == 'S') goto yy410; + if (yych == 'S') goto yy408; goto yy4; yy350: yych = (unsigned char)*++cur; - if (yych == 'I') goto yy411; + if (yych == 'U') goto yy409; goto yy4; yy351: yych = (unsigned char)*++cur; - if (yych == 'K') goto yy412; + if (yych == 'L') goto yy410; goto yy4; yy352: yych = (unsigned char)*++cur; - if (yych == 'G') goto yy413; + if (yych == 'C') goto yy412; + if (yych == 'S') goto yy413; goto yy4; yy353: yych = (unsigned char)*++cur; - if (yych == 'K') goto yy414; + if (yych == 'S') goto yy414; goto yy4; yy354: yych = (unsigned char)*++cur; - if (yych == 'T') goto yy416; + if (yych == 'I') goto yy415; goto yy4; yy355: yych = (unsigned char)*++cur; - if (yych == 'C') goto yy417; - if (yych == 'S') goto yy418; + if (yych == 'K') goto yy416; goto yy4; yy356: yych = (unsigned char)*++cur; - if (yych == 'P') goto yy419; + if (yych == 'G') goto yy417; goto yy4; yy357: yych = (unsigned char)*++cur; - if (yych == 'G') goto yy421; + if (yych == 'K') goto yy418; goto yy4; yy358: yych = (unsigned char)*++cur; - if (yych == 'c') goto yy422; + if (yych == 'T') goto yy420; goto yy4; yy359: yych = (unsigned char)*++cur; - if (yych == 'n') goto yy423; + if (yych == 'C') goto yy421; + if (yych == 'S') goto yy422; goto yy4; yy360: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy424; + if (yych == 'P') goto yy423; goto yy4; yy361: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy425; + if (yych == 'G') goto yy425; goto yy4; yy362: yych = (unsigned char)*++cur; - if (yych == 'n') goto yy426; + if (yych == 'c') goto yy426; goto yy4; yy363: yych = (unsigned char)*++cur; - if (yych == 's') goto yy427; + if (yych == 'n') goto yy427; goto yy4; yy364: yych = (unsigned char)*++cur; - if (yych == 'c') goto yy428; + if (yych == 'e') goto yy428; goto yy4; yy365: yych = (unsigned char)*++cur; - if (yych == 'n') goto yy429; + if (yych == 'o') goto yy429; goto yy4; yy366: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy430; + if (yych == 'n') goto yy430; goto yy4; yy367: yych = (unsigned char)*++cur; - if (yych == '-') goto yy431; + if (yych == 's') goto yy431; goto yy4; yy368: yych = (unsigned char)*++cur; - if (yych == 'u') goto yy432; + if (yych == 'c') goto yy432; goto yy4; yy369: yych = (unsigned char)*++cur; - if (yych == 'z') goto yy433; + if (yych == 'n') goto yy433; goto yy4; yy370: yych = (unsigned char)*++cur; - if (yybm[0+yych] & 32) { - goto yy3; - } - goto yy109; + if (yych == 'e') goto yy434; + goto yy4; yy371: yych = (unsigned char)*++cur; - if (yych == 'c') goto yy434; + if (yych == '-') goto yy435; goto yy4; yy372: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy435; + if (yych == 'u') goto yy436; goto yy4; yy373: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy436; + if (yych == 'z') goto yy437; goto yy4; yy374: yych = (unsigned char)*++cur; - if (yych == 'h') goto yy437; - goto yy4; + if (yybm[0+yych] & 32) { + goto yy3; + } + goto yy113; yy375: yych = (unsigned char)*++cur; - if (yych == 'g') goto yy438; + if (yych == 'c') goto yy438; goto yy4; yy376: yych = (unsigned char)*++cur; - if (yych == 'L') goto yy440; + if (yych == 'e') goto yy439; goto yy4; yy377: + yych = (unsigned char)*++cur; + if (yych == 'e') goto yy440; + goto yy4; +yy378: + yych = (unsigned char)*++cur; + if (yych == 'h') goto yy441; + goto yy4; +yy379: + yych = (unsigned char)*++cur; + if (yych == 'g') goto yy442; + goto yy4; +yy380: + yych = (unsigned char)*++cur; + if (yych == 'L') goto yy444; + goto yy4; +yy381: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } -#line 89 "../src/ast/lex_conf.re" +#line 96 "../src/ast/lex_conf.re" { opts.set_yynext (lex_conf_string ()); return; } -#line 1897 "src/ast/lex_conf.cc" -yy379: +#line 1918 "src/ast/lex_conf.cc" +yy383: yych = (unsigned char)*++cur; - if (yych <= '0') goto yy226; - if (yych <= '9') goto yy382; - goto yy226; -yy380: + if (yych <= '0') goto yy230; + if (yych <= '9') goto yy386; + goto yy230; +yy384: ++cur; -yy381: +yy385: cur = ctx; -#line 158 "../src/ast/lex_conf.re" +#line 165 "../src/ast/lex_conf.re" { opts.set_startlabel_force (lex_conf_bool()); return; } -#line 1909 "src/ast/lex_conf.cc" -yy382: +#line 1930 "src/ast/lex_conf.cc" +yy386: ++cur; if (lim <= cur) YYFILL(1); yych = (unsigned char)*cur; if (yybm[0+yych] & 128) { - goto yy382; + goto yy386; } - goto yy381; -yy384: - yych = (unsigned char)*++cur; - if (yych == 'b') goto yy441; - goto yy4; -yy385: - yych = (unsigned char)*++cur; - if (yych == 'i') goto yy442; - goto yy4; -yy386: - yych = (unsigned char)*++cur; - if (yych == 'c') goto yy443; - goto yy4; -yy387: - yych = (unsigned char)*++cur; - if (yych == 'm') goto yy444; - goto yy4; + goto yy385; yy388: yych = (unsigned char)*++cur; - if (yych == 'h') goto yy446; - if (yych == 't') goto yy448; + if (yych == 'b') goto yy445; goto yy4; yy389: yych = (unsigned char)*++cur; - if (yych == 't') goto yy449; + if (yych == 'i') goto yy446; goto yy4; yy390: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy450; + if (yych == 'c') goto yy447; goto yy4; yy391: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy451; + if (yych == 'm') goto yy448; goto yy4; yy392: yych = (unsigned char)*++cur; - if (yybm[0+yych] & 32) { - goto yy3; - } -#line 153 "../src/ast/lex_conf.re" - { opts.set_fill_check (lex_conf_bool()); return; } -#line 1958 "src/ast/lex_conf.cc" + if (yych == 'h') goto yy450; + if (yych == 't') goto yy452; + goto yy4; +yy393: + yych = (unsigned char)*++cur; + if (yych == 't') goto yy453; + goto yy4; yy394: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy452; + if (yych == 'a') goto yy454; goto yy4; yy395: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy454; + if (yych == 'i') goto yy455; goto yy4; yy396: yych = (unsigned char)*++cur; - if (yych == 'l') goto yy455; - goto yy4; -yy397: - yych = (unsigned char)*++cur; - if (yych == 'c') goto yy456; - goto yy226; + if (yybm[0+yych] & 32) { + goto yy3; + } +#line 160 "../src/ast/lex_conf.re" + { opts.set_fill_check (lex_conf_bool()); return; } +#line 1979 "src/ast/lex_conf.cc" yy398: yych = (unsigned char)*++cur; - if (yych == 'd') goto yy457; - goto yy226; + if (yych == 'e') goto yy456; + goto yy4; yy399: yych = (unsigned char)*++cur; - if (yych == 'x') goto yy459; + if (yych == 'e') goto yy458; goto yy4; yy400: yych = (unsigned char)*++cur; - if (yych == 'U') goto yy461; + if (yych == 'l') goto yy459; goto yy4; yy401: yych = (unsigned char)*++cur; - if (yych == 'T') goto yy462; - goto yy4; + if (yych == 'c') goto yy460; + goto yy230; yy402: yych = (unsigned char)*++cur; - if (yych == 'A') goto yy463; - goto yy4; + if (yych == 'd') goto yy461; + goto yy230; yy403: yych = (unsigned char)*++cur; - if (yych == 'E') goto yy464; + if (yych == 'x') goto yy463; goto yy4; yy404: yych = (unsigned char)*++cur; - if (yych == 'O') goto yy466; + if (yych == 'U') goto yy465; goto yy4; yy405: yych = (unsigned char)*++cur; - if (yych == 'G') goto yy467; + if (yych == 'T') goto yy466; goto yy4; yy406: + yych = (unsigned char)*++cur; + if (yych == 'A') goto yy467; + goto yy4; +yy407: + yych = (unsigned char)*++cur; + if (yych == 'E') goto yy468; + goto yy4; +yy408: + yych = (unsigned char)*++cur; + if (yych == 'O') goto yy470; + goto yy4; +yy409: + yych = (unsigned char)*++cur; + if (yych == 'G') goto yy471; + goto yy4; +yy410: yyaccept = 3; yych = (unsigned char)*(mar = ++cur); if (yych <= '?') { @@ -2011,127 +2032,111 @@ yy406: if (yych == '-') goto yy3; } else { if (yych <= '9') goto yy3; - if (yych <= ':') goto yy469; + if (yych <= ':') goto yy473; } } else { if (yych <= '^') { - if (yych <= '@') goto yy470; + if (yych <= '@') goto yy474; if (yych <= 'Z') goto yy3; } else { - if (yych == '`') goto yy407; + if (yych == '`') goto yy411; if (yych <= 'z') goto yy3; } } -yy407: -#line 148 "../src/ast/lex_conf.re" +yy411: +#line 155 "../src/ast/lex_conf.re" { opts.set_fill (lex_conf_string ()); return; } -#line 2029 "src/ast/lex_conf.cc" -yy408: +#line 2050 "src/ast/lex_conf.cc" +yy412: yych = (unsigned char)*++cur; - if (yych == 'O') goto yy471; + if (yych == 'O') goto yy475; goto yy4; -yy409: +yy413: yych = (unsigned char)*++cur; - if (yych == 'T') goto yy472; + if (yych == 'T') goto yy476; goto yy4; -yy410: +yy414: yych = (unsigned char)*++cur; - if (yych == 'T') goto yy473; + if (yych == 'T') goto yy477; goto yy4; -yy411: +yy415: yych = (unsigned char)*++cur; - if (yych == 'T') goto yy474; + if (yych == 'T') goto yy478; goto yy4; -yy412: +yy416: yych = (unsigned char)*++cur; - if (yych == 'E') goto yy476; + if (yych == 'E') goto yy480; goto yy4; -yy413: +yy417: yych = (unsigned char)*++cur; - if (yych == 'N') goto yy477; - if (yych == 'P') goto yy479; + if (yych == 'N') goto yy481; + if (yych == 'P') goto yy483; goto yy4; -yy414: +yy418: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } -#line 113 "../src/ast/lex_conf.re" +#line 120 "../src/ast/lex_conf.re" { opts.set_yypeek (lex_conf_string ()); return; } -#line 2062 "src/ast/lex_conf.cc" -yy416: +#line 2083 "src/ast/lex_conf.cc" +yy420: yych = (unsigned char)*++cur; - if (yych == 'O') goto yy481; + if (yych == 'O') goto yy485; goto yy4; -yy417: +yy421: yych = (unsigned char)*++cur; - if (yych == 'O') goto yy482; + if (yych == 'O') goto yy486; goto yy4; -yy418: +yy422: yych = (unsigned char)*++cur; - if (yych == 'T') goto yy483; + if (yych == 'T') goto yy487; goto yy4; -yy419: +yy423: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } -#line 114 "../src/ast/lex_conf.re" +#line 121 "../src/ast/lex_conf.re" { opts.set_yyskip (lex_conf_string ()); return; } -#line 2082 "src/ast/lex_conf.cc" -yy421: - yych = (unsigned char)*++cur; - if (yych == 'N') goto yy484; - if (yych == 'P') goto yy486; - goto yy4; -yy422: - yych = (unsigned char)*++cur; - if (yych == 't') goto yy488; - goto yy4; -yy423: - yych = (unsigned char)*++cur; - if (yych == 's') goto yy489; - if (yych == 'v') goto yy490; - goto yy4; -yy424: - yych = (unsigned char)*++cur; - if (yych == 'd') goto yy491; - goto yy4; +#line 2103 "src/ast/lex_conf.cc" yy425: yych = (unsigned char)*++cur; - if (yych == 'u') goto yy492; + if (yych == 'N') goto yy488; + if (yych == 'P') goto yy490; goto yy4; yy426: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy493; + if (yych == 't') goto yy492; goto yy4; yy427: yych = (unsigned char)*++cur; - if (yych == 'k') goto yy494; + if (yych == 's') goto yy493; + if (yych == 'v') goto yy494; goto yy4; yy428: yych = (unsigned char)*++cur; - if (yych == 'l') goto yy495; + if (yych == 'd') goto yy495; goto yy4; yy429: yych = (unsigned char)*++cur; - if (yych == 'g') goto yy496; + if (yych == 'u') goto yy496; goto yy4; yy430: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy497; + if (yych == 'i') goto yy497; goto yy4; yy431: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy498; + if (yych == 'k') goto yy498; goto yy4; yy432: yych = (unsigned char)*++cur; - if (yych == 'g') goto yy499; + if (yych == 'l') goto yy499; goto yy4; yy433: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy500; + if (yych == 'g') goto yy500; goto yy4; yy434: yych = (unsigned char)*++cur; @@ -2139,321 +2144,337 @@ yy434: goto yy4; yy435: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy502; + if (yych == 'i') goto yy502; goto yy4; yy436: + yych = (unsigned char)*++cur; + if (yych == 'g') goto yy503; + goto yy4; +yy437: + yych = (unsigned char)*++cur; + if (yych == 'e') goto yy504; + goto yy4; +yy438: + yych = (unsigned char)*++cur; + if (yych == 'a') goto yy505; + goto yy4; +yy439: + yych = (unsigned char)*++cur; + if (yych == 'a') goto yy506; + goto yy4; +yy440: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } - goto yy116; -yy437: + goto yy120; +yy441: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy503; + if (yych == 'a') goto yy507; goto yy4; -yy438: +yy442: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } -#line 129 "../src/ast/lex_conf.re" +#line 136 "../src/ast/lex_conf.re" { opts.set_indString (lex_conf_string ()); return; } -#line 2162 "src/ast/lex_conf.cc" -yy440: +#line 2183 "src/ast/lex_conf.cc" +yy444: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy504; + if (yych == 'a') goto yy508; goto yy4; -yy441: +yy445: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy505; + if (yych == 'e') goto yy509; goto yy4; -yy442: +yy446: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy506; + if (yych == 'o') goto yy510; goto yy4; -yy443: +yy447: yych = (unsigned char)*++cur; - if (yych == 'c') goto yy507; + if (yych == 'c') goto yy511; goto yy4; -yy444: +yy448: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } -#line 94 "../src/ast/lex_conf.re" +#line 101 "../src/ast/lex_conf.re" { opts.set_yybm (lex_conf_string ()); return; } -#line 2186 "src/ast/lex_conf.cc" -yy446: +#line 2207 "src/ast/lex_conf.cc" +yy450: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } -#line 144 "../src/ast/lex_conf.re" +#line 151 "../src/ast/lex_conf.re" { opts.set_yych (lex_conf_string ()); return; } -#line 2194 "src/ast/lex_conf.cc" -yy448: +#line 2215 "src/ast/lex_conf.cc" +yy452: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy508; + if (yych == 'a') goto yy512; goto yy4; -yy449: +yy453: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy509; + if (yych == 'a') goto yy513; goto yy4; -yy450: +yy454: yych = (unsigned char)*++cur; - if (yych == 'r') goto yy510; + if (yych == 'r') goto yy514; goto yy4; -yy451: +yy455: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy511; + if (yych == 'o') goto yy515; goto yy4; -yy452: +yy456: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } -#line 149 "../src/ast/lex_conf.re" +#line 156 "../src/ast/lex_conf.re" { opts.set_fill_use (lex_conf_bool()); return; } -#line 2218 "src/ast/lex_conf.cc" -yy454: +#line 2239 "src/ast/lex_conf.cc" +yy458: yych = (unsigned char)*++cur; - if (yych == 't') goto yy512; + if (yych == 't') goto yy516; goto yy4; -yy455: +yy459: yych = (unsigned char)*++cur; - if (yych == 'd') goto yy513; + if (yych == 'd') goto yy517; goto yy4; -yy456: +yy460: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy515; - goto yy226; -yy457: + if (yych == 'o') goto yy519; + goto yy230; +yy461: ++cur; -#line 80 "../src/ast/lex_conf.re" +#line 87 "../src/ast/lex_conf.re" { opts.set_condGotoParam (lex_conf_string ()); return; } -#line 2235 "src/ast/lex_conf.cc" -yy459: +#line 2256 "src/ast/lex_conf.cc" +yy463: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } -#line 76 "../src/ast/lex_conf.re" +#line 83 "../src/ast/lex_conf.re" { opts.set_condEnumPrefix (lex_conf_string ()); return; } -#line 2243 "src/ast/lex_conf.cc" -yy461: +#line 2264 "src/ast/lex_conf.cc" +yy465: yych = (unsigned char)*++cur; - if (yych == 'P') goto yy516; + if (yych == 'P') goto yy520; goto yy4; -yy462: +yy466: yych = (unsigned char)*++cur; - if (yych == 'Y') goto yy518; + if (yych == 'Y') goto yy522; goto yy4; -yy463: +yy467: yych = (unsigned char)*++cur; - if (yych == 'R') goto yy519; + if (yych == 'R') goto yy523; goto yy4; -yy464: +yy468: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } -#line 143 "../src/ast/lex_conf.re" +#line 150 "../src/ast/lex_conf.re" { opts.set_yyctype (lex_conf_string ()); return; } -#line 2263 "src/ast/lex_conf.cc" -yy466: +#line 2284 "src/ast/lex_conf.cc" +yy470: yych = (unsigned char)*++cur; - if (yych == 'R') goto yy520; + if (yych == 'R') goto yy524; goto yy4; -yy467: +yy471: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } -#line 141 "../src/ast/lex_conf.re" +#line 148 "../src/ast/lex_conf.re" { opts.set_yydebug (lex_conf_string ()); return; } -#line 2275 "src/ast/lex_conf.cc" -yy469: +#line 2296 "src/ast/lex_conf.cc" +yy473: yych = (unsigned char)*++cur; - if (yych == 'n') goto yy522; + if (yych == 'n') goto yy526; goto yy4; -yy470: +yy474: yych = (unsigned char)*++cur; - if (yych == 'l') goto yy523; - goto yy226; -yy471: + if (yych == 'l') goto yy527; + goto yy230; +yy475: yych = (unsigned char)*++cur; - if (yych == 'N') goto yy524; + if (yych == 'N') goto yy528; goto yy4; -yy472: +yy476: yych = (unsigned char)*++cur; - if (yych == 'A') goto yy525; + if (yych == 'A') goto yy529; goto yy4; -yy473: +yy477: yych = (unsigned char)*++cur; - if (yych == 'H') goto yy526; + if (yych == 'H') goto yy530; goto yy4; -yy474: +yy478: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } -#line 111 "../src/ast/lex_conf.re" +#line 118 "../src/ast/lex_conf.re" { opts.set_yylimit (lex_conf_string ()); return; } -#line 2303 "src/ast/lex_conf.cc" -yy476: +#line 2324 "src/ast/lex_conf.cc" +yy480: yych = (unsigned char)*++cur; - if (yych == 'R') goto yy527; + if (yych == 'R') goto yy531; goto yy4; -yy477: +yy481: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } -#line 123 "../src/ast/lex_conf.re" +#line 130 "../src/ast/lex_conf.re" { opts.set_yymtagn (lex_conf_string ()); return; } -#line 2315 "src/ast/lex_conf.cc" -yy479: +#line 2336 "src/ast/lex_conf.cc" +yy483: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } -#line 124 "../src/ast/lex_conf.re" +#line 131 "../src/ast/lex_conf.re" { opts.set_yymtagp (lex_conf_string ()); return; } -#line 2323 "src/ast/lex_conf.cc" -yy481: +#line 2344 "src/ast/lex_conf.cc" +yy485: yych = (unsigned char)*++cur; - if (yych == 'R') goto yy529; + if (yych == 'R') goto yy533; goto yy4; -yy482: +yy486: yych = (unsigned char)*++cur; - if (yych == 'N') goto yy530; + if (yych == 'N') goto yy534; goto yy4; -yy483: +yy487: yych = (unsigned char)*++cur; - if (yych == 'A') goto yy531; + if (yych == 'A') goto yy535; goto yy4; -yy484: +yy488: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } -#line 121 "../src/ast/lex_conf.re" +#line 128 "../src/ast/lex_conf.re" { opts.set_yystagn (lex_conf_string ()); return; } -#line 2343 "src/ast/lex_conf.cc" -yy486: +#line 2364 "src/ast/lex_conf.cc" +yy490: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } -#line 122 "../src/ast/lex_conf.re" +#line 129 "../src/ast/lex_conf.re" { opts.set_yystagp (lex_conf_string ()); return; } -#line 2351 "src/ast/lex_conf.cc" -yy488: - yych = (unsigned char)*++cur; - if (yych == 'o') goto yy532; - goto yy4; -yy489: - yych = (unsigned char)*++cur; - if (yych == 'e') goto yy533; - goto yy4; -yy490: - yych = (unsigned char)*++cur; - if (yych == 'e') goto yy534; - goto yy4; -yy491: - yych = (unsigned char)*++cur; - if (yych == '-') goto yy535; - goto yy4; +#line 2372 "src/ast/lex_conf.cc" yy492: yych = (unsigned char)*++cur; - if (yych == 't') goto yy536; + if (yych == 'o') goto yy536; goto yy4; yy493: yych = (unsigned char)*++cur; - if (yych == 'm') goto yy537; + if (yych == 'e') goto yy537; goto yy4; yy494: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy538; + if (yych == 'e') goto yy538; goto yy4; yy495: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy539; + if (yych == '-') goto yy539; goto yy4; yy496: yych = (unsigned char)*++cur; - if (yych == '-') goto yy540; + if (yych == 't') goto yy540; goto yy4; yy497: yych = (unsigned char)*++cur; - if (yych == 'd') goto yy541; + if (yych == 'm') goto yy541; goto yy4; yy498: yych = (unsigned char)*++cur; - if (yych == 'f') goto yy543; + if (yych == 'i') goto yy542; goto yy4; yy499: yych = (unsigned char)*++cur; - if (yych == '-') goto yy544; + if (yych == 'a') goto yy543; goto yy4; yy500: yych = (unsigned char)*++cur; - if (yych == '-') goto yy545; + if (yych == '-') goto yy544; goto yy4; yy501: yych = (unsigned char)*++cur; - if (yych == 'p') goto yy546; + if (yych == 'd') goto yy545; goto yy4; yy502: yych = (unsigned char)*++cur; - if (yych == 'd') goto yy547; + if (yych == 'f') goto yy547; goto yy4; yy503: yych = (unsigned char)*++cur; - if (yych == 'r') goto yy548; + if (yych == '-') goto yy548; goto yy4; yy504: yych = (unsigned char)*++cur; - if (yych == 'b') goto yy549; + if (yych == '-') goto yy549; goto yy4; yy505: yych = (unsigned char)*++cur; - if (yych == 'l') goto yy550; + if (yych == 'p') goto yy550; goto yy4; yy506: yych = (unsigned char)*++cur; - if (yych == 'n') goto yy552; + if (yych == 'd') goto yy551; goto yy4; yy507: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy554; + if (yych == 'r') goto yy552; goto yy4; yy508: yych = (unsigned char)*++cur; - if (yych == 'b') goto yy555; + if (yych == 'b') goto yy553; goto yy4; yy509: yych = (unsigned char)*++cur; - if (yych == 'b') goto yy556; + if (yych == 'l') goto yy554; goto yy4; yy510: yych = (unsigned char)*++cur; - if (yych == 'g') goto yy557; + if (yych == 'n') goto yy556; goto yy4; yy511: yych = (unsigned char)*++cur; - if (yych == 'n') goto yy558; + if (yych == 'e') goto yy558; goto yy4; yy512: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy560; + if (yych == 'b') goto yy559; goto yy4; yy513: + yych = (unsigned char)*++cur; + if (yych == 'b') goto yy560; + goto yy4; +yy514: + yych = (unsigned char)*++cur; + if (yych == 'g') goto yy561; + goto yy4; +yy515: + yych = (unsigned char)*++cur; + if (yych == 'n') goto yy562; + goto yy4; +yy516: + yych = (unsigned char)*++cur; + if (yych == 'e') goto yy564; + goto yy4; +yy517: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } -#line 97 "../src/ast/lex_conf.re" +#line 104 "../src/ast/lex_conf.re" { const int32_t n = lex_conf_number (); if (n < 0) @@ -2463,12 +2484,12 @@ yy513: opts.set_cGotoThreshold (static_cast (n)); return; } -#line 2467 "src/ast/lex_conf.cc" -yy515: +#line 2488 "src/ast/lex_conf.cc" +yy519: yych = (unsigned char)*++cur; - if (yych == 'n') goto yy561; - goto yy226; -yy516: + if (yych == 'n') goto yy565; + goto yy230; +yy520: yych = (unsigned char)*++cur; if (yych <= 'B') { if (yych <= '/') { @@ -2479,424 +2500,424 @@ yy516: } } else { if (yych <= '^') { - if (yych <= 'C') goto yy562; + if (yych <= 'C') goto yy566; if (yych <= 'Z') goto yy3; } else { - if (yych == '`') goto yy517; + if (yych == '`') goto yy521; if (yych <= 'z') goto yy3; } } -yy517: -#line 115 "../src/ast/lex_conf.re" +yy521: +#line 122 "../src/ast/lex_conf.re" { opts.set_yybackup (lex_conf_string ()); return; } -#line 2493 "src/ast/lex_conf.cc" -yy518: +#line 2514 "src/ast/lex_conf.cc" +yy522: yych = (unsigned char)*++cur; - if (yych == 'P') goto yy563; + if (yych == 'P') goto yy567; goto yy4; -yy519: +yy523: yych = (unsigned char)*++cur; - if (yych == 'K') goto yy564; + if (yych == 'K') goto yy568; goto yy4; -yy520: +yy524: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } -#line 108 "../src/ast/lex_conf.re" +#line 115 "../src/ast/lex_conf.re" { opts.set_yycursor (lex_conf_string ()); return; } -#line 2509 "src/ast/lex_conf.cc" -yy522: +#line 2530 "src/ast/lex_conf.cc" +yy526: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy565; + if (yych == 'a') goto yy569; goto yy4; -yy523: +yy527: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy566; - goto yy226; -yy524: + if (yych == 'e') goto yy570; + goto yy230; +yy528: yych = (unsigned char)*++cur; - if (yych == 'D') goto yy567; + if (yych == 'D') goto yy571; goto yy4; -yy525: +yy529: yych = (unsigned char)*++cur; - if (yych == 'T') goto yy568; + if (yych == 'T') goto yy572; goto yy4; -yy526: +yy530: yych = (unsigned char)*++cur; - if (yych == 'A') goto yy569; + if (yych == 'A') goto yy573; goto yy4; -yy527: +yy531: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } -#line 109 "../src/ast/lex_conf.re" +#line 116 "../src/ast/lex_conf.re" { opts.set_yymarker (lex_conf_string ()); return; } -#line 2537 "src/ast/lex_conf.cc" -yy529: - yych = (unsigned char)*++cur; - if (yych == 'E') goto yy570; - goto yy4; -yy530: - yych = (unsigned char)*++cur; - if (yych == 'D') goto yy572; - goto yy4; -yy531: - yych = (unsigned char)*++cur; - if (yych == 'T') goto yy573; - goto yy4; -yy532: - yych = (unsigned char)*++cur; - if (yych == 'r') goto yy574; - goto yy4; +#line 2558 "src/ast/lex_conf.cc" yy533: yych = (unsigned char)*++cur; - if (yych == 'n') goto yy575; + if (yych == 'E') goto yy574; goto yy4; yy534: yych = (unsigned char)*++cur; - if (yych == 'r') goto yy576; + if (yych == 'D') goto yy576; goto yy4; yy535: yych = (unsigned char)*++cur; - if (yych == 'g') goto yy577; + if (yych == 'T') goto yy577; goto yy4; yy536: yych = (unsigned char)*++cur; - if (yych == 'p') goto yy578; + if (yych == 'r') goto yy578; goto yy4; yy537: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy579; + if (yych == 'n') goto yy579; goto yy4; yy538: yych = (unsigned char)*++cur; - if (yych == 'p') goto yy580; + if (yych == 'r') goto yy580; goto yy4; yy539: yych = (unsigned char)*++cur; - if (yych == 's') goto yy582; + if (yych == 'g') goto yy581; goto yy4; yy540: yych = (unsigned char)*++cur; - if (yych == 'p') goto yy583; + if (yych == 'p') goto yy582; goto yy4; yy541: + yych = (unsigned char)*++cur; + if (yych == 'i') goto yy583; + goto yy4; +yy542: + yych = (unsigned char)*++cur; + if (yych == 'p') goto yy584; + goto yy4; +yy543: + yych = (unsigned char)*++cur; + if (yych == 's') goto yy586; + goto yy4; +yy544: + yych = (unsigned char)*++cur; + if (yych == 'p') goto yy587; + goto yy4; +yy545: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } #line 52 "../src/ast/lex_conf.re" { opts.set_lookahead (lex_conf_bool()); return; } -#line 2593 "src/ast/lex_conf.cc" -yy543: +#line 2614 "src/ast/lex_conf.cc" +yy547: yych = (unsigned char)*++cur; - if (yych == 's') goto yy111; + if (yych == 's') goto yy115; goto yy4; -yy544: +yy548: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy584; + if (yych == 'i') goto yy588; goto yy4; -yy545: +yy549: yych = (unsigned char)*++cur; - if (yych == 't') goto yy585; + if (yych == 't') goto yy589; goto yy4; -yy546: +yy550: yych = (unsigned char)*++cur; - if (yych == 't') goto yy586; + if (yych == 't') goto yy590; goto yy4; -yy547: +yy551: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy587; + if (yych == 'e') goto yy591; goto yy4; -yy548: +yy552: yych = (unsigned char)*++cur; - if (yych == 's') goto yy588; + if (yych == 's') goto yy592; goto yy4; -yy549: +yy553: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy589; + if (yych == 'e') goto yy593; goto yy4; -yy550: +yy554: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } -#line 91 "../src/ast/lex_conf.re" +#line 98 "../src/ast/lex_conf.re" { opts.set_bUseStateNext (lex_conf_bool()); return; } -#line 2629 "src/ast/lex_conf.cc" -yy552: +#line 2650 "src/ast/lex_conf.cc" +yy556: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } -#line 127 "../src/ast/lex_conf.re" +#line 134 "../src/ast/lex_conf.re" { opts.set_tags_expression(lex_conf_string ()); return; } -#line 2637 "src/ast/lex_conf.cc" -yy554: +#line 2658 "src/ast/lex_conf.cc" +yy558: yych = (unsigned char)*++cur; - if (yych == 'p') goto yy590; + if (yych == 'p') goto yy594; goto yy4; -yy555: +yy559: yych = (unsigned char)*++cur; - if (yych == 'l') goto yy591; + if (yych == 'l') goto yy595; goto yy4; -yy556: +yy560: yych = (unsigned char)*++cur; - if (yych == 'l') goto yy592; + if (yych == 'l') goto yy596; goto yy4; -yy557: +yy561: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy593; + if (yych == 'e') goto yy597; goto yy4; -yy558: +yy562: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } -#line 145 "../src/ast/lex_conf.re" +#line 152 "../src/ast/lex_conf.re" { opts.set_yychConversion (lex_conf_bool()); return; } -#line 2661 "src/ast/lex_conf.cc" -yy560: +#line 2682 "src/ast/lex_conf.cc" +yy564: yych = (unsigned char)*++cur; - if (yych == 'r') goto yy594; + if (yych == 'r') goto yy598; goto yy4; -yy561: +yy565: yych = (unsigned char)*++cur; - if (yych == 'd') goto yy596; - goto yy226; -yy562: + if (yych == 'd') goto yy600; + goto yy230; +yy566: yych = (unsigned char)*++cur; - if (yych == 'T') goto yy598; + if (yych == 'T') goto yy602; goto yy4; -yy563: +yy567: yych = (unsigned char)*++cur; - if (yych == 'E') goto yy599; + if (yych == 'E') goto yy603; goto yy4; -yy564: +yy568: yych = (unsigned char)*++cur; - if (yych == 'E') goto yy601; + if (yych == 'E') goto yy605; goto yy4; -yy565: +yy569: yych = (unsigned char)*++cur; - if (yych == 'k') goto yy602; + if (yych == 'k') goto yy606; goto yy4; -yy566: +yy570: yych = (unsigned char)*++cur; - if (yych == 'n') goto yy603; - goto yy226; -yy567: + if (yych == 'n') goto yy607; + goto yy230; +yy571: yych = (unsigned char)*++cur; - if (yych == 'I') goto yy605; + if (yych == 'I') goto yy609; goto yy4; -yy568: +yy572: yych = (unsigned char)*++cur; - if (yych == 'E') goto yy606; + if (yych == 'E') goto yy610; goto yy4; -yy569: +yy573: yych = (unsigned char)*++cur; - if (yych == 'N') goto yy608; + if (yych == 'N') goto yy612; goto yy4; -yy570: +yy574: yych = (unsigned char)*++cur; if (yych <= 'C') { if (yych <= '/') { if (yych == '-') goto yy3; } else { if (yych <= ':') goto yy3; - if (yych <= '@') goto yy571; + if (yych <= '@') goto yy575; if (yych <= 'B') goto yy3; - goto yy610; + goto yy614; } } else { if (yych <= '^') { - if (yych == 'T') goto yy611; + if (yych == 'T') goto yy615; if (yych <= 'Z') goto yy3; } else { - if (yych == '`') goto yy571; + if (yych == '`') goto yy575; if (yych <= 'z') goto yy3; } } -yy571: -#line 117 "../src/ast/lex_conf.re" +yy575: +#line 124 "../src/ast/lex_conf.re" { opts.set_yyrestore (lex_conf_string ()); return; } -#line 2725 "src/ast/lex_conf.cc" -yy572: +#line 2746 "src/ast/lex_conf.cc" +yy576: yych = (unsigned char)*++cur; - if (yych == 'I') goto yy612; + if (yych == 'I') goto yy616; goto yy4; -yy573: +yy577: yych = (unsigned char)*++cur; - if (yych == 'E') goto yy613; + if (yych == 'E') goto yy617; goto yy4; -yy574: +yy578: yych = (unsigned char)*++cur; - if (yych == 's') goto yy615; + if (yych == 's') goto yy619; goto yy4; -yy575: +yy579: yych = (unsigned char)*++cur; - if (yych == 's') goto yy616; + if (yych == 's') goto yy620; goto yy4; -yy576: +yy580: yych = (unsigned char)*++cur; - if (yych == 't') goto yy617; + if (yych == 't') goto yy621; goto yy4; -yy577: +yy581: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy618; + if (yych == 'o') goto yy622; goto yy4; -yy578: +yy582: yych = (unsigned char)*++cur; - if (yych == 'u') goto yy619; + if (yych == 'u') goto yy623; goto yy4; -yy579: +yy583: yych = (unsigned char)*++cur; - if (yych == 'z') goto yy620; + if (yych == 'z') goto yy624; goto yy4; -yy580: +yy584: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } #line 54 "../src/ast/lex_conf.re" { opts.set_eager_skip (lex_conf_bool()); return; } -#line 2765 "src/ast/lex_conf.cc" -yy582: +#line 2786 "src/ast/lex_conf.cc" +yy586: yych = (unsigned char)*++cur; - if (yych == 's') goto yy621; + if (yych == 's') goto yy625; goto yy4; -yy583: +yy587: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy623; + if (yych == 'o') goto yy627; goto yy4; -yy584: +yy588: yych = (unsigned char)*++cur; - if (yych == 'n') goto yy624; + if (yych == 'n') goto yy628; goto yy4; -yy585: +yy589: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy625; + if (yych == 'a') goto yy629; goto yy4; -yy586: +yy590: yych = (unsigned char)*++cur; - if (yych == 'u') goto yy626; + if (yych == 'u') goto yy630; goto yy4; -yy587: +yy591: yych = (unsigned char)*++cur; - if (yych == 'r') goto yy627; + if (yych == 'r') goto yy631; goto yy4; -yy588: +yy592: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } - goto yy118; -yy589: + goto yy122; +yy593: yych = (unsigned char)*++cur; - if (yych == 'l') goto yy628; + if (yych == 'l') goto yy632; goto yy4; -yy590: +yy594: yych = (unsigned char)*++cur; - if (yych == 't') goto yy630; + if (yych == 't') goto yy634; goto yy4; -yy591: +yy595: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy632; + if (yych == 'e') goto yy636; goto yy4; -yy592: +yy596: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy634; + if (yych == 'e') goto yy638; goto yy4; -yy593: +yy597: yych = (unsigned char)*++cur; - if (yych == 't') goto yy636; + if (yych == 't') goto yy640; goto yy4; -yy594: +yy598: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } -#line 151 "../src/ast/lex_conf.re" +#line 158 "../src/ast/lex_conf.re" { opts.set_fill_arg_use (lex_conf_bool()); return; } -#line 2823 "src/ast/lex_conf.cc" -yy596: +#line 2844 "src/ast/lex_conf.cc" +yy600: ++cur; -#line 78 "../src/ast/lex_conf.re" +#line 85 "../src/ast/lex_conf.re" { opts.set_condDividerParam (lex_conf_string ()); return; } -#line 2828 "src/ast/lex_conf.cc" -yy598: +#line 2849 "src/ast/lex_conf.cc" +yy602: yych = (unsigned char)*++cur; - if (yych == 'X') goto yy638; + if (yych == 'X') goto yy642; goto yy4; -yy599: +yy603: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } -#line 69 "../src/ast/lex_conf.re" +#line 76 "../src/ast/lex_conf.re" { opts.set_yycondtype (lex_conf_string ()); return; } -#line 2840 "src/ast/lex_conf.cc" -yy601: +#line 2861 "src/ast/lex_conf.cc" +yy605: yych = (unsigned char)*++cur; - if (yych == 'R') goto yy640; + if (yych == 'R') goto yy644; goto yy4; -yy602: +yy606: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy642; + if (yych == 'e') goto yy646; goto yy4; -yy603: +yy607: ++cur; -#line 150 "../src/ast/lex_conf.re" +#line 157 "../src/ast/lex_conf.re" { opts.set_fill_arg (lex_conf_string ()); return; } -#line 2853 "src/ast/lex_conf.cc" -yy605: +#line 2874 "src/ast/lex_conf.cc" +yy609: yych = (unsigned char)*++cur; - if (yych == 'T') goto yy643; + if (yych == 'T') goto yy647; goto yy4; -yy606: +yy610: yych = (unsigned char)*++cur; if (yych <= '@') { if (yych <= '/') { if (yych == '-') goto yy3; } else { if (yych <= '9') goto yy3; - if (yych <= ':') goto yy644; + if (yych <= ':') goto yy648; } } else { if (yych <= '_') { if (yych <= 'Z') goto yy3; if (yych >= '_') goto yy3; } else { - if (yych <= '`') goto yy607; + if (yych <= '`') goto yy611; if (yych <= 'z') goto yy3; } } -yy607: -#line 83 "../src/ast/lex_conf.re" +yy611: +#line 90 "../src/ast/lex_conf.re" { opts.set_state_get (lex_conf_string ()); return; } -#line 2879 "src/ast/lex_conf.cc" -yy608: +#line 2900 "src/ast/lex_conf.cc" +yy612: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } -#line 120 "../src/ast/lex_conf.re" +#line 127 "../src/ast/lex_conf.re" { opts.set_yylessthan (lex_conf_string ()); return; } -#line 2887 "src/ast/lex_conf.cc" -yy610: +#line 2908 "src/ast/lex_conf.cc" +yy614: yych = (unsigned char)*++cur; - if (yych == 'T') goto yy645; + if (yych == 'T') goto yy649; goto yy4; -yy611: +yy615: yych = (unsigned char)*++cur; - if (yych == 'A') goto yy646; + if (yych == 'A') goto yy650; goto yy4; -yy612: +yy616: yych = (unsigned char)*++cur; - if (yych == 'T') goto yy647; + if (yych == 'T') goto yy651; goto yy4; -yy613: +yy617: yyaccept = 4; yych = (unsigned char)*(mar = ++cur); if (yych <= '?') { @@ -2904,348 +2925,348 @@ yy613: if (yych == '-') goto yy3; } else { if (yych <= '9') goto yy3; - if (yych <= ':') goto yy648; + if (yych <= ':') goto yy652; } } else { if (yych <= '^') { - if (yych <= '@') goto yy649; + if (yych <= '@') goto yy653; if (yych <= 'Z') goto yy3; } else { - if (yych == '`') goto yy614; + if (yych == '`') goto yy618; if (yych <= 'z') goto yy3; } } -yy614: -#line 85 "../src/ast/lex_conf.re" +yy618: +#line 92 "../src/ast/lex_conf.re" { opts.set_state_set (lex_conf_string ()); return; } -#line 2922 "src/ast/lex_conf.cc" -yy615: +#line 2943 "src/ast/lex_conf.cc" +yy619: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } - goto yy96; -yy616: + goto yy100; +yy620: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy650; + if (yych == 'i') goto yy654; goto yy4; -yy617: +yy621: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy651; + if (yych == 'e') goto yy655; goto yy4; -yy618: +yy622: yych = (unsigned char)*++cur; - if (yych == 't') goto yy652; + if (yych == 't') goto yy656; goto yy4; -yy619: +yy623: yych = (unsigned char)*++cur; - if (yych == 't') goto yy653; + if (yych == 't') goto yy657; goto yy4; -yy620: +yy624: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy654; + if (yych == 'a') goto yy658; goto yy4; -yy621: +yy625: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } #line 66 "../src/ast/lex_conf.re" { lex_conf_empty_class(opts); return; } -#line 2956 "src/ast/lex_conf.cc" -yy623: +#line 2977 "src/ast/lex_conf.cc" +yy627: yych = (unsigned char)*++cur; - if (yych == 'l') goto yy655; + if (yych == 'l') goto yy659; goto yy4; -yy624: +yy628: yych = (unsigned char)*++cur; - if (yych == 'f') goto yy656; + if (yych == 'f') goto yy660; goto yy4; -yy625: +yy629: yych = (unsigned char)*++cur; - if (yych == 'g') goto yy657; + if (yych == 'g') goto yy661; goto yy4; -yy626: +yy630: yych = (unsigned char)*++cur; - if (yych == 'r') goto yy658; + if (yych == 'r') goto yy662; goto yy4; -yy627: +yy631: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } - goto yy114; -yy628: + goto yy118; +yy632: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } -#line 88 "../src/ast/lex_conf.re" +#line 95 "../src/ast/lex_conf.re" { opts.set_yyfilllabel (lex_conf_string ()); return; } -#line 2986 "src/ast/lex_conf.cc" -yy630: +#line 3007 "src/ast/lex_conf.cc" +yy634: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } -#line 92 "../src/ast/lex_conf.re" +#line 99 "../src/ast/lex_conf.re" { opts.set_yyaccept (lex_conf_string ()); return; } -#line 2994 "src/ast/lex_conf.cc" -yy632: +#line 3015 "src/ast/lex_conf.cc" +yy636: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } -#line 81 "../src/ast/lex_conf.re" +#line 88 "../src/ast/lex_conf.re" { opts.set_yyctable (lex_conf_string ()); return; } -#line 3002 "src/ast/lex_conf.cc" -yy634: +#line 3023 "src/ast/lex_conf.cc" +yy638: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } -#line 162 "../src/ast/lex_conf.re" +#line 169 "../src/ast/lex_conf.re" { lex_conf_string (); return; } -#line 3010 "src/ast/lex_conf.cc" -yy636: +#line 3031 "src/ast/lex_conf.cc" +yy640: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } -#line 106 "../src/ast/lex_conf.re" +#line 113 "../src/ast/lex_conf.re" { opts.set_yytarget (lex_conf_string ()); return; } -#line 3018 "src/ast/lex_conf.cc" -yy638: +#line 3039 "src/ast/lex_conf.cc" +yy642: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } -#line 116 "../src/ast/lex_conf.re" +#line 123 "../src/ast/lex_conf.re" { opts.set_yybackupctx (lex_conf_string ()); return; } -#line 3026 "src/ast/lex_conf.cc" -yy640: +#line 3047 "src/ast/lex_conf.cc" +yy644: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } -#line 110 "../src/ast/lex_conf.re" +#line 117 "../src/ast/lex_conf.re" { opts.set_yyctxmarker (lex_conf_string ()); return; } -#line 3034 "src/ast/lex_conf.cc" -yy642: - yych = (unsigned char)*++cur; - if (yych == 'd') goto yy659; - goto yy4; -yy643: - yych = (unsigned char)*++cur; - if (yych == 'I') goto yy661; - goto yy4; -yy644: - yych = (unsigned char)*++cur; - if (yych == 'n') goto yy662; - goto yy4; -yy645: - yych = (unsigned char)*++cur; - if (yych == 'X') goto yy663; - goto yy4; +#line 3055 "src/ast/lex_conf.cc" yy646: yych = (unsigned char)*++cur; - if (yych == 'G') goto yy665; + if (yych == 'd') goto yy663; goto yy4; yy647: yych = (unsigned char)*++cur; - if (yych == 'I') goto yy667; + if (yych == 'I') goto yy665; goto yy4; yy648: yych = (unsigned char)*++cur; - if (yych == 'n') goto yy668; + if (yych == 'n') goto yy666; goto yy4; yy649: yych = (unsigned char)*++cur; - if (yych == 's') goto yy669; - goto yy226; + if (yych == 'X') goto yy667; + goto yy4; yy650: yych = (unsigned char)*++cur; - if (yych == 't') goto yy670; + if (yych == 'G') goto yy669; goto yy4; yy651: yych = (unsigned char)*++cur; - if (yych == 'd') goto yy671; + if (yych == 'I') goto yy671; goto yy4; yy652: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy673; + if (yych == 'n') goto yy672; goto yy4; yy653: yych = (unsigned char)*++cur; - if (yybm[0+yych] & 32) { - goto yy3; - } - goto yy99; + if (yych == 's') goto yy673; + goto yy230; yy654: yych = (unsigned char)*++cur; if (yych == 't') goto yy674; goto yy4; yy655: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy675; + if (yych == 'd') goto yy675; goto yy4; yy656: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy676; + if (yych == 'o') goto yy677; goto yy4; yy657: yych = (unsigned char)*++cur; - if (yych == 's') goto yy677; + if (yybm[0+yych] & 32) { + goto yy3; + } + goto yy103; +yy658: + yych = (unsigned char)*++cur; + if (yych == 't') goto yy678; + goto yy4; +yy659: + yych = (unsigned char)*++cur; + if (yych == 'i') goto yy679; + goto yy4; +yy660: + yych = (unsigned char)*++cur; + if (yych == 'o') goto yy680; + goto yy4; +yy661: + yych = (unsigned char)*++cur; + if (yych == 's') goto yy681; goto yy4; -yy658: +yy662: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy679; + if (yych == 'e') goto yy683; goto yy4; -yy659: +yy663: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } -#line 152 "../src/ast/lex_conf.re" +#line 159 "../src/ast/lex_conf.re" { opts.set_fill_naked (lex_conf_bool()); return; } -#line 3112 "src/ast/lex_conf.cc" -yy661: +#line 3133 "src/ast/lex_conf.cc" +yy665: yych = (unsigned char)*++cur; - if (yych == 'O') goto yy680; + if (yych == 'O') goto yy684; goto yy4; -yy662: +yy666: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy681; + if (yych == 'a') goto yy685; goto yy4; -yy663: +yy667: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } -#line 118 "../src/ast/lex_conf.re" +#line 125 "../src/ast/lex_conf.re" { opts.set_yyrestorectx (lex_conf_string ()); return; } -#line 3128 "src/ast/lex_conf.cc" -yy665: +#line 3149 "src/ast/lex_conf.cc" +yy669: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } -#line 119 "../src/ast/lex_conf.re" +#line 126 "../src/ast/lex_conf.re" { opts.set_yyrestoretag (lex_conf_string ()); return; } -#line 3136 "src/ast/lex_conf.cc" -yy667: +#line 3157 "src/ast/lex_conf.cc" +yy671: yych = (unsigned char)*++cur; - if (yych == 'O') goto yy682; + if (yych == 'O') goto yy686; goto yy4; -yy668: +yy672: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy683; + if (yych == 'a') goto yy687; goto yy4; -yy669: +yy673: yych = (unsigned char)*++cur; - if (yych == 't') goto yy684; - goto yy226; -yy670: + if (yych == 't') goto yy688; + goto yy230; +yy674: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy685; + if (yych == 'i') goto yy689; goto yy4; -yy671: +yy675: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } #line 51 "../src/ast/lex_conf.re" { opts.set_bCaseInverted (lex_conf_bool()); return; } -#line 3160 "src/ast/lex_conf.cc" -yy673: +#line 3181 "src/ast/lex_conf.cc" +yy677: yych = (unsigned char)*++cur; - if (yych == 's') goto yy102; + if (yych == 's') goto yy106; goto yy4; -yy674: +yy678: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy686; + if (yych == 'i') goto yy690; goto yy4; -yy675: +yy679: yych = (unsigned char)*++cur; - if (yych == 'c') goto yy687; + if (yych == 'c') goto yy691; goto yy4; -yy676: +yy680: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } - goto yy105; -yy677: + goto yy109; +yy681: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } #line 53 "../src/ast/lex_conf.re" { opts.set_optimize_tags (lex_conf_bool()); return; } -#line 3186 "src/ast/lex_conf.cc" -yy679: +#line 3207 "src/ast/lex_conf.cc" +yy683: yych = (unsigned char)*++cur; - if (yych == 's') goto yy91; + if (yych == 's') goto yy95; goto yy4; -yy680: +yy684: yych = (unsigned char)*++cur; - if (yych == 'N') goto yy688; + if (yych == 'N') goto yy692; goto yy4; -yy681: +yy685: yych = (unsigned char)*++cur; - if (yych == 'k') goto yy690; + if (yych == 'k') goto yy694; goto yy4; -yy682: +yy686: yych = (unsigned char)*++cur; - if (yych == 'N') goto yy691; + if (yych == 'N') goto yy695; goto yy4; -yy683: +yy687: yych = (unsigned char)*++cur; - if (yych == 'k') goto yy693; + if (yych == 'k') goto yy697; goto yy4; -yy684: +yy688: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy694; - goto yy226; -yy685: + if (yych == 'a') goto yy698; + goto yy230; +yy689: yych = (unsigned char)*++cur; - if (yych == 'v') goto yy695; + if (yych == 'v') goto yy699; goto yy4; -yy686: +yy690: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy696; + if (yych == 'o') goto yy700; goto yy4; -yy687: +yy691: yych = (unsigned char)*++cur; - if (yych == 'y') goto yy697; + if (yych == 'y') goto yy701; goto yy4; -yy688: +yy692: yych = (unsigned char)*++cur; if (yych <= '@') { if (yych <= '/') { if (yych == '-') goto yy3; } else { if (yych <= '9') goto yy3; - if (yych <= ':') goto yy699; + if (yych <= ':') goto yy703; } } else { if (yych <= '_') { if (yych <= 'Z') goto yy3; if (yych >= '_') goto yy3; } else { - if (yych <= '`') goto yy689; + if (yych <= '`') goto yy693; if (yych <= 'z') goto yy3; } } -yy689: -#line 70 "../src/ast/lex_conf.re" +yy693: +#line 77 "../src/ast/lex_conf.re" { opts.set_cond_get (lex_conf_string ()); return; } -#line 3244 "src/ast/lex_conf.cc" -yy690: +#line 3265 "src/ast/lex_conf.cc" +yy694: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy700; + if (yych == 'e') goto yy704; goto yy4; -yy691: +yy695: yyaccept = 5; yych = (unsigned char)*(mar = ++cur); if (yych <= '?') { @@ -3253,173 +3274,173 @@ yy691: if (yych == '-') goto yy3; } else { if (yych <= '9') goto yy3; - if (yych <= ':') goto yy701; + if (yych <= ':') goto yy705; } } else { if (yych <= '^') { - if (yych <= '@') goto yy702; + if (yych <= '@') goto yy706; if (yych <= 'Z') goto yy3; } else { - if (yych == '`') goto yy692; + if (yych == '`') goto yy696; if (yych <= 'z') goto yy3; } } -yy692: -#line 72 "../src/ast/lex_conf.re" +yy696: +#line 79 "../src/ast/lex_conf.re" { opts.set_cond_set (lex_conf_string ()); return; } -#line 3271 "src/ast/lex_conf.cc" -yy693: +#line 3292 "src/ast/lex_conf.cc" +yy697: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy703; + if (yych == 'e') goto yy707; goto yy4; -yy694: +yy698: yych = (unsigned char)*++cur; - if (yych == 't') goto yy704; - goto yy226; -yy695: + if (yych == 't') goto yy708; + goto yy230; +yy699: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy705; + if (yych == 'e') goto yy709; goto yy4; -yy696: +yy700: yych = (unsigned char)*++cur; - if (yych == 'n') goto yy707; + if (yych == 'n') goto yy711; goto yy4; -yy697: +yy701: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } #line 64 "../src/ast/lex_conf.re" { lex_conf_encoding_policy(opts); return; } -#line 3295 "src/ast/lex_conf.cc" -yy699: +#line 3316 "src/ast/lex_conf.cc" +yy703: yych = (unsigned char)*++cur; - if (yych == 'n') goto yy709; + if (yych == 'n') goto yy713; goto yy4; -yy700: +yy704: yych = (unsigned char)*++cur; - if (yych == 'd') goto yy710; + if (yych == 'd') goto yy714; goto yy4; -yy701: +yy705: yych = (unsigned char)*++cur; - if (yych == 'n') goto yy712; + if (yych == 'n') goto yy716; goto yy4; -yy702: +yy706: yych = (unsigned char)*++cur; - if (yych == 'c') goto yy713; - goto yy226; -yy703: + if (yych == 'c') goto yy717; + goto yy230; +yy707: yych = (unsigned char)*++cur; - if (yych == 'd') goto yy714; + if (yych == 'd') goto yy718; goto yy4; -yy704: +yy708: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy716; - goto yy226; -yy705: + if (yych == 'e') goto yy720; + goto yy230; +yy709: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } #line 50 "../src/ast/lex_conf.re" { opts.set_bCaseInsensitive (lex_conf_bool()); return; } -#line 3327 "src/ast/lex_conf.cc" -yy707: +#line 3348 "src/ast/lex_conf.cc" +yy711: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } #line 67 "../src/ast/lex_conf.re" { lex_conf_dfa_minimization(opts); return; } -#line 3335 "src/ast/lex_conf.cc" -yy709: +#line 3356 "src/ast/lex_conf.cc" +yy713: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy718; + if (yych == 'a') goto yy722; goto yy4; -yy710: +yy714: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } -#line 84 "../src/ast/lex_conf.re" +#line 91 "../src/ast/lex_conf.re" { opts.set_state_get_naked (lex_conf_bool()); return; } -#line 3347 "src/ast/lex_conf.cc" -yy712: +#line 3368 "src/ast/lex_conf.cc" +yy716: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy719; + if (yych == 'a') goto yy723; goto yy4; -yy713: +yy717: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy720; - goto yy226; -yy714: + if (yych == 'o') goto yy724; + goto yy230; +yy718: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } -#line 86 "../src/ast/lex_conf.re" +#line 93 "../src/ast/lex_conf.re" { opts.set_state_set_naked (lex_conf_bool()); return; } -#line 3363 "src/ast/lex_conf.cc" -yy716: +#line 3384 "src/ast/lex_conf.cc" +yy720: ++cur; -#line 87 "../src/ast/lex_conf.re" +#line 94 "../src/ast/lex_conf.re" { opts.set_state_set_arg (lex_conf_string ()); return; } -#line 3368 "src/ast/lex_conf.cc" -yy718: +#line 3389 "src/ast/lex_conf.cc" +yy722: yych = (unsigned char)*++cur; - if (yych == 'k') goto yy721; + if (yych == 'k') goto yy725; goto yy4; -yy719: +yy723: yych = (unsigned char)*++cur; - if (yych == 'k') goto yy722; + if (yych == 'k') goto yy726; goto yy4; -yy720: +yy724: yych = (unsigned char)*++cur; - if (yych == 'n') goto yy723; - goto yy226; -yy721: + if (yych == 'n') goto yy727; + goto yy230; +yy725: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy724; + if (yych == 'e') goto yy728; goto yy4; -yy722: +yy726: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy725; + if (yych == 'e') goto yy729; goto yy4; -yy723: +yy727: yych = (unsigned char)*++cur; - if (yych == 'd') goto yy726; - goto yy226; -yy724: + if (yych == 'd') goto yy730; + goto yy230; +yy728: yych = (unsigned char)*++cur; - if (yych == 'd') goto yy728; + if (yych == 'd') goto yy732; goto yy4; -yy725: +yy729: yych = (unsigned char)*++cur; - if (yych == 'd') goto yy730; + if (yych == 'd') goto yy734; goto yy4; -yy726: +yy730: ++cur; -#line 73 "../src/ast/lex_conf.re" +#line 80 "../src/ast/lex_conf.re" { opts.set_cond_set_arg (lex_conf_string ()); return; } -#line 3405 "src/ast/lex_conf.cc" -yy728: +#line 3426 "src/ast/lex_conf.cc" +yy732: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } -#line 71 "../src/ast/lex_conf.re" +#line 78 "../src/ast/lex_conf.re" { opts.set_cond_get_naked (lex_conf_bool()); return; } -#line 3413 "src/ast/lex_conf.cc" -yy730: +#line 3434 "src/ast/lex_conf.cc" +yy734: yych = (unsigned char)*++cur; if (yybm[0+yych] & 32) { goto yy3; } -#line 74 "../src/ast/lex_conf.re" +#line 81 "../src/ast/lex_conf.re" { opts.set_cond_set_naked (lex_conf_bool()); return; } -#line 3421 "src/ast/lex_conf.cc" +#line 3442 "src/ast/lex_conf.cc" } -#line 168 "../src/ast/lex_conf.re" +#line 175 "../src/ast/lex_conf.re" } @@ -3427,102 +3448,102 @@ void Scanner::lex_conf_encoding_policy(Opt &opts) { lex_conf_assign (); -#line 3431 "src/ast/lex_conf.cc" +#line 3452 "src/ast/lex_conf.cc" { unsigned char yych; if ((lim - cur) < 10) YYFILL(10); yych = (unsigned char)*cur; if (yych <= 'h') { - if (yych == 'f') goto yy736; + if (yych == 'f') goto yy740; } else { - if (yych <= 'i') goto yy737; - if (yych == 's') goto yy738; + if (yych <= 'i') goto yy741; + if (yych == 's') goto yy742; } ++cur; -yy735: -#line 175 "../src/ast/lex_conf.re" +yy739: +#line 182 "../src/ast/lex_conf.re" { fatal_lc(get_cline(), get_column(), "bad configuration value (expected: 'ignore', 'substitute', 'fail')"); } -#line 3447 "src/ast/lex_conf.cc" -yy736: - yych = (unsigned char)*(mar = ++cur); - if (yych == 'a') goto yy739; - goto yy735; -yy737: - yych = (unsigned char)*(mar = ++cur); - if (yych == 'g') goto yy741; - goto yy735; -yy738: - yych = (unsigned char)*(mar = ++cur); - if (yych == 'u') goto yy742; - goto yy735; -yy739: - yych = (unsigned char)*++cur; - if (yych == 'i') goto yy743; +#line 3468 "src/ast/lex_conf.cc" yy740: - cur = mar; - goto yy735; + yych = (unsigned char)*(mar = ++cur); + if (yych == 'a') goto yy743; + goto yy739; yy741: - yych = (unsigned char)*++cur; - if (yych == 'n') goto yy744; - goto yy740; + yych = (unsigned char)*(mar = ++cur); + if (yych == 'g') goto yy745; + goto yy739; yy742: - yych = (unsigned char)*++cur; - if (yych == 'b') goto yy745; - goto yy740; + yych = (unsigned char)*(mar = ++cur); + if (yych == 'u') goto yy746; + goto yy739; yy743: yych = (unsigned char)*++cur; - if (yych == 'l') goto yy746; - goto yy740; + if (yych == 'i') goto yy747; yy744: - yych = (unsigned char)*++cur; - if (yych == 'o') goto yy748; - goto yy740; + cur = mar; + goto yy739; yy745: yych = (unsigned char)*++cur; - if (yych == 's') goto yy749; - goto yy740; + if (yych == 'n') goto yy748; + goto yy744; yy746: - ++cur; -#line 179 "../src/ast/lex_conf.re" - { opts.set_encoding_policy(Enc::POLICY_FAIL); goto end; } -#line 3490 "src/ast/lex_conf.cc" + yych = (unsigned char)*++cur; + if (yych == 'b') goto yy749; + goto yy744; +yy747: + yych = (unsigned char)*++cur; + if (yych == 'l') goto yy750; + goto yy744; yy748: yych = (unsigned char)*++cur; - if (yych == 'r') goto yy750; - goto yy740; + if (yych == 'o') goto yy752; + goto yy744; yy749: yych = (unsigned char)*++cur; - if (yych == 't') goto yy751; - goto yy740; + if (yych == 's') goto yy753; + goto yy744; yy750: + ++cur; +#line 186 "../src/ast/lex_conf.re" + { opts.set_encoding_policy(Enc::POLICY_FAIL); goto end; } +#line 3511 "src/ast/lex_conf.cc" +yy752: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy752; - goto yy740; -yy751: + if (yych == 'r') goto yy754; + goto yy744; +yy753: yych = (unsigned char)*++cur; - if (yych == 'i') goto yy754; - goto yy740; -yy752: + if (yych == 't') goto yy755; + goto yy744; +yy754: + yych = (unsigned char)*++cur; + if (yych == 'e') goto yy756; + goto yy744; +yy755: + yych = (unsigned char)*++cur; + if (yych == 'i') goto yy758; + goto yy744; +yy756: ++cur; -#line 177 "../src/ast/lex_conf.re" +#line 184 "../src/ast/lex_conf.re" { opts.set_encoding_policy(Enc::POLICY_IGNORE); goto end; } -#line 3511 "src/ast/lex_conf.cc" -yy754: +#line 3532 "src/ast/lex_conf.cc" +yy758: yych = (unsigned char)*++cur; - if (yych != 't') goto yy740; + if (yych != 't') goto yy744; yych = (unsigned char)*++cur; - if (yych != 'u') goto yy740; + if (yych != 'u') goto yy744; yych = (unsigned char)*++cur; - if (yych != 't') goto yy740; + if (yych != 't') goto yy744; yych = (unsigned char)*++cur; - if (yych != 'e') goto yy740; + if (yych != 'e') goto yy744; ++cur; -#line 178 "../src/ast/lex_conf.re" +#line 185 "../src/ast/lex_conf.re" { opts.set_encoding_policy(Enc::POLICY_SUBSTITUTE); goto end; } -#line 3524 "src/ast/lex_conf.cc" +#line 3545 "src/ast/lex_conf.cc" } -#line 180 "../src/ast/lex_conf.re" +#line 187 "../src/ast/lex_conf.re" end: lex_conf_semicolon(); @@ -3532,77 +3553,77 @@ void Scanner::lex_conf_input(Opt &opts) { lex_conf_assign (); -#line 3536 "src/ast/lex_conf.cc" +#line 3557 "src/ast/lex_conf.cc" { unsigned char yych; if ((lim - cur) < 7) YYFILL(7); yych = (unsigned char)*cur; - if (yych <= 'b') goto yy762; - if (yych <= 'c') goto yy764; - if (yych <= 'd') goto yy765; -yy762: + if (yych <= 'b') goto yy766; + if (yych <= 'c') goto yy768; + if (yych <= 'd') goto yy769; +yy766: ++cur; -yy763: -#line 189 "../src/ast/lex_conf.re" +yy767: +#line 196 "../src/ast/lex_conf.re" { fatal_lc(get_cline(), get_column(), "bad configuration value (expected: 'default', 'custom')"); } -#line 3550 "src/ast/lex_conf.cc" -yy764: - yych = (unsigned char)*(mar = ++cur); - if (yych == 'u') goto yy766; - goto yy763; -yy765: - yych = (unsigned char)*(mar = ++cur); - if (yych == 'e') goto yy768; - goto yy763; -yy766: - yych = (unsigned char)*++cur; - if (yych == 's') goto yy769; -yy767: - cur = mar; - goto yy763; +#line 3571 "src/ast/lex_conf.cc" yy768: - yych = (unsigned char)*++cur; - if (yych == 'f') goto yy770; + yych = (unsigned char)*(mar = ++cur); + if (yych == 'u') goto yy770; goto yy767; yy769: - yych = (unsigned char)*++cur; - if (yych == 't') goto yy771; + yych = (unsigned char)*(mar = ++cur); + if (yych == 'e') goto yy772; goto yy767; yy770: yych = (unsigned char)*++cur; - if (yych == 'a') goto yy772; - goto yy767; + if (yych == 's') goto yy773; yy771: - yych = (unsigned char)*++cur; - if (yych == 'o') goto yy773; + cur = mar; goto yy767; yy772: yych = (unsigned char)*++cur; - if (yych == 'u') goto yy774; - goto yy767; + if (yych == 'f') goto yy774; + goto yy771; yy773: yych = (unsigned char)*++cur; - if (yych == 'm') goto yy775; - goto yy767; + if (yych == 't') goto yy775; + goto yy771; yy774: yych = (unsigned char)*++cur; - if (yych == 'l') goto yy777; - goto yy767; + if (yych == 'a') goto yy776; + goto yy771; yy775: + yych = (unsigned char)*++cur; + if (yych == 'o') goto yy777; + goto yy771; +yy776: + yych = (unsigned char)*++cur; + if (yych == 'u') goto yy778; + goto yy771; +yy777: + yych = (unsigned char)*++cur; + if (yych == 'm') goto yy779; + goto yy771; +yy778: + yych = (unsigned char)*++cur; + if (yych == 'l') goto yy781; + goto yy771; +yy779: ++cur; -#line 192 "../src/ast/lex_conf.re" +#line 199 "../src/ast/lex_conf.re" { opts.set_input_api(INPUT_CUSTOM); goto end; } -#line 3597 "src/ast/lex_conf.cc" -yy777: +#line 3618 "src/ast/lex_conf.cc" +yy781: yych = (unsigned char)*++cur; - if (yych != 't') goto yy767; + if (yych != 't') goto yy771; ++cur; -#line 191 "../src/ast/lex_conf.re" +#line 198 "../src/ast/lex_conf.re" { opts.set_input_api(INPUT_DEFAULT); goto end; } -#line 3604 "src/ast/lex_conf.cc" +#line 3625 "src/ast/lex_conf.cc" } -#line 193 "../src/ast/lex_conf.re" +#line 200 "../src/ast/lex_conf.re" end: lex_conf_semicolon(); @@ -3612,105 +3633,105 @@ void Scanner::lex_conf_empty_class(Opt &opts) { lex_conf_assign (); -#line 3616 "src/ast/lex_conf.cc" +#line 3637 "src/ast/lex_conf.cc" { unsigned char yych; if ((lim - cur) < 11) YYFILL(11); yych = (unsigned char)*cur; - if (yych == 'e') goto yy784; - if (yych == 'm') goto yy785; + if (yych == 'e') goto yy788; + if (yych == 'm') goto yy789; ++cur; -yy783: -#line 202 "../src/ast/lex_conf.re" +yy787: +#line 209 "../src/ast/lex_conf.re" { fatal_lc(get_cline(), get_column(), "bad configuration value (expected: 'match-empty', 'match-none', 'error')"); } -#line 3628 "src/ast/lex_conf.cc" -yy784: - yych = (unsigned char)*(mar = ++cur); - if (yych == 'r') goto yy786; - goto yy783; -yy785: - yych = (unsigned char)*(mar = ++cur); - if (yych == 'a') goto yy788; - goto yy783; -yy786: - yych = (unsigned char)*++cur; - if (yych == 'r') goto yy789; -yy787: - cur = mar; - goto yy783; +#line 3649 "src/ast/lex_conf.cc" yy788: - yych = (unsigned char)*++cur; - if (yych == 't') goto yy790; + yych = (unsigned char)*(mar = ++cur); + if (yych == 'r') goto yy790; goto yy787; yy789: - yych = (unsigned char)*++cur; - if (yych == 'o') goto yy791; + yych = (unsigned char)*(mar = ++cur); + if (yych == 'a') goto yy792; goto yy787; yy790: - yych = (unsigned char)*++cur; - if (yych == 'c') goto yy792; - goto yy787; -yy791: yych = (unsigned char)*++cur; if (yych == 'r') goto yy793; +yy791: + cur = mar; goto yy787; yy792: yych = (unsigned char)*++cur; - if (yych == 'h') goto yy795; - goto yy787; + if (yych == 't') goto yy794; + goto yy791; yy793: - ++cur; -#line 206 "../src/ast/lex_conf.re" - { opts.set_empty_class_policy(EMPTY_CLASS_ERROR); goto end; } -#line 3667 "src/ast/lex_conf.cc" -yy795: yych = (unsigned char)*++cur; - if (yych != '-') goto yy787; + if (yych == 'o') goto yy795; + goto yy791; +yy794: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy797; - if (yych == 'n') goto yy798; - goto yy787; -yy797: + if (yych == 'c') goto yy796; + goto yy791; +yy795: yych = (unsigned char)*++cur; - if (yych == 'm') goto yy799; - goto yy787; -yy798: + if (yych == 'r') goto yy797; + goto yy791; +yy796: yych = (unsigned char)*++cur; - if (yych == 'o') goto yy800; - goto yy787; + if (yych == 'h') goto yy799; + goto yy791; +yy797: + ++cur; +#line 213 "../src/ast/lex_conf.re" + { opts.set_empty_class_policy(EMPTY_CLASS_ERROR); goto end; } +#line 3688 "src/ast/lex_conf.cc" yy799: yych = (unsigned char)*++cur; - if (yych == 'p') goto yy801; - goto yy787; -yy800: + if (yych != '-') goto yy791; yych = (unsigned char)*++cur; + if (yych == 'e') goto yy801; if (yych == 'n') goto yy802; - goto yy787; + goto yy791; yy801: yych = (unsigned char)*++cur; - if (yych == 't') goto yy803; - goto yy787; + if (yych == 'm') goto yy803; + goto yy791; yy802: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy804; - goto yy787; + if (yych == 'o') goto yy804; + goto yy791; yy803: yych = (unsigned char)*++cur; - if (yych == 'y') goto yy806; - goto yy787; + if (yych == 'p') goto yy805; + goto yy791; yy804: + yych = (unsigned char)*++cur; + if (yych == 'n') goto yy806; + goto yy791; +yy805: + yych = (unsigned char)*++cur; + if (yych == 't') goto yy807; + goto yy791; +yy806: + yych = (unsigned char)*++cur; + if (yych == 'e') goto yy808; + goto yy791; +yy807: + yych = (unsigned char)*++cur; + if (yych == 'y') goto yy810; + goto yy791; +yy808: ++cur; -#line 205 "../src/ast/lex_conf.re" +#line 212 "../src/ast/lex_conf.re" { opts.set_empty_class_policy(EMPTY_CLASS_MATCH_NONE); goto end; } -#line 3707 "src/ast/lex_conf.cc" -yy806: +#line 3728 "src/ast/lex_conf.cc" +yy810: ++cur; -#line 204 "../src/ast/lex_conf.re" +#line 211 "../src/ast/lex_conf.re" { opts.set_empty_class_policy(EMPTY_CLASS_MATCH_EMPTY); goto end; } -#line 3712 "src/ast/lex_conf.cc" +#line 3733 "src/ast/lex_conf.cc" } -#line 207 "../src/ast/lex_conf.re" +#line 214 "../src/ast/lex_conf.re" end: lex_conf_semicolon(); @@ -3720,65 +3741,65 @@ void Scanner::lex_conf_dfa_minimization(Opt &opts) { lex_conf_assign (); -#line 3724 "src/ast/lex_conf.cc" +#line 3745 "src/ast/lex_conf.cc" { unsigned char yych; if ((lim - cur) < 5) YYFILL(5); yych = (unsigned char)*cur; - if (yych == 'm') goto yy812; - if (yych == 't') goto yy813; + if (yych == 'm') goto yy816; + if (yych == 't') goto yy817; ++cur; -yy811: -#line 216 "../src/ast/lex_conf.re" +yy815: +#line 223 "../src/ast/lex_conf.re" { fatal_lc(get_cline(), get_column(), "bad configuration value (expected: 'table', 'moore')"); } -#line 3736 "src/ast/lex_conf.cc" -yy812: - yych = (unsigned char)*(mar = ++cur); - if (yych == 'o') goto yy814; - goto yy811; -yy813: - yych = (unsigned char)*(mar = ++cur); - if (yych == 'a') goto yy816; - goto yy811; -yy814: - yych = (unsigned char)*++cur; - if (yych == 'o') goto yy817; -yy815: - cur = mar; - goto yy811; +#line 3757 "src/ast/lex_conf.cc" yy816: - yych = (unsigned char)*++cur; - if (yych == 'b') goto yy818; + yych = (unsigned char)*(mar = ++cur); + if (yych == 'o') goto yy818; goto yy815; yy817: - yych = (unsigned char)*++cur; - if (yych == 'r') goto yy819; + yych = (unsigned char)*(mar = ++cur); + if (yych == 'a') goto yy820; goto yy815; yy818: yych = (unsigned char)*++cur; - if (yych == 'l') goto yy820; - goto yy815; + if (yych == 'o') goto yy821; yy819: - yych = (unsigned char)*++cur; - if (yych == 'e') goto yy821; + cur = mar; goto yy815; yy820: yych = (unsigned char)*++cur; - if (yych == 'e') goto yy823; - goto yy815; + if (yych == 'b') goto yy822; + goto yy819; yy821: + yych = (unsigned char)*++cur; + if (yych == 'r') goto yy823; + goto yy819; +yy822: + yych = (unsigned char)*++cur; + if (yych == 'l') goto yy824; + goto yy819; +yy823: + yych = (unsigned char)*++cur; + if (yych == 'e') goto yy825; + goto yy819; +yy824: + yych = (unsigned char)*++cur; + if (yych == 'e') goto yy827; + goto yy819; +yy825: ++cur; -#line 219 "../src/ast/lex_conf.re" +#line 226 "../src/ast/lex_conf.re" { opts.set_dfa_minimization(DFA_MINIMIZATION_MOORE); goto end; } -#line 3775 "src/ast/lex_conf.cc" -yy823: +#line 3796 "src/ast/lex_conf.cc" +yy827: ++cur; -#line 218 "../src/ast/lex_conf.re" +#line 225 "../src/ast/lex_conf.re" { opts.set_dfa_minimization(DFA_MINIMIZATION_TABLE); goto end; } -#line 3780 "src/ast/lex_conf.cc" +#line 3801 "src/ast/lex_conf.cc" } -#line 220 "../src/ast/lex_conf.re" +#line 227 "../src/ast/lex_conf.re" end: lex_conf_semicolon(); @@ -3796,7 +3817,7 @@ void Scanner::lex_conf_enc(Enc::type_t enc, Opt &opts) void Scanner::lex_conf_assign () { -#line 3800 "src/ast/lex_conf.cc" +#line 3821 "src/ast/lex_conf.cc" { unsigned char yych; static const unsigned char yybm[] = { @@ -3836,56 +3857,56 @@ void Scanner::lex_conf_assign () if ((lim - cur) < 2) YYFILL(2); yych = (unsigned char)*cur; if (yych <= 0x1F) { - if (yych == '\t') goto yy829; + if (yych == '\t') goto yy833; } else { - if (yych <= ' ') goto yy829; - if (yych == '=') goto yy830; + if (yych <= ' ') goto yy833; + if (yych == '=') goto yy834; } ++cur; -yy828: -#line 237 "../src/ast/lex_conf.re" +yy832: +#line 244 "../src/ast/lex_conf.re" { fatal_lc(get_cline(), get_column(), "missing '=' in configuration"); } -#line 3849 "src/ast/lex_conf.cc" -yy829: +#line 3870 "src/ast/lex_conf.cc" +yy833: yych = (unsigned char)*(mar = ++cur); if (yych <= 0x1F) { - if (yych == '\t') goto yy833; - goto yy828; + if (yych == '\t') goto yy837; + goto yy832; } else { - if (yych <= ' ') goto yy833; - if (yych != '=') goto yy828; + if (yych <= ' ') goto yy837; + if (yych != '=') goto yy832; } -yy830: +yy834: ++cur; if (lim <= cur) YYFILL(1); yych = (unsigned char)*cur; if (yybm[0+yych] & 128) { - goto yy830; + goto yy834; } -#line 238 "../src/ast/lex_conf.re" +#line 245 "../src/ast/lex_conf.re" { return; } -#line 3868 "src/ast/lex_conf.cc" -yy833: +#line 3889 "src/ast/lex_conf.cc" +yy837: ++cur; if (lim <= cur) YYFILL(1); yych = (unsigned char)*cur; if (yych <= 0x1F) { - if (yych == '\t') goto yy833; + if (yych == '\t') goto yy837; } else { - if (yych <= ' ') goto yy833; - if (yych == '=') goto yy830; + if (yych <= ' ') goto yy837; + if (yych == '=') goto yy834; } cur = mar; - goto yy828; + goto yy832; } -#line 239 "../src/ast/lex_conf.re" +#line 246 "../src/ast/lex_conf.re" } void Scanner::lex_conf_semicolon () { -#line 3889 "src/ast/lex_conf.cc" +#line 3910 "src/ast/lex_conf.cc" { unsigned char yych; static const unsigned char yybm[] = { @@ -3925,39 +3946,39 @@ void Scanner::lex_conf_semicolon () if ((lim - cur) < 2) YYFILL(2); yych = (unsigned char)*cur; if (yych <= 0x1F) { - if (yych == '\t') goto yy840; + if (yych == '\t') goto yy844; } else { - if (yych <= ' ') goto yy840; - if (yych == ';') goto yy841; + if (yych <= ' ') goto yy844; + if (yych == ';') goto yy845; } ++cur; -yy839: -#line 245 "../src/ast/lex_conf.re" +yy843: +#line 252 "../src/ast/lex_conf.re" { fatal_lc(get_cline(), get_column(), "missing ending ';' in configuration"); } -#line 3938 "src/ast/lex_conf.cc" -yy840: +#line 3959 "src/ast/lex_conf.cc" +yy844: yych = (unsigned char)*(mar = ++cur); if (yybm[0+yych] & 128) { - goto yy843; + goto yy847; } - if (yych != ';') goto yy839; -yy841: + if (yych != ';') goto yy843; +yy845: ++cur; -#line 246 "../src/ast/lex_conf.re" +#line 253 "../src/ast/lex_conf.re" { return; } -#line 3949 "src/ast/lex_conf.cc" -yy843: +#line 3970 "src/ast/lex_conf.cc" +yy847: ++cur; if (lim <= cur) YYFILL(1); yych = (unsigned char)*cur; if (yybm[0+yych] & 128) { - goto yy843; + goto yy847; } - if (yych == ';') goto yy841; + if (yych == ';') goto yy845; cur = mar; - goto yy839; + goto yy843; } -#line 247 "../src/ast/lex_conf.re" +#line 254 "../src/ast/lex_conf.re" } @@ -3971,7 +3992,7 @@ int32_t Scanner::lex_conf_number () lex_conf_assign (); tok = cur; -#line 3975 "src/ast/lex_conf.cc" +#line 3996 "src/ast/lex_conf.cc" { unsigned char yych; static const unsigned char yybm[] = { @@ -4011,26 +4032,26 @@ int32_t Scanner::lex_conf_number () if ((lim - cur) < 2) YYFILL(2); yych = (unsigned char)*cur; if (yych <= '/') { - if (yych == '-') goto yy850; + if (yych == '-') goto yy854; } else { - if (yych <= '0') goto yy851; - if (yych <= '9') goto yy853; + if (yych <= '0') goto yy855; + if (yych <= '9') goto yy857; } ++cur; -yy849: -#line 260 "../src/ast/lex_conf.re" +yy853: +#line 267 "../src/ast/lex_conf.re" { fatal_lc(get_cline(), get_column(), "bad configuration value (expected number)"); } -#line 4025 "src/ast/lex_conf.cc" -yy850: +#line 4046 "src/ast/lex_conf.cc" +yy854: yych = (unsigned char)*++cur; - if (yych <= '0') goto yy849; - if (yych <= '9') goto yy853; - goto yy849; -yy851: + if (yych <= '0') goto yy853; + if (yych <= '9') goto yy857; + goto yy853; +yy855: ++cur; -yy852: -#line 262 "../src/ast/lex_conf.re" +yy856: +#line 269 "../src/ast/lex_conf.re" { int32_t n = 0; if (!s_to_i32_unsafe (tok, cur, n)) { @@ -4039,17 +4060,17 @@ yy852: lex_conf_semicolon (); return n; } -#line 4043 "src/ast/lex_conf.cc" -yy853: +#line 4064 "src/ast/lex_conf.cc" +yy857: ++cur; if (lim <= cur) YYFILL(1); yych = (unsigned char)*cur; if (yybm[0+yych] & 128) { - goto yy853; + goto yy857; } - goto yy852; + goto yy856; } -#line 270 "../src/ast/lex_conf.re" +#line 277 "../src/ast/lex_conf.re" } @@ -4059,7 +4080,7 @@ std::string Scanner::lex_conf_string () std::string s; tok = cur; -#line 4063 "src/ast/lex_conf.cc" +#line 4084 "src/ast/lex_conf.cc" { unsigned char yych; static const unsigned char yybm[] = { @@ -4100,40 +4121,40 @@ std::string Scanner::lex_conf_string () yych = (unsigned char)*cur; if (yych <= '!') { if (yych <= '\n') { - if (yych <= 0x00) goto yy857; - if (yych <= 0x08) goto yy858; + if (yych <= 0x00) goto yy861; + if (yych <= 0x08) goto yy862; } else { - if (yych != ' ') goto yy858; + if (yych != ' ') goto yy862; } } else { if (yych <= '\'') { - if (yych <= '"') goto yy861; - if (yych <= '&') goto yy858; - goto yy861; + if (yych <= '"') goto yy865; + if (yych <= '&') goto yy862; + goto yy865; } else { - if (yych != ';') goto yy858; + if (yych != ';') goto yy862; } } -yy857: -#line 298 "../src/ast/lex_conf.re" +yy861: +#line 305 "../src/ast/lex_conf.re" { goto end; } -#line 4121 "src/ast/lex_conf.cc" -yy858: +#line 4142 "src/ast/lex_conf.cc" +yy862: ++cur; if (lim <= cur) YYFILL(1); yych = (unsigned char)*cur; if (yybm[0+yych] & 128) { - goto yy858; + goto yy862; } -#line 294 "../src/ast/lex_conf.re" +#line 301 "../src/ast/lex_conf.re" { s = std::string(tok, tok_len()); goto end; } -#line 4134 "src/ast/lex_conf.cc" -yy861: +#line 4155 "src/ast/lex_conf.cc" +yy865: ++cur; -#line 279 "../src/ast/lex_conf.re" +#line 286 "../src/ast/lex_conf.re" { const char quote = tok[0]; for (bool end;;) { @@ -4149,9 +4170,9 @@ yy861: } } } -#line 4153 "src/ast/lex_conf.cc" +#line 4174 "src/ast/lex_conf.cc" } -#line 299 "../src/ast/lex_conf.re" +#line 306 "../src/ast/lex_conf.re" end: lex_conf_semicolon (); diff --git a/re2c/bootstrap/src/conf/parse_opts.cc b/re2c/bootstrap/src/conf/parse_opts.cc index 9c5a8ebd..eb2dee34 100644 --- a/re2c/bootstrap/src/conf/parse_opts.cc +++ b/re2c/bootstrap/src/conf/parse_opts.cc @@ -1,4 +1,4 @@ -/* Generated by re2c 1.1.1 on Sun Nov 18 21:40:25 2018 */ +/* Generated by re2c 1.1.1 on Sat Dec 22 19:57:51 2018 */ #line 1 "../src/conf/parse_opts.re" #include "src/code/input_api.h" #include "src/conf/msg.h" diff --git a/re2c/src/adfa/adfa.cc b/re2c/src/adfa/adfa.cc index 4ae81005..7afa7b52 100644 --- a/re2c/src/adfa/adfa.cc +++ b/re2c/src/adfa/adfa.cc @@ -16,6 +16,11 @@ namespace re2c const size_t Initial::NOSAVE = std::numeric_limits::max(); +static bool is_eof(const opt_t *opts, uint32_t ub) +{ + return opts->eof != NOEOF && static_cast(opts->eof) == ub; +} + DFA::DFA ( const dfa_t &dfa , const std::vector &fill @@ -25,6 +30,8 @@ DFA::DFA , const std::string &cn , uint32_t ln , const std::string &su + , const Code *eof + , const opt_t *opts ) : accepts () , name (nm) @@ -34,6 +41,8 @@ DFA::DFA , ubChar(dfa.charset.back()) , nStates(0) , head(NULL) + , defstate(NULL) + , finstates(dfa.rules.size(), NULL) , tags0(dfa.tcid0) , charset(dfa.charset) , rules(dfa.rules) @@ -51,6 +60,7 @@ DFA::DFA , key_size (key) , bitmaps (std::min(ubChar, 256u)) , setup(su) + , eof_action(eof) { const size_t nstates = dfa.states.size(); const size_t nchars = dfa.nchars; @@ -77,13 +87,22 @@ DFA::DFA s->fill = fill[i]; s->fallback = t->fallback; // see note [fallback states] + bool end = true; + for (uint32_t c = 0; end && c < nchars; ++c) { + end &= t->arcs[c] == dfa_t::NIL; + } + s->go.span = allocate(nchars); uint32_t j = 0; - for (uint32_t c = 0; c < nchars; ++j) - { + for (uint32_t c = 0; c < nchars; ++j) { const size_t to = t->arcs[c]; const tcid_t tc = t->tcid[c]; - for (;++c < nchars && t->arcs[c] == to && t->tcid[c] == tc;); + const bool ie = is_eof(opts, charset[c]); + for (;++c < nchars + && t->arcs[c] == to + && t->tcid[c] == tc + && (end || is_eof(opts, charset[c]) == ie) + ;); s->go.span[j].to = to == dfa_t::NIL ? NULL : i2s[to]; s->go.span[j].ub = charset[c]; s->go.span[j].tags = tc; @@ -170,7 +189,9 @@ void DFA::addState(State *s, State *next) { ++nStates; s->next = next->next; + s->prev = next; next->next = s; + next->prev = s->prev; } } // namespace re2c diff --git a/re2c/src/adfa/adfa.h b/re2c/src/adfa/adfa.h index 00c28739..1918f446 100644 --- a/re2c/src/adfa/adfa.h +++ b/re2c/src/adfa/adfa.h @@ -29,6 +29,7 @@ struct State { label_t label; State * next; + State * prev; size_t fill; bool fallback; @@ -42,6 +43,7 @@ struct State State () : label (label_t::first ()) , next (0) + , prev (0) , fill (0) , fallback (false) , rule (Rule::NONE) @@ -69,6 +71,8 @@ struct DFA uint32_t ubChar; uint32_t nStates; State * head; + State *defstate; + std::vector finstates; const tcid_t tags0; std::vector &charset; std::valarray &rules; @@ -86,6 +90,7 @@ struct DFA const size_t key_size; bitmaps_t bitmaps; std::string setup; + const Code *eof_action; DFA ( const dfa_t &dfa , const std::vector &fill @@ -95,6 +100,8 @@ struct DFA , const std::string &cn , uint32_t ln , const std::string &su + , const Code *eof + , const opt_t *opts ); ~DFA (); void reorder(); @@ -105,8 +112,8 @@ struct DFA private: void addState(State*, State *); void split (State *); - void findBaseState (); - void hoist_tags(); + void findBaseState(const opt_t *opts); + void hoist_tags(const opt_t *opts); void hoist_tags_and_skip(const opt_t *opts); void count_used_labels(std::set &used, label_t start, label_t initial, bool force_start, bool fFlag) const; void emit_body (Output &, uint32_t &, const std::set & used_labels, label_t initial) const; diff --git a/re2c/src/adfa/prepare.cc b/re2c/src/adfa/prepare.cc index a9032d67..1ec03430 100644 --- a/re2c/src/adfa/prepare.cc +++ b/re2c/src/adfa/prepare.cc @@ -37,25 +37,34 @@ void DFA::split(State *s) s->go.span[0].tags = TCID0; } -static uint32_t merge(Span *x, State *fg, State *bg) +static uint32_t merge(Span *x, State *fg, State *bg, const opt_t *opts) { Span *f = fg->go.span; Span *b = bg->go.span; Span *const fe = f + fg->go.nSpans; Span *const be = b + bg->go.nSpans; Span *const x0 = x; + const uint32_t eofub = opts->eof + 1; for (;!(f == fe && b == be);) { - if (f->to == b->to && f->tags == b->tags) { + if (f->to == b->to + && f->tags == b->tags + && f->ub != eofub + && b->ub != eofub) { x->to = bg; x->tags = TCID0; - } else { + } + else { x->to = f->to; x->tags = f->tags; + x->ub = f->ub; } if (x == x0 - || x[-1].to != x->to - || x[-1].tags != x->tags) { + || x[-1].to != x->to + || x[-1].tags != x->tags + || x[-1].ub == eofub + || f->ub == eofub + || b->ub == eofub) { ++x; } x[-1].ub = std::min(f->ub, b->ub); @@ -73,7 +82,7 @@ static uint32_t merge(Span *x, State *fg, State *bg) return static_cast(x - x0); } -void DFA::findBaseState() +void DFA::findBaseState(const opt_t *opts) { Span *span = allocate (ubChar - lbChar); @@ -88,7 +97,7 @@ void DFA::findBaseState() if (to->isBase) { to = to->go.span[0].to; - uint32_t nSpans = merge(span, s, to); + uint32_t nSpans = merge(span, s, to, opts); if (nSpans < s->go.nSpans) { @@ -142,18 +151,20 @@ void DFA::findBaseState() void DFA::prepare(const opt_t *opts) { // create rule states - std::vector rule2state(rules.size()); for (State *s = head; s; s = s->next) { if (s->rule != Rule::NONE) { - if (!rule2state[s->rule]) { + if (!finstates[s->rule]) { State *n = new State; + if (s->rule == def_rule) { + defstate = n; + } n->action.set_rule(s->rule); - rule2state[s->rule] = n; + finstates[s->rule] = n; addState(n, s); } for (uint32_t i = 0; i < s->go.nSpans; ++i) { if (!s->go.span[i].to) { - s->go.span[i].to = rule2state[s->rule]; + s->go.span[i].to = finstates[s->rule]; s->go.span[i].tags = s->rule_tags; } } @@ -171,9 +182,10 @@ void DFA::prepare(const opt_t *opts) if (!default_state) { default_state = new State; + defstate = default_state; addState(default_state, s); } - s->go.span[i].to = default_state; + s->go.span[i].to = defstate; } } } @@ -182,18 +194,18 @@ void DFA::prepare(const opt_t *opts) if (default_state) { for (State *s = head; s; s = s->next) { if (s->fallback) { - const std::pair acc(rule2state[s->rule], s->fall_tags); + const std::pair acc(finstates[s->rule], s->fall_tags); s->action.set_save(accepts.find_or_add(acc)); } } - default_state->action.set_accept(&accepts); + defstate->action.set_accept(&accepts); } // tag hoisting should be done after binding default arcs: // (which may introduce new tags) // see note [tag hoisting, skip hoisting and tunneling] if (!opts->eager_skip) { - hoist_tags(); + hoist_tags(opts); } // split ``base'' states into two parts @@ -221,7 +233,7 @@ void DFA::prepare(const opt_t *opts) } } // find ``base'' state, if possible - findBaseState(); + findBaseState(opts); // see note [tag hoisting, skip hoisting and tunneling] if (opts->eager_skip) { @@ -274,7 +286,7 @@ void DFA::calc_stats(uint32_t ln, bool explicit_tags) } } -void DFA::hoist_tags() +void DFA::hoist_tags(const opt_t *opts) { for (State * s = head; s; s = s->next) { Span *span = s->go.span; @@ -288,6 +300,12 @@ void DFA::hoist_tags() break; } } + + if (opts->eof != NOEOF + && ts != (s->rule == Rule::NONE ? s->fall_tags : s->rule_tags)) { + ts = TCID0; + } + if (ts != TCID0) { s->go.tags = ts; for (uint32_t i = 0; i < nspan; ++i) { @@ -309,12 +327,17 @@ void DFA::hoist_tags_and_skip(const opt_t *opts) bool hoist_tags = true, hoist_skip = true; // do all spans agree on tags? + const tcid_t ts = span[0].tags; for (uint32_t i = 1; i < nspan; ++i) { - if (span[i].tags != span[0].tags) { + if (span[i].tags != ts) { hoist_tags = false; break; } } + if (opts->eof != NOEOF + && ts != (s->rule == Rule::NONE ? s->fall_tags : s->rule_tags)) { + hoist_tags = false; + } // do all spans agree on skip? for (uint32_t i = 0; i < nspan; ++i) { diff --git a/re2c/src/ast/ast.h b/re2c/src/ast/ast.h index a1f5248f..58a9739d 100644 --- a/re2c/src/ast/ast.h +++ b/re2c/src/ast/ast.h @@ -108,10 +108,11 @@ struct spec_t std::string name; std::vector rules; std::vector defs; + std::vector eofs; std::vector setup; explicit spec_t(const std::string &n): - name(n), rules(), defs(), setup() {} + name(n), rules(), defs(), eofs(), setup() {} }; typedef std::vector specs_t; @@ -132,7 +133,7 @@ const AST *ast_ref(const AST *a, const std::string &n); bool ast_need_wrap(const AST *a); void validate_mode(Scanner::ParseMode mode, bool rflag, bool rules, Scanner &input); -void validate_ast(const specs_t &specs, bool cflag); +void validate_ast(const specs_t &specs, const opt_t *opts); void normalize_ast(specs_t &specs); } // namespace re2c diff --git a/re2c/src/ast/lex.re b/re2c/src/ast/lex.re index 11232a78..3d433f08 100644 --- a/re2c/src/ast/lex.re +++ b/re2c/src/ast/lex.re @@ -292,7 +292,7 @@ scan: return TOKEN_REGEXP; } - [*+?()|;/\\=] { return *tok; } + [*+?()|;/\\=$] { return *tok; } "{" [0-9]+ "}" { if (!s_to_u32_unsafe (tok + 1, cur - 1, yylval.bounds.min)) { diff --git a/re2c/src/ast/lex_conf.re b/re2c/src/ast/lex_conf.re index 3b43a95a..979280e5 100644 --- a/re2c/src/ast/lex_conf.re +++ b/re2c/src/ast/lex_conf.re @@ -66,6 +66,13 @@ void Scanner::lex_conf(Opt &opts) "flags:empty-class" { lex_conf_empty_class(opts); return; } "flags:dfa-minimization" { lex_conf_dfa_minimization(opts); return; } + "eof" { + const int32_t eof = lex_conf_number(); + if (eof < 0) fatal_lc(l, c, "eof cannot have negative value"); + opts.set_eof(static_cast(eof)); + return; + } + "define:YYCONDTYPE" { opts.set_yycondtype (lex_conf_string ()); return; } "define:YYGETCONDITION" { opts.set_cond_get (lex_conf_string ()); return; } "define:YYGETCONDITION:naked" { opts.set_cond_get_naked (lex_conf_bool()); return; } diff --git a/re2c/src/ast/normalize.cc b/re2c/src/ast/normalize.cc index 959694fc..424619f1 100644 --- a/re2c/src/ast/normalize.cc +++ b/re2c/src/ast/normalize.cc @@ -21,6 +21,7 @@ void normalize_ast(specs_t &specs) i->rules.insert(i->rules.end(), star->rules.begin(), star->rules.end()); i->defs.insert(i->defs.end(), star->defs.begin(), star->defs.end()); + i->eofs.insert(i->eofs.end(), star->eofs.begin(), star->eofs.end()); i->setup.insert(i->setup.end(), star->setup.begin(), star->setup.end()); } diff --git a/re2c/src/ast/parser.ypp b/re2c/src/ast/parser.ypp index 287d2d32..660f88ae 100644 --- a/re2c/src/ast/parser.ypp +++ b/re2c/src/ast/parser.ypp @@ -109,6 +109,10 @@ rule find(context.specs, "").defs.push_back($2); } + | '$' TOKEN_CODE { + find(context.specs, "").eofs.push_back($2); + } + | TOKEN_CLIST trailexpr ccode { for(CondList::const_iterator i = $1->begin(); i != $1->end(); ++i) { find(context.specs, *i).rules.push_back(ASTRule($2, $3)); @@ -123,6 +127,13 @@ rule delete $1; } + | TOKEN_CLIST '$' ccode { + for(CondList::const_iterator i = $1->begin(); i != $1->end(); ++i) { + find(context.specs, *i).eofs.push_back($3); + } + delete $1; + } + | TOKEN_CSETUP TOKEN_CODE { for (CondList::const_iterator i = $1->begin(); i != $1->end(); ++i) { find(context.specs, *i).setup.push_back($2); diff --git a/re2c/src/ast/validate.cc b/re2c/src/ast/validate.cc index 1f735d8c..647b95df 100644 --- a/re2c/src/ast/validate.cc +++ b/re2c/src/ast/validate.cc @@ -29,7 +29,7 @@ void validate_mode(Scanner::ParseMode mode, bool rflag, bool rules, Scanner &inp } } -void validate_ast(const specs_t &specs, bool cflag) +void validate_ast(const specs_t &specs, const opt_t *opts) { static const uint32_t NONE = ~0u; specs_t::const_iterator i, @@ -42,9 +42,22 @@ void validate_ast(const specs_t &specs, bool cflag) "code to default rule %sis already defined at line %u", incond(i->name).c_str(), i->defs[0]->fline); } + if (!i->eofs.empty() && opts->eof == NOEOF) { + fatal("%sEOF rule found, but 're2c:eof' configuration is not set", + incond(i->name).c_str()); + } + else if (i->eofs.empty() && opts->eof != NOEOF) { + fatal("%s're2c:eof' configuration is set, but no EOF rule found", + incond(i->name).c_str()); + } + else if (i->eofs.size() > 1) { + fatal_l(i->eofs[1]->fline, + "EOF rule %sis already defined at line %u", + incond(i->name).c_str(), i->eofs[0]->fline); + } } - if (!cflag) { + if (!opts->cFlag) { for (i = b; i != e; ++i) { if (i->name != "") { const uint32_t l = !i->rules.empty() diff --git a/re2c/src/code/emit.h b/re2c/src/code/emit.h index 229e757a..87fa8ff6 100644 --- a/re2c/src/code/emit.h +++ b/re2c/src/code/emit.h @@ -9,9 +9,9 @@ namespace re2c { typedef std::vector code_lines_t; void emit_action(Output &o, uint32_t ind, const DFA &dfa, const State *s, const std::set &used_labels); -void gen_goto_plain(Output &o, uint32_t ind, const State *to, const DFA &dfa, tcid_t tcid, bool skip); -void gen_goto_case(Output &o, uint32_t ind, const State *to, const DFA &dfa, tcid_t tcid, bool skip); -void gen_goto_if(Output &o, uint32_t ind, const State *to, const DFA &dfa, tcid_t tcid, bool skip); +void gen_goto_plain(Output &o, uint32_t ind, const State *from, const State *to, const DFA &dfa, tcid_t tcid, bool skip, bool fill); +void gen_goto_case(Output &o, uint32_t ind, const State *from, const State *to, const DFA &dfa, tcid_t tcid, bool skip, bool fill); +void gen_goto_if(Output &o, uint32_t ind, const State *from, const State *to, const DFA &dfa, tcid_t tcid, bool skip, bool fill); void gen_settags(code_lines_t &code, const DFA &dfa, tcid_t tcid, const opt_t *opts); std::string vartag_name(tagver_t ver, const std::string &prefix); std::string vartag_expr(tagver_t ver, const std::string &prefix, const std::string &expression); diff --git a/re2c/src/code/emit_action.cc b/re2c/src/code/emit_action.cc index 8a079b25..c70e35e1 100644 --- a/re2c/src/code/emit_action.cc +++ b/re2c/src/code/emit_action.cc @@ -26,12 +26,15 @@ namespace re2c { static void need (Output &o, uint32_t ind, size_t some); +static void gen_rescan_label (Output &o, const State *s); static void emit_accept_binary (Output &o, uint32_t ind, const DFA &dfa, const accept_t &acc, size_t l, size_t r); static void emit_accept (Output &o, uint32_t ind, const DFA &dfa, const accept_t &acc); static void emit_rule (Output &o, uint32_t ind, const DFA &dfa, size_t rule_idx); static void gen_fintags (Output &o, uint32_t ind, const DFA &dfa, const Rule &rule); -static void gen_goto (code_lines_t &code, const State *to, const DFA &dfa, tcid_t tcid, const opt_t *opts, bool skip); +static void gen_goto (code_lines_t &code, const State *from, const State *to, const DFA &dfa, tcid_t tcid, const opt_t *opts, bool skip, bool fill); +static void gen_on_eof (code_lines_t &code, const opt_t *opts, const DFA &dfa, const State *from, const State *to); static bool endstate (const State *s); +static void flushln (code_lines_t &code, std::ostringstream &o); void emit_action(Output &o, uint32_t ind, const DFA &dfa, const State *s, const std::set &used_labels) @@ -41,6 +44,7 @@ void emit_action(Output &o, uint32_t ind, const DFA &dfa, case Action::MATCH: o.wdelay_skip(ind, !opts->eager_skip); need(o, ind, s->fill); + gen_rescan_label(o, s); o.wdelay_peek(ind, !endstate(s)); break; case Action::INITIAL: { @@ -61,6 +65,7 @@ void emit_action(Output &o, uint32_t ind, const DFA &dfa, } need(o, ind, s->fill); o.wdelay_backup(ind, backup); + gen_rescan_label(o, s); o.wdelay_peek(ind, !endstate(s)); break; } @@ -71,6 +76,7 @@ void emit_action(Output &o, uint32_t ind, const DFA &dfa, o.wdelay_skip(ind, !opts->eager_skip); o.wdelay_backup(ind, true); need(o, ind, s->fill); + gen_rescan_label(o, s); o.wdelay_peek(ind, true); break; case Action::MOVE: @@ -97,7 +103,7 @@ void emit_accept_binary(Output &o, uint32_t ind, const DFA &dfa, emit_accept_binary (o, ++ind, dfa, acc, m + 1, r); o.wind(--ind).ws("}\n"); } else { - gen_goto_plain(o, ind, acc[l].first, dfa, acc[l].second, false); + gen_goto_plain(o, ind, NULL, acc[l].first, dfa, acc[l].second, false, false); } } @@ -112,7 +118,7 @@ void emit_accept(Output &o, uint32_t ind, const DFA &dfa, const accept_t &acc) // only one possible 'yyaccept' value: unconditional jump if (nacc == 1) { - gen_goto_plain(o, ind, acc[0].first, dfa, acc[0].second, false); + gen_goto_plain(o, ind, NULL, acc[0].first, dfa, acc[0].second, false, false); return; } @@ -152,10 +158,10 @@ void emit_accept(Output &o, uint32_t ind, const DFA &dfa, const accept_t &acc) o.wind(ind).ws("switch (").wstring(opts->yyaccept).ws(") {\n"); for (uint32_t i = 0; i < nacc - 1; ++i) { o.wind(ind).ws("case ").wu32(i).ws(": "); - gen_goto_case(o, ind, acc[i].first, dfa, acc[i].second, false); + gen_goto_case(o, ind, NULL, acc[i].first, dfa, acc[i].second, false, false); } o.wind(ind).ws("default:"); - gen_goto_case(o, ind, acc[nacc - 1].first, dfa, acc[nacc - 1].second, false); + gen_goto_case(o, ind, NULL, acc[nacc - 1].first, dfa, acc[nacc - 1].second, false, false); o.wind(ind).ws("}\n"); } @@ -196,11 +202,11 @@ void emit_rule(Output &o, uint32_t ind, const DFA &dfa, size_t rule_idx) void need(Output &o, uint32_t ind, size_t some) { - if (some == 0) return; - const opt_t *opts = o.block().opts; std::string s; + if (opts->eof != NOEOF || some == 0) return; + if (opts->fFlag) { strrreplace(s = opts->state_set, opts->state_set_arg, o.fill_index); o.wind(ind).wstring(s); @@ -232,11 +238,20 @@ void need(Output &o, uint32_t ind, size_t some) } } -void gen_goto_case(Output &o, uint32_t ind, const State *to, - const DFA &dfa, tcid_t tcid, bool skip) +void gen_rescan_label(Output &o, const State *s) +{ + const opt_t *opts = o.block().opts; + + if (opts->eof == NOEOF || endstate(s)) return; + + o.wstring(opts->labelPrefix).wlabel(s->label).ws("_:\n"); +} + +void gen_goto_case(Output &o, uint32_t ind, const State *from, const State *to, + const DFA &dfa, tcid_t tcid, bool skip, bool fill) { code_lines_t code; - gen_goto(code, to, dfa, tcid, o.block().opts, skip); + gen_goto(code, from, to, dfa, tcid, o.block().opts, skip, fill); const size_t lines = code.size(); if (lines == 1) { @@ -249,11 +264,11 @@ void gen_goto_case(Output &o, uint32_t ind, const State *to, } } -void gen_goto_if(Output &o, uint32_t ind, const State *to, - const DFA &dfa, tcid_t tcid, bool skip) +void gen_goto_if(Output &o, uint32_t ind, const State *from, const State *to, + const DFA &dfa, tcid_t tcid, bool skip, bool eof) { code_lines_t code; - gen_goto(code, to, dfa, tcid, o.block().opts, skip); + gen_goto(code, from, to, dfa, tcid, o.block().opts, skip, eof); const size_t lines = code.size(); if (lines == 1) { @@ -267,11 +282,11 @@ void gen_goto_if(Output &o, uint32_t ind, const State *to, } } -void gen_goto_plain(Output &o, uint32_t ind, const State *to, - const DFA &dfa, tcid_t tcid, bool skip) +void gen_goto_plain(Output &o, uint32_t ind, const State *from, const State *to, + const DFA &dfa, tcid_t tcid, bool skip, bool eof) { code_lines_t code; - gen_goto(code, to, dfa, tcid, o.block().opts, skip); + gen_goto(code, from, to, dfa, tcid, o.block().opts, skip, eof); const size_t lines = code.size(); for (size_t i = 0; i < lines; ++i) { @@ -279,25 +294,90 @@ void gen_goto_plain(Output &o, uint32_t ind, const State *to, } } -void gen_goto(code_lines_t &code, const State *to, const DFA &dfa, - tcid_t tcid, const opt_t *opts, bool skip) +void gen_goto(code_lines_t &code, const State *from, const State *to + , const DFA &dfa, tcid_t tcid, const opt_t *opts, bool skip, bool fill) { - std::ostringstream s; - output_skip(s, 0, opts); + if (fill) { + gen_on_eof(code, opts, dfa, from, to); + } if (skip && !opts->lookahead) { - code.push_back(s.str()); + std::ostringstream o; + output_skip(o, 0, opts); + code.push_back(o.str()); } + gen_settags(code, dfa, tcid, opts); + if (skip && opts->lookahead) { - code.push_back(s.str()); + std::ostringstream o; + output_skip(o, 0, opts); + code.push_back(o.str()); } + if (to) { code.push_back("goto " + opts->labelPrefix + to_string(to->label) + ";\n"); } } +void gen_on_eof(code_lines_t &code, const opt_t *opts, const DFA &dfa + , const State *from, const State *to) +{ + const State *retry = from->action.type == Action::MOVE ? from->prev : from; + const State *fallback = from->rule == Rule::NONE + ? dfa.defstate : dfa.finstates[from->rule]; + const tcid_t falltags = from->rule == Rule::NONE + ? from->fall_tags : from->rule_tags; + + std::ostringstream o; + o << "if ("; + if (opts->input_api == INPUT_CUSTOM) { + o << opts->yylessthan << " ()"; + } + else { + o << opts->yylimit << " <= " << opts->yycursor; + } + o << ") {"; + flushln(code, o); + + o << opts->indString << "if (" << opts->fill << " () == 0) " + << "goto " << opts->labelPrefix << retry->label << "_;"; + flushln(code, o); + + if (from->action.type == Action::INITIAL) { + o << opts->indString << "else goto " << opts->labelPrefix << "eof;"; + flushln(code, o); + } + else if (fallback != to) { + code_lines_t tagcode; + gen_settags(tagcode, dfa, falltags, opts); + + if (tagcode.empty()) { + o << opts->indString << "else goto " << opts->labelPrefix << fallback->label << ";"; + flushln(code, o); + } + else { + o << opts->indString << "else {"; + flushln(code, o); + + for (uint32_t i = 0; i < tagcode.size(); ++i) { + code.push_back(opts->indString + opts->indString + tagcode[i]); + } + + o << opts->indString << opts->indString + << "goto " << opts->labelPrefix << fallback->label << ";"; + flushln(code, o); + + o << opts->indString << "}"; + flushln(code, o); + } + } + + o << "}"; + flushln(code, o); +} + void gen_settags(code_lines_t &code, const DFA &dfa, tcid_t tcid, const opt_t *opts) { const bool generic = opts->input_api == INPUT_CUSTOM; @@ -470,4 +550,12 @@ bool endstate(const State *s) && (a == Action::RULE || a == Action::ACCEPT); } +void flushln(code_lines_t &code, std::ostringstream &o) +{ + o << "\n"; + code.push_back(o.str()); + o.str(""); + o.clear(); +} + } // namespace re2c diff --git a/re2c/src/code/emit_dfa.cc b/re2c/src/code/emit_dfa.cc index 968dcef6..287e677e 100644 --- a/re2c/src/code/emit_dfa.cc +++ b/re2c/src/code/emit_dfa.cc @@ -26,10 +26,14 @@ namespace re2c { static void emit_state(Output & o, uint32_t ind, const State * s, bool used_label); +static void emit_eof(Output &, uint32_t, const Code*); void emit_state (Output & o, uint32_t ind, const State * s, bool used_label) { const opt_t *opts = o.block().opts; + used_label |= opts->eof != NOEOF + && (s->action.type == Action::MOVE + || s->action.type == Action::INITIAL); if (used_label) { o.wstring(opts->labelPrefix).wlabel(s->label).ws(":\n"); @@ -40,6 +44,18 @@ void emit_state (Output & o, uint32_t ind, const State * s, bool used_label) } } +void emit_eof(Output & o, uint32_t ind, const Code *code) +{ + const opt_t *opts = o.block().opts; + + if (opts->eof == NOEOF) return; + + o.wstring(opts->labelPrefix).ws("eof:\n"); + o.wdelay_line_info_input(code->fline, code->fname); + o.wind(ind).wstring(code->text).ws("\n"); + o.wdelay_line_info_output(); +} + void DFA::count_used_labels (std::set & used, label_t start, label_t initial, bool force_start, bool fFlag) const { @@ -70,8 +86,10 @@ void DFA::count_used_labels (std::set & used, label_t start, void DFA::emit_body(Output &o, uint32_t& ind, const std::set &used_labels, label_t initial) const { + const opt_t *opts = o.block().opts; + code_lines_t code; - gen_settags(code, *this, tags0, o.block().opts); + gen_settags(code, *this, tags0, opts); for (size_t i = 0; i < code.size(); ++i) { o.wind(ind).wstring(code[i]); } @@ -80,15 +98,17 @@ void DFA::emit_body(Output &o, uint32_t& ind, // has a piece of code that advances input position. Wee must // skip it when entering DFA. if (used_labels.count(head->label)) { - o.wind(ind).ws("goto ").wstring(o.block().opts->labelPrefix) + o.wind(ind).ws("goto ").wstring(opts->labelPrefix) .wlabel(initial).ws(";\n"); } for (State * s = head; s; s = s->next) { emit_state(o, ind, s, used_labels.count(s->label)); emit_action(o, ind, *this, s, used_labels); - s->go.emit(o, ind, *this); + s->go.emit(o, ind, *this, s); } + + emit_eof(o, ind, this->eof_action); } void DFA::emit_dot(Output &o, bool last_cond) const @@ -119,7 +139,7 @@ void DFA::emit_dot(Output &o, bool last_cond) const .ws("\"]").ws("\n"); } } - s->go.emit(o, 0, *this); + s->go.emit(o, 0, *this, s); } if (!opts->cFlag || last_cond) { o.ws("}\n"); diff --git a/re2c/src/code/go.h b/re2c/src/code/go.h index a693a54e..887d4040 100644 --- a/re2c/src/code/go.h +++ b/re2c/src/code/go.h @@ -32,9 +32,10 @@ struct Case const State *to; tcid_t tags; bool skip; + bool eof; void emit(Output &o, uint32_t ind) const; - inline Case(): ranges(), to(NULL), tags(TCID0), skip(false) {} + inline Case(): ranges(), to(NULL), tags(TCID0), skip(false), eof(false) {} FORBID_COPY(Case); }; @@ -43,10 +44,10 @@ struct Cases Case *cases; uint32_t cases_size; - void add(uint32_t lb, uint32_t ub, State *to, tcid_t tags, bool skip); - Cases(const Span *spans, uint32_t nspans, bool skip); + void add_case(uint32_t lb, const Span &sp, bool skip, uint32_t eof); + Cases(const Span *spans, uint32_t nspans, bool skip, uint32_t eof); ~Cases(); - void emit(Output &o, uint32_t ind, const DFA &dfa) const; + void emit(Output &o, uint32_t ind, const DFA &dfa, const State *from) const; void used_labels(std::set &used) const; FORBID_COPY(Cases); }; @@ -63,9 +64,9 @@ struct Binary Cond * cond; If * thn; If * els; - Binary (const Span * s, uint32_t n, const State * next, bool skip); + Binary (const Span * s, uint32_t n, const State * next, bool skip, uint32_t eof); ~Binary (); - void emit (Output &o, uint32_t ind, const DFA &dfa) const; + void emit (Output &o, uint32_t ind, const DFA &dfa, const State *from) const; void used_labels (std::set & used) const; FORBID_COPY (Binary); @@ -79,15 +80,17 @@ struct Linear const State *to; tcid_t tags; bool skip; + bool eof; }; size_t nbranches; Branch *branches; - Linear(const Span *s, uint32_t n, const State *next, bool skip); + Linear(const Span *s, uint32_t n, const State *next, bool skip, uint32_t eof); ~Linear(); - void add_branch(const Cond *cond, const State *to, tcid_t tags, bool skip); - void emit(Output &o, uint32_t ind, const DFA &dfa) const; + void add_branch(const Cond *cond, const State *to + , const Span &sp, bool skip, uint32_t eof); + void emit(Output &o, uint32_t ind, const DFA &dfa, const State *from) const; void used_labels(std::set &used) const; FORBID_COPY(Linear); }; @@ -104,9 +107,10 @@ struct If Binary * binary; Linear * linear; } info; - If (type_t t, const Span * sp, uint32_t nsp, const State * next, bool skip); + If (type_t t, const Span * sp, uint32_t nsp, const State * next + , bool skip, uint32_t eof); ~If (); - void emit (Output & o, uint32_t ind, const DFA &dfa) const; + void emit (Output & o, uint32_t ind, const DFA &dfa, const State *from) const; void used_labels (std::set & used) const; }; @@ -122,9 +126,10 @@ struct SwitchIf Cases * cases; If * ifs; } info; - SwitchIf (const Span * sp, uint32_t nsp, const State * next, bool sflag, bool skip); + SwitchIf (const Span * sp, uint32_t nsp, const State * next, bool sflag + , bool skip, uint32_t eof); ~SwitchIf (); - void emit (Output & o, uint32_t ind, const DFA &dfa) const; + void emit (Output & o, uint32_t ind, const DFA &dfa, const State *from) const; void used_labels (std::set & used) const; }; @@ -136,9 +141,9 @@ struct GoBitmap SwitchIf * lgo; GoBitmap (const Span * span, uint32_t nSpans, const Span * hspan, uint32_t hSpans, const bitmap_t * bm, const State * bm_state, - const State * next, bool sflag); + const State * next, bool sflag, uint32_t eof); ~GoBitmap (); - void emit (Output & o, uint32_t ind, const DFA &dfa) const; + void emit (Output & o, uint32_t ind, const DFA &dfa, const State *from) const; void used_labels (std::set & used) const; FORBID_COPY (GoBitmap); @@ -164,9 +169,9 @@ struct Cpgoto SwitchIf * hgo; CpgotoTable * table; Cpgoto (const Span * span, uint32_t nSpans, const Span * hspan, - uint32_t hSpans, const State * next, bool sflag); + uint32_t hSpans, const State * next, bool sflag, uint32_t eof); ~Cpgoto (); - void emit (Output & o, uint32_t ind, const DFA &dfa) const; + void emit (Output & o, uint32_t ind, const DFA &dfa, const State *from) const; void used_labels (std::set & used) const; FORBID_COPY (Cpgoto); @@ -176,9 +181,9 @@ struct Dot { const State * from; Cases * cases; - Dot(const Span *sp, uint32_t nsp, const State *s); + Dot(const Span *sp, uint32_t nsp, const State *s, uint32_t eof); ~Dot (); - void emit (Output & o, const DFA &dfa) const; + void emit (Output & o, const DFA &dfa, const State *from) const; FORBID_COPY (Dot); }; @@ -208,7 +213,7 @@ struct Go Go (); ~Go (); void init(const State* from, const opt_t *opts, bitmaps_t &bitmaps); - void emit (Output & o, uint32_t ind, const DFA &dfa) const; + void emit (Output & o, uint32_t ind, const DFA &dfa, const State *from) const; void used_labels (std::set & used) const; Go (const Go & g) diff --git a/re2c/src/code/go_construct.cc b/re2c/src/code/go_construct.cc index d3940804..aa44c3df 100644 --- a/re2c/src/code/go_construct.cc +++ b/re2c/src/code/go_construct.cc @@ -16,7 +16,8 @@ namespace re2c { -static uint32_t unmap (Span * new_span, const Span * old_span, uint32_t old_nspans, const State * x); +static uint32_t unmap(Span*, const Span*, uint32_t, const State*); +static bool is_eof(uint32_t, uint32_t); bool consume(const State *s) { @@ -31,13 +32,18 @@ bool consume(const State *s) return true; /* unreachable */ } -Cases::Cases(const Span *spans, uint32_t nspans, bool skip) +bool is_eof(uint32_t eof, uint32_t ub) +{ + return eof != NOEOF && eof + 1 == ub; +} + +Cases::Cases(const Span *spans, uint32_t nspans, bool skip, uint32_t eof) : cases(new Case[nspans]) , cases_size(0) { assert(nspans > 0); - // first case is default case + // first case is default: book the place (ranges will be added later) Case &c = cases[cases_size++]; const Span *s = spans + (nspans - 1); c.to = s->to; @@ -46,25 +52,30 @@ Cases::Cases(const Span *spans, uint32_t nspans, bool skip) for (uint32_t i = 0, lb = 0; i < nspans; ++i) { s = spans + i; - add(lb, s->ub, s->to, s->tags, skip && consume(s->to)); + add_case(lb, *s, skip && consume(s->to), eof); lb = s->ub; } } -void Cases::add(uint32_t lb, uint32_t ub, State *to, tcid_t tags, bool skip) +void Cases::add_case(uint32_t lb, const Span &sp, bool skip, uint32_t eof) { + const bool ie = is_eof(eof, sp.ub); + for (uint32_t i = 0; i < cases_size; ++i) { Case &c = cases[i]; - if (c.to == to && c.tags == tags) { - c.ranges.push_back(std::make_pair(lb, ub)); + if (c.to == sp.to && c.tags == sp.tags) { + c.ranges.push_back(std::make_pair(lb, sp.ub)); + c.eof |= ie; return; } } + Case &c = cases[cases_size++]; - c.ranges.push_back(std::make_pair(lb, ub)); - c.to = to; - c.tags = tags; - c.skip = skip; + c.ranges.push_back(std::make_pair(lb, sp.ub)); + c.to = sp.to; + c.tags = sp.tags; + c.skip = skip && consume(sp.to); + c.eof = ie; } Cond::Cond (const std::string & cmp, uint32_t val) @@ -72,7 +83,8 @@ Cond::Cond (const std::string & cmp, uint32_t val) , value (val) {} -Binary::Binary (const Span * s, uint32_t n, const State * next, bool skip) +Binary::Binary (const Span * s, uint32_t n, const State * next + , bool skip, uint32_t eof) : cond (NULL) , thn (NULL) , els (NULL) @@ -80,94 +92,94 @@ Binary::Binary (const Span * s, uint32_t n, const State * next, bool skip) const uint32_t l = n / 2; const uint32_t h = n - l; cond = new Cond ("<=", s[l - 1].ub - 1); - thn = new If (l > 4 ? If::BINARY : If::LINEAR, &s[0], l, next, skip); - els = new If (h > 4 ? If::BINARY : If::LINEAR, &s[l], h, next, skip); + thn = new If (l > 4 ? If::BINARY : If::LINEAR, &s[0], l, next, skip, eof); + els = new If (h > 4 ? If::BINARY : If::LINEAR, &s[l], h, next, skip, eof); } -void Linear::add_branch(const Cond *cond, const State *to, tcid_t tags, bool skip) +void Linear::add_branch(const Cond *cond, const State *to + , const Span &sp, bool skip, uint32_t eof) { Branch &b = branches[nbranches++]; b.cond = cond; b.to = to; - b.tags = tags; - b.skip = skip; + b.tags = sp.tags; + b.skip = skip && consume(sp.to); + b.eof = is_eof(eof, sp.ub); } -Linear::Linear(const Span *s, uint32_t n, const State *next, bool skip) +Linear::Linear(const Span *s, uint32_t n, const State *next + , bool skip, uint32_t eof) : nbranches(0) , branches(new Branch[n]) { for (;;) { if (n == 1 && s[0].to == next) { - add_branch(NULL, NULL, s[0].tags, skip && consume(s[0].to)); + add_branch(NULL, NULL, s[0], skip, eof); return; } else if (n == 1) { - add_branch(NULL, s[0].to, s[0].tags, skip && consume(s[0].to)); + add_branch(NULL, s[0].to, s[0], skip, eof); return; } else if (n == 2 && s[0].to == next) { - add_branch(new Cond(">=", s[0].ub), s[1].to, s[1].tags, skip && consume(s[1].to)); - add_branch(NULL, NULL, s[0].tags, skip && consume(s[0].to)); + add_branch(new Cond(">=", s[0].ub), s[1].to, s[1], skip, eof); + add_branch(NULL, NULL, s[0], skip, eof); return; } else if (n == 3 && s[1].to == next && s[1].ub - s[0].ub == 1 && s[2].to == s[0].to && s[2].tags == s[0].tags) { - add_branch(new Cond("!=", s[0].ub), s[0].to, s[0].tags, skip && consume(s[0].to)); - add_branch(NULL, NULL, s[1].tags, skip && consume(s[1].to)); + add_branch(new Cond("!=", s[0].ub), s[0].to, s[0], skip, eof); + add_branch(NULL, NULL, s[1], skip, eof); return; } else if (n >= 3 && s[1].ub - s[0].ub == 1 && s[2].to == s[0].to && s[2].tags == s[0].tags) { - add_branch(new Cond("==", s[0].ub), s[1].to, s[1].tags, skip && consume(s[1].to)); + add_branch(new Cond("==", s[0].ub), s[1].to, s[1], skip, eof); n -= 2; s += 2; } else { - add_branch(new Cond("<=", s[0].ub - 1), s[0].to, s[0].tags, skip && consume(s[0].to)); + add_branch(new Cond("<=", s[0].ub - 1), s[0].to, s[0], skip, eof); n -= 1; s += 1; } } } -If::If (type_t t, const Span * sp, uint32_t nsp, const State * next, bool skip) +If::If (type_t t, const Span * sp, uint32_t nsp, const State * next + , bool skip, uint32_t eof) : type (t) , info () { - switch (type) - { - case BINARY: - info.binary = new Binary (sp, nsp, next, skip); - break; - case LINEAR: - info.linear = new Linear (sp, nsp, next, skip); - break; + if (type == BINARY) { + info.binary = new Binary (sp, nsp, next, skip, eof); + } + else { + info.linear = new Linear (sp, nsp, next, skip, eof); } } -SwitchIf::SwitchIf (const Span * sp, uint32_t nsp, const State * next, bool sflag, bool skip) +SwitchIf::SwitchIf (const Span * sp, uint32_t nsp, const State * next + , bool sflag, bool skip, uint32_t eof) : type (IF) , info () { - if ((!sflag && nsp > 2) || (nsp > 8 && (sp[nsp - 2].ub - sp[0].ub <= 3 * (nsp - 2)))) - { + if ((!sflag && nsp > 2) + || (nsp > 8 && (sp[nsp - 2].ub - sp[0].ub <= 3 * (nsp - 2)))) { type = SWITCH; - info.cases = new Cases (sp, nsp, skip); + info.cases = new Cases (sp, nsp, skip, eof); } - else if (nsp > 5) - { - info.ifs = new If (If::BINARY, sp, nsp, next, skip); + else if (nsp > 5) { + info.ifs = new If (If::BINARY, sp, nsp, next, skip, eof); } - else - { - info.ifs = new If (If::LINEAR, sp, nsp, next, skip); + else { + info.ifs = new If (If::LINEAR, sp, nsp, next, skip, eof); } } -GoBitmap::GoBitmap (const Span * span, uint32_t nSpans, const Span * hspan, - uint32_t hSpans, const bitmap_t * bm, const State * bm_state, - const State * next, bool sflag) +GoBitmap::GoBitmap (const Span * span, uint32_t nSpans, const Span * hspan + , uint32_t hSpans, const bitmap_t * bm, const State * bm_state + , const State * next, bool sflag, uint32_t eof) : bitmap (bm) , bitmap_state (bm_state) , hgo (NULL) @@ -176,13 +188,11 @@ GoBitmap::GoBitmap (const Span * span, uint32_t nSpans, const Span * hspan, Span * bspan = allocate (nSpans); uint32_t bSpans = unmap (bspan, span, nSpans, bm_state); lgo = bSpans == 0 - ? NULL - : new SwitchIf (bspan, bSpans, next, sflag, false); + ? NULL : new SwitchIf (bspan, bSpans, next, sflag, false, eof); // if there are any low spans, then next state for high spans // must be NULL to trigger explicit goto generation in linear 'if' hgo = hSpans == 0 - ? NULL - : new SwitchIf (hspan, hSpans, lgo ? NULL : next, sflag, false); + ? NULL : new SwitchIf (hspan, hSpans, lgo ? NULL : next, sflag, false, eof); operator delete (bspan); } @@ -192,24 +202,22 @@ CpgotoTable::CpgotoTable (const Span * span, uint32_t nSpans) : table (new const State * [TABLE_SIZE]) { uint32_t c = 0; - for (uint32_t i = 0; i < nSpans; ++i) - { - for(; c < span[i].ub && c < TABLE_SIZE; ++c) - { + for (uint32_t i = 0; i < nSpans; ++i) { + for(; c < span[i].ub && c < TABLE_SIZE; ++c) { table[c] = span[i].to; } } } -Cpgoto::Cpgoto (const Span * span, uint32_t nSpans, const Span * hspan, - uint32_t hSpans, const State * next, bool sflag) - : hgo (hSpans == 0 ? NULL : new SwitchIf (hspan, hSpans, next, sflag, false)) +Cpgoto::Cpgoto (const Span * span, uint32_t nSpans, const Span * hspan + , uint32_t hSpans, const State * next, bool sflag, uint32_t eof) + : hgo (hSpans == 0 ? NULL : new SwitchIf (hspan, hSpans, next, sflag, false, eof)) , table (new CpgotoTable (span, nSpans)) {} -Dot::Dot (const Span * sp, uint32_t nsp, const State * s) +Dot::Dot (const Span * sp, uint32_t nsp, const State * s, uint32_t eof) : from (s) - , cases (new Cases (sp, nsp, false)) + , cases (new Cases (sp, nsp, false, eof)) {} Go::Go () @@ -223,18 +231,13 @@ Go::Go () void Go::init(const State *from, const opt_t *opts, bitmaps_t &bitmaps) { - if (nSpans == 0) - { - return; - } + if (nSpans == 0) return; // initialize high (wide) spans uint32_t hSpans = 0; const Span * hspan = NULL; - for (uint32_t i = 0; i < nSpans; ++i) - { - if (span[i].ub > 0x100) - { + for (uint32_t i = 0; i < nSpans; ++i) { + if (span[i].ub > 0x100) { hspan = &span[i]; hSpans = nSpans - i; break; @@ -270,26 +273,22 @@ void Go::init(const State *from, const opt_t *opts, bitmaps_t &bitmaps) const uint32_t dSpans = nSpans - hSpans - nBitmaps; const bool part_skip = opts->eager_skip && !skip; - if (opts->target == TARGET_DOT) - { + if (opts->target == TARGET_DOT) { type = DOT; - info.dot = new Dot (span, nSpans, from); + info.dot = new Dot (span, nSpans, from, opts->eof); } - else if (opts->gFlag && !part_skip && (dSpans >= opts->cGotoThreshold) && !low_spans_have_tags) - { + else if (opts->gFlag && !part_skip && (dSpans >= opts->cGotoThreshold) && !low_spans_have_tags) { type = CPGOTO; - info.cpgoto = new Cpgoto (span, nSpans, hspan, hSpans, from->next, opts->sFlag); + info.cpgoto = new Cpgoto (span, nSpans, hspan, hSpans, from->next, opts->sFlag, opts->eof); } - else if (opts->bFlag && !part_skip && (nBitmaps > 0)) - { + else if (opts->bFlag && !part_skip && (nBitmaps > 0)) { type = BITMAP; - info.bitmap = new GoBitmap (span, nSpans, hspan, hSpans, bm, bms, from->next, opts->sFlag); + info.bitmap = new GoBitmap (span, nSpans, hspan, hSpans, bm, bms, from->next, opts->sFlag, opts->eof); bitmaps.used = true; } - else - { + else { type = SWITCH_IF; - info.switchif = new SwitchIf (span, nSpans, from->next, opts->sFlag, part_skip); + info.switchif = new SwitchIf (span, nSpans, from->next, opts->sFlag, part_skip, opts->eof); } } @@ -303,16 +302,14 @@ void Go::init(const State *from, const opt_t *opts, bitmaps_t &bitmaps) uint32_t unmap (Span * new_span, const Span * old_span, uint32_t old_nspans, const State * x) { uint32_t new_nspans = 0; - for (uint32_t i = 0; i < old_nspans; ++i) - { - if (old_span[i].to != x) - { + for (uint32_t i = 0; i < old_nspans; ++i) { + if (old_span[i].to != x) { if (new_nspans > 0 && new_span[new_nspans - 1].to == old_span[i].to - && new_span[new_nspans - 1].tags == old_span[i].tags) + && new_span[new_nspans - 1].tags == old_span[i].tags) { new_span[new_nspans - 1].ub = old_span[i].ub; - else - { + } + else { new_span[new_nspans].to = old_span[i].to; new_span[new_nspans].ub = old_span[i].ub; new_span[new_nspans].tags = old_span[i].tags; @@ -320,8 +317,9 @@ uint32_t unmap (Span * new_span, const Span * old_span, uint32_t old_nspans, con } } } - if (new_nspans > 0) + if (new_nspans > 0) { new_span[new_nspans - 1].ub = old_span[old_nspans - 1].ub; + } return new_nspans; } diff --git a/re2c/src/code/go_emit.cc b/re2c/src/code/go_emit.cc index d1329ecc..ef6ac0db 100644 --- a/re2c/src/code/go_emit.cc +++ b/re2c/src/code/go_emit.cc @@ -19,21 +19,21 @@ namespace re2c { static void output_if (Output & o, uint32_t ind, const std::string & compare, uint32_t value); -static std::string output_hgo (Output & o, uint32_t ind, const DFA &dfa, SwitchIf * hgo); +static std::string output_hgo (Output & o, uint32_t ind, const DFA &dfa, SwitchIf * hgo, const State *from); void output_if (Output & o, uint32_t ind, const std::string & compare, uint32_t value) { o.wind(ind).ws("if (").wstring(o.block().opts->yych).ws(" ").wstring(compare).ws(" ").wc_hex (value).ws(") "); } -std::string output_hgo (Output & o, uint32_t ind, const DFA &dfa, SwitchIf * hgo) +std::string output_hgo (Output & o, uint32_t ind, const DFA &dfa, SwitchIf * hgo, const State *from) { const opt_t *opts = o.block().opts; std::string yych = opts->yych; if (hgo != NULL) { o.wind(ind).ws("if (").wstring(yych).ws(" & ~0xFF) {\n"); - hgo->emit (o, ind + 1, dfa); + hgo->emit (o, ind + 1, dfa, from); o.wind(ind).ws("} else "); yych = opts->yych; } @@ -67,68 +67,68 @@ void Case::emit (Output & o, uint32_t ind) const } } -void Cases::emit(Output &o, uint32_t ind, const DFA &dfa) const +void Cases::emit(Output &o, uint32_t ind, const DFA &dfa, const State *from) const { o.wind(ind).ws("switch (").wstring(o.block().opts->yych).ws(") {\n"); for (uint32_t i = 1; i < cases_size; ++i) { const Case &c = cases[i]; c.emit(o, ind); - gen_goto_case(o, ind, c.to, dfa, c.tags, c.skip); + gen_goto_case(o, ind, from, c.to, dfa, c.tags, c.skip, c.eof); } // default case must be the last one const Case &c = cases[0]; o.wind(ind).ws("default:"); - gen_goto_case(o, ind, c.to, dfa, c.tags, c.skip); + gen_goto_case(o, ind, from, c.to, dfa, c.tags, c.skip, c.eof); o.wind(ind).ws("}\n"); } -void Binary::emit(Output &o, uint32_t ind, const DFA &dfa) const +void Binary::emit(Output &o, uint32_t ind, const DFA &dfa, const State *from) const { output_if(o, ind, cond->compare, cond->value); o.ws("{\n"); - thn->emit(o, ind + 1, dfa); + thn->emit(o, ind + 1, dfa, from); o.wind(ind).ws("} else {\n"); - els->emit(o, ind + 1, dfa); + els->emit(o, ind + 1, dfa, from); o.wind(ind).ws("}\n"); } -void Linear::emit(Output &o, uint32_t ind, const DFA &dfa) const +void Linear::emit(Output &o, uint32_t ind, const DFA &dfa, const State *from) const { for (uint32_t i = 0; i < nbranches; ++i) { const Branch &b = branches[i]; const Cond *cond = b.cond; if (cond) { output_if(o, ind, cond->compare, cond->value); - gen_goto_if(o, ind, b.to, dfa, b.tags, b.skip); + gen_goto_if(o, ind, from, b.to, dfa, b.tags, b.skip, b.eof); } else { - gen_goto_plain(o, ind, b.to, dfa, b.tags, b.skip); + gen_goto_plain(o, ind, from, b.to, dfa, b.tags, b.skip, b.eof); } } } -void If::emit(Output &o, uint32_t ind, const DFA &dfa) const +void If::emit(Output &o, uint32_t ind, const DFA &dfa, const State *from) const { switch (type) { - case BINARY: info.binary->emit(o, ind, dfa); break; - case LINEAR: info.linear->emit(o, ind, dfa); break; + case BINARY: info.binary->emit(o, ind, dfa, from); break; + case LINEAR: info.linear->emit(o, ind, dfa, from); break; } } -void SwitchIf::emit(Output &o, uint32_t ind, const DFA &dfa) const +void SwitchIf::emit(Output &o, uint32_t ind, const DFA &dfa, const State *from) const { switch (type) { - case SWITCH: info.cases->emit(o, ind, dfa); break; - case IF: info.ifs->emit(o, ind, dfa); break; + case SWITCH: info.cases->emit(o, ind, dfa, from); break; + case IF: info.ifs->emit(o, ind, dfa, from); break; } } -void GoBitmap::emit (Output & o, uint32_t ind, const DFA &dfa) const +void GoBitmap::emit (Output & o, uint32_t ind, const DFA &dfa, const State *from) const { const opt_t *opts = o.block().opts; - std::string yych = output_hgo (o, ind, dfa, hgo); + std::string yych = output_hgo (o, ind, dfa, hgo, from); o.ws("if (").wstring(opts->yybm).ws("[").wu32(bitmap->i).ws("+").wstring(yych).ws("] & "); if (opts->yybmHexTable) { @@ -139,11 +139,11 @@ void GoBitmap::emit (Output & o, uint32_t ind, const DFA &dfa) const o.wu32(bitmap->m); } o.ws(") {\n"); - gen_goto_plain(o, ind + 1, bitmap_state, dfa, TCID0, false); + gen_goto_plain(o, ind + 1, from, bitmap_state, dfa, TCID0, false, false); o.wind(ind).ws("}\n"); if (lgo != NULL) { - lgo->emit (o, ind, dfa); + lgo->emit (o, ind, dfa, from); } } @@ -186,16 +186,16 @@ void CpgotoTable::emit (Output & o, uint32_t ind) const o.wind(--ind).ws("};\n"); } -void Cpgoto::emit (Output & o, uint32_t ind, const DFA &dfa) const +void Cpgoto::emit (Output & o, uint32_t ind, const DFA &dfa, const State *from) const { - std::string yych = output_hgo (o, ind, dfa, hgo); + std::string yych = output_hgo (o, ind, dfa, hgo, from); o.ws("{\n"); table->emit (o, ++ind); o.wind(ind).ws("goto *").wstring(o.block().opts->yytarget).ws("[").wstring(yych).ws("];\n"); o.wind(--ind).ws("}\n"); } -void Dot::emit(Output &o, const DFA &dfa) const +void Dot::emit(Output &o, const DFA &dfa, const State *from) const { const std::string &prefix = o.block().opts->tags_prefix; const uint32_t n = cases->cases_size; @@ -221,10 +221,10 @@ void Dot::emit(Output &o, const DFA &dfa) const } } -void Go::emit (Output & o, uint32_t ind, const DFA &dfa) const +void Go::emit (Output & o, uint32_t ind, const DFA &dfa, const State *from) const { if (type == DOT) { - info.dot->emit (o, dfa); + info.dot->emit (o, dfa, from); return; } @@ -238,11 +238,11 @@ void Go::emit (Output & o, uint32_t ind, const DFA &dfa) const o.wdelay_skip(ind, skip && lookahead); if (type == SWITCH_IF) { - info.switchif->emit (o, ind, dfa); + info.switchif->emit (o, ind, dfa, from); } else if (type == BITMAP) { - info.bitmap->emit (o, ind, dfa); + info.bitmap->emit (o, ind, dfa, from); } else if (type == CPGOTO) { - info.cpgoto->emit (o, ind, dfa); + info.cpgoto->emit (o, ind, dfa, from); } } diff --git a/re2c/src/compile.cc b/re2c/src/compile.cc index 5d8f170b..bb756404 100644 --- a/re2c/src/compile.cc +++ b/re2c/src/compile.cc @@ -48,9 +48,8 @@ static smart_ptr ast_to_dfa(const spec_t &spec, Output &output) const opt_t *opts = output.block().opts; Warn &warn = output.warn; const std::vector &rules = spec.rules; - const size_t defrule = spec.defs.empty() - ? Rule::NONE - : rules.size() - 1; + const size_t defrule = spec.defs.empty() ? Rule::NONE : rules.size() - 1; + const Code *eof = spec.eofs.empty() ? NULL : spec.eofs.front(); const uint32_t line = output.block().line; const std::string &cond = spec.name, @@ -90,13 +89,13 @@ static smart_ptr ast_to_dfa(const spec_t &spec, Output &output) minimization(dfa, opts->dfa_minimization); if (opts->dump_dfa_min) dump_dfa(dfa); - // find YYFILL states and calculate argument to YYFILL + // find strongly connected components and calculate argument to YYFILL std::vector fill; fillpoints(dfa, fill); // ADFA stands for 'DFA with actions' DFA *adfa = new DFA(dfa, fill, defrule, skeleton.sizeof_key, - name, cond, line, setup); + name, cond, line, setup, eof, opts); // see note [reordering DFA states] adfa->reorder(); @@ -166,7 +165,7 @@ void compile(Scanner &input, Output &output, Opt &opts) rspecs = specs; ropts = output.block().opts; } else { - validate_ast(specs, globopts->cFlag); + validate_ast(specs, output.block().opts); normalize_ast(specs); // compile AST to DFA diff --git a/re2c/src/conf/opt.cc b/re2c/src/conf/opt.cc index 24f1dcaa..3955d278 100644 --- a/re2c/src/conf/opt.cc +++ b/re2c/src/conf/opt.cc @@ -30,6 +30,8 @@ void mutopt_t::fix(const conopt_t *globopts) header_file = ""; // default line information iFlag = Opt::baseopt.iFlag; + // default EOF mode + eof = Opt::baseopt.eof; // default environment-sensitive formatting topIndent = Opt::baseopt.topIndent; indString = Opt::baseopt.indString; @@ -223,6 +225,15 @@ void mutopt_t::fix(const conopt_t *globopts) if (!lookahead) { eager_skip = true; } + if (eof != NOEOF) { + if (bFlag || gFlag) { + fatal ("configuration 're2c:eof' cannot be used with options " + "-b, --bit-vectors and -g, --computed gotos"); + } + if (eof >= encoding.nCodeUnits()) { + fatal ("EOF exceeds maximum code unit value for given encoding"); + } + } } const mutopt_t Opt::baseopt; diff --git a/re2c/src/conf/opt.h b/re2c/src/conf/opt.h index 5cd8b5d5..5def8232 100644 --- a/re2c/src/conf/opt.h +++ b/re2c/src/conf/opt.h @@ -24,6 +24,8 @@ enum target_t TARGET_SKELETON }; +const uint32_t NOEOF = ~0u - 1; + /* note [constant and mutable options] * * Some options are immutable (target, output files; global switches like @@ -104,6 +106,7 @@ enum target_t MUTOPT (bool, gFlag, false) \ MUTOPT (std::string, yytarget, "yytarget") \ MUTOPT (uint32_t, cGotoThreshold, 9) \ + MUTOPT (uint32_t, eof, NOEOF) \ /* formatting */ \ MUTOPT (uint32_t, topIndent, 0) \ MUTOPT (std::string, indString, "\t") \ diff --git a/re2c/src/re/split_charset.cc b/re2c/src/re/split_charset.cc index fda1ee57..a4e76200 100644 --- a/re2c/src/re/split_charset.cc +++ b/re2c/src/re/split_charset.cc @@ -3,6 +3,7 @@ #include #include +#include "src/conf/msg.h" #include "src/conf/opt.h" #include "src/re/encoding/enc.h" #include "src/re/re.h" @@ -51,8 +52,14 @@ void split_charset(RESpec &spec) break; } } + + const opt_t *opts = spec.opts; cs.insert(0); - cs.insert(spec.opts->encoding.nCodeUnits()); + cs.insert(opts->encoding.nCodeUnits()); + if (opts->eof != NOEOF) { + cs.insert(opts->eof); + cs.insert(opts->eof + 1); + } spec.charset.insert(spec.charset.end(), cs.begin(), cs.end()); } diff --git a/re2c/test/encodings/unicode_categories.re.inc b/re2c/test/encodings/unicode_categories.re.inc deleted file mode 100644 index ab449ff5..00000000 --- a/re2c/test/encodings/unicode_categories.re.inc +++ /dev/null @@ -1,40 +0,0 @@ -/*!re2c -L = [\x41-\x5a\x61-\x7a\xaa-\xaa\xb5-\xb5\xba-\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec-\u02ec\u02ee-\u02ee\u0370-\u0374\u0376-\u0377\u037a-\u037d\u037f-\u037f\u0386-\u0386\u0388-\u038a\u038c-\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559-\u0559\u0561-\u0587\u05d0-\u05ea\u05f0-\u05f2\u0620-\u064a\u066e-\u066f\u0671-\u06d3\u06d5-\u06d5\u06e5-\u06e6\u06ee-\u06ef\u06fa-\u06fc\u06ff-\u06ff\u0710-\u0710\u0712-\u072f\u074d-\u07a5\u07b1-\u07b1\u07ca-\u07ea\u07f4-\u07f5\u07fa-\u07fa\u0800-\u0815\u081a-\u081a\u0824-\u0824\u0828-\u0828\u0840-\u0858\u08a0-\u08b2\u0904-\u0939\u093d-\u093d\u0950-\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f-\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2-\u09b2\u09b6-\u09b9\u09bd-\u09bd\u09ce-\u09ce\u09dc-\u09dd\u09df-\u09e1\u09f0-\u09f1\u0a05-\u0a0a\u0a0f-\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32-\u0a33\u0a35-\u0a36\u0a38-\u0a39\u0a59-\u0a5c\u0a5e-\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2-\u0ab3\u0ab5-\u0ab9\u0abd-\u0abd\u0ad0-\u0ad0\u0ae0-\u0ae1\u0b05-\u0b0c\u0b0f-\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32-\u0b33\u0b35-\u0b39\u0b3d-\u0b3d\u0b5c-\u0b5d\u0b5f-\u0b61\u0b71-\u0b71\u0b83-\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99-\u0b9a\u0b9c-\u0b9c\u0b9e-\u0b9f\u0ba3-\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0-\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d-\u0c3d\u0c58-\u0c59\u0c60-\u0c61\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd-\u0cbd\u0cde-\u0cde\u0ce0-\u0ce1\u0cf1-\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d-\u0d3d\u0d4e-\u0d4e\u0d60-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd-\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32-\u0e33\u0e40-\u0e46\u0e81-\u0e82\u0e84-\u0e84\u0e87-\u0e88\u0e8a-\u0e8a\u0e8d-\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5-\u0ea5\u0ea7-\u0ea7\u0eaa-\u0eab\u0ead-\u0eb0\u0eb2-\u0eb3\u0ebd-\u0ebd\u0ec0-\u0ec4\u0ec6-\u0ec6\u0edc-\u0edf\u0f00-\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f-\u103f\u1050-\u1055\u105a-\u105d\u1061-\u1061\u1065-\u1066\u106e-\u1070\u1075-\u1081\u108e-\u108e\u10a0-\u10c5\u10c7-\u10c7\u10cd-\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258-\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0-\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16f1-\u16f8\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7-\u17d7\u17dc-\u17dc\u1820-\u1877\u1880-\u18a8\u18aa-\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19c1-\u19c7\u1a00-\u1a16\u1a20-\u1a54\u1aa7-\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae-\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1ce9-\u1cec\u1cee-\u1cf1\u1cf5-\u1cf6\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59-\u1f59\u1f5b-\u1f5b\u1f5d-\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe-\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071-\u2071\u207f-\u207f\u2090-\u209c\u2102-\u2102\u2107-\u2107\u210a-\u2113\u2115-\u2115\u2119-\u211d\u2124-\u2124\u2126-\u2126\u2128-\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e-\u214e\u2183-\u2184\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2-\u2cf3\u2d00-\u2d25\u2d27-\u2d27\u2d2d-\u2d2d\u2d30-\u2d67\u2d6f-\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2e2f-\u2e2f\u3005-\u3006\u3031-\u3035\u303b-\u303c\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fcc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a-\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6e5\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790-\ua7ad\ua7b0-\ua7b1\ua7f7-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb-\ua8fb\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf-\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a-\uaa7a\uaa7e-\uaaaf\uaab1-\uaab1\uaab5-\uaab6\uaab9-\uaabd\uaac0-\uaac0\uaac2-\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab5f\uab64-\uab65\uabc0-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d-\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e-\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc\U00010000-\U0001000b\U0001000d-\U00010026\U00010028-\U0001003a\U0001003c-\U0001003d\U0001003f-\U0001004d\U00010050-\U0001005d\U00010080-\U000100fa\U00010280-\U0001029c\U000102a0-\U000102d0\U00010300-\U0001031f\U00010330-\U00010340\U00010342-\U00010349\U00010350-\U00010375\U00010380-\U0001039d\U000103a0-\U000103c3\U000103c8-\U000103cf\U00010400-\U0001049d\U00010500-\U00010527\U00010530-\U00010563\U00010600-\U00010736\U00010740-\U00010755\U00010760-\U00010767\U00010800-\U00010805\U00010808-\U00010808\U0001080a-\U00010835\U00010837-\U00010838\U0001083c-\U0001083c\U0001083f-\U00010855\U00010860-\U00010876\U00010880-\U0001089e\U00010900-\U00010915\U00010920-\U00010939\U00010980-\U000109b7\U000109be-\U000109bf\U00010a00-\U00010a00\U00010a10-\U00010a13\U00010a15-\U00010a17\U00010a19-\U00010a33\U00010a60-\U00010a7c\U00010a80-\U00010a9c\U00010ac0-\U00010ac7\U00010ac9-\U00010ae4\U00010b00-\U00010b35\U00010b40-\U00010b55\U00010b60-\U00010b72\U00010b80-\U00010b91\U00010c00-\U00010c48\U00011003-\U00011037\U00011083-\U000110af\U000110d0-\U000110e8\U00011103-\U00011126\U00011150-\U00011172\U00011176-\U00011176\U00011183-\U000111b2\U000111c1-\U000111c4\U000111da-\U000111da\U00011200-\U00011211\U00011213-\U0001122b\U000112b0-\U000112de\U00011305-\U0001130c\U0001130f-\U00011310\U00011313-\U00011328\U0001132a-\U00011330\U00011332-\U00011333\U00011335-\U00011339\U0001133d-\U0001133d\U0001135d-\U00011361\U00011480-\U000114af\U000114c4-\U000114c5\U000114c7-\U000114c7\U00011580-\U000115ae\U00011600-\U0001162f\U00011644-\U00011644\U00011680-\U000116aa\U000118a0-\U000118df\U000118ff-\U000118ff\U00011ac0-\U00011af8\U00012000-\U00012398\U00013000-\U0001342e\U00016800-\U00016a38\U00016a40-\U00016a5e\U00016ad0-\U00016aed\U00016b00-\U00016b2f\U00016b40-\U00016b43\U00016b63-\U00016b77\U00016b7d-\U00016b8f\U00016f00-\U00016f44\U00016f50-\U00016f50\U00016f93-\U00016f9f\U0001b000-\U0001b001\U0001bc00-\U0001bc6a\U0001bc70-\U0001bc7c\U0001bc80-\U0001bc88\U0001bc90-\U0001bc99\U0001d400-\U0001d454\U0001d456-\U0001d49c\U0001d49e-\U0001d49f\U0001d4a2-\U0001d4a2\U0001d4a5-\U0001d4a6\U0001d4a9-\U0001d4ac\U0001d4ae-\U0001d4b9\U0001d4bb-\U0001d4bb\U0001d4bd-\U0001d4c3\U0001d4c5-\U0001d505\U0001d507-\U0001d50a\U0001d50d-\U0001d514\U0001d516-\U0001d51c\U0001d51e-\U0001d539\U0001d53b-\U0001d53e\U0001d540-\U0001d544\U0001d546-\U0001d546\U0001d54a-\U0001d550\U0001d552-\U0001d6a5\U0001d6a8-\U0001d6c0\U0001d6c2-\U0001d6da\U0001d6dc-\U0001d6fa\U0001d6fc-\U0001d714\U0001d716-\U0001d734\U0001d736-\U0001d74e\U0001d750-\U0001d76e\U0001d770-\U0001d788\U0001d78a-\U0001d7a8\U0001d7aa-\U0001d7c2\U0001d7c4-\U0001d7cb\U0001e800-\U0001e8c4\U0001ee00-\U0001ee03\U0001ee05-\U0001ee1f\U0001ee21-\U0001ee22\U0001ee24-\U0001ee24\U0001ee27-\U0001ee27\U0001ee29-\U0001ee32\U0001ee34-\U0001ee37\U0001ee39-\U0001ee39\U0001ee3b-\U0001ee3b\U0001ee42-\U0001ee42\U0001ee47-\U0001ee47\U0001ee49-\U0001ee49\U0001ee4b-\U0001ee4b\U0001ee4d-\U0001ee4f\U0001ee51-\U0001ee52\U0001ee54-\U0001ee54\U0001ee57-\U0001ee57\U0001ee59-\U0001ee59\U0001ee5b-\U0001ee5b\U0001ee5d-\U0001ee5d\U0001ee5f-\U0001ee5f\U0001ee61-\U0001ee62\U0001ee64-\U0001ee64\U0001ee67-\U0001ee6a\U0001ee6c-\U0001ee72\U0001ee74-\U0001ee77\U0001ee79-\U0001ee7c\U0001ee7e-\U0001ee7e\U0001ee80-\U0001ee89\U0001ee8b-\U0001ee9b\U0001eea1-\U0001eea3\U0001eea5-\U0001eea9\U0001eeab-\U0001eebb\U00020000-\U0002a6d6\U0002a700-\U0002b734\U0002b740-\U0002b81d\U0002f800-\U0002fa1d]; -Ll = [\x61-\x7a\xb5-\xb5\xdf-\xf6\xf8-\u00ff\u0101-\u0101\u0103-\u0103\u0105-\u0105\u0107-\u0107\u0109-\u0109\u010b-\u010b\u010d-\u010d\u010f-\u010f\u0111-\u0111\u0113-\u0113\u0115-\u0115\u0117-\u0117\u0119-\u0119\u011b-\u011b\u011d-\u011d\u011f-\u011f\u0121-\u0121\u0123-\u0123\u0125-\u0125\u0127-\u0127\u0129-\u0129\u012b-\u012b\u012d-\u012d\u012f-\u012f\u0131-\u0131\u0133-\u0133\u0135-\u0135\u0137-\u0138\u013a-\u013a\u013c-\u013c\u013e-\u013e\u0140-\u0140\u0142-\u0142\u0144-\u0144\u0146-\u0146\u0148-\u0149\u014b-\u014b\u014d-\u014d\u014f-\u014f\u0151-\u0151\u0153-\u0153\u0155-\u0155\u0157-\u0157\u0159-\u0159\u015b-\u015b\u015d-\u015d\u015f-\u015f\u0161-\u0161\u0163-\u0163\u0165-\u0165\u0167-\u0167\u0169-\u0169\u016b-\u016b\u016d-\u016d\u016f-\u016f\u0171-\u0171\u0173-\u0173\u0175-\u0175\u0177-\u0177\u017a-\u017a\u017c-\u017c\u017e-\u0180\u0183-\u0183\u0185-\u0185\u0188-\u0188\u018c-\u018d\u0192-\u0192\u0195-\u0195\u0199-\u019b\u019e-\u019e\u01a1-\u01a1\u01a3-\u01a3\u01a5-\u01a5\u01a8-\u01a8\u01aa-\u01ab\u01ad-\u01ad\u01b0-\u01b0\u01b4-\u01b4\u01b6-\u01b6\u01b9-\u01ba\u01bd-\u01bf\u01c6-\u01c6\u01c9-\u01c9\u01cc-\u01cc\u01ce-\u01ce\u01d0-\u01d0\u01d2-\u01d2\u01d4-\u01d4\u01d6-\u01d6\u01d8-\u01d8\u01da-\u01da\u01dc-\u01dd\u01df-\u01df\u01e1-\u01e1\u01e3-\u01e3\u01e5-\u01e5\u01e7-\u01e7\u01e9-\u01e9\u01eb-\u01eb\u01ed-\u01ed\u01ef-\u01f0\u01f3-\u01f3\u01f5-\u01f5\u01f9-\u01f9\u01fb-\u01fb\u01fd-\u01fd\u01ff-\u01ff\u0201-\u0201\u0203-\u0203\u0205-\u0205\u0207-\u0207\u0209-\u0209\u020b-\u020b\u020d-\u020d\u020f-\u020f\u0211-\u0211\u0213-\u0213\u0215-\u0215\u0217-\u0217\u0219-\u0219\u021b-\u021b\u021d-\u021d\u021f-\u021f\u0221-\u0221\u0223-\u0223\u0225-\u0225\u0227-\u0227\u0229-\u0229\u022b-\u022b\u022d-\u022d\u022f-\u022f\u0231-\u0231\u0233-\u0239\u023c-\u023c\u023f-\u0240\u0242-\u0242\u0247-\u0247\u0249-\u0249\u024b-\u024b\u024d-\u024d\u024f-\u0293\u0295-\u02af\u0371-\u0371\u0373-\u0373\u0377-\u0377\u037b-\u037d\u0390-\u0390\u03ac-\u03ce\u03d0-\u03d1\u03d5-\u03d7\u03d9-\u03d9\u03db-\u03db\u03dd-\u03dd\u03df-\u03df\u03e1-\u03e1\u03e3-\u03e3\u03e5-\u03e5\u03e7-\u03e7\u03e9-\u03e9\u03eb-\u03eb\u03ed-\u03ed\u03ef-\u03f3\u03f5-\u03f5\u03f8-\u03f8\u03fb-\u03fc\u0430-\u045f\u0461-\u0461\u0463-\u0463\u0465-\u0465\u0467-\u0467\u0469-\u0469\u046b-\u046b\u046d-\u046d\u046f-\u046f\u0471-\u0471\u0473-\u0473\u0475-\u0475\u0477-\u0477\u0479-\u0479\u047b-\u047b\u047d-\u047d\u047f-\u047f\u0481-\u0481\u048b-\u048b\u048d-\u048d\u048f-\u048f\u0491-\u0491\u0493-\u0493\u0495-\u0495\u0497-\u0497\u0499-\u0499\u049b-\u049b\u049d-\u049d\u049f-\u049f\u04a1-\u04a1\u04a3-\u04a3\u04a5-\u04a5\u04a7-\u04a7\u04a9-\u04a9\u04ab-\u04ab\u04ad-\u04ad\u04af-\u04af\u04b1-\u04b1\u04b3-\u04b3\u04b5-\u04b5\u04b7-\u04b7\u04b9-\u04b9\u04bb-\u04bb\u04bd-\u04bd\u04bf-\u04bf\u04c2-\u04c2\u04c4-\u04c4\u04c6-\u04c6\u04c8-\u04c8\u04ca-\u04ca\u04cc-\u04cc\u04ce-\u04cf\u04d1-\u04d1\u04d3-\u04d3\u04d5-\u04d5\u04d7-\u04d7\u04d9-\u04d9\u04db-\u04db\u04dd-\u04dd\u04df-\u04df\u04e1-\u04e1\u04e3-\u04e3\u04e5-\u04e5\u04e7-\u04e7\u04e9-\u04e9\u04eb-\u04eb\u04ed-\u04ed\u04ef-\u04ef\u04f1-\u04f1\u04f3-\u04f3\u04f5-\u04f5\u04f7-\u04f7\u04f9-\u04f9\u04fb-\u04fb\u04fd-\u04fd\u04ff-\u04ff\u0501-\u0501\u0503-\u0503\u0505-\u0505\u0507-\u0507\u0509-\u0509\u050b-\u050b\u050d-\u050d\u050f-\u050f\u0511-\u0511\u0513-\u0513\u0515-\u0515\u0517-\u0517\u0519-\u0519\u051b-\u051b\u051d-\u051d\u051f-\u051f\u0521-\u0521\u0523-\u0523\u0525-\u0525\u0527-\u0527\u0529-\u0529\u052b-\u052b\u052d-\u052d\u052f-\u052f\u0561-\u0587\u1d00-\u1d2b\u1d6b-\u1d77\u1d79-\u1d9a\u1e01-\u1e01\u1e03-\u1e03\u1e05-\u1e05\u1e07-\u1e07\u1e09-\u1e09\u1e0b-\u1e0b\u1e0d-\u1e0d\u1e0f-\u1e0f\u1e11-\u1e11\u1e13-\u1e13\u1e15-\u1e15\u1e17-\u1e17\u1e19-\u1e19\u1e1b-\u1e1b\u1e1d-\u1e1d\u1e1f-\u1e1f\u1e21-\u1e21\u1e23-\u1e23\u1e25-\u1e25\u1e27-\u1e27\u1e29-\u1e29\u1e2b-\u1e2b\u1e2d-\u1e2d\u1e2f-\u1e2f\u1e31-\u1e31\u1e33-\u1e33\u1e35-\u1e35\u1e37-\u1e37\u1e39-\u1e39\u1e3b-\u1e3b\u1e3d-\u1e3d\u1e3f-\u1e3f\u1e41-\u1e41\u1e43-\u1e43\u1e45-\u1e45\u1e47-\u1e47\u1e49-\u1e49\u1e4b-\u1e4b\u1e4d-\u1e4d\u1e4f-\u1e4f\u1e51-\u1e51\u1e53-\u1e53\u1e55-\u1e55\u1e57-\u1e57\u1e59-\u1e59\u1e5b-\u1e5b\u1e5d-\u1e5d\u1e5f-\u1e5f\u1e61-\u1e61\u1e63-\u1e63\u1e65-\u1e65\u1e67-\u1e67\u1e69-\u1e69\u1e6b-\u1e6b\u1e6d-\u1e6d\u1e6f-\u1e6f\u1e71-\u1e71\u1e73-\u1e73\u1e75-\u1e75\u1e77-\u1e77\u1e79-\u1e79\u1e7b-\u1e7b\u1e7d-\u1e7d\u1e7f-\u1e7f\u1e81-\u1e81\u1e83-\u1e83\u1e85-\u1e85\u1e87-\u1e87\u1e89-\u1e89\u1e8b-\u1e8b\u1e8d-\u1e8d\u1e8f-\u1e8f\u1e91-\u1e91\u1e93-\u1e93\u1e95-\u1e9d\u1e9f-\u1e9f\u1ea1-\u1ea1\u1ea3-\u1ea3\u1ea5-\u1ea5\u1ea7-\u1ea7\u1ea9-\u1ea9\u1eab-\u1eab\u1ead-\u1ead\u1eaf-\u1eaf\u1eb1-\u1eb1\u1eb3-\u1eb3\u1eb5-\u1eb5\u1eb7-\u1eb7\u1eb9-\u1eb9\u1ebb-\u1ebb\u1ebd-\u1ebd\u1ebf-\u1ebf\u1ec1-\u1ec1\u1ec3-\u1ec3\u1ec5-\u1ec5\u1ec7-\u1ec7\u1ec9-\u1ec9\u1ecb-\u1ecb\u1ecd-\u1ecd\u1ecf-\u1ecf\u1ed1-\u1ed1\u1ed3-\u1ed3\u1ed5-\u1ed5\u1ed7-\u1ed7\u1ed9-\u1ed9\u1edb-\u1edb\u1edd-\u1edd\u1edf-\u1edf\u1ee1-\u1ee1\u1ee3-\u1ee3\u1ee5-\u1ee5\u1ee7-\u1ee7\u1ee9-\u1ee9\u1eeb-\u1eeb\u1eed-\u1eed\u1eef-\u1eef\u1ef1-\u1ef1\u1ef3-\u1ef3\u1ef5-\u1ef5\u1ef7-\u1ef7\u1ef9-\u1ef9\u1efb-\u1efb\u1efd-\u1efd\u1eff-\u1f07\u1f10-\u1f15\u1f20-\u1f27\u1f30-\u1f37\u1f40-\u1f45\u1f50-\u1f57\u1f60-\u1f67\u1f70-\u1f7d\u1f80-\u1f87\u1f90-\u1f97\u1fa0-\u1fa7\u1fb0-\u1fb4\u1fb6-\u1fb7\u1fbe-\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fc7\u1fd0-\u1fd3\u1fd6-\u1fd7\u1fe0-\u1fe7\u1ff2-\u1ff4\u1ff6-\u1ff7\u210a-\u210a\u210e-\u210f\u2113-\u2113\u212f-\u212f\u2134-\u2134\u2139-\u2139\u213c-\u213d\u2146-\u2149\u214e-\u214e\u2184-\u2184\u2c30-\u2c5e\u2c61-\u2c61\u2c65-\u2c66\u2c68-\u2c68\u2c6a-\u2c6a\u2c6c-\u2c6c\u2c71-\u2c71\u2c73-\u2c74\u2c76-\u2c7b\u2c81-\u2c81\u2c83-\u2c83\u2c85-\u2c85\u2c87-\u2c87\u2c89-\u2c89\u2c8b-\u2c8b\u2c8d-\u2c8d\u2c8f-\u2c8f\u2c91-\u2c91\u2c93-\u2c93\u2c95-\u2c95\u2c97-\u2c97\u2c99-\u2c99\u2c9b-\u2c9b\u2c9d-\u2c9d\u2c9f-\u2c9f\u2ca1-\u2ca1\u2ca3-\u2ca3\u2ca5-\u2ca5\u2ca7-\u2ca7\u2ca9-\u2ca9\u2cab-\u2cab\u2cad-\u2cad\u2caf-\u2caf\u2cb1-\u2cb1\u2cb3-\u2cb3\u2cb5-\u2cb5\u2cb7-\u2cb7\u2cb9-\u2cb9\u2cbb-\u2cbb\u2cbd-\u2cbd\u2cbf-\u2cbf\u2cc1-\u2cc1\u2cc3-\u2cc3\u2cc5-\u2cc5\u2cc7-\u2cc7\u2cc9-\u2cc9\u2ccb-\u2ccb\u2ccd-\u2ccd\u2ccf-\u2ccf\u2cd1-\u2cd1\u2cd3-\u2cd3\u2cd5-\u2cd5\u2cd7-\u2cd7\u2cd9-\u2cd9\u2cdb-\u2cdb\u2cdd-\u2cdd\u2cdf-\u2cdf\u2ce1-\u2ce1\u2ce3-\u2ce4\u2cec-\u2cec\u2cee-\u2cee\u2cf3-\u2cf3\u2d00-\u2d25\u2d27-\u2d27\u2d2d-\u2d2d\ua641-\ua641\ua643-\ua643\ua645-\ua645\ua647-\ua647\ua649-\ua649\ua64b-\ua64b\ua64d-\ua64d\ua64f-\ua64f\ua651-\ua651\ua653-\ua653\ua655-\ua655\ua657-\ua657\ua659-\ua659\ua65b-\ua65b\ua65d-\ua65d\ua65f-\ua65f\ua661-\ua661\ua663-\ua663\ua665-\ua665\ua667-\ua667\ua669-\ua669\ua66b-\ua66b\ua66d-\ua66d\ua681-\ua681\ua683-\ua683\ua685-\ua685\ua687-\ua687\ua689-\ua689\ua68b-\ua68b\ua68d-\ua68d\ua68f-\ua68f\ua691-\ua691\ua693-\ua693\ua695-\ua695\ua697-\ua697\ua699-\ua699\ua69b-\ua69b\ua723-\ua723\ua725-\ua725\ua727-\ua727\ua729-\ua729\ua72b-\ua72b\ua72d-\ua72d\ua72f-\ua731\ua733-\ua733\ua735-\ua735\ua737-\ua737\ua739-\ua739\ua73b-\ua73b\ua73d-\ua73d\ua73f-\ua73f\ua741-\ua741\ua743-\ua743\ua745-\ua745\ua747-\ua747\ua749-\ua749\ua74b-\ua74b\ua74d-\ua74d\ua74f-\ua74f\ua751-\ua751\ua753-\ua753\ua755-\ua755\ua757-\ua757\ua759-\ua759\ua75b-\ua75b\ua75d-\ua75d\ua75f-\ua75f\ua761-\ua761\ua763-\ua763\ua765-\ua765\ua767-\ua767\ua769-\ua769\ua76b-\ua76b\ua76d-\ua76d\ua76f-\ua76f\ua771-\ua778\ua77a-\ua77a\ua77c-\ua77c\ua77f-\ua77f\ua781-\ua781\ua783-\ua783\ua785-\ua785\ua787-\ua787\ua78c-\ua78c\ua78e-\ua78e\ua791-\ua791\ua793-\ua795\ua797-\ua797\ua799-\ua799\ua79b-\ua79b\ua79d-\ua79d\ua79f-\ua79f\ua7a1-\ua7a1\ua7a3-\ua7a3\ua7a5-\ua7a5\ua7a7-\ua7a7\ua7a9-\ua7a9\ua7fa-\ua7fa\uab30-\uab5a\uab64-\uab65\ufb00-\ufb06\ufb13-\ufb17\uff41-\uff5a\U00010428-\U0001044f\U000118c0-\U000118df\U0001d41a-\U0001d433\U0001d44e-\U0001d454\U0001d456-\U0001d467\U0001d482-\U0001d49b\U0001d4b6-\U0001d4b9\U0001d4bb-\U0001d4bb\U0001d4bd-\U0001d4c3\U0001d4c5-\U0001d4cf\U0001d4ea-\U0001d503\U0001d51e-\U0001d537\U0001d552-\U0001d56b\U0001d586-\U0001d59f\U0001d5ba-\U0001d5d3\U0001d5ee-\U0001d607\U0001d622-\U0001d63b\U0001d656-\U0001d66f\U0001d68a-\U0001d6a5\U0001d6c2-\U0001d6da\U0001d6dc-\U0001d6e1\U0001d6fc-\U0001d714\U0001d716-\U0001d71b\U0001d736-\U0001d74e\U0001d750-\U0001d755\U0001d770-\U0001d788\U0001d78a-\U0001d78f\U0001d7aa-\U0001d7c2\U0001d7c4-\U0001d7c9\U0001d7cb-\U0001d7cb]; -Lu = [\x41-\x5a\xc0-\xd6\xd8-\xde\u0100-\u0100\u0102-\u0102\u0104-\u0104\u0106-\u0106\u0108-\u0108\u010a-\u010a\u010c-\u010c\u010e-\u010e\u0110-\u0110\u0112-\u0112\u0114-\u0114\u0116-\u0116\u0118-\u0118\u011a-\u011a\u011c-\u011c\u011e-\u011e\u0120-\u0120\u0122-\u0122\u0124-\u0124\u0126-\u0126\u0128-\u0128\u012a-\u012a\u012c-\u012c\u012e-\u012e\u0130-\u0130\u0132-\u0132\u0134-\u0134\u0136-\u0136\u0139-\u0139\u013b-\u013b\u013d-\u013d\u013f-\u013f\u0141-\u0141\u0143-\u0143\u0145-\u0145\u0147-\u0147\u014a-\u014a\u014c-\u014c\u014e-\u014e\u0150-\u0150\u0152-\u0152\u0154-\u0154\u0156-\u0156\u0158-\u0158\u015a-\u015a\u015c-\u015c\u015e-\u015e\u0160-\u0160\u0162-\u0162\u0164-\u0164\u0166-\u0166\u0168-\u0168\u016a-\u016a\u016c-\u016c\u016e-\u016e\u0170-\u0170\u0172-\u0172\u0174-\u0174\u0176-\u0176\u0178-\u0179\u017b-\u017b\u017d-\u017d\u0181-\u0182\u0184-\u0184\u0186-\u0187\u0189-\u018b\u018e-\u0191\u0193-\u0194\u0196-\u0198\u019c-\u019d\u019f-\u01a0\u01a2-\u01a2\u01a4-\u01a4\u01a6-\u01a7\u01a9-\u01a9\u01ac-\u01ac\u01ae-\u01af\u01b1-\u01b3\u01b5-\u01b5\u01b7-\u01b8\u01bc-\u01bc\u01c4-\u01c4\u01c7-\u01c7\u01ca-\u01ca\u01cd-\u01cd\u01cf-\u01cf\u01d1-\u01d1\u01d3-\u01d3\u01d5-\u01d5\u01d7-\u01d7\u01d9-\u01d9\u01db-\u01db\u01de-\u01de\u01e0-\u01e0\u01e2-\u01e2\u01e4-\u01e4\u01e6-\u01e6\u01e8-\u01e8\u01ea-\u01ea\u01ec-\u01ec\u01ee-\u01ee\u01f1-\u01f1\u01f4-\u01f4\u01f6-\u01f8\u01fa-\u01fa\u01fc-\u01fc\u01fe-\u01fe\u0200-\u0200\u0202-\u0202\u0204-\u0204\u0206-\u0206\u0208-\u0208\u020a-\u020a\u020c-\u020c\u020e-\u020e\u0210-\u0210\u0212-\u0212\u0214-\u0214\u0216-\u0216\u0218-\u0218\u021a-\u021a\u021c-\u021c\u021e-\u021e\u0220-\u0220\u0222-\u0222\u0224-\u0224\u0226-\u0226\u0228-\u0228\u022a-\u022a\u022c-\u022c\u022e-\u022e\u0230-\u0230\u0232-\u0232\u023a-\u023b\u023d-\u023e\u0241-\u0241\u0243-\u0246\u0248-\u0248\u024a-\u024a\u024c-\u024c\u024e-\u024e\u0370-\u0370\u0372-\u0372\u0376-\u0376\u037f-\u037f\u0386-\u0386\u0388-\u038a\u038c-\u038c\u038e-\u038f\u0391-\u03a1\u03a3-\u03ab\u03cf-\u03cf\u03d2-\u03d4\u03d8-\u03d8\u03da-\u03da\u03dc-\u03dc\u03de-\u03de\u03e0-\u03e0\u03e2-\u03e2\u03e4-\u03e4\u03e6-\u03e6\u03e8-\u03e8\u03ea-\u03ea\u03ec-\u03ec\u03ee-\u03ee\u03f4-\u03f4\u03f7-\u03f7\u03f9-\u03fa\u03fd-\u042f\u0460-\u0460\u0462-\u0462\u0464-\u0464\u0466-\u0466\u0468-\u0468\u046a-\u046a\u046c-\u046c\u046e-\u046e\u0470-\u0470\u0472-\u0472\u0474-\u0474\u0476-\u0476\u0478-\u0478\u047a-\u047a\u047c-\u047c\u047e-\u047e\u0480-\u0480\u048a-\u048a\u048c-\u048c\u048e-\u048e\u0490-\u0490\u0492-\u0492\u0494-\u0494\u0496-\u0496\u0498-\u0498\u049a-\u049a\u049c-\u049c\u049e-\u049e\u04a0-\u04a0\u04a2-\u04a2\u04a4-\u04a4\u04a6-\u04a6\u04a8-\u04a8\u04aa-\u04aa\u04ac-\u04ac\u04ae-\u04ae\u04b0-\u04b0\u04b2-\u04b2\u04b4-\u04b4\u04b6-\u04b6\u04b8-\u04b8\u04ba-\u04ba\u04bc-\u04bc\u04be-\u04be\u04c0-\u04c1\u04c3-\u04c3\u04c5-\u04c5\u04c7-\u04c7\u04c9-\u04c9\u04cb-\u04cb\u04cd-\u04cd\u04d0-\u04d0\u04d2-\u04d2\u04d4-\u04d4\u04d6-\u04d6\u04d8-\u04d8\u04da-\u04da\u04dc-\u04dc\u04de-\u04de\u04e0-\u04e0\u04e2-\u04e2\u04e4-\u04e4\u04e6-\u04e6\u04e8-\u04e8\u04ea-\u04ea\u04ec-\u04ec\u04ee-\u04ee\u04f0-\u04f0\u04f2-\u04f2\u04f4-\u04f4\u04f6-\u04f6\u04f8-\u04f8\u04fa-\u04fa\u04fc-\u04fc\u04fe-\u04fe\u0500-\u0500\u0502-\u0502\u0504-\u0504\u0506-\u0506\u0508-\u0508\u050a-\u050a\u050c-\u050c\u050e-\u050e\u0510-\u0510\u0512-\u0512\u0514-\u0514\u0516-\u0516\u0518-\u0518\u051a-\u051a\u051c-\u051c\u051e-\u051e\u0520-\u0520\u0522-\u0522\u0524-\u0524\u0526-\u0526\u0528-\u0528\u052a-\u052a\u052c-\u052c\u052e-\u052e\u0531-\u0556\u10a0-\u10c5\u10c7-\u10c7\u10cd-\u10cd\u1e00-\u1e00\u1e02-\u1e02\u1e04-\u1e04\u1e06-\u1e06\u1e08-\u1e08\u1e0a-\u1e0a\u1e0c-\u1e0c\u1e0e-\u1e0e\u1e10-\u1e10\u1e12-\u1e12\u1e14-\u1e14\u1e16-\u1e16\u1e18-\u1e18\u1e1a-\u1e1a\u1e1c-\u1e1c\u1e1e-\u1e1e\u1e20-\u1e20\u1e22-\u1e22\u1e24-\u1e24\u1e26-\u1e26\u1e28-\u1e28\u1e2a-\u1e2a\u1e2c-\u1e2c\u1e2e-\u1e2e\u1e30-\u1e30\u1e32-\u1e32\u1e34-\u1e34\u1e36-\u1e36\u1e38-\u1e38\u1e3a-\u1e3a\u1e3c-\u1e3c\u1e3e-\u1e3e\u1e40-\u1e40\u1e42-\u1e42\u1e44-\u1e44\u1e46-\u1e46\u1e48-\u1e48\u1e4a-\u1e4a\u1e4c-\u1e4c\u1e4e-\u1e4e\u1e50-\u1e50\u1e52-\u1e52\u1e54-\u1e54\u1e56-\u1e56\u1e58-\u1e58\u1e5a-\u1e5a\u1e5c-\u1e5c\u1e5e-\u1e5e\u1e60-\u1e60\u1e62-\u1e62\u1e64-\u1e64\u1e66-\u1e66\u1e68-\u1e68\u1e6a-\u1e6a\u1e6c-\u1e6c\u1e6e-\u1e6e\u1e70-\u1e70\u1e72-\u1e72\u1e74-\u1e74\u1e76-\u1e76\u1e78-\u1e78\u1e7a-\u1e7a\u1e7c-\u1e7c\u1e7e-\u1e7e\u1e80-\u1e80\u1e82-\u1e82\u1e84-\u1e84\u1e86-\u1e86\u1e88-\u1e88\u1e8a-\u1e8a\u1e8c-\u1e8c\u1e8e-\u1e8e\u1e90-\u1e90\u1e92-\u1e92\u1e94-\u1e94\u1e9e-\u1e9e\u1ea0-\u1ea0\u1ea2-\u1ea2\u1ea4-\u1ea4\u1ea6-\u1ea6\u1ea8-\u1ea8\u1eaa-\u1eaa\u1eac-\u1eac\u1eae-\u1eae\u1eb0-\u1eb0\u1eb2-\u1eb2\u1eb4-\u1eb4\u1eb6-\u1eb6\u1eb8-\u1eb8\u1eba-\u1eba\u1ebc-\u1ebc\u1ebe-\u1ebe\u1ec0-\u1ec0\u1ec2-\u1ec2\u1ec4-\u1ec4\u1ec6-\u1ec6\u1ec8-\u1ec8\u1eca-\u1eca\u1ecc-\u1ecc\u1ece-\u1ece\u1ed0-\u1ed0\u1ed2-\u1ed2\u1ed4-\u1ed4\u1ed6-\u1ed6\u1ed8-\u1ed8\u1eda-\u1eda\u1edc-\u1edc\u1ede-\u1ede\u1ee0-\u1ee0\u1ee2-\u1ee2\u1ee4-\u1ee4\u1ee6-\u1ee6\u1ee8-\u1ee8\u1eea-\u1eea\u1eec-\u1eec\u1eee-\u1eee\u1ef0-\u1ef0\u1ef2-\u1ef2\u1ef4-\u1ef4\u1ef6-\u1ef6\u1ef8-\u1ef8\u1efa-\u1efa\u1efc-\u1efc\u1efe-\u1efe\u1f08-\u1f0f\u1f18-\u1f1d\u1f28-\u1f2f\u1f38-\u1f3f\u1f48-\u1f4d\u1f59-\u1f59\u1f5b-\u1f5b\u1f5d-\u1f5d\u1f5f-\u1f5f\u1f68-\u1f6f\u1fb8-\u1fbb\u1fc8-\u1fcb\u1fd8-\u1fdb\u1fe8-\u1fec\u1ff8-\u1ffb\u2102-\u2102\u2107-\u2107\u210b-\u210d\u2110-\u2112\u2115-\u2115\u2119-\u211d\u2124-\u2124\u2126-\u2126\u2128-\u2128\u212a-\u212d\u2130-\u2133\u213e-\u213f\u2145-\u2145\u2183-\u2183\u2c00-\u2c2e\u2c60-\u2c60\u2c62-\u2c64\u2c67-\u2c67\u2c69-\u2c69\u2c6b-\u2c6b\u2c6d-\u2c70\u2c72-\u2c72\u2c75-\u2c75\u2c7e-\u2c80\u2c82-\u2c82\u2c84-\u2c84\u2c86-\u2c86\u2c88-\u2c88\u2c8a-\u2c8a\u2c8c-\u2c8c\u2c8e-\u2c8e\u2c90-\u2c90\u2c92-\u2c92\u2c94-\u2c94\u2c96-\u2c96\u2c98-\u2c98\u2c9a-\u2c9a\u2c9c-\u2c9c\u2c9e-\u2c9e\u2ca0-\u2ca0\u2ca2-\u2ca2\u2ca4-\u2ca4\u2ca6-\u2ca6\u2ca8-\u2ca8\u2caa-\u2caa\u2cac-\u2cac\u2cae-\u2cae\u2cb0-\u2cb0\u2cb2-\u2cb2\u2cb4-\u2cb4\u2cb6-\u2cb6\u2cb8-\u2cb8\u2cba-\u2cba\u2cbc-\u2cbc\u2cbe-\u2cbe\u2cc0-\u2cc0\u2cc2-\u2cc2\u2cc4-\u2cc4\u2cc6-\u2cc6\u2cc8-\u2cc8\u2cca-\u2cca\u2ccc-\u2ccc\u2cce-\u2cce\u2cd0-\u2cd0\u2cd2-\u2cd2\u2cd4-\u2cd4\u2cd6-\u2cd6\u2cd8-\u2cd8\u2cda-\u2cda\u2cdc-\u2cdc\u2cde-\u2cde\u2ce0-\u2ce0\u2ce2-\u2ce2\u2ceb-\u2ceb\u2ced-\u2ced\u2cf2-\u2cf2\ua640-\ua640\ua642-\ua642\ua644-\ua644\ua646-\ua646\ua648-\ua648\ua64a-\ua64a\ua64c-\ua64c\ua64e-\ua64e\ua650-\ua650\ua652-\ua652\ua654-\ua654\ua656-\ua656\ua658-\ua658\ua65a-\ua65a\ua65c-\ua65c\ua65e-\ua65e\ua660-\ua660\ua662-\ua662\ua664-\ua664\ua666-\ua666\ua668-\ua668\ua66a-\ua66a\ua66c-\ua66c\ua680-\ua680\ua682-\ua682\ua684-\ua684\ua686-\ua686\ua688-\ua688\ua68a-\ua68a\ua68c-\ua68c\ua68e-\ua68e\ua690-\ua690\ua692-\ua692\ua694-\ua694\ua696-\ua696\ua698-\ua698\ua69a-\ua69a\ua722-\ua722\ua724-\ua724\ua726-\ua726\ua728-\ua728\ua72a-\ua72a\ua72c-\ua72c\ua72e-\ua72e\ua732-\ua732\ua734-\ua734\ua736-\ua736\ua738-\ua738\ua73a-\ua73a\ua73c-\ua73c\ua73e-\ua73e\ua740-\ua740\ua742-\ua742\ua744-\ua744\ua746-\ua746\ua748-\ua748\ua74a-\ua74a\ua74c-\ua74c\ua74e-\ua74e\ua750-\ua750\ua752-\ua752\ua754-\ua754\ua756-\ua756\ua758-\ua758\ua75a-\ua75a\ua75c-\ua75c\ua75e-\ua75e\ua760-\ua760\ua762-\ua762\ua764-\ua764\ua766-\ua766\ua768-\ua768\ua76a-\ua76a\ua76c-\ua76c\ua76e-\ua76e\ua779-\ua779\ua77b-\ua77b\ua77d-\ua77e\ua780-\ua780\ua782-\ua782\ua784-\ua784\ua786-\ua786\ua78b-\ua78b\ua78d-\ua78d\ua790-\ua790\ua792-\ua792\ua796-\ua796\ua798-\ua798\ua79a-\ua79a\ua79c-\ua79c\ua79e-\ua79e\ua7a0-\ua7a0\ua7a2-\ua7a2\ua7a4-\ua7a4\ua7a6-\ua7a6\ua7a8-\ua7a8\ua7aa-\ua7ad\ua7b0-\ua7b1\uff21-\uff3a\U00010400-\U00010427\U000118a0-\U000118bf\U0001d400-\U0001d419\U0001d434-\U0001d44d\U0001d468-\U0001d481\U0001d49c-\U0001d49c\U0001d49e-\U0001d49f\U0001d4a2-\U0001d4a2\U0001d4a5-\U0001d4a6\U0001d4a9-\U0001d4ac\U0001d4ae-\U0001d4b5\U0001d4d0-\U0001d4e9\U0001d504-\U0001d505\U0001d507-\U0001d50a\U0001d50d-\U0001d514\U0001d516-\U0001d51c\U0001d538-\U0001d539\U0001d53b-\U0001d53e\U0001d540-\U0001d544\U0001d546-\U0001d546\U0001d54a-\U0001d550\U0001d56c-\U0001d585\U0001d5a0-\U0001d5b9\U0001d5d4-\U0001d5ed\U0001d608-\U0001d621\U0001d63c-\U0001d655\U0001d670-\U0001d689\U0001d6a8-\U0001d6c0\U0001d6e2-\U0001d6fa\U0001d71c-\U0001d734\U0001d756-\U0001d76e\U0001d790-\U0001d7a8\U0001d7ca-\U0001d7ca]; -Lt = [\u01c5-\u01c5\u01c8-\u01c8\u01cb-\u01cb\u01f2-\u01f2\u1f88-\u1f8f\u1f98-\u1f9f\u1fa8-\u1faf\u1fbc-\u1fbc\u1fcc-\u1fcc\u1ffc-\u1ffc]; -L_ = [\x41-\x5a\x61-\x7a\xb5-\xb5\xc0-\xd6\xd8-\xf6\xf8-\u01ba\u01bc-\u01bf\u01c4-\u0293\u0295-\u02af\u0370-\u0373\u0376-\u0377\u037b-\u037d\u037f-\u037f\u0386-\u0386\u0388-\u038a\u038c-\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0561-\u0587\u10a0-\u10c5\u10c7-\u10c7\u10cd-\u10cd\u1d00-\u1d2b\u1d6b-\u1d77\u1d79-\u1d9a\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59-\u1f59\u1f5b-\u1f5b\u1f5d-\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe-\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2102-\u2102\u2107-\u2107\u210a-\u2113\u2115-\u2115\u2119-\u211d\u2124-\u2124\u2126-\u2126\u2128-\u2128\u212a-\u212d\u212f-\u2134\u2139-\u2139\u213c-\u213f\u2145-\u2149\u214e-\u214e\u2183-\u2184\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2c7b\u2c7e-\u2ce4\u2ceb-\u2cee\u2cf2-\u2cf3\u2d00-\u2d25\u2d27-\u2d27\u2d2d-\u2d2d\ua640-\ua66d\ua680-\ua69b\ua722-\ua76f\ua771-\ua787\ua78b-\ua78e\ua790-\ua7ad\ua7b0-\ua7b1\ua7fa-\ua7fa\uab30-\uab5a\uab64-\uab65\ufb00-\ufb06\ufb13-\ufb17\uff21-\uff3a\uff41-\uff5a\U00010400-\U0001044f\U000118a0-\U000118df\U0001d400-\U0001d454\U0001d456-\U0001d49c\U0001d49e-\U0001d49f\U0001d4a2-\U0001d4a2\U0001d4a5-\U0001d4a6\U0001d4a9-\U0001d4ac\U0001d4ae-\U0001d4b9\U0001d4bb-\U0001d4bb\U0001d4bd-\U0001d4c3\U0001d4c5-\U0001d505\U0001d507-\U0001d50a\U0001d50d-\U0001d514\U0001d516-\U0001d51c\U0001d51e-\U0001d539\U0001d53b-\U0001d53e\U0001d540-\U0001d544\U0001d546-\U0001d546\U0001d54a-\U0001d550\U0001d552-\U0001d6a5\U0001d6a8-\U0001d6c0\U0001d6c2-\U0001d6da\U0001d6dc-\U0001d6fa\U0001d6fc-\U0001d714\U0001d716-\U0001d734\U0001d736-\U0001d74e\U0001d750-\U0001d76e\U0001d770-\U0001d788\U0001d78a-\U0001d7a8\U0001d7aa-\U0001d7c2\U0001d7c4-\U0001d7cb]; -Lm = [\u02b0-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec-\u02ec\u02ee-\u02ee\u0374-\u0374\u037a-\u037a\u0559-\u0559\u0640-\u0640\u06e5-\u06e6\u07f4-\u07f5\u07fa-\u07fa\u081a-\u081a\u0824-\u0824\u0828-\u0828\u0971-\u0971\u0e46-\u0e46\u0ec6-\u0ec6\u10fc-\u10fc\u17d7-\u17d7\u1843-\u1843\u1aa7-\u1aa7\u1c78-\u1c7d\u1d2c-\u1d6a\u1d78-\u1d78\u1d9b-\u1dbf\u2071-\u2071\u207f-\u207f\u2090-\u209c\u2c7c-\u2c7d\u2d6f-\u2d6f\u2e2f-\u2e2f\u3005-\u3005\u3031-\u3035\u303b-\u303b\u309d-\u309e\u30fc-\u30fe\ua015-\ua015\ua4f8-\ua4fd\ua60c-\ua60c\ua67f-\ua67f\ua69c-\ua69d\ua717-\ua71f\ua770-\ua770\ua788-\ua788\ua7f8-\ua7f9\ua9cf-\ua9cf\ua9e6-\ua9e6\uaa70-\uaa70\uaadd-\uaadd\uaaf3-\uaaf4\uab5c-\uab5f\uff70-\uff70\uff9e-\uff9f\U00016b40-\U00016b43\U00016f93-\U00016f9f]; -Lo = [\xaa-\xaa\xba-\xba\u01bb-\u01bb\u01c0-\u01c3\u0294-\u0294\u05d0-\u05ea\u05f0-\u05f2\u0620-\u063f\u0641-\u064a\u066e-\u066f\u0671-\u06d3\u06d5-\u06d5\u06ee-\u06ef\u06fa-\u06fc\u06ff-\u06ff\u0710-\u0710\u0712-\u072f\u074d-\u07a5\u07b1-\u07b1\u07ca-\u07ea\u0800-\u0815\u0840-\u0858\u08a0-\u08b2\u0904-\u0939\u093d-\u093d\u0950-\u0950\u0958-\u0961\u0972-\u0980\u0985-\u098c\u098f-\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2-\u09b2\u09b6-\u09b9\u09bd-\u09bd\u09ce-\u09ce\u09dc-\u09dd\u09df-\u09e1\u09f0-\u09f1\u0a05-\u0a0a\u0a0f-\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32-\u0a33\u0a35-\u0a36\u0a38-\u0a39\u0a59-\u0a5c\u0a5e-\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2-\u0ab3\u0ab5-\u0ab9\u0abd-\u0abd\u0ad0-\u0ad0\u0ae0-\u0ae1\u0b05-\u0b0c\u0b0f-\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32-\u0b33\u0b35-\u0b39\u0b3d-\u0b3d\u0b5c-\u0b5d\u0b5f-\u0b61\u0b71-\u0b71\u0b83-\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99-\u0b9a\u0b9c-\u0b9c\u0b9e-\u0b9f\u0ba3-\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0-\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d-\u0c3d\u0c58-\u0c59\u0c60-\u0c61\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd-\u0cbd\u0cde-\u0cde\u0ce0-\u0ce1\u0cf1-\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d-\u0d3d\u0d4e-\u0d4e\u0d60-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd-\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32-\u0e33\u0e40-\u0e45\u0e81-\u0e82\u0e84-\u0e84\u0e87-\u0e88\u0e8a-\u0e8a\u0e8d-\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5-\u0ea5\u0ea7-\u0ea7\u0eaa-\u0eab\u0ead-\u0eb0\u0eb2-\u0eb3\u0ebd-\u0ebd\u0ec0-\u0ec4\u0edc-\u0edf\u0f00-\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f-\u103f\u1050-\u1055\u105a-\u105d\u1061-\u1061\u1065-\u1066\u106e-\u1070\u1075-\u1081\u108e-\u108e\u10d0-\u10fa\u10fd-\u1248\u124a-\u124d\u1250-\u1256\u1258-\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0-\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16f1-\u16f8\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17dc-\u17dc\u1820-\u1842\u1844-\u1877\u1880-\u18a8\u18aa-\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19c1-\u19c7\u1a00-\u1a16\u1a20-\u1a54\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae-\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c77\u1ce9-\u1cec\u1cee-\u1cf1\u1cf5-\u1cf6\u2135-\u2138\u2d30-\u2d67\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3006-\u3006\u303c-\u303c\u3041-\u3096\u309f-\u309f\u30a1-\u30fa\u30ff-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fcc\ua000-\ua014\ua016-\ua48c\ua4d0-\ua4f7\ua500-\ua60b\ua610-\ua61f\ua62a-\ua62b\ua66e-\ua66e\ua6a0-\ua6e5\ua7f7-\ua7f7\ua7fb-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb-\ua8fb\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9e0-\ua9e4\ua9e7-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa6f\uaa71-\uaa76\uaa7a-\uaa7a\uaa7e-\uaaaf\uaab1-\uaab1\uaab5-\uaab6\uaab9-\uaabd\uaac0-\uaac0\uaac2-\uaac2\uaadb-\uaadc\uaae0-\uaaea\uaaf2-\uaaf2\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb1d-\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e-\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff66-\uff6f\uff71-\uff9d\uffa0-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc\U00010000-\U0001000b\U0001000d-\U00010026\U00010028-\U0001003a\U0001003c-\U0001003d\U0001003f-\U0001004d\U00010050-\U0001005d\U00010080-\U000100fa\U00010280-\U0001029c\U000102a0-\U000102d0\U00010300-\U0001031f\U00010330-\U00010340\U00010342-\U00010349\U00010350-\U00010375\U00010380-\U0001039d\U000103a0-\U000103c3\U000103c8-\U000103cf\U00010450-\U0001049d\U00010500-\U00010527\U00010530-\U00010563\U00010600-\U00010736\U00010740-\U00010755\U00010760-\U00010767\U00010800-\U00010805\U00010808-\U00010808\U0001080a-\U00010835\U00010837-\U00010838\U0001083c-\U0001083c\U0001083f-\U00010855\U00010860-\U00010876\U00010880-\U0001089e\U00010900-\U00010915\U00010920-\U00010939\U00010980-\U000109b7\U000109be-\U000109bf\U00010a00-\U00010a00\U00010a10-\U00010a13\U00010a15-\U00010a17\U00010a19-\U00010a33\U00010a60-\U00010a7c\U00010a80-\U00010a9c\U00010ac0-\U00010ac7\U00010ac9-\U00010ae4\U00010b00-\U00010b35\U00010b40-\U00010b55\U00010b60-\U00010b72\U00010b80-\U00010b91\U00010c00-\U00010c48\U00011003-\U00011037\U00011083-\U000110af\U000110d0-\U000110e8\U00011103-\U00011126\U00011150-\U00011172\U00011176-\U00011176\U00011183-\U000111b2\U000111c1-\U000111c4\U000111da-\U000111da\U00011200-\U00011211\U00011213-\U0001122b\U000112b0-\U000112de\U00011305-\U0001130c\U0001130f-\U00011310\U00011313-\U00011328\U0001132a-\U00011330\U00011332-\U00011333\U00011335-\U00011339\U0001133d-\U0001133d\U0001135d-\U00011361\U00011480-\U000114af\U000114c4-\U000114c5\U000114c7-\U000114c7\U00011580-\U000115ae\U00011600-\U0001162f\U00011644-\U00011644\U00011680-\U000116aa\U000118ff-\U000118ff\U00011ac0-\U00011af8\U00012000-\U00012398\U00013000-\U0001342e\U00016800-\U00016a38\U00016a40-\U00016a5e\U00016ad0-\U00016aed\U00016b00-\U00016b2f\U00016b63-\U00016b77\U00016b7d-\U00016b8f\U00016f00-\U00016f44\U00016f50-\U00016f50\U0001b000-\U0001b001\U0001bc00-\U0001bc6a\U0001bc70-\U0001bc7c\U0001bc80-\U0001bc88\U0001bc90-\U0001bc99\U0001e800-\U0001e8c4\U0001ee00-\U0001ee03\U0001ee05-\U0001ee1f\U0001ee21-\U0001ee22\U0001ee24-\U0001ee24\U0001ee27-\U0001ee27\U0001ee29-\U0001ee32\U0001ee34-\U0001ee37\U0001ee39-\U0001ee39\U0001ee3b-\U0001ee3b\U0001ee42-\U0001ee42\U0001ee47-\U0001ee47\U0001ee49-\U0001ee49\U0001ee4b-\U0001ee4b\U0001ee4d-\U0001ee4f\U0001ee51-\U0001ee52\U0001ee54-\U0001ee54\U0001ee57-\U0001ee57\U0001ee59-\U0001ee59\U0001ee5b-\U0001ee5b\U0001ee5d-\U0001ee5d\U0001ee5f-\U0001ee5f\U0001ee61-\U0001ee62\U0001ee64-\U0001ee64\U0001ee67-\U0001ee6a\U0001ee6c-\U0001ee72\U0001ee74-\U0001ee77\U0001ee79-\U0001ee7c\U0001ee7e-\U0001ee7e\U0001ee80-\U0001ee89\U0001ee8b-\U0001ee9b\U0001eea1-\U0001eea3\U0001eea5-\U0001eea9\U0001eeab-\U0001eebb\U00020000-\U0002a6d6\U0002a700-\U0002b734\U0002b740-\U0002b81d\U0002f800-\U0002fa1d]; -M = [\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf-\u05bf\u05c1-\u05c2\u05c4-\u05c5\u05c7-\u05c7\u0610-\u061a\u064b-\u065f\u0670-\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7-\u06e8\u06ea-\u06ed\u0711-\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08e4-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962-\u0963\u0981-\u0983\u09bc-\u09bc\u09be-\u09c4\u09c7-\u09c8\u09cb-\u09cd\u09d7-\u09d7\u09e2-\u09e3\u0a01-\u0a03\u0a3c-\u0a3c\u0a3e-\u0a42\u0a47-\u0a48\u0a4b-\u0a4d\u0a51-\u0a51\u0a70-\u0a71\u0a75-\u0a75\u0a81-\u0a83\u0abc-\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2-\u0ae3\u0b01-\u0b03\u0b3c-\u0b3c\u0b3e-\u0b44\u0b47-\u0b48\u0b4b-\u0b4d\u0b56-\u0b57\u0b62-\u0b63\u0b82-\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7-\u0bd7\u0c00-\u0c03\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55-\u0c56\u0c62-\u0c63\u0c81-\u0c83\u0cbc-\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5-\u0cd6\u0ce2-\u0ce3\u0d01-\u0d03\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57-\u0d57\u0d62-\u0d63\u0d82-\u0d83\u0dca-\u0dca\u0dcf-\u0dd4\u0dd6-\u0dd6\u0dd8-\u0ddf\u0df2-\u0df3\u0e31-\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1-\u0eb1\u0eb4-\u0eb9\u0ebb-\u0ebc\u0ec8-\u0ecd\u0f18-\u0f19\u0f35-\u0f35\u0f37-\u0f37\u0f39-\u0f39\u0f3e-\u0f3f\u0f71-\u0f84\u0f86-\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6-\u0fc6\u102b-\u103e\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u108f\u109a-\u109d\u135d-\u135f\u1712-\u1714\u1732-\u1734\u1752-\u1753\u1772-\u1773\u17b4-\u17d3\u17dd-\u17dd\u180b-\u180d\u18a9-\u18a9\u1920-\u192b\u1930-\u193b\u19b0-\u19c0\u19c8-\u19c9\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a7f\u1ab0-\u1abe\u1b00-\u1b04\u1b34-\u1b44\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1be6-\u1bf3\u1c24-\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced-\u1ced\u1cf2-\u1cf4\u1cf8-\u1cf9\u1dc0-\u1df5\u1dfc-\u1dff\u20d0-\u20f0\u2cef-\u2cf1\u2d7f-\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099-\u309a\ua66f-\ua672\ua674-\ua67d\ua69f-\ua69f\ua6f0-\ua6f1\ua802-\ua802\ua806-\ua806\ua80b-\ua80b\ua823-\ua827\ua880-\ua881\ua8b4-\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9e5-\ua9e5\uaa29-\uaa36\uaa43-\uaa43\uaa4c-\uaa4d\uaa7b-\uaa7d\uaab0-\uaab0\uaab2-\uaab4\uaab7-\uaab8\uaabe-\uaabf\uaac1-\uaac1\uaaeb-\uaaef\uaaf5-\uaaf6\uabe3-\uabea\uabec-\uabed\ufb1e-\ufb1e\ufe00-\ufe0f\ufe20-\ufe2d\U000101fd-\U000101fd\U000102e0-\U000102e0\U00010376-\U0001037a\U00010a01-\U00010a03\U00010a05-\U00010a06\U00010a0c-\U00010a0f\U00010a38-\U00010a3a\U00010a3f-\U00010a3f\U00010ae5-\U00010ae6\U00011000-\U00011002\U00011038-\U00011046\U0001107f-\U00011082\U000110b0-\U000110ba\U00011100-\U00011102\U00011127-\U00011134\U00011173-\U00011173\U00011180-\U00011182\U000111b3-\U000111c0\U0001122c-\U00011237\U000112df-\U000112ea\U00011301-\U00011303\U0001133c-\U0001133c\U0001133e-\U00011344\U00011347-\U00011348\U0001134b-\U0001134d\U00011357-\U00011357\U00011362-\U00011363\U00011366-\U0001136c\U00011370-\U00011374\U000114b0-\U000114c3\U000115af-\U000115b5\U000115b8-\U000115c0\U00011630-\U00011640\U000116ab-\U000116b7\U00016af0-\U00016af4\U00016b30-\U00016b36\U00016f51-\U00016f7e\U00016f8f-\U00016f92\U0001bc9d-\U0001bc9e\U0001d165-\U0001d169\U0001d16d-\U0001d172\U0001d17b-\U0001d182\U0001d185-\U0001d18b\U0001d1aa-\U0001d1ad\U0001d242-\U0001d244\U0001e8d0-\U0001e8d6\U000e0100-\U000e01ef]; -Mn = [\u0300-\u036f\u0483-\u0487\u0591-\u05bd\u05bf-\u05bf\u05c1-\u05c2\u05c4-\u05c5\u05c7-\u05c7\u0610-\u061a\u064b-\u065f\u0670-\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7-\u06e8\u06ea-\u06ed\u0711-\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08e4-\u0902\u093a-\u093a\u093c-\u093c\u0941-\u0948\u094d-\u094d\u0951-\u0957\u0962-\u0963\u0981-\u0981\u09bc-\u09bc\u09c1-\u09c4\u09cd-\u09cd\u09e2-\u09e3\u0a01-\u0a02\u0a3c-\u0a3c\u0a41-\u0a42\u0a47-\u0a48\u0a4b-\u0a4d\u0a51-\u0a51\u0a70-\u0a71\u0a75-\u0a75\u0a81-\u0a82\u0abc-\u0abc\u0ac1-\u0ac5\u0ac7-\u0ac8\u0acd-\u0acd\u0ae2-\u0ae3\u0b01-\u0b01\u0b3c-\u0b3c\u0b3f-\u0b3f\u0b41-\u0b44\u0b4d-\u0b4d\u0b56-\u0b56\u0b62-\u0b63\u0b82-\u0b82\u0bc0-\u0bc0\u0bcd-\u0bcd\u0c00-\u0c00\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55-\u0c56\u0c62-\u0c63\u0c81-\u0c81\u0cbc-\u0cbc\u0cbf-\u0cbf\u0cc6-\u0cc6\u0ccc-\u0ccd\u0ce2-\u0ce3\u0d01-\u0d01\u0d41-\u0d44\u0d4d-\u0d4d\u0d62-\u0d63\u0dca-\u0dca\u0dd2-\u0dd4\u0dd6-\u0dd6\u0e31-\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1-\u0eb1\u0eb4-\u0eb9\u0ebb-\u0ebc\u0ec8-\u0ecd\u0f18-\u0f19\u0f35-\u0f35\u0f37-\u0f37\u0f39-\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86-\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6-\u0fc6\u102d-\u1030\u1032-\u1037\u1039-\u103a\u103d-\u103e\u1058-\u1059\u105e-\u1060\u1071-\u1074\u1082-\u1082\u1085-\u1086\u108d-\u108d\u109d-\u109d\u135d-\u135f\u1712-\u1714\u1732-\u1734\u1752-\u1753\u1772-\u1773\u17b4-\u17b5\u17b7-\u17bd\u17c6-\u17c6\u17c9-\u17d3\u17dd-\u17dd\u180b-\u180d\u18a9-\u18a9\u1920-\u1922\u1927-\u1928\u1932-\u1932\u1939-\u193b\u1a17-\u1a18\u1a1b-\u1a1b\u1a56-\u1a56\u1a58-\u1a5e\u1a60-\u1a60\u1a62-\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f-\u1a7f\u1ab0-\u1abd\u1b00-\u1b03\u1b34-\u1b34\u1b36-\u1b3a\u1b3c-\u1b3c\u1b42-\u1b42\u1b6b-\u1b73\u1b80-\u1b81\u1ba2-\u1ba5\u1ba8-\u1ba9\u1bab-\u1bad\u1be6-\u1be6\u1be8-\u1be9\u1bed-\u1bed\u1bef-\u1bf1\u1c2c-\u1c33\u1c36-\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced-\u1ced\u1cf4-\u1cf4\u1cf8-\u1cf9\u1dc0-\u1df5\u1dfc-\u1dff\u20d0-\u20dc\u20e1-\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f-\u2d7f\u2de0-\u2dff\u302a-\u302d\u3099-\u309a\ua66f-\ua66f\ua674-\ua67d\ua69f-\ua69f\ua6f0-\ua6f1\ua802-\ua802\ua806-\ua806\ua80b-\ua80b\ua825-\ua826\ua8c4-\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3-\ua9b3\ua9b6-\ua9b9\ua9bc-\ua9bc\ua9e5-\ua9e5\uaa29-\uaa2e\uaa31-\uaa32\uaa35-\uaa36\uaa43-\uaa43\uaa4c-\uaa4c\uaa7c-\uaa7c\uaab0-\uaab0\uaab2-\uaab4\uaab7-\uaab8\uaabe-\uaabf\uaac1-\uaac1\uaaec-\uaaed\uaaf6-\uaaf6\uabe5-\uabe5\uabe8-\uabe8\uabed-\uabed\ufb1e-\ufb1e\ufe00-\ufe0f\ufe20-\ufe2d\U000101fd-\U000101fd\U000102e0-\U000102e0\U00010376-\U0001037a\U00010a01-\U00010a03\U00010a05-\U00010a06\U00010a0c-\U00010a0f\U00010a38-\U00010a3a\U00010a3f-\U00010a3f\U00010ae5-\U00010ae6\U00011001-\U00011001\U00011038-\U00011046\U0001107f-\U00011081\U000110b3-\U000110b6\U000110b9-\U000110ba\U00011100-\U00011102\U00011127-\U0001112b\U0001112d-\U00011134\U00011173-\U00011173\U00011180-\U00011181\U000111b6-\U000111be\U0001122f-\U00011231\U00011234-\U00011234\U00011236-\U00011237\U000112df-\U000112df\U000112e3-\U000112ea\U00011301-\U00011301\U0001133c-\U0001133c\U00011340-\U00011340\U00011366-\U0001136c\U00011370-\U00011374\U000114b3-\U000114b8\U000114ba-\U000114ba\U000114bf-\U000114c0\U000114c2-\U000114c3\U000115b2-\U000115b5\U000115bc-\U000115bd\U000115bf-\U000115c0\U00011633-\U0001163a\U0001163d-\U0001163d\U0001163f-\U00011640\U000116ab-\U000116ab\U000116ad-\U000116ad\U000116b0-\U000116b5\U000116b7-\U000116b7\U00016af0-\U00016af4\U00016b30-\U00016b36\U00016f8f-\U00016f92\U0001bc9d-\U0001bc9e\U0001d167-\U0001d169\U0001d17b-\U0001d182\U0001d185-\U0001d18b\U0001d1aa-\U0001d1ad\U0001d242-\U0001d244\U0001e8d0-\U0001e8d6\U000e0100-\U000e01ef]; -Mc = [\u0903-\u0903\u093b-\u093b\u093e-\u0940\u0949-\u094c\u094e-\u094f\u0982-\u0983\u09be-\u09c0\u09c7-\u09c8\u09cb-\u09cc\u09d7-\u09d7\u0a03-\u0a03\u0a3e-\u0a40\u0a83-\u0a83\u0abe-\u0ac0\u0ac9-\u0ac9\u0acb-\u0acc\u0b02-\u0b03\u0b3e-\u0b3e\u0b40-\u0b40\u0b47-\u0b48\u0b4b-\u0b4c\u0b57-\u0b57\u0bbe-\u0bbf\u0bc1-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcc\u0bd7-\u0bd7\u0c01-\u0c03\u0c41-\u0c44\u0c82-\u0c83\u0cbe-\u0cbe\u0cc0-\u0cc4\u0cc7-\u0cc8\u0cca-\u0ccb\u0cd5-\u0cd6\u0d02-\u0d03\u0d3e-\u0d40\u0d46-\u0d48\u0d4a-\u0d4c\u0d57-\u0d57\u0d82-\u0d83\u0dcf-\u0dd1\u0dd8-\u0ddf\u0df2-\u0df3\u0f3e-\u0f3f\u0f7f-\u0f7f\u102b-\u102c\u1031-\u1031\u1038-\u1038\u103b-\u103c\u1056-\u1057\u1062-\u1064\u1067-\u106d\u1083-\u1084\u1087-\u108c\u108f-\u108f\u109a-\u109c\u17b6-\u17b6\u17be-\u17c5\u17c7-\u17c8\u1923-\u1926\u1929-\u192b\u1930-\u1931\u1933-\u1938\u19b0-\u19c0\u19c8-\u19c9\u1a19-\u1a1a\u1a55-\u1a55\u1a57-\u1a57\u1a61-\u1a61\u1a63-\u1a64\u1a6d-\u1a72\u1b04-\u1b04\u1b35-\u1b35\u1b3b-\u1b3b\u1b3d-\u1b41\u1b43-\u1b44\u1b82-\u1b82\u1ba1-\u1ba1\u1ba6-\u1ba7\u1baa-\u1baa\u1be7-\u1be7\u1bea-\u1bec\u1bee-\u1bee\u1bf2-\u1bf3\u1c24-\u1c2b\u1c34-\u1c35\u1ce1-\u1ce1\u1cf2-\u1cf3\u302e-\u302f\ua823-\ua824\ua827-\ua827\ua880-\ua881\ua8b4-\ua8c3\ua952-\ua953\ua983-\ua983\ua9b4-\ua9b5\ua9ba-\ua9bb\ua9bd-\ua9c0\uaa2f-\uaa30\uaa33-\uaa34\uaa4d-\uaa4d\uaa7b-\uaa7b\uaa7d-\uaa7d\uaaeb-\uaaeb\uaaee-\uaaef\uaaf5-\uaaf5\uabe3-\uabe4\uabe6-\uabe7\uabe9-\uabea\uabec-\uabec\U00011000-\U00011000\U00011002-\U00011002\U00011082-\U00011082\U000110b0-\U000110b2\U000110b7-\U000110b8\U0001112c-\U0001112c\U00011182-\U00011182\U000111b3-\U000111b5\U000111bf-\U000111c0\U0001122c-\U0001122e\U00011232-\U00011233\U00011235-\U00011235\U000112e0-\U000112e2\U00011302-\U00011303\U0001133e-\U0001133f\U00011341-\U00011344\U00011347-\U00011348\U0001134b-\U0001134d\U00011357-\U00011357\U00011362-\U00011363\U000114b0-\U000114b2\U000114b9-\U000114b9\U000114bb-\U000114be\U000114c1-\U000114c1\U000115af-\U000115b1\U000115b8-\U000115bb\U000115be-\U000115be\U00011630-\U00011632\U0001163b-\U0001163c\U0001163e-\U0001163e\U000116ac-\U000116ac\U000116ae-\U000116af\U000116b6-\U000116b6\U00016f51-\U00016f7e\U0001d165-\U0001d166\U0001d16d-\U0001d172]; -Me = [\u0488-\u0489\u1abe-\u1abe\u20dd-\u20e0\u20e2-\u20e4\ua670-\ua672]; -Z = [\x20-\x20\xa0-\xa0\u1680-\u1680\u2000-\u200a\u2028-\u2029\u202f-\u202f\u205f-\u205f\u3000-\u3000]; -Zs = [\x20-\x20\xa0-\xa0\u1680-\u1680\u2000-\u200a\u202f-\u202f\u205f-\u205f\u3000-\u3000]; -Zl = [\u2028-\u2028]; -Zp = [\u2029-\u2029]; -S = [\x24-\x24\x2b-\x2b\x3c-\x3e\x5e-\x5e\x60-\x60\x7c-\x7c\x7e-\x7e\xa2-\xa6\xa8-\xa9\xac-\xac\xae-\xb1\xb4-\xb4\xb8-\xb8\xd7-\xd7\xf7-\xf7\u02c2-\u02c5\u02d2-\u02df\u02e5-\u02eb\u02ed-\u02ed\u02ef-\u02ff\u0375-\u0375\u0384-\u0385\u03f6-\u03f6\u0482-\u0482\u058d-\u058f\u0606-\u0608\u060b-\u060b\u060e-\u060f\u06de-\u06de\u06e9-\u06e9\u06fd-\u06fe\u07f6-\u07f6\u09f2-\u09f3\u09fa-\u09fb\u0af1-\u0af1\u0b70-\u0b70\u0bf3-\u0bfa\u0c7f-\u0c7f\u0d79-\u0d79\u0e3f-\u0e3f\u0f01-\u0f03\u0f13-\u0f13\u0f15-\u0f17\u0f1a-\u0f1f\u0f34-\u0f34\u0f36-\u0f36\u0f38-\u0f38\u0fbe-\u0fc5\u0fc7-\u0fcc\u0fce-\u0fcf\u0fd5-\u0fd8\u109e-\u109f\u1390-\u1399\u17db-\u17db\u1940-\u1940\u19de-\u19ff\u1b61-\u1b6a\u1b74-\u1b7c\u1fbd-\u1fbd\u1fbf-\u1fc1\u1fcd-\u1fcf\u1fdd-\u1fdf\u1fed-\u1fef\u1ffd-\u1ffe\u2044-\u2044\u2052-\u2052\u207a-\u207c\u208a-\u208c\u20a0-\u20bd\u2100-\u2101\u2103-\u2106\u2108-\u2109\u2114-\u2114\u2116-\u2118\u211e-\u2123\u2125-\u2125\u2127-\u2127\u2129-\u2129\u212e-\u212e\u213a-\u213b\u2140-\u2144\u214a-\u214d\u214f-\u214f\u2190-\u2307\u230c-\u2328\u232b-\u23fa\u2400-\u2426\u2440-\u244a\u249c-\u24e9\u2500-\u2767\u2794-\u27c4\u27c7-\u27e5\u27f0-\u2982\u2999-\u29d7\u29dc-\u29fb\u29fe-\u2b73\u2b76-\u2b95\u2b98-\u2bb9\u2bbd-\u2bc8\u2bca-\u2bd1\u2ce5-\u2cea\u2e80-\u2e99\u2e9b-\u2ef3\u2f00-\u2fd5\u2ff0-\u2ffb\u3004-\u3004\u3012-\u3013\u3020-\u3020\u3036-\u3037\u303e-\u303f\u309b-\u309c\u3190-\u3191\u3196-\u319f\u31c0-\u31e3\u3200-\u321e\u322a-\u3247\u3250-\u3250\u3260-\u327f\u328a-\u32b0\u32c0-\u32fe\u3300-\u33ff\u4dc0-\u4dff\ua490-\ua4c6\ua700-\ua716\ua720-\ua721\ua789-\ua78a\ua828-\ua82b\ua836-\ua839\uaa77-\uaa79\uab5b-\uab5b\ufb29-\ufb29\ufbb2-\ufbc1\ufdfc-\ufdfd\ufe62-\ufe62\ufe64-\ufe66\ufe69-\ufe69\uff04-\uff04\uff0b-\uff0b\uff1c-\uff1e\uff3e-\uff3e\uff40-\uff40\uff5c-\uff5c\uff5e-\uff5e\uffe0-\uffe6\uffe8-\uffee\ufffc-\ufffd\U00010137-\U0001013f\U00010179-\U00010189\U0001018c-\U0001018c\U00010190-\U0001019b\U000101a0-\U000101a0\U000101d0-\U000101fc\U00010877-\U00010878\U00010ac8-\U00010ac8\U00016b3c-\U00016b3f\U00016b45-\U00016b45\U0001bc9c-\U0001bc9c\U0001d000-\U0001d0f5\U0001d100-\U0001d126\U0001d129-\U0001d164\U0001d16a-\U0001d16c\U0001d183-\U0001d184\U0001d18c-\U0001d1a9\U0001d1ae-\U0001d1dd\U0001d200-\U0001d241\U0001d245-\U0001d245\U0001d300-\U0001d356\U0001d6c1-\U0001d6c1\U0001d6db-\U0001d6db\U0001d6fb-\U0001d6fb\U0001d715-\U0001d715\U0001d735-\U0001d735\U0001d74f-\U0001d74f\U0001d76f-\U0001d76f\U0001d789-\U0001d789\U0001d7a9-\U0001d7a9\U0001d7c3-\U0001d7c3\U0001eef0-\U0001eef1\U0001f000-\U0001f02b\U0001f030-\U0001f093\U0001f0a0-\U0001f0ae\U0001f0b1-\U0001f0bf\U0001f0c1-\U0001f0cf\U0001f0d1-\U0001f0f5\U0001f110-\U0001f12e\U0001f130-\U0001f16b\U0001f170-\U0001f19a\U0001f1e6-\U0001f202\U0001f210-\U0001f23a\U0001f240-\U0001f248\U0001f250-\U0001f251\U0001f300-\U0001f32c\U0001f330-\U0001f37d\U0001f380-\U0001f3ce\U0001f3d4-\U0001f3f7\U0001f400-\U0001f4fe\U0001f500-\U0001f54a\U0001f550-\U0001f579\U0001f57b-\U0001f5a3\U0001f5a5-\U0001f642\U0001f645-\U0001f6cf\U0001f6e0-\U0001f6ec\U0001f6f0-\U0001f6f3\U0001f700-\U0001f773\U0001f780-\U0001f7d4\U0001f800-\U0001f80b\U0001f810-\U0001f847\U0001f850-\U0001f859\U0001f860-\U0001f887\U0001f890-\U0001f8ad]; -Sm = [\x2b-\x2b\x3c-\x3e\x7c-\x7c\x7e-\x7e\xac-\xac\xb1-\xb1\xd7-\xd7\xf7-\xf7\u03f6-\u03f6\u0606-\u0608\u2044-\u2044\u2052-\u2052\u207a-\u207c\u208a-\u208c\u2118-\u2118\u2140-\u2144\u214b-\u214b\u2190-\u2194\u219a-\u219b\u21a0-\u21a0\u21a3-\u21a3\u21a6-\u21a6\u21ae-\u21ae\u21ce-\u21cf\u21d2-\u21d2\u21d4-\u21d4\u21f4-\u22ff\u2320-\u2321\u237c-\u237c\u239b-\u23b3\u23dc-\u23e1\u25b7-\u25b7\u25c1-\u25c1\u25f8-\u25ff\u266f-\u266f\u27c0-\u27c4\u27c7-\u27e5\u27f0-\u27ff\u2900-\u2982\u2999-\u29d7\u29dc-\u29fb\u29fe-\u2aff\u2b30-\u2b44\u2b47-\u2b4c\ufb29-\ufb29\ufe62-\ufe62\ufe64-\ufe66\uff0b-\uff0b\uff1c-\uff1e\uff5c-\uff5c\uff5e-\uff5e\uffe2-\uffe2\uffe9-\uffec\U0001d6c1-\U0001d6c1\U0001d6db-\U0001d6db\U0001d6fb-\U0001d6fb\U0001d715-\U0001d715\U0001d735-\U0001d735\U0001d74f-\U0001d74f\U0001d76f-\U0001d76f\U0001d789-\U0001d789\U0001d7a9-\U0001d7a9\U0001d7c3-\U0001d7c3\U0001eef0-\U0001eef1]; -Sc = [\x24-\x24\xa2-\xa5\u058f-\u058f\u060b-\u060b\u09f2-\u09f3\u09fb-\u09fb\u0af1-\u0af1\u0bf9-\u0bf9\u0e3f-\u0e3f\u17db-\u17db\u20a0-\u20bd\ua838-\ua838\ufdfc-\ufdfc\ufe69-\ufe69\uff04-\uff04\uffe0-\uffe1\uffe5-\uffe6]; -Sk = [\x5e-\x5e\x60-\x60\xa8-\xa8\xaf-\xaf\xb4-\xb4\xb8-\xb8\u02c2-\u02c5\u02d2-\u02df\u02e5-\u02eb\u02ed-\u02ed\u02ef-\u02ff\u0375-\u0375\u0384-\u0385\u1fbd-\u1fbd\u1fbf-\u1fc1\u1fcd-\u1fcf\u1fdd-\u1fdf\u1fed-\u1fef\u1ffd-\u1ffe\u309b-\u309c\ua700-\ua716\ua720-\ua721\ua789-\ua78a\uab5b-\uab5b\ufbb2-\ufbc1\uff3e-\uff3e\uff40-\uff40\uffe3-\uffe3]; -So = [\xa6-\xa6\xa9-\xa9\xae-\xae\xb0-\xb0\u0482-\u0482\u058d-\u058e\u060e-\u060f\u06de-\u06de\u06e9-\u06e9\u06fd-\u06fe\u07f6-\u07f6\u09fa-\u09fa\u0b70-\u0b70\u0bf3-\u0bf8\u0bfa-\u0bfa\u0c7f-\u0c7f\u0d79-\u0d79\u0f01-\u0f03\u0f13-\u0f13\u0f15-\u0f17\u0f1a-\u0f1f\u0f34-\u0f34\u0f36-\u0f36\u0f38-\u0f38\u0fbe-\u0fc5\u0fc7-\u0fcc\u0fce-\u0fcf\u0fd5-\u0fd8\u109e-\u109f\u1390-\u1399\u1940-\u1940\u19de-\u19ff\u1b61-\u1b6a\u1b74-\u1b7c\u2100-\u2101\u2103-\u2106\u2108-\u2109\u2114-\u2114\u2116-\u2117\u211e-\u2123\u2125-\u2125\u2127-\u2127\u2129-\u2129\u212e-\u212e\u213a-\u213b\u214a-\u214a\u214c-\u214d\u214f-\u214f\u2195-\u2199\u219c-\u219f\u21a1-\u21a2\u21a4-\u21a5\u21a7-\u21ad\u21af-\u21cd\u21d0-\u21d1\u21d3-\u21d3\u21d5-\u21f3\u2300-\u2307\u230c-\u231f\u2322-\u2328\u232b-\u237b\u237d-\u239a\u23b4-\u23db\u23e2-\u23fa\u2400-\u2426\u2440-\u244a\u249c-\u24e9\u2500-\u25b6\u25b8-\u25c0\u25c2-\u25f7\u2600-\u266e\u2670-\u2767\u2794-\u27bf\u2800-\u28ff\u2b00-\u2b2f\u2b45-\u2b46\u2b4d-\u2b73\u2b76-\u2b95\u2b98-\u2bb9\u2bbd-\u2bc8\u2bca-\u2bd1\u2ce5-\u2cea\u2e80-\u2e99\u2e9b-\u2ef3\u2f00-\u2fd5\u2ff0-\u2ffb\u3004-\u3004\u3012-\u3013\u3020-\u3020\u3036-\u3037\u303e-\u303f\u3190-\u3191\u3196-\u319f\u31c0-\u31e3\u3200-\u321e\u322a-\u3247\u3250-\u3250\u3260-\u327f\u328a-\u32b0\u32c0-\u32fe\u3300-\u33ff\u4dc0-\u4dff\ua490-\ua4c6\ua828-\ua82b\ua836-\ua837\ua839-\ua839\uaa77-\uaa79\ufdfd-\ufdfd\uffe4-\uffe4\uffe8-\uffe8\uffed-\uffee\ufffc-\ufffd\U00010137-\U0001013f\U00010179-\U00010189\U0001018c-\U0001018c\U00010190-\U0001019b\U000101a0-\U000101a0\U000101d0-\U000101fc\U00010877-\U00010878\U00010ac8-\U00010ac8\U00016b3c-\U00016b3f\U00016b45-\U00016b45\U0001bc9c-\U0001bc9c\U0001d000-\U0001d0f5\U0001d100-\U0001d126\U0001d129-\U0001d164\U0001d16a-\U0001d16c\U0001d183-\U0001d184\U0001d18c-\U0001d1a9\U0001d1ae-\U0001d1dd\U0001d200-\U0001d241\U0001d245-\U0001d245\U0001d300-\U0001d356\U0001f000-\U0001f02b\U0001f030-\U0001f093\U0001f0a0-\U0001f0ae\U0001f0b1-\U0001f0bf\U0001f0c1-\U0001f0cf\U0001f0d1-\U0001f0f5\U0001f110-\U0001f12e\U0001f130-\U0001f16b\U0001f170-\U0001f19a\U0001f1e6-\U0001f202\U0001f210-\U0001f23a\U0001f240-\U0001f248\U0001f250-\U0001f251\U0001f300-\U0001f32c\U0001f330-\U0001f37d\U0001f380-\U0001f3ce\U0001f3d4-\U0001f3f7\U0001f400-\U0001f4fe\U0001f500-\U0001f54a\U0001f550-\U0001f579\U0001f57b-\U0001f5a3\U0001f5a5-\U0001f642\U0001f645-\U0001f6cf\U0001f6e0-\U0001f6ec\U0001f6f0-\U0001f6f3\U0001f700-\U0001f773\U0001f780-\U0001f7d4\U0001f800-\U0001f80b\U0001f810-\U0001f847\U0001f850-\U0001f859\U0001f860-\U0001f887\U0001f890-\U0001f8ad]; -N = [\x30-\x39\xb2-\xb3\xb9-\xb9\xbc-\xbe\u0660-\u0669\u06f0-\u06f9\u07c0-\u07c9\u0966-\u096f\u09e6-\u09ef\u09f4-\u09f9\u0a66-\u0a6f\u0ae6-\u0aef\u0b66-\u0b6f\u0b72-\u0b77\u0be6-\u0bf2\u0c66-\u0c6f\u0c78-\u0c7e\u0ce6-\u0cef\u0d66-\u0d75\u0de6-\u0def\u0e50-\u0e59\u0ed0-\u0ed9\u0f20-\u0f33\u1040-\u1049\u1090-\u1099\u1369-\u137c\u16ee-\u16f0\u17e0-\u17e9\u17f0-\u17f9\u1810-\u1819\u1946-\u194f\u19d0-\u19da\u1a80-\u1a89\u1a90-\u1a99\u1b50-\u1b59\u1bb0-\u1bb9\u1c40-\u1c49\u1c50-\u1c59\u2070-\u2070\u2074-\u2079\u2080-\u2089\u2150-\u2182\u2185-\u2189\u2460-\u249b\u24ea-\u24ff\u2776-\u2793\u2cfd-\u2cfd\u3007-\u3007\u3021-\u3029\u3038-\u303a\u3192-\u3195\u3220-\u3229\u3248-\u324f\u3251-\u325f\u3280-\u3289\u32b1-\u32bf\ua620-\ua629\ua6e6-\ua6ef\ua830-\ua835\ua8d0-\ua8d9\ua900-\ua909\ua9d0-\ua9d9\ua9f0-\ua9f9\uaa50-\uaa59\uabf0-\uabf9\uff10-\uff19\U00010107-\U00010133\U00010140-\U00010178\U0001018a-\U0001018b\U000102e1-\U000102fb\U00010320-\U00010323\U00010341-\U00010341\U0001034a-\U0001034a\U000103d1-\U000103d5\U000104a0-\U000104a9\U00010858-\U0001085f\U00010879-\U0001087f\U000108a7-\U000108af\U00010916-\U0001091b\U00010a40-\U00010a47\U00010a7d-\U00010a7e\U00010a9d-\U00010a9f\U00010aeb-\U00010aef\U00010b58-\U00010b5f\U00010b78-\U00010b7f\U00010ba9-\U00010baf\U00010e60-\U00010e7e\U00011052-\U0001106f\U000110f0-\U000110f9\U00011136-\U0001113f\U000111d0-\U000111d9\U000111e1-\U000111f4\U000112f0-\U000112f9\U000114d0-\U000114d9\U00011650-\U00011659\U000116c0-\U000116c9\U000118e0-\U000118f2\U00012400-\U0001246e\U00016a60-\U00016a69\U00016b50-\U00016b59\U00016b5b-\U00016b61\U0001d360-\U0001d371\U0001d7ce-\U0001d7ff\U0001e8c7-\U0001e8cf\U0001f100-\U0001f10c]; -Nd = [\x30-\x39\u0660-\u0669\u06f0-\u06f9\u07c0-\u07c9\u0966-\u096f\u09e6-\u09ef\u0a66-\u0a6f\u0ae6-\u0aef\u0b66-\u0b6f\u0be6-\u0bef\u0c66-\u0c6f\u0ce6-\u0cef\u0d66-\u0d6f\u0de6-\u0def\u0e50-\u0e59\u0ed0-\u0ed9\u0f20-\u0f29\u1040-\u1049\u1090-\u1099\u17e0-\u17e9\u1810-\u1819\u1946-\u194f\u19d0-\u19d9\u1a80-\u1a89\u1a90-\u1a99\u1b50-\u1b59\u1bb0-\u1bb9\u1c40-\u1c49\u1c50-\u1c59\ua620-\ua629\ua8d0-\ua8d9\ua900-\ua909\ua9d0-\ua9d9\ua9f0-\ua9f9\uaa50-\uaa59\uabf0-\uabf9\uff10-\uff19\U000104a0-\U000104a9\U00011066-\U0001106f\U000110f0-\U000110f9\U00011136-\U0001113f\U000111d0-\U000111d9\U000112f0-\U000112f9\U000114d0-\U000114d9\U00011650-\U00011659\U000116c0-\U000116c9\U000118e0-\U000118e9\U00016a60-\U00016a69\U00016b50-\U00016b59\U0001d7ce-\U0001d7ff]; -Nl = [\u16ee-\u16f0\u2160-\u2182\u2185-\u2188\u3007-\u3007\u3021-\u3029\u3038-\u303a\ua6e6-\ua6ef\U00010140-\U00010174\U00010341-\U00010341\U0001034a-\U0001034a\U000103d1-\U000103d5\U00012400-\U0001246e]; -No = [\xb2-\xb3\xb9-\xb9\xbc-\xbe\u09f4-\u09f9\u0b72-\u0b77\u0bf0-\u0bf2\u0c78-\u0c7e\u0d70-\u0d75\u0f2a-\u0f33\u1369-\u137c\u17f0-\u17f9\u19da-\u19da\u2070-\u2070\u2074-\u2079\u2080-\u2089\u2150-\u215f\u2189-\u2189\u2460-\u249b\u24ea-\u24ff\u2776-\u2793\u2cfd-\u2cfd\u3192-\u3195\u3220-\u3229\u3248-\u324f\u3251-\u325f\u3280-\u3289\u32b1-\u32bf\ua830-\ua835\U00010107-\U00010133\U00010175-\U00010178\U0001018a-\U0001018b\U000102e1-\U000102fb\U00010320-\U00010323\U00010858-\U0001085f\U00010879-\U0001087f\U000108a7-\U000108af\U00010916-\U0001091b\U00010a40-\U00010a47\U00010a7d-\U00010a7e\U00010a9d-\U00010a9f\U00010aeb-\U00010aef\U00010b58-\U00010b5f\U00010b78-\U00010b7f\U00010ba9-\U00010baf\U00010e60-\U00010e7e\U00011052-\U00011065\U000111e1-\U000111f4\U000118ea-\U000118f2\U00016b5b-\U00016b61\U0001d360-\U0001d371\U0001e8c7-\U0001e8cf\U0001f100-\U0001f10c]; -P = [\x21-\x23\x25-\x2a\x2c-\x2f\x3a-\x3b\x3f-\x40\x5b-\x5d\x5f-\x5f\x7b-\x7b\x7d-\x7d\xa1-\xa1\xa7-\xa7\xab-\xab\xb6-\xb7\xbb-\xbb\xbf-\xbf\u037e-\u037e\u0387-\u0387\u055a-\u055f\u0589-\u058a\u05be-\u05be\u05c0-\u05c0\u05c3-\u05c3\u05c6-\u05c6\u05f3-\u05f4\u0609-\u060a\u060c-\u060d\u061b-\u061b\u061e-\u061f\u066a-\u066d\u06d4-\u06d4\u0700-\u070d\u07f7-\u07f9\u0830-\u083e\u085e-\u085e\u0964-\u0965\u0970-\u0970\u0af0-\u0af0\u0df4-\u0df4\u0e4f-\u0e4f\u0e5a-\u0e5b\u0f04-\u0f12\u0f14-\u0f14\u0f3a-\u0f3d\u0f85-\u0f85\u0fd0-\u0fd4\u0fd9-\u0fda\u104a-\u104f\u10fb-\u10fb\u1360-\u1368\u1400-\u1400\u166d-\u166e\u169b-\u169c\u16eb-\u16ed\u1735-\u1736\u17d4-\u17d6\u17d8-\u17da\u1800-\u180a\u1944-\u1945\u1a1e-\u1a1f\u1aa0-\u1aa6\u1aa8-\u1aad\u1b5a-\u1b60\u1bfc-\u1bff\u1c3b-\u1c3f\u1c7e-\u1c7f\u1cc0-\u1cc7\u1cd3-\u1cd3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205e\u207d-\u207e\u208d-\u208e\u2308-\u230b\u2329-\u232a\u2768-\u2775\u27c5-\u27c6\u27e6-\u27ef\u2983-\u2998\u29d8-\u29db\u29fc-\u29fd\u2cf9-\u2cfc\u2cfe-\u2cff\u2d70-\u2d70\u2e00-\u2e2e\u2e30-\u2e42\u3001-\u3003\u3008-\u3011\u3014-\u301f\u3030-\u3030\u303d-\u303d\u30a0-\u30a0\u30fb-\u30fb\ua4fe-\ua4ff\ua60d-\ua60f\ua673-\ua673\ua67e-\ua67e\ua6f2-\ua6f7\ua874-\ua877\ua8ce-\ua8cf\ua8f8-\ua8fa\ua92e-\ua92f\ua95f-\ua95f\ua9c1-\ua9cd\ua9de-\ua9df\uaa5c-\uaa5f\uaade-\uaadf\uaaf0-\uaaf1\uabeb-\uabeb\ufd3e-\ufd3f\ufe10-\ufe19\ufe30-\ufe52\ufe54-\ufe61\ufe63-\ufe63\ufe68-\ufe68\ufe6a-\ufe6b\uff01-\uff03\uff05-\uff0a\uff0c-\uff0f\uff1a-\uff1b\uff1f-\uff20\uff3b-\uff3d\uff3f-\uff3f\uff5b-\uff5b\uff5d-\uff5d\uff5f-\uff65\U00010100-\U00010102\U0001039f-\U0001039f\U000103d0-\U000103d0\U0001056f-\U0001056f\U00010857-\U00010857\U0001091f-\U0001091f\U0001093f-\U0001093f\U00010a50-\U00010a58\U00010a7f-\U00010a7f\U00010af0-\U00010af6\U00010b39-\U00010b3f\U00010b99-\U00010b9c\U00011047-\U0001104d\U000110bb-\U000110bc\U000110be-\U000110c1\U00011140-\U00011143\U00011174-\U00011175\U000111c5-\U000111c8\U000111cd-\U000111cd\U00011238-\U0001123d\U000114c6-\U000114c6\U000115c1-\U000115c9\U00011641-\U00011643\U00012470-\U00012474\U00016a6e-\U00016a6f\U00016af5-\U00016af5\U00016b37-\U00016b3b\U00016b44-\U00016b44\U0001bc9f-\U0001bc9f]; -Pd = [\x2d-\x2d\u058a-\u058a\u05be-\u05be\u1400-\u1400\u1806-\u1806\u2010-\u2015\u2e17-\u2e17\u2e1a-\u2e1a\u2e3a-\u2e3b\u2e40-\u2e40\u301c-\u301c\u3030-\u3030\u30a0-\u30a0\ufe31-\ufe32\ufe58-\ufe58\ufe63-\ufe63\uff0d-\uff0d]; -Ps = [\x28-\x28\x5b-\x5b\x7b-\x7b\u0f3a-\u0f3a\u0f3c-\u0f3c\u169b-\u169b\u201a-\u201a\u201e-\u201e\u2045-\u2045\u207d-\u207d\u208d-\u208d\u2308-\u2308\u230a-\u230a\u2329-\u2329\u2768-\u2768\u276a-\u276a\u276c-\u276c\u276e-\u276e\u2770-\u2770\u2772-\u2772\u2774-\u2774\u27c5-\u27c5\u27e6-\u27e6\u27e8-\u27e8\u27ea-\u27ea\u27ec-\u27ec\u27ee-\u27ee\u2983-\u2983\u2985-\u2985\u2987-\u2987\u2989-\u2989\u298b-\u298b\u298d-\u298d\u298f-\u298f\u2991-\u2991\u2993-\u2993\u2995-\u2995\u2997-\u2997\u29d8-\u29d8\u29da-\u29da\u29fc-\u29fc\u2e22-\u2e22\u2e24-\u2e24\u2e26-\u2e26\u2e28-\u2e28\u2e42-\u2e42\u3008-\u3008\u300a-\u300a\u300c-\u300c\u300e-\u300e\u3010-\u3010\u3014-\u3014\u3016-\u3016\u3018-\u3018\u301a-\u301a\u301d-\u301d\ufd3f-\ufd3f\ufe17-\ufe17\ufe35-\ufe35\ufe37-\ufe37\ufe39-\ufe39\ufe3b-\ufe3b\ufe3d-\ufe3d\ufe3f-\ufe3f\ufe41-\ufe41\ufe43-\ufe43\ufe47-\ufe47\ufe59-\ufe59\ufe5b-\ufe5b\ufe5d-\ufe5d\uff08-\uff08\uff3b-\uff3b\uff5b-\uff5b\uff5f-\uff5f\uff62-\uff62]; -Pe = [\x29-\x29\x5d-\x5d\x7d-\x7d\u0f3b-\u0f3b\u0f3d-\u0f3d\u169c-\u169c\u2046-\u2046\u207e-\u207e\u208e-\u208e\u2309-\u2309\u230b-\u230b\u232a-\u232a\u2769-\u2769\u276b-\u276b\u276d-\u276d\u276f-\u276f\u2771-\u2771\u2773-\u2773\u2775-\u2775\u27c6-\u27c6\u27e7-\u27e7\u27e9-\u27e9\u27eb-\u27eb\u27ed-\u27ed\u27ef-\u27ef\u2984-\u2984\u2986-\u2986\u2988-\u2988\u298a-\u298a\u298c-\u298c\u298e-\u298e\u2990-\u2990\u2992-\u2992\u2994-\u2994\u2996-\u2996\u2998-\u2998\u29d9-\u29d9\u29db-\u29db\u29fd-\u29fd\u2e23-\u2e23\u2e25-\u2e25\u2e27-\u2e27\u2e29-\u2e29\u3009-\u3009\u300b-\u300b\u300d-\u300d\u300f-\u300f\u3011-\u3011\u3015-\u3015\u3017-\u3017\u3019-\u3019\u301b-\u301b\u301e-\u301f\ufd3e-\ufd3e\ufe18-\ufe18\ufe36-\ufe36\ufe38-\ufe38\ufe3a-\ufe3a\ufe3c-\ufe3c\ufe3e-\ufe3e\ufe40-\ufe40\ufe42-\ufe42\ufe44-\ufe44\ufe48-\ufe48\ufe5a-\ufe5a\ufe5c-\ufe5c\ufe5e-\ufe5e\uff09-\uff09\uff3d-\uff3d\uff5d-\uff5d\uff60-\uff60\uff63-\uff63]; -Pi = [\xab-\xab\u2018-\u2018\u201b-\u201c\u201f-\u201f\u2039-\u2039\u2e02-\u2e02\u2e04-\u2e04\u2e09-\u2e09\u2e0c-\u2e0c\u2e1c-\u2e1c\u2e20-\u2e20]; -Pf = [\xbb-\xbb\u2019-\u2019\u201d-\u201d\u203a-\u203a\u2e03-\u2e03\u2e05-\u2e05\u2e0a-\u2e0a\u2e0d-\u2e0d\u2e1d-\u2e1d\u2e21-\u2e21]; -Pc = [\x5f-\x5f\u203f-\u2040\u2054-\u2054\ufe33-\ufe34\ufe4d-\ufe4f\uff3f-\uff3f]; -Po = [\x21-\x23\x25-\x27\x2a-\x2a\x2c-\x2c\x2e-\x2f\x3a-\x3b\x3f-\x40\x5c-\x5c\xa1-\xa1\xa7-\xa7\xb6-\xb7\xbf-\xbf\u037e-\u037e\u0387-\u0387\u055a-\u055f\u0589-\u0589\u05c0-\u05c0\u05c3-\u05c3\u05c6-\u05c6\u05f3-\u05f4\u0609-\u060a\u060c-\u060d\u061b-\u061b\u061e-\u061f\u066a-\u066d\u06d4-\u06d4\u0700-\u070d\u07f7-\u07f9\u0830-\u083e\u085e-\u085e\u0964-\u0965\u0970-\u0970\u0af0-\u0af0\u0df4-\u0df4\u0e4f-\u0e4f\u0e5a-\u0e5b\u0f04-\u0f12\u0f14-\u0f14\u0f85-\u0f85\u0fd0-\u0fd4\u0fd9-\u0fda\u104a-\u104f\u10fb-\u10fb\u1360-\u1368\u166d-\u166e\u16eb-\u16ed\u1735-\u1736\u17d4-\u17d6\u17d8-\u17da\u1800-\u1805\u1807-\u180a\u1944-\u1945\u1a1e-\u1a1f\u1aa0-\u1aa6\u1aa8-\u1aad\u1b5a-\u1b60\u1bfc-\u1bff\u1c3b-\u1c3f\u1c7e-\u1c7f\u1cc0-\u1cc7\u1cd3-\u1cd3\u2016-\u2017\u2020-\u2027\u2030-\u2038\u203b-\u203e\u2041-\u2043\u2047-\u2051\u2053-\u2053\u2055-\u205e\u2cf9-\u2cfc\u2cfe-\u2cff\u2d70-\u2d70\u2e00-\u2e01\u2e06-\u2e08\u2e0b-\u2e0b\u2e0e-\u2e16\u2e18-\u2e19\u2e1b-\u2e1b\u2e1e-\u2e1f\u2e2a-\u2e2e\u2e30-\u2e39\u2e3c-\u2e3f\u2e41-\u2e41\u3001-\u3003\u303d-\u303d\u30fb-\u30fb\ua4fe-\ua4ff\ua60d-\ua60f\ua673-\ua673\ua67e-\ua67e\ua6f2-\ua6f7\ua874-\ua877\ua8ce-\ua8cf\ua8f8-\ua8fa\ua92e-\ua92f\ua95f-\ua95f\ua9c1-\ua9cd\ua9de-\ua9df\uaa5c-\uaa5f\uaade-\uaadf\uaaf0-\uaaf1\uabeb-\uabeb\ufe10-\ufe16\ufe19-\ufe19\ufe30-\ufe30\ufe45-\ufe46\ufe49-\ufe4c\ufe50-\ufe52\ufe54-\ufe57\ufe5f-\ufe61\ufe68-\ufe68\ufe6a-\ufe6b\uff01-\uff03\uff05-\uff07\uff0a-\uff0a\uff0c-\uff0c\uff0e-\uff0f\uff1a-\uff1b\uff1f-\uff20\uff3c-\uff3c\uff61-\uff61\uff64-\uff65\U00010100-\U00010102\U0001039f-\U0001039f\U000103d0-\U000103d0\U0001056f-\U0001056f\U00010857-\U00010857\U0001091f-\U0001091f\U0001093f-\U0001093f\U00010a50-\U00010a58\U00010a7f-\U00010a7f\U00010af0-\U00010af6\U00010b39-\U00010b3f\U00010b99-\U00010b9c\U00011047-\U0001104d\U000110bb-\U000110bc\U000110be-\U000110c1\U00011140-\U00011143\U00011174-\U00011175\U000111c5-\U000111c8\U000111cd-\U000111cd\U00011238-\U0001123d\U000114c6-\U000114c6\U000115c1-\U000115c9\U00011641-\U00011643\U00012470-\U00012474\U00016a6e-\U00016a6f\U00016af5-\U00016af5\U00016b37-\U00016b3b\U00016b44-\U00016b44\U0001bc9f-\U0001bc9f]; -C = [\x00-\x1f\x7f-\x9f\xad-\xad\u0378-\u0379\u0380-\u0383\u038b-\u038b\u038d-\u038d\u03a2-\u03a2\u0530-\u0530\u0557-\u0558\u0560-\u0560\u0588-\u0588\u058b-\u058c\u0590-\u0590\u05c8-\u05cf\u05eb-\u05ef\u05f5-\u0605\u061c-\u061d\u06dd-\u06dd\u070e-\u070f\u074b-\u074c\u07b2-\u07bf\u07fb-\u07ff\u082e-\u082f\u083f-\u083f\u085c-\u085d\u085f-\u089f\u08b3-\u08e3\u0984-\u0984\u098d-\u098e\u0991-\u0992\u09a9-\u09a9\u09b1-\u09b1\u09b3-\u09b5\u09ba-\u09bb\u09c5-\u09c6\u09c9-\u09ca\u09cf-\u09d6\u09d8-\u09db\u09de-\u09de\u09e4-\u09e5\u09fc-\u0a00\u0a04-\u0a04\u0a0b-\u0a0e\u0a11-\u0a12\u0a29-\u0a29\u0a31-\u0a31\u0a34-\u0a34\u0a37-\u0a37\u0a3a-\u0a3b\u0a3d-\u0a3d\u0a43-\u0a46\u0a49-\u0a4a\u0a4e-\u0a50\u0a52-\u0a58\u0a5d-\u0a5d\u0a5f-\u0a65\u0a76-\u0a80\u0a84-\u0a84\u0a8e-\u0a8e\u0a92-\u0a92\u0aa9-\u0aa9\u0ab1-\u0ab1\u0ab4-\u0ab4\u0aba-\u0abb\u0ac6-\u0ac6\u0aca-\u0aca\u0ace-\u0acf\u0ad1-\u0adf\u0ae4-\u0ae5\u0af2-\u0b00\u0b04-\u0b04\u0b0d-\u0b0e\u0b11-\u0b12\u0b29-\u0b29\u0b31-\u0b31\u0b34-\u0b34\u0b3a-\u0b3b\u0b45-\u0b46\u0b49-\u0b4a\u0b4e-\u0b55\u0b58-\u0b5b\u0b5e-\u0b5e\u0b64-\u0b65\u0b78-\u0b81\u0b84-\u0b84\u0b8b-\u0b8d\u0b91-\u0b91\u0b96-\u0b98\u0b9b-\u0b9b\u0b9d-\u0b9d\u0ba0-\u0ba2\u0ba5-\u0ba7\u0bab-\u0bad\u0bba-\u0bbd\u0bc3-\u0bc5\u0bc9-\u0bc9\u0bce-\u0bcf\u0bd1-\u0bd6\u0bd8-\u0be5\u0bfb-\u0bff\u0c04-\u0c04\u0c0d-\u0c0d\u0c11-\u0c11\u0c29-\u0c29\u0c3a-\u0c3c\u0c45-\u0c45\u0c49-\u0c49\u0c4e-\u0c54\u0c57-\u0c57\u0c5a-\u0c5f\u0c64-\u0c65\u0c70-\u0c77\u0c80-\u0c80\u0c84-\u0c84\u0c8d-\u0c8d\u0c91-\u0c91\u0ca9-\u0ca9\u0cb4-\u0cb4\u0cba-\u0cbb\u0cc5-\u0cc5\u0cc9-\u0cc9\u0cce-\u0cd4\u0cd7-\u0cdd\u0cdf-\u0cdf\u0ce4-\u0ce5\u0cf0-\u0cf0\u0cf3-\u0d00\u0d04-\u0d04\u0d0d-\u0d0d\u0d11-\u0d11\u0d3b-\u0d3c\u0d45-\u0d45\u0d49-\u0d49\u0d4f-\u0d56\u0d58-\u0d5f\u0d64-\u0d65\u0d76-\u0d78\u0d80-\u0d81\u0d84-\u0d84\u0d97-\u0d99\u0db2-\u0db2\u0dbc-\u0dbc\u0dbe-\u0dbf\u0dc7-\u0dc9\u0dcb-\u0dce\u0dd5-\u0dd5\u0dd7-\u0dd7\u0de0-\u0de5\u0df0-\u0df1\u0df5-\u0e00\u0e3b-\u0e3e\u0e5c-\u0e80\u0e83-\u0e83\u0e85-\u0e86\u0e89-\u0e89\u0e8b-\u0e8c\u0e8e-\u0e93\u0e98-\u0e98\u0ea0-\u0ea0\u0ea4-\u0ea4\u0ea6-\u0ea6\u0ea8-\u0ea9\u0eac-\u0eac\u0eba-\u0eba\u0ebe-\u0ebf\u0ec5-\u0ec5\u0ec7-\u0ec7\u0ece-\u0ecf\u0eda-\u0edb\u0ee0-\u0eff\u0f48-\u0f48\u0f6d-\u0f70\u0f98-\u0f98\u0fbd-\u0fbd\u0fcd-\u0fcd\u0fdb-\u0fff\u10c6-\u10c6\u10c8-\u10cc\u10ce-\u10cf\u1249-\u1249\u124e-\u124f\u1257-\u1257\u1259-\u1259\u125e-\u125f\u1289-\u1289\u128e-\u128f\u12b1-\u12b1\u12b6-\u12b7\u12bf-\u12bf\u12c1-\u12c1\u12c6-\u12c7\u12d7-\u12d7\u1311-\u1311\u1316-\u1317\u135b-\u135c\u137d-\u137f\u139a-\u139f\u13f5-\u13ff\u169d-\u169f\u16f9-\u16ff\u170d-\u170d\u1715-\u171f\u1737-\u173f\u1754-\u175f\u176d-\u176d\u1771-\u1771\u1774-\u177f\u17de-\u17df\u17ea-\u17ef\u17fa-\u17ff\u180e-\u180f\u181a-\u181f\u1878-\u187f\u18ab-\u18af\u18f6-\u18ff\u191f-\u191f\u192c-\u192f\u193c-\u193f\u1941-\u1943\u196e-\u196f\u1975-\u197f\u19ac-\u19af\u19ca-\u19cf\u19db-\u19dd\u1a1c-\u1a1d\u1a5f-\u1a5f\u1a7d-\u1a7e\u1a8a-\u1a8f\u1a9a-\u1a9f\u1aae-\u1aaf\u1abf-\u1aff\u1b4c-\u1b4f\u1b7d-\u1b7f\u1bf4-\u1bfb\u1c38-\u1c3a\u1c4a-\u1c4c\u1c80-\u1cbf\u1cc8-\u1ccf\u1cf7-\u1cf7\u1cfa-\u1cff\u1df6-\u1dfb\u1f16-\u1f17\u1f1e-\u1f1f\u1f46-\u1f47\u1f4e-\u1f4f\u1f58-\u1f58\u1f5a-\u1f5a\u1f5c-\u1f5c\u1f5e-\u1f5e\u1f7e-\u1f7f\u1fb5-\u1fb5\u1fc5-\u1fc5\u1fd4-\u1fd5\u1fdc-\u1fdc\u1ff0-\u1ff1\u1ff5-\u1ff5\u1fff-\u1fff\u200b-\u200f\u202a-\u202e\u2060-\u206f\u2072-\u2073\u208f-\u208f\u209d-\u209f\u20be-\u20cf\u20f1-\u20ff\u218a-\u218f\u23fb-\u23ff\u2427-\u243f\u244b-\u245f\u2b74-\u2b75\u2b96-\u2b97\u2bba-\u2bbc\u2bc9-\u2bc9\u2bd2-\u2bff\u2c2f-\u2c2f\u2c5f-\u2c5f\u2cf4-\u2cf8\u2d26-\u2d26\u2d28-\u2d2c\u2d2e-\u2d2f\u2d68-\u2d6e\u2d71-\u2d7e\u2d97-\u2d9f\u2da7-\u2da7\u2daf-\u2daf\u2db7-\u2db7\u2dbf-\u2dbf\u2dc7-\u2dc7\u2dcf-\u2dcf\u2dd7-\u2dd7\u2ddf-\u2ddf\u2e43-\u2e7f\u2e9a-\u2e9a\u2ef4-\u2eff\u2fd6-\u2fef\u2ffc-\u2fff\u3040-\u3040\u3097-\u3098\u3100-\u3104\u312e-\u3130\u318f-\u318f\u31bb-\u31bf\u31e4-\u31ef\u321f-\u321f\u32ff-\u32ff\u4db6-\u4dbf\u9fcd-\u9fff\ua48d-\ua48f\ua4c7-\ua4cf\ua62c-\ua63f\ua69e-\ua69e\ua6f8-\ua6ff\ua78f-\ua78f\ua7ae-\ua7af\ua7b2-\ua7f6\ua82c-\ua82f\ua83a-\ua83f\ua878-\ua87f\ua8c5-\ua8cd\ua8da-\ua8df\ua8fc-\ua8ff\ua954-\ua95e\ua97d-\ua97f\ua9ce-\ua9ce\ua9da-\ua9dd\ua9ff-\ua9ff\uaa37-\uaa3f\uaa4e-\uaa4f\uaa5a-\uaa5b\uaac3-\uaada\uaaf7-\uab00\uab07-\uab08\uab0f-\uab10\uab17-\uab1f\uab27-\uab27\uab2f-\uab2f\uab60-\uab63\uab66-\uabbf\uabee-\uabef\uabfa-\uabff\ud7a4-\ud7af\ud7c7-\ud7ca\ud7fc-\uf8ff\ufa6e-\ufa6f\ufada-\ufaff\ufb07-\ufb12\ufb18-\ufb1c\ufb37-\ufb37\ufb3d-\ufb3d\ufb3f-\ufb3f\ufb42-\ufb42\ufb45-\ufb45\ufbc2-\ufbd2\ufd40-\ufd4f\ufd90-\ufd91\ufdc8-\ufdef\ufdfe-\ufdff\ufe1a-\ufe1f\ufe2e-\ufe2f\ufe53-\ufe53\ufe67-\ufe67\ufe6c-\ufe6f\ufe75-\ufe75\ufefd-\uff00\uffbf-\uffc1\uffc8-\uffc9\uffd0-\uffd1\uffd8-\uffd9\uffdd-\uffdf\uffe7-\uffe7\uffef-\ufffb\ufffe-\U0000ffff\U0001000c-\U0001000c\U00010027-\U00010027\U0001003b-\U0001003b\U0001003e-\U0001003e\U0001004e-\U0001004f\U0001005e-\U0001007f\U000100fb-\U000100ff\U00010103-\U00010106\U00010134-\U00010136\U0001018d-\U0001018f\U0001019c-\U0001019f\U000101a1-\U000101cf\U000101fe-\U0001027f\U0001029d-\U0001029f\U000102d1-\U000102df\U000102fc-\U000102ff\U00010324-\U0001032f\U0001034b-\U0001034f\U0001037b-\U0001037f\U0001039e-\U0001039e\U000103c4-\U000103c7\U000103d6-\U000103ff\U0001049e-\U0001049f\U000104aa-\U000104ff\U00010528-\U0001052f\U00010564-\U0001056e\U00010570-\U000105ff\U00010737-\U0001073f\U00010756-\U0001075f\U00010768-\U000107ff\U00010806-\U00010807\U00010809-\U00010809\U00010836-\U00010836\U00010839-\U0001083b\U0001083d-\U0001083e\U00010856-\U00010856\U0001089f-\U000108a6\U000108b0-\U000108ff\U0001091c-\U0001091e\U0001093a-\U0001093e\U00010940-\U0001097f\U000109b8-\U000109bd\U000109c0-\U000109ff\U00010a04-\U00010a04\U00010a07-\U00010a0b\U00010a14-\U00010a14\U00010a18-\U00010a18\U00010a34-\U00010a37\U00010a3b-\U00010a3e\U00010a48-\U00010a4f\U00010a59-\U00010a5f\U00010aa0-\U00010abf\U00010ae7-\U00010aea\U00010af7-\U00010aff\U00010b36-\U00010b38\U00010b56-\U00010b57\U00010b73-\U00010b77\U00010b92-\U00010b98\U00010b9d-\U00010ba8\U00010bb0-\U00010bff\U00010c49-\U00010e5f\U00010e7f-\U00010fff\U0001104e-\U00011051\U00011070-\U0001107e\U000110bd-\U000110bd\U000110c2-\U000110cf\U000110e9-\U000110ef\U000110fa-\U000110ff\U00011135-\U00011135\U00011144-\U0001114f\U00011177-\U0001117f\U000111c9-\U000111cc\U000111ce-\U000111cf\U000111db-\U000111e0\U000111f5-\U000111ff\U00011212-\U00011212\U0001123e-\U000112af\U000112eb-\U000112ef\U000112fa-\U00011300\U00011304-\U00011304\U0001130d-\U0001130e\U00011311-\U00011312\U00011329-\U00011329\U00011331-\U00011331\U00011334-\U00011334\U0001133a-\U0001133b\U00011345-\U00011346\U00011349-\U0001134a\U0001134e-\U00011356\U00011358-\U0001135c\U00011364-\U00011365\U0001136d-\U0001136f\U00011375-\U0001147f\U000114c8-\U000114cf\U000114da-\U0001157f\U000115b6-\U000115b7\U000115ca-\U000115ff\U00011645-\U0001164f\U0001165a-\U0001167f\U000116b8-\U000116bf\U000116ca-\U0001189f\U000118f3-\U000118fe\U00011900-\U00011abf\U00011af9-\U00011fff\U00012399-\U000123ff\U0001246f-\U0001246f\U00012475-\U00012fff\U0001342f-\U000167ff\U00016a39-\U00016a3f\U00016a5f-\U00016a5f\U00016a6a-\U00016a6d\U00016a70-\U00016acf\U00016aee-\U00016aef\U00016af6-\U00016aff\U00016b46-\U00016b4f\U00016b5a-\U00016b5a\U00016b62-\U00016b62\U00016b78-\U00016b7c\U00016b90-\U00016eff\U00016f45-\U00016f4f\U00016f7f-\U00016f8e\U00016fa0-\U0001afff\U0001b002-\U0001bbff\U0001bc6b-\U0001bc6f\U0001bc7d-\U0001bc7f\U0001bc89-\U0001bc8f\U0001bc9a-\U0001bc9b\U0001bca0-\U0001cfff\U0001d0f6-\U0001d0ff\U0001d127-\U0001d128\U0001d173-\U0001d17a\U0001d1de-\U0001d1ff\U0001d246-\U0001d2ff\U0001d357-\U0001d35f\U0001d372-\U0001d3ff\U0001d455-\U0001d455\U0001d49d-\U0001d49d\U0001d4a0-\U0001d4a1\U0001d4a3-\U0001d4a4\U0001d4a7-\U0001d4a8\U0001d4ad-\U0001d4ad\U0001d4ba-\U0001d4ba\U0001d4bc-\U0001d4bc\U0001d4c4-\U0001d4c4\U0001d506-\U0001d506\U0001d50b-\U0001d50c\U0001d515-\U0001d515\U0001d51d-\U0001d51d\U0001d53a-\U0001d53a\U0001d53f-\U0001d53f\U0001d545-\U0001d545\U0001d547-\U0001d549\U0001d551-\U0001d551\U0001d6a6-\U0001d6a7\U0001d7cc-\U0001d7cd\U0001d800-\U0001e7ff\U0001e8c5-\U0001e8c6\U0001e8d7-\U0001edff\U0001ee04-\U0001ee04\U0001ee20-\U0001ee20\U0001ee23-\U0001ee23\U0001ee25-\U0001ee26\U0001ee28-\U0001ee28\U0001ee33-\U0001ee33\U0001ee38-\U0001ee38\U0001ee3a-\U0001ee3a\U0001ee3c-\U0001ee41\U0001ee43-\U0001ee46\U0001ee48-\U0001ee48\U0001ee4a-\U0001ee4a\U0001ee4c-\U0001ee4c\U0001ee50-\U0001ee50\U0001ee53-\U0001ee53\U0001ee55-\U0001ee56\U0001ee58-\U0001ee58\U0001ee5a-\U0001ee5a\U0001ee5c-\U0001ee5c\U0001ee5e-\U0001ee5e\U0001ee60-\U0001ee60\U0001ee63-\U0001ee63\U0001ee65-\U0001ee66\U0001ee6b-\U0001ee6b\U0001ee73-\U0001ee73\U0001ee78-\U0001ee78\U0001ee7d-\U0001ee7d\U0001ee7f-\U0001ee7f\U0001ee8a-\U0001ee8a\U0001ee9c-\U0001eea0\U0001eea4-\U0001eea4\U0001eeaa-\U0001eeaa\U0001eebc-\U0001eeef\U0001eef2-\U0001efff\U0001f02c-\U0001f02f\U0001f094-\U0001f09f\U0001f0af-\U0001f0b0\U0001f0c0-\U0001f0c0\U0001f0d0-\U0001f0d0\U0001f0f6-\U0001f0ff\U0001f10d-\U0001f10f\U0001f12f-\U0001f12f\U0001f16c-\U0001f16f\U0001f19b-\U0001f1e5\U0001f203-\U0001f20f\U0001f23b-\U0001f23f\U0001f249-\U0001f24f\U0001f252-\U0001f2ff\U0001f32d-\U0001f32f\U0001f37e-\U0001f37f\U0001f3cf-\U0001f3d3\U0001f3f8-\U0001f3ff\U0001f4ff-\U0001f4ff\U0001f54b-\U0001f54f\U0001f57a-\U0001f57a\U0001f5a4-\U0001f5a4\U0001f643-\U0001f644\U0001f6d0-\U0001f6df\U0001f6ed-\U0001f6ef\U0001f6f4-\U0001f6ff\U0001f774-\U0001f77f\U0001f7d5-\U0001f7ff\U0001f80c-\U0001f80f\U0001f848-\U0001f84f\U0001f85a-\U0001f85f\U0001f888-\U0001f88f\U0001f8ae-\U0001ffff\U0002a6d7-\U0002a6ff\U0002b735-\U0002b73f\U0002b81e-\U0002f7ff\U0002fa1e-\U000e00ff\U000e01f0-\U0010ffff]; -Cc = [\x00-\x1f\x7f-\x9f]; -Cf = [\xad-\xad\u0600-\u0605\u061c-\u061c\u06dd-\u06dd\u070f-\u070f\u180e-\u180e\u200b-\u200f\u202a-\u202e\u2060-\u2064\u2066-\u206f\ufeff-\ufeff\ufff9-\ufffb\U000110bd-\U000110bd\U0001bca0-\U0001bca3\U0001d173-\U0001d17a\U000e0001-\U000e0001\U000e0020-\U000e007f]; -Co = [\ue000-\uf8ff\U000f0000-\U000ffffd\U00100000-\U0010fffd]; -Cs = [\ud800-\udfff]; -Cn = [\u0378-\u0379\u0380-\u0383\u038b-\u038b\u038d-\u038d\u03a2-\u03a2\u0530-\u0530\u0557-\u0558\u0560-\u0560\u0588-\u0588\u058b-\u058c\u0590-\u0590\u05c8-\u05cf\u05eb-\u05ef\u05f5-\u05ff\u061d-\u061d\u070e-\u070e\u074b-\u074c\u07b2-\u07bf\u07fb-\u07ff\u082e-\u082f\u083f-\u083f\u085c-\u085d\u085f-\u089f\u08b3-\u08e3\u0984-\u0984\u098d-\u098e\u0991-\u0992\u09a9-\u09a9\u09b1-\u09b1\u09b3-\u09b5\u09ba-\u09bb\u09c5-\u09c6\u09c9-\u09ca\u09cf-\u09d6\u09d8-\u09db\u09de-\u09de\u09e4-\u09e5\u09fc-\u0a00\u0a04-\u0a04\u0a0b-\u0a0e\u0a11-\u0a12\u0a29-\u0a29\u0a31-\u0a31\u0a34-\u0a34\u0a37-\u0a37\u0a3a-\u0a3b\u0a3d-\u0a3d\u0a43-\u0a46\u0a49-\u0a4a\u0a4e-\u0a50\u0a52-\u0a58\u0a5d-\u0a5d\u0a5f-\u0a65\u0a76-\u0a80\u0a84-\u0a84\u0a8e-\u0a8e\u0a92-\u0a92\u0aa9-\u0aa9\u0ab1-\u0ab1\u0ab4-\u0ab4\u0aba-\u0abb\u0ac6-\u0ac6\u0aca-\u0aca\u0ace-\u0acf\u0ad1-\u0adf\u0ae4-\u0ae5\u0af2-\u0b00\u0b04-\u0b04\u0b0d-\u0b0e\u0b11-\u0b12\u0b29-\u0b29\u0b31-\u0b31\u0b34-\u0b34\u0b3a-\u0b3b\u0b45-\u0b46\u0b49-\u0b4a\u0b4e-\u0b55\u0b58-\u0b5b\u0b5e-\u0b5e\u0b64-\u0b65\u0b78-\u0b81\u0b84-\u0b84\u0b8b-\u0b8d\u0b91-\u0b91\u0b96-\u0b98\u0b9b-\u0b9b\u0b9d-\u0b9d\u0ba0-\u0ba2\u0ba5-\u0ba7\u0bab-\u0bad\u0bba-\u0bbd\u0bc3-\u0bc5\u0bc9-\u0bc9\u0bce-\u0bcf\u0bd1-\u0bd6\u0bd8-\u0be5\u0bfb-\u0bff\u0c04-\u0c04\u0c0d-\u0c0d\u0c11-\u0c11\u0c29-\u0c29\u0c3a-\u0c3c\u0c45-\u0c45\u0c49-\u0c49\u0c4e-\u0c54\u0c57-\u0c57\u0c5a-\u0c5f\u0c64-\u0c65\u0c70-\u0c77\u0c80-\u0c80\u0c84-\u0c84\u0c8d-\u0c8d\u0c91-\u0c91\u0ca9-\u0ca9\u0cb4-\u0cb4\u0cba-\u0cbb\u0cc5-\u0cc5\u0cc9-\u0cc9\u0cce-\u0cd4\u0cd7-\u0cdd\u0cdf-\u0cdf\u0ce4-\u0ce5\u0cf0-\u0cf0\u0cf3-\u0d00\u0d04-\u0d04\u0d0d-\u0d0d\u0d11-\u0d11\u0d3b-\u0d3c\u0d45-\u0d45\u0d49-\u0d49\u0d4f-\u0d56\u0d58-\u0d5f\u0d64-\u0d65\u0d76-\u0d78\u0d80-\u0d81\u0d84-\u0d84\u0d97-\u0d99\u0db2-\u0db2\u0dbc-\u0dbc\u0dbe-\u0dbf\u0dc7-\u0dc9\u0dcb-\u0dce\u0dd5-\u0dd5\u0dd7-\u0dd7\u0de0-\u0de5\u0df0-\u0df1\u0df5-\u0e00\u0e3b-\u0e3e\u0e5c-\u0e80\u0e83-\u0e83\u0e85-\u0e86\u0e89-\u0e89\u0e8b-\u0e8c\u0e8e-\u0e93\u0e98-\u0e98\u0ea0-\u0ea0\u0ea4-\u0ea4\u0ea6-\u0ea6\u0ea8-\u0ea9\u0eac-\u0eac\u0eba-\u0eba\u0ebe-\u0ebf\u0ec5-\u0ec5\u0ec7-\u0ec7\u0ece-\u0ecf\u0eda-\u0edb\u0ee0-\u0eff\u0f48-\u0f48\u0f6d-\u0f70\u0f98-\u0f98\u0fbd-\u0fbd\u0fcd-\u0fcd\u0fdb-\u0fff\u10c6-\u10c6\u10c8-\u10cc\u10ce-\u10cf\u1249-\u1249\u124e-\u124f\u1257-\u1257\u1259-\u1259\u125e-\u125f\u1289-\u1289\u128e-\u128f\u12b1-\u12b1\u12b6-\u12b7\u12bf-\u12bf\u12c1-\u12c1\u12c6-\u12c7\u12d7-\u12d7\u1311-\u1311\u1316-\u1317\u135b-\u135c\u137d-\u137f\u139a-\u139f\u13f5-\u13ff\u169d-\u169f\u16f9-\u16ff\u170d-\u170d\u1715-\u171f\u1737-\u173f\u1754-\u175f\u176d-\u176d\u1771-\u1771\u1774-\u177f\u17de-\u17df\u17ea-\u17ef\u17fa-\u17ff\u180f-\u180f\u181a-\u181f\u1878-\u187f\u18ab-\u18af\u18f6-\u18ff\u191f-\u191f\u192c-\u192f\u193c-\u193f\u1941-\u1943\u196e-\u196f\u1975-\u197f\u19ac-\u19af\u19ca-\u19cf\u19db-\u19dd\u1a1c-\u1a1d\u1a5f-\u1a5f\u1a7d-\u1a7e\u1a8a-\u1a8f\u1a9a-\u1a9f\u1aae-\u1aaf\u1abf-\u1aff\u1b4c-\u1b4f\u1b7d-\u1b7f\u1bf4-\u1bfb\u1c38-\u1c3a\u1c4a-\u1c4c\u1c80-\u1cbf\u1cc8-\u1ccf\u1cf7-\u1cf7\u1cfa-\u1cff\u1df6-\u1dfb\u1f16-\u1f17\u1f1e-\u1f1f\u1f46-\u1f47\u1f4e-\u1f4f\u1f58-\u1f58\u1f5a-\u1f5a\u1f5c-\u1f5c\u1f5e-\u1f5e\u1f7e-\u1f7f\u1fb5-\u1fb5\u1fc5-\u1fc5\u1fd4-\u1fd5\u1fdc-\u1fdc\u1ff0-\u1ff1\u1ff5-\u1ff5\u1fff-\u1fff\u2065-\u2065\u2072-\u2073\u208f-\u208f\u209d-\u209f\u20be-\u20cf\u20f1-\u20ff\u218a-\u218f\u23fb-\u23ff\u2427-\u243f\u244b-\u245f\u2b74-\u2b75\u2b96-\u2b97\u2bba-\u2bbc\u2bc9-\u2bc9\u2bd2-\u2bff\u2c2f-\u2c2f\u2c5f-\u2c5f\u2cf4-\u2cf8\u2d26-\u2d26\u2d28-\u2d2c\u2d2e-\u2d2f\u2d68-\u2d6e\u2d71-\u2d7e\u2d97-\u2d9f\u2da7-\u2da7\u2daf-\u2daf\u2db7-\u2db7\u2dbf-\u2dbf\u2dc7-\u2dc7\u2dcf-\u2dcf\u2dd7-\u2dd7\u2ddf-\u2ddf\u2e43-\u2e7f\u2e9a-\u2e9a\u2ef4-\u2eff\u2fd6-\u2fef\u2ffc-\u2fff\u3040-\u3040\u3097-\u3098\u3100-\u3104\u312e-\u3130\u318f-\u318f\u31bb-\u31bf\u31e4-\u31ef\u321f-\u321f\u32ff-\u32ff\u4db6-\u4dbf\u9fcd-\u9fff\ua48d-\ua48f\ua4c7-\ua4cf\ua62c-\ua63f\ua69e-\ua69e\ua6f8-\ua6ff\ua78f-\ua78f\ua7ae-\ua7af\ua7b2-\ua7f6\ua82c-\ua82f\ua83a-\ua83f\ua878-\ua87f\ua8c5-\ua8cd\ua8da-\ua8df\ua8fc-\ua8ff\ua954-\ua95e\ua97d-\ua97f\ua9ce-\ua9ce\ua9da-\ua9dd\ua9ff-\ua9ff\uaa37-\uaa3f\uaa4e-\uaa4f\uaa5a-\uaa5b\uaac3-\uaada\uaaf7-\uab00\uab07-\uab08\uab0f-\uab10\uab17-\uab1f\uab27-\uab27\uab2f-\uab2f\uab60-\uab63\uab66-\uabbf\uabee-\uabef\uabfa-\uabff\ud7a4-\ud7af\ud7c7-\ud7ca\ud7fc-\ud7ff\ufa6e-\ufa6f\ufada-\ufaff\ufb07-\ufb12\ufb18-\ufb1c\ufb37-\ufb37\ufb3d-\ufb3d\ufb3f-\ufb3f\ufb42-\ufb42\ufb45-\ufb45\ufbc2-\ufbd2\ufd40-\ufd4f\ufd90-\ufd91\ufdc8-\ufdef\ufdfe-\ufdff\ufe1a-\ufe1f\ufe2e-\ufe2f\ufe53-\ufe53\ufe67-\ufe67\ufe6c-\ufe6f\ufe75-\ufe75\ufefd-\ufefe\uff00-\uff00\uffbf-\uffc1\uffc8-\uffc9\uffd0-\uffd1\uffd8-\uffd9\uffdd-\uffdf\uffe7-\uffe7\uffef-\ufff8\ufffe-\U0000ffff\U0001000c-\U0001000c\U00010027-\U00010027\U0001003b-\U0001003b\U0001003e-\U0001003e\U0001004e-\U0001004f\U0001005e-\U0001007f\U000100fb-\U000100ff\U00010103-\U00010106\U00010134-\U00010136\U0001018d-\U0001018f\U0001019c-\U0001019f\U000101a1-\U000101cf\U000101fe-\U0001027f\U0001029d-\U0001029f\U000102d1-\U000102df\U000102fc-\U000102ff\U00010324-\U0001032f\U0001034b-\U0001034f\U0001037b-\U0001037f\U0001039e-\U0001039e\U000103c4-\U000103c7\U000103d6-\U000103ff\U0001049e-\U0001049f\U000104aa-\U000104ff\U00010528-\U0001052f\U00010564-\U0001056e\U00010570-\U000105ff\U00010737-\U0001073f\U00010756-\U0001075f\U00010768-\U000107ff\U00010806-\U00010807\U00010809-\U00010809\U00010836-\U00010836\U00010839-\U0001083b\U0001083d-\U0001083e\U00010856-\U00010856\U0001089f-\U000108a6\U000108b0-\U000108ff\U0001091c-\U0001091e\U0001093a-\U0001093e\U00010940-\U0001097f\U000109b8-\U000109bd\U000109c0-\U000109ff\U00010a04-\U00010a04\U00010a07-\U00010a0b\U00010a14-\U00010a14\U00010a18-\U00010a18\U00010a34-\U00010a37\U00010a3b-\U00010a3e\U00010a48-\U00010a4f\U00010a59-\U00010a5f\U00010aa0-\U00010abf\U00010ae7-\U00010aea\U00010af7-\U00010aff\U00010b36-\U00010b38\U00010b56-\U00010b57\U00010b73-\U00010b77\U00010b92-\U00010b98\U00010b9d-\U00010ba8\U00010bb0-\U00010bff\U00010c49-\U00010e5f\U00010e7f-\U00010fff\U0001104e-\U00011051\U00011070-\U0001107e\U000110c2-\U000110cf\U000110e9-\U000110ef\U000110fa-\U000110ff\U00011135-\U00011135\U00011144-\U0001114f\U00011177-\U0001117f\U000111c9-\U000111cc\U000111ce-\U000111cf\U000111db-\U000111e0\U000111f5-\U000111ff\U00011212-\U00011212\U0001123e-\U000112af\U000112eb-\U000112ef\U000112fa-\U00011300\U00011304-\U00011304\U0001130d-\U0001130e\U00011311-\U00011312\U00011329-\U00011329\U00011331-\U00011331\U00011334-\U00011334\U0001133a-\U0001133b\U00011345-\U00011346\U00011349-\U0001134a\U0001134e-\U00011356\U00011358-\U0001135c\U00011364-\U00011365\U0001136d-\U0001136f\U00011375-\U0001147f\U000114c8-\U000114cf\U000114da-\U0001157f\U000115b6-\U000115b7\U000115ca-\U000115ff\U00011645-\U0001164f\U0001165a-\U0001167f\U000116b8-\U000116bf\U000116ca-\U0001189f\U000118f3-\U000118fe\U00011900-\U00011abf\U00011af9-\U00011fff\U00012399-\U000123ff\U0001246f-\U0001246f\U00012475-\U00012fff\U0001342f-\U000167ff\U00016a39-\U00016a3f\U00016a5f-\U00016a5f\U00016a6a-\U00016a6d\U00016a70-\U00016acf\U00016aee-\U00016aef\U00016af6-\U00016aff\U00016b46-\U00016b4f\U00016b5a-\U00016b5a\U00016b62-\U00016b62\U00016b78-\U00016b7c\U00016b90-\U00016eff\U00016f45-\U00016f4f\U00016f7f-\U00016f8e\U00016fa0-\U0001afff\U0001b002-\U0001bbff\U0001bc6b-\U0001bc6f\U0001bc7d-\U0001bc7f\U0001bc89-\U0001bc8f\U0001bc9a-\U0001bc9b\U0001bca4-\U0001cfff\U0001d0f6-\U0001d0ff\U0001d127-\U0001d128\U0001d1de-\U0001d1ff\U0001d246-\U0001d2ff\U0001d357-\U0001d35f\U0001d372-\U0001d3ff\U0001d455-\U0001d455\U0001d49d-\U0001d49d\U0001d4a0-\U0001d4a1\U0001d4a3-\U0001d4a4\U0001d4a7-\U0001d4a8\U0001d4ad-\U0001d4ad\U0001d4ba-\U0001d4ba\U0001d4bc-\U0001d4bc\U0001d4c4-\U0001d4c4\U0001d506-\U0001d506\U0001d50b-\U0001d50c\U0001d515-\U0001d515\U0001d51d-\U0001d51d\U0001d53a-\U0001d53a\U0001d53f-\U0001d53f\U0001d545-\U0001d545\U0001d547-\U0001d549\U0001d551-\U0001d551\U0001d6a6-\U0001d6a7\U0001d7cc-\U0001d7cd\U0001d800-\U0001e7ff\U0001e8c5-\U0001e8c6\U0001e8d7-\U0001edff\U0001ee04-\U0001ee04\U0001ee20-\U0001ee20\U0001ee23-\U0001ee23\U0001ee25-\U0001ee26\U0001ee28-\U0001ee28\U0001ee33-\U0001ee33\U0001ee38-\U0001ee38\U0001ee3a-\U0001ee3a\U0001ee3c-\U0001ee41\U0001ee43-\U0001ee46\U0001ee48-\U0001ee48\U0001ee4a-\U0001ee4a\U0001ee4c-\U0001ee4c\U0001ee50-\U0001ee50\U0001ee53-\U0001ee53\U0001ee55-\U0001ee56\U0001ee58-\U0001ee58\U0001ee5a-\U0001ee5a\U0001ee5c-\U0001ee5c\U0001ee5e-\U0001ee5e\U0001ee60-\U0001ee60\U0001ee63-\U0001ee63\U0001ee65-\U0001ee66\U0001ee6b-\U0001ee6b\U0001ee73-\U0001ee73\U0001ee78-\U0001ee78\U0001ee7d-\U0001ee7d\U0001ee7f-\U0001ee7f\U0001ee8a-\U0001ee8a\U0001ee9c-\U0001eea0\U0001eea4-\U0001eea4\U0001eeaa-\U0001eeaa\U0001eebc-\U0001eeef\U0001eef2-\U0001efff\U0001f02c-\U0001f02f\U0001f094-\U0001f09f\U0001f0af-\U0001f0b0\U0001f0c0-\U0001f0c0\U0001f0d0-\U0001f0d0\U0001f0f6-\U0001f0ff\U0001f10d-\U0001f10f\U0001f12f-\U0001f12f\U0001f16c-\U0001f16f\U0001f19b-\U0001f1e5\U0001f203-\U0001f20f\U0001f23b-\U0001f23f\U0001f249-\U0001f24f\U0001f252-\U0001f2ff\U0001f32d-\U0001f32f\U0001f37e-\U0001f37f\U0001f3cf-\U0001f3d3\U0001f3f8-\U0001f3ff\U0001f4ff-\U0001f4ff\U0001f54b-\U0001f54f\U0001f57a-\U0001f57a\U0001f5a4-\U0001f5a4\U0001f643-\U0001f644\U0001f6d0-\U0001f6df\U0001f6ed-\U0001f6ef\U0001f6f4-\U0001f6ff\U0001f774-\U0001f77f\U0001f7d5-\U0001f7ff\U0001f80c-\U0001f80f\U0001f848-\U0001f84f\U0001f85a-\U0001f85f\U0001f888-\U0001f88f\U0001f8ae-\U0001ffff\U0002a6d7-\U0002a6ff\U0002b735-\U0002b73f\U0002b81e-\U0002f7ff\U0002fa1e-\U000e0000\U000e0002-\U000e001f\U000e0080-\U000e00ff\U000e01f0-\U000effff\U000ffffe-\U000fffff\U0010fffe-\U0010ffff]; -*/