]> granicus.if.org Git - re2c/commitdiff
Added option '--posix-captures'.
authorUlya Trofimovich <skvadrik@gmail.com>
Fri, 3 Mar 2017 02:06:43 +0000 (02:06 +0000)
committerUlya Trofimovich <skvadrik@gmail.com>
Fri, 3 Mar 2017 02:06:43 +0000 (02:06 +0000)
With this option re2c interprets all parenthetised subexpressions
as POSIX capturing groups and returns submatch according to POSIX
disambiguation rules (in variables 'yynmatch' and 'yypmatch', local
to each action).

The algorithm for disambiguation was invented by Christopher Kuklewicz.

28 files changed:
re2c/bootstrap/src/conf/parse_opts.cc
re2c/bootstrap/src/parse/lex.cc
re2c/bootstrap/src/parse/lex_conf.cc
re2c/bootstrap/src/parse/parser.cc
re2c/src/codegen/emit_action.cc
re2c/src/conf/opt.cc
re2c/src/conf/opt.h
re2c/src/conf/parse_opts.re
re2c/src/ir/dfa/closure.cc
re2c/src/ir/dfa/closure.h
re2c/src/ir/dfa/determinization.cc
re2c/src/ir/dfa/dump.cc
re2c/src/ir/dfa/find_state.cc
re2c/src/ir/dfa/find_state.h
re2c/src/ir/dfa/tagpool.cc
re2c/src/ir/dfa/tagpool.h
re2c/src/ir/dfa/tagtree.cc
re2c/src/ir/dfa/tagtree.h
re2c/src/ir/nfa/dump.cc
re2c/src/ir/nfa/re_to_nfa.cc
re2c/src/ir/re/ast_to_re.cc
re2c/src/ir/re/fixed_tags.cc
re2c/src/ir/regexp/regexp.cc
re2c/src/ir/regexp/regexp.h
re2c/src/ir/rule.h
re2c/src/ir/tag.h
re2c/src/parse/lex_conf.re
re2c/src/parse/parser.ypp

index d5b411190fd8852e7dd05613928aefbc12945e7e..c47f528f182c448979af05e1c2b1cad41696805b 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.16 on Mon Feb 13 12:10:06 2017 */
+/* Generated by re2c 0.16 on Fri Mar  3 02:03:51 2017 */
 #line 1 "../src/conf/parse_opts.re"
 #include "src/codegen/input_api.h"
 #include "src/conf/msg.h"
@@ -1080,12 +1080,13 @@ opt_long:
        case 'i':       goto yy266;
        case 'n':       goto yy267;
        case 'o':       goto yy268;
-       case 'r':       goto yy269;
-       case 's':       goto yy270;
-       case 't':       goto yy271;
-       case 'u':       goto yy272;
-       case 'v':       goto yy273;
-       case 'w':       goto yy274;
+       case 'p':       goto yy269;
+       case 'r':       goto yy270;
+       case 's':       goto yy271;
+       case 't':       goto yy272;
+       case 'u':       goto yy273;
+       case 'v':       goto yy274;
+       case 'w':       goto yy275;
        default:        goto yy258;
        }
 yy258:
@@ -1096,1550 +1097,1611 @@ yy259:
                error ("bad long option: %s", *argv);
                return EXIT_FAIL;
        }
-#line 1100 "src/conf/parse_opts.cc"
+#line 1101 "src/conf/parse_opts.cc"
 yy260:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'i') goto yy275;
+       if (yych == 'i') goto yy276;
        goto yy259;
 yy261:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'a') goto yy277;
-       if (yych == 'o') goto yy278;
+       if (yych == 'a') goto yy278;
+       if (yych == 'o') goto yy279;
        goto yy259;
 yy262:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
        if (yych <= 'f') {
                if (yych <= 'd') goto yy259;
-               if (yych <= 'e') goto yy279;
-               goto yy280;
+               if (yych <= 'e') goto yy280;
+               goto yy281;
        } else {
-               if (yych == 'u') goto yy281;
+               if (yych == 'u') goto yy282;
                goto yy259;
        }
 yy263:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
        if (yych <= 'c') {
-               if (yych == 'a') goto yy282;
+               if (yych == 'a') goto yy283;
                if (yych <= 'b') goto yy259;
-               goto yy283;
+               goto yy284;
        } else {
                if (yych <= 'l') goto yy259;
-               if (yych <= 'm') goto yy284;
-               if (yych <= 'n') goto yy285;
+               if (yych <= 'm') goto yy285;
+               if (yych <= 'n') goto yy286;
                goto yy259;
        }
 yy264:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'l') goto yy286;
+       if (yych == 'l') goto yy287;
        goto yy259;
 yy265:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'e') goto yy287;
+       if (yych == 'e') goto yy288;
        goto yy259;
 yy266:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'n') goto yy288;
+       if (yych == 'n') goto yy289;
        goto yy259;
 yy267:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'e') goto yy289;
-       if (yych == 'o') goto yy290;
+       if (yych == 'e') goto yy290;
+       if (yych == 'o') goto yy291;
        goto yy259;
 yy268:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'u') goto yy291;
+       if (yych == 'u') goto yy292;
        goto yy259;
 yy269:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'e') goto yy292;
+       if (yych == 'o') goto yy293;
        goto yy259;
 yy270:
+       yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
+       if (yych == 'e') goto yy294;
+       goto yy259;
+yy271:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
        if (yych <= 'j') {
-               if (yych == 'i') goto yy293;
+               if (yych == 'i') goto yy295;
                goto yy259;
        } else {
-               if (yych <= 'k') goto yy294;
-               if (yych == 't') goto yy295;
+               if (yych <= 'k') goto yy296;
+               if (yych == 't') goto yy297;
                goto yy259;
        }
-yy271:
-       yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'a') goto yy296;
-       if (yych == 'y') goto yy297;
-       goto yy259;
 yy272:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'n') goto yy298;
-       if (yych == 't') goto yy299;
+       if (yych == 'a') goto yy298;
+       if (yych == 'y') goto yy299;
        goto yy259;
 yy273:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'e') goto yy300;
+       if (yych == 'n') goto yy300;
+       if (yych == 't') goto yy301;
        goto yy259;
 yy274:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'i') goto yy301;
+       if (yych == 'e') goto yy302;
        goto yy259;
 yy275:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy302;
+       yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
+       if (yych == 'i') goto yy303;
+       goto yy259;
 yy276:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 't') goto yy304;
+yy277:
        YYCURSOR = YYMARKER;
        goto yy259;
-yy277:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy303;
-       goto yy276;
 yy278:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'm') goto yy304;
-       goto yy276;
+       if (yych == 's') goto yy305;
+       goto yy277;
 yy279:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'b') goto yy305;
-       goto yy276;
+       if (yych == 'm') goto yy306;
+       goto yy277;
 yy280:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy306;
-       goto yy276;
+       if (yych == 'b') goto yy307;
+       goto yy277;
 yy281:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'm') goto yy307;
-       goto yy276;
+       if (yych == 'a') goto yy308;
+       goto yy277;
 yy282:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'g') goto yy308;
-       goto yy276;
+       if (yych == 'm') goto yy309;
+       goto yy277;
 yy283:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'b') goto yy309;
-       goto yy276;
+       if (yych == 'g') goto yy310;
+       goto yy277;
 yy284:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy310;
-       if (yych == 'p') goto yy311;
-       goto yy276;
+       if (yych == 'b') goto yy311;
+       goto yy277;
 yy285:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'c') goto yy312;
-       goto yy276;
+       if (yych == 'i') goto yy312;
+       if (yych == 'p') goto yy313;
+       goto yy277;
 yy286:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy313;
-       goto yy276;
+       if (yych == 'c') goto yy314;
+       goto yy277;
 yy287:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'l') goto yy314;
-       goto yy276;
+       if (yych == 'e') goto yy315;
+       goto yy277;
 yy288:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'p') goto yy315;
-       goto yy276;
+       if (yych == 'l') goto yy316;
+       goto yy277;
 yy289:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy316;
-       goto yy276;
+       if (yych == 'p') goto yy317;
+       goto yy277;
 yy290:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy317;
-       goto yy276;
+       if (yych == 's') goto yy318;
+       goto yy277;
 yy291:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy318;
-       goto yy276;
+       if (yych == '-') goto yy319;
+       goto yy277;
 yy292:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'u') goto yy319;
-       goto yy276;
+       if (yych == 't') goto yy320;
+       goto yy277;
 yy293:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy320;
-       goto yy276;
+       if (yych == 's') goto yy321;
+       goto yy277;
 yy294:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy321;
-       goto yy276;
+       if (yych == 'u') goto yy322;
+       goto yy277;
 yy295:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy322;
-       if (yych == 'o') goto yy323;
-       goto yy276;
+       if (yych == 'n') goto yy323;
+       goto yy277;
 yy296:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'g') goto yy324;
-       goto yy276;
+       if (yych == 'e') goto yy324;
+       goto yy277;
 yy297:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'p') goto yy325;
-       goto yy276;
+       if (yych == 'a') goto yy325;
+       if (yych == 'o') goto yy326;
+       goto yy277;
 yy298:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy326;
-       goto yy276;
+       if (yych == 'g') goto yy327;
+       goto yy277;
 yy299:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'f') goto yy327;
-       goto yy276;
+       if (yych == 'p') goto yy328;
+       goto yy277;
 yy300:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy328;
-       goto yy276;
+       if (yych == 'i') goto yy329;
+       goto yy277;
 yy301:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'd') goto yy329;
-       goto yy276;
+       if (yych == 'f') goto yy330;
+       goto yy277;
 yy302:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy330;
-       goto yy276;
+       if (yych == 'r') goto yy331;
+       goto yy277;
 yy303:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy331;
-       goto yy276;
+       if (yych == 'd') goto yy332;
+       goto yy277;
 yy304:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'p') goto yy332;
-       goto yy276;
+       if (yych == '-') goto yy333;
+       goto yy277;
 yy305:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'u') goto yy333;
-       goto yy276;
+       if (yych == 'e') goto yy334;
+       goto yy277;
 yy306:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy334;
-       goto yy276;
+       if (yych == 'p') goto yy335;
+       goto yy277;
 yy307:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'p') goto yy335;
-       goto yy276;
+       if (yych == 'u') goto yy336;
+       goto yy277;
 yy308:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy336;
-       goto yy276;
+       if (yych == '-') goto yy337;
+       goto yy277;
 yy309:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy337;
-       goto yy276;
+       if (yych == 'p') goto yy338;
+       goto yy277;
 yy310:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy339;
-       goto yy276;
+       if (yych == 'e') goto yy339;
+       goto yy277;
 yy311:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy340;
-       goto yy276;
+       if (yych <= 0x00) goto yy340;
+       goto yy277;
 yy312:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy341;
-       goto yy276;
+       if (yych == 't') goto yy342;
+       goto yy277;
 yy313:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'x') goto yy342;
-       goto yy276;
+       if (yych == 't') goto yy343;
+       goto yy277;
 yy314:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'p') goto yy343;
-       goto yy276;
+       if (yych == 'o') goto yy344;
+       goto yy277;
 yy315:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'u') goto yy344;
-       goto yy276;
+       if (yych == 'x') goto yy345;
+       goto yy277;
 yy316:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy345;
-       goto yy276;
+       if (yych == 'p') goto yy346;
+       goto yy277;
 yy317:
        yych = (YYCTYPE)*++YYCURSOR;
-       switch (yych) {
-       case 'd':       goto yy346;
-       case 'g':       goto yy347;
-       case 'l':       goto yy348;
-       case 'v':       goto yy349;
-       default:        goto yy276;
-       }
+       if (yych == 'u') goto yy347;
+       goto yy277;
 yy318:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'p') goto yy350;
-       goto yy276;
+       if (yych == 't') goto yy348;
+       goto yy277;
 yy319:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy351;
-       goto yy276;
+       switch (yych) {
+       case 'd':       goto yy349;
+       case 'g':       goto yy350;
+       case 'l':       goto yy351;
+       case 'v':       goto yy352;
+       default:        goto yy277;
+       }
 yy320:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'g') goto yy352;
-       goto yy276;
+       if (yych == 'p') goto yy353;
+       goto yy277;
 yy321:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'l') goto yy353;
-       goto yy276;
+       if (yych == 'i') goto yy354;
+       goto yy277;
 yy322:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy354;
-       goto yy276;
+       if (yych == 's') goto yy355;
+       goto yy277;
 yy323:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy355;
-       goto yy276;
+       if (yych == 'g') goto yy356;
+       goto yy277;
 yy324:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy356;
-       goto yy276;
+       if (yych == 'l') goto yy357;
+       goto yy277;
 yy325:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy357;
-       goto yy276;
+       if (yych == 'r') goto yy358;
+       goto yy277;
 yy326:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'c') goto yy358;
-       goto yy276;
+       if (yych == 'r') goto yy359;
+       goto yy277;
 yy327:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy359;
-       goto yy276;
+       if (yych == 's') goto yy360;
+       goto yy277;
 yy328:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy360;
-       if (yych == 's') goto yy361;
-       goto yy276;
+       if (yych == 'e') goto yy361;
+       goto yy277;
 yy329:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy362;
-       goto yy276;
+       if (yych == 'c') goto yy362;
+       goto yy277;
 yy330:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'v') goto yy363;
-       goto yy276;
+       if (yych == '-') goto yy363;
+       goto yy277;
 yy331:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy364;
-       goto yy276;
+       if (yych == 'n') goto yy364;
+       if (yych == 's') goto yy365;
+       goto yy277;
 yy332:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'u') goto yy365;
-       goto yy276;
+       if (yych == 'e') goto yy366;
+       goto yy277;
 yy333:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'g') goto yy366;
-       goto yy276;
+       if (yych == 'v') goto yy367;
+       goto yy277;
 yy334:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'm') goto yy367;
-       goto yy276;
+       if (yych == '-') goto yy368;
+       goto yy277;
 yy335:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy368;
-       goto yy276;
+       if (yych == 'u') goto yy369;
+       goto yy277;
 yy336:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy369;
-       goto yy276;
+       if (yych == 'g') goto yy370;
+       goto yy277;
 yy337:
-       ++YYCURSOR;
-#line 152 "../src/conf/parse_opts.re"
-       { if (!opts.set_encoding (Enc::EBCDIC)) { error_encoding (); return EXIT_FAIL; } goto opt; }
-#line 1443 "src/conf/parse_opts.cc"
-yy339:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy370;
-       goto yy276;
-yy340:
+       if (yych == 'm') goto yy371;
+       goto yy277;
+yy338:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'y') goto yy371;
-       goto yy276;
-yy341:
+       if (yych == '-') goto yy372;
+       goto yy277;
+yy339:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'd') goto yy372;
-       goto yy276;
+       if (yych == 'r') goto yy373;
+       goto yy277;
+yy340:
+       ++YYCURSOR;
+#line 153 "../src/conf/parse_opts.re"
+       { if (!opts.set_encoding (Enc::EBCDIC)) { error_encoding (); return EXIT_FAIL; } goto opt; }
+#line 1456 "src/conf/parse_opts.cc"
 yy342:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy373;
-       goto yy276;
+       if (yych == '-') goto yy374;
+       goto yy277;
 yy343:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy374;
-       goto yy276;
+       if (yych == 'y') goto yy375;
+       goto yy277;
 yy344:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy376;
-       goto yy276;
+       if (yych == 'd') goto yy376;
+       goto yy277;
 yy345:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy377;
-       goto yy276;
+       if (yych == '-') goto yy377;
+       goto yy277;
 yy346:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy378;
-       goto yy276;
+       if (yych <= 0x00) goto yy378;
+       goto yy277;
 yy347:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy379;
-       goto yy276;
+       if (yych == 't') goto yy380;
+       goto yy277;
 yy348:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy380;
-       goto yy276;
+       if (yych == 'e') goto yy381;
+       goto yy277;
 yy349:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy381;
-       goto yy276;
+       if (yych == 'e') goto yy382;
+       goto yy277;
 yy350:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'u') goto yy382;
-       goto yy276;
+       if (yych == 'e') goto yy383;
+       goto yy277;
 yy351:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy383;
-       goto yy276;
+       if (yych == 'o') goto yy384;
+       goto yy277;
 yy352:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'l') goto yy384;
-       goto yy276;
+       if (yych == 'e') goto yy385;
+       goto yy277;
 yy353:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy385;
-       goto yy276;
+       if (yych == 'u') goto yy386;
+       goto yy277;
 yy354:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy386;
-       goto yy276;
+       if (yych == 'x') goto yy387;
+       goto yy277;
 yy355:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy387;
-       goto yy276;
+       if (yych == 'a') goto yy388;
+       goto yy277;
 yy356:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy388;
-       goto yy276;
+       if (yych == 'l') goto yy389;
+       goto yy277;
 yy357:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy390;
-       goto yy276;
+       if (yych == 'e') goto yy390;
+       goto yy277;
 yy358:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy391;
-       goto yy276;
+       if (yych == 't') goto yy391;
+       goto yy277;
 yy359:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '1') goto yy392;
-       if (yych == '8') goto yy393;
-       goto yy276;
+       if (yych == 'a') goto yy392;
+       goto yy277;
 yy360:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'u') goto yy394;
-       goto yy276;
+       if (yych <= 0x00) goto yy393;
+       goto yy277;
 yy361:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy395;
-       goto yy276;
+       if (yych == '-') goto yy395;
+       goto yy277;
 yy362:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy396;
-       goto yy276;
+       if (yych == 'o') goto yy396;
+       goto yy277;
 yy363:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy397;
-       goto yy276;
+       if (yych == '1') goto yy397;
+       if (yych == '8') goto yy398;
+       goto yy277;
 yy364:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy398;
-       goto yy276;
+       if (yych == 'u') goto yy399;
+       goto yy277;
 yy365:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy399;
-       goto yy276;
+       if (yych == 'i') goto yy400;
+       goto yy277;
 yy366:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy400;
-       goto yy276;
+       if (yych == '-') goto yy401;
+       goto yy277;
 yy367:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy401;
-       goto yy276;
+       if (yych == 'e') goto yy402;
+       goto yy277;
 yy368:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 'c') {
-               if (yych == 'a') goto yy402;
-               goto yy276;
-       } else {
-               if (yych <= 'd') goto yy403;
-               if (yych == 'n') goto yy404;
-               goto yy276;
-       }
+       if (yych == 'i') goto yy403;
+       goto yy277;
 yy369:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy405;
-       goto yy276;
+       if (yych == 't') goto yy404;
+       goto yy277;
 yy370:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'd') goto yy406;
-       goto yy276;
+       if (yych == '-') goto yy405;
+       goto yy277;
 yy371:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy407;
-       goto yy276;
+       if (yych == 'i') goto yy406;
+       goto yy277;
 yy372:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy408;
-       goto yy276;
+       if (yych <= 'c') {
+               if (yych == 'a') goto yy407;
+               goto yy277;
+       } else {
+               if (yych <= 'd') goto yy408;
+               if (yych == 'n') goto yy409;
+               goto yy277;
+       }
 yy373:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy409;
-       goto yy276;
+       if (yych == '-') goto yy410;
+       goto yy277;
 yy374:
-       ++YYCURSOR;
-#line 131 "../src/conf/parse_opts.re"
-       { usage ();   return EXIT_OK; }
-#line 1595 "src/conf/parse_opts.cc"
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'd') goto yy411;
+       goto yy277;
+yy375:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == '-') goto yy412;
+       goto yy277;
 yy376:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy410;
-       goto yy276;
+       if (yych == 'i') goto yy413;
+       goto yy277;
 yy377:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'd') goto yy412;
-       goto yy276;
+       if (yych == 's') goto yy414;
+       goto yy277;
 yy378:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'b') goto yy413;
-       goto yy276;
-yy379:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy414;
-       goto yy276;
+       ++YYCURSOR;
+#line 131 "../src/conf/parse_opts.re"
+       { usage ();   return EXIT_OK; }
+#line 1612 "src/conf/parse_opts.cc"
 yy380:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy415;
-       goto yy276;
+       if (yych <= 0x00) goto yy415;
+       goto yy277;
 yy381:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy416;
-       goto yy276;
+       if (yych == 'd') goto yy417;
+       goto yy277;
 yy382:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy417;
-       goto yy276;
+       if (yych == 'b') goto yy418;
+       goto yy277;
 yy383:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'b') goto yy418;
-       goto yy276;
+       if (yych == 'n') goto yy419;
+       goto yy277;
 yy384:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy419;
-       goto yy276;
+       if (yych == 'o') goto yy420;
+       goto yy277;
 yy385:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy420;
-       goto yy276;
+       if (yych == 'r') goto yy421;
+       goto yy277;
 yy386:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy421;
-       goto yy276;
+       if (yych == 't') goto yy422;
+       goto yy277;
 yy387:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'b') goto yy422;
-       goto yy276;
+       if (yych == '-') goto yy423;
+       goto yy277;
 yy388:
-       ++YYCURSOR;
-#line 149 "../src/conf/parse_opts.re"
-       { opts.set_tags (true);              goto opt; }
-#line 1648 "src/conf/parse_opts.cc"
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'b') goto yy424;
+       goto yy277;
+yy389:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'e') goto yy425;
+       goto yy277;
 yy390:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'h') goto yy423;
-       goto yy276;
+       if (yych == 't') goto yy426;
+       goto yy277;
 yy391:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'd') goto yy424;
-       goto yy276;
+       if (yych == '-') goto yy427;
+       goto yy277;
 yy392:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '6') goto yy425;
-       goto yy276;
+       if (yych == 'b') goto yy428;
+       goto yy277;
 yy393:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy426;
-       goto yy276;
-yy394:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'm') goto yy428;
-       goto yy276;
+       ++YYCURSOR;
+#line 149 "../src/conf/parse_opts.re"
+       { opts.set_tags (true);              goto opt; }
+#line 1669 "src/conf/parse_opts.cc"
 yy395:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy429;
-       goto yy276;
+       if (yych == 'h') goto yy429;
+       goto yy277;
 yy396:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'c') goto yy430;
-       goto yy276;
+       if (yych == 'd') goto yy430;
+       goto yy277;
 yy397:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'c') goto yy431;
-       goto yy276;
+       if (yych == '6') goto yy431;
+       goto yy277;
 yy398:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy432;
-       goto yy276;
+       if (yych <= 0x00) goto yy432;
+       goto yy277;
 yy399:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy433;
-       goto yy276;
+       if (yych == 'm') goto yy434;
+       goto yy277;
 yy400:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy434;
-       goto yy276;
+       if (yych == 'o') goto yy435;
+       goto yy277;
 yy401:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy435;
-       goto yy276;
+       if (yych == 'c') goto yy436;
+       goto yy277;
 yy402:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'd') goto yy436;
-       goto yy276;
+       if (yych == 'c') goto yy437;
+       goto yy277;
 yy403:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'f') goto yy437;
-       goto yy276;
+       if (yych == 'n') goto yy438;
+       goto yy277;
 yy404:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'f') goto yy438;
-       goto yy276;
+       if (yych == 'e') goto yy439;
+       goto yy277;
 yy405:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy439;
-       goto yy276;
+       if (yych == 'o') goto yy440;
+       goto yy277;
 yy406:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy440;
-       goto yy276;
+       if (yych == 'n') goto yy441;
+       goto yy277;
 yy407:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'c') goto yy441;
-       goto yy276;
+       if (yych == 'd') goto yy442;
+       goto yy277;
 yy408:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy442;
-       goto yy276;
+       if (yych == 'f') goto yy443;
+       goto yy277;
 yy409:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'y') goto yy443;
-       goto yy276;
+       if (yych == 'f') goto yy444;
+       goto yy277;
 yy410:
-       ++YYCURSOR;
-#line 160 "../src/conf/parse_opts.re"
-       { goto opt_input; }
-#line 1733 "src/conf/parse_opts.cc"
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 's') goto yy445;
+       goto yy277;
+yy411:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'o') goto yy446;
+       goto yy277;
 yy412:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy444;
-       goto yy276;
+       if (yych == 'c') goto yy447;
+       goto yy277;
 yy413:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'u') goto yy445;
-       goto yy276;
+       if (yych == 'n') goto yy448;
+       goto yy277;
 yy414:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy446;
-       goto yy276;
+       if (yych == 'y') goto yy449;
+       goto yy277;
 yy415:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'k') goto yy447;
-       goto yy276;
-yy416:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy448;
-       goto yy276;
+       ++YYCURSOR;
+#line 161 "../src/conf/parse_opts.re"
+       { goto opt_input; }
+#line 1754 "src/conf/parse_opts.cc"
 yy417:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy449;
-       goto yy276;
+       if (yych == '-') goto yy450;
+       goto yy277;
 yy418:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'l') goto yy451;
-       goto yy276;
+       if (yych == 'u') goto yy451;
+       goto yy277;
 yy419:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy452;
-       goto yy276;
+       if (yych == 'e') goto yy452;
+       goto yy277;
 yy420:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy453;
-       goto yy276;
+       if (yych == 'k') goto yy453;
+       goto yy277;
 yy421:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'c') goto yy454;
-       goto yy276;
+       if (yych == 's') goto yy454;
+       goto yy277;
 yy422:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'l') goto yy455;
-       goto yy276;
+       if (yych <= 0x00) goto yy455;
+       goto yy277;
 yy423:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy456;
-       goto yy276;
+       if (yych == 'c') goto yy457;
+       goto yy277;
 yy424:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy457;
-       goto yy276;
+       if (yych == 'l') goto yy458;
+       goto yy277;
 yy425:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy458;
-       goto yy276;
+       if (yych == '-') goto yy459;
+       goto yy277;
 yy426:
-       ++YYCURSOR;
-#line 156 "../src/conf/parse_opts.re"
-       { if (!opts.set_encoding (Enc::UTF8))   { error_encoding (); return EXIT_FAIL; } goto opt; }
-#line 1794 "src/conf/parse_opts.cc"
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'o') goto yy460;
+       goto yy277;
+yy427:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'c') goto yy461;
+       goto yy277;
 yy428:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy460;
-       goto yy276;
+       if (yych == 'l') goto yy462;
+       goto yy277;
 yy429:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy462;
-       goto yy276;
+       if (yych == 'e') goto yy463;
+       goto yy277;
 yy430:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'h') goto yy463;
-       goto yy276;
+       if (yych == 'e') goto yy464;
+       goto yy277;
 yy431:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy464;
-       goto yy276;
+       if (yych <= 0x00) goto yy465;
+       goto yy277;
 yy432:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy465;
-       if (yych == 'v') goto yy466;
-       goto yy276;
-yy433:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'd') goto yy467;
-       goto yy276;
+       ++YYCURSOR;
+#line 157 "../src/conf/parse_opts.re"
+       { if (!opts.set_encoding (Enc::UTF8))   { error_encoding (); return EXIT_FAIL; } goto opt; }
+#line 1819 "src/conf/parse_opts.cc"
 yy434:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'u') goto yy468;
-       goto yy276;
+       if (yych <= 0x00) goto yy467;
+       goto yy277;
 yy435:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy469;
-       goto yy276;
+       if (yych == 'n') goto yy469;
+       goto yy277;
 yy436:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'f') goto yy470;
-       goto yy276;
+       if (yych == 'h') goto yy470;
+       goto yy277;
 yy437:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy471;
-       goto yy276;
+       if (yych == 't') goto yy471;
+       goto yy277;
 yy438:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy472;
-       goto yy276;
+       if (yych == 's') goto yy472;
+       if (yych == 'v') goto yy473;
+       goto yy277;
 yy439:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'k') goto yy473;
-       goto yy276;
+       if (yych == 'd') goto yy474;
+       goto yy277;
 yy440:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy474;
-       goto yy276;
+       if (yych == 'u') goto yy475;
+       goto yy277;
 yy441:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'l') goto yy475;
-       goto yy276;
+       if (yych == 'i') goto yy476;
+       goto yy277;
 yy442:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'g') goto yy476;
-       goto yy276;
+       if (yych == 'f') goto yy477;
+       goto yy277;
 yy443:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy477;
-       goto yy276;
+       if (yych == 'a') goto yy478;
+       goto yy277;
 yy444:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy478;
-       goto yy276;
+       if (yych == 'a') goto yy479;
+       goto yy277;
 yy445:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'g') goto yy479;
-       goto yy276;
+       if (yych == 'k') goto yy480;
+       goto yy277;
 yy446:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy480;
-       goto yy276;
+       if (yych == 't') goto yy481;
+       goto yy277;
 yy447:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy481;
-       goto yy276;
+       if (yych == 'l') goto yy482;
+       goto yy277;
 yy448:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy482;
-       goto yy276;
+       if (yych == 'g') goto yy483;
+       goto yy277;
 yy449:
-       ++YYCURSOR;
-#line 157 "../src/conf/parse_opts.re"
-       { if (!next (YYCURSOR, argv)) { error_arg ("-o, --output"); return EXIT_FAIL; } goto opt_output; }
-#line 1884 "src/conf/parse_opts.cc"
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'n') goto yy484;
+       goto yy277;
+yy450:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'i') goto yy485;
+       goto yy277;
 yy451:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy483;
-       goto yy276;
+       if (yych == 'g') goto yy486;
+       goto yy277;
 yy452:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'p') goto yy484;
-       goto yy276;
+       if (yych == 'r') goto yy487;
+       goto yy277;
 yy453:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy485;
-       goto yy276;
+       if (yych == 'a') goto yy488;
+       goto yy277;
 yy454:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy486;
-       goto yy276;
+       if (yych == 'i') goto yy489;
+       goto yy277;
 yy455:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy487;
-       goto yy276;
-yy456:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy488;
-       goto yy276;
+       ++YYCURSOR;
+#line 158 "../src/conf/parse_opts.re"
+       { if (!next (YYCURSOR, argv)) { error_arg ("-o, --output"); return EXIT_FAIL; } goto opt_output; }
+#line 1909 "src/conf/parse_opts.cc"
 yy457:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy489;
-       goto yy276;
+       if (yych == 'a') goto yy490;
+       goto yy277;
 yy458:
-       ++YYCURSOR;
-#line 155 "../src/conf/parse_opts.re"
-       { if (!opts.set_encoding (Enc::UTF16))  { error_encoding (); return EXIT_FAIL; } goto opt; }
-#line 1917 "src/conf/parse_opts.cc"
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'e') goto yy491;
+       goto yy277;
+yy459:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'p') goto yy492;
+       goto yy277;
 yy460:
-       ++YYCURSOR;
-#line 133 "../src/conf/parse_opts.re"
-       { vernum ();  return EXIT_OK; }
-#line 1922 "src/conf/parse_opts.cc"
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'n') goto yy493;
+       goto yy277;
+yy461:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'o') goto yy494;
+       goto yy277;
 yy462:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy491;
-       goto yy276;
+       if (yych == 'e') goto yy495;
+       goto yy277;
 yy463:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy493;
-       goto yy276;
+       if (yych == 'a') goto yy496;
+       goto yy277;
 yy464:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy494;
-       goto yy276;
+       if (yych <= 0x00) goto yy497;
+       goto yy277;
 yy465:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy495;
-       goto yy276;
-yy466:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy496;
-       goto yy276;
+       ++YYCURSOR;
+#line 156 "../src/conf/parse_opts.re"
+       { if (!opts.set_encoding (Enc::UTF16))  { error_encoding (); return EXIT_FAIL; } goto opt; }
+#line 1946 "src/conf/parse_opts.cc"
 yy467:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy497;
-       goto yy276;
-yy468:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy498;
-       goto yy276;
+       ++YYCURSOR;
+#line 133 "../src/conf/parse_opts.re"
+       { vernum ();  return EXIT_OK; }
+#line 1951 "src/conf/parse_opts.cc"
 yy469:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'm') goto yy499;
-       goto yy276;
+       if (yych <= 0x00) goto yy499;
+       goto yy277;
 yy470:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy500;
-       goto yy276;
+       if (yych == 'a') goto yy501;
+       goto yy277;
 yy471:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy501;
-       goto yy276;
+       if (yych == 'o') goto yy502;
+       goto yy277;
 yy472:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy502;
-       goto yy276;
+       if (yych == 'e') goto yy503;
+       goto yy277;
 yy473:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy504;
-       goto yy276;
+       if (yych == 'e') goto yy504;
+       goto yy277;
 yy474:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy505;
-       goto yy276;
+       if (yych == '-') goto yy505;
+       goto yy277;
 yy475:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy507;
-       goto yy276;
+       if (yych == 't') goto yy506;
+       goto yy277;
 yy476:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy508;
-       goto yy276;
+       if (yych == 'm') goto yy507;
+       goto yy277;
 yy477:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy509;
-       goto yy276;
+       if (yych == 'a') goto yy508;
+       goto yy277;
 yy478:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'f') goto yy510;
-       goto yy276;
+       if (yych == '-') goto yy509;
+       goto yy277;
 yy479:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy511;
-       goto yy276;
+       if (yych <= 0x00) goto yy510;
+       goto yy277;
 yy480:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy512;
-       goto yy276;
+       if (yych == 'i') goto yy512;
+       goto yy277;
 yy481:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'h') goto yy513;
-       goto yy276;
+       if (yych <= 0x00) goto yy513;
+       goto yy277;
 yy482:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy514;
-       goto yy276;
+       if (yych == 'a') goto yy515;
+       goto yy277;
 yy483:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy515;
-       goto yy276;
+       if (yych == '-') goto yy516;
+       goto yy277;
 yy484:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy517;
-       goto yy276;
+       if (yych == 't') goto yy517;
+       goto yy277;
 yy485:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy518;
-       goto yy276;
+       if (yych == 'f') goto yy518;
+       goto yy277;
 yy486:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy520;
-       goto yy276;
+       if (yych == '-') goto yy519;
+       goto yy277;
 yy487:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy521;
-       goto yy276;
+       if (yych == 'a') goto yy520;
+       goto yy277;
 yy488:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'd') goto yy522;
-       goto yy276;
+       if (yych == 'h') goto yy521;
+       goto yy277;
 yy489:
-       ++YYCURSOR;
-#line 153 "../src/conf/parse_opts.re"
-       { if (!opts.set_encoding (Enc::UTF32))  { error_encoding (); return EXIT_FAIL; } goto opt; }
-#line 2035 "src/conf/parse_opts.cc"
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'o') goto yy522;
+       goto yy277;
+yy490:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'p') goto yy523;
+       goto yy277;
 yy491:
-       ++YYCURSOR;
-#line 132 "../src/conf/parse_opts.re"
-       { version (); return EXIT_OK; }
-#line 2040 "src/conf/parse_opts.cc"
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych <= 0x00) goto yy524;
+       goto yy277;
+yy492:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'a') goto yy526;
+       goto yy277;
 yy493:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy523;
-       goto yy276;
+       if (yych <= 0x00) goto yy527;
+       goto yy277;
 yy494:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy524;
-       goto yy276;
+       if (yych == 'n') goto yy529;
+       goto yy277;
 yy495:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy525;
-       goto yy276;
+       if (yych == '-') goto yy530;
+       goto yy277;
 yy496:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy526;
-       goto yy276;
+       if (yych == 'd') goto yy531;
+       goto yy277;
 yy497:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'g') goto yy527;
-       goto yy276;
-yy498:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'p') goto yy528;
-       goto yy276;
+       ++YYCURSOR;
+#line 154 "../src/conf/parse_opts.re"
+       { if (!opts.set_encoding (Enc::UTF32))  { error_encoding (); return EXIT_FAIL; } goto opt; }
+#line 2068 "src/conf/parse_opts.cc"
 yy499:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy529;
