]> granicus.if.org Git - re2c/commitdiff
Initial support of EOF rule.
authorUlya Trofimovich <skvadrik@gmail.com>
Sat, 22 Dec 2018 23:34:41 +0000 (23:34 +0000)
committerUlya Trofimovich <skvadrik@gmail.com>
Sat, 22 Dec 2018 23:48:26 +0000 (23:48 +0000)
24 files changed:
re2c/bootstrap/src/ast/lex.cc
re2c/bootstrap/src/ast/lex.h
re2c/bootstrap/src/ast/lex_conf.cc
re2c/bootstrap/src/conf/parse_opts.cc
re2c/src/adfa/adfa.cc
re2c/src/adfa/adfa.h
re2c/src/adfa/prepare.cc
re2c/src/ast/ast.h
re2c/src/ast/lex.re
re2c/src/ast/lex_conf.re
re2c/src/ast/normalize.cc
re2c/src/ast/parser.ypp
re2c/src/ast/validate.cc
re2c/src/code/emit.h
re2c/src/code/emit_action.cc
re2c/src/code/emit_dfa.cc
re2c/src/code/go.h
re2c/src/code/go_construct.cc
re2c/src/code/go_emit.cc
re2c/src/compile.cc
re2c/src/conf/opt.cc
re2c/src/conf/opt.h
re2c/src/re/split_charset.cc
re2c/test/encodings/unicode_categories.re.inc [deleted file]