-       goto yy276;
-yy500:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy530;
-       goto yy276;
+       ++YYCURSOR;
+#line 132 "../src/conf/parse_opts.re"
+       { version (); return EXIT_OK; }
+#line 2073 "src/conf/parse_opts.cc"
 yy501:
        yych = (YYCTYPE)*++YYCURSOR;
-       switch (yych) {
-       case 'd':       goto yy532;
-       case 'm':       goto yy533;
-       case 'r':       goto yy534;
-       case 't':       goto yy535;
-       default:        goto yy276;
-       }
+       if (yych == 'r') goto yy532;
+       goto yy277;
 yy502:
-       ++YYCURSOR;
-#line 165 "../src/conf/parse_opts.re"
-       { opts.set_dump_nfa(true);        goto opt; }
-#line 2086 "src/conf/parse_opts.cc"
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'r') goto yy533;
+       goto yy277;
+yy503:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'n') goto yy534;
+       goto yy277;
 yy504:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'p') goto yy536;
-       goto yy276;
+       if (yych == 'r') goto yy535;
+       goto yy277;
 yy505:
-       ++YYCURSOR;
-#line 137 "../src/conf/parse_opts.re"
-       { opts.set_target (opt_t::DOT);      goto opt; }
-#line 2095 "src/conf/parse_opts.cc"
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'g') goto yy536;
+       goto yy277;
+yy506:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'p') goto yy537;
+       goto yy277;
 yy507:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy537;
-       goto yy276;
+       if (yych == 'i') goto yy538;
+       goto yy277;
 yy508:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'p') goto yy538;
-       goto yy276;
+       if (yych <= 0x00) goto yy539;
+       goto yy277;
 yy509:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy539;
-       goto yy276;
+       switch (yych) {
+       case 'd':       goto yy541;
+       case 'm':       goto yy542;
+       case 'r':       goto yy543;
+       case 't':       goto yy544;
+       default:        goto yy277;
+       }
 yy510:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy540;
-       goto yy276;
-yy511:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy541;
-       goto yy276;
+       ++YYCURSOR;
+#line 166 "../src/conf/parse_opts.re"
+       { opts.set_dump_nfa(true);        goto opt; }
+#line 2119 "src/conf/parse_opts.cc"
 yy512:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy542;
-       goto yy276;
+       if (yych == 'p') goto yy545;
+       goto yy277;
 yy513:
+       ++YYCURSOR;
+#line 137 "../src/conf/parse_opts.re"
+       { opts.set_target (opt_t::DOT);      goto opt; }
+#line 2128 "src/conf/parse_opts.cc"
+yy515:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy543;
-       goto yy276;
-yy514:
+       if (yych == 's') goto yy546;
+       goto yy277;
+yy516:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy544;
-       goto yy276;
-yy515:
-       ++YYCURSOR;
-#line 142 "../src/conf/parse_opts.re"
-       { opts.set_rFlag (true);             goto opt; }
-#line 2132 "src/conf/parse_opts.cc"
+       if (yych == 'p') goto yy547;
+       goto yy277;
 yy517:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy545;
-       goto yy276;
+       if (yych == 'a') goto yy548;
+       goto yy277;
 yy518:
-       ++YYCURSOR;
-#line 148 "../src/conf/parse_opts.re"
-       { opts.set_target (opt_t::SKELETON); goto opt; }
-#line 2141 "src/conf/parse_opts.cc"
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 's') goto yy549;
+       goto yy277;
+yy519:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'i') goto yy550;
+       goto yy277;
 yy520:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'd') goto yy546;
-       goto yy276;
+       if (yych == 't') goto yy551;
+       goto yy277;
 yy521:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy547;
-       goto yy276;
+       if (yych == 'e') goto yy552;
+       goto yy277;
 yy522:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy548;
-       goto yy276;
+       if (yych == 'n') goto yy553;
+       goto yy277;
 yy523:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy549;
-       goto yy276;
+       if (yych == 't') goto yy554;
+       goto yy277;
 yy524:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy550;
-       goto yy276;
-yy525:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy551;
-       goto yy276;
+       ++YYCURSOR;
+#line 142 "../src/conf/parse_opts.re"
+       { opts.set_rFlag (true);             goto opt; }
+#line 2169 "src/conf/parse_opts.cc"
 yy526:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy552;
-       goto yy276;
+       if (yych == 's') goto yy555;
+       goto yy277;
 yy527:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy553;
-       goto yy276;
-yy528:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'u') goto yy554;
-       goto yy276;
+       ++YYCURSOR;
+#line 148 "../src/conf/parse_opts.re"
+       { opts.set_target (opt_t::SKELETON); goto opt; }
+#line 2178 "src/conf/parse_opts.cc"
 yy529:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'z') goto yy555;
-       goto yy276;
+       if (yych == 'd') goto yy556;
+       goto yy277;
 yy530:
-       ++YYCURSOR;
-#line 170 "../src/conf/parse_opts.re"
-       { opts.set_dump_adfa(true);       goto opt; }
-#line 2186 "src/conf/parse_opts.cc"
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 's') goto yy557;
+       goto yy277;
+yy531:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'e') goto yy558;
+       goto yy277;
 yy532:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy556;
-       goto yy276;
+       if (yych == 's') goto yy559;
+       goto yy277;
 yy533:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy557;
-       goto yy276;
+       if (yych == 's') goto yy560;
+       goto yy277;
 yy534:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy558;
-       goto yy276;
+       if (yych == 's') goto yy561;
+       goto yy277;
 yy535:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy559;
-       goto yy276;
+       if (yych == 't') goto yy562;
+       goto yy277;
 yy536:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy560;
-       goto yy276;
+       if (yych == 'o') goto yy563;
+       goto yy277;
 yy537:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy562;
-       goto yy276;
+       if (yych == 'u') goto yy564;
+       goto yy277;
 yy538:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy563;
-       goto yy276;
+       if (yych == 'z') goto yy565;
+       goto yy277;
 yy539:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'x') goto yy564;
-       goto yy276;
-yy540:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy565;
-       goto yy276;
+       ++YYCURSOR;
+#line 171 "../src/conf/parse_opts.re"
+       { opts.set_dump_adfa(true);       goto opt; }
+#line 2223 "src/conf/parse_opts.cc"
 yy541:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy567;
-       goto yy276;
+       if (yych == 'e') goto yy566;
+       goto yy277;
 yy542:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy568;
-       goto yy276;
+       if (yych == 'i') goto yy567;
+       goto yy277;
 yy543:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy569;
-       goto yy276;
+       if (yych == 'a') goto yy568;
+       goto yy277;
 yy544:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy570;
-       goto yy276;
+       if (yych == 'a') goto yy569;
+       goto yy277;
 yy545:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy572;
-       goto yy276;
+       if (yych <= 0x00) goto yy570;
+       goto yy277;
 yy546:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy573;
-       goto yy276;
+       if (yych == 's') goto yy572;
+       goto yy277;
 yy547:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy574;
-       goto yy276;
+       if (yych == 'o') goto yy573;
+       goto yy277;
 yy548:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy575;
-       goto yy276;
+       if (yych == 'x') goto yy574;
+       goto yy277;
 yy549:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy576;
-       goto yy276;
+       if (yych <= 0x00) goto yy575;
+       goto yy277;
 yy550:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy578;
-       goto yy276;
+       if (yych == 'n') goto yy577;
+       goto yy277;
 yy551:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy580;
-       goto yy276;
+       if (yych == 'i') goto yy578;
+       goto yy277;
 yy552:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy581;
-       goto yy276;
+       if (yych == 'a') goto yy579;
+       goto yy277;
 yy553:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy582;
-       goto yy276;
+       if (yych <= 0x00) goto yy580;
+       goto yy277;
 yy554:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy583;
-       goto yy276;
+       if (yych == 'u') goto yy582;
+       goto yy277;
 yy555:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy584;
-       goto yy276;
+       if (yych == 's') goto yy583;
+       goto yy277;
 yy556:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy585;
-       goto yy276;
+       if (yych == 'i') goto yy584;
+       goto yy277;
 yy557:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy586;
-       goto yy276;
+       if (yych == 't') goto yy585;
+       goto yy277;
 yy558:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'w') goto yy587;
-       goto yy276;
+       if (yych == 'r') goto yy586;
+       goto yy277;
 yy559:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'g') goto yy588;
-       goto yy276;
+       if (yych <= 0x00) goto yy587;
+       goto yy277;
 yy560:
-       ++YYCURSOR;
-#line 151 "../src/conf/parse_opts.re"
-       { opts.set_eager_skip(true);         goto opt; }
-#line 2303 "src/conf/parse_opts.cc"
-yy562:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych <= 0x00) goto yy589;
-       goto yy276;
+       goto yy277;
+yy561:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'i') goto yy591;
+       goto yy277;
+yy562:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'e') goto yy592;
+       goto yy277;
 yy563:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'l') goto yy591;
-       goto yy276;
+       if (yych == 't') goto yy593;
+       goto yy277;
 yy564:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy592;
-       goto yy276;
+       if (yych == 't') goto yy594;
+       goto yy277;
 yy565:
-       ++YYCURSOR;
-#line 143 "../src/conf/parse_opts.re"
-       { opts.set_sFlag (true);             goto opt; }
-#line 2320 "src/conf/parse_opts.cc"
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'a') goto yy595;
+       goto yy277;
+yy566:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 't') goto yy596;
+       goto yy277;
 yy567:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'f') goto yy594;
-       goto yy276;
+       if (yych == 'n') goto yy597;
+       goto yy277;
 yy568:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy595;
-       goto yy276;
+       if (yych == 'w') goto yy598;
+       goto yy277;
 yy569:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'd') goto yy596;
-       goto yy276;
+       if (yych == 'g') goto yy599;
+       goto yy277;
 yy570:
        ++YYCURSOR;
-#line 145 "../src/conf/parse_opts.re"
-       { opts.set_version (false);          goto opt; }
-#line 2337 "src/conf/parse_opts.cc"
+#line 152 "../src/conf/parse_opts.re"
+       { opts.set_eager_skip(true);         goto opt; }
+#line 2344 "src/conf/parse_opts.cc"
 yy572:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy597;
-       goto yy276;
+       if (yych <= 0x00) goto yy600;
+       goto yy277;
 yy573:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy599;
-       goto yy276;
+       if (yych == 'l') goto yy602;
+       goto yy277;
 yy574:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy600;
-       goto yy276;
+       if (yych <= 0x00) goto yy603;
+       goto yy277;
 yy575:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy601;
-       goto yy276;
-yy576:
        ++YYCURSOR;
-#line 154 "../src/conf/parse_opts.re"
-       { if (!opts.set_encoding (Enc::UCS2))   { error_encoding (); return EXIT_FAIL; } goto opt; }
-#line 2358 "src/conf/parse_opts.cc"
+#line 143 "../src/conf/parse_opts.re"
+       { opts.set_sFlag (true);             goto opt; }
+#line 2361 "src/conf/parse_opts.cc"
+yy577:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'f') goto yy605;
+       goto yy277;
 yy578:
-       ++YYCURSOR;
-#line 134 "../src/conf/parse_opts.re"
-       { opts.set_bFlag (true);             goto opt; }
-#line 2363 "src/conf/parse_opts.cc"
-yy580:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy603;
-       goto yy276;
-yy581:
+       if (yych == 'o') goto yy606;
+       goto yy277;
+yy579:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'd') goto yy604;
-       goto yy276;
+       if (yych == 'd') goto yy607;
+       goto yy277;
+yy580:
+       ++YYCURSOR;
+#line 145 "../src/conf/parse_opts.re"
+       { opts.set_version (false);          goto opt; }
+#line 2378 "src/conf/parse_opts.cc"
 yy582:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy605;
-       goto yy276;
+       if (yych == 'r') goto yy608;
+       goto yy277;
 yy583:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy606;
-       goto yy276;
+       if (yych <= 0x00) goto yy609;
+       goto yy277;
 yy584:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy608;
-       goto yy276;
+       if (yych == 't') goto yy611;
+       goto yy277;
 yy585:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy609;
-       goto yy276;
+       if (yych == 'a') goto yy612;
+       goto yy277;
 yy586:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy611;
-       goto yy276;
-yy587:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych <= 0x00) goto yy613;
-       goto yy276;
-yy588:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy615;
-       goto yy276;
+       goto yy277;
+yy587:
+       ++YYCURSOR;
+#line 155 "../src/conf/parse_opts.re"
+       { if (!opts.set_encoding (Enc::UCS2))   { error_encoding (); return EXIT_FAIL; } goto opt; }
+#line 2403 "src/conf/parse_opts.cc"
 yy589:
        ++YYCURSOR;
-#line 161 "../src/conf/parse_opts.re"
-       { goto opt_empty_class; }
-#line 2404 "src/conf/parse_opts.cc"
+#line 134 "../src/conf/parse_opts.re"
+       { opts.set_bFlag (true);             goto opt; }
+#line 2408 "src/conf/parse_opts.cc"
 yy591:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy616;
-       goto yy276;
+       if (yych == 't') goto yy615;
+       goto yy277;
 yy592:
-       ++YYCURSOR;
-#line 139 "../src/conf/parse_opts.re"
-       { opts.set_FFlag (true);             goto opt; }
-#line 2413 "src/conf/parse_opts.cc"
-yy594:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'd') goto yy616;
+       goto yy277;
+yy593:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 'o') goto yy617;
-       goto yy276;
+       goto yy277;
+yy594:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych <= 0x00) goto yy618;
+       goto yy277;
 yy595:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy618;
-       goto yy276;
+       if (yych == 't') goto yy620;
+       goto yy277;
 yy596:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy619;
-       goto yy276;
+       if (yych <= 0x00) goto yy621;
+       goto yy277;
 yy597:
-       ++YYCURSOR;
-#line 163 "../src/conf/parse_opts.re"
-       { goto opt; }
-#line 2430 "src/conf/parse_opts.cc"
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych <= 0x00) goto yy623;
+       goto yy277;
+yy598:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych <= 0x00) goto yy625;
+       goto yy277;
 yy599:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy621;
-       goto yy276;
+       if (yych == 'o') goto yy627;
+       goto yy277;
 yy600:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy622;
-       goto yy276;
-yy601:
        ++YYCURSOR;
-#line 158 "../src/conf/parse_opts.re"
-       { if (!next (YYCURSOR, argv)) { error_arg ("-t, --type-header"); return EXIT_FAIL; } goto opt_header; }
-#line 2443 "src/conf/parse_opts.cc"
-yy603:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy623;
-       goto yy276;
-yy604:
+#line 162 "../src/conf/parse_opts.re"
+       { goto opt_empty_class; }
+#line 2449 "src/conf/parse_opts.cc"
+yy602:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy624;
-       goto yy276;
+       if (yych == 'i') goto yy628;
+       goto yy277;
+yy603:
+       ++YYCURSOR;
+#line 139 "../src/conf/parse_opts.re"
+       { opts.set_FFlag (true);             goto opt; }
+#line 2458 "src/conf/parse_opts.cc"
 yy605:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy626;
-       goto yy276;
+       if (yych == 'o') goto yy629;
+       goto yy277;
 yy606:
-       ++YYCURSOR;
-#line 136 "../src/conf/parse_opts.re"
-       { opts.set_dFlag (true);             goto opt; }
-#line 2460 "src/conf/parse_opts.cc"
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'n') goto yy630;
+       goto yy277;
+yy607:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych <= 0x00) goto yy631;
+       goto yy277;
 yy608:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy627;
-       goto yy276;
+       if (yych == 'e') goto yy633;
+       goto yy277;
 yy609:
        ++YYCURSOR;
-#line 167 "../src/conf/parse_opts.re"
-       { opts.set_dump_dfa_det(true);    goto opt; }
-#line 2469 "src/conf/parse_opts.cc"
+#line 164 "../src/conf/parse_opts.re"
+       { goto opt; }
+#line 2479 "src/conf/parse_opts.cc"
 yy611:
-       ++YYCURSOR;
-#line 169 "../src/conf/parse_opts.re"
-       { opts.set_dump_dfa_min(true);    goto opt; }
-#line 2474 "src/conf/parse_opts.cc"
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'i') goto yy634;
+       goto yy277;
+yy612:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 't') goto yy635;
+       goto yy277;
 yy613:
        ++YYCURSOR;
-#line 166 "../src/conf/parse_opts.re"
-       { opts.set_dump_dfa_raw(true);    goto opt; }
-#line 2479 "src/conf/parse_opts.cc"
+#line 159 "../src/conf/parse_opts.re"
+       { if (!next (YYCURSOR, argv)) { error_arg ("-t, --type-header"); return EXIT_FAIL; } goto opt_header; }
+#line 2492 "src/conf/parse_opts.cc"
 yy615:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'p') goto yy628;
-       goto yy276;
+       if (yych == 'i') goto yy636;
+       goto yy277;
 yy616:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'c') goto yy629;
-       goto yy276;
+       if (yych <= 0x00) goto yy637;
+       goto yy277;
 yy617:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy630;
-       goto yy276;
+       if (yych == 's') goto yy639;
+       goto yy277;
 yy618:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy632;
-       goto yy276;
-yy619:
        ++YYCURSOR;
-#line 150 "../src/conf/parse_opts.re"
-       { opts.set_lookahead(false);         goto opt; }
-#line 2500 "src/conf/parse_opts.cc"
-yy621:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy633;
-       goto yy276;
-yy622:
+#line 136 "../src/conf/parse_opts.re"
+       { opts.set_dFlag (true);             goto opt; }
+#line 2509 "src/conf/parse_opts.cc"
+yy620:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy634;
-       goto yy276;
+       if (yych == 'i') goto yy640;
+       goto yy277;
+yy621:
+       ++YYCURSOR;
+#line 168 "../src/conf/parse_opts.re"
+       { opts.set_dump_dfa_det(true);    goto opt; }
+#line 2518 "src/conf/parse_opts.cc"
 yy623:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'v') goto yy635;
-       goto yy276;
-yy624:
        ++YYCURSOR;
-#line 147 "../src/conf/parse_opts.re"
-       { opts.set_bCaseInverted (true);     goto opt; }
-#line 2517 "src/conf/parse_opts.cc"
-yy626:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy636;
-       goto yy276;
+#line 170 "../src/conf/parse_opts.re"
+       { opts.set_dump_dfa_min(true);    goto opt; }
+#line 2523 "src/conf/parse_opts.cc"
+yy625:
+       ++YYCURSOR;
+#line 167 "../src/conf/parse_opts.re"
+       { opts.set_dump_dfa_raw(true);    goto opt; }
+#line 2528 "src/conf/parse_opts.cc"
 yy627:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy638;
-       goto yy276;
+       if (yych == 'p') goto yy641;
+       goto yy277;
 yy628:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy639;
-       goto yy276;
+       if (yych == 'c') goto yy642;
+       goto yy277;
 yy629:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'y') goto yy640;
-       goto yy276;
+       if (yych <= 0x00) goto yy643;
+       goto yy277;
 yy630:
-       ++YYCURSOR;
-#line 141 "../src/conf/parse_opts.re"
-       { opts.set_iFlag (true);             goto opt; }
-#line 2538 "src/conf/parse_opts.cc"
-yy632:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'd') goto yy641;
-       goto yy276;
+       if (yych == '-') goto yy645;
+       goto yy277;
+yy631:
+       ++YYCURSOR;
+#line 151 "../src/conf/parse_opts.re"
+       { opts.set_lookahead(false);         goto opt; }
+#line 2549 "src/conf/parse_opts.cc"
 yy633:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy642;
-       goto yy276;
+       if (yych == 's') goto yy646;
+       goto yy277;
 yy634:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy643;
-       goto yy276;
+       if (yych == 'o') goto yy647;
+       goto yy277;
 yy635:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy645;
-       goto yy276;
+       if (yych == 'e') goto yy648;
+       goto yy277;
 yy636:
-       ++YYCURSOR;
-#line 140 "../src/conf/parse_opts.re"
-       { opts.set_gFlag (true);             goto opt; }
-#line 2559 "src/conf/parse_opts.cc"
-yy638:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy646;
-       goto yy276;
+       if (yych == 'v') goto yy649;
+       goto yy277;
+yy637:
+       ++YYCURSOR;
+#line 147 "../src/conf/parse_opts.re"
+       { opts.set_bCaseInverted (true);     goto opt; }
+#line 2570 "src/conf/parse_opts.cc"
 yy639:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy647;
-       goto yy276;
+       if (yych <= 0x00) goto yy650;
+       goto yy277;
 yy640:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy649;
-       goto yy276;
+       if (yych == 'o') goto yy652;
+       goto yy277;
 yy641:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy651;
-       goto yy276;
+       if (yych == 't') goto yy653;
+       goto yy277;
 yy642:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy652;
-       goto yy276;
+       if (yych == 'y') goto yy654;
+       goto yy277;
 yy643:
        ++YYCURSOR;
-#line 138 "../src/conf/parse_opts.re"
-       { opts.set_fFlag (true);             goto opt; }
-#line 2584 "src/conf/parse_opts.cc"
+#line 141 "../src/conf/parse_opts.re"
+       { opts.set_iFlag (true);             goto opt; }
+#line 2591 "src/conf/parse_opts.cc"
 yy645:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy653;
-       goto yy276;
+       if (yych == 'd') goto yy655;
+       goto yy277;
 yy646:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy655;
-       goto yy276;
+       if (yych <= 0x00) goto yy656;
+       goto yy277;
 yy647:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'n') goto yy658;
+       goto yy277;
+yy648:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych <= 0x00) goto yy659;
+       goto yy277;
+yy649:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'e') goto yy661;
+       goto yy277;
+yy650:
        ++YYCURSOR;
-#line 168 "../src/conf/parse_opts.re"
+#line 140 "../src/conf/parse_opts.re"
+       { opts.set_gFlag (true);             goto opt; }
+#line 2616 "src/conf/parse_opts.cc"
+yy652:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'n') goto yy662;
+       goto yy277;
+yy653:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych <= 0x00) goto yy663;
+       goto yy277;
+yy654:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych <= 0x00) goto yy665;
+       goto yy277;
+yy655:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'a') goto yy667;
+       goto yy277;
+yy656:
+       ++YYCURSOR;
+#line 150 "../src/conf/parse_opts.re"
+       { opts.set_posix_captures (true);    goto opt; }
+#line 2637 "src/conf/parse_opts.cc"
+yy658:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 's') goto yy668;
+       goto yy277;
+yy659:
+       ++YYCURSOR;
+#line 138 "../src/conf/parse_opts.re"
+       { opts.set_fFlag (true);             goto opt; }
+#line 2646 "src/conf/parse_opts.cc"
+yy661:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych <= 0x00) goto yy669;
+       goto yy277;
+yy662:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych <= 0x00) goto yy671;
+       goto yy277;
+yy663:
+       ++YYCURSOR;
+#line 169 "../src/conf/parse_opts.re"
        { opts.set_dump_dfa_tagopt(true); goto opt; }
-#line 2597 "src/conf/parse_opts.cc"
-yy649:
+#line 2659 "src/conf/parse_opts.cc"
+yy665:
        ++YYCURSOR;
-#line 159 "../src/conf/parse_opts.re"
+#line 160 "../src/conf/parse_opts.re"
        { goto opt_encoding_policy; }
-#line 2602 "src/conf/parse_opts.cc"
-yy651:
+#line 2664 "src/conf/parse_opts.cc"
+yy667:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy657;
-       goto yy276;
-yy652:
+       if (yych == 't') goto yy673;
+       goto yy277;
+yy668:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy658;
-       goto yy276;
-yy653:
+       if (yych <= 0x00) goto yy674;
+       goto yy277;
+yy669:
        ++YYCURSOR;
 #line 146 "../src/conf/parse_opts.re"
        { opts.set_bCaseInsensitive (true);  goto opt; }
-#line 2615 "src/conf/parse_opts.cc"
-yy655:
+#line 2677 "src/conf/parse_opts.cc"
+yy671:
        ++YYCURSOR;
-#line 162 "../src/conf/parse_opts.re"
+#line 163 "../src/conf/parse_opts.re"
        { goto opt_dfa_minimization; }
-#line 2620 "src/conf/parse_opts.cc"
-yy657:
+#line 2682 "src/conf/parse_opts.cc"
+yy673:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy660;
-       goto yy276;
-yy658:
+       if (yych == 'e') goto yy676;
+       goto yy277;
+yy674:
        ++YYCURSOR;
 #line 135 "../src/conf/parse_opts.re"
        { opts.set_cFlag (true);             goto opt; }
-#line 2629 "src/conf/parse_opts.cc"
-yy660:
+#line 2691 "src/conf/parse_opts.cc"
+yy676:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy276;
+       if (yych >= 0x01) goto yy277;
        ++YYCURSOR;
 #line 144 "../src/conf/parse_opts.re"
        { opts.set_bNoGenerationDate (true); goto opt; }
-#line 2636 "src/conf/parse_opts.cc"
+#line 2698 "src/conf/parse_opts.cc"
 }
-#line 171 "../src/conf/parse_opts.re"
+#line 172 "../src/conf/parse_opts.re"
 
 
 opt_output:
 
-#line 2643 "src/conf/parse_opts.cc"
+#line 2705 "src/conf/parse_opts.cc"
 {
        YYCTYPE yych;
        static const unsigned char yybm[] = {
@@ -2677,32 +2739,32 @@ opt_output:
                128, 128, 128, 128, 128, 128, 128, 128, 
        };
        yych = (YYCTYPE)*YYCURSOR;
-       if (yych <= 0x00) goto yy665;
-       if (yych != '-') goto yy667;
-yy665:
+       if (yych <= 0x00) goto yy681;
+       if (yych != '-') goto yy683;
+yy681:
        ++YYCURSOR;
-#line 176 "../src/conf/parse_opts.re"
+#line 177 "../src/conf/parse_opts.re"
        {
                error ("bad argument to option -o, --output: %s", *argv);
                return EXIT_FAIL;
        }
-#line 2690 "src/conf/parse_opts.cc"
-yy667:
+#line 2752 "src/conf/parse_opts.cc"
+yy683:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yybm[0+yych] & 128) {
-               goto yy667;
+               goto yy683;
        }
        ++YYCURSOR;
-#line 180 "../src/conf/parse_opts.re"
+#line 181 "../src/conf/parse_opts.re"
        { opts.set_output_file(*argv); goto opt; }
-#line 2699 "src/conf/parse_opts.cc"
+#line 2761 "src/conf/parse_opts.cc"
 }
-#line 181 "../src/conf/parse_opts.re"
+#line 182 "../src/conf/parse_opts.re"
 
 
 opt_header:
 
-#line 2706 "src/conf/parse_opts.cc"
+#line 2768 "src/conf/parse_opts.cc"
 {
        YYCTYPE yych;
        static const unsigned char yybm[] = {
@@ -2740,27 +2802,27 @@ opt_header:
                128, 128, 128, 128, 128, 128, 128, 128, 
        };
        yych = (YYCTYPE)*YYCURSOR;
-       if (yych <= 0x00) goto yy673;
-       if (yych != '-') goto yy675;
-yy673:
+       if (yych <= 0x00) goto yy689;
+       if (yych != '-') goto yy691;
+yy689:
        ++YYCURSOR;
-#line 186 "../src/conf/parse_opts.re"
+#line 187 "../src/conf/parse_opts.re"
        {
                error ("bad argument to option -t, --type-header: %s", *argv);
                return EXIT_FAIL;
        }
-#line 2753 "src/conf/parse_opts.cc"
-yy675:
+#line 2815 "src/conf/parse_opts.cc"
+yy691:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yybm[0+yych] & 128) {
-               goto yy675;
+               goto yy691;
        }
        ++YYCURSOR;
-#line 190 "../src/conf/parse_opts.re"
+#line 191 "../src/conf/parse_opts.re"
        { opts.set_header_file (*argv); goto opt; }
-#line 2762 "src/conf/parse_opts.cc"
+#line 2824 "src/conf/parse_opts.cc"
 }
-#line 191 "../src/conf/parse_opts.re"
+#line 192 "../src/conf/parse_opts.re"
 
 
 opt_encoding_policy:
@@ -2770,115 +2832,115 @@ opt_encoding_policy:
                return EXIT_FAIL;
        }
 
-#line 2774 "src/conf/parse_opts.cc"
+#line 2836 "src/conf/parse_opts.cc"
 {
        YYCTYPE yych;
        yych = (YYCTYPE)*YYCURSOR;
        if (yych <= 'h') {
-               if (yych == 'f') goto yy683;
+               if (yych == 'f') goto yy699;
        } else {
-               if (yych <= 'i') goto yy684;
-               if (yych == 's') goto yy685;
+               if (yych <= 'i') goto yy700;
+               if (yych == 's') goto yy701;
        }
        ++YYCURSOR;
-yy682:
-#line 201 "../src/conf/parse_opts.re"
+yy698:
+#line 202 "../src/conf/parse_opts.re"
        {
                error ("bad argument to option --encoding-policy (expected: ignore | substitute | fail): %s", *argv);
                return EXIT_FAIL;
        }
-#line 2791 "src/conf/parse_opts.cc"
-yy683:
+#line 2853 "src/conf/parse_opts.cc"
+yy699:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'a') goto yy686;
-       goto yy682;
-yy684:
+       if (yych == 'a') goto yy702;
+       goto yy698;
+yy700:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'g') goto yy688;
-       goto yy682;
-yy685:
+       if (yych == 'g') goto yy704;
+       goto yy698;
+yy701:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'u') goto yy689;
-       goto yy682;
-yy686:
+       if (yych == 'u') goto yy705;
+       goto yy698;
+yy702:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy690;
-yy687:
+       if (yych == 'i') goto yy706;
+yy703:
        YYCURSOR = YYMARKER;
-       goto yy682;
-yy688:
+       goto yy698;
+yy704:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy691;
-       goto yy687;
-yy689:
+       if (yych == 'n') goto yy707;
+       goto yy703;
+yy705:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'b') goto yy692;
-       goto yy687;
-yy690:
+       if (yych == 'b') goto yy708;
+       goto yy703;
+yy706:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'l') goto yy693;
-       goto yy687;
-yy691:
+       if (yych == 'l') goto yy709;
+       goto yy703;
+yy707:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy694;
-       goto yy687;
-yy692:
+       if (yych == 'o') goto yy710;
+       goto yy703;
+yy708:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy695;
-       goto yy687;
-yy693:
+       if (yych == 's') goto yy711;
+       goto yy703;
+yy709:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy696;
-       goto yy687;
-yy694:
+       if (yych <= 0x00) goto yy712;
+       goto yy703;
+yy710:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy698;
-       goto yy687;
-yy695:
+       if (yych == 'r') goto yy714;
+       goto yy703;
+yy711:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy699;
-       goto yy687;
-yy696:
+       if (yych == 't') goto yy715;
+       goto yy703;
+yy712:
        ++YYCURSOR;
-#line 207 "../src/conf/parse_opts.re"
+#line 208 "../src/conf/parse_opts.re"
        { opts.set_encoding_policy (Enc::POLICY_FAIL);       goto opt; }
-#line 2846 "src/conf/parse_opts.cc"
-yy698:
+#line 2908 "src/conf/parse_opts.cc"
+yy714:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy700;
-       goto yy687;
-yy699:
+       if (yych == 'e') goto yy716;
+       goto yy703;
+yy715:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy701;
-       goto yy687;
-yy700:
+       if (yych == 'i') goto yy717;
+       goto yy703;
+yy716:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy702;
-       goto yy687;
-yy701:
+       if (yych <= 0x00) goto yy718;
+       goto yy703;
+yy717:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy704;
-       goto yy687;
-yy702:
+       if (yych == 't') goto yy720;
+       goto yy703;
+yy718:
        ++YYCURSOR;
-#line 205 "../src/conf/parse_opts.re"
+#line 206 "../src/conf/parse_opts.re"
        { opts.set_encoding_policy (Enc::POLICY_IGNORE);     goto opt; }
-#line 2867 "src/conf/parse_opts.cc"
-yy704:
+#line 2929 "src/conf/parse_opts.cc"
+yy720:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'u') goto yy687;
+       if (yych != 'u') goto yy703;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 't') goto yy687;
+       if (yych != 't') goto yy703;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'e') goto yy687;
+       if (yych != 'e') goto yy703;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy687;
+       if (yych >= 0x01) goto yy703;
        ++YYCURSOR;
-#line 206 "../src/conf/parse_opts.re"
+#line 207 "../src/conf/parse_opts.re"
        { opts.set_encoding_policy (Enc::POLICY_SUBSTITUTE); goto opt; }
-#line 2880 "src/conf/parse_opts.cc"
+#line 2942 "src/conf/parse_opts.cc"
 }
-#line 208 "../src/conf/parse_opts.re"
+#line 209 "../src/conf/parse_opts.re"
 
 
 opt_input:
@@ -2888,86 +2950,86 @@ opt_input:
                return EXIT_FAIL;
        }
 
-#line 2892 "src/conf/parse_opts.cc"
+#line 2954 "src/conf/parse_opts.cc"
 {
        YYCTYPE yych;
        yych = (YYCTYPE)*YYCURSOR;
-       if (yych <= 'b') goto yy712;
-       if (yych <= 'c') goto yy714;
-       if (yych <= 'd') goto yy715;
-yy712:
+       if (yych <= 'b') goto yy728;
+       if (yych <= 'c') goto yy730;
+       if (yych <= 'd') goto yy731;
+yy728:
        ++YYCURSOR;
-yy713:
-#line 218 "../src/conf/parse_opts.re"
+yy729:
+#line 219 "../src/conf/parse_opts.re"
        {
                error ("bad argument to option --input (expected: default | custom): %s", *argv);
                return EXIT_FAIL;
        }
-#line 2907 "src/conf/parse_opts.cc"
-yy714:
+#line 2969 "src/conf/parse_opts.cc"
+yy730:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'u') goto yy716;
-       goto yy713;
-yy715:
+       if (yych == 'u') goto yy732;
+       goto yy729;
+yy731:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'e') goto yy718;
-       goto yy713;
-yy716:
+       if (yych == 'e') goto yy734;
+       goto yy729;
+yy732:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy719;
-yy717:
+       if (yych == 's') goto yy735;
+yy733:
        YYCURSOR = YYMARKER;
-       goto yy713;
-yy718:
+       goto yy729;
+yy734:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'f') goto yy720;
-       goto yy717;
-yy719:
+       if (yych == 'f') goto yy736;
+       goto yy733;
+yy735:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy721;
-       goto yy717;
-yy720:
+       if (yych == 't') goto yy737;
+       goto yy733;
+yy736:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy722;
-       goto yy717;
-yy721:
+       if (yych == 'a') goto yy738;
+       goto yy733;
+yy737:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy723;
-       goto yy717;
-yy722:
+       if (yych == 'o') goto yy739;
+       goto yy733;
+yy738:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'u') goto yy724;
-       goto yy717;
-yy723:
+       if (yych == 'u') goto yy740;
+       goto yy733;
+yy739:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'm') goto yy725;
-       goto yy717;
-yy724:
+       if (yych == 'm') goto yy741;
+       goto yy733;
+yy740:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'l') goto yy726;
-       goto yy717;
-yy725:
+       if (yych == 'l') goto yy742;
+       goto yy733;
+yy741:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy727;
-       goto yy717;
-yy726:
+       if (yych <= 0x00) goto yy743;
+       goto yy733;
+yy742:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy729;
-       goto yy717;
-yy727:
+       if (yych == 't') goto yy745;
+       goto yy733;
+yy743:
        ++YYCURSOR;
-#line 223 "../src/conf/parse_opts.re"
+#line 224 "../src/conf/parse_opts.re"
        { opts.set_input_api(INPUT_CUSTOM);  goto opt; }
-#line 2962 "src/conf/parse_opts.cc"
-yy729:
+#line 3024 "src/conf/parse_opts.cc"
+yy745:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy717;
+       if (yych >= 0x01) goto yy733;
        ++YYCURSOR;
-#line 222 "../src/conf/parse_opts.re"
+#line 223 "../src/conf/parse_opts.re"
        { opts.set_input_api(INPUT_DEFAULT); goto opt; }
-#line 2969 "src/conf/parse_opts.cc"
+#line 3031 "src/conf/parse_opts.cc"
 }
-#line 224 "../src/conf/parse_opts.re"
+#line 225 "../src/conf/parse_opts.re"
 
 
 opt_empty_class:
@@ -2977,120 +3039,120 @@ opt_empty_class:
                return EXIT_FAIL;
        }
 
-#line 2981 "src/conf/parse_opts.cc"
+#line 3043 "src/conf/parse_opts.cc"
 {
        YYCTYPE yych;
        yych = (YYCTYPE)*YYCURSOR;
-       if (yych == 'e') goto yy736;
-       if (yych == 'm') goto yy737;
+       if (yych == 'e') goto yy752;
+       if (yych == 'm') goto yy753;
        ++YYCURSOR;
-yy735:
-#line 234 "../src/conf/parse_opts.re"
+yy751:
+#line 235 "../src/conf/parse_opts.re"
        {
                error ("bad argument to option --empty-class (expected: match-empty | match-none | error): %s", *argv);
                return EXIT_FAIL;
        }
-#line 2994 "src/conf/parse_opts.cc"
-yy736:
+#line 3056 "src/conf/parse_opts.cc"
+yy752:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'r') goto yy738;
-       goto yy735;
-yy737:
+       if (yych == 'r') goto yy754;
+       goto yy751;
+yy753:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'a') goto yy740;
-       goto yy735;
-yy738:
+       if (yych == 'a') goto yy756;
+       goto yy751;
+yy754:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy741;
-yy739:
+       if (yych == 'r') goto yy757;
+yy755:
        YYCURSOR = YYMARKER;
-       goto yy735;
-yy740:
+       goto yy751;
+yy756:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy742;
-       goto yy739;
-yy741:
+       if (yych == 't') goto yy758;
+       goto yy755;
+yy757:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy743;
-       goto yy739;
-yy742:
+       if (yych == 'o') goto yy759;
+       goto yy755;
+yy758:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'c') goto yy744;
-       goto yy739;
-yy743:
+       if (yych == 'c') goto yy760;
+       goto yy755;
+yy759:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy745;
-       goto yy739;
-yy744:
+       if (yych == 'r') goto yy761;
+       goto yy755;
+yy760:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'h') goto yy746;
-       goto yy739;
-yy745:
+       if (yych == 'h') goto yy762;
+       goto yy755;
+yy761:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy747;
-       goto yy739;
-yy746:
+       if (yych <= 0x00) goto yy763;
+       goto yy755;
+yy762:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy749;
-       goto yy739;
-yy747:
+       if (yych == '-') goto yy765;
+       goto yy755;
+yy763:
        ++YYCURSOR;
-#line 240 "../src/conf/parse_opts.re"
+#line 241 "../src/conf/parse_opts.re"
        { opts.set_empty_class_policy (EMPTY_CLASS_ERROR);       goto opt; }
-#line 3041 "src/conf/parse_opts.cc"
-yy749:
+#line 3103 "src/conf/parse_opts.cc"
+yy765:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy750;
-       if (yych == 'n') goto yy751;
-       goto yy739;
-yy750:
+       if (yych == 'e') goto yy766;
+       if (yych == 'n') goto yy767;
+       goto yy755;
+yy766:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'm') goto yy752;
-       goto yy739;
-yy751:
+       if (yych == 'm') goto yy768;
+       goto yy755;
+yy767:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy753;
-       goto yy739;
-yy752:
+       if (yych == 'o') goto yy769;
+       goto yy755;
+yy768:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'p') goto yy754;
-       goto yy739;
-yy753:
+       if (yych == 'p') goto yy770;
+       goto yy755;
+yy769:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy755;
-       goto yy739;
-yy754:
+       if (yych == 'n') goto yy771;
+       goto yy755;
+yy770:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy756;
-       goto yy739;
-yy755:
+       if (yych == 't') goto yy772;
+       goto yy755;
+yy771:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy757;
-       goto yy739;
-yy756:
+       if (yych == 'e') goto yy773;
+       goto yy755;
+yy772:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'y') goto yy758;
-       goto yy739;
-yy757:
+       if (yych == 'y') goto yy774;
+       goto yy755;
+yy773:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy759;
-       goto yy739;
-yy758:
+       if (yych <= 0x00) goto yy775;
+       goto yy755;
+yy774:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy761;
-       goto yy739;
-yy759:
+       if (yych <= 0x00) goto yy777;
+       goto yy755;
+yy775:
        ++YYCURSOR;
-#line 239 "../src/conf/parse_opts.re"
+#line 240 "../src/conf/parse_opts.re"
        { opts.set_empty_class_policy (EMPTY_CLASS_MATCH_NONE);  goto opt; }
-#line 3087 "src/conf/parse_opts.cc"
-yy761:
+#line 3149 "src/conf/parse_opts.cc"
+yy777:
        ++YYCURSOR;
-#line 238 "../src/conf/parse_opts.re"
+#line 239 "../src/conf/parse_opts.re"
        { opts.set_empty_class_policy (EMPTY_CLASS_MATCH_EMPTY); goto opt; }
-#line 3092 "src/conf/parse_opts.cc"
+#line 3154 "src/conf/parse_opts.cc"
 }
-#line 241 "../src/conf/parse_opts.re"
+#line 242 "../src/conf/parse_opts.re"
 
 
 opt_dfa_minimization:
@@ -3100,74 +3162,74 @@ opt_dfa_minimization:
                return EXIT_FAIL;
        }
 
-#line 3104 "src/conf/parse_opts.cc"
+#line 3166 "src/conf/parse_opts.cc"
 {
        YYCTYPE yych;
        yych = (YYCTYPE)*YYCURSOR;
-       if (yych == 'm') goto yy767;
-       if (yych == 't') goto yy768;
+       if (yych == 'm') goto yy783;
+       if (yych == 't') goto yy784;
        ++YYCURSOR;
-yy766:
-#line 251 "../src/conf/parse_opts.re"
+yy782:
+#line 252 "../src/conf/parse_opts.re"
        {
                error ("bad argument to option --dfa-minimization (expected: table | moore): %s", *argv);
                return EXIT_FAIL;
        }
-#line 3117 "src/conf/parse_opts.cc"
-yy767:
+#line 3179 "src/conf/parse_opts.cc"
+yy783:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'o') goto yy769;
-       goto yy766;
-yy768:
+       if (yych == 'o') goto yy785;
+       goto yy782;
+yy784:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'a') goto yy771;
-       goto yy766;
-yy769:
+       if (yych == 'a') goto yy787;
+       goto yy782;
+yy785:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy772;
-yy770:
+       if (yych == 'o') goto yy788;
+yy786:
        YYCURSOR = YYMARKER;
-       goto yy766;
-yy771:
+       goto yy782;
+yy787:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'b') goto yy773;
-       goto yy770;
-yy772:
+       if (yych == 'b') goto yy789;
+       goto yy786;
+yy788:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy774;
-       goto yy770;
-yy773:
+       if (yych == 'r') goto yy790;
+       goto yy786;
+yy789:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'l') goto yy775;
-       goto yy770;
-yy774:
+       if (yych == 'l') goto yy791;
+       goto yy786;
+yy790:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy776;
-       goto yy770;
-yy775:
+       if (yych == 'e') goto yy792;
+       goto yy786;
+yy791:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy777;
-       goto yy770;
-yy776:
+       if (yych == 'e') goto yy793;
+       goto yy786;
+yy792:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy778;
-       goto yy770;
-yy777:
+       if (yych <= 0x00) goto yy794;
+       goto yy786;
+yy793:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy780;
-       goto yy770;
-yy778:
+       if (yych <= 0x00) goto yy796;
+       goto yy786;
+yy794:
        ++YYCURSOR;
-#line 256 "../src/conf/parse_opts.re"
+#line 257 "../src/conf/parse_opts.re"
        { opts.set_dfa_minimization (DFA_MINIMIZATION_MOORE); goto opt; }
-#line 3164 "src/conf/parse_opts.cc"
-yy780:
+#line 3226 "src/conf/parse_opts.cc"
+yy796:
        ++YYCURSOR;
-#line 255 "../src/conf/parse_opts.re"
+#line 256 "../src/conf/parse_opts.re"
        { opts.set_dfa_minimization (DFA_MINIMIZATION_TABLE); goto opt; }
-#line 3169 "src/conf/parse_opts.cc"
+#line 3231 "src/conf/parse_opts.cc"
 }
-#line 257 "../src/conf/parse_opts.re"
+#line 258 "../src/conf/parse_opts.re"
 
 
 end:
index ee3a04e131da9662d31335be8471bcf968edaeee..0c987e425fec86d9d21ded8764b02e4078b6fd5f 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.16 on Sat Feb 25 16:26:09 2017 */
+/* Generated by re2c 0.16 on Fri Mar  3 02:04:11 2017 */
 #line 1 "../src/parse/lex.re"
 #include "src/util/c99_stdint.h"
 #include <stddef.h>
index 8f67a009c85799b3766e6c5ce1743f1539d342a4..4d99ac58261c6b958cad589d94d9bd220ba4d270 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.16 on Thu Feb  9 12:04:05 2017 */
+/* Generated by re2c 0.16 on Fri Mar  3 02:03:51 2017 */
 #line 1 "../src/parse/lex_conf.re"
 #include "src/util/c99_stdint.h"
 #include <string>
@@ -160,17 +160,17 @@ yy14:
                                                goto yy116;
                                        }
                                } else {
-                                       goto yy118;
+                                       goto yy119;
                                }
                        } else {
                                if (yyaccept <= 10) {
                                        if (yyaccept == 9) {
-                                               goto yy120;
+                                               goto yy121;
                                        } else {
-                                               goto yy122;
+                                               goto yy123;
                                        }
                                } else {
-                                       goto yy124;
+                                       goto yy125;
                                }
                        }
                }
@@ -179,40 +179,40 @@ yy14:
                        if (yyaccept <= 14) {
                                if (yyaccept <= 13) {
                                        if (yyaccept == 12) {
-                                               goto yy126;
+                                               goto yy127;
                                        } else {
-                                               goto yy192;
+                                               goto yy194;
                                        }
                                } else {
-                                       goto yy286;
+                                       goto yy290;
                                }
                        } else {
                                if (yyaccept <= 16) {
                                        if (yyaccept == 15) {
-                                               goto yy364;
+                                               goto yy369;
                                        } else {
-                                               goto yy441;
+                                               goto yy447;
                                        }
                                } else {
-                                       goto yy552;
+                                       goto yy560;
                                }
                        }
                } else {
                        if (yyaccept <= 20) {
                                if (yyaccept <= 19) {
                                        if (yyaccept == 18) {
-                                               goto yy612;
+                                               goto yy621;
                                        } else {
-                                               goto yy655;
+                                               goto yy665;
                                        }
                                } else {
-                                       goto yy662;
+                                       goto yy672;
                                }
                        } else {
                                if (yyaccept == 21) {
-                                       goto yy747;
+                                       goto yy762;
                                } else {
-                                       goto yy750;
+                                       goto yy765;
                                }
                        }
                }
@@ -476,751 +476,751 @@ yy70:
        case 'i':       goto yy112;
        case 'n':       goto yy114;
        case 'o':       goto yy115;
-       case 'r':       goto yy117;
-       case 's':       goto yy119;
-       case 't':       goto yy121;
-       case 'u':       goto yy123;
-       case 'w':       goto yy125;
-       case 'x':       goto yy127;
+       case 'p':       goto yy117;
+       case 'r':       goto yy118;
+       case 's':       goto yy120;
+       case 't':       goto yy122;
+       case 'u':       goto yy124;
+       case 'w':       goto yy126;
+       case 'x':       goto yy128;
        default:        goto yy14;
        }
 yy71:
        yych = (unsigned char)*++cur;
-       if (yych == ':') goto yy129;
+       if (yych == ':') goto yy130;
        goto yy14;
 yy72:
        yych = (unsigned char)*++cur;
-       if (yych == 'y') goto yy130;
+       if (yych == 'y') goto yy131;
        goto yy14;
 yy73:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy131;
+       if (yych == 'r') goto yy132;
        goto yy14;
 yy74:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy132;
+       if (yych == 'a') goto yy133;
        goto yy14;
 yy75:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy133;
-       if (yych == 'n') goto yy134;
+       if (yych == 'a') goto yy134;
+       if (yych == 'n') goto yy135;
        goto yy14;
 yy76:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy135;
+       if (yych == 'e') goto yy136;
        goto yy14;
 yy77:
        yych = (unsigned char)*++cur;
-       if (yych == 'x') goto yy136;
+       if (yych == 'x') goto yy137;
        goto yy14;
 yy78:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy137;
+       if (yych == 'r') goto yy138;
        goto yy14;
 yy79:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy138;
+       if (yych == 'l') goto yy139;
        goto yy14;
 yy80:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy139;
+       if (yych == 'e') goto yy140;
        goto yy14;
 yy81:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy140;
+       if (yych == 'o') goto yy141;
        goto yy14;
 yy82:
        yych = (unsigned char)*++cur;
-       if (yych == 'm') goto yy141;
+       if (yych == 'm') goto yy142;
        goto yy14;
 yy83:
        yych = (unsigned char)*++cur;
-       if (yych == ':') goto yy142;
+       if (yych == ':') goto yy143;
        goto yy14;
 yy84:
        yych = (unsigned char)*++cur;
-       if (yych == 'h') goto yy143;
+       if (yych == 'h') goto yy144;
        goto yy14;
 yy85:
        yych = (unsigned char)*++cur;
-       if (yych == 'v') goto yy144;
+       if (yych == 'v') goto yy145;
        goto yy14;
 yy86:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy145;
+       if (yych == 't') goto yy146;
        goto yy14;
 yy87:
        yych = (unsigned char)*++cur;
-       if (yych == 'm') goto yy146;
+       if (yych == 'm') goto yy147;
        goto yy14;
 yy88:
        yych = (unsigned char)*++cur;
-       if (yych == 'f') goto yy147;
+       if (yych == 'f') goto yy148;
        goto yy14;
 yy89:
        yych = (unsigned char)*++cur;
-       if (yych == 'Y') goto yy148;
+       if (yych == 'Y') goto yy149;
        goto yy14;
 yy90:
        ++cur;
-#line 66 "../src/parse/lex_conf.re"
+#line 67 "../src/parse/lex_conf.re"
        { lex_conf_enc(Enc::UTF8);   return; }
-#line 569 "src/parse/lex_conf.cc"
+#line 570 "src/parse/lex_conf.cc"
 yy92:
        ++cur;
 #line 42 "../src/parse/lex_conf.re"
        { opts.set_target(opt_t::DOT);      lex_conf_semicolon(); return; }
-#line 574 "src/parse/lex_conf.cc"
+#line 575 "src/parse/lex_conf.cc"
 yy94:
        ++cur;
 #line 49 "../src/parse/lex_conf.re"
        { opts.set_FFlag(lex_conf_bool());              return; }
-#line 579 "src/parse/lex_conf.cc"
+#line 580 "src/parse/lex_conf.cc"
 yy96:
        ++cur;
 #line 43 "../src/parse/lex_conf.re"
        { opts.set_target(opt_t::SKELETON); lex_conf_semicolon(); return; }
-#line 584 "src/parse/lex_conf.cc"
+#line 585 "src/parse/lex_conf.cc"
 yy98:
        ++cur;
 #line 54 "../src/parse/lex_conf.re"
        { opts.set_tags(lex_conf_bool());               return; }
-#line 589 "src/parse/lex_conf.cc"
+#line 590 "src/parse/lex_conf.cc"
 yy100:
        yyaccept = 1;
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'i') goto yy149;
+       if (yych == 'i') goto yy150;
 yy101:
 #line 45 "../src/parse/lex_conf.re"
        { opts.set_bFlag(lex_conf_bool());              return; }
-#line 597 "src/parse/lex_conf.cc"
+#line 598 "src/parse/lex_conf.cc"
 yy102:
        yyaccept = 2;
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'a') goto yy150;
-       if (yych == 'o') goto yy151;
+       if (yych == 'a') goto yy151;
+       if (yych == 'o') goto yy152;
 yy103:
 #line 46 "../src/parse/lex_conf.re"
        { opts.set_cFlag(lex_conf_bool());              return; }
-#line 606 "src/parse/lex_conf.cc"
+#line 607 "src/parse/lex_conf.cc"
 yy104:
        yyaccept = 3;
        yych = (unsigned char)*(ptr = ++cur);
        if (yych <= 'd') goto yy105;
-       if (yych <= 'e') goto yy152;
-       if (yych <= 'f') goto yy153;
+       if (yych <= 'e') goto yy153;
+       if (yych <= 'f') goto yy154;
 yy105:
 #line 47 "../src/parse/lex_conf.re"
        { opts.set_dFlag(lex_conf_bool());              return; }
-#line 616 "src/parse/lex_conf.cc"
+#line 617 "src/parse/lex_conf.cc"
 yy106:
        yyaccept = 4;
        yych = (unsigned char)*(ptr = ++cur);
        if (yych <= 'c') {
-               if (yych == 'a') goto yy154;
-               if (yych >= 'c') goto yy155;
+               if (yych == 'a') goto yy155;
+               if (yych >= 'c') goto yy156;
        } else {
                if (yych <= 'l') goto yy107;
-               if (yych <= 'm') goto yy156;
-               if (yych <= 'n') goto yy157;
+               if (yych <= 'm') goto yy157;
+               if (yych <= 'n') goto yy158;
        }
 yy107:
-#line 62 "../src/parse/lex_conf.re"
+#line 63 "../src/parse/lex_conf.re"
        { lex_conf_enc(Enc::EBCDIC); return; }
-#line 631 "src/parse/lex_conf.cc"
+#line 632 "src/parse/lex_conf.cc"
 yy108:
        yyaccept = 5;
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'l') goto yy158;
+       if (yych == 'l') goto yy159;
 yy109:
 #line 48 "../src/parse/lex_conf.re"
        { opts.set_fFlag(lex_conf_bool());              return; }
-#line 639 "src/parse/lex_conf.cc"
+#line 640 "src/parse/lex_conf.cc"
 yy110:
        ++cur;
 #line 50 "../src/parse/lex_conf.re"
        { opts.set_gFlag(lex_conf_bool());              return; }
-#line 644 "src/parse/lex_conf.cc"
+#line 645 "src/parse/lex_conf.cc"
 yy112:
        yyaccept = 6;
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'n') goto yy159;
+       if (yych == 'n') goto yy160;
 yy113:
 #line 51 "../src/parse/lex_conf.re"
        { opts.set_iFlag(lex_conf_bool());              return; }
-#line 652 "src/parse/lex_conf.cc"
+#line 653 "src/parse/lex_conf.cc"
 yy114:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy160;
-       if (yych == 'o') goto yy161;
+       if (yych == 'e') goto yy161;
+       if (yych == 'o') goto yy162;
        goto yy14;
 yy115:
        yyaccept = 7;
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'u') goto yy162;
+       if (yych == 'u') goto yy163;
 yy116:
-#line 68 "../src/parse/lex_conf.re"
+#line 69 "../src/parse/lex_conf.re"
        { opts.set_output_file(lex_conf_string()); return; }
-#line 665 "src/parse/lex_conf.cc"
+#line 666 "src/parse/lex_conf.cc"
 yy117:
+       yych = (unsigned char)*++cur;
+       if (yych == 'o') goto yy164;
+       goto yy14;
+yy118:
        yyaccept = 8;
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'e') goto yy163;
-yy118:
+       if (yych == 'e') goto yy165;
+yy119:
 #line 52 "../src/parse/lex_conf.re"
        { opts.set_rFlag(lex_conf_bool());              return; }
-#line 673 "src/parse/lex_conf.cc"
-yy119:
+#line 678 "src/parse/lex_conf.cc"
+yy120:
        yyaccept = 9;
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'k') goto yy164;
-       if (yych == 't') goto yy165;
-yy120:
+       if (yych == 'k') goto yy166;
+       if (yych == 't') goto yy167;
+yy121:
 #line 53 "../src/parse/lex_conf.re"
        { opts.set_sFlag(lex_conf_bool());              return; }
-#line 682 "src/parse/lex_conf.cc"
-yy121:
+#line 687 "src/parse/lex_conf.cc"
+yy122:
        yyaccept = 10;
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'a') goto yy166;
-       if (yych == 'y') goto yy167;
-yy122:
-#line 69 "../src/parse/lex_conf.re"
-       { opts.set_header_file(lex_conf_string()); return; }
-#line 691 "src/parse/lex_conf.cc"
+       if (yych == 'a') goto yy168;
+       if (yych == 'y') goto yy169;
 yy123:
+#line 70 "../src/parse/lex_conf.re"
+       { opts.set_header_file(lex_conf_string()); return; }
+#line 696 "src/parse/lex_conf.cc"
+yy124:
        yyaccept = 11;
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'n') goto yy168;
-       if (yych == 't') goto yy169;
-yy124:
-#line 63 "../src/parse/lex_conf.re"
-       { lex_conf_enc(Enc::UTF32);  return; }
-#line 700 "src/parse/lex_conf.cc"
+       if (yych == 'n') goto yy170;
+       if (yych == 't') goto yy171;
 yy125:
+#line 64 "../src/parse/lex_conf.re"
+       { lex_conf_enc(Enc::UTF32);  return; }
+#line 705 "src/parse/lex_conf.cc"
+yy126:
        yyaccept = 12;
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'i') goto yy170;
-yy126:
-#line 64 "../src/parse/lex_conf.re"
-       { lex_conf_enc(Enc::UCS2);   return; }
-#line 708 "src/parse/lex_conf.cc"
+       if (yych == 'i') goto yy172;
 yy127:
-       ++cur;
 #line 65 "../src/parse/lex_conf.re"
-       { lex_conf_enc(Enc::UTF16);  return; }
+       { lex_conf_enc(Enc::UCS2);   return; }
 #line 713 "src/parse/lex_conf.cc"
-yy129:
-       yych = (unsigned char)*++cur;
-       if (yych <= 'r') goto yy14;
-       if (yych <= 's') goto yy171;
-       if (yych <= 't') goto yy172;
-       goto yy14;
+yy128:
+       ++cur;
+#line 66 "../src/parse/lex_conf.re"
+       { lex_conf_enc(Enc::UTF16);  return; }
+#line 718 "src/parse/lex_conf.cc"
 yy130:
        yych = (unsigned char)*++cur;
-       if (yych == 'y') goto yy173;
+       if (yych <= 'r') goto yy14;
+       if (yych <= 's') goto yy173;
+       if (yych <= 't') goto yy174;
        goto yy14;
 yy131:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy174;
+       if (yych == 'y') goto yy175;
        goto yy14;
 yy132:
        yych = (unsigned char)*++cur;
-       if (yych == 'b') goto yy175;
+       if (yych == 'e') goto yy176;
        goto yy14;
 yy133:
        yych = (unsigned char)*++cur;
-       if (yych == 'b') goto yy176;
+       if (yych == 'b') goto yy177;
        goto yy14;
 yy134:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy177;
+       if (yych == 'b') goto yy178;
        goto yy14;
 yy135:
        yych = (unsigned char)*++cur;
-       if (yych == 'f') goto yy178;
+       if (yych == 'e') goto yy179;
        goto yy14;
 yy136:
        yych = (unsigned char)*++cur;
-       if (yych == 'p') goto yy179;
+       if (yych == 'f') goto yy180;
        goto yy14;
 yy137:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy180;
+       if (yych == 'p') goto yy181;
        goto yy14;
 yy138:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy181;
+       if (yych == 'e') goto yy182;
        goto yy14;
 yy139:
        yych = (unsigned char)*++cur;
-       if (yych == 'x') goto yy182;
+       if (yych == 'e') goto yy183;
        goto yy14;
 yy140:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy184;
+       if (yych == 'x') goto yy184;
        goto yy14;
 yy141:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy185;
+       if (yych == 'n') goto yy186;
        goto yy14;
 yy142:
+       yych = (unsigned char)*++cur;
+       if (yych == 'i') goto yy187;
+       goto yy14;
+yy143:
        yych = (unsigned char)*++cur;
        if (yych <= 'd') {
-               if (yych == 'c') goto yy186;
+               if (yych == 'c') goto yy188;
                goto yy14;
        } else {
-               if (yych <= 'e') goto yy187;
-               if (yych == 'p') goto yy188;
+               if (yych <= 'e') goto yy189;
+               if (yych == 'p') goto yy190;
                goto yy14;
        }
-yy143:
-       yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy189;
-       goto yy14;
 yy144:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy190;
+       if (yych == 'r') goto yy191;
        goto yy14;
 yy145:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy191;
+       if (yych == 'i') goto yy192;
        goto yy14;
 yy146:
        yych = (unsigned char)*++cur;
-       if (yych == 'p') goto yy193;
+       if (yych == 'o') goto yy193;
        goto yy14;
 yy147:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy194;
+       if (yych == 'p') goto yy195;
        goto yy14;
 yy148:
        yych = (unsigned char)*++cur;
-       if (yych == 'Y') goto yy195;
+       if (yych == 'i') goto yy196;
        goto yy14;
 yy149:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy196;
+       if (yych == 'Y') goto yy197;
        goto yy14;
 yy150:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy197;
+       if (yych == 't') goto yy198;
        goto yy14;
 yy151:
        yych = (unsigned char)*++cur;
-       if (yych == 'm') goto yy198;
+       if (yych == 's') goto yy199;
        goto yy14;
 yy152:
        yych = (unsigned char)*++cur;
-       if (yych == 'b') goto yy199;
+       if (yych == 'm') goto yy200;
        goto yy14;
 yy153:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy200;
+       if (yych == 'b') goto yy201;
        goto yy14;
 yy154:
        yych = (unsigned char)*++cur;
-       if (yych == 'g') goto yy201;
+       if (yych == 'a') goto yy202;
        goto yy14;
 yy155:
        yych = (unsigned char)*++cur;
-       if (yych == 'b') goto yy202;
+       if (yych == 'g') goto yy203;
        goto yy14;
 yy156:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy203;
-       if (yych == 'p') goto yy204;
+       if (yych == 'b') goto yy204;
        goto yy14;
 yy157:
        yych = (unsigned char)*++cur;
-       if (yych == 'c') goto yy205;
+       if (yych == 'i') goto yy205;
+       if (yych == 'p') goto yy206;
        goto yy14;
 yy158:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy206;
+       if (yych == 'c') goto yy207;
        goto yy14;
 yy159:
        yych = (unsigned char)*++cur;
-       if (yych == 'p') goto yy207;
+       if (yych == 'e') goto yy208;
        goto yy14;
 yy160:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy208;
+       if (yych == 'p') goto yy209;
        goto yy14;
 yy161:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy209;
+       if (yych == 's') goto yy210;
        goto yy14;
 yy162:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy210;
+       if (yych == '-') goto yy211;
        goto yy14;
 yy163:
        yych = (unsigned char)*++cur;
-       if (yych == 'u') goto yy211;
+       if (yych == 't') goto yy212;
        goto yy14;
 yy164:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy212;
+       if (yych == 's') goto yy213;
        goto yy14;
 yy165:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy213;
-       if (yych == 'o') goto yy214;
+       if (yych == 'u') goto yy214;
        goto yy14;
 yy166:
        yych = (unsigned char)*++cur;
-       if (yych == 'g') goto yy215;
+       if (yych == 'e') goto yy215;
        goto yy14;
 yy167:
        yych = (unsigned char)*++cur;
-       if (yych == 'p') goto yy216;
+       if (yych == 'a') goto yy216;
+       if (yych == 'o') goto yy217;
        goto yy14;
 yy168:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy217;
+       if (yych == 'g') goto yy218;
        goto yy14;
 yy169:
        yych = (unsigned char)*++cur;
-       if (yych == 'f') goto yy218;
+       if (yych == 'p') goto yy219;
        goto yy14;
 yy170:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy219;
+       if (yych == 'i') goto yy220;
        goto yy14;
 yy171:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy220;
+       if (yych == 'f') goto yy221;
        goto yy14;
 yy172:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy221;
+       if (yych == 'd') goto yy222;
        goto yy14;
 yy173:
        yych = (unsigned char)*++cur;
-       if (yych == 'F') goto yy222;
-       if (yych == 'N') goto yy223;
+       if (yych == 't') goto yy223;
        goto yy14;
 yy174:
        yych = (unsigned char)*++cur;
-       if (yych == 'f') goto yy224;
+       if (yych == 'o') goto yy224;
        goto yy14;
 yy175:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy225;
+       if (yych == 'F') goto yy225;
+       if (yych == 'N') goto yy226;
        goto yy14;
 yy176:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy226;
+       if (yych == 'f') goto yy227;
        goto yy14;
 yy177:
        yych = (unsigned char)*++cur;
-       if (yych == 'x') goto yy227;
+       if (yych == 'e') goto yy228;
        goto yy14;
 yy178:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy228;
+       if (yych == 'o') goto yy229;
        goto yy14;
 yy179:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy229;
+       if (yych == 'x') goto yy230;
        goto yy14;
 yy180:
        yych = (unsigned char)*++cur;
-       if (yych == 'f') goto yy230;
+       if (yych == 'a') goto yy231;
        goto yy14;
 yy181:
        yych = (unsigned char)*++cur;
-       if (yych == ':') goto yy231;
+       if (yych == 'r') goto yy232;
        goto yy14;
 yy182:
-       ++cur;
-#line 102 "../src/parse/lex_conf.re"
-       { opts.set_yybmHexTable (lex_conf_bool()); return; }
-#line 941 "src/parse/lex_conf.cc"
-yy184:
        yych = (unsigned char)*++cur;
-       if (yych == 'v') goto yy232;
+       if (yych == 'f') goto yy233;
        goto yy14;
-yy185:
+yy183:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy233;
+       if (yych == ':') goto yy234;
        goto yy14;
+yy184:
+       ++cur;
+#line 103 "../src/parse/lex_conf.re"
+       { opts.set_yybmHexTable (lex_conf_bool()); return; }
+#line 950 "src/parse/lex_conf.cc"
 yy186:
        yych = (unsigned char)*++cur;
-       if (yych == 'h') goto yy235;
+       if (yych == 'v') goto yy235;
        goto yy14;
 yy187:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy236;
+       if (yych == 't') goto yy236;
        goto yy14;
 yy188:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy237;
+       if (yych == 'h') goto yy238;
        goto yy14;
 yy189:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy238;
+       if (yych == 'n') goto yy239;
        goto yy14;
 yy190:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy239;
+       if (yych == 'a') goto yy240;
        goto yy14;
 yy191:
-       yyaccept = 13;
-       yych = (unsigned char)*(ptr = ++cur);
-       if (yych == '@') goto yy240;
-yy192:
-#line 86 "../src/parse/lex_conf.re"
-       { opts.set_condGoto         (lex_conf_string ()); return; }
-#line 977 "src/parse/lex_conf.cc"
-yy193:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy241;
+       if (yych == 'e') goto yy241;
        goto yy14;
-yy194:
+yy192:
        yych = (unsigned char)*++cur;
-       if (yych == 'x') goto yy242;
+       if (yych == 'd') goto yy242;
        goto yy14;
+yy193:
+       yyaccept = 13;
+       yych = (unsigned char)*(ptr = ++cur);
+       if (yych == '@') goto yy243;
+yy194:
+#line 87 "../src/parse/lex_conf.re"
+       { opts.set_condGoto         (lex_conf_string ()); return; }
+#line 986 "src/parse/lex_conf.cc"
 yy195:
        yych = (unsigned char)*++cur;
-       switch (yych) {
-       case 'B':       goto yy244;
-       case 'C':       goto yy245;
-       case 'D':       goto yy246;
-       case 'F':       goto yy247;
-       case 'G':       goto yy248;
-       case 'L':       goto yy249;
-       case 'M':       goto yy250;
-       case 'P':       goto yy251;
-       case 'R':       goto yy252;
-       case 'S':       goto yy253;
-       default:        goto yy14;
-       }
+       if (yych == 'r') goto yy244;
+       goto yy14;
 yy196:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy254;
+       if (yych == 'x') goto yy245;
        goto yy14;
 yy197:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy255;
-       goto yy14;
+       switch (yych) {
+       case 'B':       goto yy247;
+       case 'C':       goto yy248;
+       case 'D':       goto yy249;
+       case 'F':       goto yy250;
+       case 'G':       goto yy251;
+       case 'L':       goto yy252;
+       case 'M':       goto yy253;
+       case 'P':       goto yy254;
+       case 'R':       goto yy255;
+       case 'S':       goto yy256;
+       default:        goto yy14;
+       }
 yy198:
        yych = (unsigned char)*++cur;
-       if (yych == 'p') goto yy256;
+       if (yych == '-') goto yy257;
        goto yy14;
 yy199:
        yych = (unsigned char)*++cur;
-       if (yych == 'u') goto yy257;
+       if (yych == 'e') goto yy258;
        goto yy14;
 yy200:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy258;
+       if (yych == 'p') goto yy259;
        goto yy14;
 yy201:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy259;
+       if (yych == 'u') goto yy260;
        goto yy14;
 yy202:
-       ++cur;
-       goto yy107;
-yy203:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy260;
+       if (yych == '-') goto yy261;
        goto yy14;
-yy204:
+yy203:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy261;
+       if (yych == 'e') goto yy262;
        goto yy14;
+yy204:
+       ++cur;
+       goto yy107;
 yy205:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy262;
+       if (yych == 't') goto yy263;
        goto yy14;
 yy206:
        yych = (unsigned char)*++cur;
-       if (yych == 'x') goto yy263;
+       if (yych == 't') goto yy264;
        goto yy14;
 yy207:
        yych = (unsigned char)*++cur;
-       if (yych == 'u') goto yy264;
+       if (yych == 'o') goto yy265;
        goto yy14;
 yy208:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy265;
+       if (yych == 'x') goto yy266;
        goto yy14;
 yy209:
        yych = (unsigned char)*++cur;
-       switch (yych) {
-       case 'd':       goto yy266;
-       case 'g':       goto yy267;
-       case 'l':       goto yy268;
-       case 'v':       goto yy269;
-       default:        goto yy14;
-       }
+       if (yych == 'u') goto yy267;
+       goto yy14;
 yy210:
        yych = (unsigned char)*++cur;
-       if (yych == 'p') goto yy270;
+       if (yych == 't') goto yy268;
        goto yy14;
 yy211:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy271;
-       goto yy14;
+       switch (yych) {
+       case 'd':       goto yy269;
+       case 'g':       goto yy270;
+       case 'l':       goto yy271;
+       case 'v':       goto yy272;
+       default:        goto yy14;
+       }
 yy212:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy272;
+       if (yych == 'p') goto yy273;
        goto yy14;
 yy213:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy273;
+       if (yych == 'i') goto yy274;
        goto yy14;
 yy214:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy274;
+       if (yych == 's') goto yy275;
        goto yy14;
 yy215:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy98;