index 69f4ae3c6e2431ef40b80fcf180d408b77541257..bbaeee1827f11f9cc1bdfd71f48a1dd07c8b30db 100644 (file)
@@ -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 <stddef.h>
@@ -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<size_t>(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<uint32_t>::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<uint8_t>(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<uint8_t>(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<uint8_t>('-'); }
-#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<uint8_t>('\\'); }
-#line 2830 "src/ast/lex.cc"
+#line 2831 "src/ast/lex.cc"
 yy476:
        ++YYCURSOR;
 #line 573 "../src/ast/lex.re"
        { return static_cast<uint8_t>(']'); }
-#line 2835 "src/ast/lex.cc"
+#line 2836 "src/ast/lex.cc"
 yy478:
        ++YYCURSOR;
 #line 564 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\a'); }
-#line 2840 "src/ast/lex.cc"
+#line 2841 "src/ast/lex.cc"
 yy480:
        ++YYCURSOR;
 #line 565 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\b'); }
-#line 2845 "src/ast/lex.cc"
+#line 2846 "src/ast/lex.cc"
 yy482:
        ++YYCURSOR;
 #line 566 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\f'); }
-#line 2850 "src/ast/lex.cc"
+#line 2851 "src/ast/lex.cc"
 yy484:
        ++YYCURSOR;
 #line 567 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\n'); }
-#line 2855 "src/ast/lex.cc"
+#line 2856 "src/ast/lex.cc"
 yy486:
        ++YYCURSOR;
 #line 568 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\r'); }
-#line 2860 "src/ast/lex.cc"
+#line 2861 "src/ast/lex.cc"
 yy488:
        ++YYCURSOR;
 #line 569 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\t'); }
-#line 2865 "src/ast/lex.cc"
+#line 2866 "src/ast/lex.cc"
 yy490:
        ++YYCURSOR;
 #line 570 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\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<uint8_t>(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<uint8_t>(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<uint8_t>('\\'); }
-#line 3147 "src/ast/lex.cc"
+#line 3148 "src/ast/lex.cc"
 yy528:
        ++YYCURSOR;
 #line 600 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\a'); }
-#line 3152 "src/ast/lex.cc"
+#line 3153 "src/ast/lex.cc"
 yy530:
        ++YYCURSOR;
 #line 601 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\b'); }
-#line 3157 "src/ast/lex.cc"
+#line 3158 "src/ast/lex.cc"
 yy532:
        ++YYCURSOR;
 #line 602 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\f'); }
-#line 3162 "src/ast/lex.cc"
+#line 3163 "src/ast/lex.cc"
 yy534:
        ++YYCURSOR;
 #line 603 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\n'); }
-#line 3167 "src/ast/lex.cc"
+#line 3168 "src/ast/lex.cc"
 yy536:
        ++YYCURSOR;
 #line 604 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\r'); }
-#line 3172 "src/ast/lex.cc"
+#line 3173 "src/ast/lex.cc"
 yy538:
        ++YYCURSOR;
 #line 605 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\t'); }
-#line 3177 "src/ast/lex.cc"
+#line 3178 "src/ast/lex.cc"
 yy540:
        ++YYCURSOR;
 #line 606 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\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);
index add8cb16e9413378b045bfcf7526cb10b1425a0a..f83447c046afc90d2d1bd9102aea3ad868f03cb2 100644 (file)
@@ -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 <string.h>
 
index f22779e8df96860644dbcc30c2f2b7eec76fc19f..ba90734f6755a88689f2eb2ba3bf8ad564e57d54 100644 (file)
@@ -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 <string>
@@ -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<int>(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<uint32_t>(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<uint32_t> (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<uint32_t> (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 ();
index 9c5a8ebdd8e3b24672ac1637e2349c45cf907d68..eb2dee34fa925e8595badac4d6965025a249a6e1 100644 (file)
@@ -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"
index 4ae81005fe2dfa2458cf35febbf4e2cc9158c828..7afa7b52f2db40fede08405b26d1c79e927dd4f8 100644 (file)
@@ -16,6 +16,11 @@ namespace re2c
 
 const size_t Initial::NOSAVE = std::numeric_limits<size_t>::max();
 
+static bool is_eof(const opt_t *opts, uint32_t ub)
+{
+    return opts->eof != NOEOF && static_cast<uint32_t>(opts->eof) == ub;
+}
+
 DFA::DFA
     ( const dfa_t &dfa
     , const std::vector<size_t> &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<Span>(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
index 00c28739bb37ff217d6960609661e2d2cb51d56f..1918f44656cb192baf4dcfe40afcfef26d2810f5 100644 (file)
@@ -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<State*> finstates;
     const tcid_t tags0;
     std::vector<uint32_t> &charset;
     std::valarray<Rule> &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<size_t> &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<label_t> &used, label_t start, label_t initial, bool force_start, bool fFlag) const;
     void emit_body (Output &, uint32_t &, const std::set<label_t> & used_labels, label_t initial) const;
index a9032d67a286d27112511eb401f27d52be7312aa..1ec034306106f9e49584bb78ccc3ee5f044ffbc0 100644 (file)
@@ -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<uint32_t>(x - x0);
 }
 
-void DFA::findBaseState()
+void DFA::findBaseState(const opt_t *opts)
 {
     Span *span = allocate<Span> (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<State*> 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<const State*, tcid_t> acc(rule2state[s->rule], s->fall_tags);
+                const std::pair<const State*, tcid_t> 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) {
index a1f5248f4fbb5fe8855da4170c634921ec642ae5..58a9739d3964621d2a61c9e43cf71ecdbc4ccf93 100644 (file)
@@ -108,10 +108,11 @@ struct spec_t
     std::string name;
     std::vector<ASTRule> rules;
     std::vector<const Code*> defs;
+    std::vector<const Code*> eofs;
     std::vector<const Code*> setup;
 
     explicit spec_t(const std::string &n):
-        name(n), rules(), defs(), setup() {}
+        name(n), rules(), defs(), eofs(), setup() {}
 };
 
 typedef std::vector<spec_t> 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
index 11232a78e5bccdb91ce81d00d1f565e90c79bf3e..3d433f08b81dfeae4197d6855d7b6f4381194f1b 100644 (file)
@@ -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)) {
index 3b43a95a9b3d3e860ec0d841819772d68c967b57..979280e57fd53d8f4144f91a65a54022915e721a 100644 (file)
@@ -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<uint32_t>(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; }
index 959694fc3bfe27d778110d77413c96b7724f1e80..424619f1ad3c4cec1266b269700a53291ab84eb1 100644 (file)
@@ -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());
         }
 
index 287d2d32d6478233cfffa9a7e95de2ad5073d464..660f88ae4cfcca05d7387d77fb470d47b72c5c0e 100644 (file)
@@ -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);
index 1f735d8ce09e71901fcc315179c06f286c0f0f79..647b95dfbddf00ef049f00b1d938c511099c90e2 100644 (file)
@@ -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()
index 229e757ae0030edbc7390e71246a4ef3ea5f1fc0..87fa8ff60bcd811ce3502dce1544171c7da720ac 100644 (file)
@@ -9,9 +9,9 @@ namespace re2c {
 typedef std::vector<std::string> code_lines_t;
 
 void emit_action(Output &o, uint32_t ind, const DFA &dfa, const State *s, const std::set<label_t> &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);
index 8a079b259eb45738608fbf5599ac88a9ba3c2944..c70e35e1ca5a11c1192290ea2ffae398b6523607 100644 (file)
@@ -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<label_t> &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
index 968dcef6fade286e0721479b55275d9106107aae..287e677e40b5ffe216a98abfc6748ec1426228da 100644 (file)
@@ -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<label_t> & used, label_t start,
     label_t initial, bool force_start, bool fFlag) const
 {
@@ -70,8 +86,10 @@ void DFA::count_used_labels (std::set<label_t> & used, label_t start,
 void DFA::emit_body(Output &o, uint32_t& ind,
     const std::set<label_t> &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");
index a693a54e4ea2b2f27df1014b14f283d5ef32e0e9..887d4040809eeb7dd5ebd9fdf0d87d27fd635820 100644 (file)
@@ -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<label_t> &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<label_t> & 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<label_t> &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<label_t> & 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<label_t> & 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<label_t> & 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<label_t> & 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<label_t> & used) const;
 
     Go (const Go & g)
index d39408040f23b360aeb2b0a1ac3ba9ab7ee92c08..aa44c3dfedd08160a11c054421ca17bb5b14e96a 100644 (file)
@@ -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<Span> (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;
 }
 
index d1329eccea4e0fe0ecec9640779e061badd99e23..ef6ac0db919252395a15a2705d54894f5c359e1e 100644 (file)
@@ -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);
     }
 }
 
index 5d8f170b84a88c7a80891812dc15467f2b8b83c7..bb756404851b127bb2224a2967275c464f5d1434 100644 (file)
@@ -48,9 +48,8 @@ static smart_ptr<DFA> ast_to_dfa(const spec_t &spec, Output &output)
     const opt_t *opts = output.block().opts;
     Warn &warn = output.warn;
     const std::vector<ASTRule> &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<DFA> 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<size_t> 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
index 24f1dcaac3e09ddde3800723d61e1040489a174e..3955d2785a50e4799764ddcf16bc477bc5210b08 100644 (file)
@@ -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;
index 5cd8b5d5485f41b6e267becb2d9524fe67c5e9f3..5def82322e552bf015f7bca5abfbab207e543919 100644 (file)
@@ -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") \
index fda1ee577ad39fa512278478c21908be1c1be12e..a4e76200db790425fdb060011627a975033ff5f4 100644 (file)
@@ -3,6 +3,7 @@
 #include <stack>
 #include <vector>
 
+#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 (file)
index ab449ff..0000000
+++ /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];
-*/