+       if (yych == 'l') goto yy276;
        goto yy14;
 yy216:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy275;
+       if (yych == 'r') goto yy277;
        goto yy14;
 yy217:
        yych = (unsigned char)*++cur;
-       if (yych == 'c') goto yy276;
+       if (yych == 'r') goto yy278;
        goto yy14;
 yy218:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy277;
+       if (yych == 's') goto yy98;
        goto yy14;
 yy219:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy278;
+       if (yych == 'e') goto yy279;
        goto yy14;
 yy220:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy279;
+       if (yych == 'c') goto yy280;
        goto yy14;
 yy221:
        yych = (unsigned char)*++cur;
-       if (yych == 'p') goto yy280;
+       if (yych == '-') goto yy281;
        goto yy14;
 yy222:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy282;
+       if (yych == 'e') goto yy282;
        goto yy14;
 yy223:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy283;
+       if (yych == 'r') goto yy283;
        goto yy14;
 yy224:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy284;
+       if (yych == 'p') goto yy284;
        goto yy14;
 yy225:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy285;
+       if (yych == 'i') goto yy286;
        goto yy14;
 yy226:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy287;
+       if (yych == 'e') goto yy287;
        goto yy14;
 yy227:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy288;
+       if (yych == 'i') goto yy288;
        goto yy14;
 yy228:
        yych = (unsigned char)*++cur;
-       if (yych == 'u') goto yy289;
+       if (yych == 'l') goto yy289;
        goto yy14;
 yy229:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy290;
+       if (yych == 'r') goto yy291;
        goto yy14;
 yy230:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy291;
+       if (yych == 't') goto yy292;
        goto yy14;
 yy231:
        yych = (unsigned char)*++cur;
-       if (yych == 'y') goto yy292;
+       if (yych == 'u') goto yy293;
        goto yy14;
 yy232:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy293;
+       if (yych == 'e') goto yy294;
        goto yy14;
 yy233:
-       ++cur;
-#line 152 "../src/parse/lex_conf.re"
-       { opts.set_bEmitYYCh      (lex_conf_bool()); return; }
-#line 1157 "src/parse/lex_conf.cc"
-yy235:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy294;
+       if (yych == 'i') goto yy295;
        goto yy14;
-yy236:
+yy234:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy295;
+       if (yych == 'y') goto yy296;
        goto yy14;
-yy237:
+yy235:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy296;
+       if (yych == 'e') goto yy297;
        goto yy14;
+yy236:
+       ++cur;
+#line 153 "../src/parse/lex_conf.re"
+       { opts.set_bEmitYYCh      (lex_conf_bool()); return; }
+#line 1170 "src/parse/lex_conf.cc"
 yy238:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy297;
+       if (yych == 'e') goto yy298;
        goto yy14;
 yy239:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy298;
+       if (yych == 'a') goto yy299;
        goto yy14;
 yy240:
        yych = (unsigned char)*++cur;
-       if (yych == 'c') goto yy299;
+       if (yych == 'r') goto yy300;
        goto yy14;
 yy241:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy300;
+       if (yych == 's') goto yy301;
        goto yy14;
 yy242:
-       ++cur;
-#line 82 "../src/parse/lex_conf.re"
-       { opts.set_condPrefix       (lex_conf_string ()); return; }
-#line 1190 "src/parse/lex_conf.cc"
-yy244:
        yych = (unsigned char)*++cur;
-       if (yych == 'A') goto yy301;
+       if (yych == 'e') goto yy302;
        goto yy14;
-yy245:
+yy243:
        yych = (unsigned char)*++cur;
-       if (yych <= 'S') {
-               if (yych == 'O') goto yy302;
-               goto yy14;
-       } else {
-               if (yych <= 'T') goto yy303;
-               if (yych <= 'U') goto yy304;
-               goto yy14;
-       }
-yy246:
+       if (yych == 'c') goto yy303;
+       goto yy14;
+yy244:
        yych = (unsigned char)*++cur;
-       if (yych == 'E') goto yy305;
+       if (yych == 'e') goto yy304;
        goto yy14;
+yy245:
+       ++cur;
+#line 83 "../src/parse/lex_conf.re"
+       { opts.set_condPrefix       (lex_conf_string ()); return; }
+#line 1203 "src/parse/lex_conf.cc"
 yy247:
        yych = (unsigned char)*++cur;
-       if (yych == 'I') goto yy306;
+       if (yych == 'A') goto yy305;
        goto yy14;
 yy248:
        yych = (unsigned char)*++cur;
-       if (yych == 'E') goto yy307;
-       goto yy14;
+       if (yych <= 'S') {
+               if (yych == 'O') goto yy306;
+               goto yy14;
+       } else {
+               if (yych <= 'T') goto yy307;
+               if (yych <= 'U') goto yy308;
+               goto yy14;
+       }
 yy249:
        yych = (unsigned char)*++cur;
-       if (yych == 'E') goto yy308;
-       if (yych == 'I') goto yy309;
+       if (yych == 'E') goto yy309;
        goto yy14;
 yy250:
        yych = (unsigned char)*++cur;
-       if (yych == 'A') goto yy310;
+       if (yych == 'I') goto yy310;
        goto yy14;
 yy251:
        yych = (unsigned char)*++cur;
@@ -1229,120 +1229,137 @@ yy251:
 yy252:
        yych = (unsigned char)*++cur;
        if (yych == 'E') goto yy312;
+       if (yych == 'I') goto yy313;
        goto yy14;
 yy253:
        yych = (unsigned char)*++cur;
-       if (yych == 'E') goto yy313;
-       if (yych == 'K') goto yy314;
+       if (yych == 'A') goto yy314;
        goto yy14;
 yy254:
        yych = (unsigned char)*++cur;
-       if (yych == 'v') goto yy315;
+       if (yych == 'E') goto yy315;
        goto yy14;
 yy255:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy316;
+       if (yych == 'E') goto yy316;
        goto yy14;
 yy256:
        yych = (unsigned char)*++cur;
-       if (yych == 'u') goto yy317;
+       if (yych == 'E') goto yy317;
+       if (yych == 'K') goto yy318;
        goto yy14;
 yy257:
        yych = (unsigned char)*++cur;
-       if (yych == 'g') goto yy318;
+       if (yych == 'v') goto yy319;
        goto yy14;
 yy258:
        yych = (unsigned char)*++cur;
-       if (yych == 'm') goto yy319;
+       if (yych == '-') goto yy320;
        goto yy14;
 yy259:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy320;
+       if (yych == 'u') goto yy321;
        goto yy14;
 yy260:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy321;
+       if (yych == 'g') goto yy322;
        goto yy14;
 yy261:
        yych = (unsigned char)*++cur;
-       if (yych == 'y') goto yy322;
+       if (yych == 'm') goto yy323;
        goto yy14;
 yy262:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy323;
+       if (yych == 'r') goto yy324;
        goto yy14;
 yy263:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy324;
+       if (yych == '-') goto yy325;
        goto yy14;
 yy264:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy325;
+       if (yych == 'y') goto yy326;
        goto yy14;
 yy265:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy327;
+       if (yych == 'd') goto yy327;
        goto yy14;
 yy266:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy328;
+       if (yych == '-') goto yy328;
        goto yy14;
 yy267:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy329;
+       if (yych == 't') goto yy329;
        goto yy14;
 yy268:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy330;
+       if (yych == 'e') goto yy331;
        goto yy14;
 yy269:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy331;
+       if (yych == 'e') goto yy332;
        goto yy14;
 yy270:
        yych = (unsigned char)*++cur;
-       if (yych == 'u') goto yy332;
+       if (yych == 'e') goto yy333;
        goto yy14;
 yy271:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy333;
+       if (yych == 'o') goto yy334;
        goto yy14;
 yy272:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy334;
+       if (yych == 'e') goto yy335;
        goto yy14;
 yy273:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy335;
+       if (yych == 'u') goto yy336;
        goto yy14;
 yy274:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy336;
+       if (yych == 'x') goto yy337;
        goto yy14;
 yy275:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy337;
+       if (yych == 'a') goto yy338;
        goto yy14;
 yy276:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy338;
+       if (yych == 'e') goto yy339;
        goto yy14;
 yy277:
        yych = (unsigned char)*++cur;
-       if (yych == '1') goto yy339;
-       if (yych == '8') goto yy90;
+       if (yych == 't') goto yy340;
        goto yy14;
 yy278:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy340;
+       if (yych == 'a') goto yy341;
        goto yy14;
 yy279:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy341;
+       if (yych == '-') goto yy342;
        goto yy14;
 yy280:
+       yych = (unsigned char)*++cur;
+       if (yych == 'o') goto yy343;
+       goto yy14;
+yy281:
+       yych = (unsigned char)*++cur;
+       if (yych == '1') goto yy344;
+       if (yych == '8') goto yy90;
+       goto yy14;
+yy282:
+       yych = (unsigned char)*++cur;
+       if (yych == '-') goto yy345;
+       goto yy14;
+yy283:
+       yych = (unsigned char)*++cur;
+       if (yych == 'i') goto yy346;
+       goto yy14;
+yy284:
        ++cur;
-#line 137 "../src/parse/lex_conf.re"
+#line 138 "../src/parse/lex_conf.re"
        {
                const int32_t n = lex_conf_number ();
                if (n < 0)
@@ -1352,1210 +1369,1194 @@ yy280:
                opts.set_topIndent (static_cast<uint32_t> (n));
                return;
        }
-#line 1356 "src/parse/lex_conf.cc"
-yy282:
+#line 1373 "src/parse/lex_conf.cc"
+yy286:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy342;
+       if (yych == 'l') goto yy347;
        goto yy14;
-yy283:
+yy287:
        yych = (unsigned char)*++cur;
-       if (yych == 'x') goto yy343;
+       if (yych == 'x') goto yy348;
        goto yy14;
-yy284:
+yy288:
        yych = (unsigned char)*++cur;
-       if (yych == 'x') goto yy344;
+       if (yych == 'x') goto yy349;
        goto yy14;
-yy285:
+yy289:
        yyaccept = 14;
        yych = (unsigned char)*(ptr = ++cur);
        if (yych <= 0x1F) {
                if (yych == '\t') {
                        ctx = cur;
-                       goto yy346;
+                       goto yy351;
                }
        } else {
                if (yych <= ' ') {
                        ctx = cur;
-                       goto yy346;
+                       goto yy351;
                }
                if (yych == '=') {
                        ctx = cur;
-                       goto yy348;
+                       goto yy353;
                }
        }
-yy286:
-#line 165 "../src/parse/lex_conf.re"
-       { opts.set_startlabel       (lex_conf_string()); return; }
-#line 1390 "src/parse/lex_conf.cc"
-yy287:
-       yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy350;
-       goto yy14;
-yy288:
-       yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy352;
-       goto yy14;
-yy289:
-       yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy353;
-       goto yy14;
 yy290:
-       yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy354;
-       goto yy14;
+#line 166 "../src/parse/lex_conf.re"
+       { opts.set_startlabel       (lex_conf_string()); return; }
+#line 1407 "src/parse/lex_conf.cc"
 yy291:
        yych = (unsigned char)*++cur;
-       if (yych == 'x') goto yy355;
+       if (yych == 't') goto yy355;
        goto yy14;
 yy292:
        yych = (unsigned char)*++cur;
-       if (yych == 'y') goto yy357;
+       if (yych == 'l') goto yy357;
        goto yy14;
 yy293:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy358;
+       if (yych == 'l') goto yy358;
        goto yy14;
 yy294:
        yych = (unsigned char)*++cur;
-       if (yych == 'c') goto yy359;
+       if (yych == 's') goto yy359;
        goto yy14;
 yy295:
        yych = (unsigned char)*++cur;
-       if (yych == 'b') goto yy360;
+       if (yych == 'x') goto yy360;
        goto yy14;
 yy296:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy361;
+       if (yych == 'y') goto yy362;
        goto yy14;
 yy297:
        yych = (unsigned char)*++cur;
-       if (yych == 'h') goto yy362;
+       if (yych == 'r') goto yy363;
        goto yy14;
 yy298:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy363;
+       if (yych == 'c') goto yy364;
        goto yy14;
 yy299:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy365;
+       if (yych == 'b') goto yy365;
        goto yy14;
 yy300:
        yych = (unsigned char)*++cur;
-       if (yych == 'f') goto yy366;
+       if (yych == 'a') goto yy366;
        goto yy14;
 yy301:
        yych = (unsigned char)*++cur;
-       if (yych == 'C') goto yy367;
+       if (yych == 'h') goto yy367;
        goto yy14;
 yy302:
        yych = (unsigned char)*++cur;
-       if (yych == 'N') goto yy368;
-       if (yych == 'P') goto yy369;
+       if (yych == 'r') goto yy368;
        goto yy14;
 yy303:
        yych = (unsigned char)*++cur;
-       if (yych <= 'W') goto yy14;
-       if (yych <= 'X') goto yy370;
-       if (yych <= 'Y') goto yy371;
+       if (yych == 'o') goto yy370;
        goto yy14;
 yy304:
        yych = (unsigned char)*++cur;
-       if (yych == 'R') goto yy372;
+       if (yych == 'f') goto yy371;
        goto yy14;
 yy305:
        yych = (unsigned char)*++cur;
-       if (yych == 'B') goto yy373;
+       if (yych == 'C') goto yy372;
        goto yy14;
 yy306:
        yych = (unsigned char)*++cur;
-       if (yych == 'L') goto yy374;
+       if (yych == 'N') goto yy373;
+       if (yych == 'P') goto yy374;
        goto yy14;
 yy307:
        yych = (unsigned char)*++cur;
-       if (yych == 'T') goto yy375;
+       if (yych <= 'W') goto yy14;
+       if (yych <= 'X') goto yy375;
+       if (yych <= 'Y') goto yy376;
        goto yy14;
 yy308:
        yych = (unsigned char)*++cur;
-       if (yych == 'S') goto yy376;
+       if (yych == 'R') goto yy377;
        goto yy14;
 yy309:
        yych = (unsigned char)*++cur;
-       if (yych == 'M') goto yy377;
+       if (yych == 'B') goto yy378;
        goto yy14;
 yy310:
        yych = (unsigned char)*++cur;
-       if (yych == 'R') goto yy378;
+       if (yych == 'L') goto yy379;
        goto yy14;
 yy311:
        yych = (unsigned char)*++cur;
-       if (yych == 'E') goto yy379;
+       if (yych == 'T') goto yy380;
        goto yy14;
 yy312:
        yych = (unsigned char)*++cur;
-       if (yych == 'S') goto yy380;
+       if (yych == 'S') goto yy381;
        goto yy14;
 yy313:
        yych = (unsigned char)*++cur;
-       if (yych == 'T') goto yy381;
+       if (yych == 'M') goto yy382;
        goto yy14;
 yy314:
        yych = (unsigned char)*++cur;
-       if (yych == 'I') goto yy382;
+       if (yych == 'R') goto yy383;
        goto yy14;
 yy315:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy383;
+       if (yych == 'E') goto yy384;
        goto yy14;
 yy316:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy384;
+       if (yych == 'S') goto yy385;
        goto yy14;
 yy317:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy385;
+       if (yych == 'T') goto yy386;
        goto yy14;
 yy318:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy386;
+       if (yych == 'I') goto yy387;
        goto yy14;
 yy319:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy387;
+       if (yych == 'e') goto yy388;
        goto yy14;
 yy320:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy388;
+       if (yych == 'i') goto yy389;
        goto yy14;
 yy321:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy389;
+       if (yych == 't') goto yy390;
        goto yy14;
 yy322:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy390;
+       if (yych == '-') goto yy391;
        goto yy14;
 yy323:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy391;
+       if (yych == 'i') goto yy392;
        goto yy14;
 yy324:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy392;
+       if (yych == '-') goto yy393;
        goto yy14;
 yy325:
-       ++cur;
-#line 72 "../src/parse/lex_conf.re"
-       { lex_conf_input();            return; }
-#line 1550 "src/parse/lex_conf.cc"
-yy327:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy393;
+       if (yych == 'd') goto yy394;
        goto yy14;
-yy328:
+yy326:
        yych = (unsigned char)*++cur;
-       if (yych == 'b') goto yy394;
+       if (yych == '-') goto yy395;
        goto yy14;
-yy329:
+yy327:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy395;
+       if (yych == 'i') goto yy396;
        goto yy14;
-yy330:
+yy328:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy396;
+       if (yych == 's') goto yy397;
        goto yy14;
+yy329:
+       ++cur;
+#line 73 "../src/parse/lex_conf.re"
+       { lex_conf_input();            return; }
+#line 1567 "src/parse/lex_conf.cc"
 yy331:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy397;
+       if (yych == 'd') goto yy398;
        goto yy14;
 yy332:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy398;
+       if (yych == 'b') goto yy399;
        goto yy14;
 yy333:
        yych = (unsigned char)*++cur;
-       if (yych == 'b') goto yy399;
+       if (yych == 'n') goto yy400;
        goto yy14;
 yy334:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy400;
+       if (yych == 'o') goto yy401;
        goto yy14;
 yy335:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy401;
+       if (yych == 'r') goto yy402;
        goto yy14;
 yy336:
        yych = (unsigned char)*++cur;
-       if (yych == 'b') goto yy402;
+       if (yych == 't') goto yy403;
        goto yy14;
 yy337:
        yych = (unsigned char)*++cur;
-       if (yych == 'h') goto yy403;
+       if (yych == '-') goto yy404;
        goto yy14;
 yy338:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy404;
+       if (yych == 'b') goto yy405;
        goto yy14;
 yy339:
        yych = (unsigned char)*++cur;
-       if (yych == '6') goto yy127;
+       if (yych == 't') goto yy406;
        goto yy14;
 yy340:
        yych = (unsigned char)*++cur;
-       if (yych == 'c') goto yy405;
+       if (yych == '-') goto yy407;
        goto yy14;
 yy341:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy406;
+       if (yych == 'b') goto yy408;
        goto yy14;
 yy342:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy407;
+       if (yych == 'h') goto yy409;
        goto yy14;
 yy343:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy408;
+       if (yych == 'd') goto yy410;
        goto yy14;
 yy344:
+       yych = (unsigned char)*++cur;
+       if (yych == '6') goto yy128;
+       goto yy14;
+yy345:
+       yych = (unsigned char)*++cur;
+       if (yych == 'c') goto yy411;
+       goto yy14;
+yy346:
+       yych = (unsigned char)*++cur;
+       if (yych == 'n') goto yy412;
+       goto yy14;
+yy347:
+       yych = (unsigned char)*++cur;
+       if (yych == 'l') goto yy413;
+       goto yy14;
+yy348:
+       yych = (unsigned char)*++cur;
+       if (yych == 't') goto yy414;
+       goto yy14;
+yy349:
        ++cur;
-#line 161 "../src/parse/lex_conf.re"
+#line 162 "../src/parse/lex_conf.re"
        { opts.set_labelPrefix (lex_conf_string ()); return; }
-#line 1623 "src/parse/lex_conf.cc"
-yy346:
+#line 1644 "src/parse/lex_conf.cc"
+yy351:
        ++cur;
        if (lim <= cur) fill(1);
        yych = (unsigned char)*cur;
        if (yybm[0+yych] & 64) {
-               goto yy346;
+               goto yy351;
        }
        if (yych != '=') goto yy14;
-yy348:
+yy353:
        ++cur;
        if ((lim - cur) < 2) fill(2);
        yych = (unsigned char)*cur;
        if (yych <= ',') {
                if (yych <= '\t') {
                        if (yych <= 0x08) goto yy14;
-                       goto yy348;
+                       goto yy353;
                } else {
-                       if (yych == ' ') goto yy348;
+                       if (yych == ' ') goto yy353;
                        goto yy14;
                }
        } else {
                if (yych <= '/') {
-                       if (yych <= '-') goto yy410;
+                       if (yych <= '-') goto yy416;
                        goto yy14;
                } else {
-                       if (yych <= '0') goto yy411;
-                       if (yych <= '9') goto yy413;
+                       if (yych <= '0') goto yy417;
+                       if (yych <= '9') goto yy419;
                        goto yy14;
                }
        }
-yy350:
+yy355:
        ++cur;
-#line 97 "../src/parse/lex_conf.re"
+#line 98 "../src/parse/lex_conf.re"
        { opts.set_bUseStateAbort  (lex_conf_bool()); return; }
-#line 1658 "src/parse/lex_conf.cc"
-yy352:
+#line 1679 "src/parse/lex_conf.cc"
+yy357:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy415;
+       if (yych == 'a') goto yy421;
        goto yy14;
-yy353:
+yy358:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy416;
+       if (yych == 't') goto yy422;
        goto yy14;
-yy354:
+yy359:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy418;
+       if (yych == 's') goto yy424;
        goto yy14;
-yy355:
+yy360:
        ++cur;
-#line 132 "../src/parse/lex_conf.re"
+#line 133 "../src/parse/lex_conf.re"
        { opts.set_tags_prefix    (lex_conf_string ()); return; }
-#line 1675 "src/parse/lex_conf.cc"
-yy357:
+#line 1696 "src/parse/lex_conf.cc"
+yy362:
        yych = (unsigned char)*++cur;
        if (yych <= 'c') {
                if (yych <= '`') goto yy14;
-               if (yych <= 'a') goto yy419;
-               if (yych <= 'b') goto yy420;
-               goto yy421;
+               if (yych <= 'a') goto yy425;
+               if (yych <= 'b') goto yy426;
+               goto yy427;
        } else {
                if (yych <= 'r') goto yy14;
-               if (yych <= 's') goto yy422;
-               if (yych <= 't') goto yy423;
+               if (yych <= 's') goto yy428;
+               if (yych <= 't') goto yy429;
                goto yy14;
        }
-yy358:
-       yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy424;
-       goto yy14;
-yy359:
-       yych = (unsigned char)*++cur;
-       if (yych == 'k') goto yy425;
-       goto yy14;
-yy360:
-       yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy427;
-       goto yy14;
-yy361:
+yy363:
        yych = (unsigned char)*++cur;
-       if (yych == 'm') goto yy428;
+       if (yych == 's') goto yy430;
        goto yy14;
-yy362:
+yy364:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy429;
+       if (yych == 'k') goto yy431;
        goto yy14;
-yy363:
-       yyaccept = 15;
-       yych = (unsigned char)*(ptr = ++cur);
-       if (yych == '@') goto yy430;
-yy364:
-#line 84 "../src/parse/lex_conf.re"
-       { opts.set_condDivider      (lex_conf_string ()); return; }
-#line 1716 "src/parse/lex_conf.cc"
 yy365:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy431;
+       if (yych == 'l') goto yy433;
        goto yy14;
 yy366:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy432;
+       if (yych == 'm') goto yy434;
        goto yy14;
 yy367:
        yych = (unsigned char)*++cur;
-       if (yych == 'K') goto yy433;
+       if (yych == 'o') goto yy435;
        goto yy14;
 yy368:
-       yych = (unsigned char)*++cur;
-       if (yych == 'D') goto yy434;
-       goto yy14;
+       yyaccept = 15;
+       yych = (unsigned char)*(ptr = ++cur);
+       if (yych == '@') goto yy436;
 yy369:
-       yych = (unsigned char)*++cur;
-       if (yych == 'Y') goto yy435;
-       goto yy14;
+#line 85 "../src/parse/lex_conf.re"
+       { opts.set_condDivider      (lex_conf_string ()); return; }
+#line 1737 "src/parse/lex_conf.cc"
 yy370:
        yych = (unsigned char)*++cur;
-       if (yych == 'M') goto yy436;
+       if (yych == 'n') goto yy437;
        goto yy14;
 yy371:
        yych = (unsigned char)*++cur;
-       if (yych == 'P') goto yy437;
+       if (yych == 'i') goto yy438;
        goto yy14;
 yy372:
        yych = (unsigned char)*++cur;
-       if (yych == 'S') goto yy438;
+       if (yych == 'K') goto yy439;
        goto yy14;
 yy373:
        yych = (unsigned char)*++cur;
-       if (yych == 'U') goto yy439;
+       if (yych == 'D') goto yy440;
        goto yy14;
 yy374:
        yych = (unsigned char)*++cur;
-       if (yych == 'L') goto yy440;
+       if (yych == 'Y') goto yy441;
        goto yy14;
 yy375:
        yych = (unsigned char)*++cur;
-       if (yych == 'C') goto yy442;
-       if (yych == 'S') goto yy443;
+       if (yych == 'M') goto yy442;
        goto yy14;
 yy376:
        yych = (unsigned char)*++cur;
-       if (yych == 'S') goto yy444;
+       if (yych == 'P') goto yy443;
        goto yy14;
 yy377:
        yych = (unsigned char)*++cur;
-       if (yych == 'I') goto yy445;
+       if (yych == 'S') goto yy444;
        goto yy14;
 yy378:
        yych = (unsigned char)*++cur;
-       if (yych == 'K') goto yy446;
+       if (yych == 'U') goto yy445;
        goto yy14;
 yy379:
        yych = (unsigned char)*++cur;
-       if (yych == 'K') goto yy447;
+       if (yych == 'L') goto yy446;
        goto yy14;
 yy380:
        yych = (unsigned char)*++cur;
-       if (yych == 'T') goto yy449;
+       if (yych == 'C') goto yy448;
+       if (yych == 'S') goto yy449;
        goto yy14;
 yy381:
        yych = (unsigned char)*++cur;
-       if (yych == 'C') goto yy450;
-       if (yych == 'S') goto yy451;
+       if (yych == 'S') goto yy450;
        goto yy14;
 yy382:
        yych = (unsigned char)*++cur;
-       if (yych == 'P') goto yy452;
+       if (yych == 'I') goto yy451;
        goto yy14;
 yy383:
        yych = (unsigned char)*++cur;
-       if (yych == 'c') goto yy454;
+       if (yych == 'K') goto yy452;
        goto yy14;
 yy384:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy455;
+       if (yych == 'K') goto yy453;
        goto yy14;
 yy385:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy456;
+       if (yych == 'T') goto yy455;
        goto yy14;
 yy386:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy457;
+       if (yych == 'C') goto yy456;
+       if (yych == 'S') goto yy457;
        goto yy14;
 yy387:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy458;
+       if (yych == 'P') goto yy458;
        goto yy14;
 yy388:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy459;
+       if (yych == 'c') goto yy460;
        goto yy14;
 yy389:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy460;
+       if (yych == 'n') goto yy461;
        goto yy14;
 yy390:
        yych = (unsigned char)*++cur;
-       if (yych == 'c') goto yy461;
+       if (yych == 'e') goto yy462;
        goto yy14;
 yy391:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy462;
+       if (yych == 'o') goto yy463;
        goto yy14;
 yy392:
        yych = (unsigned char)*++cur;
-       if (yych == 'y') goto yy463;
+       if (yych == 'n') goto yy464;
        goto yy14;
 yy393:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy464;
+       if (yych == 's') goto yy465;
        goto yy14;
 yy394:
        yych = (unsigned char)*++cur;
-       if (yych == 'u') goto yy465;
+       if (yych == 'o') goto yy466;
        goto yy14;
 yy395:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy466;
+       if (yych == 'c') goto yy467;
        goto yy14;
 yy396:
        yych = (unsigned char)*++cur;
-       if (yych == 'k') goto yy467;
+       if (yych == 'n') goto yy468;
        goto yy14;
 yy397:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy468;
+       if (yych == 'y') goto yy469;
        goto yy14;
 yy398:
-       ++cur;
-       goto yy116;
+       yych = (unsigned char)*++cur;
+       if (yych == '-') goto yy470;
+       goto yy14;
 yy399:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy469;
+       if (yych == 'u') goto yy471;
        goto yy14;
 yy400:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy470;
+       if (yych == 'e') goto yy472;
        goto yy14;
 yy401:
        yych = (unsigned char)*++cur;
-       if (yych == 'c') goto yy471;
+       if (yych == 'k') goto yy473;
        goto yy14;
 yy402:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy472;
+       if (yych == 's') goto yy474;
        goto yy14;
 yy403:
-       yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy473;
-       goto yy14;
+       ++cur;
+       goto yy116;
 yy404:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy474;
+       if (yych == 'c') goto yy475;
        goto yy14;
 yy405:
        yych = (unsigned char)*++cur;
-       if (yych == 'h') goto yy475;
+       if (yych == 'l') goto yy476;
        goto yy14;
 yy406:
        yych = (unsigned char)*++cur;
-       if (yych == 'g') goto yy476;
+       if (yych == 'o') goto yy477;
        goto yy14;
 yy407:
        yych = (unsigned char)*++cur;
-       if (yych == 'L') goto yy478;
+       if (yych == 'c') goto yy478;
        goto yy14;
 yy408:
-       ++cur;
-#line 96 "../src/parse/lex_conf.re"
-       { opts.set_yynext          (lex_conf_string ()); return; }
-#line 1894 "src/parse/lex_conf.cc"
-yy410:
        yych = (unsigned char)*++cur;
-       if (yych <= '0') goto yy14;
-       if (yych <= '9') goto yy413;
+       if (yych == 'l') goto yy479;
        goto yy14;
-yy411:
-       ++cur;
-yy412:
-       cur = ctx;
-#line 164 "../src/parse/lex_conf.re"
-       { opts.set_startlabel_force (lex_conf_bool());   return; }
-#line 1906 "src/parse/lex_conf.cc"
-yy413:
-       ++cur;
-       if (lim <= cur) fill(1);
-       yych = (unsigned char)*cur;
-       if (yybm[0+yych] & 128) {
-               goto yy413;
-       }
-       goto yy412;
-yy415:
+yy409:
        yych = (unsigned char)*++cur;
-       if (yych == 'b') goto yy479;
+       if (yych == 'e') goto yy480;
        goto yy14;
-yy416:
-       ++cur;
-#line 131 "../src/parse/lex_conf.re"
-       { opts.set_tags_default   (lex_conf_string ()); return; }
-#line 1923 "src/parse/lex_conf.cc"
-yy418:
+yy410:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy480;
+       if (yych == 'e') goto yy481;
        goto yy14;
-yy419:
+yy411:
        yych = (unsigned char)*++cur;
-       if (yych == 'c') goto yy481;
+       if (yych == 'h') goto yy482;
        goto yy14;
-yy420:
+yy412:
        yych = (unsigned char)*++cur;
-       if (yych == 'm') goto yy482;
+       if (yych == 'g') goto yy483;
        goto yy14;
-yy421:
+yy413:
        yych = (unsigned char)*++cur;
-       if (yych == 'h') goto yy484;
-       if (yych == 't') goto yy486;
+       if (yych == 'L') goto yy485;
        goto yy14;
-yy422:
+yy414:
+       ++cur;
+#line 97 "../src/parse/lex_conf.re"
+       { opts.set_yynext          (lex_conf_string ()); return; }
+#line 1919 "src/parse/lex_conf.cc"
+yy416:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy487;
+       if (yych <= '0') goto yy14;
+       if (yych <= '9') goto yy419;
        goto yy14;
-yy423:
+yy417:
+       ++cur;
+yy418:
+       cur = ctx;
+#line 165 "../src/parse/lex_conf.re"
+       { opts.set_startlabel_force (lex_conf_bool());   return; }
+#line 1931 "src/parse/lex_conf.cc"
+yy419:
+       ++cur;
+       if (lim <= cur) fill(1);
+       yych = (unsigned char)*cur;
+       if (yybm[0+yych] & 128) {
+               goto yy419;
+       }
+       goto yy418;
+yy421:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy488;
+       if (yych == 'b') goto yy486;
        goto yy14;
+yy422:
+       ++cur;
+#line 132 "../src/parse/lex_conf.re"
+       { opts.set_tags_default   (lex_conf_string ()); return; }
+#line 1948 "src/parse/lex_conf.cc"
 yy424:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy489;
+       if (yych == 'i') goto yy487;
        goto yy14;
 yy425:
-       ++cur;
-#line 159 "../src/parse/lex_conf.re"
-       { opts.set_fill_check   (lex_conf_bool()); return; }
-#line 1957 "src/parse/lex_conf.cc"
+       yych = (unsigned char)*++cur;
+       if (yych == 'c') goto yy488;
+       goto yy14;
+yy426:
+       yych = (unsigned char)*++cur;
+       if (yych == 'm') goto yy489;
+       goto yy14;
 yy427:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy490;
+       if (yych == 'h') goto yy491;
+       if (yych == 't') goto yy493;
        goto yy14;
 yy428:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy492;
+       if (yych == 't') goto yy494;
        goto yy14;
 yy429:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy493;
+       if (yych == 'a') goto yy495;
        goto yy14;
 yy430:
        yych = (unsigned char)*++cur;
-       if (yych == 'c') goto yy494;
+       if (yych == 'i') goto yy496;
        goto yy14;
 yy431:
-       yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy495;
-       goto yy14;
-yy432:
-       yych = (unsigned char)*++cur;
-       if (yych == 'x') goto yy497;
-       goto yy14;
+       ++cur;
+#line 160 "../src/parse/lex_conf.re"
+       { opts.set_fill_check   (lex_conf_bool()); return; }
+#line 1982 "src/parse/lex_conf.cc"
 yy433:
        yych = (unsigned char)*++cur;
-       if (yych == 'U') goto yy499;
+       if (yych == 'e') goto yy497;
        goto yy14;
 yy434:
        yych = (unsigned char)*++cur;
-       if (yych == 'T') goto yy500;
+       if (yych == 'e') goto yy499;
        goto yy14;
 yy435:
        yych = (unsigned char)*++cur;
-       if (yych == 'T') goto yy501;
+       if (yych == 'l') goto yy500;
        goto yy14;
 yy436:
        yych = (unsigned char)*++cur;
-       if (yych == 'A') goto yy502;
+       if (yych == 'c') goto yy501;
        goto yy14;
 yy437:
        yych = (unsigned char)*++cur;
-       if (yych == 'E') goto yy503;
+       if (yych == 'd') goto yy502;
        goto yy14;
 yy438:
        yych = (unsigned char)*++cur;
-       if (yych == 'O') goto yy505;
+       if (yych == 'x') goto yy504;
        goto yy14;
 yy439:
        yych = (unsigned char)*++cur;
-       if (yych == 'G') goto yy506;
+       if (yych == 'U') goto yy506;
        goto yy14;
 yy440:
-       yyaccept = 16;
-       yych = (unsigned char)*(ptr = ++cur);
-       if (yych == ':') goto yy508;
-       if (yych == '@') goto yy509;
+       yych = (unsigned char)*++cur;
+       if (yych == 'T') goto yy507;
+       goto yy14;
 yy441:
-#line 154 "../src/parse/lex_conf.re"
-       { opts.set_fill         (lex_conf_string ()); return; }
-#line 2018 "src/parse/lex_conf.cc"
+       yych = (unsigned char)*++cur;
+       if (yych == 'T') goto yy508;
+       goto yy14;
 yy442:
        yych = (unsigned char)*++cur;
-       if (yych == 'O') goto yy510;
+       if (yych == 'A') goto yy509;
        goto yy14;
 yy443:
        yych = (unsigned char)*++cur;
-       if (yych == 'T') goto yy511;
+       if (yych == 'E') goto yy510;
        goto yy14;
 yy444:
        yych = (unsigned char)*++cur;
-       if (yych == 'T') goto yy512;
+       if (yych == 'O') goto yy512;
        goto yy14;
 yy445:
        yych = (unsigned char)*++cur;
-       if (yych == 'T') goto yy513;
+       if (yych == 'G') goto yy513;
        goto yy14;
 yy446:
-       yych = (unsigned char)*++cur;
-       if (yych == 'E') goto yy515;
-       goto yy14;
+       yyaccept = 16;
+       yych = (unsigned char)*(ptr = ++cur);
+       if (yych == ':') goto yy515;
+       if (yych == '@') goto yy516;
 yy447:
-       ++cur;
-#line 120 "../src/parse/lex_conf.re"
-       { opts.set_yypeek       (lex_conf_string ()); return; }
+#line 155 "../src/parse/lex_conf.re"
+       { opts.set_fill         (lex_conf_string ()); return; }
 #line 2043 "src/parse/lex_conf.cc"
+yy448:
+       yych = (unsigned char)*++cur;
+       if (yych == 'O') goto yy517;
+       goto yy14;
 yy449:
        yych = (unsigned char)*++cur;
-       if (yych == 'O') goto yy516;
+       if (yych == 'T') goto yy518;
        goto yy14;
 yy450:
        yych = (unsigned char)*++cur;
-       if (yych == 'O') goto yy517;
+       if (yych == 'T') goto yy519;
        goto yy14;
 yy451:
        yych = (unsigned char)*++cur;
-       if (yych == 'T') goto yy518;
+       if (yych == 'T') goto yy520;
        goto yy14;
 yy452:
-       ++cur;
-#line 121 "../src/parse/lex_conf.re"
-       { opts.set_yyskip       (lex_conf_string ()); return; }
-#line 2060 "src/parse/lex_conf.cc"
-yy454:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy519;
+       if (yych == 'E') goto yy522;
        goto yy14;
+yy453:
+       ++cur;
+#line 121 "../src/parse/lex_conf.re"
+       { opts.set_yypeek       (lex_conf_string ()); return; }
+#line 2068 "src/parse/lex_conf.cc"
 yy455:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy520;
-       if (yych == 'v') goto yy521;
+       if (yych == 'O') goto yy523;
        goto yy14;
 yy456:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy522;
+       if (yych == 'O') goto yy524;
        goto yy14;
 yy457:
        yych = (unsigned char)*++cur;
-       if (yych == 'u') goto yy523;
+       if (yych == 'T') goto yy525;
        goto yy14;
 yy458:
-       yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy524;
-       goto yy14;
-yy459:
-       yych = (unsigned char)*++cur;
-       if (yych == 'k') goto yy525;
-       goto yy14;
+       ++cur;
+#line 122 "../src/parse/lex_conf.re"
+       { opts.set_yyskip       (lex_conf_string ()); return; }
+#line 2085 "src/parse/lex_conf.cc"
 yy460:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy92;
+       if (yych == 't') goto yy526;
        goto yy14;
 yy461:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy526;
+       if (yych == 's') goto yy527;
+       if (yych == 'v') goto yy528;
        goto yy14;
 yy462:
        yych = (unsigned char)*++cur;
-       if (yych == 'g') goto yy527;
+       if (yych == 'd') goto yy529;
        goto yy14;
 yy463:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy528;
+       if (yych == 'u') goto yy530;
        goto yy14;
 yy464:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy529;
+       if (yych == 'i') goto yy531;
        goto yy14;
 yy465:
        yych = (unsigned char)*++cur;
-       if (yych == 'g') goto yy530;
+       if (yych == 'k') goto yy532;
        goto yy14;
 yy466:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy531;
+       if (yych == 't') goto yy92;
        goto yy14;
 yy467:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy532;
+       if (yych == 'l') goto yy533;
        goto yy14;
 yy468:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy533;
+       if (yych == 'g') goto yy534;
        goto yy14;
 yy469:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy534;
+       if (yych == 'n') goto yy535;
        goto yy14;
 yy470:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy96;
+       if (yych == 'i') goto yy536;
        goto yy14;
 yy471:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy535;
+       if (yych == 'g') goto yy537;
        goto yy14;
 yy472:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy536;
+       if (yych == 'r') goto yy538;
        goto yy14;
 yy473:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy537;
+       if (yych == 'a') goto yy539;
        goto yy14;
 yy474:
-       ++cur;
-       goto yy124;
+       yych = (unsigned char)*++cur;
+       if (yych == 'i') goto yy540;
+       goto yy14;
 yy475:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy538;
+       if (yych == 'a') goto yy541;
        goto yy14;
 yy476:
-       ++cur;
-#line 135 "../src/parse/lex_conf.re"
-       { opts.set_indString (lex_conf_string ()); return; }
-#line 2153 "src/parse/lex_conf.cc"
+       yych = (unsigned char)*++cur;
+       if (yych == 'e') goto yy542;
+       goto yy14;
+yy477:
+       yych = (unsigned char)*++cur;
+       if (yych == 'n') goto yy96;
+       goto yy14;
 yy478:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy539;
+       if (yych == 'o') goto yy543;
        goto yy14;
 yy479:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy540;
+       if (yych == 'e') goto yy544;
        goto yy14;
 yy480:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy541;
+       if (yych == 'a') goto yy545;
        goto yy14;
 yy481:
+       ++cur;
+       goto yy125;
+yy482:
        yych = (unsigned char)*++cur;
-       if (yych == 'c') goto yy542;
+       if (yych == 'a') goto yy546;
        goto yy14;
-yy482:
+yy483:
        ++cur;
-#line 101 "../src/parse/lex_conf.re"
-       { opts.set_yybm         (lex_conf_string ()); return; }
-#line 2174 "src/parse/lex_conf.cc"
-yy484:
-       ++cur;
-#line 150 "../src/parse/lex_conf.re"
-       { opts.set_yych           (lex_conf_string ()); return; }
-#line 2179 "src/parse/lex_conf.cc"
+#line 136 "../src/parse/lex_conf.re"
+       { opts.set_indString (lex_conf_string ()); return; }
+#line 2182 "src/parse/lex_conf.cc"
+yy485:
+       yych = (unsigned char)*++cur;
+       if (yych == 'a') goto yy547;
+       goto yy14;
 yy486:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy543;
+       if (yych == 'e') goto yy548;
        goto yy14;
 yy487:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy544;
+       if (yych == 'o') goto yy549;
        goto yy14;
 yy488:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy545;
+       if (yych == 'c') goto yy550;
        goto yy14;
 yy489:
-       yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy546;
-       goto yy14;
-yy490:
        ++cur;
-#line 155 "../src/parse/lex_conf.re"
-       { opts.set_fill_use     (lex_conf_bool()); return; }
-#line 2200 "src/parse/lex_conf.cc"
-yy492:
-       yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy547;
-       goto yy14;
+#line 102 "../src/parse/lex_conf.re"
+       { opts.set_yybm         (lex_conf_string ()); return; }
+#line 2203 "src/parse/lex_conf.cc"
+yy491:
+       ++cur;
+#line 151 "../src/parse/lex_conf.re"
+       { opts.set_yych           (lex_conf_string ()); return; }
+#line 2208 "src/parse/lex_conf.cc"
 yy493:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy548;
+       if (yych == 'a') goto yy551;
        goto yy14;
 yy494:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy550;
+       if (yych == 'a') goto yy552;
        goto yy14;
 yy495:
-       ++cur;
-#line 87 "../src/parse/lex_conf.re"
-       { opts.set_condGotoParam    (lex_conf_string ()); return; }
-#line 2217 "src/parse/lex_conf.cc"
+       yych = (unsigned char)*++cur;
+       if (yych == 'r') goto yy553;
+       goto yy14;
+yy496:
+       yych = (unsigned char)*++cur;
+       if (yych == 'o') goto yy554;
+       goto yy14;
 yy497:
        ++cur;
-#line 83 "../src/parse/lex_conf.re"
-       { opts.set_condEnumPrefix   (lex_conf_string ()); return; }
-#line 2222 "src/parse/lex_conf.cc"
+#line 156 "../src/parse/lex_conf.re"
+       { opts.set_fill_use     (lex_conf_bool()); return; }
+#line 2229 "src/parse/lex_conf.cc"
 yy499:
        yych = (unsigned char)*++cur;
-       if (yych == 'P') goto yy551;
+       if (yych == 't') goto yy555;
        goto yy14;
 yy500:
        yych = (unsigned char)*++cur;
-       if (yych == 'Y') goto yy553;
+       if (yych == 'd') goto yy556;
        goto yy14;
 yy501:
        yych = (unsigned char)*++cur;
-       if (yych == 'A') goto yy554;
+       if (yych == 'o') goto yy558;
        goto yy14;
 yy502:
+       ++cur;
+#line 88 "../src/parse/lex_conf.re"
+       { opts.set_condGotoParam    (lex_conf_string ()); return; }
+#line 2246 "src/parse/lex_conf.cc"
+yy504:
+       ++cur;
+#line 84 "../src/parse/lex_conf.re"
+       { opts.set_condEnumPrefix   (lex_conf_string ()); return; }
+#line 2251 "src/parse/lex_conf.cc"
+yy506:
        yych = (unsigned char)*++cur;
-       if (yych == 'R') goto yy555;
+       if (yych == 'P') goto yy559;
        goto yy14;
-yy503:
-       ++cur;
-#line 149 "../src/parse/lex_conf.re"
-       { opts.set_yyctype        (lex_conf_string ()); return; }
-#line 2243 "src/parse/lex_conf.cc"
-yy505:
+yy507:
        yych = (unsigned char)*++cur;
-       if (yych == 'R') goto yy556;
+       if (yych == 'Y') goto yy561;
        goto yy14;
-yy506:
-       ++cur;
-#line 147 "../src/parse/lex_conf.re"
-       { opts.set_yydebug (lex_conf_string ()); return; }
-#line 2252 "src/parse/lex_conf.cc"
 yy508:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy558;
+       if (yych == 'A') goto yy562;
        goto yy14;
 yy509:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy559;
+       if (yych == 'R') goto yy563;
        goto yy14;
 yy510:
-       yych = (unsigned char)*++cur;
-       if (yych == 'N') goto yy560;
-       goto yy14;
-yy511:
-       yych = (unsigned char)*++cur;
-       if (yych == 'A') goto yy561;
-       goto yy14;
+       ++cur;
+#line 150 "../src/parse/lex_conf.re"
+       { opts.set_yyctype        (lex_conf_string ()); return; }
+#line 2272 "src/parse/lex_conf.cc"
 yy512:
        yych = (unsigned char)*++cur;
-       if (yych == 'H') goto yy562;
+       if (yych == 'R') goto yy564;
        goto yy14;
 yy513:
        ++cur;
-#line 118 "../src/parse/lex_conf.re"
-       { opts.set_yylimit     (lex_conf_string ()); return; }
-#line 2277 "src/parse/lex_conf.cc"
+#line 148 "../src/parse/lex_conf.re"
+       { opts.set_yydebug (lex_conf_string ()); return; }
+#line 2281 "src/parse/lex_conf.cc"
 yy515:
        yych = (unsigned char)*++cur;
-       if (yych == 'R') goto yy563;
+       if (yych == 'n') goto yy566;
        goto yy14;
 yy516:
        yych = (unsigned char)*++cur;
-       if (yych == 'R') goto yy565;
+       if (yych == 'l') goto yy567;
        goto yy14;
 yy517:
        yych = (unsigned char)*++cur;
-       if (yych == 'N') goto yy566;
+       if (yych == 'N') goto yy568;
        goto yy14;
 yy518:
        yych = (unsigned char)*++cur;
-       if (yych == 'A') goto yy567;
+       if (yych == 'A') goto yy569;
        goto yy14;
 yy519:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy568;
+       if (yych == 'H') goto yy570;
        goto yy14;
 yy520:
-       yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy569;
-       goto yy14;
-yy521:
-       yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy570;
-       goto yy14;
+       ++cur;
+#line 119 "../src/parse/lex_conf.re"
+       { opts.set_yylimit     (lex_conf_string ()); return; }
+#line 2306 "src/parse/lex_conf.cc"
 yy522:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy571;
+       if (yych == 'R') goto yy571;
        goto yy14;
 yy523:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy572;
+       if (yych == 'R') goto yy573;
        goto yy14;
 yy524:
        yych = (unsigned char)*++cur;
-       if (yych == 'm') goto yy573;
+       if (yych == 'N') goto yy574;
        goto yy14;
 yy525:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy574;
+       if (yych == 'A') goto yy575;
        goto yy14;
 yy526:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy575;
+       if (yych == 'o') goto yy576;
        goto yy14;
 yy527:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy576;
+       if (yych == 'e') goto yy577;
        goto yy14;
 yy528:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy577;
+       if (yych == 'e') goto yy578;
        goto yy14;
 yy529:
        yych = (unsigned char)*++cur;
-       if (yych == 'f') goto yy578;
+       if (yych == '-') goto yy579;
        goto yy14;
 yy530:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy579;
+       if (yych == 't') goto yy580;
        goto yy14;
 yy531:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy580;
+       if (yych == 'm') goto yy581;
        goto yy14;
 yy532:
        yych = (unsigned char)*++cur;
-       if (yych == 'h') goto yy581;
+       if (yych == 'i') goto yy582;
        goto yy14;
 yy533:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy582;
+       if (yych == 'a') goto yy583;
        goto yy14;
 yy534:
-       ++cur;
-       goto yy118;
+       yych = (unsigned char)*++cur;
+       if (yych == '-') goto yy584;
+       goto yy14;
 yy535:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy583;
+       if (yych == 't') goto yy585;
        goto yy14;
 yy536:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy584;
+       if (yych == 'f') goto yy586;
        goto yy14;
 yy537:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy585;
+       if (yych == '-') goto yy587;
        goto yy14;
 yy538:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy586;
+       if (yych == 'a') goto yy588;
        goto yy14;
 yy539:
        yych = (unsigned char)*++cur;
-       if (yych == 'b') goto yy587;
+       if (yych == 'h') goto yy589;
        goto yy14;
 yy540:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy588;
+       if (yych == 'o') goto yy590;
        goto yy14;
 yy541:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy590;
+       if (yych == 'p') goto yy591;
        goto yy14;
 yy542:
-       yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy592;
-       goto yy14;
+       ++cur;
+       goto yy119;
 yy543:
        yych = (unsigned char)*++cur;
-       if (yych == 'b') goto yy593;
+       if (yych == 'n') goto yy592;
        goto yy14;
 yy544:
        yych = (unsigned char)*++cur;
-       if (yych == 'b') goto yy594;
+       if (yych == '-') goto yy593;
        goto yy14;
 yy545:
        yych = (unsigned char)*++cur;
-       if (yych == 'g') goto yy595;
+       if (yych == 'd') goto yy594;
        goto yy14;
 yy546:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy596;
+       if (yych == 'r') goto yy595;
        goto yy14;
 yy547:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy598;
+       if (yych == 'b') goto yy596;
        goto yy14;
 yy548:
-       ++cur;
-#line 104 "../src/parse/lex_conf.re"
-       {
-               const int32_t n = lex_conf_number ();
-               if (n < 0)
-               {
-                       fatal ("configuration 'cgoto:threshold' must be nonnegative");
-               }
-               opts.set_cGotoThreshold (static_cast<uint32_t> (n));
-               return;
-       }
-#line 2421 "src/parse/lex_conf.cc"
-yy550:
+       yych = (unsigned char)*++cur;
+       if (yych == 'l') goto yy597;
+       goto yy14;
+yy549:
        yych = (unsigned char)*++cur;
        if (yych == 'n') goto yy599;
        goto yy14;
+yy550:
+       yych = (unsigned char)*++cur;
+       if (yych == 'e') goto yy601;
+       goto yy14;
 yy551:
-       yyaccept = 17;
-       yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'C') goto yy600;
-       if (yych == 'T') goto yy601;
+       yych = (unsigned char)*++cur;
+       if (yych == 'b') goto yy602;
+       goto yy14;
 yy552:
-#line 122 "../src/parse/lex_conf.re"
-       { opts.set_yybackup     (lex_conf_string ()); return; }
-#line 2434 "src/parse/lex_conf.cc"
+       yych = (unsigned char)*++cur;
+       if (yych == 'b') goto yy603;
+       goto yy14;
 yy553:
        yych = (unsigned char)*++cur;
-       if (yych == 'P') goto yy602;
+       if (yych == 'g') goto yy604;
        goto yy14;
 yy554:
        yych = (unsigned char)*++cur;
-       if (yych == 'G') goto yy603;
+       if (yych == 'n') goto yy605;
        goto yy14;
 yy555:
        yych = (unsigned char)*++cur;
-       if (yych == 'K') goto yy605;
+       if (yych == 'e') goto yy607;
        goto yy14;
 yy556:
        ++cur;
-#line 115 "../src/parse/lex_conf.re"
-       { opts.set_yycursor    (lex_conf_string ()); return; }
-#line 2451 "src/parse/lex_conf.cc"
+#line 105 "../src/parse/lex_conf.re"
+       {
+               const int32_t n = lex_conf_number ();
+               if (n < 0)
+               {
+                       fatal ("configuration 'cgoto:threshold' must be nonnegative");
+               }
+               opts.set_cGotoThreshold (static_cast<uint32_t> (n));
+               return;
+       }
+#line 2454 "src/parse/lex_conf.cc"
 yy558:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy606;
+       if (yych == 'n') goto yy608;
        goto yy14;
 yy559:
-       yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy607;
-       goto yy14;
+       yyaccept = 17;
+       yych = (unsigned char)*(ptr = ++cur);
+       if (yych == 'C') goto yy609;
+       if (yych == 'T') goto yy610;
 yy560:
-       yych = (unsigned char)*++cur;
-       if (yych == 'D') goto yy608;
-       goto yy14;
+#line 123 "../src/parse/lex_conf.re"
+       { opts.set_yybackup     (lex_conf_string ()); return; }
+#line 2467 "src/parse/lex_conf.cc"
 yy561:
        yych = (unsigned char)*++cur;
-       if (yych == 'T') goto yy609;
+       if (yych == 'P') goto yy611;
        goto yy14;
 yy562:
        yych = (unsigned char)*++cur;
-       if (yych == 'A') goto yy610;
+       if (yych == 'G') goto yy612;
        goto yy14;
 yy563:
-       ++cur;
-#line 116 "../src/parse/lex_conf.re"
-       { opts.set_yymarker    (lex_conf_string ()); return; }
-#line 2476 "src/parse/lex_conf.cc"
-yy565:
        yych = (unsigned char)*++cur;
-       if (yych == 'E') goto yy611;
+       if (yych == 'K') goto yy614;
        goto yy14;
+yy564:
+       ++cur;
+#line 116 "../src/parse/lex_conf.re"
+       { opts.set_yycursor    (lex_conf_string ()); return; }
+#line 2484 "src/parse/lex_conf.cc"
 yy566:
        yych = (unsigned char)*++cur;
-       if (yych == 'D') goto yy613;
+       if (yych == 'a') goto yy615;
        goto yy14;
 yy567:
        yych = (unsigned char)*++cur;
-       if (yych == 'T') goto yy614;
+       if (yych == 'e') goto yy616;
        goto yy14;
 yy568:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy615;
+       if (yych == 'D') goto yy617;
        goto yy14;
 yy569:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy616;
+       if (yych == 'T') goto yy618;
        goto yy14;
 yy570:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy617;
+       if (yych == 'A') goto yy619;
        goto yy14;
 yy571:
-       yych = (unsigned char)*++cur;
-       if (yych == 'g') goto yy618;
-       goto yy14;
-yy572:
-       yych = (unsigned char)*++cur;
-       if (yych == 'p') goto yy619;
-       goto yy14;
+       ++cur;
+#line 117 "../src/parse/lex_conf.re"
+       { opts.set_yymarker    (lex_conf_string ()); return; }
+#line 2509 "src/parse/lex_conf.cc"
 yy573:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy620;
+       if (yych == 'E') goto yy620;
        goto yy14;
 yy574:
        yych = (unsigned char)*++cur;
-       if (yych == 'p') goto yy621;
+       if (yych == 'D') goto yy622;
        goto yy14;
 yy575:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy623;
+       if (yych == 'T') goto yy623;
        goto yy14;
 yy576:
        yych = (unsigned char)*++cur;
-       if (yych == 'p') goto yy624;
+       if (yych == 'r') goto yy624;
        goto yy14;
 yy577:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy625;
+       if (yych == 'n') goto yy625;
        goto yy14;
 yy578:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy626;
+       if (yych == 'r') goto yy626;
        goto yy14;
 yy579:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy627;
+       if (yych == 'g') goto yy627;
        goto yy14;
 yy580:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy628;
+       if (yych == 'p') goto yy628;
        goto yy14;
 yy581:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy629;
+       if (yych == 'i') goto yy629;
        goto yy14;
 yy582:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy630;
+       if (yych == 'p') goto yy630;
        goto yy14;
 yy583:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy632;
+       if (yych == 's') goto yy632;
        goto yy14;
 yy584:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy633;
+       if (yych == 'p') goto yy633;
        goto yy14;
 yy585:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy634;
+       if (yych == 'a') goto yy634;
        goto yy14;
 yy586:
        yych = (unsigned char)*++cur;
@@ -2563,736 +2564,793 @@ yy586:
        goto yy14;
 yy587:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy636;
+       if (yych == 'i') goto yy636;
        goto yy14;
 yy588:
-       ++cur;
-#line 98 "../src/parse/lex_conf.re"
-       { opts.set_bUseStateNext   (lex_conf_bool()); return; }
-#line 2573 "src/parse/lex_conf.cc"
+       yych = (unsigned char)*++cur;
+       if (yych == 't') goto yy637;
+       goto yy14;
+yy589:
+       yych = (unsigned char)*++cur;
+       if (yych == 'e') goto yy638;
+       goto yy14;
 yy590:
-       ++cur;
-#line 133 "../src/parse/lex_conf.re"
-       { opts.set_tags_expression(lex_conf_string ()); return; }
-#line 2578 "src/parse/lex_conf.cc"
+       yych = (unsigned char)*++cur;
+       if (yych == 'n') goto yy639;
+       goto yy14;
+yy591:
+       yych = (unsigned char)*++cur;
+       if (yych == 't') goto yy641;
+       goto yy14;
 yy592:
        yych = (unsigned char)*++cur;
-       if (yych == 'p') goto yy637;
+       if (yych == 'd') goto yy642;
        goto yy14;
 yy593:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy638;
+       if (yych == 's') goto yy643;
        goto yy14;
 yy594:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy639;
+       if (yych == 'e') goto yy644;
        goto yy14;
 yy595:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy640;
+       if (yych == 's') goto yy645;
        goto yy14;
 yy596:
-       ++cur;
-#line 151 "../src/parse/lex_conf.re"
-       { opts.set_yychConversion (lex_conf_bool()); return; }
-#line 2599 "src/parse/lex_conf.cc"
-yy598:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy641;
+       if (yych == 'e') goto yy646;
        goto yy14;
+yy597:
+       ++cur;
+#line 99 "../src/parse/lex_conf.re"
+       { opts.set_bUseStateNext   (lex_conf_bool()); return; }
+#line 2610 "src/parse/lex_conf.cc"
 yy599:
-       yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy643;
-       goto yy14;
-yy600:
-       yych = (unsigned char)*++cur;
-       if (yych == 'T') goto yy645;
-       goto yy14;
+       ++cur;
+#line 134 "../src/parse/lex_conf.re"
+       { opts.set_tags_expression(lex_conf_string ()); return; }
+#line 2615 "src/parse/lex_conf.cc"
 yy601:
        yych = (unsigned char)*++cur;
-       if (yych == 'A') goto yy646;
+       if (yych == 'p') goto yy647;
        goto yy14;
 yy602:
        yych = (unsigned char)*++cur;
-       if (yych == 'E') goto yy647;
+       if (yych == 'l') goto yy648;
        goto yy14;
 yy603:
-       ++cur;
-#line 128 "../src/parse/lex_conf.re"
-       { opts.set_yycopytag    (lex_conf_string ()); return; }
-#line 2624 "src/parse/lex_conf.cc"
-yy605:
        yych = (unsigned char)*++cur;
-       if (yych == 'E') goto yy649;
+       if (yych == 'l') goto yy649;
        goto yy14;
-yy606:
+yy604:
        yych = (unsigned char)*++cur;
-       if (yych == 'k') goto yy650;
+       if (yych == 'e') goto yy650;
        goto yy14;
+yy605:
+       ++cur;
+#line 152 "../src/parse/lex_conf.re"
+       { opts.set_yychConversion (lex_conf_bool()); return; }
+#line 2636 "src/parse/lex_conf.cc"
 yy607:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy651;
+       if (yych == 'r') goto yy651;
        goto yy14;
 yy608:
        yych = (unsigned char)*++cur;
-       if (yych == 'I') goto yy653;
+       if (yych == 'd') goto yy653;
        goto yy14;
 yy609:
        yych = (unsigned char)*++cur;
-       if (yych == 'E') goto yy654;
+       if (yych == 'T') goto yy655;
        goto yy14;
 yy610:
        yych = (unsigned char)*++cur;
-       if (yych == 'N') goto yy656;
+       if (yych == 'A') goto yy656;
        goto yy14;
 yy611:
-       yyaccept = 18;
-       yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'C') goto yy658;
-       if (yych == 'T') goto yy659;
-yy612:
-#line 125 "../src/parse/lex_conf.re"
-       { opts.set_yyrestore    (lex_conf_string ()); return; }
-#line 2657 "src/parse/lex_conf.cc"
-yy613:
        yych = (unsigned char)*++cur;
-       if (yych == 'I') goto yy660;
+       if (yych == 'E') goto yy657;
        goto yy14;
+yy612:
+       ++cur;
+#line 129 "../src/parse/lex_conf.re"
+       { opts.set_yycopytag    (lex_conf_string ()); return; }
+#line 2661 "src/parse/lex_conf.cc"
 yy614:
        yych = (unsigned char)*++cur;
-       if (yych == 'E') goto yy661;
+       if (yych == 'E') goto yy659;
        goto yy14;
 yy615:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy663;
+       if (yych == 'k') goto yy660;
        goto yy14;
 yy616:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy664;
+       if (yych == 'n') goto yy661;
        goto yy14;
 yy617:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy665;
+       if (yych == 'I') goto yy663;
        goto yy14;
 yy618:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy666;
+       if (yych == 'E') goto yy664;
        goto yy14;
 yy619:
        yych = (unsigned char)*++cur;
-       if (yych == 'u') goto yy667;
+       if (yych == 'N') goto yy666;
        goto yy14;
 yy620:
-       yych = (unsigned char)*++cur;
-       if (yych == 'z') goto yy668;
-       goto yy14;
+       yyaccept = 18;
+       yych = (unsigned char)*(ptr = ++cur);
+       if (yych == 'C') goto yy668;
+       if (yych == 'T') goto yy669;
 yy621:
-       ++cur;
-#line 60 "../src/parse/lex_conf.re"
-       { opts.set_eager_skip(lex_conf_bool());         return; }
+#line 126 "../src/parse/lex_conf.re"
+       { opts.set_yyrestore    (lex_conf_string ()); return; }
 #line 2694 "src/parse/lex_conf.cc"
+yy622:
+       yych = (unsigned char)*++cur;
+       if (yych == 'I') goto yy670;
+       goto yy14;
 yy623:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy669;
+       if (yych == 'E') goto yy671;
        goto yy14;
 yy624:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy671;
+       if (yych == 's') goto yy673;
        goto yy14;
 yy625:
        yych = (unsigned char)*++cur;
-       if (yych == 'x') goto yy94;
+       if (yych == 's') goto yy674;
        goto yy14;
 yy626:
-       ++cur;
-       goto yy120;
+       yych = (unsigned char)*++cur;
+       if (yych == 't') goto yy675;
+       goto yy14;
 yy627:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy672;
+       if (yych == 'o') goto yy676;
        goto yy14;
 yy628:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy673;
+       if (yych == 'u') goto yy677;
        goto yy14;
 yy629:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy674;
+       if (yych == 'z') goto yy678;
        goto yy14;
 yy630:
        ++cur;
-#line 56 "../src/parse/lex_conf.re"
-       { opts.set_version(!lex_conf_bool());           return; }
-#line 2726 "src/parse/lex_conf.cc"
+#line 61 "../src/parse/lex_conf.re"
+       { opts.set_eager_skip(lex_conf_bool());         return; }
+#line 2731 "src/parse/lex_conf.cc"
 yy632:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy675;
+       if (yych == 's') goto yy679;
        goto yy14;
 yy633:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy676;
+       if (yych == 'o') goto yy681;
        goto yy14;
 yy634:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy677;
+       if (yych == 'x') goto yy94;
        goto yy14;
 yy635:
        ++cur;
-       goto yy126;
+       goto yy121;
 yy636:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy678;
+       if (yych == 'n') goto yy682;
        goto yy14;
 yy637:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy680;
+       if (yych == 'i') goto yy683;
        goto yy14;
 yy638:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy682;
+       if (yych == 'a') goto yy684;
        goto yy14;
 yy639:
+       ++cur;
+#line 57 "../src/parse/lex_conf.re"
+       { opts.set_version(!lex_conf_bool());           return; }
+#line 2763 "src/parse/lex_conf.cc"
+yy641:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy684;
+       if (yych == 'u') goto yy685;
        goto yy14;
-yy640:
+yy642:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy686;
+       if (yych == 'i') goto yy686;
        goto yy14;
-yy641:
-       ++cur;
-#line 157 "../src/parse/lex_conf.re"
-       { opts.set_fill_arg_use (lex_conf_bool()); return; }
-#line 2766 "src/parse/lex_conf.cc"
 yy643:
-       ++cur;
-#line 85 "../src/parse/lex_conf.re"
-       { opts.set_condDividerParam (lex_conf_string ()); return; }
-#line 2771 "src/parse/lex_conf.cc"
-yy645:
        yych = (unsigned char)*++cur;
-       if (yych == 'X') goto yy688;
+       if (yych == 't') goto yy687;
        goto yy14;
+yy644:
+       yych = (unsigned char)*++cur;
+       if (yych == 'r') goto yy688;
+       goto yy14;
+yy645:
+       ++cur;
+       goto yy127;
 yy646:
        yych = (unsigned char)*++cur;
-       if (yych == 'G') goto yy690;
+       if (yych == 'l') goto yy689;
        goto yy14;
 yy647:
-       ++cur;
-#line 76 "../src/parse/lex_conf.re"
-       { opts.set_yycondtype       (lex_conf_string ()); return; }
-#line 2784 "src/parse/lex_conf.cc"
+       yych = (unsigned char)*++cur;
+       if (yych == 't') goto yy691;
+       goto yy14;
+yy648:
+       yych = (unsigned char)*++cur;
+       if (yych == 'e') goto yy693;
+       goto yy14;
 yy649:
        yych = (unsigned char)*++cur;
-       if (yych == 'R') goto yy692;
+       if (yych == 'e') goto yy695;
        goto yy14;
 yy650:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy694;
+       if (yych == 't') goto yy697;
        goto yy14;
 yy651:
        ++cur;
-#line 156 "../src/parse/lex_conf.re"
-       { opts.set_fill_arg     (lex_conf_string ()); return; }
-#line 2797 "src/parse/lex_conf.cc"
+#line 158 "../src/parse/lex_conf.re"
+       { opts.set_fill_arg_use (lex_conf_bool()); return; }
+#line 2807 "src/parse/lex_conf.cc"
 yy653:
+       ++cur;
+#line 86 "../src/parse/lex_conf.re"
+       { opts.set_condDividerParam (lex_conf_string ()); return; }
+#line 2812 "src/parse/lex_conf.cc"
+yy655:
+       yych = (unsigned char)*++cur;
+       if (yych == 'X') goto yy699;
+       goto yy14;
+yy656:
+       yych = (unsigned char)*++cur;
+       if (yych == 'G') goto yy701;
+       goto yy14;
+yy657:
+       ++cur;
+#line 77 "../src/parse/lex_conf.re"
+       { opts.set_yycondtype       (lex_conf_string ()); return; }
+#line 2825 "src/parse/lex_conf.cc"
+yy659:
+       yych = (unsigned char)*++cur;
+       if (yych == 'R') goto yy703;
+       goto yy14;
+yy660:
        yych = (unsigned char)*++cur;
-       if (yych == 'T') goto yy695;
+       if (yych == 'e') goto yy705;
        goto yy14;
-yy654:
+yy661:
+       ++cur;
+#line 157 "../src/parse/lex_conf.re"
+       { opts.set_fill_arg     (lex_conf_string ()); return; }
+#line 2838 "src/parse/lex_conf.cc"
+yy663:
+       yych = (unsigned char)*++cur;
+       if (yych == 'T') goto yy706;
+       goto yy14;
+yy664:
        yyaccept = 19;
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == ':') goto yy696;
-yy655:
-#line 90 "../src/parse/lex_conf.re"
+       if (yych == ':') goto yy707;
+yy665:
+#line 91 "../src/parse/lex_conf.re"
        { opts.set_state_get       (lex_conf_string ()); return; }
-#line 2809 "src/parse/lex_conf.cc"
-yy656:
+#line 2850 "src/parse/lex_conf.cc"
+yy666:
        ++cur;
-#line 129 "../src/parse/lex_conf.re"
+#line 130 "../src/parse/lex_conf.re"
        { opts.set_yylessthan   (lex_conf_string ()); return; }
-#line 2814 "src/parse/lex_conf.cc"
-yy658:
+#line 2855 "src/parse/lex_conf.cc"
+yy668:
        yych = (unsigned char)*++cur;
-       if (yych == 'T') goto yy697;
+       if (yych == 'T') goto yy708;
        goto yy14;
-yy659:
+yy669:
        yych = (unsigned char)*++cur;
-       if (yych == 'A') goto yy698;
+       if (yych == 'A') goto yy709;
        goto yy14;
-yy660:
+yy670:
        yych = (unsigned char)*++cur;
-       if (yych == 'T') goto yy699;
+       if (yych == 'T') goto yy710;
        goto yy14;
-yy661:
+yy671:
        yyaccept = 20;
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == ':') goto yy700;
-       if (yych == '@') goto yy701;
-yy662:
-#line 92 "../src/parse/lex_conf.re"
+       if (yych == ':') goto yy711;
+       if (yych == '@') goto yy712;
+yy672:
+#line 93 "../src/parse/lex_conf.re"
        { opts.set_state_set       (lex_conf_string ()); return; }
-#line 2835 "src/parse/lex_conf.cc"
-yy663:
+#line 2876 "src/parse/lex_conf.cc"
+yy673:
        ++cur;
        goto yy101;
-yy664:
+yy674:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy702;
+       if (yych == 'i') goto yy713;
        goto yy14;
-yy665:
+yy675:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy703;
+       if (yych == 'e') goto yy714;
        goto yy14;
-yy666:
+yy676:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy704;
+       if (yych == 't') goto yy715;
        goto yy14;
-yy667:
+yy677:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy705;
+       if (yych == 't') goto yy716;
        goto yy14;
-yy668:
+yy678:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy706;
+       if (yych == 'a') goto yy717;
        goto yy14;
-yy669:
+yy679:
        ++cur;
-#line 73 "../src/parse/lex_conf.re"
+#line 74 "../src/parse/lex_conf.re"
        { lex_conf_empty_class();      return; }
-#line 2863 "src/parse/lex_conf.cc"
-yy671:
+#line 2904 "src/parse/lex_conf.cc"
+yy681:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy707;
+       if (yych == 'l') goto yy718;
        goto yy14;
-yy672:
+yy682:
        yych = (unsigned char)*++cur;
-       if (yych == 'f') goto yy708;
+       if (yych == 'f') goto yy719;
        goto yy14;
-yy673:
+yy683:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy709;
+       if (yych == 'o') goto yy720;
        goto yy14;
-yy674:
+yy684:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy710;
+       if (yych == 'd') goto yy721;
        goto yy14;
-yy675:
+yy685:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy712;
+       if (yych == 'r') goto yy723;
        goto yy14;
-yy676:
+yy686:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy713;
+       if (yych == 't') goto yy724;
        goto yy14;
-yy677:
+yy687:
+       yych = (unsigned char)*++cur;
+       if (yych == 'a') goto yy725;
+       goto yy14;
+yy688:
        ++cur;
-       goto yy122;
-yy678:
+       goto yy123;
+yy689:
        ++cur;
-#line 95 "../src/parse/lex_conf.re"
+#line 96 "../src/parse/lex_conf.re"
        { opts.set_yyfilllabel     (lex_conf_string ()); return; }
-#line 2895 "src/parse/lex_conf.cc"
-yy680:
+#line 2940 "src/parse/lex_conf.cc"
+yy691:
        ++cur;
-#line 99 "../src/parse/lex_conf.re"
+#line 100 "../src/parse/lex_conf.re"
        { opts.set_yyaccept        (lex_conf_string ()); return; }
-#line 2900 "src/parse/lex_conf.cc"
-yy682:
+#line 2945 "src/parse/lex_conf.cc"
+yy693:
        ++cur;
-#line 88 "../src/parse/lex_conf.re"
+#line 89 "../src/parse/lex_conf.re"
        { opts.set_yyctable         (lex_conf_string ()); return; }
-#line 2905 "src/parse/lex_conf.cc"
-yy684:
+#line 2950 "src/parse/lex_conf.cc"
+yy695:
        ++cur;
-#line 168 "../src/parse/lex_conf.re"
+#line 169 "../src/parse/lex_conf.re"
        { lex_conf_string (); return; }
-#line 2910 "src/parse/lex_conf.cc"
-yy686:
+#line 2955 "src/parse/lex_conf.cc"
+yy697:
        ++cur;
-#line 113 "../src/parse/lex_conf.re"
+#line 114 "../src/parse/lex_conf.re"
        { opts.set_yytarget (lex_conf_string ()); return; }
-#line 2915 "src/parse/lex_conf.cc"
-yy688:
+#line 2960 "src/parse/lex_conf.cc"
+yy699:
        ++cur;
-#line 123 "../src/parse/lex_conf.re"
+#line 124 "../src/parse/lex_conf.re"
        { opts.set_yybackupctx  (lex_conf_string ()); return; }
-#line 2920 "src/parse/lex_conf.cc"
-yy690:
+#line 2965 "src/parse/lex_conf.cc"
+yy701:
        ++cur;
-#line 124 "../src/parse/lex_conf.re"
+#line 125 "../src/parse/lex_conf.re"
        { opts.set_yybackuptag  (lex_conf_string ()); return; }
-#line 2925 "src/parse/lex_conf.cc"
-yy692:
+#line 2970 "src/parse/lex_conf.cc"
+yy703:
        ++cur;
-#line 117 "../src/parse/lex_conf.re"
+#line 118 "../src/parse/lex_conf.re"
        { opts.set_yyctxmarker (lex_conf_string ()); return; }
-#line 2930 "src/parse/lex_conf.cc"
-yy694:
+#line 2975 "src/parse/lex_conf.cc"
+yy705:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy714;
+       if (yych == 'd') goto yy726;
        goto yy14;
-yy695:
+yy706:
        yych = (unsigned char)*++cur;
-       if (yych == 'I') goto yy716;
+       if (yych == 'I') goto yy728;
        goto yy14;
-yy696:
+yy707:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy717;
+       if (yych == 'n') goto yy729;
        goto yy14;
-yy697:
+yy708:
        yych = (unsigned char)*++cur;
-       if (yych == 'X') goto yy718;
+       if (yych == 'X') goto yy730;
        goto yy14;
-yy698:
+yy709:
        yych = (unsigned char)*++cur;
-       if (yych == 'G') goto yy720;
+       if (yych == 'G') goto yy732;
        goto yy14;
-yy699:
+yy710:
        yych = (unsigned char)*++cur;
-       if (yych == 'I') goto yy722;
+       if (yych == 'I') goto yy734;
        goto yy14;
-yy700:
+yy711:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy723;
+       if (yych == 'n') goto yy735;
        goto yy14;
-yy701:
+yy712:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy724;
+       if (yych == 's') goto yy736;
        goto yy14;
-yy702:
+yy713:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy725;
+       if (yych == 't') goto yy737;
        goto yy14;
-yy703:
+yy714:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy726;
+       if (yych == 'd') goto yy738;
        goto yy14;
-yy704:
+yy715:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy728;
+       if (yych == 'o') goto yy740;
        goto yy14;
-yy705:
+yy716:
        ++cur;
        goto yy105;
-yy706:
+yy717:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy729;
+       if (yych == 't') goto yy741;
        goto yy14;
-yy707:
+yy718:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy730;
+       if (yych == 'i') goto yy742;
        goto yy14;
-yy708:
+yy719:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy731;
+       if (yych == 'o') goto yy743;
        goto yy14;
-yy709:
+yy720:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy732;
+       if (yych == 'n') goto yy744;
        goto yy14;
-yy710:
+yy721:
        ++cur;
-#line 59 "../src/parse/lex_conf.re"
+#line 60 "../src/parse/lex_conf.re"
        { opts.set_lookahead(!lex_conf_bool());         return; }
-#line 2998 "src/parse/lex_conf.cc"
-yy712:
+#line 3043 "src/parse/lex_conf.cc"
+yy723:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy733;
+       if (yych == 'e') goto yy745;
        goto yy14;
-yy713:
+yy724:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy734;
+       if (yych == 'i') goto yy746;
        goto yy14;
-yy714:
+yy725:
+       yych = (unsigned char)*++cur;
+       if (yych == 't') goto yy747;
+       goto yy14;
+yy726:
        ++cur;
-#line 158 "../src/parse/lex_conf.re"
+#line 159 "../src/parse/lex_conf.re"
        { opts.set_fill_naked   (lex_conf_bool()); return; }
-#line 3011 "src/parse/lex_conf.cc"
-yy716:
+#line 3060 "src/parse/lex_conf.cc"
+yy728:
        yych = (unsigned char)*++cur;
-       if (yych == 'O') goto yy735;
+       if (yych == 'O') goto yy748;
        goto yy14;
-yy717:
+yy729:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy736;
+       if (yych == 'a') goto yy749;
        goto yy14;
-yy718:
+yy730:
        ++cur;
-#line 126 "../src/parse/lex_conf.re"
+#line 127 "../src/parse/lex_conf.re"
        { opts.set_yyrestorectx (lex_conf_string ()); return; }
-#line 3024 "src/parse/lex_conf.cc"
-yy720:
+#line 3073 "src/parse/lex_conf.cc"
+yy732:
        ++cur;
-#line 127 "../src/parse/lex_conf.re"
+#line 128 "../src/parse/lex_conf.re"
        { opts.set_yyrestoretag (lex_conf_string ()); return; }
-#line 3029 "src/parse/lex_conf.cc"
-yy722:
+#line 3078 "src/parse/lex_conf.cc"
+yy734:
        yych = (unsigned char)*++cur;
-       if (yych == 'O') goto yy737;
+       if (yych == 'O') goto yy750;
        goto yy14;
-yy723:
+yy735:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy738;
+       if (yych == 'a') goto yy751;
        goto yy14;
-yy724:
+yy736:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy739;
+       if (yych == 't') goto yy752;
        goto yy14;
-yy725:
+yy737:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy740;
+       if (yych == 'i') goto yy753;
        goto yy14;
-yy726:
+yy738:
        ++cur;
-#line 58 "../src/parse/lex_conf.re"
+#line 59 "../src/parse/lex_conf.re"
        { opts.set_bCaseInverted(lex_conf_bool());      return; }
-#line 3050 "src/parse/lex_conf.cc"
-yy728:
+#line 3099 "src/parse/lex_conf.cc"
+yy740:
        yych = (unsigned char)*++cur;
        if (yych == 's') goto yy110;
        goto yy14;
-yy729:
+yy741:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy741;
+       if (yych == 'i') goto yy754;
        goto yy14;
-yy730:
+yy742:
        yych = (unsigned char)*++cur;
-       if (yych == 'c') goto yy742;
+       if (yych == 'c') goto yy755;
        goto yy14;
-yy731:
+yy743:
        ++cur;
        goto yy113;
-yy732:
+yy744:
+       yych = (unsigned char)*++cur;
+       if (yych == '-') goto yy756;
+       goto yy14;
+yy745:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy743;
+       if (yych == 's') goto yy757;
        goto yy14;
-yy733:
+yy746:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy744;
+       if (yych == 'o') goto yy759;
        goto yy14;
-yy734:
+yy747:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy745;
+       if (yych == 'e') goto yy760;
        goto yy14;
-yy735:
+yy748:
        yych = (unsigned char)*++cur;
-       if (yych == 'N') goto yy746;
+       if (yych == 'N') goto yy761;
        goto yy14;
-yy736:
+yy749:
        yych = (unsigned char)*++cur;
-       if (yych == 'k') goto yy748;
+       if (yych == 'k') goto yy763;
        goto yy14;
-yy737:
+yy750:
        yych = (unsigned char)*++cur;
-       if (yych == 'N') goto yy749;
+       if (yych == 'N') goto yy764;
        goto yy14;
-yy738:
+yy751:
        yych = (unsigned char)*++cur;
-       if (yych == 'k') goto yy751;
+       if (yych == 'k') goto yy766;
        goto yy14;
-yy739:
+yy752:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy752;
+       if (yych == 'a') goto yy767;
        goto yy14;
-yy740:
+yy753:
        yych = (unsigned char)*++cur;
-       if (yych == 'v') goto yy753;
+       if (yych == 'v') goto yy768;
        goto yy14;
-yy741:
+yy754:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy754;
+       if (yych == 'o') goto yy769;
        goto yy14;
-yy742:
+yy755:
        yych = (unsigned char)*++cur;
-       if (yych == 'y') goto yy755;
+       if (yych == 'y') goto yy770;
        goto yy14;
-yy743:
+yy756:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy757;
+       if (yych == 'd') goto yy772;
        goto yy14;
-yy744:
+yy757:
+       ++cur;
+#line 55 "../src/parse/lex_conf.re"
+       { opts.set_posix_captures(lex_conf_bool());     return; }
+#line 3171 "src/parse/lex_conf.cc"
+yy759:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy758;
+       if (yych == 'n') goto yy773;
        goto yy14;
-yy745:
+yy760:
        ++cur;
        goto yy109;
-yy746:
+yy761:
        yyaccept = 21;
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == ':') goto yy759;
-yy747:
-#line 77 "../src/parse/lex_conf.re"
+       if (yych == ':') goto yy774;
+yy762:
+#line 78 "../src/parse/lex_conf.re"
        { opts.set_cond_get         (lex_conf_string ()); return; }
-#line 3128 "src/parse/lex_conf.cc"
-yy748:
+#line 3186 "src/parse/lex_conf.cc"
+yy763:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy760;
+       if (yych == 'e') goto yy775;
        goto yy14;
-yy749:
+yy764:
        yyaccept = 22;
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == ':') goto yy761;
-       if (yych == '@') goto yy762;
-yy750:
-#line 79 "../src/parse/lex_conf.re"
+       if (yych == ':') goto yy776;
+       if (yych == '@') goto yy777;
+yy765:
+#line 80 "../src/parse/lex_conf.re"
        { opts.set_cond_set         (lex_conf_string ()); return; }
-#line 3141 "src/parse/lex_conf.cc"
-yy751:
+#line 3199 "src/parse/lex_conf.cc"
+yy766:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy763;
+       if (yych == 'e') goto yy778;
        goto yy14;
-yy752:
+yy767:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy764;
+       if (yych == 't') goto yy779;
        goto yy14;
-yy753:
+yy768:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy765;
+       if (yych == 'e') goto yy780;
        goto yy14;
-yy754:
+yy769:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy767;
+       if (yych == 'n') goto yy782;
        goto yy14;
-yy755:
+yy770:
        ++cur;
-#line 71 "../src/parse/lex_conf.re"
+#line 72 "../src/parse/lex_conf.re"
        { lex_conf_encoding_policy();  return; }
-#line 3162 "src/parse/lex_conf.cc"
-yy757:
+#line 3220 "src/parse/lex_conf.cc"
+yy772:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy769;
+       if (yych == 'a') goto yy784;
        goto yy14;
-yy758:
+yy773:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy770;
+       if (yych == 's') goto yy785;
        goto yy14;
-yy759:
+yy774:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy771;
+       if (yych == 'n') goto yy786;
        goto yy14;
-yy760:
+yy775:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy772;
+       if (yych == 'd') goto yy787;
        goto yy14;
-yy761:
+yy776:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy774;
+       if (yych == 'n') goto yy789;
        goto yy14;
-yy762:
+yy777:
        yych = (unsigned char)*++cur;
-       if (yych == 'c') goto yy775;
+       if (yych == 'c') goto yy790;
        goto yy14;
-yy763:
+yy778:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy776;
+       if (yych == 'd') goto yy791;
        goto yy14;
-yy764:
+yy779:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy778;
+       if (yych == 'e') goto yy793;
        goto yy14;
-yy765:
+yy780:
        ++cur;
-#line 57 "../src/parse/lex_conf.re"
+#line 58 "../src/parse/lex_conf.re"
        { opts.set_bCaseInsensitive(lex_conf_bool());   return; }
-#line 3199 "src/parse/lex_conf.cc"
-yy767:
+#line 3257 "src/parse/lex_conf.cc"
+yy782:
        ++cur;
-#line 74 "../src/parse/lex_conf.re"
+#line 75 "../src/parse/lex_conf.re"
        { lex_conf_dfa_minimization(); return; }
-#line 3204 "src/parse/lex_conf.cc"
-yy769:
+#line 3262 "src/parse/lex_conf.cc"
+yy784:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy780;
+       if (yych == 't') goto yy795;
        goto yy14;
-yy770:
+yy785:
        ++cur;
        goto yy103;
-yy771:
+yy786:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy781;
+       if (yych == 'a') goto yy796;
        goto yy14;
-yy772:
+yy787:
        ++cur;
-#line 91 "../src/parse/lex_conf.re"
+#line 92 "../src/parse/lex_conf.re"
        { opts.set_state_get_naked (lex_conf_bool()); return; }
-#line 3220 "src/parse/lex_conf.cc"
-yy774:
+#line 3278 "src/parse/lex_conf.cc"
+yy789:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy782;
+       if (yych == 'a') goto yy797;
        goto yy14;
-yy775:
+yy790:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy783;
+       if (yych == 'o') goto yy798;
        goto yy14;
-yy776:
+yy791:
        ++cur;
-#line 93 "../src/parse/lex_conf.re"
+#line 94 "../src/parse/lex_conf.re"
        { opts.set_state_set_naked (lex_conf_bool()); return; }
-#line 3233 "src/parse/lex_conf.cc"
-yy778:
+#line 3291 "src/parse/lex_conf.cc"
+yy793:
        ++cur;
-#line 94 "../src/parse/lex_conf.re"
+#line 95 "../src/parse/lex_conf.re"
        { opts.set_state_set_arg   (lex_conf_string ()); return; }
-#line 3238 "src/parse/lex_conf.cc"
-yy780:
+#line 3296 "src/parse/lex_conf.cc"
+yy795:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy784;
+       if (yych == 'e') goto yy799;
        goto yy14;
-yy781:
+yy796:
        yych = (unsigned char)*++cur;
-       if (yych == 'k') goto yy786;
+       if (yych == 'k') goto yy801;
        goto yy14;
-yy782:
+yy797:
        yych = (unsigned char)*++cur;
-       if (yych == 'k') goto yy787;
+       if (yych == 'k') goto yy802;
        goto yy14;
-yy783:
+yy798:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy788;
+       if (yych == 'n') goto yy803;
        goto yy14;
-yy784:
+yy799:
        ++cur;
-#line 55 "../src/parse/lex_conf.re"
+#line 56 "../src/parse/lex_conf.re"
        { opts.set_bNoGenerationDate(lex_conf_bool());  return; }
-#line 3259 "src/parse/lex_conf.cc"
-yy786:
+#line 3317 "src/parse/lex_conf.cc"
+yy801:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy789;
+       if (yych == 'e') goto yy804;
        goto yy14;
-yy787:
+yy802:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy790;
+       if (yych == 'e') goto yy805;
        goto yy14;
-yy788:
+yy803:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy791;
+       if (yych == 'd') goto yy806;
        goto yy14;
-yy789:
+yy804:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy793;
+       if (yych == 'd') goto yy808;
        goto yy14;
-yy790:
+yy805:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy795;
+       if (yych == 'd') goto yy810;
        goto yy14;
-yy791:
+yy806:
        ++cur;
-#line 80 "../src/parse/lex_conf.re"
+#line 81 "../src/parse/lex_conf.re"
        { opts.set_cond_set_arg     (lex_conf_string ()); return; }
-#line 3284 "src/parse/lex_conf.cc"
-yy793:
+#line 3342 "src/parse/lex_conf.cc"
+yy808:
        ++cur;
-#line 78 "../src/parse/lex_conf.re"
+#line 79 "../src/parse/lex_conf.re"
        { opts.set_cond_get_naked   (lex_conf_bool()); return; }
-#line 3289 "src/parse/lex_conf.cc"
-yy795:
+#line 3347 "src/parse/lex_conf.cc"
+yy810:
        ++cur;
-#line 81 "../src/parse/lex_conf.re"
+#line 82 "../src/parse/lex_conf.re"
        { opts.set_cond_set_naked   (lex_conf_bool()); return; }
-#line 3294 "src/parse/lex_conf.cc"
+#line 3352 "src/parse/lex_conf.cc"
 }
-#line 169 "../src/parse/lex_conf.re"
+#line 170 "../src/parse/lex_conf.re"
 
 }
 
@@ -3300,102 +3358,102 @@ void Scanner::lex_conf_encoding_policy()
 {
        lex_conf_assign ();
 
-#line 3304 "src/parse/lex_conf.cc"
+#line 3362 "src/parse/lex_conf.cc"
 {
        unsigned char yych;
        if ((lim - cur) < 10) fill(10);
        yych = (unsigned char)*cur;
        if (yych <= 'h') {
-               if (yych == 'f') goto yy801;
+               if (yych == 'f') goto yy816;
        } else {
-               if (yych <= 'i') goto yy802;
-               if (yych == 's') goto yy803;
+               if (yych <= 'i') goto yy817;
+               if (yych == 's') goto yy818;
        }
        ++cur;
-yy800:
-#line 176 "../src/parse/lex_conf.re"
+yy815:
+#line 177 "../src/parse/lex_conf.re"
        { fatal("bad configuration value"
                " (expected: 'ignore', 'substitute', 'fail')"); }
-#line 3320 "src/parse/lex_conf.cc"
-yy801:
+#line 3378 "src/parse/lex_conf.cc"
+yy816:
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'a') goto yy804;
-       goto yy800;
-yy802:
+       if (yych == 'a') goto yy819;
+       goto yy815;
+yy817:
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'g') goto yy806;
-       goto yy800;
-yy803:
+       if (yych == 'g') goto yy821;
+       goto yy815;
+yy818:
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'u') goto yy807;
-       goto yy800;
-yy804:
+       if (yych == 'u') goto yy822;
+       goto yy815;
+yy819:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy808;
-yy805:
+       if (yych == 'i') goto yy823;
+yy820:
        cur = ptr;
-       goto yy800;
-yy806:
+       goto yy815;
+yy821:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy809;
-       goto yy805;
-yy807:
+       if (yych == 'n') goto yy824;
+       goto yy820;
+yy822:
        yych = (unsigned char)*++cur;
-       if (yych == 'b') goto yy810;
-       goto yy805;
-yy808:
+       if (yych == 'b') goto yy825;
+       goto yy820;
+yy823:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy811;
-       goto yy805;
-yy809:
+       if (yych == 'l') goto yy826;
+       goto yy820;
+yy824:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy813;
-       goto yy805;
-yy810:
+       if (yych == 'o') goto yy828;
+       goto yy820;
+yy825:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy814;
-       goto yy805;
-yy811:
+       if (yych == 's') goto yy829;
+       goto yy820;
+yy826:
        ++cur;
-#line 180 "../src/parse/lex_conf.re"
+#line 181 "../src/parse/lex_conf.re"
        { opts.set_encoding_policy(Enc::POLICY_FAIL);       goto end; }
-#line 3363 "src/parse/lex_conf.cc"
-yy813:
+#line 3421 "src/parse/lex_conf.cc"
+yy828:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy815;
-       goto yy805;
-yy814:
+       if (yych == 'r') goto yy830;
+       goto yy820;
+yy829:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy816;
-       goto yy805;
-yy815:
+       if (yych == 't') goto yy831;
+       goto yy820;
+yy830:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy817;
-       goto yy805;
-yy816:
+       if (yych == 'e') goto yy832;
+       goto yy820;
+yy831:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy819;
-       goto yy805;
-yy817:
+       if (yych == 'i') goto yy834;
+       goto yy820;
+yy832:
        ++cur;
-#line 178 "../src/parse/lex_conf.re"
+#line 179 "../src/parse/lex_conf.re"
        { opts.set_encoding_policy(Enc::POLICY_IGNORE);     goto end; }
-#line 3384 "src/parse/lex_conf.cc"
-yy819:
+#line 3442 "src/parse/lex_conf.cc"
+yy834:
        yych = (unsigned char)*++cur;
-       if (yych != 't') goto yy805;
+       if (yych != 't') goto yy820;
        yych = (unsigned char)*++cur;
-       if (yych != 'u') goto yy805;
+       if (yych != 'u') goto yy820;
        yych = (unsigned char)*++cur;
-       if (yych != 't') goto yy805;
+       if (yych != 't') goto yy820;
        yych = (unsigned char)*++cur;
-       if (yych != 'e') goto yy805;
+       if (yych != 'e') goto yy820;
        ++cur;
-#line 179 "../src/parse/lex_conf.re"
+#line 180 "../src/parse/lex_conf.re"
        { opts.set_encoding_policy(Enc::POLICY_SUBSTITUTE); goto end; }
-#line 3397 "src/parse/lex_conf.cc"
+#line 3455 "src/parse/lex_conf.cc"
 }
-#line 181 "../src/parse/lex_conf.re"
+#line 182 "../src/parse/lex_conf.re"
 
 end:
        lex_conf_semicolon();
@@ -3405,77 +3463,77 @@ void Scanner::lex_conf_input()
 {
        lex_conf_assign ();
 
-#line 3409 "src/parse/lex_conf.cc"
+#line 3467 "src/parse/lex_conf.cc"
 {
        unsigned char yych;
        if ((lim - cur) < 7) fill(7);
        yych = (unsigned char)*cur;
-       if (yych <= 'b') goto yy827;
-       if (yych <= 'c') goto yy829;
-       if (yych <= 'd') goto yy830;
-yy827:
+       if (yych <= 'b') goto yy842;
+       if (yych <= 'c') goto yy844;
+       if (yych <= 'd') goto yy845;
+yy842:
        ++cur;
-yy828:
-#line 190 "../src/parse/lex_conf.re"
+yy843:
+#line 191 "../src/parse/lex_conf.re"
        { fatal("bad configuration value"
                " (expected: 'default', 'custom')"); }
-#line 3423 "src/parse/lex_conf.cc"
-yy829:
+#line 3481 "src/parse/lex_conf.cc"
+yy844:
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'u') goto yy831;
-       goto yy828;
-yy830:
+       if (yych == 'u') goto yy846;
+       goto yy843;
+yy845:
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'e') goto yy833;
-       goto yy828;
-yy831:
+       if (yych == 'e') goto yy848;
+       goto yy843;
+yy846:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy834;
-yy832:
+       if (yych == 's') goto yy849;
+yy847:
        cur = ptr;
-       goto yy828;
-yy833:
+       goto yy843;
+yy848:
        yych = (unsigned char)*++cur;
-       if (yych == 'f') goto yy835;
-       goto yy832;
-yy834:
+       if (yych == 'f') goto yy850;
+       goto yy847;
+yy849:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy836;
-       goto yy832;
-yy835:
+       if (yych == 't') goto yy851;
+       goto yy847;
+yy850:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy837;
-       goto yy832;
-yy836:
+       if (yych == 'a') goto yy852;
+       goto yy847;
+yy851:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy838;
-       goto yy832;
-yy837:
+       if (yych == 'o') goto yy853;
+       goto yy847;
+yy852:
        yych = (unsigned char)*++cur;
-       if (yych == 'u') goto yy839;
-       goto yy832;
-yy838:
+       if (yych == 'u') goto yy854;
+       goto yy847;
+yy853:
        yych = (unsigned char)*++cur;
-       if (yych == 'm') goto yy840;
-       goto yy832;
-yy839:
+       if (yych == 'm') goto yy855;
+       goto yy847;
+yy854:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy842;
-       goto yy832;
-yy840:
+       if (yych == 'l') goto yy857;
+       goto yy847;
+yy855:
        ++cur;
-#line 193 "../src/parse/lex_conf.re"
+#line 194 "../src/parse/lex_conf.re"
        { opts.set_input_api(INPUT_CUSTOM);  goto end; }
-#line 3470 "src/parse/lex_conf.cc"
-yy842:
+#line 3528 "src/parse/lex_conf.cc"
+yy857:
        yych = (unsigned char)*++cur;
-       if (yych != 't') goto yy832;
+       if (yych != 't') goto yy847;
        ++cur;
-#line 192 "../src/parse/lex_conf.re"
+#line 193 "../src/parse/lex_conf.re"
        { opts.set_input_api(INPUT_DEFAULT); goto end; }
-#line 3477 "src/parse/lex_conf.cc"
+#line 3535 "src/parse/lex_conf.cc"
 }
-#line 194 "../src/parse/lex_conf.re"
+#line 195 "../src/parse/lex_conf.re"
 
 end:
        lex_conf_semicolon();
@@ -3485,105 +3543,105 @@ void Scanner::lex_conf_empty_class()
 {
        lex_conf_assign ();
 
-#line 3489 "src/parse/lex_conf.cc"
+#line 3547 "src/parse/lex_conf.cc"
 {
        unsigned char yych;
        if ((lim - cur) < 11) fill(11);
        yych = (unsigned char)*cur;
-       if (yych == 'e') goto yy849;
-       if (yych == 'm') goto yy850;
+       if (yych == 'e') goto yy864;
+       if (yych == 'm') goto yy865;
        ++cur;
-yy848:
-#line 203 "../src/parse/lex_conf.re"
+yy863:
+#line 204 "../src/parse/lex_conf.re"
        { fatal("bad configuration value"
                " (expected: 'match-empty', 'match-none', 'error')"); }
-#line 3501 "src/parse/lex_conf.cc"
-yy849:
+#line 3559 "src/parse/lex_conf.cc"
+yy864:
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'r') goto yy851;
-       goto yy848;
-yy850:
+       if (yych == 'r') goto yy866;
+       goto yy863;
+yy865:
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'a') goto yy853;
-       goto yy848;
-yy851:
+       if (yych == 'a') goto yy868;
+       goto yy863;
+yy866:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy854;
-yy852:
+       if (yych == 'r') goto yy869;
+yy867:
        cur = ptr;
-       goto yy848;
-yy853:
+       goto yy863;
+yy868:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy855;
-       goto yy852;
-yy854:
+       if (yych == 't') goto yy870;
+       goto yy867;
+yy869:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy856;
-       goto yy852;
-yy855:
+       if (yych == 'o') goto yy871;
+       goto yy867;
+yy870:
        yych = (unsigned char)*++cur;
-       if (yych == 'c') goto yy857;
-       goto yy852;
-yy856:
+       if (yych == 'c') goto yy872;
+       goto yy867;
+yy871:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy858;
-       goto yy852;
-yy857:
+       if (yych == 'r') goto yy873;
+       goto yy867;
+yy872:
        yych = (unsigned char)*++cur;
-       if (yych == 'h') goto yy860;
-       goto yy852;
-yy858:
+       if (yych == 'h') goto yy875;
+       goto yy867;
+yy873:
        ++cur;
-#line 207 "../src/parse/lex_conf.re"
+#line 208 "../src/parse/lex_conf.re"
        { opts.set_empty_class_policy(EMPTY_CLASS_ERROR);       goto end; }
-#line 3540 "src/parse/lex_conf.cc"
-yy860:
+#line 3598 "src/parse/lex_conf.cc"
+yy875:
        yych = (unsigned char)*++cur;
-       if (yych != '-') goto yy852;
+       if (yych != '-') goto yy867;
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy862;
-       if (yych == 'n') goto yy863;
-       goto yy852;
-yy862:
+       if (yych == 'e') goto yy877;
+       if (yych == 'n') goto yy878;
+       goto yy867;
+yy877:
        yych = (unsigned char)*++cur;
-       if (yych == 'm') goto yy864;
-       goto yy852;
-yy863:
+       if (yych == 'm') goto yy879;
+       goto yy867;
+yy878:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy865;
-       goto yy852;
-yy864:
+       if (yych == 'o') goto yy880;
+       goto yy867;
+yy879:
        yych = (unsigned char)*++cur;
-       if (yych == 'p') goto yy866;
-       goto yy852;
-yy865:
+       if (yych == 'p') goto yy881;
+       goto yy867;
+yy880:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy867;
-       goto yy852;
-yy866:
+       if (yych == 'n') goto yy882;
+       goto yy867;
+yy881:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy868;
-       goto yy852;
-yy867:
+       if (yych == 't') goto yy883;
+       goto yy867;
+yy882:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy869;
-       goto yy852;
-yy868:
+       if (yych == 'e') goto yy884;
+       goto yy867;
+yy883:
        yych = (unsigned char)*++cur;
-       if (yych == 'y') goto yy871;
-       goto yy852;
-yy869:
+       if (yych == 'y') goto yy886;
+       goto yy867;
+yy884:
        ++cur;
-#line 206 "../src/parse/lex_conf.re"
+#line 207 "../src/parse/lex_conf.re"
        { opts.set_empty_class_policy(EMPTY_CLASS_MATCH_NONE);  goto end; }
-#line 3580 "src/parse/lex_conf.cc"
-yy871:
+#line 3638 "src/parse/lex_conf.cc"
+yy886:
        ++cur;
-#line 205 "../src/parse/lex_conf.re"
+#line 206 "../src/parse/lex_conf.re"
        { opts.set_empty_class_policy(EMPTY_CLASS_MATCH_EMPTY); goto end; }
-#line 3585 "src/parse/lex_conf.cc"
+#line 3643 "src/parse/lex_conf.cc"
 }
-#line 208 "../src/parse/lex_conf.re"
+#line 209 "../src/parse/lex_conf.re"
 
 end:
        lex_conf_semicolon();
@@ -3593,65 +3651,65 @@ void Scanner::lex_conf_dfa_minimization()
 {
        lex_conf_assign ();
 
-#line 3597 "src/parse/lex_conf.cc"
+#line 3655 "src/parse/lex_conf.cc"
 {
        unsigned char yych;
        if ((lim - cur) < 5) fill(5);
        yych = (unsigned char)*cur;
-       if (yych == 'm') goto yy877;
-       if (yych == 't') goto yy878;
+       if (yych == 'm') goto yy892;
+       if (yych == 't') goto yy893;
        ++cur;
-yy876:
-#line 217 "../src/parse/lex_conf.re"
+yy891:
+#line 218 "../src/parse/lex_conf.re"
        { fatal("bad configuration value"
                " (expected: 'table', 'moore')"); }
-#line 3609 "src/parse/lex_conf.cc"
-yy877:
+#line 3667 "src/parse/lex_conf.cc"
+yy892:
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'o') goto yy879;
-       goto yy876;
-yy878:
+       if (yych == 'o') goto yy894;
+       goto yy891;
+yy893:
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'a') goto yy881;
-       goto yy876;
-yy879:
+       if (yych == 'a') goto yy896;
+       goto yy891;
+yy894:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy882;
-yy880:
+       if (yych == 'o') goto yy897;
+yy895:
        cur = ptr;
-       goto yy876;
-yy881:
+       goto yy891;
+yy896:
        yych = (unsigned char)*++cur;
-       if (yych == 'b') goto yy883;
-       goto yy880;
-yy882:
+       if (yych == 'b') goto yy898;
+       goto yy895;
+yy897:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy884;
-       goto yy880;
-yy883:
+       if (yych == 'r') goto yy899;
+       goto yy895;
+yy898:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy885;
-       goto yy880;
-yy884:
+       if (yych == 'l') goto yy900;
+       goto yy895;
+yy899:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy886;
-       goto yy880;
-yy885:
+       if (yych == 'e') goto yy901;
+       goto yy895;
+yy900:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy888;
-       goto yy880;
-yy886:
+       if (yych == 'e') goto yy903;
+       goto yy895;
+yy901:
        ++cur;
-#line 220 "../src/parse/lex_conf.re"
+#line 221 "../src/parse/lex_conf.re"
        { opts.set_dfa_minimization(DFA_MINIMIZATION_MOORE); goto end; }
-#line 3648 "src/parse/lex_conf.cc"
-yy888:
+#line 3706 "src/parse/lex_conf.cc"
+yy903:
        ++cur;
-#line 219 "../src/parse/lex_conf.re"
+#line 220 "../src/parse/lex_conf.re"
        { opts.set_dfa_minimization(DFA_MINIMIZATION_TABLE); goto end; }
-#line 3653 "src/parse/lex_conf.cc"
+#line 3711 "src/parse/lex_conf.cc"
 }
-#line 221 "../src/parse/lex_conf.re"
+#line 222 "../src/parse/lex_conf.re"
 
 end:
        lex_conf_semicolon();
@@ -3672,7 +3730,7 @@ void Scanner::lex_conf_enc(Enc::type_t enc)
 void Scanner::lex_conf_assign ()
 {
 
-#line 3676 "src/parse/lex_conf.cc"
+#line 3734 "src/parse/lex_conf.cc"
 {
        unsigned char yych;
        static const unsigned char yybm[] = {
@@ -3712,56 +3770,56 @@ void Scanner::lex_conf_assign ()
        if ((lim - cur) < 2) fill(2);
        yych = (unsigned char)*cur;
        if (yych <= 0x1F) {
-               if (yych == '\t') goto yy894;
+               if (yych == '\t') goto yy909;
        } else {
-               if (yych <= ' ') goto yy894;
-               if (yych == '=') goto yy895;
+               if (yych <= ' ') goto yy909;
+               if (yych == '=') goto yy910;
        }
        ++cur;
-yy893:
-#line 241 "../src/parse/lex_conf.re"
+yy908:
+#line 242 "../src/parse/lex_conf.re"
        { fatal ("missing '=' in configuration"); }
-#line 3725 "src/parse/lex_conf.cc"
-yy894:
+#line 3783 "src/parse/lex_conf.cc"
+yy909:
        yych = (unsigned char)*(ptr = ++cur);
        if (yych <= 0x1F) {
-               if (yych == '\t') goto yy898;
-               goto yy893;
+               if (yych == '\t') goto yy913;
+               goto yy908;
        } else {
-               if (yych <= ' ') goto yy898;
-               if (yych != '=') goto yy893;
+               if (yych <= ' ') goto yy913;
+               if (yych != '=') goto yy908;
        }
-yy895:
+yy910:
        ++cur;
        if (lim <= cur) fill(1);
        yych = (unsigned char)*cur;
        if (yybm[0+yych] & 128) {
-               goto yy895;
+               goto yy910;
        }
-#line 242 "../src/parse/lex_conf.re"
+#line 243 "../src/parse/lex_conf.re"
        { return; }
-#line 3744 "src/parse/lex_conf.cc"
-yy898:
+#line 3802 "src/parse/lex_conf.cc"
+yy913:
        ++cur;
        if (lim <= cur) fill(1);
        yych = (unsigned char)*cur;
        if (yych <= 0x1F) {
-               if (yych == '\t') goto yy898;
+               if (yych == '\t') goto yy913;
        } else {
-               if (yych <= ' ') goto yy898;
-               if (yych == '=') goto yy895;
+               if (yych <= ' ') goto yy913;
+               if (yych == '=') goto yy910;
        }
        cur = ptr;
-       goto yy893;
+       goto yy908;
 }
-#line 243 "../src/parse/lex_conf.re"
+#line 244 "../src/parse/lex_conf.re"
 
 }
 
 void Scanner::lex_conf_semicolon ()
 {
 
-#line 3765 "src/parse/lex_conf.cc"
+#line 3823 "src/parse/lex_conf.cc"
 {
        unsigned char yych;
        static const unsigned char yybm[] = {
@@ -3801,39 +3859,39 @@ void Scanner::lex_conf_semicolon ()
        if ((lim - cur) < 2) fill(2);
        yych = (unsigned char)*cur;
        if (yych <= 0x1F) {
-               if (yych == '\t') goto yy905;
+               if (yych == '\t') goto yy920;
        } else {
-               if (yych <= ' ') goto yy905;
-               if (yych == ';') goto yy906;
+               if (yych <= ' ') goto yy920;
+               if (yych == ';') goto yy921;
        }
        ++cur;
-yy904:
-#line 249 "../src/parse/lex_conf.re"
+yy919:
+#line 250 "../src/parse/lex_conf.re"
        { fatal ("missing ending ';' in configuration"); }
-#line 3814 "src/parse/lex_conf.cc"
-yy905:
+#line 3872 "src/parse/lex_conf.cc"
+yy920:
        yych = (unsigned char)*(ptr = ++cur);
        if (yybm[0+yych] & 128) {
-               goto yy908;
+               goto yy923;
        }
-       if (yych != ';') goto yy904;
-yy906:
+       if (yych != ';') goto yy919;
+yy921:
        ++cur;
-#line 250 "../src/parse/lex_conf.re"
+#line 251 "../src/parse/lex_conf.re"
        { return; }
-#line 3825 "src/parse/lex_conf.cc"
-yy908:
+#line 3883 "src/parse/lex_conf.cc"
+yy923:
        ++cur;
        if (lim <= cur) fill(1);
        yych = (unsigned char)*cur;
        if (yybm[0+yych] & 128) {
-               goto yy908;
+               goto yy923;
        }
-       if (yych == ';') goto yy906;
+       if (yych == ';') goto yy921;
        cur = ptr;
-       goto yy904;
+       goto yy919;
 }
-#line 251 "../src/parse/lex_conf.re"
+#line 252 "../src/parse/lex_conf.re"
 
 }
 
@@ -3847,7 +3905,7 @@ int32_t Scanner::lex_conf_number ()
        lex_conf_assign ();
        tok = cur;
 
-#line 3851 "src/parse/lex_conf.cc"
+#line 3909 "src/parse/lex_conf.cc"
 {
        unsigned char yych;
        static const unsigned char yybm[] = {
@@ -3887,21 +3945,21 @@ int32_t Scanner::lex_conf_number ()
        if ((lim - cur) < 2) fill(2);
        yych = (unsigned char)*cur;
        if (yych <= '/') {
-               if (yych == '-') goto yy914;
+               if (yych == '-') goto yy929;
        } else {
-               if (yych <= '0') goto yy915;
-               if (yych <= '9') goto yy917;
+               if (yych <= '0') goto yy930;
+               if (yych <= '9') goto yy932;
        }
-yy913:
-yy914:
+yy928:
+yy929:
        yych = (unsigned char)*++cur;
-       if (yych <= '0') goto yy913;
-       if (yych <= '9') goto yy917;
-       goto yy913;
-yy915:
+       if (yych <= '0') goto yy928;
+       if (yych <= '9') goto yy932;
+       goto yy928;
+yy930:
        ++cur;
-yy916:
-#line 265 "../src/parse/lex_conf.re"
+yy931:
+#line 266 "../src/parse/lex_conf.re"
        {
                int32_t n = 0;
                if (!s_to_i32_unsafe (tok, cur, n))
@@ -3911,17 +3969,17 @@ yy916:
                lex_conf_semicolon ();
                return n;
        }
-#line 3915 "src/parse/lex_conf.cc"
-yy917:
+#line 3973 "src/parse/lex_conf.cc"
+yy932:
        ++cur;
        if (lim <= cur) fill(1);
        yych = (unsigned char)*cur;
        if (yybm[0+yych] & 128) {
-               goto yy917;
+               goto yy932;
        }
-       goto yy916;
+       goto yy931;
 }
-#line 274 "../src/parse/lex_conf.re"
+#line 275 "../src/parse/lex_conf.re"
 
 }
 
@@ -3931,7 +3989,7 @@ std::string Scanner::lex_conf_string ()
        std::string s;
        tok = cur;
 
-#line 3935 "src/parse/lex_conf.cc"
+#line 3993 "src/parse/lex_conf.cc"
 {
        unsigned char yych;
        static const unsigned char yybm[] = {
@@ -3972,38 +4030,38 @@ std::string Scanner::lex_conf_string ()
        yych = (unsigned char)*cur;
        if (yych <= '!') {
                if (yych <= '\n') {
-                       if (yych <= 0x08) goto yy922;
+                       if (yych <= 0x08) goto yy937;
                } else {
-                       if (yych != ' ') goto yy922;
+                       if (yych != ' ') goto yy937;
                }
        } else {
                if (yych <= '\'') {
-                       if (yych <= '"') goto yy925;
-                       if (yych <= '&') goto yy922;
-                       goto yy925;
+                       if (yych <= '"') goto yy940;
+                       if (yych <= '&') goto yy937;
+                       goto yy940;
                } else {
-                       if (yych != ';') goto yy922;
+                       if (yych != ';') goto yy937;
                }
        }
-#line 301 "../src/parse/lex_conf.re"
+#line 302 "../src/parse/lex_conf.re"
        { goto end; }
-#line 3991 "src/parse/lex_conf.cc"
-yy922:
+#line 4049 "src/parse/lex_conf.cc"
+yy937:
        ++cur;
        if (lim <= cur) fill(1);
        yych = (unsigned char)*cur;
        if (yybm[0+yych] & 128) {
-               goto yy922;
+               goto yy937;
        }
-#line 297 "../src/parse/lex_conf.re"
+#line 298 "../src/parse/lex_conf.re"
        {
                s = std::string(tok, tok_len());
                goto end;
        }
-#line 4004 "src/parse/lex_conf.cc"
-yy925:
+#line 4062 "src/parse/lex_conf.cc"
+yy940:
        ++cur;
-#line 283 "../src/parse/lex_conf.re"
+#line 284 "../src/parse/lex_conf.re"
        {
                const char quote = tok[0];
                for (bool end;;) {
@@ -4018,9 +4076,9 @@ yy925:
                        }
                }
        }
-#line 4022 "src/parse/lex_conf.cc"
+#line 4080 "src/parse/lex_conf.cc"
 }
-#line 302 "../src/parse/lex_conf.re"
+#line 303 "../src/parse/lex_conf.re"
 
 end:
        lex_conf_semicolon ();
index 2e34df886c7e64ebebf9eb101870971306c60ce2..bc24fc8883a5009f307d3dd9c62ad47968a38dd0 100644 (file)
@@ -547,16 +547,16 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  2
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   66
+#define YYLAST   67
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  25
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  17
+#define YYNNTS  18
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  43
+#define YYNRULES  44
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  70
+#define YYNSTATES  71
 
 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
    by yylex, with out-of-bounds checking.  */
@@ -605,9 +605,9 @@ static const yytype_uint16 yyrline[] =
 {
        0,   199,   199,   201,   202,   203,   207,   214,   219,   222,
      226,   226,   229,   233,   237,   244,   251,   258,   263,   265,
-     271,   278,   279,   285,   291,   298,   299,   304,   308,   315,
-     319,   326,   330,   337,   338,   344,   349,   350,   354,   355,
-     356,   360,   369,   373
+     271,   278,   279,   285,   291,   298,   299,   304,   312,   316,
+     323,   327,   334,   338,   345,   346,   352,   357,   358,   362,
+     363,   364,   368,   369,   379
 };
 #endif
 
@@ -620,8 +620,8 @@ static const char *const yytname[] =
   "TOKEN_CONF", "TOKEN_ID", "TOKEN_FID", "TOKEN_FID_END", "TOKEN_REGEXP",
   "'/'", "'='", "';'", "'*'", "'<'", "'>'", "'!'", "':'", "','", "'|'",
   "'\\\\'", "'+'", "'?'", "'('", "')'", "$accept", "spec", "def", "name",
-  "enddef", "rule", "ccode", "clist", "conds", "trailexpr", "expr", "diff",
-  "term", "factor", "closes", "close", "primary", YY_NULLPTR
+  "enddef", "rule", "ccode", "clist", "conds", "trailexpr", "capexpr",
+  "expr", "diff", "term", "factor", "closes", "close", "primary", YY_NULLPTR
 };
 #endif
 
@@ -636,10 +636,10 @@ static const yytype_uint16 yytoknum[] =
 };
 # endif
 
-#define YYPACT_NINF -17
+#define YYPACT_NINF -20
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-17)))
+  (!!((Yystate) == (-20)))
 
 #define YYTABLE_NINF -1
 
@@ -650,13 +650,14 @@ static const yytype_uint16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int8 yypact[] =
 {
-     -17,     1,   -17,   -17,    -2,   -17,   -17,    14,    29,    20,
-     -17,    20,   -17,    23,     3,    30,    20,   -17,    -1,   -17,
-     -17,   -17,   -17,     0,    25,    34,    35,   -17,    27,    22,
-     -17,    20,    20,    20,   -17,   -17,   -17,   -17,   -17,    15,
-     -17,   -17,    37,    43,   -17,    40,    10,    50,   -17,   -17,
-     -17,   -17,   -17,    21,    30,    20,   -17,    51,    44,    54,
-       0,     0,   -17,    56,    55,   -17,   -17,   -17,   -17,   -17
+     -20,     1,   -20,   -20,    -6,   -20,   -20,    15,    22,    11,
+     -20,    11,   -20,    40,    35,    27,    31,    11,   -20,     0,
+     -20,   -20,   -20,   -20,    19,     5,    32,    30,   -20,     8,
+      21,   -20,    11,    11,    11,   -20,   -20,   -20,   -20,   -20,
+      28,   -20,   -20,    37,    42,   -20,    39,     3,    49,   -20,
+     -20,   -20,   -20,   -20,    27,    31,    11,   -20,    50,    43,
+      53,    19,    19,   -20,    55,    54,   -20,   -20,   -20,   -20,
+     -20
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -664,27 +665,28 @@ static const yytype_int8 yypact[] =
      means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       2,     0,     1,     3,    41,     9,    42,     0,     0,     0,
-       4,     0,     5,     0,    25,    27,    29,    31,    33,     8,
-      13,    23,    22,     0,     0,     0,    21,    41,     0,     0,
-      12,     0,     0,     0,    32,    35,    38,    39,    40,    34,
-      36,    18,     0,     0,    17,     0,     0,     0,    43,    11,
-       7,    10,     6,    26,    28,    30,    37,     0,     0,     0,
-       0,     0,    24,     0,     0,    16,    15,    14,    19,    20
+       2,     0,     1,     3,    43,     9,    42,     0,     0,     0,
+       4,     0,     5,     0,    25,    27,    28,    30,    32,    34,
+       8,    13,    23,    22,     0,     0,     0,    21,    43,     0,
+       0,    12,     0,     0,     0,    33,    36,    39,    40,    41,
+      35,    37,    18,     0,     0,    17,     0,     0,     0,    44,
+      11,     7,    10,     6,    26,    29,    31,    38,     0,     0,
+       0,     0,     0,    24,     0,     0,    16,    15,    14,    19,
+      20
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int8 yypgoto[] =
 {
-     -17,   -17,   -17,   -17,   -17,   -17,   -13,    38,   -17,    17,
-      -6,    32,    33,   -16,   -17,    26,   -17
+     -20,   -20,   -20,   -20,   -20,   -20,   -19,    36,   -20,    16,
+     -20,    -7,    29,    33,   -17,   -20,    24,   -20
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int8 yydefgoto[] =
 {
-      -1,     1,    10,    11,    52,    12,    44,    25,    26,    13,
-      14,    15,    16,    17,    39,    40,    18
+      -1,     1,    10,    11,    53,    12,    45,    26,    27,    13,
+      14,    15,    16,    17,    18,    40,    41,    19
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -692,24 +694,24 @@ static const yytype_int8 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_uint8 yytable[] =
 {
-      34,     2,    35,    28,    41,    29,     3,     4,     5,    19,
-       6,    42,    36,    31,     7,     8,    27,    43,    20,     6,
-      37,    38,    32,    60,     9,    53,    27,    30,    36,     6,
-      49,    21,    50,     9,    51,    21,    37,    38,    22,    34,
-      32,    32,    22,     9,    23,    24,    32,    66,    67,    46,
-      33,    48,    57,    47,    58,    59,    62,    63,    65,    64,
-      68,    69,    45,    61,    54,    56,    55
+      35,     2,    29,    36,    30,    20,     3,     4,     5,    28,
+       6,    22,     6,    37,     7,     8,    61,    28,    23,    21,
+       6,    38,    39,    42,     9,    54,     9,    33,    22,    50,
+      43,    51,    49,    52,     9,    23,    44,    24,    25,    35,
+      33,    37,    67,    68,    31,    32,    33,    47,    48,    38,
+      39,    34,    58,    59,    60,    63,    64,    66,    65,    69,
+      70,    46,    55,    62,    57,     0,     0,    56
 };
 
-static const yytype_uint8 yycheck[] =
+static const yytype_int8 yycheck[] =
 {
-      16,     0,     3,     9,     4,    11,     5,     6,     7,    11,
-       9,    11,    13,    10,    13,    14,     6,    17,     4,     9,
-      21,    22,    19,    13,    23,    31,     6,     4,    13,     9,
-       8,     6,    10,    23,    12,     6,    21,    22,    13,    55,
-      19,    19,    13,    23,    15,    16,    19,    60,    61,    15,
-      20,    24,    15,    18,    11,    15,     6,     6,     4,    15,
-       4,     6,    24,    46,    32,    39,    33
+      17,     0,     9,     3,    11,    11,     5,     6,     7,     6,
+       9,     6,     9,    13,    13,    14,    13,     6,    13,     4,
+       9,    21,    22,     4,    23,    32,    23,    19,     6,     8,
+      11,    10,    24,    12,    23,    13,    17,    15,    16,    56,
+      19,    13,    61,    62,     4,    10,    19,    15,    18,    21,
+      22,    20,    15,    11,    15,     6,     6,     4,    15,     4,
+       6,    25,    33,    47,    40,    -1,    -1,    34
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -717,12 +719,13 @@ static const yytype_uint8 yycheck[] =
 static const yytype_uint8 yystos[] =
 {
        0,    26,     0,     5,     6,     7,     9,    13,    14,    23,
-      27,    28,    30,    34,    35,    36,    37,    38,    41,    11,
-       4,     6,    13,    15,    16,    32,    33,     6,    35,    35,
-       4,    10,    19,    20,    38,     3,    13,    21,    22,    39,
-      40,     4,    11,    17,    31,    32,    15,    18,    24,     8,
-      10,    12,    29,    35,    36,    37,    40,    15,    11,    15,
-      13,    34,     6,     6,    15,     4,    31,    31,     4,     6
+      27,    28,    30,    34,    35,    36,    37,    38,    39,    42,
+      11,     4,     6,    13,    15,    16,    32,    33,     6,    36,
+      36,     4,    10,    19,    20,    39,     3,    13,    21,    22,
+      40,    41,     4,    11,    17,    31,    32,    15,    18,    24,
+       8,    10,    12,    29,    36,    37,    38,    41,    15,    11,
+      15,    13,    34,     6,     6,    15,     4,    31,    31,     4,
+       6
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
@@ -730,9 +733,9 @@ static const yytype_uint8 yyr1[] =
 {
        0,    25,    26,    26,    26,    26,    27,    27,    28,    28,
       29,    29,    30,    30,    30,    30,    30,    30,    31,    31,
-      31,    32,    32,    33,    33,    34,    34,    35,    35,    36,
-      36,    37,    37,    38,    38,    38,    39,    39,    40,    40,
-      40,    41,    41,    41
+      31,    32,    32,    33,    33,    34,    34,    35,    36,    36,
+      37,    37,    38,    38,    39,    39,    39,    40,    40,    41,
+      41,    41,    42,    42,    42
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -740,9 +743,9 @@ static const yytype_uint8 yyr2[] =
 {
        0,     2,     0,     2,     2,     2,     3,     3,     2,     1,
        1,     1,     2,     2,     5,     5,     5,     3,     1,     4,
-       4,     1,     1,     1,     3,     1,     3,     1,     3,     1,
-       3,     1,     2,     1,     2,     2,     1,     2,     1,     1,
-       1,     1,     1,     3
+       4,     1,     1,     1,     3,     1,     3,     1,     1,     3,
+       1,     3,     1,     2,     1,     2,     2,     1,     2,     1,
+       1,     1,     1,     1,     3
 };
 
 
@@ -1572,15 +1575,18 @@ yyreduce:
   case 27:
 
     {
-                       (yyval.regexp) = (yyvsp[0].regexp);
+               if (context.input.opts->posix_captures) {
+                       (yyvsp[0].regexp) = RegExp::make_cap((yyvsp[0].regexp));
                }
+               (yyval.regexp) = (yyvsp[0].regexp);
+       }
 
     break;
 
   case 28:
 
     {
-                       (yyval.regexp) = mkAlt((yyvsp[-2].regexp), (yyvsp[0].regexp));
+                       (yyval.regexp) = (yyvsp[0].regexp);
                }
 
     break;
@@ -1588,7 +1594,7 @@ yyreduce:
   case 29:
 
     {
-                       (yyval.regexp) = (yyvsp[0].regexp);
+                       (yyval.regexp) = mkAlt((yyvsp[-2].regexp), (yyvsp[0].regexp));
                }
 
     break;
@@ -1596,7 +1602,7 @@ yyreduce:
   case 30:
 
     {
-                       (yyval.regexp) = context.input.mkDiff((yyvsp[-2].regexp), (yyvsp[0].regexp));
+                       (yyval.regexp) = (yyvsp[0].regexp);
                }
 
     break;
@@ -1604,20 +1610,28 @@ yyreduce:
   case 31:
 
     {
-                       (yyval.regexp) = (yyvsp[0].regexp);
+                       (yyval.regexp) = context.input.mkDiff((yyvsp[-2].regexp), (yyvsp[0].regexp));
                }
 
     break;
 
   case 32:
 
+    {
+                       (yyval.regexp) = (yyvsp[0].regexp);
+               }
+
+    break;
+
+  case 33:
+
     {
                        (yyval.regexp) = RegExp::make_cat((yyvsp[-1].regexp), (yyvsp[0].regexp));
                }
 
     break;
 
-  case 34:
+  case 35:
 
     {
                switch((yyvsp[0].op)) {
@@ -1629,7 +1643,7 @@ yyreduce:
 
     break;
 
-  case 35:
+  case 36:
 
     {
                (yyval.regexp) = RegExp::make_iter((yyvsp[-1].regexp), (yyvsp[0].extop).min, (yyvsp[0].extop).max);
@@ -1637,56 +1651,54 @@ yyreduce:
 
     break;
 
-  case 37:
+  case 38:
 
     { (yyval.op) = ((yyvsp[-1].op) == (yyvsp[0].op)) ? (yyvsp[-1].op) : '*'; }
 
     break;
 
-  case 38:
+  case 39:
 
     { (yyval.op) = '*'; }
 
     break;
 
-  case 39:
+  case 40:
 
     { (yyval.op) = '+'; }
 
     break;
 
-  case 40:
+  case 41:
 
     { (yyval.op) = '?'; }
 
     break;
 
-  case 41:
+  case 43:
 
     {
-                       symtab_t::iterator i = context.symtab.find(*(yyvsp[0].str));
-                       delete (yyvsp[0].str);
-                       if (i == context.symtab.end()) {
-                               context.input.fatal("can't find symbol");
-                       }
-                       (yyval.regexp) = i->second;
+               symtab_t::iterator i = context.symtab.find(*(yyvsp[0].str));
+               if (i == context.symtab.end()) {
+                       context.input.fatal("can't find symbol");
                }
-
-    break;
-
-  case 42:
-
-    {
-                       (yyval.regexp) = (yyvsp[0].regexp);
+               (yyval.regexp) = i->second;
+               if (context.input.opts->posix_captures && need_wrap((yyval.regexp))) {
+                       (yyval.regexp) = RegExp::make_ref((yyval.regexp), *(yyvsp[0].str));
                }
+               delete (yyvsp[0].str);
+       }
 
     break;
 
-  case 43:
+  case 44:
 
     {
-                       (yyval.regexp) = (yyvsp[-1].regexp);
+               (yyval.regexp) = (yyvsp[-1].regexp);
+               if (context.input.opts->posix_captures) {
+                       (yyval.regexp) = RegExp::make_cap((yyval.regexp));
                }
+       }
 
     break;
 
index c57f5516d4a5c8f51270caf646cd8afd5b2e4d2d..0f5a18f65d37e5731a232bd1a83a9e84405d0df9 100644 (file)
@@ -23,6 +23,7 @@ static void emit_accept        (OutputFile &o, uint32_t ind, const DFA &dfa, con
 static void emit_rule          (OutputFile &o, uint32_t ind, const DFA &dfa, size_t rule_idx);
 static void gen_fintags        (OutputFile &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 std::string tagname     (const Tag &tag);
 static bool endstate           (const State *s);
 
 void emit_action(OutputFile &o, uint32_t ind, const DFA &dfa,
@@ -157,8 +158,11 @@ void emit_rule(OutputFile &o, uint32_t ind, const DFA &dfa, size_t rule_idx)
        const Rule &rule = dfa.rules[rule_idx];
        const Code *code = rule.code;
        const std::string &cond = code->cond;
+       const bool wrap = rule.ncap > 0;
        std::string s;
 
+       if (wrap) o.wind(ind++).ws("{\n");
+
        gen_fintags(o, ind, dfa, rule);
 
        if (opts->target == opt_t::SKELETON) {
@@ -186,6 +190,8 @@ void emit_rule(OutputFile &o, uint32_t ind, const DFA &dfa, size_t rule_idx)
                strrreplace(s = opts->condGoto, opts->condGotoParam, opts->condPrefix + cond);
                o.wind(ind).wstring(s).ws("\n");
        }
+
+       if (wrap) o.wind(--ind).ws("}\n");
 }
 
 void need(OutputFile &o, uint32_t ind, size_t some)
@@ -365,17 +371,24 @@ void gen_fintags(OutputFile &o, uint32_t ind, const DFA &dfa, const Rule &rule)
        const std::vector<Tag> &tags = dfa.tags;
        const tagver_t *fins = dfa.finvers;
 
+       if (rule.ncap > 0) {
+               o.wind(ind).ws("const size_t yynmatch = ").wu64(rule.ncap).ws(";\n");
+               o.wind(ind).ws("const ").wstring(opts->yyctype).ws(" *yypmatch[yynmatch * 2];\n");
+       }
+
        // variable tags
        for (size_t t = rule.ltag; t < rule.htag; ++t) {
                const Tag &tag = tags[t];
-               if (fixed(tag)) continue;
+
+               // see note [fixed and variable tags]
+               if (orbit(tag) || fixed(tag)) continue;
 
                expr = vartag_expr(fins[t], prefix, expression);
 
                o.wind(ind);
                if (generic) {
                        if (!trailing(tag)) {
-                               o.wstring(opts->yycopytag).ws(" (").wstring(*tag.name)
+                               o.wstring(opts->yycopytag).ws(" (").wstring(tagname(tag))
                                        .ws(", ").wstring(expr).ws(")");
                        } else if (dfa.oldstyle_ctxmarker) {
                                o.wstring(opts->yyrestorectx).ws(" ()");
@@ -384,7 +397,7 @@ void gen_fintags(OutputFile &o, uint32_t ind, const DFA &dfa, const Rule &rule)
                        }
                } else {
                        if (!trailing(tag)) {
-                               o.wstring(*tag.name).ws(" = ").wstring(expr);
+                               o.wstring(tagname(tag)).ws(" = ").wstring(expr);
                        } else if (dfa.oldstyle_ctxmarker) {
                                o.wstring(opts->yycursor).ws(" = ").wstring(opts->yyctxmarker);
                        } else {
@@ -397,7 +410,9 @@ void gen_fintags(OutputFile &o, uint32_t ind, const DFA &dfa, const Rule &rule)
        // fixed tags
        for (size_t t = rule.ltag; t < rule.htag; ++t) {
                const Tag &tag = tags[t];
-               if (!fixed(tag)) continue;
+
+               // see note [fixed and variable tags]
+               if (orbit(tag) || !fixed(tag)) continue;
 
                const size_t dist = tag.dist;
                const bool fixed_on_cursor = tag.base == Tag::RIGHTMOST;
@@ -408,7 +423,7 @@ void gen_fintags(OutputFile &o, uint32_t ind, const DFA &dfa, const Rule &rule)
                if (generic) {
                        assert(dist == 0);
                        if (!trailing(tag)) {
-                               o.wstring(opts->yycopytag).ws(" (").wstring(*tag.name)
+                               o.wstring(opts->yycopytag).ws(" (").wstring(tagname(tag))
                                        .ws(", ").wstring(expr).ws(")");
                        } else if (!fixed_on_cursor) {
                                assert(!dfa.oldstyle_ctxmarker);
@@ -416,7 +431,7 @@ void gen_fintags(OutputFile &o, uint32_t ind, const DFA &dfa, const Rule &rule)
                        }
                } else {
                        if (!trailing(tag)) {
-                               o.wstring(*tag.name).ws(" = ").wstring(expr);
+                               o.wstring(tagname(tag)).ws(" = ").wstring(expr);
                                if (dist > 0) o.ws(" - ").wu64(dist);
                        } else if (!fixed_on_cursor) {
                                o.wstring(opts->yycursor).ws(" = ").wstring(expr);
@@ -429,6 +444,14 @@ void gen_fintags(OutputFile &o, uint32_t ind, const DFA &dfa, const Rule &rule)
        }
 }
 
+std::string tagname(const Tag &tag)
+{
+       assert(!trailing(tag));
+       return capture(tag)
+               ? "yypmatch[" + to_string(2 * (tag.ncap / 3) + (tag.ncap % 3)) + "]"
+               : *tag.name;
+}
+
 bool endstate(const State *s)
 {
        // 'end' state is a state which has no outgoing transitions on symbols
index d53640886d4f268013572e40451f36628004fb7d..dd9827065bbd6b85eae06bd4a6b928c93e60f144 100644 (file)
@@ -161,6 +161,9 @@ void opt_t::fix ()
                bUseStateAbort = Opt::baseopt.bUseStateAbort;
                bUseStateNext = Opt::baseopt.bUseStateNext;
        }
+       if (posix_captures) {
+               tags = true;
+       }
        if (!tags)
        {
                tags_default = Opt::baseopt.tags_default;
index 323a891a29a2248c9c31e4dd9aa811347eb75b4e..c51b07946cb9a55bf3a929fc5455066d31940a3f 100644 (file)
@@ -62,6 +62,7 @@ namespace re2c
        OPT (std::string, tags_default, "NULL") \
        OPT (std::string, tags_prefix, "yyt") \
        OPT (std::string, tags_expression, "@@") \
+       OPT (bool, posix_captures, false) \
        /* reuse */ \
        OPT (bool, rFlag, false) \
        /* partial flex syntax support */ \
index a3b8600f2ae282200b505dbafca001ca2493e7dd..c952615ec4ec5b4e82d5248ed3f675fc4de28522 100644 (file)
@@ -147,6 +147,7 @@ opt_long:
        "case-inverted"         end { opts.set_bCaseInverted (true);     goto opt; }
        "skeleton"              end { opts.set_target (opt_t::SKELETON); goto opt; }
        "tags"                  end { opts.set_tags (true);              goto opt; }
+       "posix-captures"        end { opts.set_posix_captures (true);    goto opt; }
        "no-lookahead"          end { opts.set_lookahead(false);         goto opt; }
        "eager-skip"            end { opts.set_eager_skip(true);         goto opt; }
        "ecb"                   end { if (!opts.set_encoding (Enc::EBCDIC)) { error_encoding (); return EXIT_FAIL; } goto opt; }
index 7a07b0ac55f2d54655fcdd471a8cd6994a2105f4..b656cbe748135b7a9e199c0dd373e3c7a2bdfc3a 100644 (file)
@@ -1,4 +1,4 @@
-#include <algorithm>
+#include <string.h>
 
 #include "src/ir/dfa/closure.h"
 #include "src/ir/nfa/nfa.h"
@@ -8,26 +8,32 @@ namespace re2c
 {
 
 static void closure_one(closure_t &clos, Tagpool &tagpool, tagtree_t &tagtree,
-       clos_t &c0, nfa_state_t *n, closure_t *shadow, std::valarray<Rule> &rules);
+       clos_t &c0, nfa_state_t *n, const std::vector<Tag> &tags, closure_t *shadow, std::valarray<Rule> &rules);
+static bool better(const clos_t &c1, const clos_t &c2, Tagpool &tagpool, tagtree_t &tagtree, const std::vector<Tag> &tags);
 static void assert_items_are_grouped_by_rule(const closure_t &clos);
 static void lower_lookahead_to_transition(closure_t &clos, Tagpool &tagpool, tagtree_t &tagtree);
 static void update_versions(closure_t &clos, Tagpool &tagpool, tagtree_t &tagtree, tagver_t &maxver, tagver_t *newvers);
+static void orbit_order(closure_t &clos, Tagpool &tagpool, tagtree_t &tagtree, const std::vector<Tag> &tags);
 static void find_nondet(const closure_t &clos, size_t *nondet, const Tagpool &tagpool, const std::valarray<Rule> &rules);
 
 void closure(closure_t &clos1, closure_t &clos2, Tagpool &tagpool, tagtree_t &tagtree,
        std::valarray<Rule> &rules, tagver_t &maxver, tagver_t *newvers,
-       size_t *nondet, bool lookahead, closure_t *shadow)
+       size_t *nondet, bool lookahead, closure_t *shadow, const std::vector<Tag> &tags)
 {
        // build tagged epsilon-closure of the given set of NFA states
        clos2.clear();
        if (shadow) shadow->clear();
        tagtree.init();
        for (clositer_t c = clos1.begin(); c != clos1.end(); ++c) {
-               closure_one(clos2, tagpool, tagtree, *c, c->state, shadow, rules);
+               closure_one(clos2, tagpool, tagtree, *c, c->state, tags, shadow, rules);
        }
 
        assert_items_are_grouped_by_rule(clos2);
 
+       // see note [orbit order of closure items]
+       orbit_order(clos2, tagpool, tagtree, tags);
+       if (shadow) orbit_order(*shadow, tagpool, tagtree, tags);
+
        // see note [the difference between TDFA(0) and TDFA(1)]
        if (!lookahead) {
                lower_lookahead_to_transition(clos2, tagpool, tagtree);
@@ -73,15 +79,16 @@ void assert_items_are_grouped_by_rule(const closure_t &clos)
  *
  * Each closure state might be reachable by multiple epsilon-paths with
  * different tags: this means that the regular expression is ambiguous
- * and can be parsed in different ways. We resolve ambiguity by always
- * choosing the leftmost epsilon-path through the NFA.
- *
- * Compilation of regular expression into NFA takes into account semantics
- * of individual subexpressions: e.g., greedy iteration is compiled so that
- * the leftmost path re-iterates rather than leaves the subexpression..
+ * and can be parsed in different ways. Disambiguation strategy depends
+ * on the type of the first (most prioritized) ambiguous tag: for simple
+ * tags we always choose the leftmost epsilon-path through the NFA, for
+ * POSIX captures the rules are more complex (opening and closing tags
+ * are maximized unless one of them is bottom, in which case we fallback
+ * to leftmost strategy; orbit tags are compared by order and by tagged
+ * epsilon-paths so that earlier iterations are maximized).
  */
 void closure_one(closure_t &clos, Tagpool &tagpool, tagtree_t &tagtree, clos_t &c0,
-       nfa_state_t *n, closure_t *shadow,
+       nfa_state_t *n, const std::vector<Tag> &tags, closure_t *shadow,
        std::valarray<Rule> &rules)
 {
        if (n->loop) return;
@@ -90,15 +97,15 @@ void closure_one(closure_t &clos, Tagpool &tagpool, tagtree_t &tagtree, clos_t &
        clositer_t c = clos.begin(), e = clos.end();
        switch (n->type) {
                case nfa_state_t::NIL:
-                       closure_one(clos, tagpool, tagtree, c0, n->nil.out, shadow, rules);
+                       closure_one(clos, tagpool, tagtree, c0, n->nil.out, tags, shadow, rules);
                        return;
                case nfa_state_t::ALT:
-                       closure_one(clos, tagpool, tagtree, c0, n->alt.out1, shadow, rules);
-                       closure_one(clos, tagpool, tagtree, c0, n->alt.out2, shadow, rules);
+                       closure_one(clos, tagpool, tagtree, c0, n->alt.out1, tags, shadow, rules);
+                       closure_one(clos, tagpool, tagtree, c0, n->alt.out2, tags, shadow, rules);
                        return;
                case nfa_state_t::TAG:
                        tagtree.push(n->tag.info, n->tag.bottom ? TAGVER_BOTTOM : TAGVER_CURSOR);
-                       closure_one(clos, tagpool, tagtree, c0, n->tag.out, shadow, rules);
+                       closure_one(clos, tagpool, tagtree, c0, n->tag.out, tags, shadow, rules);
                        tagtree.pop(n->tag.info);
                        return;
                case nfa_state_t::RAN:
@@ -110,11 +117,12 @@ void closure_one(closure_t &clos, Tagpool &tagpool, tagtree_t &tagtree, clos_t &
                        break;
        }
 
-       clos_t c2 = {c0.origin, n, c0.tvers, tagpool.insert(tagtree.leaves())};
+       clos_t c2 = {c0.origin, n, c0.tvers, tagpool.insert(tagtree.leaves()), c0.order};
        if (c == e) {
                clos.push_back(c2);
        } else {
                clos_t &c1 = *c;
+               if (better(c1, c2, tagpool, tagtree, tags)) std::swap(c1, c2);
                if (shadow) shadow->push_back(c2);
                const size_t
                        r1 = c1.state->rule,
@@ -141,6 +149,56 @@ void closure_one(closure_t &clos, Tagpool &tagpool, tagtree_t &tagtree, clos_t &
  * with the highest priority (see note [closure items are sorted by rule]).
  */
 
+bool better(const clos_t &c1, const clos_t &c2,
+       Tagpool &tagpool, tagtree_t &tagtree, const std::vector<Tag> &tags)
+{
+       if (c1.ttran == c2.ttran
+               && c1.tvers == c2.tvers
+               && c1.order == c2.order) return false;
+
+       const tagver_t
+               *l1 = tagpool[c1.ttran], *l2 = tagpool[c2.ttran],
+               *v1 = tagpool[c1.tvers], *v2 = tagpool[c2.tvers],
+               *o1 = tagpool[c1.order], *o2 = tagpool[c2.order];
+       tagver_t x, y;
+
+       for (size_t t = 0; t < tagpool.ntags; ++t) {
+
+               // simple tag: always prefer leftmost
+               if (!capture(tags[t])) {
+                       return false;
+
+               // orbit capture tag: compare by order and tagged epsilon-paths
+               } else if (orbit(tags[t])) {
+                       x = o1[t]; y = o2[t];
+                       if (x < y) return false;
+                       if (x > y) return true;
+
+                       const int cmp = tagtree.compare_paths(l1[t], l2[t]);
+                       if (cmp < 0) return false;
+                       if (cmp > 0) return true;
+
+                       assert(v1[t] == v2[t]);
+
+               // open/close capture tag: if either one is bottom,
+               // prefer leftmost; otherwise, maximize
+               } else {
+                       assert(o1[t] == o2[t]);
+
+                       x = tagtree.elem(l1[t]);
+                       y = tagtree.elem(l2[t]);
+                       if (x < 0 || y < 0 || x > y) return false;
+                       if (x < y) return true;
+
+                       x = v1[t]; y = v2[t];
+                       if (x < 0 || y < 0 || x > y) return false;
+                       if (x < y) return true;
+               }
+       }
+
+       return false;
+}
+
 /* note [the difference between TDFA(0) and TDFA(1)]
  *
  * TDFA(0) performs epsilon-closure after transition on symbol,
@@ -255,6 +313,96 @@ void update_versions(closure_t &clos, Tagpool &tagpool, tagtree_t &tagtree,
        }
 }
 
+/* note [orbit order of closure items]
+ *
+ * POSIX disambiguation rules demand that earlier subexpressions match
+ * the longest possible prefix of the input string (without violating the
+ * whole match). To accommodate these rules, we resolve conflicts on orbit
+ * tags by lexicographic comparison of tag offsets on the way to conflicting
+ * NFA states.
+ *
+ * By lexicographic comparison we mean that if one history is a proper prefix
+ * of another history, it is lexicographically less; otherwise for the first
+ * pair of different offsets, if one offset is greater than the other, then
+ * the corresponding history is lexicographically less.
+ *
+ * For the given input string, it is possible to define lexicographical order
+ * on tag histories corresponding to all matching paths through NFA, because
+ * the length of histories is bounded by the length of input (epsilon-cycles
+ * are forbidden) and the set of all possible offsets is finite (also bounded
+ * by input length).
+ *
+ * Moreover, for a given prefix of the input string, lexicographic order on
+ * histories of the whole string is an extension of order on prefix histories:
+ * once comparison of two prefix histories X and Y establishes that X < Y,
+ * all further comarisons of X's descendants to Y's descendants will yield
+ * the same result. This is obvious unless X is a proper prefix of Y;
+ * otherwise, this is true because any offset appended to X will be greater
+ * than any offset in Y (it corresponds to further position in the input
+ * string) and therefore all descendants of X will be less than Y.
+ *
+ * Therefore, at any point of ambiguity we can choose lexicographically least
+ * history and claim that it corresponds to lexicographically least history
+ * for the whole input.
+ *
+ * For the same reason, keeping the whole history of offsets is not necessary:
+ * it is sufficient to remember only the relative order of any pair of
+ * histories and use it as the first component in lexicographic comparison.
+ *
+ * This part of the algorithm was invented by Christopher Kuklewicz.
+ */
+
+typedef std::pair<tagver_t, tagver_t> key_t;
+struct cmp_t
+{
+       tagtree_t &tree;
+       bool operator()(const key_t &x, const key_t &y)
+       {
+               if (x.first < y.first) return true;
+               if (x.first > y.first) return false;
+               return tree.compare_paths(x.second, y.second) < 0;
+       }
+};
+
+void orbit_order(closure_t &clos, Tagpool &tagpool,
+       tagtree_t &tagtree, const std::vector<Tag> &tags)
+{
+       const size_t
+               ntag = tagpool.ntags,
+               nclos = clos.size();
+
+       const cmp_t cmp = {tagtree};
+       std::set<key_t, cmp_t> keys(cmp);
+
+       size_t &maxclos = tagpool.maxclos;
+       tagver_t *&orders = tagpool.orders;
+       if (maxclos < nclos) {
+               maxclos = nclos * 2; // in advance
+               delete[] orders;
+               orders = new tagver_t[ntag * maxclos];
+       }
+
+       memset(orders, TAGVER_ZERO, ntag * nclos * sizeof(tagver_t));
+       for (size_t t = 0; t < ntag; ++t) {
+               if (!orbit(tags[t])) continue;
+
+               keys.clear();
+               for (size_t i = 0; i < nclos; ++i) {
+                       const key_t key(tagpool[clos[i].order][t], tagpool[clos[i].ttran][t]);
+                       keys.insert(key);
+               }
+
+               for (size_t i = 0; i < nclos; ++i) {
+                       const key_t key(tagpool[clos[i].order][t], tagpool[clos[i].ttran][t]);
+                       const ptrdiff_t d = std::distance(keys.begin(), keys.find(key));
+                       orders[ntag * i + t] = static_cast<tagver_t>(d);
+               }
+       }
+       for (size_t i = 0; i < nclos; ++i) {
+               clos[i].order = tagpool.insert(orders + ntag * i);
+       }
+}
+
 /*
  * For each tag, find the number of parallel versions of this tag
  * used in this closure (degree of non-determinism).
index 970163a81c0e258b8628e8ac170495e2387c111c..44b167c7742f503cdef9a9b125d310d04d1a2b78 100644 (file)
@@ -16,6 +16,7 @@ struct clos_t
        nfa_state_t *state;
        size_t tvers; // tag versions (including lookahead tags)
        size_t ttran; // transition tags
+       size_t order; // see note [orbit order of closure items]
 
        static inline bool fin(const clos_t &c) { return c.state->type == nfa_state_t::FIN; }
 };
@@ -26,7 +27,7 @@ typedef closure_t::const_iterator cclositer_t;
 
 void closure(closure_t &clos1, closure_t &clos2, Tagpool &tagpool, tagtree_t &tagtree,
        std::valarray<Rule> &rules, tagver_t &maxver, tagver_t *newvers,
-       size_t *nondet, bool lookahead, closure_t *shadow);
+       size_t *nondet, bool lookahead, closure_t *shadow, const std::vector<Tag> &tags);
 
 } // namespace re2c
 
index a33aed6409b521cdef41de5dabec9accd1402c8a..a39b550bc182ed9d069e014a14dadf096c7e21a0 100644 (file)
@@ -42,7 +42,7 @@ void reach(const kernel_t *kernel, closure_t &clos, uint32_t symbol)
                nfa_state_t *s1 = kernel->state[i],
                        *s2 = transition(s1, symbol);
                if (s2) {
-                       clos_t c = {s1, s2, kernel->tvers[i], ZERO_TAGS};
+                       clos_t c = {s1, s2, kernel->tvers[i], ZERO_TAGS, kernel->order[i]};
                        clos.push_back(c);
                }
        }
@@ -65,7 +65,7 @@ dfa_t::dfa_t(const nfa_t &nfa, const opt_t *opts,
        const size_t ntag = tags.size();
        Tagpool tagpool(ntag);
        tagtree_t tagtree(ntag);
-       kernels_t kernels(tagpool, tcpool);
+       kernels_t kernels(tagpool, tcpool, tags);
        closure_t clos1, clos2;
        tagver_t *newvers = new tagver_t[ntag * 2];
        size_t *nondet = new size_t[ntag]();
@@ -86,17 +86,17 @@ dfa_t::dfa_t(const nfa_t &nfa, const opt_t *opts,
        // build tagged epsilon-closure of all reachable NFA states,
        // then find identical or mappable DFA state or add a new one
 
-       clos_t c0 = {NULL, nfa.root, INITIAL_TAGS, ZERO_TAGS};
+       clos_t c0 = {NULL, nfa.root, INITIAL_TAGS, ZERO_TAGS, ZERO_TAGS};
        clos1.push_back(c0);
        std::fill(newvers, newvers + ntag * 2, TAGVER_ZERO);
-       closure(clos1, clos2, tagpool, tagtree, rules, maxtagver, newvers, nondet, lookahead, dump.shadow);
+       closure(clos1, clos2, tagpool, tagtree, rules, maxtagver, newvers, nondet, lookahead, dump.shadow, tags);
        find_state(*this, dfa_t::NIL, 0/* any */, kernels, clos2, dump);
 
        for (size_t i = 0; i < kernels.size(); ++i) {
                std::fill(newvers, newvers + ntag * 2, TAGVER_ZERO);
                for (size_t c = 0; c < nchars; ++c) {
                        reach(kernels[i], clos1, charset[c]);
-                       closure(clos1, clos2, tagpool, tagtree, rules, maxtagver, newvers, nondet, lookahead, dump.shadow);
+                       closure(clos1, clos2, tagpool, tagtree, rules, maxtagver, newvers, nondet, lookahead, dump.shadow, tags);
                        find_state(*this, i, c, kernels, clos2, dump);
                }
        }
index df39acc720c433c5606c16ffdca16e84be904d4c..a00dc0cdce255fa575995f0b54b72b8dde05ce8b 100644 (file)
@@ -48,7 +48,9 @@ void dump_dfa_t::closure_tags(cclositer_t c)
        const tagver_t *vers = tagpool[c->tvers];
        const size_t ntag = tagpool.ntags;
        for (size_t t = 0; t < ntag; ++t) {
-               fprintf(stderr, " %s", tagname(dfa.tags[t]));
+               const Tag &tag = dfa.tags[t];
+
+               fprintf(stderr, " %s", tagname(tag));
 
                const tagver_t v = vers[t];
                if (v == TAGVER_BOTTOM) {
@@ -58,6 +60,10 @@ void dump_dfa_t::closure_tags(cclositer_t c)
                } else {
                        fprintf(stderr, "%d", abs(v));
                }
+
+               if (orbit(tag)) {
+                       fprintf(stderr, "[%d]", tagpool[c->order][t]);
+               }
        }
 }
 
index ff3264a5cf9c909de610093fff9626488a7f2924..37c171f84ccaf8aee811c5e376f181ae5972b63b 100644 (file)
@@ -10,6 +10,7 @@ kernel_t::kernel_t(size_t n)
        : size(n)
        , state(new nfa_state_t*[size])
        , tvers(new size_t[size])
+       , order(new size_t[size])
 {}
 
 kernel_t *kernel_t::copy(const kernel_t &k)
@@ -18,6 +19,7 @@ kernel_t *kernel_t::copy(const kernel_t &k)
        kernel_t *kcopy = new kernel_t(n);
        memcpy(kcopy->state, k.state, n * sizeof(void*));
        memcpy(kcopy->tvers, k.tvers, n * sizeof(size_t));
+       memcpy(kcopy->order, k.order, n * sizeof(size_t));
        return kcopy;
 }
 
@@ -25,6 +27,7 @@ kernel_t::~kernel_t()
 {
        delete[] state;
        delete[] tvers;
+       delete[] order;
 }
 
 struct kernel_eq_t
@@ -34,6 +37,7 @@ struct kernel_eq_t
                return x->size == y->size
                        && memcmp(x->state, y->state, x->size * sizeof(void*)) == 0
                        && memcmp(x->tvers, y->tvers, x->size * sizeof(size_t)) == 0;
+               // no need to compare orders: if versions coincide, so do orders
        }
 };
 
@@ -54,9 +58,10 @@ struct kernel_eq_t
 
 bool kernels_t::operator()(const kernel_t *k1, const kernel_t *k2)
 {
-       // check that kernel sizes and NFA states coincide
+       // check that kernel sizes, NFA states and orders coincide
        const bool compatible = k1->size == k2->size
-               && memcmp(k1->state, k2->state, k1->size * sizeof(void*)) == 0;
+               && memcmp(k1->state, k2->state, k1->size * sizeof(void*)) == 0
+               && memcmp(k1->order, k2->order, k1->size * sizeof(size_t)) == 0;
        if (!compatible) return false;
 
        // map tag versions of one kernel to that of another
@@ -92,10 +97,11 @@ bool kernels_t::operator()(const kernel_t *k1, const kernel_t *k2)
        return true;
 }
 
-kernels_t::kernels_t(Tagpool &tagp, tcpool_t &tcp)
+kernels_t::kernels_t(Tagpool &tagp, tcpool_t &tcp, const std::vector<Tag> &ts)
        : lookup()
        , tagpool(tagp)
        , tcpool(tcp)
+       , tags(ts)
 
        , maxsize(0) // usually ranges from one to some twenty
        , buffer(new kernel_t(maxsize))
@@ -201,11 +207,13 @@ kernels_t::result_t kernels_t::insert(const closure_t &clos, tagver_t maxver)
                const clos_t &c = clos[i];
                buffer->state[i] = c.state;
                buffer->tvers[i] = c.tvers;
+               buffer->order[i] = c.order;
        }
 
        // get kernel hash
        uint32_t hash = static_cast<uint32_t>(nkern); // seed
        hash = hash32(hash, buffer->state, nkern * sizeof(void*));
+       hash = hash32(hash, buffer->order, nkern * sizeof(size_t));
 
        // try to find identical kernel
        kernel_eq_t eq;
@@ -231,6 +239,8 @@ tcmd_t kernels_t::commands1(const closure_t &closure)
        // at most one new cursor and one new bottom version per tag
        // no mapping => only save commands, no copy commands
        for (size_t t = 0; t < tagpool.ntags; ++t) {
+               if (fixed(tags[t])) continue;
+
                for (c = c1; c != c2 && (v = tagpool[c->ttran][t]) <= TAGVER_ZERO; ++c);
                if (c != c2) save = tcpool.make_save(save, v, false);
 
@@ -276,6 +286,8 @@ tcmd_t kernels_t::commands2(const closure_t &closure)
 
                // at most one new cursor and one new bottom version per tag
                const size_t t = x2t[x];
+               if (fixed(tags[t])) continue;
+
                const tagver_t ax = abs(x), ay = abs(y);
                for (c = c1; c != c2 && tagpool[c->ttran][t] != y; ++c);
                if (c != c2) {
index 63339a22d037b8467cfd2e4dc8bab894475b003b..8ae86e97b2c8af3d74e3778497aec1eccb71ac79 100644 (file)
@@ -14,6 +14,7 @@ struct kernel_t
        size_t size;
        nfa_state_t **state;
        size_t *tvers; // tag versions
+       size_t *order; // see note [orbit order of closure items]
 
        explicit kernel_t(size_t n);
        ~kernel_t();
@@ -43,6 +44,7 @@ private:
 public:
        Tagpool &tagpool;
        tcpool_t &tcpool;
+       const std::vector<Tag> &tags;
 
 private:
        size_t maxsize;
@@ -57,7 +59,7 @@ private:
        uint32_t *indeg;
 
 public:
-       kernels_t(Tagpool &tagpool, tcpool_t &tcpool);
+       kernels_t(Tagpool &tagpool, tcpool_t &tcpool, const std::vector<Tag> &tags);
        ~kernels_t();
        void init(tagver_t v, size_t k);
        size_t size() const;
index 5c6d6a9365dc2e1e53aae8e1469c5319f222f5df..c8b35db8cee4341b8acf6a496ad701d742e8cafb 100644 (file)
@@ -26,6 +26,8 @@ Tagpool::Tagpool(size_t n)
        , buffer2(&buffer[n * 2])
        , buffer3(&buffer[n * 3])
        , buffer4(&buffer[n * 4])
+       , maxclos(0)
+       , orders(NULL)
 {}
 
 Tagpool::~Tagpool()
@@ -35,6 +37,7 @@ Tagpool::~Tagpool()
        for (size_t i = 0; i < n; ++i) {
                free(const_cast<tagver_t*>(lookup[i]));
        }
+       delete[] orders;
 }
 
 size_t Tagpool::insert_const(tagver_t ver)
index 09f0799755946f93243a0144644e9bb0004e5547..13c55c2eaf43d2a051d4daa334bc25237dd1045d 100644 (file)
@@ -24,6 +24,9 @@ public:
        tagver_t *buffer3;
        tagver_t *buffer4;
 
+       size_t maxclos;
+       tagver_t *orders;
+
        explicit Tagpool(size_t n);
        ~Tagpool();
        size_t insert_const(tagver_t ver);
index 3607797031267aec504603a634b9d56456d6a134..fcc0707529e4370b9a29479bdffe7cec68b4d0cb 100644 (file)
@@ -8,6 +8,8 @@ namespace re2c
 
 tagtree_t::tagtree_t(size_t n)
        : nodes()
+       , path1()
+       , path2()
        , ntag(n)
        , tags(new tagver_t[ntag])
 {
@@ -56,4 +58,28 @@ void tagtree_t::pop(size_t t)
        tags[t] = pred(tags[t]);
 }
 
+int32_t tagtree_t::compare_paths(tagver_t x, tagver_t y)
+{
+       path1.clear();
+       for (; x != -1; x = pred(x)) path1.push_back(elem(x));
+
+       path2.clear();
+       for (; y != -1; y = pred(y)) path2.push_back(elem(y));
+
+       std::vector<tagver_t>::const_reverse_iterator
+               i1 = path1.rbegin(), e1 = path1.rend(),
+               i2 = path2.rbegin(), e2 = path2.rend();
+
+       for (;;) {
+               if (i1 == e1 && i2 == e2) break;
+               if (i1 == e1) return -1;
+               if (i2 == e2) return 1;
+               if (*i1 > *i2) return -1;
+               if (*i1 < *i2) return 1;
+               ++i1; ++i2;
+       }
+
+       return 0;
+}
+
 } // namespace re2c
index 4a6eed3f3361f67d2df7336d072353f08ba642dd..a14af3d0515978196fc674d1315c63692d0e7818 100644 (file)
@@ -19,6 +19,10 @@ class tagtree_t
        };
        std::vector<node_t> nodes;
 
+       // reconstruct paths for comparison
+       std::vector<tagver_t> path1;
+       std::vector<tagver_t> path2;
+
        // set of leaves (one leaf per tag) corresponding to
        // current deep-first search path in the epsilon-closure
        size_t ntag;
@@ -33,6 +37,7 @@ public:
        const tagver_t *leaves() const;
        void push(size_t t, tagver_t v);
        void pop(size_t t);
+       int32_t compare_paths(tagver_t x, tagver_t y);
        FORBID_COPY(tagtree_t);
 };
 
index be46fe04779c48c12ccf2b50dd49ce7fe99bdfd7..69f44265e4710c0164d9263d4dc56b023af2f738 100644 (file)
@@ -48,7 +48,9 @@ void dump_nfa(const nfa_t &nfa)
                        case nfa_state_t::TAG: {
                                const Tag &tag = nfa.tags[n->tag.info];
                                fprintf(stderr, "  n%u -> n%u [label=\"/", i, index(nfa, n->tag.out));
-                               if (trailing(tag)) {
+                               if (capture(tag)) {
+                                       fprintf(stderr, "%u_", (uint32_t)tag.ncap);
+                               } else if (trailing(tag)) {
                                        fprintf(stderr, "%u", (uint32_t)n->rule);
                                } else {
                                        fprintf(stderr, "%s", tag.name->c_str());
index 8ed5b0dd8871170a18754a472ee619f9775a2dbe..fde066427a2df91dd6cad2984b605f6ec498c9d3 100644 (file)
@@ -68,14 +68,16 @@ static nfa_state_t *re_to_nfa(nfa_t &nfa, size_t nrule, const RE *re, nfa_state_
                        }
                        break;
                }
-               case RE::TAG:
-                       if (fixed(nfa.tags[re->tag.idx])) {
+               case RE::TAG: {
+                       const Tag &tag = nfa.tags[re->tag.idx];
+                       if (fixed(tag) && !capture(tag)) {
                                s = t;
                        } else {
                                s = &nfa.states[nfa.size++];
                                s->make_tag(nrule, t, re->tag.idx, re->tag.bottom);
                        }
                        break;
+               }
        }
        return s;
 }
index e5f5efd96342b2b085fd45ced957198494f220ca..a6f2b74146f8651c336f15880fcdc3ad500fde69 100644 (file)
@@ -3,9 +3,11 @@
 
 namespace re2c {
 
-static RE *ast_to_re(RESpec &spec, const RegExp *ast)
+static RE *ast_to_re(RESpec &spec, const RegExp *ast, size_t &ncap)
 {
        RE::alc_t &alc = spec.alc;
+       std::vector<Tag> &tags = spec.tags;
+
        switch (ast->type) {
                default: assert(false);
                case RegExp::NIL:
@@ -13,21 +15,38 @@ static RE *ast_to_re(RESpec &spec, const RegExp *ast)
                case RegExp::SYM:
                        return re_sym(alc, ast->sym);
                case RegExp::ALT: {
-                       RE *x = ast_to_re(spec, ast->alt.re1);
-                       RE *y = ast_to_re(spec, ast->alt.re2);
+                       RE *x = ast_to_re(spec, ast->alt.re1, ncap);
+                       RE *y = ast_to_re(spec, ast->alt.re2, ncap);
                        return re_alt(alc, x, y);
                }
                case RegExp::CAT: {
-                       RE *x = ast_to_re(spec, ast->cat.re1);
-                       RE *y = ast_to_re(spec, ast->cat.re2);
+                       RE *x = ast_to_re(spec, ast->cat.re1, ncap);
+                       RE *y = ast_to_re(spec, ast->cat.re2, ncap);
                        return re_cat(alc, x, y);
                }
                case RegExp::TAG: {
-                       const size_t ntag = spec.tags.size();
-                       Tag tag = {ast->tag, ntag, Tag::VARDIST};
-                       spec.tags.push_back(tag);
-                       return re_tag(alc, ntag, false);
+                       RE *t = re_tag(alc, tags.size(), false);
+                       tags.push_back(Tag(ast->tag));
+                       return t;
+               }
+               case RegExp::CAP: {
+                       const RegExp *x = ast->cap;
+                       if (x->type == RegExp::REF) x = x->ref.re;
+
+                       RE *t1 = re_tag(alc, tags.size(), false);
+                       tags.push_back(Tag(3 * ncap));
+
+                       RE *t2 = re_tag(alc, tags.size(), false);
+                       tags.push_back(Tag(3 * ncap + 1));
+
+                       ++ncap;
+                       return re_cat(alc, t1, re_cat(alc, ast_to_re(spec, x, ncap), t2));
                }
+               case RegExp::REF:
+                       error("implicit grouping is forbidden with '--posix-captures'"
+                               " option, please wrap '%s' in capturing parenthesis",
+                               ast->ref.name->c_str());
+                       exit(1);
                case RegExp::ITER: {
                        const uint32_t
                                n = ast->iter.min,
@@ -35,11 +54,32 @@ static RE *ast_to_re(RESpec &spec, const RegExp *ast)
                                m = std::max(n, ast->iter.max);
                        const RegExp *x = ast->iter.re;
 
+                       RE *t1 = NULL, *t2 = NULL, *t3 = NULL;
+                       if (x->type == RegExp::CAP) {
+                               x = x->cap;
+                               if (x->type == RegExp::REF) x = x->ref.re;
+
+                               t1 = re_tag(alc, tags.size(), false);
+                               tags.push_back(Tag(3 * ncap));
+
+                               t2 = re_tag(alc, tags.size(), false);
+                               tags.push_back(Tag(3 * ncap + 1));
+
+                               if (m > 1) {
+                                       t3 = re_tag(alc, tags.size(), false);
+                                       tags.push_back(Tag(3 * ncap + 2));
+                               }
+
+                               ++ncap;
+                       }
+
                        RE *y = NULL;
                        if (m > 0) {
-                               y = ast_to_re(spec, x);
+                               y = ast_to_re(spec, x, ncap);
+                               y = re_cat(alc, t3, y);
                                y = re_iter(alc, y, n1, m);
                        }
+                       y = re_cat(alc, t1, re_cat(alc, y, t2));
                        if (n == 0) {
                                y = re_alt(alc, y, re_nil(alc));
                        }
@@ -63,12 +103,14 @@ static void assert_tags_used_once(const Rule &rule, const std::vector<Tag> &tags
        }
 }
 
-static void init_rule(Rule &rule, const Code *code, const std::vector<Tag> &tags, size_t ltag)
+static void init_rule(Rule &rule, const Code *code, const std::vector<Tag> &tags,
+       size_t ltag, size_t ncap)
 {
        rule.code = code;
        rule.ltag = ltag;
        rule.htag = tags.size();
-       for (rule.ttag = ltag; rule.ttag < rule.htag && tags[rule.ttag].name; ++rule.ttag);
+       for (rule.ttag = ltag; rule.ttag < rule.htag && !trailing(tags[rule.ttag]); ++rule.ttag);
+       rule.ncap = ncap;
        assert_tags_used_once(rule, tags);
 }
 
@@ -79,10 +121,10 @@ RESpec::RESpec(const std::vector<RegExpRule> &ast)
        , tags(*new std::vector<Tag>)
        , rules(*new std::valarray<Rule>(ast.size()))
 {
-       for (size_t i = 0, t; i < ast.size(); ++i) {
-               t = tags.size();
-               res.push_back(ast_to_re(*this, ast[i].re));
-               init_rule(rules[i], ast[i].code, tags, t);
+       for (size_t i = 0; i < ast.size(); ++i) {
+               size_t ltag = tags.size(), ncap = 0;
+               res.push_back(ast_to_re(*this, ast[i].re, ncap));
+               init_rule(rules[i], ast[i].code, tags, ltag, ncap);
        }
 }
 
index 41a19268ba1f090d277a7cb0f4ac417571ce935f..7cd336b28ef50f93a8fd24b55bffbc8559771083 100644 (file)
@@ -14,6 +14,16 @@ namespace re2c {
  *
  * Furthermore, fixed tags are fobidden with generic API because it cannot
  * express fixed offsets.
+ *
+ * One special case is pre-orbit tags: tags that correspond to the opening
+ * of capturing group under iteration. We don't need to know the value of
+ * such tags: we only need the last iteration which is captured by the
+ * orbit tag. Pre-orbit tags are used for disambiguation only (they have
+ * higher priority than orbit and closing tags). So we make pre-orbit tags
+ * fixed on orbit tags with zero offset: this has no affect on disambiguation,
+ * but this way pre-orbit tags will always have the same value as their orbit
+ * tags (even if uninitialized, because of the zero offset) and we'll reduce
+ * the amount of tag variables.
  */
 
 static void find_fixed_tags(RE *re, std::vector<Tag> &tags,
@@ -40,15 +50,17 @@ static void find_fixed_tags(RE *re, std::vector<Tag> &tags,
                        dist = Tag::VARDIST;
                        break;
                case RE::TAG: {
+                       // see note [fixed and variable tags]
                        Tag &tag = tags[re->tag.idx];
                        if (toplevel && dist != Tag::VARDIST) {
                                tag.base = base;
                                tag.dist = dist;
-                       } else {
-                               if (toplevel) {
-                                       base = re->tag.idx;
-                                       dist = 0;
-                               }
+                       } else if (preorbit(tags, re->tag.idx)) {
+                               tag.base = re->tag.idx + 2;
+                               tag.dist = 0;
+                       } else if (toplevel) {
+                               base = re->tag.idx;
+                               dist = 0;
                        }
                        if (trailing(tag)) dist = 0;
                        break;
index 82b5b8437e67c44b2fcc39e40f328a4b5324d750..7f306c22d6add7ec331895f2737ab36079ce6115 100644 (file)
@@ -131,4 +131,21 @@ const RegExp *Scanner::mkDefault() const
                opts->encoding.nCodeUnits()));
 }
 
+bool need_wrap(const RegExp *re)
+{
+       switch (re->type) {
+               case RegExp::ITER:
+               case RegExp::NIL:
+               case RegExp::SYM:
+               case RegExp::TAG:
+               case RegExp::CAP:
+                       return false;
+               case RegExp::ALT:
+               case RegExp::CAT:
+               case RegExp::REF:
+               default:
+                       return true;
+       }
+}
+
 } // namespace re2c
index 51ce46ad8c69455bf0ad688577335aac9e3f2b11..b1271814d1996a91fc0c999410c74fc914170b3a 100644 (file)
@@ -19,7 +19,7 @@ struct RegExp
        static free_list<RegExp*> flist;
        static const uint32_t MANY;
 
-       enum type_t {NIL, SYM, ALT, CAT, ITER, TAG} type;
+       enum type_t {NIL, SYM, ALT, CAT, ITER, TAG, CAP, REF} type;
        union
        {
                const Range *sym;
@@ -40,6 +40,12 @@ struct RegExp
                        uint32_t max;
                } iter;
                const std::string *tag;
+               const RegExp *cap;
+               struct
+               {
+                       const RegExp *re;
+                       const std::string *name;
+               } ref;
        };
 
        static const RegExp *make_nil()
@@ -80,11 +86,26 @@ struct RegExp
                re->tag = t;
                return re;
        }
+       static const RegExp *make_cap(const RegExp *r)
+       {
+               RegExp *re = new RegExp(CAP);
+               re->cap = r;
+               return re;
+       }
+       static const RegExp *make_ref(const RegExp *r, const std::string &n)
+       {
+               RegExp *re = new RegExp(REF);
+               re->ref.re = r;
+               re->ref.name = new std::string(n);
+               return re;
+       }
        inline ~RegExp()
        {
                flist.erase(this);
                if (type == TAG) {
                        delete tag;
+               } else if (type == REF) {
+                       delete ref.name;
                }
        }
 
@@ -109,6 +130,7 @@ struct RegExpRule
 const RegExp *mkAlt(const RegExp *re1, const RegExp *re2);
 const RegExp *doAlt(const RegExp *re1, const RegExp *re2);
 const RegExp *doCat(const RegExp *re1, const RegExp *re2);
+bool need_wrap(const RegExp *re);
 
 } // end namespace re2c
 
index 8098583245da3aac637e765d2960cdb0b99109d2..e483ce161c56e2f9ca07937f5a23082829d6aae6 100644 (file)
@@ -58,8 +58,10 @@ struct Rule
        size_t htag; // next to last
        size_t ttag; // trailing context
 
+       size_t ncap; // number of POSIX captures
+
        Rule(): code(NULL), shadow(),
-               ltag(0), htag(0), ttag(0) {}
+               ltag(0), htag(0), ttag(0), ncap(0) {}
        FORBID_COPY(Rule);
 };
 
index 7660837778ec510fc2a6d05721ee912d4b05ed45..e72420a44e36d1fe1c91c5c4453f0319cd77172e 100644 (file)
@@ -3,6 +3,7 @@
 
 #include <limits>
 #include <string>
+#include <vector>
 
 #include "src/util/c99_stdint.h"
 
@@ -21,8 +22,22 @@ struct Tag
        static const size_t VARDIST;
 
        const std::string *name;
+       size_t ncap;
        size_t base;
        size_t dist;
+
+       explicit Tag(const std::string *n)
+               : name(n)
+               , ncap(Tag::RIGHTMOST)
+               , base(Tag::RIGHTMOST)
+               , dist(Tag::VARDIST)
+       {}
+       explicit Tag(size_t c)
+               : name(NULL)
+               , ncap(c)
+               , base(Tag::RIGHTMOST)
+               , dist(Tag::VARDIST)
+       {}
 };
 
 inline bool fixed(const Tag &tag)
@@ -30,9 +45,27 @@ inline bool fixed(const Tag &tag)
        return tag.dist != Tag::VARDIST;
 }
 
+inline bool capture(const Tag &tag)
+{
+       return tag.ncap != Tag::RIGHTMOST;
+}
+
+inline bool orbit(const Tag &tag)
+{
+       return capture(tag) && tag.ncap % 3 == 2;
+}
+
 inline bool trailing(const Tag &tag)
 {
-       return tag.name == NULL;
+       return !capture(tag) && tag.name == NULL;
+}
+
+inline bool preorbit(const std::vector<Tag> &tags, size_t idx)
+{
+       const size_t ncap = tags[idx].ncap;
+       return ncap % 3 == 0
+               && idx + 2 < tags.size()
+               && tags[idx + 2].ncap == ncap + 2;
 }
 
 } // namespace re2c
index 3164ff461faa86dc344b8e1f1b1f71f76c967660..5a5cf27914eb200ef9929ccdfd83c99af02103d5 100644 (file)
@@ -52,6 +52,7 @@ void Scanner::lex_conf ()
        "flags:" ("r" | "reusable")          { opts.set_rFlag(lex_conf_bool());              return; }
        "flags:" ("s" | "nested-ifs")        { opts.set_sFlag(lex_conf_bool());              return; }
        "flags:" ("T" | "tags")              { opts.set_tags(lex_conf_bool());               return; }
+       "flags:" ("posix-captures")          { opts.set_posix_captures(lex_conf_bool());     return; }
        "flags:no-generation-date"           { opts.set_bNoGenerationDate(lex_conf_bool());  return; }
        "flags:no-version"                   { opts.set_version(!lex_conf_bool());           return; }
        "flags:case-insensitive"             { opts.set_bCaseInsensitive(lex_conf_bool());   return; }
index 87d09c3cd91a445a025e026479665c489a8027f3..82f785c72e7e1ace9fefd3d228543ebe534addc1 100644 (file)
@@ -190,7 +190,7 @@ static spec_t &find(specs_t &specs, const std::string &name)
 %type <op>      close closes
 %type <extop>   TOKEN_CLOSESIZE
 %type <code>    TOKEN_CODE ccode
-%type <regexp>  TOKEN_REGEXP trailexpr rule expr diff term factor primary
+%type <regexp>  TOKEN_REGEXP trailexpr capexpr rule expr diff term factor primary
 %type <str>     TOKEN_ID TOKEN_FID name
 %type <clist>   conds clist
 
@@ -295,11 +295,19 @@ conds
        };
 
 trailexpr
-       : expr
-       | expr '/' expr {
+       : capexpr
+       | capexpr '/' expr {
                $$ = RegExp::make_cat($1, RegExp::make_cat(RegExp::make_tag(NULL), $3));
        };
 
+capexpr
+       : expr {
+               if (context.input.opts->posix_captures) {
+                       $1 = RegExp::make_cap($1);
+               }
+               $$ = $1;
+       };
+
 expr:
                diff
                {
@@ -356,25 +364,24 @@ close
        | '?' { $$ = '?'; }
        ;
 
-primary:
-               TOKEN_ID
-               {
-                       symtab_t::iterator i = context.symtab.find(*$1);
-                       delete $1;
-                       if (i == context.symtab.end()) {
-                               context.input.fatal("can't find symbol");
-                       }
-                       $$ = i->second;
+primary
+       : TOKEN_REGEXP
+       | TOKEN_ID {
+               symtab_t::iterator i = context.symtab.find(*$1);
+               if (i == context.symtab.end()) {
+                       context.input.fatal("can't find symbol");
                }
-       |       TOKEN_REGEXP
-               {
-                       $$ = $1;
+               $$ = i->second;
+               if (context.input.opts->posix_captures && need_wrap($$)) {
+                       $$ = RegExp::make_ref($$, *$1);
                }
-       |       '(' expr ')'
-               {
-                       $$ = $2;
+               delete $1;
+       } | '(' expr ')' {
+               $$ = $2;
+               if (context.input.opts->posix_captures) {
+                       $$ = RegExp::make_cap($$);
                }
-;
+       };
 
 %%