]> granicus.if.org Git - re2c/commitdiff
Added option '--eager-skip'.
authorUlya Trofimovich <skvadrik@gmail.com>
Tue, 17 Jan 2017 12:36:43 +0000 (12:36 +0000)
committerUlya Trofimovich <skvadrik@gmail.com>
Tue, 17 Jan 2017 12:36:43 +0000 (12:36 +0000)
This option allows to control program points in which cursor is
advanced to the next input character. Normally it happens after moving
to the next state (lazyly). With '--eager-skip' cursor is advanced
before moving to the next state (eagerly).

Eager mode presents some difficulties compared to the lazy mode:
transitions may disagree on whether advance cursor or not. Some of
them may go to accepting states and should not advance cursor, while
others go normal states and should advance cursor. In such cases
advancement must happen on a per-transition basis. If all transitions
agree on the matter, advancement can be hoisted out and performed on
a per-state basis, just as it happens in lazy mode.

22 files changed:
re2c/bootstrap/src/conf/parse_opts.cc
re2c/bootstrap/src/parse/lex_conf.cc
re2c/src/codegen/emit.h
re2c/src/codegen/emit_action.cc
re2c/src/codegen/go.h
re2c/src/codegen/go_construct.cc
re2c/src/codegen/go_emit.cc
re2c/src/conf/opt.h
re2c/src/conf/parse_opts.re
re2c/src/parse/lex_conf.re
re2c/test/bug61.i--empty-class(match-none)--eager-skip.c [new file with mode: 0644]
re2c/test/bug61.i--empty-class(match-none)--eager-skip.re [new file with mode: 0644]
re2c/test/input11.b--eager-skip.c [new file with mode: 0644]
re2c/test/input11.b--eager-skip.re [new file with mode: 0644]
re2c/test/reuse_conds_setup_1.cgir--eager-skip.c [new file with mode: 0644]
re2c/test/reuse_conds_setup_1.cgir--eager-skip.re [new file with mode: 0644]
re2c/test/tags/bug121_var_multiple.i--tags--eager-skip--input(custom).c [new file with mode: 0644]
re2c/test/tags/bug121_var_multiple.i--tags--eager-skip--input(custom).re [new file with mode: 0644]
re2c/test/tags/bug121_var_multiple.i--tags--eager-skip.c [new file with mode: 0644]
re2c/test/tags/bug121_var_multiple.i--tags--eager-skip.re [new file with mode: 0644]
re2c/test/yyaccept_missing.bci--eager-skip.c [new file with mode: 0644]
re2c/test/yyaccept_missing.bci--eager-skip.re [new file with mode: 0644]

index 7c12075f8176e3b2009b74c56c10fc6ec92b56b0..13101a805d6811c39c1850f07782dd3c9a959e10 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.16 on Fri Dec 30 11:03:32 2016 */
+/* Generated by re2c 0.16 on Mon Jan 16 13:43:26 2017 */
 #line 1 "../src/conf/parse_opts.re"
 #include "src/codegen/input_api.h"
 #include "src/conf/msg.h"
@@ -1118,833 +1118,835 @@ yy262:
        }
 yy263:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych <= 'l') {
-               if (yych == 'c') goto yy282;
-               goto yy259;
+       if (yych <= 'c') {
+               if (yych == 'a') goto yy282;
+               if (yych <= 'b') goto yy259;
+               goto yy283;
        } else {
-               if (yych <= 'm') goto yy283;
-               if (yych <= 'n') goto yy284;
+               if (yych <= 'l') goto yy259;
+               if (yych <= 'm') goto yy284;
+               if (yych <= 'n') goto yy285;
                goto yy259;
        }
 yy264:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'l') goto yy285;
+       if (yych == 'l') goto yy286;
        goto yy259;
 yy265:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'e') goto yy286;
+       if (yych == 'e') goto yy287;
        goto yy259;
 yy266:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'n') goto yy287;
+       if (yych == 'n') goto yy288;
        goto yy259;
 yy267:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'e') goto yy288;
-       if (yych == 'o') goto yy289;
+       if (yych == 'e') goto yy289;
+       if (yych == 'o') goto yy290;
        goto yy259;
 yy268:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'u') goto yy290;
+       if (yych == 'u') goto yy291;
        goto yy259;
 yy269:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'e') goto yy291;
+       if (yych == 'e') goto yy292;
        goto yy259;
 yy270:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
        if (yych <= 'j') {
-               if (yych == 'i') goto yy292;
+               if (yych == 'i') goto yy293;
                goto yy259;
        } else {
-               if (yych <= 'k') goto yy293;
-               if (yych == 't') goto yy294;
+               if (yych <= 'k') goto yy294;
+               if (yych == 't') goto yy295;
                goto yy259;
        }
 yy271:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'a') goto yy295;
-       if (yych == 'y') goto yy296;
+       if (yych == 'a') goto yy296;
+       if (yych == 'y') goto yy297;
        goto yy259;
 yy272:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'n') goto yy297;
-       if (yych == 't') goto yy298;
+       if (yych == 'n') goto yy298;
+       if (yych == 't') goto yy299;
        goto yy259;
 yy273:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'e') goto yy299;
+       if (yych == 'e') goto yy300;
        goto yy259;
 yy274:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'i') goto yy300;
+       if (yych == 'i') goto yy301;
        goto yy259;
 yy275:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy301;
+       if (yych == 't') goto yy302;
 yy276:
        YYCURSOR = YYMARKER;
        goto yy259;
 yy277:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy302;
+       if (yych == 's') goto yy303;
        goto yy276;
 yy278:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'm') goto yy303;
+       if (yych == 'm') goto yy304;
        goto yy276;
 yy279:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'b') goto yy304;
+       if (yych == 'b') goto yy305;
        goto yy276;
 yy280:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy305;
+       if (yych == 'a') goto yy306;
        goto yy276;
 yy281:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'm') goto yy306;
+       if (yych == 'm') goto yy307;
        goto yy276;
 yy282:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'b') goto yy307;
+       if (yych == 'g') goto yy308;
        goto yy276;
 yy283:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy308;
-       if (yych == 'p') goto yy309;
+       if (yych == 'b') goto yy309;
        goto yy276;
 yy284:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'c') goto yy310;
+       if (yych == 'i') goto yy310;
+       if (yych == 'p') goto yy311;
        goto yy276;
 yy285:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy311;
+       if (yych == 'c') goto yy312;
        goto yy276;
 yy286:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'l') goto yy312;
+       if (yych == 'e') goto yy313;
        goto yy276;
 yy287:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'p') goto yy313;
+       if (yych == 'l') goto yy314;
        goto yy276;
 yy288:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy314;
+       if (yych == 'p') goto yy315;
        goto yy276;
 yy289:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy315;
-       if (yych == 'n') goto yy316;
+       if (yych == 's') goto yy316;
        goto yy276;
 yy290:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy317;
+       if (yych == '-') goto yy317;
+       if (yych == 'n') goto yy318;
        goto yy276;
 yy291:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'u') goto yy318;
+       if (yych == 't') goto yy319;
        goto yy276;
 yy292:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy319;
+       if (yych == 'u') goto yy320;
        goto yy276;
 yy293:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy320;
+       if (yych == 'n') goto yy321;
        goto yy276;
 yy294:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy321;
-       if (yych == 'o') goto yy322;
+       if (yych == 'e') goto yy322;
        goto yy276;
 yy295:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'g') goto yy323;
+       if (yych == 'a') goto yy323;
+       if (yych == 'o') goto yy324;
        goto yy276;
 yy296:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'p') goto yy324;
+       if (yych == 'g') goto yy325;
        goto yy276;
 yy297:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy325;
+       if (yych == 'p') goto yy326;
        goto yy276;
 yy298:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'f') goto yy326;
+       if (yych == 'i') goto yy327;
        goto yy276;
 yy299:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy327;
+       if (yych == 'f') goto yy328;
        goto yy276;
 yy300:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'd') goto yy328;
+       if (yych == 'r') goto yy329;
        goto yy276;
 yy301:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy329;
+       if (yych == 'd') goto yy330;
        goto yy276;
 yy302:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy330;
+       if (yych == '-') goto yy331;
        goto yy276;
 yy303:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'p') goto yy331;
+       if (yych == 'e') goto yy332;
        goto yy276;
 yy304:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'u') goto yy332;
+       if (yych == 'p') goto yy333;
        goto yy276;
 yy305:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy333;
+       if (yych == 'u') goto yy334;
        goto yy276;
 yy306:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'p') goto yy334;
+       if (yych == '-') goto yy335;
        goto yy276;
 yy307:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy335;
+       if (yych == 'p') goto yy336;
        goto yy276;
 yy308:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy337;
+       if (yych == 'e') goto yy337;
        goto yy276;
 yy309:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy338;
+       if (yych <= 0x00) goto yy338;
        goto yy276;
 yy310:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy339;
+       if (yych == 't') goto yy340;
        goto yy276;
 yy311:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'x') goto yy340;
+       if (yych == 't') goto yy341;
        goto yy276;
 yy312:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'p') goto yy341;
+       if (yych == 'o') goto yy342;
        goto yy276;
 yy313:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'u') goto yy342;
+       if (yych == 'x') goto yy343;
        goto yy276;
 yy314:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy343;
+       if (yych == 'p') goto yy344;
        goto yy276;
 yy315:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 'f') {
-               if (yych == 'd') goto yy344;
-               goto yy276;
-       } else {
-               if (yych <= 'g') goto yy345;
-               if (yych == 'v') goto yy346;
-               goto yy276;
-       }
+       if (yych == 'u') goto yy345;
+       goto yy276;
 yy316:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy347;
+       if (yych == 't') goto yy346;
        goto yy276;
 yy317:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'p') goto yy348;
-       goto yy276;
+       if (yych <= 'f') {
+               if (yych == 'd') goto yy347;
+               goto yy276;
+       } else {
+               if (yych <= 'g') goto yy348;
+               if (yych == 'v') goto yy349;
+               goto yy276;
+       }
 yy318:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy349;
+       if (yych == '-') goto yy350;
        goto yy276;
 yy319:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'g') goto yy350;
+       if (yych == 'p') goto yy351;
        goto yy276;
 yy320:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'l') goto yy351;
+       if (yych == 's') goto yy352;
        goto yy276;
 yy321:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy352;
+       if (yych == 'g') goto yy353;
        goto yy276;
 yy322:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy353;
+       if (yych == 'l') goto yy354;
        goto yy276;
 yy323:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy354;
+       if (yych == 'r') goto yy355;
        goto yy276;
 yy324:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy355;
+       if (yych == 'r') goto yy356;
        goto yy276;
 yy325:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'c') goto yy356;
+       if (yych == 's') goto yy357;
        goto yy276;
 yy326:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy357;
+       if (yych == 'e') goto yy358;
        goto yy276;
 yy327:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy358;
-       if (yych == 's') goto yy359;
+       if (yych == 'c') goto yy359;
        goto yy276;
 yy328:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy360;
+       if (yych == '-') goto yy360;
        goto yy276;
 yy329:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'v') goto yy361;
+       if (yych == 'n') goto yy361;
+       if (yych == 's') goto yy362;
        goto yy276;
 yy330:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy362;
+       if (yych == 'e') goto yy363;
        goto yy276;
 yy331:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'u') goto yy363;
+       if (yych == 'v') goto yy364;
        goto yy276;
 yy332:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'g') goto yy364;
+       if (yych == '-') goto yy365;
        goto yy276;
 yy333:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'm') goto yy365;
+       if (yych == 'u') goto yy366;
        goto yy276;
 yy334:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy366;
+       if (yych == 'g') goto yy367;
        goto yy276;
 yy335:
-       ++YYCURSOR;
-#line 151 "../src/conf/parse_opts.re"
-       { if (!opts.set_encoding (Enc::EBCDIC)) { error_encoding (); return EXIT_FAIL; } goto opt; }
-#line 1435 "src/conf/parse_opts.cc"
-yy337:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy367;
+       if (yych == 'm') goto yy368;
        goto yy276;
-yy338:
+yy336:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'y') goto yy368;
+       if (yych == '-') goto yy369;
        goto yy276;
-yy339:
+yy337:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'd') goto yy369;
+       if (yych == 'r') goto yy370;
        goto yy276;
+yy338:
+       ++YYCURSOR;
+#line 152 "../src/conf/parse_opts.re"
+       { if (!opts.set_encoding (Enc::EBCDIC)) { error_encoding (); return EXIT_FAIL; } goto opt; }
+#line 1449 "src/conf/parse_opts.cc"
 yy340:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy370;
+       if (yych == '-') goto yy371;
        goto yy276;
 yy341:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy371;
+       if (yych == 'y') goto yy372;
        goto yy276;
 yy342:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy373;
+       if (yych == 'd') goto yy373;
        goto yy276;
 yy343:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy374;
+       if (yych == '-') goto yy374;
        goto yy276;
 yy344:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy375;
+       if (yych <= 0x00) goto yy375;
        goto yy276;
 yy345:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy376;
+       if (yych == 't') goto yy377;
        goto yy276;
 yy346:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy377;
+       if (yych == 'e') goto yy378;
        goto yy276;
 yy347:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'b') goto yy378;
+       if (yych == 'e') goto yy379;
        goto yy276;
 yy348:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'u') goto yy379;
+       if (yych == 'e') goto yy380;
        goto yy276;
 yy349:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy380;
+       if (yych == 'e') goto yy381;
        goto yy276;
 yy350:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'l') goto yy381;
+       if (yych == 'b') goto yy382;
        goto yy276;
 yy351:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy382;
+       if (yych == 'u') goto yy383;
        goto yy276;
 yy352:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy383;
+       if (yych == 'a') goto yy384;
        goto yy276;
 yy353:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy384;
+       if (yych == 'l') goto yy385;
        goto yy276;
 yy354:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy385;
+       if (yych == 'e') goto yy386;
        goto yy276;
 yy355:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy387;
+       if (yych == 't') goto yy387;
        goto yy276;
 yy356:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy388;
+       if (yych == 'a') goto yy388;
        goto yy276;
 yy357:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '1') goto yy389;
-       if (yych == '8') goto yy390;
+       if (yych <= 0x00) goto yy389;
        goto yy276;
 yy358:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'u') goto yy391;
+       if (yych == '-') goto yy391;
        goto yy276;
 yy359:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy392;
+       if (yych == 'o') goto yy392;
        goto yy276;
 yy360:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy393;
+       if (yych == '1') goto yy393;
+       if (yych == '8') goto yy394;
        goto yy276;
 yy361:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy394;
+       if (yych == 'u') goto yy395;
        goto yy276;
 yy362:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy395;
+       if (yych == 'i') goto yy396;
        goto yy276;
 yy363:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy396;
+       if (yych == '-') goto yy397;
        goto yy276;
 yy364:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy397;
+       if (yych == 'e') goto yy398;
        goto yy276;
 yy365:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy398;
+       if (yych == 'i') goto yy399;
        goto yy276;
 yy366:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy399;
-       if (yych == 'd') goto yy400;
+       if (yych == 't') goto yy400;
        goto yy276;
 yy367:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'd') goto yy401;
+       if (yych == '-') goto yy401;
        goto yy276;
 yy368:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy402;
+       if (yych == 'i') goto yy402;
        goto yy276;
 yy369:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy403;
+       if (yych == 'a') goto yy403;
+       if (yych == 'd') goto yy404;
        goto yy276;
 yy370:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy404;
+       if (yych == '-') goto yy405;
        goto yy276;
 yy371:
-       ++YYCURSOR;
-#line 131 "../src/conf/parse_opts.re"
-       { usage ();   return EXIT_OK; }
-#line 1578 "src/conf/parse_opts.cc"
-yy373:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy405;
+       if (yych == 'd') goto yy406;
        goto yy276;
-yy374:
+yy372:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'd') goto yy407;
+       if (yych == '-') goto yy407;
        goto yy276;
-yy375:
+yy373:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'b') goto yy408;
+       if (yych == 'i') goto yy408;
        goto yy276;
-yy376:
+yy374:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy409;
+       if (yych == 's') goto yy409;
        goto yy276;
+yy375:
+       ++YYCURSOR;
+#line 131 "../src/conf/parse_opts.re"
+       { usage ();   return EXIT_OK; }
+#line 1596 "src/conf/parse_opts.cc"
 yy377:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy410;
+       if (yych <= 0x00) goto yy410;
        goto yy276;
 yy378:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy411;
+       if (yych == 'd') goto yy412;
        goto yy276;
 yy379:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy412;
+       if (yych == 'b') goto yy413;
        goto yy276;
 yy380:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'b') goto yy413;
+       if (yych == 'n') goto yy414;
        goto yy276;
 yy381:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy414;
+       if (yych == 'r') goto yy415;
        goto yy276;
 yy382:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy415;
+       if (yych == 'i') goto yy416;
        goto yy276;
 yy383:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy416;
+       if (yych == 't') goto yy417;
        goto yy276;
 yy384:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'b') goto yy417;
+       if (yych == 'b') goto yy418;
        goto yy276;
 yy385:
-       ++YYCURSOR;
-#line 149 "../src/conf/parse_opts.re"
-       { opts.set_tags (true);              goto opt; }
-#line 1631 "src/conf/parse_opts.cc"
-yy387:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'h') goto yy418;
+       if (yych == 'e') goto yy419;
        goto yy276;
-yy388:
+yy386:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'd') goto yy419;
+       if (yych == 't') goto yy420;
        goto yy276;
-yy389:
+yy387:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '6') goto yy420;
+       if (yych == '-') goto yy421;
        goto yy276;
-yy390:
+yy388:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy421;
+       if (yych == 'b') goto yy422;
        goto yy276;
+yy389:
+       ++YYCURSOR;
+#line 149 "../src/conf/parse_opts.re"
+       { opts.set_tags (true);              goto opt; }
+#line 1649 "src/conf/parse_opts.cc"
 yy391:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'm') goto yy423;
+       if (yych == 'h') goto yy423;
        goto yy276;
 yy392:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy424;
+       if (yych == 'd') goto yy424;
        goto yy276;
 yy393:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'c') goto yy425;
+       if (yych == '6') goto yy425;
        goto yy276;
 yy394:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'c') goto yy426;
+       if (yych <= 0x00) goto yy426;
        goto yy276;
 yy395:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy427;
+       if (yych == 'm') goto yy428;
        goto yy276;
 yy396:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy428;
+       if (yych == 'o') goto yy429;
        goto yy276;
 yy397:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy429;
+       if (yych == 'c') goto yy430;
        goto yy276;
 yy398:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy430;
+       if (yych == 'c') goto yy431;
        goto yy276;
 yy399:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'd') goto yy431;
+       if (yych == 'n') goto yy432;
        goto yy276;
 yy400:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'f') goto yy432;
+       if (yych == 'e') goto yy433;
        goto yy276;
 yy401:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy433;
+       if (yych == 'o') goto yy434;
        goto yy276;
 yy402:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'c') goto yy434;
+       if (yych == 'n') goto yy435;
        goto yy276;
 yy403:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy435;
+       if (yych == 'd') goto yy436;
        goto yy276;
 yy404:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'y') goto yy436;
+       if (yych == 'f') goto yy437;
        goto yy276;
 yy405:
-       ++YYCURSOR;
-#line 159 "../src/conf/parse_opts.re"
-       { goto opt_input; }
-#line 1708 "src/conf/parse_opts.cc"
-yy407:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy437;
+       if (yych == 's') goto yy438;
        goto yy276;
-yy408:
+yy406:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'u') goto yy438;
+       if (yych == 'o') goto yy439;
        goto yy276;
-yy409:
+yy407:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy439;
+       if (yych == 'c') goto yy440;
        goto yy276;
-yy410:
+yy408:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy440;
+       if (yych == 'n') goto yy441;
        goto yy276;
-yy411:
+yy409:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'j') goto yy441;
+       if (yych == 'y') goto yy442;
        goto yy276;
+yy410:
+       ++YYCURSOR;
+#line 160 "../src/conf/parse_opts.re"
+       { goto opt_input; }
+#line 1730 "src/conf/parse_opts.cc"
 yy412:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy442;
+       if (yych == '-') goto yy443;
        goto yy276;
 yy413:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'l') goto yy444;
+       if (yych == 'u') goto yy444;
        goto yy276;
 yy414:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy445;
+       if (yych == 'e') goto yy445;
        goto yy276;
 yy415:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy446;
+       if (yych == 's') goto yy446;
        goto yy276;
 yy416:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'c') goto yy447;
+       if (yych == 'j') goto yy447;
        goto yy276;
 yy417:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'l') goto yy448;
+       if (yych <= 0x00) goto yy448;
        goto yy276;
 yy418:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy449;
+       if (yych == 'l') goto yy450;
        goto yy276;
 yy419:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy450;
+       if (yych == '-') goto yy451;
        goto yy276;
 yy420:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy451;
+       if (yych == 'o') goto yy452;
        goto yy276;
 yy421:
-       ++YYCURSOR;
-#line 155 "../src/conf/parse_opts.re"
-       { if (!opts.set_encoding (Enc::UTF8))   { error_encoding (); return EXIT_FAIL; } goto opt; }
-#line 1769 "src/conf/parse_opts.cc"
-yy423:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy453;
+       if (yych == 'c') goto yy453;
        goto yy276;
-yy424:
+yy422:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy455;
+       if (yych == 'l') goto yy454;
        goto yy276;
-yy425:
+yy423:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'h') goto yy456;
+       if (yych == 'e') goto yy455;
        goto yy276;
-yy426:
+yy424:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy457;
+       if (yych == 'e') goto yy456;
        goto yy276;
-yy427:
+yy425:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy458;
-       if (yych == 'v') goto yy459;
+       if (yych <= 0x00) goto yy457;
        goto yy276;
+yy426:
+       ++YYCURSOR;
+#line 156 "../src/conf/parse_opts.re"
+       { if (!opts.set_encoding (Enc::UTF8))   { error_encoding (); return EXIT_FAIL; } goto opt; }
+#line 1791 "src/conf/parse_opts.cc"
 yy428:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'd') goto yy460;
+       if (yych <= 0x00) goto yy459;
        goto yy276;
 yy429:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'u') goto yy461;
+       if (yych == 'n') goto yy461;
        goto yy276;
 yy430:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy462;
+       if (yych == 'h') goto yy462;
        goto yy276;
 yy431:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'f') goto yy463;
+       if (yych == 't') goto yy463;
        goto yy276;
 yy432:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy464;
+       if (yych == 's') goto yy464;
+       if (yych == 'v') goto yy465;
        goto yy276;
 yy433:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy465;
+       if (yych == 'd') goto yy466;
        goto yy276;
 yy434:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'l') goto yy466;
+       if (yych == 'u') goto yy467;
        goto yy276;
 yy435:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'g') goto yy467;
+       if (yych == 'i') goto yy468;
        goto yy276;
 yy436:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy468;
+       if (yych == 'f') goto yy469;
        goto yy276;
 yy437:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy469;
+       if (yych == 'a') goto yy470;
        goto yy276;
 yy438:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'g') goto yy470;
+       if (yych == 'k') goto yy471;
        goto yy276;
 yy439:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy471;
+       if (yych == 't') goto yy472;
        goto yy276;
 yy440:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy472;
+       if (yych == 'l') goto yy473;
        goto yy276;
 yy441:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy473;
+       if (yych == 'g') goto yy474;
        goto yy276;
 yy442:
-       ++YYCURSOR;
-#line 156 "../src/conf/parse_opts.re"
-       { if (!next (YYCURSOR, argv)) { error_arg ("-o, --output"); return EXIT_FAIL; } goto opt_output; }
-#line 1851 "src/conf/parse_opts.cc"
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'n') goto yy475;
+       goto yy276;
+yy443:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'i') goto yy476;
+       goto yy276;
 yy444:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy474;
+       if (yych == 'g') goto yy477;
        goto yy276;
 yy445:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'p') goto yy475;
+       if (yych == 'r') goto yy478;
        goto yy276;
 yy446:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy476;
+       if (yych == 'i') goto yy479;
        goto yy276;
 yy447:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy477;
+       if (yych == 'e') goto yy480;
        goto yy276;
 yy448:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy478;
-       goto yy276;
-yy449:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy479;
-       goto yy276;
+       ++YYCURSOR;
+#line 157 "../src/conf/parse_opts.re"
+       { if (!next (YYCURSOR, argv)) { error_arg ("-o, --output"); return EXIT_FAIL; } goto opt_output; }
+#line 1877 "src/conf/parse_opts.cc"
 yy450:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy480;
+       if (yych == 'e') goto yy481;
        goto yy276;
 yy451:
-       ++YYCURSOR;
-#line 154 "../src/conf/parse_opts.re"
-       { if (!opts.set_encoding (Enc::UTF16))  { error_encoding (); return EXIT_FAIL; } goto opt; }
-#line 1884 "src/conf/parse_opts.cc"
-yy453:
-       ++YYCURSOR;
-#line 133 "../src/conf/parse_opts.re"
-       { vernum ();  return EXIT_OK; }
-#line 1889 "src/conf/parse_opts.cc"
-yy455:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy482;
+       if (yych == 'p') goto yy482;
        goto yy276;
-yy456:
+yy452:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy484;
+       if (yych == 'n') goto yy483;
        goto yy276;
-yy457:
+yy453:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy485;
+       if (yych == 'o') goto yy484;
        goto yy276;
-yy458:
+yy454:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy486;
+       if (yych == 'e') goto yy485;
        goto yy276;
-yy459:
+yy455:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy487;
+       if (yych == 'a') goto yy486;
        goto yy276;
-yy460:
+yy456:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy488;
+       if (yych <= 0x00) goto yy487;
        goto yy276;
+yy457:
+       ++YYCURSOR;
+#line 155 "../src/conf/parse_opts.re"
+       { if (!opts.set_encoding (Enc::UTF16))  { error_encoding (); return EXIT_FAIL; } goto opt; }
+#line 1910 "src/conf/parse_opts.cc"
+yy459:
+       ++YYCURSOR;
+#line 133 "../src/conf/parse_opts.re"
+       { vernum ();  return EXIT_OK; }
+#line 1915 "src/conf/parse_opts.cc"
 yy461:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy489;
+       if (yych <= 0x00) goto yy489;
        goto yy276;
 yy462:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'm') goto yy490;
+       if (yych == 'a') goto yy491;
        goto yy276;
 yy463:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy491;
+       if (yych == 'o') goto yy492;
        goto yy276;
 yy464:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy492;
+       if (yych == 'e') goto yy493;
        goto yy276;
 yy465:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy493;
+       if (yych == 'e') goto yy494;
        goto yy276;
 yy466:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy495;
+       if (yych == '-') goto yy495;
        goto yy276;
 yy467:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy496;
+       if (yych == 't') goto yy496;
        goto yy276;
 yy468:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy497;
+       if (yych == 'm') goto yy497;
        goto yy276;
 yy469:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'f') goto yy498;
+       if (yych == 'a') goto yy498;
        goto yy276;
 yy470:
        yych = (YYCTYPE)*++YYCURSOR;
@@ -1952,222 +1954,222 @@ yy470:
        goto yy276;
 yy471:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy500;
+       if (yych == 'i') goto yy500;
        goto yy276;
 yy472:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy501;
+       if (yych <= 0x00) goto yy501;
        goto yy276;
 yy473:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'c') goto yy502;
+       if (yych == 'a') goto yy503;
        goto yy276;
 yy474:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy503;
+       if (yych == '-') goto yy504;
        goto yy276;
 yy475:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy505;
+       if (yych == 't') goto yy505;
        goto yy276;
 yy476:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy506;
+       if (yych == 'f') goto yy506;
        goto yy276;
 yy477:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy508;
+       if (yych == '-') goto yy507;
        goto yy276;
 yy478:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy509;
+       if (yych == 'a') goto yy508;
        goto yy276;
 yy479:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'd') goto yy510;
+       if (yych == 'o') goto yy509;
        goto yy276;
 yy480:
-       ++YYCURSOR;
-#line 152 "../src/conf/parse_opts.re"
-       { if (!opts.set_encoding (Enc::UTF32))  { error_encoding (); return EXIT_FAIL; } goto opt; }
-#line 1994 "src/conf/parse_opts.cc"
-yy482:
-       ++YYCURSOR;
-#line 132 "../src/conf/parse_opts.re"
-       { version (); return EXIT_OK; }
-#line 1999 "src/conf/parse_opts.cc"
-yy484:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy511;
+       if (yych == 'c') goto yy510;
        goto yy276;
-yy485:
+yy481:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy512;
+       if (yych <= 0x00) goto yy511;
        goto yy276;
-yy486:
+yy482:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy513;
+       if (yych == 'a') goto yy513;
        goto yy276;
-yy487:
+yy483:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy514;
+       if (yych <= 0x00) goto yy514;
        goto yy276;
-yy488:
+yy484:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'g') goto yy515;
+       if (yych == 'n') goto yy516;
        goto yy276;
-yy489:
+yy485:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'p') goto yy516;
+       if (yych == '-') goto yy517;
        goto yy276;
-yy490:
+yy486:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy517;
+       if (yych == 'd') goto yy518;
        goto yy276;
+yy487:
+       ++YYCURSOR;
+#line 153 "../src/conf/parse_opts.re"
+       { if (!opts.set_encoding (Enc::UTF32))  { error_encoding (); return EXIT_FAIL; } goto opt; }
+#line 2024 "src/conf/parse_opts.cc"
+yy489:
+       ++YYCURSOR;
+#line 132 "../src/conf/parse_opts.re"
+       { version (); return EXIT_OK; }
+#line 2029 "src/conf/parse_opts.cc"
 yy491:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy518;
+       if (yych == 'r') goto yy519;
        goto yy276;
 yy492:
        yych = (YYCTYPE)*++YYCURSOR;
-       switch (yych) {
-       case 'd':       goto yy520;
-       case 'm':       goto yy521;
-       case 'r':       goto yy522;
-       case 't':       goto yy523;
-       default:        goto yy276;
-       }
+       if (yych == 'r') goto yy520;
+       goto yy276;
 yy493:
-       ++YYCURSOR;
-#line 137 "../src/conf/parse_opts.re"
-       { opts.set_target (opt_t::DOT);      goto opt; }
-#line 2045 "src/conf/parse_opts.cc"
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'n') goto yy521;
+       goto yy276;
+yy494:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'r') goto yy522;
+       goto yy276;
 yy495:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy524;
+       if (yych == 'g') goto yy523;
        goto yy276;
 yy496:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'p') goto yy525;
+       if (yych == 'p') goto yy524;
        goto yy276;
 yy497:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy526;
+       if (yych == 'i') goto yy525;
        goto yy276;
 yy498:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy527;
+       if (yych <= 0x00) goto yy526;
        goto yy276;
 yy499:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy528;
-       goto yy276;
+       switch (yych) {
+       case 'd':       goto yy528;
+       case 'm':       goto yy529;
+       case 'r':       goto yy530;
+       case 't':       goto yy531;
+       default:        goto yy276;
+       }
 yy500:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy529;
+       if (yych == 'p') goto yy532;
        goto yy276;
 yy501:
+       ++YYCURSOR;
+#line 137 "../src/conf/parse_opts.re"
+       { opts.set_target (opt_t::DOT);      goto opt; }
+#line 2079 "src/conf/parse_opts.cc"
+yy503:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy530;
+       if (yych == 's') goto yy533;
        goto yy276;
-yy502:
+yy504:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy531;
+       if (yych == 'p') goto yy534;
        goto yy276;
-yy503:
-       ++YYCURSOR;
-#line 142 "../src/conf/parse_opts.re"
-       { opts.set_rFlag (true);             goto opt; }
-#line 2082 "src/conf/parse_opts.cc"
 yy505:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy532;
+       if (yych == 'a') goto yy535;
        goto yy276;
 yy506:
-       ++YYCURSOR;
-#line 148 "../src/conf/parse_opts.re"
-       { opts.set_target (opt_t::SKELETON); goto opt; }
-#line 2091 "src/conf/parse_opts.cc"
-yy508:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'd') goto yy533;
+       if (yych == 's') goto yy536;
        goto yy276;
-yy509:
+yy507:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy534;
+       if (yych == 'i') goto yy537;
        goto yy276;
-yy510:
+yy508:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy535;
+       if (yych == 't') goto yy538;
        goto yy276;
-yy511:
+yy509:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy536;
+       if (yych == 'n') goto yy539;
        goto yy276;
-yy512:
+yy510:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy537;
+       if (yych == 't') goto yy540;
        goto yy276;
+yy511:
+       ++YYCURSOR;
+#line 142 "../src/conf/parse_opts.re"
+       { opts.set_rFlag (true);             goto opt; }
+#line 2116 "src/conf/parse_opts.cc"
 yy513:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy538;
+       if (yych == 's') goto yy541;
        goto yy276;
 yy514:
+       ++YYCURSOR;
+#line 148 "../src/conf/parse_opts.re"
+       { opts.set_target (opt_t::SKELETON); goto opt; }
+#line 2125 "src/conf/parse_opts.cc"
+yy516:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy539;
+       if (yych == 'd') goto yy542;
        goto yy276;
-yy515:
+yy517:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy540;
+       if (yych == 's') goto yy543;
        goto yy276;
-yy516:
+yy518:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'u') goto yy541;
+       if (yych == 'e') goto yy544;
        goto yy276;
-yy517:
+yy519:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'z') goto yy542;
+       if (yych == 's') goto yy545;
        goto yy276;
-yy518:
-       ++YYCURSOR;
-#line 168 "../src/conf/parse_opts.re"
-       { opts.set_dump_adfa(true);       goto opt; }
-#line 2136 "src/conf/parse_opts.cc"
 yy520:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy543;
+       if (yych == 's') goto yy546;
        goto yy276;
 yy521:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy544;
+       if (yych == 's') goto yy547;
        goto yy276;
 yy522:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy545;
+       if (yych == 't') goto yy548;
        goto yy276;
 yy523:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy546;
+       if (yych == 'o') goto yy549;
        goto yy276;
 yy524:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy547;
+       if (yych == 'u') goto yy550;
        goto yy276;
 yy525:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy548;
+       if (yych == 'z') goto yy551;
        goto yy276;
 yy526:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'x') goto yy549;
-       goto yy276;
-yy527:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy550;
-       goto yy276;
+       ++YYCURSOR;
+#line 169 "../src/conf/parse_opts.re"
+       { opts.set_dump_adfa(true);       goto opt; }
+#line 2170 "src/conf/parse_opts.cc"
 yy528:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy552;
+       if (yych == 'e') goto yy552;
        goto yy276;
 yy529:
        yych = (YYCTYPE)*++YYCURSOR;
@@ -2175,27 +2177,27 @@ yy529:
        goto yy276;
 yy530:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy554;
+       if (yych == 'a') goto yy554;
        goto yy276;
 yy531:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy556;
+       if (yych == 'a') goto yy555;
        goto yy276;
 yy532:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy557;
+       if (yych <= 0x00) goto yy556;
        goto yy276;
 yy533:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy558;
+       if (yych == 's') goto yy558;
        goto yy276;
 yy534:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy559;
+       if (yych == 'o') goto yy559;
        goto yy276;
 yy535:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy560;
+       if (yych == 'x') goto yy560;
        goto yy276;
 yy536:
        yych = (YYCTYPE)*++YYCURSOR;
@@ -2203,27 +2205,27 @@ yy536:
        goto yy276;
 yy537:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy563;
+       if (yych == 'n') goto yy563;
        goto yy276;
 yy538:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy565;
+       if (yych == 'i') goto yy564;
        goto yy276;
 yy539:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy566;
+       if (yych <= 0x00) goto yy565;
        goto yy276;
 yy540:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy567;
+       if (yych == 'i') goto yy567;
        goto yy276;
 yy541:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy568;
+       if (yych == 's') goto yy568;
        goto yy276;
 yy542:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy569;
+       if (yych == 'i') goto yy569;
        goto yy276;
 yy543:
        yych = (YYCTYPE)*++YYCURSOR;
@@ -2231,371 +2233,412 @@ yy543:
        goto yy276;
 yy544:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy571;
+       if (yych == 'r') goto yy571;
        goto yy276;
 yy545:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'w') goto yy572;
+       if (yych <= 0x00) goto yy572;
        goto yy276;
 yy546:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'g') goto yy573;
+       if (yych <= 0x00) goto yy574;
        goto yy276;
 yy547:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy574;
+       if (yych == 'i') goto yy576;
        goto yy276;
 yy548:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'l') goto yy576;
+       if (yych == 'e') goto yy577;
        goto yy276;
 yy549:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy577;
+       if (yych == 't') goto yy578;
        goto yy276;
 yy550:
-       ++YYCURSOR;
-#line 143 "../src/conf/parse_opts.re"
-       { opts.set_sFlag (true);             goto opt; }
-#line 2261 "src/conf/parse_opts.cc"
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 't') goto yy579;
+       goto yy276;
+yy551:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'a') goto yy580;
+       goto yy276;
 yy552:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'f') goto yy579;
+       if (yych == 't') goto yy581;
        goto yy276;
 yy553:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy580;
+       if (yych == 'n') goto yy582;
        goto yy276;
 yy554:
-       ++YYCURSOR;
-#line 145 "../src/conf/parse_opts.re"
-       { opts.set_version (false);          goto opt; }
-#line 2274 "src/conf/parse_opts.cc"
-yy556:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'v') goto yy581;
+       if (yych == 'w') goto yy583;
        goto yy276;
-yy557:
+yy555:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy582;
+       if (yych == 'g') goto yy584;
        goto yy276;
+yy556:
+       ++YYCURSOR;
+#line 151 "../src/conf/parse_opts.re"
+       { opts.set_eager_skip(true);         goto opt; }
+#line 2287 "src/conf/parse_opts.cc"
 yy558:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy584;
+       if (yych <= 0x00) goto yy585;
        goto yy276;
 yy559:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy585;
+       if (yych == 'l') goto yy587;
        goto yy276;
 yy560:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy586;
+       if (yych <= 0x00) goto yy588;
        goto yy276;
 yy561:
        ++YYCURSOR;
-#line 153 "../src/conf/parse_opts.re"
-       { if (!opts.set_encoding (Enc::UCS2))   { error_encoding (); return EXIT_FAIL; } goto opt; }
-#line 2299 "src/conf/parse_opts.cc"
-yy563:
-       ++YYCURSOR;
-#line 134 "../src/conf/parse_opts.re"
-       { opts.set_bFlag (true);             goto opt; }
+#line 143 "../src/conf/parse_opts.re"
+       { opts.set_sFlag (true);             goto opt; }
 #line 2304 "src/conf/parse_opts.cc"
-yy565:
+yy563:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy588;
+       if (yych == 'f') goto yy590;
        goto yy276;
-yy566:
+yy564:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'd') goto yy589;
+       if (yych == 'o') goto yy591;
        goto yy276;
+yy565:
+       ++YYCURSOR;
+#line 145 "../src/conf/parse_opts.re"
+       { opts.set_version (false);          goto opt; }
+#line 2317 "src/conf/parse_opts.cc"
 yy567:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy590;
+       if (yych == 'v') goto yy592;
        goto yy276;
 yy568:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy591;
+       if (yych <= 0x00) goto yy593;
        goto yy276;
 yy569:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy593;
+       if (yych == 't') goto yy595;
        goto yy276;
 yy570:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy594;
+       if (yych == 'a') goto yy596;
        goto yy276;
 yy571:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy596;
+       if (yych <= 0x00) goto yy597;
        goto yy276;
 yy572:
+       ++YYCURSOR;
+#line 154 "../src/conf/parse_opts.re"
+       { if (!opts.set_encoding (Enc::UCS2))   { error_encoding (); return EXIT_FAIL; } goto opt; }
+#line 2342 "src/conf/parse_opts.cc"
+yy574:
+       ++YYCURSOR;
+#line 134 "../src/conf/parse_opts.re"
+       { opts.set_bFlag (true);             goto opt; }
+#line 2347 "src/conf/parse_opts.cc"
+yy576:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy598;
+       if (yych == 't') goto yy599;
        goto yy276;
-yy573:
+yy577:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy600;
+       if (yych == 'd') goto yy600;
        goto yy276;
-yy574:
+yy578:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'o') goto yy601;
+       goto yy276;
+yy579:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych <= 0x00) goto yy602;
+       goto yy276;
+yy580:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 't') goto yy604;
+       goto yy276;
+yy581:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych <= 0x00) goto yy605;
+       goto yy276;
+yy582:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych <= 0x00) goto yy607;
+       goto yy276;
+yy583:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych <= 0x00) goto yy609;
+       goto yy276;
+yy584:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'o') goto yy611;
+       goto yy276;
+yy585:
        ++YYCURSOR;
-#line 160 "../src/conf/parse_opts.re"
+#line 161 "../src/conf/parse_opts.re"
        { goto opt_empty_class; }
-#line 2345 "src/conf/parse_opts.cc"
-yy576:
+#line 2388 "src/conf/parse_opts.cc"
+yy587:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy601;
+       if (yych == 'i') goto yy612;
        goto yy276;
-yy577:
+yy588:
        ++YYCURSOR;
 #line 139 "../src/conf/parse_opts.re"
        { opts.set_FFlag (true);             goto opt; }
-#line 2354 "src/conf/parse_opts.cc"
-yy579:
+#line 2397 "src/conf/parse_opts.cc"
+yy590:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy602;
+       if (yych == 'o') goto yy613;
        goto yy276;
-yy580:
+yy591:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy603;
+       if (yych == 'n') goto yy614;
        goto yy276;
-yy581:
+yy592:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy604;
+       if (yych == 'e') goto yy615;
        goto yy276;
-yy582:
+yy593:
        ++YYCURSOR;
-#line 162 "../src/conf/parse_opts.re"
+#line 163 "../src/conf/parse_opts.re"
        { goto opt; }
-#line 2371 "src/conf/parse_opts.cc"
-yy584:
+#line 2414 "src/conf/parse_opts.cc"
+yy595:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy605;
+       if (yych == 'i') goto yy616;
        goto yy276;
-yy585:
+yy596:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy606;
+       if (yych == 't') goto yy617;
        goto yy276;
-yy586:
+yy597:
        ++YYCURSOR;
-#line 157 "../src/conf/parse_opts.re"
+#line 158 "../src/conf/parse_opts.re"
        { if (!next (YYCURSOR, argv)) { error_arg ("-t, --type-header"); return EXIT_FAIL; } goto opt_header; }
-#line 2384 "src/conf/parse_opts.cc"
-yy588:
+#line 2427 "src/conf/parse_opts.cc"
+yy599:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy607;
+       if (yych == 'i') goto yy618;
        goto yy276;
-yy589:
+yy600:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy608;
+       if (yych <= 0x00) goto yy619;
        goto yy276;
-yy590:
+yy601:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy610;
+       if (yych == 's') goto yy621;
        goto yy276;
-yy591:
+yy602:
        ++YYCURSOR;
 #line 136 "../src/conf/parse_opts.re"
        { opts.set_dFlag (true);             goto opt; }
-#line 2401 "src/conf/parse_opts.cc"
-yy593:
+#line 2444 "src/conf/parse_opts.cc"
+yy604:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy611;
+       if (yych == 'i') goto yy622;
        goto yy276;
-yy594:
+yy605:
        ++YYCURSOR;
-#line 165 "../src/conf/parse_opts.re"
+#line 166 "../src/conf/parse_opts.re"
        { opts.set_dump_dfa_det(true);    goto opt; }
-#line 2410 "src/conf/parse_opts.cc"
-yy596:
+#line 2453 "src/conf/parse_opts.cc"
+yy607:
        ++YYCURSOR;
-#line 167 "../src/conf/parse_opts.re"
+#line 168 "../src/conf/parse_opts.re"
        { opts.set_dump_dfa_min(true);    goto opt; }
-#line 2415 "src/conf/parse_opts.cc"
-yy598:
+#line 2458 "src/conf/parse_opts.cc"
+yy609:
        ++YYCURSOR;
-#line 164 "../src/conf/parse_opts.re"
+#line 165 "../src/conf/parse_opts.re"
        { opts.set_dump_dfa_raw(true);    goto opt; }
-#line 2420 "src/conf/parse_opts.cc"
-yy600:
+#line 2463 "src/conf/parse_opts.cc"
+yy611:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'p') goto yy612;
+       if (yych == 'p') goto yy623;
        goto yy276;
-yy601:
+yy612:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'c') goto yy613;
+       if (yych == 'c') goto yy624;
        goto yy276;
-yy602:
+yy613:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy614;
+       if (yych <= 0x00) goto yy625;
        goto yy276;
-yy603:
+yy614:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy616;
+       if (yych == '-') goto yy627;
        goto yy276;
-yy604:
+yy615:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy617;
+       if (yych == '-') goto yy628;
        goto yy276;
-yy605:
+yy616:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy618;
+       if (yych == 'o') goto yy629;
        goto yy276;
-yy606:
+yy617:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy619;
+       if (yych == 'e') goto yy630;
        goto yy276;
-yy607:
+yy618:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'v') goto yy620;
+       if (yych == 'v') goto yy631;
        goto yy276;
-yy608:
+yy619:
        ++YYCURSOR;
 #line 147 "../src/conf/parse_opts.re"
        { opts.set_bCaseInverted (true);     goto opt; }
-#line 2457 "src/conf/parse_opts.cc"
-yy610:
+#line 2500 "src/conf/parse_opts.cc"
+yy621:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy621;
+       if (yych <= 0x00) goto yy632;
        goto yy276;
-yy611:
+yy622:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy623;
+       if (yych == 'o') goto yy634;
        goto yy276;
-yy612:
+yy623:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy624;
+       if (yych == 't') goto yy635;
        goto yy276;
-yy613:
+yy624:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'y') goto yy625;
+       if (yych == 'y') goto yy636;
        goto yy276;
-yy614:
+yy625:
        ++YYCURSOR;
 #line 141 "../src/conf/parse_opts.re"
        { opts.set_iFlag (true);             goto opt; }
-#line 2478 "src/conf/parse_opts.cc"
-yy616:
+#line 2521 "src/conf/parse_opts.cc"
+yy627:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'd') goto yy626;
+       if (yych == 'd') goto yy637;
        goto yy276;
-yy617:
+yy628:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'm') goto yy627;
+       if (yych == 'm') goto yy638;
        goto yy276;
-yy618:
+yy629:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy628;
+       if (yych == 'n') goto yy639;
        goto yy276;
-yy619:
+yy630:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy629;
+       if (yych <= 0x00) goto yy640;
        goto yy276;
-yy620:
+yy631:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy631;
+       if (yych == 'e') goto yy642;
        goto yy276;
-yy621:
+yy632:
        ++YYCURSOR;
 #line 140 "../src/conf/parse_opts.re"
        { opts.set_gFlag (true);             goto opt; }
-#line 2503 "src/conf/parse_opts.cc"
-yy623:
+#line 2546 "src/conf/parse_opts.cc"
+yy634:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy632;
+       if (yych == 'n') goto yy643;
        goto yy276;
-yy624:
+yy635:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy633;
+       if (yych <= 0x00) goto yy644;
        goto yy276;
-yy625:
+yy636:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy635;
+       if (yych <= 0x00) goto yy646;
        goto yy276;
-yy626:
+yy637:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy637;
+       if (yych == 'a') goto yy648;
        goto yy276;
-yy627:
+yy638:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy638;
+       if (yych == 'a') goto yy649;
        goto yy276;
-yy628:
+yy639:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy639;
+       if (yych == 's') goto yy650;
        goto yy276;
-yy629:
+yy640:
        ++YYCURSOR;
 #line 138 "../src/conf/parse_opts.re"
        { opts.set_fFlag (true);             goto opt; }
-#line 2532 "src/conf/parse_opts.cc"
-yy631:
+#line 2575 "src/conf/parse_opts.cc"
+yy642:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy640;
+       if (yych <= 0x00) goto yy651;
        goto yy276;
-yy632:
+yy643:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy642;
+       if (yych <= 0x00) goto yy653;
        goto yy276;
-yy633:
+yy644:
        ++YYCURSOR;
-#line 166 "../src/conf/parse_opts.re"
+#line 167 "../src/conf/parse_opts.re"
        { opts.set_dump_dfa_tagopt(true); goto opt; }
-#line 2545 "src/conf/parse_opts.cc"
-yy635:
+#line 2588 "src/conf/parse_opts.cc"
+yy646:
        ++YYCURSOR;
-#line 158 "../src/conf/parse_opts.re"
+#line 159 "../src/conf/parse_opts.re"
        { goto opt_encoding_policy; }
-#line 2550 "src/conf/parse_opts.cc"
-yy637:
+#line 2593 "src/conf/parse_opts.cc"
+yy648:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy644;
+       if (yych == 't') goto yy655;
        goto yy276;
-yy638:
+yy649:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'p') goto yy645;
+       if (yych == 'p') goto yy656;
        goto yy276;
-yy639:
+yy650:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy646;
+       if (yych <= 0x00) goto yy657;
        goto yy276;
-yy640:
+yy651:
        ++YYCURSOR;
 #line 146 "../src/conf/parse_opts.re"
        { opts.set_bCaseInsensitive (true);  goto opt; }
-#line 2567 "src/conf/parse_opts.cc"
-yy642:
+#line 2610 "src/conf/parse_opts.cc"
+yy653:
        ++YYCURSOR;
-#line 161 "../src/conf/parse_opts.re"
+#line 162 "../src/conf/parse_opts.re"
        { goto opt_dfa_minimization; }
-#line 2572 "src/conf/parse_opts.cc"
-yy644:
+#line 2615 "src/conf/parse_opts.cc"
+yy655:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy648;
+       if (yych == 'e') goto yy659;
        goto yy276;
-yy645:
+yy656:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'p') goto yy649;
+       if (yych == 'p') goto yy660;
        goto yy276;
-yy646:
+yy657:
        ++YYCURSOR;
 #line 135 "../src/conf/parse_opts.re"
        { opts.set_cFlag (true);             goto opt; }
-#line 2585 "src/conf/parse_opts.cc"
-yy648:
+#line 2628 "src/conf/parse_opts.cc"
+yy659:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy650;
+       if (yych <= 0x00) goto yy661;
        goto yy276;
-yy649:
+yy660:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy652;
+       if (yych == 'i') goto yy663;
        goto yy276;
-yy650:
+yy661:
        ++YYCURSOR;
 #line 144 "../src/conf/parse_opts.re"
        { opts.set_bNoGenerationDate (true); goto opt; }
-#line 2598 "src/conf/parse_opts.cc"
-yy652:
+#line 2641 "src/conf/parse_opts.cc"
+yy663:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych != 'n') goto yy276;
        yych = (YYCTYPE)*++YYCURSOR;
@@ -2605,14 +2648,14 @@ yy652:
        ++YYCURSOR;
 #line 150 "../src/conf/parse_opts.re"
        { opts.set_bijective_mapping(false); goto opt; }
-#line 2609 "src/conf/parse_opts.cc"
+#line 2652 "src/conf/parse_opts.cc"
 }
-#line 169 "../src/conf/parse_opts.re"
+#line 170 "../src/conf/parse_opts.re"
 
 
 opt_output:
 
-#line 2616 "src/conf/parse_opts.cc"
+#line 2659 "src/conf/parse_opts.cc"
 {
        YYCTYPE yych;
        static const unsigned char yybm[] = {
@@ -2650,32 +2693,32 @@ opt_output:
                128, 128, 128, 128, 128, 128, 128, 128, 
        };
        yych = (YYCTYPE)*YYCURSOR;
-       if (yych <= 0x00) goto yy659;
-       if (yych != '-') goto yy661;
-yy659:
+       if (yych <= 0x00) goto yy670;
+       if (yych != '-') goto yy672;
+yy670:
        ++YYCURSOR;
-#line 174 "../src/conf/parse_opts.re"
+#line 175 "../src/conf/parse_opts.re"
        {
                error ("bad argument to option -o, --output: %s", *argv);
                return EXIT_FAIL;
        }
-#line 2663 "src/conf/parse_opts.cc"
-yy661:
+#line 2706 "src/conf/parse_opts.cc"
+yy672:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yybm[0+yych] & 128) {
-               goto yy661;
+               goto yy672;
        }
        ++YYCURSOR;
-#line 178 "../src/conf/parse_opts.re"
+#line 179 "../src/conf/parse_opts.re"
        { opts.set_output_file(*argv); goto opt; }
-#line 2672 "src/conf/parse_opts.cc"
+#line 2715 "src/conf/parse_opts.cc"
 }
-#line 179 "../src/conf/parse_opts.re"
+#line 180 "../src/conf/parse_opts.re"
 
 
 opt_header:
 
-#line 2679 "src/conf/parse_opts.cc"
+#line 2722 "src/conf/parse_opts.cc"
 {
        YYCTYPE yych;
        static const unsigned char yybm[] = {
@@ -2713,27 +2756,27 @@ opt_header:
                128, 128, 128, 128, 128, 128, 128, 128, 
        };
        yych = (YYCTYPE)*YYCURSOR;
-       if (yych <= 0x00) goto yy667;
-       if (yych != '-') goto yy669;
-yy667:
+       if (yych <= 0x00) goto yy678;
+       if (yych != '-') goto yy680;
+yy678:
        ++YYCURSOR;
-#line 184 "../src/conf/parse_opts.re"
+#line 185 "../src/conf/parse_opts.re"
        {
                error ("bad argument to option -t, --type-header: %s", *argv);
                return EXIT_FAIL;
        }
-#line 2726 "src/conf/parse_opts.cc"
-yy669:
+#line 2769 "src/conf/parse_opts.cc"
+yy680:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yybm[0+yych] & 128) {
-               goto yy669;
+               goto yy680;
        }
        ++YYCURSOR;
-#line 188 "../src/conf/parse_opts.re"
+#line 189 "../src/conf/parse_opts.re"
        { opts.set_header_file (*argv); goto opt; }
-#line 2735 "src/conf/parse_opts.cc"
+#line 2778 "src/conf/parse_opts.cc"
 }
-#line 189 "../src/conf/parse_opts.re"
+#line 190 "../src/conf/parse_opts.re"
 
 
 opt_encoding_policy:
@@ -2743,115 +2786,115 @@ opt_encoding_policy:
                return EXIT_FAIL;
        }
 
-#line 2747 "src/conf/parse_opts.cc"
+#line 2790 "src/conf/parse_opts.cc"
 {
        YYCTYPE yych;
        yych = (YYCTYPE)*YYCURSOR;
        if (yych <= 'h') {
-               if (yych == 'f') goto yy677;
+               if (yych == 'f') goto yy688;
        } else {
-               if (yych <= 'i') goto yy678;
-               if (yych == 's') goto yy679;
+               if (yych <= 'i') goto yy689;
+               if (yych == 's') goto yy690;
        }
        ++YYCURSOR;
-yy676:
-#line 199 "../src/conf/parse_opts.re"
+yy687:
+#line 200 "../src/conf/parse_opts.re"
        {
                error ("bad argument to option --encoding-policy (expected: ignore | substitute | fail): %s", *argv);
                return EXIT_FAIL;
        }
-#line 2764 "src/conf/parse_opts.cc"
-yy677:
+#line 2807 "src/conf/parse_opts.cc"
+yy688:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'a') goto yy680;
-       goto yy676;
-yy678:
+       if (yych == 'a') goto yy691;
+       goto yy687;
+yy689:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'g') goto yy682;
-       goto yy676;
-yy679:
+       if (yych == 'g') goto yy693;
+       goto yy687;
+yy690:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'u') goto yy683;
-       goto yy676;
-yy680:
+       if (yych == 'u') goto yy694;
+       goto yy687;
+yy691:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy684;
-yy681:
+       if (yych == 'i') goto yy695;
+yy692:
        YYCURSOR = YYMARKER;
-       goto yy676;
-yy682:
+       goto yy687;
+yy693:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy685;
-       goto yy681;
-yy683:
+       if (yych == 'n') goto yy696;
+       goto yy692;
+yy694:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'b') goto yy686;
-       goto yy681;
-yy684:
+       if (yych == 'b') goto yy697;
+       goto yy692;
+yy695:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'l') goto yy687;
-       goto yy681;
-yy685:
+       if (yych == 'l') goto yy698;
+       goto yy692;
+yy696:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy688;
-       goto yy681;
-yy686:
+       if (yych == 'o') goto yy699;
+       goto yy692;
+yy697:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy689;
-       goto yy681;
-yy687:
+       if (yych == 's') goto yy700;
+       goto yy692;
+yy698:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy690;
-       goto yy681;
-yy688:
+       if (yych <= 0x00) goto yy701;
+       goto yy692;
+yy699:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy692;
-       goto yy681;
-yy689:
+       if (yych == 'r') goto yy703;
+       goto yy692;
+yy700:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy693;
-       goto yy681;
-yy690:
+       if (yych == 't') goto yy704;
+       goto yy692;
+yy701:
        ++YYCURSOR;
-#line 205 "../src/conf/parse_opts.re"
+#line 206 "../src/conf/parse_opts.re"
        { opts.set_encoding_policy (Enc::POLICY_FAIL);       goto opt; }
-#line 2819 "src/conf/parse_opts.cc"
-yy692:
+#line 2862 "src/conf/parse_opts.cc"
+yy703:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy694;
-       goto yy681;
-yy693:
+       if (yych == 'e') goto yy705;
+       goto yy692;
+yy704:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy695;
-       goto yy681;
-yy694:
+       if (yych == 'i') goto yy706;
+       goto yy692;
+yy705:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy696;
-       goto yy681;
-yy695:
+       if (yych <= 0x00) goto yy707;
+       goto yy692;
+yy706:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy698;
-       goto yy681;
-yy696:
+       if (yych == 't') goto yy709;
+       goto yy692;
+yy707:
        ++YYCURSOR;
-#line 203 "../src/conf/parse_opts.re"
+#line 204 "../src/conf/parse_opts.re"
        { opts.set_encoding_policy (Enc::POLICY_IGNORE);     goto opt; }
-#line 2840 "src/conf/parse_opts.cc"
-yy698:
+#line 2883 "src/conf/parse_opts.cc"
+yy709:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'u') goto yy681;
+       if (yych != 'u') goto yy692;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 't') goto yy681;
+       if (yych != 't') goto yy692;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'e') goto yy681;
+       if (yych != 'e') goto yy692;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy681;
+       if (yych >= 0x01) goto yy692;
        ++YYCURSOR;
-#line 204 "../src/conf/parse_opts.re"
+#line 205 "../src/conf/parse_opts.re"
        { opts.set_encoding_policy (Enc::POLICY_SUBSTITUTE); goto opt; }
-#line 2853 "src/conf/parse_opts.cc"
+#line 2896 "src/conf/parse_opts.cc"
 }
-#line 206 "../src/conf/parse_opts.re"
+#line 207 "../src/conf/parse_opts.re"
 
 
 opt_input:
@@ -2861,86 +2904,86 @@ opt_input:
                return EXIT_FAIL;
        }
 
-#line 2865 "src/conf/parse_opts.cc"
+#line 2908 "src/conf/parse_opts.cc"
 {
        YYCTYPE yych;
        yych = (YYCTYPE)*YYCURSOR;
-       if (yych <= 'b') goto yy706;
-       if (yych <= 'c') goto yy708;
-       if (yych <= 'd') goto yy709;
-yy706:
+       if (yych <= 'b') goto yy717;
+       if (yych <= 'c') goto yy719;
+       if (yych <= 'd') goto yy720;
+yy717:
        ++YYCURSOR;
-yy707:
-#line 216 "../src/conf/parse_opts.re"
+yy718:
+#line 217 "../src/conf/parse_opts.re"
        {
                error ("bad argument to option --input (expected: default | custom): %s", *argv);
                return EXIT_FAIL;
        }
-#line 2880 "src/conf/parse_opts.cc"
-yy708:
+#line 2923 "src/conf/parse_opts.cc"
+yy719:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'u') goto yy710;
-       goto yy707;
-yy709:
+       if (yych == 'u') goto yy721;
+       goto yy718;
+yy720:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'e') goto yy712;
-       goto yy707;
-yy710:
+       if (yych == 'e') goto yy723;
+       goto yy718;
+yy721:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy713;
-yy711:
+       if (yych == 's') goto yy724;
+yy722:
        YYCURSOR = YYMARKER;
-       goto yy707;
-yy712:
+       goto yy718;
+yy723:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'f') goto yy714;
-       goto yy711;
-yy713:
+       if (yych == 'f') goto yy725;
+       goto yy722;
+yy724:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy715;
-       goto yy711;
-yy714:
+       if (yych == 't') goto yy726;
+       goto yy722;
+yy725:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy716;
-       goto yy711;
-yy715:
+       if (yych == 'a') goto yy727;
+       goto yy722;
+yy726:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy717;
-       goto yy711;
-yy716:
+       if (yych == 'o') goto yy728;
+       goto yy722;
+yy727:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'u') goto yy718;
-       goto yy711;
-yy717:
+       if (yych == 'u') goto yy729;
+       goto yy722;
+yy728:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'm') goto yy719;
-       goto yy711;
-yy718:
+       if (yych == 'm') goto yy730;
+       goto yy722;
+yy729:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'l') goto yy720;
-       goto yy711;
-yy719:
+       if (yych == 'l') goto yy731;
+       goto yy722;
+yy730:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy721;
-       goto yy711;
-yy720:
+       if (yych <= 0x00) goto yy732;
+       goto yy722;
+yy731:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy723;
-       goto yy711;
-yy721:
+       if (yych == 't') goto yy734;
+       goto yy722;
+yy732:
        ++YYCURSOR;
-#line 221 "../src/conf/parse_opts.re"
+#line 222 "../src/conf/parse_opts.re"
        { opts.set_input_api(INPUT_CUSTOM);  goto opt; }
-#line 2935 "src/conf/parse_opts.cc"
-yy723:
+#line 2978 "src/conf/parse_opts.cc"
+yy734:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy711;
+       if (yych >= 0x01) goto yy722;
        ++YYCURSOR;
-#line 220 "../src/conf/parse_opts.re"
+#line 221 "../src/conf/parse_opts.re"
        { opts.set_input_api(INPUT_DEFAULT); goto opt; }
-#line 2942 "src/conf/parse_opts.cc"
+#line 2985 "src/conf/parse_opts.cc"
 }
-#line 222 "../src/conf/parse_opts.re"
+#line 223 "../src/conf/parse_opts.re"
 
 
 opt_empty_class:
@@ -2950,120 +2993,120 @@ opt_empty_class:
                return EXIT_FAIL;
        }
 
-#line 2954 "src/conf/parse_opts.cc"
+#line 2997 "src/conf/parse_opts.cc"
 {
        YYCTYPE yych;
        yych = (YYCTYPE)*YYCURSOR;
-       if (yych == 'e') goto yy730;
-       if (yych == 'm') goto yy731;
+       if (yych == 'e') goto yy741;
+       if (yych == 'm') goto yy742;
        ++YYCURSOR;
-yy729:
-#line 232 "../src/conf/parse_opts.re"
+yy740:
+#line 233 "../src/conf/parse_opts.re"
        {
                error ("bad argument to option --empty-class (expected: match-empty | match-none | error): %s", *argv);
                return EXIT_FAIL;
        }
-#line 2967 "src/conf/parse_opts.cc"
-yy730:
+#line 3010 "src/conf/parse_opts.cc"
+yy741:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'r') goto yy732;
-       goto yy729;
-yy731:
+       if (yych == 'r') goto yy743;
+       goto yy740;
+yy742:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'a') goto yy734;
-       goto yy729;
-yy732:
+       if (yych == 'a') goto yy745;
+       goto yy740;
+yy743:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy735;
-yy733:
+       if (yych == 'r') goto yy746;
+yy744:
        YYCURSOR = YYMARKER;
-       goto yy729;
-yy734:
+       goto yy740;
+yy745:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy736;
-       goto yy733;
-yy735:
+       if (yych == 't') goto yy747;
+       goto yy744;
+yy746:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy737;
-       goto yy733;
-yy736:
+       if (yych == 'o') goto yy748;
+       goto yy744;
+yy747:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'c') goto yy738;
-       goto yy733;
-yy737:
+       if (yych == 'c') goto yy749;
+       goto yy744;
+yy748:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy739;
-       goto yy733;
-yy738:
+       if (yych == 'r') goto yy750;
+       goto yy744;
+yy749:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'h') goto yy740;
-       goto yy733;
-yy739:
+       if (yych == 'h') goto yy751;
+       goto yy744;
+yy750:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy741;
-       goto yy733;
-yy740:
+       if (yych <= 0x00) goto yy752;
+       goto yy744;
+yy751:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy743;
-       goto yy733;
-yy741:
+       if (yych == '-') goto yy754;
+       goto yy744;
+yy752:
        ++YYCURSOR;
-#line 238 "../src/conf/parse_opts.re"
+#line 239 "../src/conf/parse_opts.re"
        { opts.set_empty_class_policy (EMPTY_CLASS_ERROR);       goto opt; }
-#line 3014 "src/conf/parse_opts.cc"
-yy743:
+#line 3057 "src/conf/parse_opts.cc"
+yy754:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy744;
-       if (yych == 'n') goto yy745;
-       goto yy733;
-yy744:
+       if (yych == 'e') goto yy755;
+       if (yych == 'n') goto yy756;
+       goto yy744;
+yy755:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'm') goto yy746;
-       goto yy733;
-yy745:
+       if (yych == 'm') goto yy757;
+       goto yy744;
+yy756:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy747;
-       goto yy733;
-yy746:
+       if (yych == 'o') goto yy758;
+       goto yy744;
+yy757:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'p') goto yy748;
-       goto yy733;
-yy747:
+       if (yych == 'p') goto yy759;
+       goto yy744;
+yy758:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy749;
-       goto yy733;
-yy748:
+       if (yych == 'n') goto yy760;
+       goto yy744;
+yy759:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy750;
-       goto yy733;
-yy749:
+       if (yych == 't') goto yy761;
+       goto yy744;
+yy760:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy751;
-       goto yy733;
-yy750:
+       if (yych == 'e') goto yy762;
+       goto yy744;
+yy761:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'y') goto yy752;
-       goto yy733;
-yy751:
+       if (yych == 'y') goto yy763;
+       goto yy744;
+yy762:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy753;
-       goto yy733;
-yy752:
+       if (yych <= 0x00) goto yy764;
+       goto yy744;
+yy763:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy755;
-       goto yy733;
-yy753:
+       if (yych <= 0x00) goto yy766;
+       goto yy744;
+yy764:
        ++YYCURSOR;
-#line 237 "../src/conf/parse_opts.re"
+#line 238 "../src/conf/parse_opts.re"
        { opts.set_empty_class_policy (EMPTY_CLASS_MATCH_NONE);  goto opt; }
-#line 3060 "src/conf/parse_opts.cc"
-yy755:
+#line 3103 "src/conf/parse_opts.cc"
+yy766:
        ++YYCURSOR;
-#line 236 "../src/conf/parse_opts.re"
+#line 237 "../src/conf/parse_opts.re"
        { opts.set_empty_class_policy (EMPTY_CLASS_MATCH_EMPTY); goto opt; }
-#line 3065 "src/conf/parse_opts.cc"
+#line 3108 "src/conf/parse_opts.cc"
 }
-#line 239 "../src/conf/parse_opts.re"
+#line 240 "../src/conf/parse_opts.re"
 
 
 opt_dfa_minimization:
@@ -3073,74 +3116,74 @@ opt_dfa_minimization:
                return EXIT_FAIL;
        }
 
-#line 3077 "src/conf/parse_opts.cc"
+#line 3120 "src/conf/parse_opts.cc"
 {
        YYCTYPE yych;
        yych = (YYCTYPE)*YYCURSOR;
-       if (yych == 'm') goto yy761;
-       if (yych == 't') goto yy762;
+       if (yych == 'm') goto yy772;
+       if (yych == 't') goto yy773;
        ++YYCURSOR;
-yy760:
-#line 249 "../src/conf/parse_opts.re"
+yy771:
+#line 250 "../src/conf/parse_opts.re"
        {
                error ("bad argument to option --dfa-minimization (expected: table | moore): %s", *argv);
                return EXIT_FAIL;
        }
-#line 3090 "src/conf/parse_opts.cc"
-yy761:
+#line 3133 "src/conf/parse_opts.cc"
+yy772:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'o') goto yy763;
-       goto yy760;
-yy762:
+       if (yych == 'o') goto yy774;
+       goto yy771;
+yy773:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'a') goto yy765;
-       goto yy760;
-yy763:
+       if (yych == 'a') goto yy776;
+       goto yy771;
+yy774:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy766;
-yy764:
+       if (yych == 'o') goto yy777;
+yy775:
        YYCURSOR = YYMARKER;
-       goto yy760;
-yy765:
+       goto yy771;
+yy776:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'b') goto yy767;
-       goto yy764;
-yy766:
+       if (yych == 'b') goto yy778;
+       goto yy775;
+yy777:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy768;
-       goto yy764;
-yy767:
+       if (yych == 'r') goto yy779;
+       goto yy775;
+yy778:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'l') goto yy769;
-       goto yy764;
-yy768:
+       if (yych == 'l') goto yy780;
+       goto yy775;
+yy779:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy770;
-       goto yy764;
-yy769:
+       if (yych == 'e') goto yy781;
+       goto yy775;
+yy780:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy771;
-       goto yy764;
-yy770:
+       if (yych == 'e') goto yy782;
+       goto yy775;
+yy781:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy772;
-       goto yy764;
-yy771:
+       if (yych <= 0x00) goto yy783;
+       goto yy775;
+yy782:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy774;
-       goto yy764;
-yy772:
+       if (yych <= 0x00) goto yy785;
+       goto yy775;
+yy783:
        ++YYCURSOR;
-#line 254 "../src/conf/parse_opts.re"
+#line 255 "../src/conf/parse_opts.re"
        { opts.set_dfa_minimization (DFA_MINIMIZATION_MOORE); goto opt; }
-#line 3137 "src/conf/parse_opts.cc"
-yy774:
+#line 3180 "src/conf/parse_opts.cc"
+yy785:
        ++YYCURSOR;
-#line 253 "../src/conf/parse_opts.re"
+#line 254 "../src/conf/parse_opts.re"
        { opts.set_dfa_minimization (DFA_MINIMIZATION_TABLE); goto opt; }
-#line 3142 "src/conf/parse_opts.cc"
+#line 3185 "src/conf/parse_opts.cc"
 }
-#line 255 "../src/conf/parse_opts.re"
+#line 256 "../src/conf/parse_opts.re"
 
 
 end:
index 9044a370191ecd8044a1bb519e1ef8a50ef79592..bb815249ef7ea609179f59a80732890356c3c83d 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.16 on Sat Dec 31 21:47:22 2016 */
+/* Generated by re2c 0.16 on Mon Jan 16 13:43:26 2017 */
 #line 1 "../src/parse/lex_conf.re"
 #include "src/util/c99_stdint.h"
 #include <string>
@@ -181,38 +181,38 @@ yy14:
                                        if (yyaccept == 12) {
                                                goto yy126;
                                        } else {
-                                               goto yy191;
+                                               goto yy192;
                                        }
                                } else {
-                                       goto yy284;
+                                       goto yy287;
                                }
                        } else {
                                if (yyaccept <= 16) {
                                        if (yyaccept == 15) {
-                                               goto yy361;
+                                               goto yy365;
                                        } else {
-                                               goto yy437;
+                                               goto yy442;
                                        }
                                } else {
-                                       goto yy546;
+                                       goto yy553;
                                }
                        }
                } else {
                        if (yyaccept <= 20) {
                                if (yyaccept <= 19) {
                                        if (yyaccept == 18) {
-                                               goto yy605;
+                                               goto yy613;
                                        } else {
-                                               goto yy646;
+                                               goto yy656;
                                        }
                                } else {
-                                       goto yy653;
+                                       goto yy663;
                                }
                        } else {
                                if (yyaccept == 21) {
-                                       goto yy739;
+                                       goto yy749;
                                } else {
-                                       goto yy742;
+                                       goto yy752;
                                }
                        }
                }
@@ -563,7 +563,7 @@ yy89:
        goto yy14;
 yy90:
        ++cur;
-#line 65 "../src/parse/lex_conf.re"
+#line 66 "../src/parse/lex_conf.re"
        { lex_conf_enc(Enc::UTF8);   return; }
 #line 569 "src/parse/lex_conf.cc"
 yy92:
@@ -616,725 +616,739 @@ yy105:
 yy106:
        yyaccept = 4;
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych <= 'l') {
-               if (yych == 'c') goto yy154;
+       if (yych <= 'c') {
+               if (yych == 'a') goto yy154;
+               if (yych >= 'c') goto yy155;
        } else {
-               if (yych <= 'm') goto yy155;
-               if (yych <= 'n') goto yy156;
+               if (yych <= 'l') goto yy107;
+               if (yych <= 'm') goto yy156;
+               if (yych <= 'n') goto yy157;
        }
 yy107:
-#line 61 "../src/parse/lex_conf.re"
+#line 62 "../src/parse/lex_conf.re"
        { lex_conf_enc(Enc::EBCDIC); return; }
-#line 629 "src/parse/lex_conf.cc"
+#line 631 "src/parse/lex_conf.cc"
 yy108:
        yyaccept = 5;
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'l') goto yy157;
+       if (yych == 'l') goto yy158;
 yy109:
 #line 48 "../src/parse/lex_conf.re"
        { opts.set_fFlag(lex_conf_bool());              return; }
-#line 637 "src/parse/lex_conf.cc"
+#line 639 "src/parse/lex_conf.cc"
 yy110:
        ++cur;
 #line 50 "../src/parse/lex_conf.re"
        { opts.set_gFlag(lex_conf_bool());              return; }
-#line 642 "src/parse/lex_conf.cc"
+#line 644 "src/parse/lex_conf.cc"
 yy112:
        yyaccept = 6;
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'n') goto yy158;
+       if (yych == 'n') goto yy159;
 yy113:
 #line 51 "../src/parse/lex_conf.re"
        { opts.set_iFlag(lex_conf_bool());              return; }
-#line 650 "src/parse/lex_conf.cc"
+#line 652 "src/parse/lex_conf.cc"
 yy114:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy159;
-       if (yych == 'o') goto yy160;
+       if (yych == 'e') goto yy160;
+       if (yych == 'o') goto yy161;
        goto yy14;
 yy115:
        yyaccept = 7;
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'u') goto yy161;
+       if (yych == 'u') goto yy162;
 yy116:
-#line 67 "../src/parse/lex_conf.re"
+#line 68 "../src/parse/lex_conf.re"
        { opts.set_output_file(lex_conf_string()); return; }
-#line 663 "src/parse/lex_conf.cc"
+#line 665 "src/parse/lex_conf.cc"
 yy117:
        yyaccept = 8;
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'e') goto yy162;
+       if (yych == 'e') goto yy163;
 yy118:
 #line 52 "../src/parse/lex_conf.re"
        { opts.set_rFlag(lex_conf_bool());              return; }
-#line 671 "src/parse/lex_conf.cc"
+#line 673 "src/parse/lex_conf.cc"
 yy119:
        yyaccept = 9;
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'k') goto yy163;
-       if (yych == 't') goto yy164;
+       if (yych == 'k') goto yy164;
+       if (yych == 't') goto yy165;
 yy120:
 #line 53 "../src/parse/lex_conf.re"
        { opts.set_sFlag(lex_conf_bool());              return; }
-#line 680 "src/parse/lex_conf.cc"
+#line 682 "src/parse/lex_conf.cc"
 yy121:
        yyaccept = 10;
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'a') goto yy165;
-       if (yych == 'y') goto yy166;
+       if (yych == 'a') goto yy166;
+       if (yych == 'y') goto yy167;
 yy122:
-#line 68 "../src/parse/lex_conf.re"
+#line 69 "../src/parse/lex_conf.re"
        { opts.set_header_file(lex_conf_string()); return; }
-#line 689 "src/parse/lex_conf.cc"
+#line 691 "src/parse/lex_conf.cc"
 yy123:
        yyaccept = 11;
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'n') goto yy167;
-       if (yych == 't') goto yy168;
+       if (yych == 'n') goto yy168;
+       if (yych == 't') goto yy169;
 yy124:
-#line 62 "../src/parse/lex_conf.re"
+#line 63 "../src/parse/lex_conf.re"
        { lex_conf_enc(Enc::UTF32);  return; }
-#line 698 "src/parse/lex_conf.cc"
+#line 700 "src/parse/lex_conf.cc"
 yy125:
        yyaccept = 12;
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'i') goto yy169;
+       if (yych == 'i') goto yy170;
 yy126:
-#line 63 "../src/parse/lex_conf.re"
+#line 64 "../src/parse/lex_conf.re"
        { lex_conf_enc(Enc::UCS2);   return; }
-#line 706 "src/parse/lex_conf.cc"
+#line 708 "src/parse/lex_conf.cc"
 yy127:
        ++cur;
-#line 64 "../src/parse/lex_conf.re"
+#line 65 "../src/parse/lex_conf.re"
        { lex_conf_enc(Enc::UTF16);  return; }
-#line 711 "src/parse/lex_conf.cc"
+#line 713 "src/parse/lex_conf.cc"
 yy129:
        yych = (unsigned char)*++cur;
        if (yych <= 'r') goto yy14;
-       if (yych <= 's') goto yy170;
-       if (yych <= 't') goto yy171;
+       if (yych <= 's') goto yy171;
+       if (yych <= 't') goto yy172;
        goto yy14;
 yy130:
        yych = (unsigned char)*++cur;
-       if (yych == 'y') goto yy172;
+       if (yych == 'y') goto yy173;
        goto yy14;
 yy131:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy173;
+       if (yych == 'e') goto yy174;
        goto yy14;
 yy132:
        yych = (unsigned char)*++cur;
-       if (yych == 'b') goto yy174;
+       if (yych == 'b') goto yy175;
        goto yy14;
 yy133:
        yych = (unsigned char)*++cur;
-       if (yych == 'b') goto yy175;
+       if (yych == 'b') goto yy176;
        goto yy14;
 yy134:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy176;
+       if (yych == 'e') goto yy177;
        goto yy14;
 yy135:
        yych = (unsigned char)*++cur;
-       if (yych == 'f') goto yy177;
+       if (yych == 'f') goto yy178;
        goto yy14;
 yy136:
        yych = (unsigned char)*++cur;
-       if (yych == 'p') goto yy178;
+       if (yych == 'p') goto yy179;
        goto yy14;
 yy137:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy179;
+       if (yych == 'e') goto yy180;
        goto yy14;
 yy138:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy180;
+       if (yych == 'e') goto yy181;
        goto yy14;
 yy139:
        yych = (unsigned char)*++cur;
-       if (yych == 'x') goto yy181;
+       if (yych == 'x') goto yy182;
        goto yy14;
 yy140:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy183;
+       if (yych == 'n') goto yy184;
        goto yy14;
 yy141:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy184;
+       if (yych == 'i') goto yy185;
        goto yy14;
 yy142:
        yych = (unsigned char)*++cur;
        if (yych <= 'd') {
-               if (yych == 'c') goto yy185;
+               if (yych == 'c') goto yy186;
                goto yy14;
        } else {
-               if (yych <= 'e') goto yy186;
-               if (yych == 'p') goto yy187;
+               if (yych <= 'e') goto yy187;
+               if (yych == 'p') goto yy188;
                goto yy14;
        }
 yy143:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy188;
+       if (yych == 'r') goto yy189;
        goto yy14;
 yy144:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy189;
+       if (yych == 'i') goto yy190;
        goto yy14;
 yy145:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy190;
+       if (yych == 'o') goto yy191;
        goto yy14;
 yy146:
        yych = (unsigned char)*++cur;
-       if (yych == 'p') goto yy192;
+       if (yych == 'p') goto yy193;
        goto yy14;
 yy147:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy193;
+       if (yych == 'i') goto yy194;
        goto yy14;
 yy148:
        yych = (unsigned char)*++cur;
-       if (yych == 'Y') goto yy194;
+       if (yych == 'Y') goto yy195;
        goto yy14;
 yy149:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy195;
+       if (yych == 't') goto yy196;
        goto yy14;
 yy150:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy196;
+       if (yych == 's') goto yy197;
        goto yy14;
 yy151:
        yych = (unsigned char)*++cur;
-       if (yych == 'm') goto yy197;
+       if (yych == 'm') goto yy198;
        goto yy14;
 yy152:
        yych = (unsigned char)*++cur;
-       if (yych == 'b') goto yy198;
+       if (yych == 'b') goto yy199;
        goto yy14;
 yy153:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy199;
+       if (yych == 'a') goto yy200;
        goto yy14;
 yy154:
        yych = (unsigned char)*++cur;
-       if (yych == 'b') goto yy200;
+       if (yych == 'g') goto yy201;
        goto yy14;
 yy155:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy201;
-       if (yych == 'p') goto yy202;
+       if (yych == 'b') goto yy202;
        goto yy14;
 yy156:
        yych = (unsigned char)*++cur;
-       if (yych == 'c') goto yy203;
+       if (yych == 'i') goto yy203;
+       if (yych == 'p') goto yy204;
        goto yy14;
 yy157:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy204;
+       if (yych == 'c') goto yy205;
        goto yy14;
 yy158:
        yych = (unsigned char)*++cur;
-       if (yych == 'p') goto yy205;
+       if (yych == 'e') goto yy206;
        goto yy14;
 yy159:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy206;
+       if (yych == 'p') goto yy207;
        goto yy14;
 yy160:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy207;
-       if (yych == 'n') goto yy208;
+       if (yych == 's') goto yy208;
        goto yy14;
 yy161:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy209;
+       if (yych == '-') goto yy209;
+       if (yych == 'n') goto yy210;
        goto yy14;
 yy162:
        yych = (unsigned char)*++cur;
-       if (yych == 'u') goto yy210;
+       if (yych == 't') goto yy211;
        goto yy14;
 yy163:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy211;
+       if (yych == 'u') goto yy212;
        goto yy14;
 yy164:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy212;
-       if (yych == 'o') goto yy213;
+       if (yych == 'e') goto yy213;
        goto yy14;
 yy165:
        yych = (unsigned char)*++cur;
-       if (yych == 'g') goto yy214;
+       if (yych == 'a') goto yy214;
+       if (yych == 'o') goto yy215;
        goto yy14;
 yy166:
        yych = (unsigned char)*++cur;
-       if (yych == 'p') goto yy215;
+       if (yych == 'g') goto yy216;
        goto yy14;
 yy167:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy216;
+       if (yych == 'p') goto yy217;
        goto yy14;
 yy168:
        yych = (unsigned char)*++cur;
-       if (yych == 'f') goto yy217;
+       if (yych == 'i') goto yy218;
        goto yy14;
 yy169:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy218;
+       if (yych == 'f') goto yy219;
        goto yy14;
 yy170:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy219;
+       if (yych == 'd') goto yy220;
        goto yy14;
 yy171:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy220;
+       if (yych == 't') goto yy221;
        goto yy14;
 yy172:
        yych = (unsigned char)*++cur;
-       if (yych == 'F') goto yy221;
-       if (yych == 'N') goto yy222;
+       if (yych == 'o') goto yy222;
        goto yy14;
 yy173:
        yych = (unsigned char)*++cur;
-       if (yych == 'f') goto yy223;
+       if (yych == 'F') goto yy223;
+       if (yych == 'N') goto yy224;
        goto yy14;
 yy174:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy224;
+       if (yych == 'f') goto yy225;
        goto yy14;
 yy175:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy225;
+       if (yych == 'e') goto yy226;
        goto yy14;
 yy176:
        yych = (unsigned char)*++cur;
-       if (yych == 'x') goto yy226;
+       if (yych == 'o') goto yy227;
        goto yy14;
 yy177:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy227;
+       if (yych == 'x') goto yy228;
        goto yy14;
 yy178:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy228;
+       if (yych == 'a') goto yy229;
        goto yy14;
 yy179:
        yych = (unsigned char)*++cur;
-       if (yych == 'f') goto yy229;
+       if (yych == 'r') goto yy230;
        goto yy14;
 yy180:
        yych = (unsigned char)*++cur;
-       if (yych == ':') goto yy230;
+       if (yych == 'f') goto yy231;
        goto yy14;
 yy181:
-       ++cur;
-#line 101 "../src/parse/lex_conf.re"
-       { opts.set_yybmHexTable (lex_conf_bool()); return; }
-#line 936 "src/parse/lex_conf.cc"
-yy183:
        yych = (unsigned char)*++cur;
-       if (yych == 'v') goto yy231;
+       if (yych == ':') goto yy232;
        goto yy14;
+yy182:
+       ++cur;
+#line 102 "../src/parse/lex_conf.re"
+       { opts.set_yybmHexTable (lex_conf_bool()); return; }
+#line 942 "src/parse/lex_conf.cc"
 yy184:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy232;
+       if (yych == 'v') goto yy233;
        goto yy14;
 yy185:
        yych = (unsigned char)*++cur;
-       if (yych == 'h') goto yy234;
+       if (yych == 't') goto yy234;
        goto yy14;
 yy186:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy235;
+       if (yych == 'h') goto yy236;
        goto yy14;
 yy187:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy236;
+       if (yych == 'n') goto yy237;
        goto yy14;
 yy188:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy237;
+       if (yych == 'a') goto yy238;
        goto yy14;
 yy189:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy238;
+       if (yych == 'e') goto yy239;
        goto yy14;
 yy190:
+       yych = (unsigned char)*++cur;
+       if (yych == 'd') goto yy240;
+       goto yy14;
+yy191:
        yyaccept = 13;
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == '@') goto yy239;
-yy191:
-#line 85 "../src/parse/lex_conf.re"
-       { opts.set_condGoto         (lex_conf_string ()); return; }
-#line 972 "src/parse/lex_conf.cc"
+       if (yych == '@') goto yy241;
 yy192:
-       yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy240;
-       goto yy14;
+#line 86 "../src/parse/lex_conf.re"
+       { opts.set_condGoto         (lex_conf_string ()); return; }
+#line 978 "src/parse/lex_conf.cc"
 yy193:
        yych = (unsigned char)*++cur;
-       if (yych == 'x') goto yy241;
+       if (yych == 'r') goto yy242;
        goto yy14;
 yy194:
+       yych = (unsigned char)*++cur;
+       if (yych == 'x') goto yy243;
+       goto yy14;
+yy195:
        yych = (unsigned char)*++cur;
        switch (yych) {
-       case 'B':       goto yy243;
-       case 'C':       goto yy244;
-       case 'D':       goto yy245;
-       case 'F':       goto yy246;
-       case 'G':       goto yy247;
-       case 'L':       goto yy248;
-       case 'M':       goto yy249;
-       case 'P':       goto yy250;
-       case 'R':       goto yy251;
-       case 'S':       goto yy252;
+       case 'B':       goto yy245;
+       case 'C':       goto yy246;
+       case 'D':       goto yy247;
+       case 'F':       goto yy248;
+       case 'G':       goto yy249;
+       case 'L':       goto yy250;
+       case 'M':       goto yy251;
+       case 'P':       goto yy252;
+       case 'R':       goto yy253;
+       case 'S':       goto yy254;
        default:        goto yy14;
        }
-yy195:
-       yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy253;
-       goto yy14;
 yy196:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy254;
+       if (yych == '-') goto yy255;
        goto yy14;
 yy197:
        yych = (unsigned char)*++cur;
-       if (yych == 'p') goto yy255;
+       if (yych == 'e') goto yy256;
        goto yy14;
 yy198:
        yych = (unsigned char)*++cur;
-       if (yych == 'u') goto yy256;
+       if (yych == 'p') goto yy257;
        goto yy14;
 yy199:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy257;
+       if (yych == 'u') goto yy258;
        goto yy14;
 yy200:
-       ++cur;
-       goto yy107;
-yy201:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy258;
+       if (yych == '-') goto yy259;
        goto yy14;
-yy202:
+yy201:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy259;
+       if (yych == 'e') goto yy260;
        goto yy14;
+yy202:
+       ++cur;
+       goto yy107;
 yy203:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy260;
+       if (yych == 't') goto yy261;
        goto yy14;
 yy204:
        yych = (unsigned char)*++cur;
-       if (yych == 'x') goto yy261;
+       if (yych == 't') goto yy262;
        goto yy14;
 yy205:
        yych = (unsigned char)*++cur;
-       if (yych == 'u') goto yy262;
+       if (yych == 'o') goto yy263;
        goto yy14;
 yy206:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy263;
+       if (yych == 'x') goto yy264;
        goto yy14;
 yy207:
        yych = (unsigned char)*++cur;
-       if (yych <= 'f') {
-               if (yych == 'd') goto yy264;
-               goto yy14;
-       } else {
-               if (yych <= 'g') goto yy265;
-               if (yych == 'v') goto yy266;
-               goto yy14;
-       }
+       if (yych == 'u') goto yy265;
+       goto yy14;
 yy208:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy267;
+       if (yych == 't') goto yy266;
        goto yy14;
 yy209:
        yych = (unsigned char)*++cur;
-       if (yych == 'p') goto yy268;
-       goto yy14;
+       if (yych <= 'f') {
+               if (yych == 'd') goto yy267;
+               goto yy14;
+       } else {
+               if (yych <= 'g') goto yy268;
+               if (yych == 'v') goto yy269;
+               goto yy14;
+       }
 yy210:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy269;
+       if (yych == '-') goto yy270;
        goto yy14;
 yy211:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy270;
+       if (yych == 'p') goto yy271;
        goto yy14;
 yy212:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy271;
+       if (yych == 's') goto yy272;
        goto yy14;
 yy213:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy272;
+       if (yych == 'l') goto yy273;
        goto yy14;
 yy214:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy98;
+       if (yych == 'r') goto yy274;
        goto yy14;
 yy215:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy273;
+       if (yych == 'r') goto yy275;
        goto yy14;
 yy216:
        yych = (unsigned char)*++cur;
-       if (yych == 'c') goto yy274;
+       if (yych == 's') goto yy98;
        goto yy14;
 yy217:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy275;
+       if (yych == 'e') goto yy276;
        goto yy14;
 yy218:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy276;
+       if (yych == 'c') goto yy277;
        goto yy14;
 yy219:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy277;
+       if (yych == '-') goto yy278;
        goto yy14;
 yy220:
        yych = (unsigned char)*++cur;
-       if (yych == 'p') goto yy278;
+       if (yych == 'e') goto yy279;
        goto yy14;
 yy221:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy280;
+       if (yych == 'r') goto yy280;
        goto yy14;
 yy222:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy281;
+       if (yych == 'p') goto yy281;
        goto yy14;
 yy223:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy282;
+       if (yych == 'i') goto yy283;
        goto yy14;
 yy224:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy283;
+       if (yych == 'e') goto yy284;
        goto yy14;
 yy225:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy285;
+       if (yych == 'i') goto yy285;
        goto yy14;
 yy226:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy286;
+       if (yych == 'l') goto yy286;
        goto yy14;
 yy227:
        yych = (unsigned char)*++cur;
-       if (yych == 'u') goto yy287;
+       if (yych == 'r') goto yy288;
        goto yy14;
 yy228:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy288;
+       if (yych == 't') goto yy289;
        goto yy14;
 yy229:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy289;
+       if (yych == 'u') goto yy290;
        goto yy14;
 yy230:
        yych = (unsigned char)*++cur;
-       if (yych == 'y') goto yy290;
+       if (yych == 'e') goto yy291;
        goto yy14;
 yy231:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy291;
+       if (yych == 'i') goto yy292;
        goto yy14;
 yy232:
-       ++cur;
-#line 151 "../src/parse/lex_conf.re"
-       { opts.set_bEmitYYCh      (lex_conf_bool()); return; }
-#line 1153 "src/parse/lex_conf.cc"
-yy234:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy292;
+       if (yych == 'y') goto yy293;
        goto yy14;
-yy235:
+yy233:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy293;
+       if (yych == 'e') goto yy294;
        goto yy14;
+yy234:
+       ++cur;
+#line 152 "../src/parse/lex_conf.re"
+       { opts.set_bEmitYYCh      (lex_conf_bool()); return; }
+#line 1163 "src/parse/lex_conf.cc"
 yy236:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy294;
+       if (yych == 'e') goto yy295;
        goto yy14;
 yy237:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy295;
+       if (yych == 'a') goto yy296;
        goto yy14;
 yy238:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy296;
+       if (yych == 'r') goto yy297;
        goto yy14;
 yy239:
        yych = (unsigned char)*++cur;
-       if (yych == 'c') goto yy297;
+       if (yych == 's') goto yy298;
        goto yy14;
 yy240:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy298;
+       if (yych == 'e') goto yy299;
        goto yy14;
 yy241:
+       yych = (unsigned char)*++cur;
+       if (yych == 'c') goto yy300;
+       goto yy14;
+yy242:
+       yych = (unsigned char)*++cur;
+       if (yych == 'e') goto yy301;
+       goto yy14;
+yy243:
        ++cur;
-#line 81 "../src/parse/lex_conf.re"
+#line 82 "../src/parse/lex_conf.re"
        { opts.set_condPrefix       (lex_conf_string ()); return; }
-#line 1186 "src/parse/lex_conf.cc"
-yy243:
+#line 1196 "src/parse/lex_conf.cc"
+yy245:
        yych = (unsigned char)*++cur;
-       if (yych == 'A') goto yy299;
+       if (yych == 'A') goto yy302;
        goto yy14;
-yy244:
+yy246:
        yych = (unsigned char)*++cur;
        if (yych <= 'S') {
-               if (yych == 'O') goto yy300;
+               if (yych == 'O') goto yy303;
                goto yy14;
        } else {
-               if (yych <= 'T') goto yy301;
-               if (yych <= 'U') goto yy302;
+               if (yych <= 'T') goto yy304;
+               if (yych <= 'U') goto yy305;
                goto yy14;
        }
-yy245:
-       yych = (unsigned char)*++cur;
-       if (yych == 'E') goto yy303;
-       goto yy14;
-yy246:
-       yych = (unsigned char)*++cur;
-       if (yych == 'I') goto yy304;
-       goto yy14;
 yy247:
        yych = (unsigned char)*++cur;
-       if (yych == 'E') goto yy305;
+       if (yych == 'E') goto yy306;
        goto yy14;
 yy248:
        yych = (unsigned char)*++cur;
-       if (yych == 'E') goto yy306;
        if (yych == 'I') goto yy307;
        goto yy14;
 yy249:
        yych = (unsigned char)*++cur;
-       if (yych == 'A') goto yy308;
+       if (yych == 'E') goto yy308;
        goto yy14;
 yy250:
        yych = (unsigned char)*++cur;
        if (yych == 'E') goto yy309;
+       if (yych == 'I') goto yy310;
        goto yy14;
 yy251:
        yych = (unsigned char)*++cur;
-       if (yych == 'E') goto yy310;
+       if (yych == 'A') goto yy311;
        goto yy14;
 yy252:
        yych = (unsigned char)*++cur;
-       if (yych == 'E') goto yy311;
-       if (yych == 'K') goto yy312;
+       if (yych == 'E') goto yy312;
        goto yy14;
 yy253:
        yych = (unsigned char)*++cur;
-       if (yych == 'v') goto yy313;
+       if (yych == 'E') goto yy313;
        goto yy14;
 yy254:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy314;
+       if (yych == 'E') goto yy314;
+       if (yych == 'K') goto yy315;
        goto yy14;
 yy255:
        yych = (unsigned char)*++cur;
-       if (yych == 'u') goto yy315;
+       if (yych == 'v') goto yy316;
        goto yy14;
 yy256:
        yych = (unsigned char)*++cur;
-       if (yych == 'g') goto yy316;
+       if (yych == '-') goto yy317;
        goto yy14;
 yy257:
        yych = (unsigned char)*++cur;
-       if (yych == 'm') goto yy317;
+       if (yych == 'u') goto yy318;
        goto yy14;
 yy258:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy318;
+       if (yych == 'g') goto yy319;
        goto yy14;
 yy259:
        yych = (unsigned char)*++cur;
-       if (yych == 'y') goto yy319;
+       if (yych == 'm') goto yy320;
        goto yy14;
 yy260:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy320;
+       if (yych == 'r') goto yy321;
        goto yy14;
 yy261:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy321;
+       if (yych == '-') goto yy322;
        goto yy14;
 yy262:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy322;
+       if (yych == 'y') goto yy323;
        goto yy14;
 yy263:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy324;
+       if (yych == 'd') goto yy324;
        goto yy14;
 yy264:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy325;
+       if (yych == '-') goto yy325;
        goto yy14;
 yy265:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy326;
+       if (yych == 't') goto yy326;
        goto yy14;
 yy266:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy327;
+       if (yych == 'e') goto yy328;
        goto yy14;
 yy267:
        yych = (unsigned char)*++cur;
-       if (yych == 'b') goto yy328;
+       if (yych == 'e') goto yy329;
        goto yy14;
 yy268:
        yych = (unsigned char)*++cur;
-       if (yych == 'u') goto yy329;
+       if (yych == 'e') goto yy330;
        goto yy14;
 yy269:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy330;
+       if (yych == 'e') goto yy331;
        goto yy14;
 yy270:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy331;
+       if (yych == 'b') goto yy332;
        goto yy14;
 yy271:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy332;
+       if (yych == 'u') goto yy333;
        goto yy14;
 yy272:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy333;
+       if (yych == 'a') goto yy334;
        goto yy14;
 yy273:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy334;
+       if (yych == 'e') goto yy335;
        goto yy14;
 yy274:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy335;
+       if (yych == 't') goto yy336;
        goto yy14;
 yy275:
        yych = (unsigned char)*++cur;
-       if (yych == '1') goto yy336;
-       if (yych == '8') goto yy90;
+       if (yych == 'a') goto yy337;
        goto yy14;
 yy276:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy337;
+       if (yych == '-') goto yy338;
        goto yy14;
 yy277:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy338;
+       if (yych == 'o') goto yy339;
        goto yy14;
 yy278:
+       yych = (unsigned char)*++cur;
+       if (yych == '1') goto yy340;
+       if (yych == '8') goto yy90;
+       goto yy14;
+yy279:
+       yych = (unsigned char)*++cur;
+       if (yych == '-') goto yy341;
+       goto yy14;
+yy280:
+       yych = (unsigned char)*++cur;
+       if (yych == 'i') goto yy342;
+       goto yy14;
+yy281:
        ++cur;
-#line 136 "../src/parse/lex_conf.re"
+#line 137 "../src/parse/lex_conf.re"
        {
                const int32_t n = lex_conf_number ();
                if (n < 0)
@@ -1344,1958 +1358,1983 @@ yy278:
                opts.set_topIndent (static_cast<uint32_t> (n));
                return;
        }
-#line 1348 "src/parse/lex_conf.cc"
-yy280:
+#line 1362 "src/parse/lex_conf.cc"
+yy283:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy339;
+       if (yych == 'l') goto yy343;
        goto yy14;
-yy281:
+yy284:
        yych = (unsigned char)*++cur;
-       if (yych == 'x') goto yy340;
+       if (yych == 'x') goto yy344;
        goto yy14;
-yy282:
+yy285:
        yych = (unsigned char)*++cur;
-       if (yych == 'x') goto yy341;
+       if (yych == 'x') goto yy345;
        goto yy14;
-yy283:
+yy286:
        yyaccept = 14;
        yych = (unsigned char)*(ptr = ++cur);
        if (yych <= 0x1F) {
                if (yych == '\t') {
                        ctx = cur;
-                       goto yy343;
+                       goto yy347;
                }
        } else {
                if (yych <= ' ') {
                        ctx = cur;
-                       goto yy343;
+                       goto yy347;
                }
                if (yych == '=') {
                        ctx = cur;
-                       goto yy345;
+                       goto yy349;
                }
        }
-yy284:
-#line 164 "../src/parse/lex_conf.re"
-       { opts.set_startlabel       (lex_conf_string()); return; }
-#line 1382 "src/parse/lex_conf.cc"
-yy285:
-       yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy347;
-       goto yy14;
-yy286:
-       yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy349;
-       goto yy14;
 yy287:
-       yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy350;
-       goto yy14;
+#line 165 "../src/parse/lex_conf.re"
+       { opts.set_startlabel       (lex_conf_string()); return; }
+#line 1396 "src/parse/lex_conf.cc"
 yy288:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy351;
+       if (yych == 't') goto yy351;
        goto yy14;
 yy289:
        yych = (unsigned char)*++cur;
-       if (yych == 'x') goto yy352;
+       if (yych == 'l') goto yy353;
        goto yy14;
 yy290:
        yych = (unsigned char)*++cur;
-       if (yych == 'y') goto yy354;
+       if (yych == 'l') goto yy354;
        goto yy14;
 yy291:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy355;
+       if (yych == 's') goto yy355;
        goto yy14;
 yy292:
        yych = (unsigned char)*++cur;
-       if (yych == 'c') goto yy356;
+       if (yych == 'x') goto yy356;
        goto yy14;
 yy293:
        yych = (unsigned char)*++cur;
-       if (yych == 'b') goto yy357;
+       if (yych == 'y') goto yy358;
        goto yy14;
 yy294:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy358;
+       if (yych == 'r') goto yy359;
        goto yy14;
 yy295:
        yych = (unsigned char)*++cur;
-       if (yych == 'h') goto yy359;
+       if (yych == 'c') goto yy360;
        goto yy14;
 yy296:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy360;
+       if (yych == 'b') goto yy361;
        goto yy14;
 yy297:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy362;
+       if (yych == 'a') goto yy362;
        goto yy14;
 yy298:
        yych = (unsigned char)*++cur;
-       if (yych == 'f') goto yy363;
+       if (yych == 'h') goto yy363;
        goto yy14;
 yy299:
        yych = (unsigned char)*++cur;
-       if (yych == 'C') goto yy364;
+       if (yych == 'r') goto yy364;
        goto yy14;
 yy300:
        yych = (unsigned char)*++cur;
-       if (yych == 'N') goto yy365;
-       if (yych == 'P') goto yy366;
+       if (yych == 'o') goto yy366;
        goto yy14;
 yy301:
        yych = (unsigned char)*++cur;
-       if (yych <= 'W') goto yy14;
-       if (yych <= 'X') goto yy367;
-       if (yych <= 'Y') goto yy368;
+       if (yych == 'f') goto yy367;
        goto yy14;
 yy302:
        yych = (unsigned char)*++cur;
-       if (yych == 'R') goto yy369;
+       if (yych == 'C') goto yy368;
        goto yy14;
 yy303:
        yych = (unsigned char)*++cur;
-       if (yych == 'B') goto yy370;
+       if (yych == 'N') goto yy369;
+       if (yych == 'P') goto yy370;
        goto yy14;
 yy304:
        yych = (unsigned char)*++cur;
-       if (yych == 'L') goto yy371;
+       if (yych <= 'W') goto yy14;
+       if (yych <= 'X') goto yy371;
+       if (yych <= 'Y') goto yy372;
        goto yy14;
 yy305:
        yych = (unsigned char)*++cur;
-       if (yych == 'T') goto yy372;
+       if (yych == 'R') goto yy373;
        goto yy14;
 yy306:
        yych = (unsigned char)*++cur;
-       if (yych == 'S') goto yy373;
+       if (yych == 'B') goto yy374;
        goto yy14;
 yy307:
        yych = (unsigned char)*++cur;
-       if (yych == 'M') goto yy374;
+       if (yych == 'L') goto yy375;
        goto yy14;
 yy308:
        yych = (unsigned char)*++cur;
-       if (yych == 'R') goto yy375;
+       if (yych == 'T') goto yy376;
        goto yy14;
 yy309:
        yych = (unsigned char)*++cur;
-       if (yych == 'E') goto yy376;
+       if (yych == 'S') goto yy377;
        goto yy14;
 yy310:
        yych = (unsigned char)*++cur;
-       if (yych == 'S') goto yy377;
+       if (yych == 'M') goto yy378;
        goto yy14;
 yy311:
        yych = (unsigned char)*++cur;
-       if (yych == 'T') goto yy378;
+       if (yych == 'R') goto yy379;
        goto yy14;
 yy312:
        yych = (unsigned char)*++cur;
-       if (yych == 'I') goto yy379;
+       if (yych == 'E') goto yy380;
        goto yy14;
 yy313:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy380;
+       if (yych == 'S') goto yy381;
        goto yy14;
 yy314:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy381;
+       if (yych == 'T') goto yy382;
        goto yy14;
 yy315:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy382;
+       if (yych == 'I') goto yy383;
        goto yy14;
 yy316:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy383;
+       if (yych == 'e') goto yy384;
        goto yy14;
 yy317:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy384;
+       if (yych == 'i') goto yy385;
        goto yy14;
 yy318:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy385;
+       if (yych == 't') goto yy386;
        goto yy14;
 yy319:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy386;
+       if (yych == '-') goto yy387;
        goto yy14;
 yy320:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy387;
+       if (yych == 'i') goto yy388;
        goto yy14;
 yy321:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy388;
+       if (yych == '-') goto yy389;
        goto yy14;
 yy322:
-       ++cur;
-#line 71 "../src/parse/lex_conf.re"
-       { lex_conf_input();            return; }
-#line 1538 "src/parse/lex_conf.cc"
-yy324:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy389;
+       if (yych == 'd') goto yy390;
        goto yy14;
-yy325:
+yy323:
        yych = (unsigned char)*++cur;
-       if (yych == 'b') goto yy390;
+       if (yych == '-') goto yy391;
        goto yy14;
-yy326:
+yy324:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy391;
+       if (yych == 'i') goto yy392;
        goto yy14;
-yy327:
+yy325:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy392;
+       if (yych == 's') goto yy393;
        goto yy14;
+yy326:
+       ++cur;
+#line 72 "../src/parse/lex_conf.re"
+       { lex_conf_input();            return; }
+#line 1556 "src/parse/lex_conf.cc"
 yy328:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy393;
+       if (yych == 'd') goto yy394;
        goto yy14;
 yy329:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy394;
+       if (yych == 'b') goto yy395;
        goto yy14;
 yy330:
        yych = (unsigned char)*++cur;
-       if (yych == 'b') goto yy395;
+       if (yych == 'n') goto yy396;
        goto yy14;
 yy331:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy396;
+       if (yych == 'r') goto yy397;
        goto yy14;
 yy332:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy397;
+       if (yych == 'i') goto yy398;
        goto yy14;
 yy333:
        yych = (unsigned char)*++cur;
-       if (yych == 'b') goto yy398;
+       if (yych == 't') goto yy399;
        goto yy14;
 yy334:
        yych = (unsigned char)*++cur;
-       if (yych == 'h') goto yy399;
+       if (yych == 'b') goto yy400;
        goto yy14;
 yy335:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy400;
+       if (yych == 't') goto yy401;
        goto yy14;
 yy336:
        yych = (unsigned char)*++cur;
-       if (yych == '6') goto yy127;
+       if (yych == '-') goto yy402;
        goto yy14;
 yy337:
        yych = (unsigned char)*++cur;
-       if (yych == 'c') goto yy401;
+       if (yych == 'b') goto yy403;
        goto yy14;
 yy338:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy402;
+       if (yych == 'h') goto yy404;
        goto yy14;
 yy339:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy403;
+       if (yych == 'd') goto yy405;
        goto yy14;
 yy340:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy404;
+       if (yych == '6') goto yy127;
        goto yy14;
 yy341:
+       yych = (unsigned char)*++cur;
+       if (yych == 'c') goto yy406;
+       goto yy14;
+yy342:
+       yych = (unsigned char)*++cur;
+       if (yych == 'n') goto yy407;
+       goto yy14;
+yy343:
+       yych = (unsigned char)*++cur;
+       if (yych == 'l') goto yy408;
+       goto yy14;
+yy344:
+       yych = (unsigned char)*++cur;
+       if (yych == 't') goto yy409;
+       goto yy14;
+yy345:
        ++cur;
-#line 160 "../src/parse/lex_conf.re"
+#line 161 "../src/parse/lex_conf.re"
        { opts.set_labelPrefix (lex_conf_string ()); return; }
-#line 1611 "src/parse/lex_conf.cc"
-yy343:
+#line 1629 "src/parse/lex_conf.cc"
+yy347:
        ++cur;
        if (lim <= cur) fill(1);
        yych = (unsigned char)*cur;
        if (yybm[0+yych] & 64) {
-               goto yy343;
+               goto yy347;
        }
        if (yych != '=') goto yy14;
-yy345:
+yy349:
        ++cur;
        if ((lim - cur) < 2) fill(2);
        yych = (unsigned char)*cur;
        if (yych <= ',') {
                if (yych <= '\t') {
                        if (yych <= 0x08) goto yy14;
-                       goto yy345;
+                       goto yy349;
                } else {
-                       if (yych == ' ') goto yy345;
+                       if (yych == ' ') goto yy349;
                        goto yy14;
                }
        } else {
                if (yych <= '/') {
-                       if (yych <= '-') goto yy406;
+                       if (yych <= '-') goto yy411;
                        goto yy14;
                } else {
-                       if (yych <= '0') goto yy407;
-                       if (yych <= '9') goto yy409;
+                       if (yych <= '0') goto yy412;
+                       if (yych <= '9') goto yy414;
                        goto yy14;
                }
        }
-yy347:
+yy351:
        ++cur;
-#line 96 "../src/parse/lex_conf.re"
+#line 97 "../src/parse/lex_conf.re"
        { opts.set_bUseStateAbort  (lex_conf_bool()); return; }
-#line 1646 "src/parse/lex_conf.cc"
-yy349:
+#line 1664 "src/parse/lex_conf.cc"
+yy353:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy411;
+       if (yych == 'a') goto yy416;
        goto yy14;
-yy350:
+yy354:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy412;
+       if (yych == 't') goto yy417;
        goto yy14;
-yy351:
+yy355:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy414;
+       if (yych == 's') goto yy419;
        goto yy14;
-yy352:
+yy356:
        ++cur;
-#line 131 "../src/parse/lex_conf.re"
+#line 132 "../src/parse/lex_conf.re"
        { opts.set_tags_prefix    (lex_conf_string ()); return; }
-#line 1663 "src/parse/lex_conf.cc"
-yy354:
+#line 1681 "src/parse/lex_conf.cc"
+yy358:
        yych = (unsigned char)*++cur;
        if (yych <= 'c') {
                if (yych <= '`') goto yy14;
-               if (yych <= 'a') goto yy415;
-               if (yych <= 'b') goto yy416;
-               goto yy417;
+               if (yych <= 'a') goto yy420;
+               if (yych <= 'b') goto yy421;
+               goto yy422;
        } else {
                if (yych <= 'r') goto yy14;
-               if (yych <= 's') goto yy418;
-               if (yych <= 't') goto yy419;
+               if (yych <= 's') goto yy423;
+               if (yych <= 't') goto yy424;
                goto yy14;
        }
-yy355:
-       yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy420;
-       goto yy14;
-yy356:
-       yych = (unsigned char)*++cur;
-       if (yych == 'k') goto yy421;
-       goto yy14;
-yy357:
+yy359:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy423;
+       if (yych == 's') goto yy425;
        goto yy14;
-yy358:
+yy360:
        yych = (unsigned char)*++cur;
-       if (yych == 'm') goto yy424;
+       if (yych == 'k') goto yy426;
        goto yy14;
-yy359:
+yy361:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy425;
+       if (yych == 'l') goto yy428;
        goto yy14;
-yy360:
-       yyaccept = 15;
-       yych = (unsigned char)*(ptr = ++cur);
-       if (yych == '@') goto yy426;
-yy361:
-#line 83 "../src/parse/lex_conf.re"
-       { opts.set_condDivider      (lex_conf_string ()); return; }
-#line 1704 "src/parse/lex_conf.cc"
 yy362:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy427;
+       if (yych == 'm') goto yy429;
        goto yy14;
 yy363:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy428;
+       if (yych == 'o') goto yy430;
        goto yy14;
 yy364:
-       yych = (unsigned char)*++cur;
-       if (yych == 'K') goto yy429;
-       goto yy14;
+       yyaccept = 15;
+       yych = (unsigned char)*(ptr = ++cur);
+       if (yych == '@') goto yy431;
 yy365:
-       yych = (unsigned char)*++cur;
-       if (yych == 'D') goto yy430;
-       goto yy14;
+#line 84 "../src/parse/lex_conf.re"
+       { opts.set_condDivider      (lex_conf_string ()); return; }
+#line 1722 "src/parse/lex_conf.cc"
 yy366:
        yych = (unsigned char)*++cur;
-       if (yych == 'Y') goto yy431;
+       if (yych == 'n') goto yy432;
        goto yy14;
 yy367:
        yych = (unsigned char)*++cur;
-       if (yych == 'M') goto yy432;
+       if (yych == 'i') goto yy433;
        goto yy14;
 yy368:
        yych = (unsigned char)*++cur;
-       if (yych == 'P') goto yy433;
+       if (yych == 'K') goto yy434;
        goto yy14;
 yy369:
        yych = (unsigned char)*++cur;
-       if (yych == 'S') goto yy434;
+       if (yych == 'D') goto yy435;
        goto yy14;
 yy370:
        yych = (unsigned char)*++cur;
-       if (yych == 'U') goto yy435;
+       if (yych == 'Y') goto yy436;
        goto yy14;
 yy371:
        yych = (unsigned char)*++cur;
-       if (yych == 'L') goto yy436;
+       if (yych == 'M') goto yy437;
        goto yy14;
 yy372:
        yych = (unsigned char)*++cur;
-       if (yych == 'C') goto yy438;
-       if (yych == 'S') goto yy439;
+       if (yych == 'P') goto yy438;
        goto yy14;
 yy373:
        yych = (unsigned char)*++cur;
-       if (yych == 'S') goto yy440;
+       if (yych == 'S') goto yy439;
        goto yy14;
 yy374:
        yych = (unsigned char)*++cur;
-       if (yych == 'I') goto yy441;
+       if (yych == 'U') goto yy440;
        goto yy14;
 yy375:
        yych = (unsigned char)*++cur;
-       if (yych == 'K') goto yy442;
+       if (yych == 'L') goto yy441;
        goto yy14;
 yy376:
        yych = (unsigned char)*++cur;
-       if (yych == 'K') goto yy443;
+       if (yych == 'C') goto yy443;
+       if (yych == 'S') goto yy444;
        goto yy14;
 yy377:
        yych = (unsigned char)*++cur;
-       if (yych == 'T') goto yy445;
+       if (yych == 'S') goto yy445;
        goto yy14;
 yy378:
        yych = (unsigned char)*++cur;
-       if (yych == 'C') goto yy446;
-       if (yych == 'S') goto yy447;
+       if (yych == 'I') goto yy446;
        goto yy14;
 yy379:
        yych = (unsigned char)*++cur;
-       if (yych == 'P') goto yy448;
+       if (yych == 'K') goto yy447;
        goto yy14;
 yy380:
        yych = (unsigned char)*++cur;
-       if (yych == 'c') goto yy450;
+       if (yych == 'K') goto yy448;
        goto yy14;
 yy381:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy451;
+       if (yych == 'T') goto yy450;
        goto yy14;
 yy382:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy452;
+       if (yych == 'C') goto yy451;
+       if (yych == 'S') goto yy452;
        goto yy14;
 yy383:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy453;
+       if (yych == 'P') goto yy453;
        goto yy14;
 yy384:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy454;
+       if (yych == 'c') goto yy455;
        goto yy14;
 yy385:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy455;
+       if (yych == 'n') goto yy456;
        goto yy14;
 yy386:
        yych = (unsigned char)*++cur;
-       if (yych == 'c') goto yy456;
+       if (yych == 'e') goto yy457;
        goto yy14;
 yy387:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy457;
+       if (yych == 'o') goto yy458;
        goto yy14;
 yy388:
        yych = (unsigned char)*++cur;
-       if (yych == 'y') goto yy458;
+       if (yych == 'n') goto yy459;
        goto yy14;
 yy389:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy459;
+       if (yych == 's') goto yy460;
        goto yy14;
 yy390:
        yych = (unsigned char)*++cur;
-       if (yych == 'u') goto yy460;
+       if (yych == 'o') goto yy461;
        goto yy14;
 yy391:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy461;
+       if (yych == 'c') goto yy462;
        goto yy14;
 yy392:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy462;
+       if (yych == 'n') goto yy463;
        goto yy14;
 yy393:
        yych = (unsigned char)*++cur;
-       if (yych == 'j') goto yy463;
+       if (yych == 'y') goto yy464;
        goto yy14;
 yy394:
-       ++cur;
-       goto yy116;
+       yych = (unsigned char)*++cur;
+       if (yych == '-') goto yy465;
+       goto yy14;
 yy395:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy464;
+       if (yych == 'u') goto yy466;
        goto yy14;
 yy396:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy465;
+       if (yych == 'e') goto yy467;
        goto yy14;
 yy397:
        yych = (unsigned char)*++cur;
-       if (yych == 'c') goto yy466;
+       if (yych == 's') goto yy468;
        goto yy14;
 yy398:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy467;
+       if (yych == 'j') goto yy469;
        goto yy14;
 yy399:
-       yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy468;
-       goto yy14;
+       ++cur;
+       goto yy116;
 yy400:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy469;
+       if (yych == 'l') goto yy470;
        goto yy14;
 yy401:
        yych = (unsigned char)*++cur;
-       if (yych == 'h') goto yy470;
+       if (yych == 'o') goto yy471;
        goto yy14;
 yy402:
        yych = (unsigned char)*++cur;
-       if (yych == 'g') goto yy471;
+       if (yych == 'c') goto yy472;
        goto yy14;
 yy403:
        yych = (unsigned char)*++cur;
-       if (yych == 'L') goto yy473;
+       if (yych == 'l') goto yy473;
        goto yy14;
 yy404:
-       ++cur;
-#line 95 "../src/parse/lex_conf.re"
-       { opts.set_yynext          (lex_conf_string ()); return; }
-#line 1878 "src/parse/lex_conf.cc"
+       yych = (unsigned char)*++cur;
+       if (yych == 'e') goto yy474;
+       goto yy14;
+yy405:
+       yych = (unsigned char)*++cur;
+       if (yych == 'e') goto yy475;
+       goto yy14;
 yy406:
        yych = (unsigned char)*++cur;
-       if (yych <= '0') goto yy14;
-       if (yych <= '9') goto yy409;
+       if (yych == 'h') goto yy476;
        goto yy14;
 yy407:
-       ++cur;
+       yych = (unsigned char)*++cur;
+       if (yych == 'g') goto yy477;
+       goto yy14;
 yy408:
-       cur = ctx;
-#line 163 "../src/parse/lex_conf.re"
-       { opts.set_startlabel_force (lex_conf_bool());   return; }
-#line 1890 "src/parse/lex_conf.cc"
+       yych = (unsigned char)*++cur;
+       if (yych == 'L') goto yy479;
+       goto yy14;
 yy409:
        ++cur;
-       if (lim <= cur) fill(1);
-       yych = (unsigned char)*cur;
-       if (yybm[0+yych] & 128) {
-               goto yy409;
-       }
-       goto yy408;
+#line 96 "../src/parse/lex_conf.re"
+       { opts.set_yynext          (lex_conf_string ()); return; }
+#line 1900 "src/parse/lex_conf.cc"
 yy411:
        yych = (unsigned char)*++cur;
-       if (yych == 'b') goto yy474;
+       if (yych <= '0') goto yy14;
+       if (yych <= '9') goto yy414;
        goto yy14;
 yy412:
        ++cur;
-#line 130 "../src/parse/lex_conf.re"
-       { opts.set_tags_default   (lex_conf_string ()); return; }
-#line 1907 "src/parse/lex_conf.cc"
+yy413:
+       cur = ctx;
+#line 164 "../src/parse/lex_conf.re"
+       { opts.set_startlabel_force (lex_conf_bool());   return; }
+#line 1912 "src/parse/lex_conf.cc"
 yy414:
-       yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy475;
-       goto yy14;
-yy415:
-       yych = (unsigned char)*++cur;
-       if (yych == 'c') goto yy476;
-       goto yy14;
+       ++cur;
+       if (lim <= cur) fill(1);
+       yych = (unsigned char)*cur;
+       if (yybm[0+yych] & 128) {
+               goto yy414;
+       }
+       goto yy413;
 yy416:
        yych = (unsigned char)*++cur;
-       if (yych == 'm') goto yy477;
+       if (yych == 'b') goto yy480;
        goto yy14;
 yy417:
+       ++cur;
+#line 131 "../src/parse/lex_conf.re"
+       { opts.set_tags_default   (lex_conf_string ()); return; }
+#line 1929 "src/parse/lex_conf.cc"
+yy419:
        yych = (unsigned char)*++cur;
-       if (yych == 'h') goto yy479;
-       if (yych == 't') goto yy481;
+       if (yych == 'i') goto yy481;
        goto yy14;
-yy418:
+yy420:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy482;
+       if (yych == 'c') goto yy482;
        goto yy14;
-yy419:
+yy421:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy483;
+       if (yych == 'm') goto yy483;
        goto yy14;
-yy420:
+yy422:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy484;
+       if (yych == 'h') goto yy485;
+       if (yych == 't') goto yy487;
        goto yy14;
-yy421:
-       ++cur;
-#line 158 "../src/parse/lex_conf.re"
-       { opts.set_fill_check   (lex_conf_bool()); return; }
-#line 1941 "src/parse/lex_conf.cc"
 yy423:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy485;
+       if (yych == 't') goto yy488;
        goto yy14;
 yy424:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy487;
+       if (yych == 'a') goto yy489;
        goto yy14;
 yy425:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy488;
+       if (yych == 'i') goto yy490;
        goto yy14;
 yy426:
-       yych = (unsigned char)*++cur;
-       if (yych == 'c') goto yy489;
-       goto yy14;
-yy427:
-       yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy490;
-       goto yy14;
+       ++cur;
+#line 159 "../src/parse/lex_conf.re"
+       { opts.set_fill_check   (lex_conf_bool()); return; }
+#line 1963 "src/parse/lex_conf.cc"
 yy428:
        yych = (unsigned char)*++cur;
-       if (yych == 'x') goto yy492;
+       if (yych == 'e') goto yy491;
        goto yy14;
 yy429:
        yych = (unsigned char)*++cur;
-       if (yych == 'U') goto yy494;
+       if (yych == 'e') goto yy493;
        goto yy14;
 yy430:
        yych = (unsigned char)*++cur;
-       if (yych == 'T') goto yy495;
+       if (yych == 'l') goto yy494;
        goto yy14;
 yy431:
        yych = (unsigned char)*++cur;
-       if (yych == 'T') goto yy496;
+       if (yych == 'c') goto yy495;
        goto yy14;
 yy432:
        yych = (unsigned char)*++cur;
-       if (yych == 'A') goto yy497;
+       if (yych == 'd') goto yy496;
        goto yy14;
 yy433:
        yych = (unsigned char)*++cur;
-       if (yych == 'E') goto yy498;
+       if (yych == 'x') goto yy498;
        goto yy14;
 yy434:
        yych = (unsigned char)*++cur;
-       if (yych == 'O') goto yy500;
+       if (yych == 'U') goto yy500;
        goto yy14;
 yy435:
        yych = (unsigned char)*++cur;
-       if (yych == 'G') goto yy501;
+       if (yych == 'T') goto yy501;
        goto yy14;
 yy436:
-       yyaccept = 16;
-       yych = (unsigned char)*(ptr = ++cur);
-       if (yych == ':') goto yy503;
-       if (yych == '@') goto yy504;
-yy437:
-#line 153 "../src/parse/lex_conf.re"
-       { opts.set_fill         (lex_conf_string ()); return; }
-#line 2002 "src/parse/lex_conf.cc"
+       yych = (unsigned char)*++cur;
+       if (yych == 'T') goto yy502;
+       goto yy14;
+yy437:
+       yych = (unsigned char)*++cur;
+       if (yych == 'A') goto yy503;
+       goto yy14;
 yy438:
        yych = (unsigned char)*++cur;
-       if (yych == 'O') goto yy505;
+       if (yych == 'E') goto yy504;
        goto yy14;
 yy439:
        yych = (unsigned char)*++cur;
-       if (yych == 'T') goto yy506;
+       if (yych == 'O') goto yy506;
        goto yy14;
 yy440:
        yych = (unsigned char)*++cur;
-       if (yych == 'T') goto yy507;
+       if (yych == 'G') goto yy507;
        goto yy14;
 yy441:
+       yyaccept = 16;
+       yych = (unsigned char)*(ptr = ++cur);
+       if (yych == ':') goto yy509;
+       if (yych == '@') goto yy510;
+yy442:
+#line 154 "../src/parse/lex_conf.re"
+       { opts.set_fill         (lex_conf_string ()); return; }
+#line 2024 "src/parse/lex_conf.cc"
+yy443:
        yych = (unsigned char)*++cur;
-       if (yych == 'T') goto yy508;
+       if (yych == 'O') goto yy511;
        goto yy14;
-yy442:
+yy444:
        yych = (unsigned char)*++cur;
-       if (yych == 'E') goto yy510;
+       if (yych == 'T') goto yy512;
        goto yy14;
-yy443:
-       ++cur;
-#line 119 "../src/parse/lex_conf.re"
-       { opts.set_yypeek       (lex_conf_string ()); return; }
-#line 2027 "src/parse/lex_conf.cc"
 yy445:
        yych = (unsigned char)*++cur;
-       if (yych == 'O') goto yy511;
+       if (yych == 'T') goto yy513;
        goto yy14;
 yy446:
        yych = (unsigned char)*++cur;
-       if (yych == 'O') goto yy512;
+       if (yych == 'T') goto yy514;
        goto yy14;
 yy447:
        yych = (unsigned char)*++cur;
-       if (yych == 'T') goto yy513;
+       if (yych == 'E') goto yy516;
        goto yy14;
 yy448:
        ++cur;
 #line 120 "../src/parse/lex_conf.re"
-       { opts.set_yyskip       (lex_conf_string ()); return; }
-#line 2044 "src/parse/lex_conf.cc"
+       { opts.set_yypeek       (lex_conf_string ()); return; }
+#line 2049 "src/parse/lex_conf.cc"
 yy450:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy514;
+       if (yych == 'O') goto yy517;
        goto yy14;
 yy451:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy515;
-       if (yych == 'v') goto yy516;
+       if (yych == 'O') goto yy518;
        goto yy14;
 yy452:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy517;
+       if (yych == 'T') goto yy519;
        goto yy14;
 yy453:
-       yych = (unsigned char)*++cur;
-       if (yych == 'u') goto yy518;
-       goto yy14;
-yy454:
-       yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy519;
-       goto yy14;
+       ++cur;
+#line 121 "../src/parse/lex_conf.re"
+       { opts.set_yyskip       (lex_conf_string ()); return; }
+#line 2066 "src/parse/lex_conf.cc"
 yy455:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy92;
+       if (yych == 't') goto yy520;
        goto yy14;
 yy456:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy520;
+       if (yych == 's') goto yy521;
+       if (yych == 'v') goto yy522;
        goto yy14;
 yy457:
        yych = (unsigned char)*++cur;
-       if (yych == 'g') goto yy521;
+       if (yych == 'd') goto yy523;
        goto yy14;
 yy458:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy522;
+       if (yych == 'u') goto yy524;
        goto yy14;
 yy459:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy523;
+       if (yych == 'i') goto yy525;
        goto yy14;
 yy460:
        yych = (unsigned char)*++cur;
-       if (yych == 'g') goto yy524;
+       if (yych == 'k') goto yy526;
        goto yy14;
 yy461:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy525;
+       if (yych == 't') goto yy92;
        goto yy14;
 yy462:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy526;
+       if (yych == 'l') goto yy527;
        goto yy14;
 yy463:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy527;
+       if (yych == 'g') goto yy528;
        goto yy14;
 yy464:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy528;
+       if (yych == 'n') goto yy529;
        goto yy14;
 yy465:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy96;
+       if (yych == 'i') goto yy530;
        goto yy14;
 yy466:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy529;
+       if (yych == 'g') goto yy531;
        goto yy14;
 yy467:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy530;
+       if (yych == 'r') goto yy532;
        goto yy14;
 yy468:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy531;
+       if (yych == 'i') goto yy533;
        goto yy14;
 yy469:
-       ++cur;
-       goto yy124;
+       yych = (unsigned char)*++cur;
+       if (yych == 'e') goto yy534;
+       goto yy14;
 yy470:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy532;
+       if (yych == 'e') goto yy535;
        goto yy14;
 yy471:
-       ++cur;
-#line 134 "../src/parse/lex_conf.re"
-       { opts.set_indString (lex_conf_string ()); return; }
-#line 2133 "src/parse/lex_conf.cc"
+       yych = (unsigned char)*++cur;
+       if (yych == 'n') goto yy96;
+       goto yy14;
+yy472:
+       yych = (unsigned char)*++cur;
+       if (yych == 'o') goto yy536;
+       goto yy14;
 yy473:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy533;
+       if (yych == 'e') goto yy537;
        goto yy14;
 yy474:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy534;
+       if (yych == 'a') goto yy538;
        goto yy14;
 yy475:
-       yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy535;
-       goto yy14;
+       ++cur;
+       goto yy124;
 yy476:
        yych = (unsigned char)*++cur;
-       if (yych == 'c') goto yy536;
+       if (yych == 'a') goto yy539;
        goto yy14;
 yy477:
        ++cur;
-#line 100 "../src/parse/lex_conf.re"
-       { opts.set_yybm         (lex_conf_string ()); return; }
-#line 2154 "src/parse/lex_conf.cc"
-yy479:
-       ++cur;
-#line 149 "../src/parse/lex_conf.re"
-       { opts.set_yych           (lex_conf_string ()); return; }
+#line 135 "../src/parse/lex_conf.re"
+       { opts.set_indString (lex_conf_string ()); return; }
 #line 2159 "src/parse/lex_conf.cc"
-yy481:
+yy479:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy537;
+       if (yych == 'a') goto yy540;
        goto yy14;
-yy482:
+yy480:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy538;
+       if (yych == 'e') goto yy541;
        goto yy14;
-yy483:
+yy481:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy539;
+       if (yych == 'o') goto yy542;
        goto yy14;
-yy484:
+yy482:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy540;
+       if (yych == 'c') goto yy543;
        goto yy14;
-yy485:
+yy483:
        ++cur;
-#line 154 "../src/parse/lex_conf.re"
-       { opts.set_fill_use     (lex_conf_bool()); return; }
+#line 101 "../src/parse/lex_conf.re"
+       { opts.set_yybm         (lex_conf_string ()); return; }
 #line 2180 "src/parse/lex_conf.cc"
+yy485:
+       ++cur;
+#line 150 "../src/parse/lex_conf.re"
+       { opts.set_yych           (lex_conf_string ()); return; }
+#line 2185 "src/parse/lex_conf.cc"
 yy487:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy541;
+       if (yych == 'a') goto yy544;
        goto yy14;
 yy488:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy542;
+       if (yych == 'a') goto yy545;
        goto yy14;
 yy489:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy544;
+       if (yych == 'r') goto yy546;
        goto yy14;
 yy490:
-       ++cur;
-#line 86 "../src/parse/lex_conf.re"
-       { opts.set_condGotoParam    (lex_conf_string ()); return; }
-#line 2197 "src/parse/lex_conf.cc"
-yy492:
-       ++cur;
-#line 82 "../src/parse/lex_conf.re"
-       { opts.set_condEnumPrefix   (lex_conf_string ()); return; }
-#line 2202 "src/parse/lex_conf.cc"
-yy494:
        yych = (unsigned char)*++cur;
-       if (yych == 'P') goto yy545;
+       if (yych == 'o') goto yy547;
        goto yy14;
-yy495:
+yy491:
+       ++cur;
+#line 155 "../src/parse/lex_conf.re"
+       { opts.set_fill_use     (lex_conf_bool()); return; }
+#line 2206 "src/parse/lex_conf.cc"
+yy493:
        yych = (unsigned char)*++cur;
-       if (yych == 'Y') goto yy547;
+       if (yych == 't') goto yy548;
        goto yy14;
-yy496:
+yy494:
        yych = (unsigned char)*++cur;
-       if (yych == 'A') goto yy548;
+       if (yych == 'd') goto yy549;
        goto yy14;
-yy497:
+yy495:
        yych = (unsigned char)*++cur;
-       if (yych == 'R') goto yy549;
+       if (yych == 'o') goto yy551;
        goto yy14;
-yy498:
+yy496:
        ++cur;
-#line 148 "../src/parse/lex_conf.re"
-       { opts.set_yyctype        (lex_conf_string ()); return; }
+#line 87 "../src/parse/lex_conf.re"
+       { opts.set_condGotoParam    (lex_conf_string ()); return; }
 #line 2223 "src/parse/lex_conf.cc"
+yy498:
+       ++cur;
+#line 83 "../src/parse/lex_conf.re"
+       { opts.set_condEnumPrefix   (lex_conf_string ()); return; }
+#line 2228 "src/parse/lex_conf.cc"
 yy500:
        yych = (unsigned char)*++cur;
-       if (yych == 'R') goto yy550;
+       if (yych == 'P') goto yy552;
        goto yy14;
 yy501:
-       ++cur;
-#line 146 "../src/parse/lex_conf.re"
-       { opts.set_yydebug (lex_conf_string ()); return; }
-#line 2232 "src/parse/lex_conf.cc"
-yy503:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy552;
+       if (yych == 'Y') goto yy554;
        goto yy14;
-yy504:
+yy502:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy553;
+       if (yych == 'A') goto yy555;
        goto yy14;
-yy505:
+yy503:
        yych = (unsigned char)*++cur;
-       if (yych == 'N') goto yy554;
+       if (yych == 'R') goto yy556;
        goto yy14;
+yy504:
+       ++cur;
+#line 149 "../src/parse/lex_conf.re"
+       { opts.set_yyctype        (lex_conf_string ()); return; }
+#line 2249 "src/parse/lex_conf.cc"
 yy506:
        yych = (unsigned char)*++cur;
-       if (yych == 'A') goto yy555;
+       if (yych == 'R') goto yy557;
        goto yy14;
 yy507:
+       ++cur;
+#line 147 "../src/parse/lex_conf.re"
+       { opts.set_yydebug (lex_conf_string ()); return; }
+#line 2258 "src/parse/lex_conf.cc"
+yy509:
        yych = (unsigned char)*++cur;
-       if (yych == 'H') goto yy556;
+       if (yych == 'n') goto yy559;
        goto yy14;
-yy508:
-       ++cur;
-#line 117 "../src/parse/lex_conf.re"
-       { opts.set_yylimit     (lex_conf_string ()); return; }
-#line 2257 "src/parse/lex_conf.cc"
 yy510:
        yych = (unsigned char)*++cur;
-       if (yych == 'R') goto yy557;
+       if (yych == 'l') goto yy560;
        goto yy14;
 yy511:
        yych = (unsigned char)*++cur;
-       if (yych == 'R') goto yy559;
+       if (yych == 'N') goto yy561;
        goto yy14;
 yy512:
        yych = (unsigned char)*++cur;
-       if (yych == 'N') goto yy560;
+       if (yych == 'A') goto yy562;
        goto yy14;
 yy513:
        yych = (unsigned char)*++cur;
-       if (yych == 'A') goto yy561;
+       if (yych == 'H') goto yy563;
        goto yy14;
 yy514:
-       yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy562;
-       goto yy14;
-yy515:
-       yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy563;
-       goto yy14;
+       ++cur;
+#line 118 "../src/parse/lex_conf.re"
+       { opts.set_yylimit     (lex_conf_string ()); return; }
+#line 2283 "src/parse/lex_conf.cc"
 yy516:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy564;
+       if (yych == 'R') goto yy564;
        goto yy14;
 yy517:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy565;
+       if (yych == 'R') goto yy566;
        goto yy14;
 yy518:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy566;
+       if (yych == 'N') goto yy567;
        goto yy14;
 yy519:
        yych = (unsigned char)*++cur;
-       if (yych == 'm') goto yy567;
+       if (yych == 'A') goto yy568;
        goto yy14;
 yy520:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy568;
+       if (yych == 'o') goto yy569;
        goto yy14;
 yy521:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy569;
+       if (yych == 'e') goto yy570;
        goto yy14;
 yy522:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy570;
+       if (yych == 'e') goto yy571;
        goto yy14;
 yy523:
        yych = (unsigned char)*++cur;
-       if (yych == 'f') goto yy571;
+       if (yych == '-') goto yy572;
        goto yy14;
 yy524:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy572;
+       if (yych == 't') goto yy573;
        goto yy14;
 yy525:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy573;
+       if (yych == 'm') goto yy574;
        goto yy14;
 yy526:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy574;
+       if (yych == 'i') goto yy575;
        goto yy14;
 yy527:
        yych = (unsigned char)*++cur;
-       if (yych == 'c') goto yy575;
+       if (yych == 'a') goto yy576;
        goto yy14;
 yy528:
-       ++cur;
-       goto yy118;
+       yych = (unsigned char)*++cur;
+       if (yych == '-') goto yy577;
+       goto yy14;
 yy529:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy576;
+       if (yych == 't') goto yy578;
        goto yy14;
 yy530:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy577;
+       if (yych == 'f') goto yy579;
        goto yy14;
 yy531:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy578;
+       if (yych == '-') goto yy580;
        goto yy14;
 yy532:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy579;
+       if (yych == 'a') goto yy581;
        goto yy14;
 yy533:
        yych = (unsigned char)*++cur;
-       if (yych == 'b') goto yy580;
+       if (yych == 'o') goto yy582;
        goto yy14;
 yy534:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy581;
+       if (yych == 'c') goto yy583;
        goto yy14;
 yy535:
-       yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy583;
-       goto yy14;
+       ++cur;
+       goto yy118;
 yy536:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy585;
+       if (yych == 'n') goto yy584;
        goto yy14;
 yy537:
        yych = (unsigned char)*++cur;
-       if (yych == 'b') goto yy586;
+       if (yych == '-') goto yy585;
        goto yy14;
 yy538:
        yych = (unsigned char)*++cur;
-       if (yych == 'b') goto yy587;
+       if (yych == 'd') goto yy586;
        goto yy14;
 yy539:
        yych = (unsigned char)*++cur;
-       if (yych == 'g') goto yy588;
+       if (yych == 'r') goto yy587;
        goto yy14;
 yy540:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy589;
+       if (yych == 'b') goto yy588;
        goto yy14;
 yy541:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy591;
+       if (yych == 'l') goto yy589;
        goto yy14;
 yy542:
-       ++cur;
-#line 103 "../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 2397 "src/parse/lex_conf.cc"
+       yych = (unsigned char)*++cur;
+       if (yych == 'n') goto yy591;
+       goto yy14;
+yy543:
+       yych = (unsigned char)*++cur;
+       if (yych == 'e') goto yy593;
+       goto yy14;
 yy544:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy592;
+       if (yych == 'b') goto yy594;
        goto yy14;
 yy545:
-       yyaccept = 17;
-       yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'C') goto yy593;
-       if (yych == 'T') goto yy594;
+       yych = (unsigned char)*++cur;
+       if (yych == 'b') goto yy595;
+       goto yy14;
 yy546:
-#line 121 "../src/parse/lex_conf.re"
-       { opts.set_yybackup     (lex_conf_string ()); return; }
-#line 2410 "src/parse/lex_conf.cc"
+       yych = (unsigned char)*++cur;
+       if (yych == 'g') goto yy596;
+       goto yy14;
 yy547:
        yych = (unsigned char)*++cur;
-       if (yych == 'P') goto yy595;
+       if (yych == 'n') goto yy597;
        goto yy14;
 yy548:
        yych = (unsigned char)*++cur;
-       if (yych == 'G') goto yy596;
+       if (yych == 'e') goto yy599;
        goto yy14;
 yy549:
-       yych = (unsigned char)*++cur;
-       if (yych == 'K') goto yy598;
-       goto yy14;
-yy550:
        ++cur;
-#line 114 "../src/parse/lex_conf.re"
-       { opts.set_yycursor    (lex_conf_string ()); return; }
+#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 2427 "src/parse/lex_conf.cc"
-yy552:
+yy551:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy599;
+       if (yych == 'n') goto yy600;
        goto yy14;
+yy552:
+       yyaccept = 17;
+       yych = (unsigned char)*(ptr = ++cur);
+       if (yych == 'C') goto yy601;
+       if (yych == 'T') goto yy602;
 yy553:
-       yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy600;
-       goto yy14;
+#line 122 "../src/parse/lex_conf.re"
+       { opts.set_yybackup     (lex_conf_string ()); return; }
+#line 2440 "src/parse/lex_conf.cc"
 yy554:
        yych = (unsigned char)*++cur;
-       if (yych == 'D') goto yy601;
+       if (yych == 'P') goto yy603;
        goto yy14;
 yy555:
        yych = (unsigned char)*++cur;
-       if (yych == 'T') goto yy602;
+       if (yych == 'G') goto yy604;
        goto yy14;
 yy556:
        yych = (unsigned char)*++cur;
-       if (yych == 'A') goto yy603;
+       if (yych == 'K') goto yy606;
        goto yy14;
 yy557:
        ++cur;
 #line 115 "../src/parse/lex_conf.re"
-       { opts.set_yymarker    (lex_conf_string ()); return; }
-#line 2452 "src/parse/lex_conf.cc"
+       { opts.set_yycursor    (lex_conf_string ()); return; }
+#line 2457 "src/parse/lex_conf.cc"
 yy559:
        yych = (unsigned char)*++cur;
-       if (yych == 'E') goto yy604;
+       if (yych == 'a') goto yy607;
        goto yy14;
 yy560:
        yych = (unsigned char)*++cur;
-       if (yych == 'D') goto yy606;
+       if (yych == 'e') goto yy608;
        goto yy14;
 yy561:
        yych = (unsigned char)*++cur;
-       if (yych == 'T') goto yy607;
+       if (yych == 'D') goto yy609;
        goto yy14;
 yy562:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy608;
+       if (yych == 'T') goto yy610;
        goto yy14;
 yy563:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy609;
+       if (yych == 'A') goto yy611;
        goto yy14;
 yy564:
-       yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy610;
-       goto yy14;
-yy565:
-       yych = (unsigned char)*++cur;
-       if (yych == 'g') goto yy611;
-       goto yy14;
+       ++cur;
+#line 116 "../src/parse/lex_conf.re"
+       { opts.set_yymarker    (lex_conf_string ()); return; }
+#line 2482 "src/parse/lex_conf.cc"
 yy566:
        yych = (unsigned char)*++cur;
-       if (yych == 'p') goto yy612;
+       if (yych == 'E') goto yy612;
        goto yy14;
 yy567:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy613;
+       if (yych == 'D') goto yy614;
        goto yy14;
 yy568:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy614;
+       if (yych == 'T') goto yy615;
        goto yy14;
 yy569:
        yych = (unsigned char)*++cur;
-       if (yych == 'p') goto yy615;
+       if (yych == 'r') goto yy616;
        goto yy14;
 yy570:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy616;
+       if (yych == 'n') goto yy617;
        goto yy14;
 yy571:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy617;
+       if (yych == 'r') goto yy618;
        goto yy14;
 yy572:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy618;
+       if (yych == 'g') goto yy619;
        goto yy14;
 yy573:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy619;
+       if (yych == 'p') goto yy620;
        goto yy14;
 yy574:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy620;
+       if (yych == 'i') goto yy621;
        goto yy14;
 yy575:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy622;
+       if (yych == 'p') goto yy622;
        goto yy14;
 yy576:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy623;
+       if (yych == 's') goto yy624;
        goto yy14;
 yy577:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy624;
+       if (yych == 'p') goto yy625;
        goto yy14;
 yy578:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy625;
+       if (yych == 'a') goto yy626;
        goto yy14;
 yy579:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy626;
+       if (yych == 's') goto yy627;
        goto yy14;
 yy580:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy627;
+       if (yych == 'i') goto yy628;
        goto yy14;
 yy581:
-       ++cur;
-#line 97 "../src/parse/lex_conf.re"
-       { opts.set_bUseStateNext   (lex_conf_bool()); return; }
-#line 2545 "src/parse/lex_conf.cc"
+       yych = (unsigned char)*++cur;
+       if (yych == 't') goto yy629;
+       goto yy14;
+yy582:
+       yych = (unsigned char)*++cur;
+       if (yych == 'n') goto yy630;
+       goto yy14;
 yy583:
-       ++cur;
-#line 132 "../src/parse/lex_conf.re"
-       { opts.set_tags_expression(lex_conf_string ()); return; }
-#line 2550 "src/parse/lex_conf.cc"
+       yych = (unsigned char)*++cur;
+       if (yych == 't') goto yy632;
+       goto yy14;
+yy584:
+       yych = (unsigned char)*++cur;
+       if (yych == 'd') goto yy633;
+       goto yy14;
 yy585:
        yych = (unsigned char)*++cur;
-       if (yych == 'p') goto yy628;
+       if (yych == 's') goto yy634;
        goto yy14;
 yy586:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy629;
+       if (yych == 'e') goto yy635;
        goto yy14;
 yy587:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy630;
+       if (yych == 's') goto yy636;
        goto yy14;
 yy588:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy631;
+       if (yych == 'e') goto yy637;
        goto yy14;
 yy589:
        ++cur;
-#line 150 "../src/parse/lex_conf.re"
-       { opts.set_yychConversion (lex_conf_bool()); return; }
-#line 2571 "src/parse/lex_conf.cc"
+#line 98 "../src/parse/lex_conf.re"
+       { opts.set_bUseStateNext   (lex_conf_bool()); return; }
+#line 2579 "src/parse/lex_conf.cc"
 yy591:
-       yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy632;
-       goto yy14;
-yy592:
-       yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy634;
-       goto yy14;
+       ++cur;
+#line 133 "../src/parse/lex_conf.re"
+       { opts.set_tags_expression(lex_conf_string ()); return; }
+#line 2584 "src/parse/lex_conf.cc"
 yy593:
        yych = (unsigned char)*++cur;
-       if (yych == 'T') goto yy636;
+       if (yych == 'p') goto yy638;
        goto yy14;
 yy594:
        yych = (unsigned char)*++cur;
-       if (yych == 'A') goto yy637;
+       if (yych == 'l') goto yy639;
        goto yy14;
 yy595:
        yych = (unsigned char)*++cur;
-       if (yych == 'E') goto yy638;
+       if (yych == 'l') goto yy640;
        goto yy14;
 yy596:
-       ++cur;
-#line 127 "../src/parse/lex_conf.re"
-       { opts.set_yycopytag    (lex_conf_string ()); return; }
-#line 2596 "src/parse/lex_conf.cc"
-yy598:
        yych = (unsigned char)*++cur;
-       if (yych == 'E') goto yy640;
+       if (yych == 'e') goto yy641;
        goto yy14;
+yy597:
+       ++cur;
+#line 151 "../src/parse/lex_conf.re"
+       { opts.set_yychConversion (lex_conf_bool()); return; }
+#line 2605 "src/parse/lex_conf.cc"
 yy599:
        yych = (unsigned char)*++cur;
-       if (yych == 'k') goto yy641;
+       if (yych == 'r') goto yy642;
        goto yy14;
 yy600:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy642;
+       if (yych == 'd') goto yy644;
        goto yy14;
 yy601:
        yych = (unsigned char)*++cur;
-       if (yych == 'I') goto yy644;
+       if (yych == 'T') goto yy646;
        goto yy14;
 yy602:
        yych = (unsigned char)*++cur;
-       if (yych == 'E') goto yy645;
+       if (yych == 'A') goto yy647;
        goto yy14;
 yy603:
        yych = (unsigned char)*++cur;
-       if (yych == 'N') goto yy647;
+       if (yych == 'E') goto yy648;
        goto yy14;
 yy604:
-       yyaccept = 18;
-       yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'C') goto yy649;
-       if (yych == 'T') goto yy650;
-yy605:
-#line 124 "../src/parse/lex_conf.re"
-       { opts.set_yyrestore    (lex_conf_string ()); return; }
-#line 2629 "src/parse/lex_conf.cc"
+       ++cur;
+#line 128 "../src/parse/lex_conf.re"
+       { opts.set_yycopytag    (lex_conf_string ()); return; }
+#line 2630 "src/parse/lex_conf.cc"
 yy606:
        yych = (unsigned char)*++cur;
-       if (yych == 'I') goto yy651;
+       if (yych == 'E') goto yy650;
        goto yy14;
 yy607:
        yych = (unsigned char)*++cur;
-       if (yych == 'E') goto yy652;
+       if (yych == 'k') goto yy651;
        goto yy14;
 yy608:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy654;
+       if (yych == 'n') goto yy652;
        goto yy14;
 yy609:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy655;
+       if (yych == 'I') goto yy654;
        goto yy14;
 yy610:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy656;
+       if (yych == 'E') goto yy655;
        goto yy14;
 yy611:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy657;
+       if (yych == 'N') goto yy657;
        goto yy14;
 yy612:
-       yych = (unsigned char)*++cur;
-       if (yych == 'u') goto yy658;
-       goto yy14;
+       yyaccept = 18;
+       yych = (unsigned char)*(ptr = ++cur);
+       if (yych == 'C') goto yy659;
+       if (yych == 'T') goto yy660;
 yy613:
-       yych = (unsigned char)*++cur;
-       if (yych == 'z') goto yy659;
-       goto yy14;
+#line 125 "../src/parse/lex_conf.re"
+       { opts.set_yyrestore    (lex_conf_string ()); return; }
+#line 2663 "src/parse/lex_conf.cc"
 yy614:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy660;
+       if (yych == 'I') goto yy661;
        goto yy14;
 yy615:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy662;
+       if (yych == 'E') goto yy662;
        goto yy14;
 yy616:
        yych = (unsigned char)*++cur;
-       if (yych == 'x') goto yy94;
+       if (yych == 's') goto yy664;
        goto yy14;
 yy617:
-       ++cur;
-       goto yy120;
+       yych = (unsigned char)*++cur;
+       if (yych == 's') goto yy665;
+       goto yy14;
 yy618:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy663;
+       if (yych == 't') goto yy666;
        goto yy14;
 yy619:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy664;
+       if (yych == 'o') goto yy667;
        goto yy14;
 yy620:
-       ++cur;
-#line 56 "../src/parse/lex_conf.re"
-       { opts.set_version(!lex_conf_bool());           return; }
-#line 2689 "src/parse/lex_conf.cc"
-yy622:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy665;
+       if (yych == 'u') goto yy668;
        goto yy14;
-yy623:
+yy621:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy666;
+       if (yych == 'z') goto yy669;
        goto yy14;
+yy622:
+       ++cur;
+#line 60 "../src/parse/lex_conf.re"
+       { opts.set_eager_skip(lex_conf_bool());         return; }
+#line 2700 "src/parse/lex_conf.cc"
 yy624:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy667;
+       if (yych == 's') goto yy670;
        goto yy14;
 yy625:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy668;
+       if (yych == 'o') goto yy672;
        goto yy14;
 yy626:
-       ++cur;
-       goto yy126;
-yy627:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy669;
+       if (yych == 'x') goto yy94;
        goto yy14;
+yy627:
+       ++cur;
+       goto yy120;
 yy628:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy671;
+       if (yych == 'n') goto yy673;
        goto yy14;
 yy629:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy673;
+       if (yych == 'i') goto yy674;
        goto yy14;
 yy630:
+       ++cur;
+#line 56 "../src/parse/lex_conf.re"
+       { opts.set_version(!lex_conf_bool());           return; }
+#line 2728 "src/parse/lex_conf.cc"
+yy632:
+       yych = (unsigned char)*++cur;
+       if (yych == 'i') goto yy675;
+       goto yy14;
+yy633:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy675;
+       if (yych == 'i') goto yy676;
        goto yy14;
-yy631:
+yy634:
        yych = (unsigned char)*++cur;
        if (yych == 't') goto yy677;
        goto yy14;
-yy632:
+yy635:
+       yych = (unsigned char)*++cur;
+       if (yych == 'r') goto yy678;
+       goto yy14;
+yy636:
        ++cur;
-#line 156 "../src/parse/lex_conf.re"
+       goto yy126;
+yy637:
+       yych = (unsigned char)*++cur;
+       if (yych == 'l') goto yy679;
+       goto yy14;
+yy638:
+       yych = (unsigned char)*++cur;
+       if (yych == 't') goto yy681;
+       goto yy14;
+yy639:
+       yych = (unsigned char)*++cur;
+       if (yych == 'e') goto yy683;
+       goto yy14;
+yy640:
+       yych = (unsigned char)*++cur;
+       if (yych == 'e') goto yy685;
+       goto yy14;
+yy641:
+       yych = (unsigned char)*++cur;
+       if (yych == 't') goto yy687;
+       goto yy14;
+yy642:
+       ++cur;
+#line 157 "../src/parse/lex_conf.re"
        { opts.set_fill_arg_use (lex_conf_bool()); return; }
-#line 2733 "src/parse/lex_conf.cc"
-yy634:
+#line 2772 "src/parse/lex_conf.cc"
+yy644:
        ++cur;
-#line 84 "../src/parse/lex_conf.re"
+#line 85 "../src/parse/lex_conf.re"
        { opts.set_condDividerParam (lex_conf_string ()); return; }
-#line 2738 "src/parse/lex_conf.cc"
-yy636:
+#line 2777 "src/parse/lex_conf.cc"
+yy646:
        yych = (unsigned char)*++cur;
-       if (yych == 'X') goto yy679;
+       if (yych == 'X') goto yy689;
        goto yy14;
-yy637:
+yy647:
        yych = (unsigned char)*++cur;
-       if (yych == 'G') goto yy681;
+       if (yych == 'G') goto yy691;
        goto yy14;
-yy638:
+yy648:
        ++cur;
-#line 75 "../src/parse/lex_conf.re"
+#line 76 "../src/parse/lex_conf.re"
        { opts.set_yycondtype       (lex_conf_string ()); return; }
-#line 2751 "src/parse/lex_conf.cc"
-yy640:
+#line 2790 "src/parse/lex_conf.cc"
+yy650:
        yych = (unsigned char)*++cur;
-       if (yych == 'R') goto yy683;
+       if (yych == 'R') goto yy693;
        goto yy14;
-yy641:
+yy651:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy685;
+       if (yych == 'e') goto yy695;
        goto yy14;
-yy642:
+yy652:
        ++cur;
-#line 155 "../src/parse/lex_conf.re"
+#line 156 "../src/parse/lex_conf.re"
        { opts.set_fill_arg     (lex_conf_string ()); return; }
-#line 2764 "src/parse/lex_conf.cc"
-yy644:
+#line 2803 "src/parse/lex_conf.cc"
+yy654:
        yych = (unsigned char)*++cur;
-       if (yych == 'T') goto yy686;
+       if (yych == 'T') goto yy696;
        goto yy14;
-yy645:
+yy655:
        yyaccept = 19;
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == ':') goto yy687;
-yy646:
-#line 89 "../src/parse/lex_conf.re"
+       if (yych == ':') goto yy697;
+yy656:
+#line 90 "../src/parse/lex_conf.re"
        { opts.set_state_get       (lex_conf_string ()); return; }
-#line 2776 "src/parse/lex_conf.cc"
-yy647:
+#line 2815 "src/parse/lex_conf.cc"
+yy657:
        ++cur;
-#line 128 "../src/parse/lex_conf.re"
+#line 129 "../src/parse/lex_conf.re"
        { opts.set_yylessthan   (lex_conf_string ()); return; }
-#line 2781 "src/parse/lex_conf.cc"
-yy649:
+#line 2820 "src/parse/lex_conf.cc"
+yy659:
        yych = (unsigned char)*++cur;
-       if (yych == 'T') goto yy688;
+       if (yych == 'T') goto yy698;
        goto yy14;
-yy650:
+yy660:
        yych = (unsigned char)*++cur;
-       if (yych == 'A') goto yy689;
+       if (yych == 'A') goto yy699;
        goto yy14;
-yy651:
+yy661:
        yych = (unsigned char)*++cur;
-       if (yych == 'T') goto yy690;
+       if (yych == 'T') goto yy700;
        goto yy14;
-yy652:
+yy662:
        yyaccept = 20;
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == ':') goto yy691;
-       if (yych == '@') goto yy692;
-yy653:
-#line 91 "../src/parse/lex_conf.re"
+       if (yych == ':') goto yy701;
+       if (yych == '@') goto yy702;
+yy663:
+#line 92 "../src/parse/lex_conf.re"
        { opts.set_state_set       (lex_conf_string ()); return; }
-#line 2802 "src/parse/lex_conf.cc"
-yy654:
+#line 2841 "src/parse/lex_conf.cc"
+yy664:
        ++cur;
        goto yy101;
-yy655:
+yy665:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy693;
+       if (yych == 'i') goto yy703;
        goto yy14;
-yy656:
+yy666:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy694;
+       if (yych == 'e') goto yy704;
        goto yy14;
-yy657:
+yy667:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy695;
+       if (yych == 't') goto yy705;
        goto yy14;
-yy658:
+yy668:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy696;
+       if (yych == 't') goto yy706;
        goto yy14;
-yy659:
+yy669:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy697;
+       if (yych == 'a') goto yy707;
        goto yy14;
-yy660:
+yy670:
        ++cur;
-#line 72 "../src/parse/lex_conf.re"
+#line 73 "../src/parse/lex_conf.re"
        { lex_conf_empty_class();      return; }
-#line 2830 "src/parse/lex_conf.cc"
-yy662:
+#line 2869 "src/parse/lex_conf.cc"
+yy672:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy698;
+       if (yych == 'l') goto yy708;
        goto yy14;
-yy663:
+yy673:
        yych = (unsigned char)*++cur;
-       if (yych == 'f') goto yy699;
+       if (yych == 'f') goto yy709;
        goto yy14;
-yy664:
+yy674:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy700;
+       if (yych == 'o') goto yy710;
        goto yy14;
-yy665:
+yy675:
        yych = (unsigned char)*++cur;
-       if (yych == 'v') goto yy701;
+       if (yych == 'v') goto yy711;
        goto yy14;
-yy666:
+yy676:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy702;
+       if (yych == 't') goto yy712;
        goto yy14;
-yy667:
+yy677:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy703;
+       if (yych == 'a') goto yy713;
        goto yy14;
-yy668:
+yy678:
        ++cur;
        goto yy122;
-yy669:
+yy679:
        ++cur;
-#line 94 "../src/parse/lex_conf.re"
+#line 95 "../src/parse/lex_conf.re"
        { opts.set_yyfilllabel     (lex_conf_string ()); return; }
-#line 2862 "src/parse/lex_conf.cc"
-yy671:
+#line 2901 "src/parse/lex_conf.cc"
+yy681:
        ++cur;
-#line 98 "../src/parse/lex_conf.re"
+#line 99 "../src/parse/lex_conf.re"
        { opts.set_yyaccept        (lex_conf_string ()); return; }
-#line 2867 "src/parse/lex_conf.cc"
-yy673:
+#line 2906 "src/parse/lex_conf.cc"
+yy683:
        ++cur;
-#line 87 "../src/parse/lex_conf.re"
+#line 88 "../src/parse/lex_conf.re"
        { opts.set_yyctable         (lex_conf_string ()); return; }
-#line 2872 "src/parse/lex_conf.cc"
-yy675:
+#line 2911 "src/parse/lex_conf.cc"
+yy685:
        ++cur;
-#line 167 "../src/parse/lex_conf.re"
+#line 168 "../src/parse/lex_conf.re"
        { lex_conf_string (); return; }
-#line 2877 "src/parse/lex_conf.cc"
-yy677:
+#line 2916 "src/parse/lex_conf.cc"
+yy687:
        ++cur;
-#line 112 "../src/parse/lex_conf.re"
+#line 113 "../src/parse/lex_conf.re"
        { opts.set_yytarget (lex_conf_string ()); return; }
-#line 2882 "src/parse/lex_conf.cc"
-yy679:
+#line 2921 "src/parse/lex_conf.cc"
+yy689:
        ++cur;
-#line 122 "../src/parse/lex_conf.re"
+#line 123 "../src/parse/lex_conf.re"
        { opts.set_yybackupctx  (lex_conf_string ()); return; }
-#line 2887 "src/parse/lex_conf.cc"
-yy681:
+#line 2926 "src/parse/lex_conf.cc"
+yy691:
        ++cur;
-#line 123 "../src/parse/lex_conf.re"
+#line 124 "../src/parse/lex_conf.re"
        { opts.set_yybackuptag  (lex_conf_string ()); return; }
-#line 2892 "src/parse/lex_conf.cc"
-yy683:
+#line 2931 "src/parse/lex_conf.cc"
+yy693:
        ++cur;
-#line 116 "../src/parse/lex_conf.re"
+#line 117 "../src/parse/lex_conf.re"
        { opts.set_yyctxmarker (lex_conf_string ()); return; }
-#line 2897 "src/parse/lex_conf.cc"
-yy685:
+#line 2936 "src/parse/lex_conf.cc"
+yy695:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy704;
+       if (yych == 'd') goto yy714;
        goto yy14;
-yy686:
+yy696:
        yych = (unsigned char)*++cur;
-       if (yych == 'I') goto yy706;
+       if (yych == 'I') goto yy716;
        goto yy14;
-yy687:
+yy697:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy707;
+       if (yych == 'n') goto yy717;
        goto yy14;
-yy688:
+yy698:
        yych = (unsigned char)*++cur;
-       if (yych == 'X') goto yy708;
+       if (yych == 'X') goto yy718;
        goto yy14;
-yy689:
+yy699:
        yych = (unsigned char)*++cur;
-       if (yych == 'G') goto yy710;
+       if (yych == 'G') goto yy720;
        goto yy14;
-yy690:
+yy700:
        yych = (unsigned char)*++cur;
-       if (yych == 'I') goto yy712;
+       if (yych == 'I') goto yy722;
        goto yy14;
-yy691:
+yy701:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy713;
+       if (yych == 'n') goto yy723;
        goto yy14;
-yy692:
+yy702:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy714;
+       if (yych == 's') goto yy724;
        goto yy14;
-yy693:
+yy703:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy715;
+       if (yych == 't') goto yy725;
        goto yy14;
-yy694:
+yy704:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy716;
+       if (yych == 'd') goto yy726;
        goto yy14;
-yy695:
+yy705:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy718;
+       if (yych == 'o') goto yy728;
        goto yy14;
-yy696:
+yy706:
        ++cur;
        goto yy105;
-yy697:
+yy707:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy719;
+       if (yych == 't') goto yy729;
        goto yy14;
-yy698:
+yy708:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy720;
+       if (yych == 'i') goto yy730;
        goto yy14;
-yy699:
+yy709:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy721;
+       if (yych == 'o') goto yy731;
        goto yy14;
-yy700:
+yy710:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy722;
+       if (yych == 'n') goto yy732;
        goto yy14;
-yy701:
+yy711:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy723;
+       if (yych == 'e') goto yy733;
        goto yy14;
-yy702:
+yy712:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy724;
+       if (yych == 'i') goto yy734;
        goto yy14;
-yy703:
+yy713:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy725;
+       if (yych == 't') goto yy735;
        goto yy14;
-yy704:
+yy714:
        ++cur;
-#line 157 "../src/parse/lex_conf.re"
+#line 158 "../src/parse/lex_conf.re"
        { opts.set_fill_naked   (lex_conf_bool()); return; }
-#line 2977 "src/parse/lex_conf.cc"
-yy706:
+#line 3016 "src/parse/lex_conf.cc"
+yy716:
        yych = (unsigned char)*++cur;
-       if (yych == 'O') goto yy726;
+       if (yych == 'O') goto yy736;
        goto yy14;
-yy707:
+yy717:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy727;
+       if (yych == 'a') goto yy737;
        goto yy14;
-yy708:
+yy718:
        ++cur;
-#line 125 "../src/parse/lex_conf.re"
+#line 126 "../src/parse/lex_conf.re"
        { opts.set_yyrestorectx (lex_conf_string ()); return; }
-#line 2990 "src/parse/lex_conf.cc"
-yy710:
+#line 3029 "src/parse/lex_conf.cc"
+yy720:
        ++cur;
-#line 126 "../src/parse/lex_conf.re"
+#line 127 "../src/parse/lex_conf.re"
        { opts.set_yyrestoretag (lex_conf_string ()); return; }
-#line 2995 "src/parse/lex_conf.cc"
-yy712:
+#line 3034 "src/parse/lex_conf.cc"
+yy722:
        yych = (unsigned char)*++cur;
-       if (yych == 'O') goto yy728;
+       if (yych == 'O') goto yy738;
        goto yy14;
-yy713:
+yy723:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy729;
+       if (yych == 'a') goto yy739;
        goto yy14;
-yy714:
+yy724:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy730;
+       if (yych == 't') goto yy740;
        goto yy14;
-yy715:
+yy725:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy731;
+       if (yych == 'i') goto yy741;
        goto yy14;
-yy716:
+yy726:
        ++cur;
 #line 58 "../src/parse/lex_conf.re"
        { opts.set_bCaseInverted(lex_conf_bool());      return; }
-#line 3016 "src/parse/lex_conf.cc"
-yy718:
+#line 3055 "src/parse/lex_conf.cc"
+yy728:
        yych = (unsigned char)*++cur;
        if (yych == 's') goto yy110;
        goto yy14;
-yy719:
+yy729:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy732;
+       if (yych == 'i') goto yy742;
        goto yy14;
-yy720:
+yy730:
        yych = (unsigned char)*++cur;
-       if (yych == 'c') goto yy733;
+       if (yych == 'c') goto yy743;
        goto yy14;
-yy721:
+yy731:
        ++cur;
        goto yy113;
-yy722:
+yy732:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy734;
+       if (yych == '-') goto yy744;
        goto yy14;
-yy723:
+yy733:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy735;
+       if (yych == '-') goto yy745;
        goto yy14;
-yy724:
+yy734:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy736;
+       if (yych == 'o') goto yy746;
        goto yy14;
-yy725:
+yy735:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy737;
+       if (yych == 'e') goto yy747;
        goto yy14;
-yy726:
+yy736:
        yych = (unsigned char)*++cur;
-       if (yych == 'N') goto yy738;
+       if (yych == 'N') goto yy748;
        goto yy14;
-yy727:
+yy737:
        yych = (unsigned char)*++cur;
-       if (yych == 'k') goto yy740;
+       if (yych == 'k') goto yy750;
        goto yy14;
-yy728:
+yy738:
        yych = (unsigned char)*++cur;
-       if (yych == 'N') goto yy741;
+       if (yych == 'N') goto yy751;
        goto yy14;
-yy729:
+yy739:
        yych = (unsigned char)*++cur;
-       if (yych == 'k') goto yy743;
+       if (yych == 'k') goto yy753;
        goto yy14;
-yy730:
+yy740:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy744;
+       if (yych == 'a') goto yy754;
        goto yy14;
-yy731:
+yy741:
        yych = (unsigned char)*++cur;
-       if (yych == 'v') goto yy745;
+       if (yych == 'v') goto yy755;
        goto yy14;
-yy732:
+yy742:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy746;
+       if (yych == 'o') goto yy756;
        goto yy14;
-yy733:
+yy743:
        yych = (unsigned char)*++cur;
-       if (yych == 'y') goto yy747;
+       if (yych == 'y') goto yy757;
        goto yy14;
-yy734:
+yy744:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy749;
+       if (yych == 'd') goto yy759;
        goto yy14;
-yy735:
+yy745:
        yych = (unsigned char)*++cur;
-       if (yych == 'm') goto yy750;
+       if (yych == 'm') goto yy760;
        goto yy14;
-yy736:
+yy746:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy751;
+       if (yych == 'n') goto yy761;
        goto yy14;
-yy737:
+yy747:
        ++cur;
        goto yy109;
-yy738:
+yy748:
        yyaccept = 21;
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == ':') goto yy752;
-yy739:
-#line 76 "../src/parse/lex_conf.re"
+       if (yych == ':') goto yy762;
+yy749:
+#line 77 "../src/parse/lex_conf.re"
        { opts.set_cond_get         (lex_conf_string ()); return; }
-#line 3102 "src/parse/lex_conf.cc"
-yy740:
+#line 3141 "src/parse/lex_conf.cc"
+yy750:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy753;
+       if (yych == 'e') goto yy763;
        goto yy14;
-yy741:
+yy751:
        yyaccept = 22;
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == ':') goto yy754;
-       if (yych == '@') goto yy755;
-yy742:
-#line 78 "../src/parse/lex_conf.re"
+       if (yych == ':') goto yy764;
+       if (yych == '@') goto yy765;
+yy752:
+#line 79 "../src/parse/lex_conf.re"
        { opts.set_cond_set         (lex_conf_string ()); return; }
-#line 3115 "src/parse/lex_conf.cc"
-yy743:
+#line 3154 "src/parse/lex_conf.cc"
+yy753:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy756;
+       if (yych == 'e') goto yy766;
        goto yy14;
-yy744:
+yy754:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy757;
+       if (yych == 't') goto yy767;
        goto yy14;
-yy745:
+yy755:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy758;
+       if (yych == 'e') goto yy768;
        goto yy14;
-yy746:
+yy756:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy760;
+       if (yych == 'n') goto yy770;
        goto yy14;
-yy747:
+yy757:
        ++cur;
-#line 70 "../src/parse/lex_conf.re"
+#line 71 "../src/parse/lex_conf.re"
        { lex_conf_encoding_policy();  return; }
-#line 3136 "src/parse/lex_conf.cc"
-yy749:
+#line 3175 "src/parse/lex_conf.cc"
+yy759:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy762;
+       if (yych == 'a') goto yy772;
        goto yy14;
-yy750:
+yy760:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy763;
+       if (yych == 'a') goto yy773;
        goto yy14;
-yy751:
+yy761:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy764;
+       if (yych == 's') goto yy774;
        goto yy14;
-yy752:
+yy762:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy765;
+       if (yych == 'n') goto yy775;
        goto yy14;
-yy753:
+yy763:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy766;
+       if (yych == 'd') goto yy776;
        goto yy14;
-yy754:
+yy764:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy768;
+       if (yych == 'n') goto yy778;
        goto yy14;
-yy755:
+yy765:
        yych = (unsigned char)*++cur;
-       if (yych == 'c') goto yy769;
+       if (yych == 'c') goto yy779;
        goto yy14;
-yy756:
+yy766:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy770;
+       if (yych == 'd') goto yy780;
        goto yy14;
-yy757:
+yy767:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy772;
+       if (yych == 'e') goto yy782;
        goto yy14;
-yy758:
+yy768:
        ++cur;
 #line 57 "../src/parse/lex_conf.re"
        { opts.set_bCaseInsensitive(lex_conf_bool());   return; }
-#line 3177 "src/parse/lex_conf.cc"
-yy760:
+#line 3216 "src/parse/lex_conf.cc"
+yy770:
        ++cur;
-#line 73 "../src/parse/lex_conf.re"
+#line 74 "../src/parse/lex_conf.re"
        { lex_conf_dfa_minimization(); return; }
-#line 3182 "src/parse/lex_conf.cc"
-yy762:
+#line 3221 "src/parse/lex_conf.cc"
+yy772:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy774;
+       if (yych == 't') goto yy784;
        goto yy14;
-yy763:
+yy773:
        yych = (unsigned char)*++cur;
-       if (yych == 'p') goto yy775;
+       if (yych == 'p') goto yy785;
        goto yy14;
-yy764:
+yy774:
        ++cur;
        goto yy103;
-yy765:
+yy775:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy776;
+       if (yych == 'a') goto yy786;
        goto yy14;
-yy766:
+yy776:
        ++cur;
-#line 90 "../src/parse/lex_conf.re"
+#line 91 "../src/parse/lex_conf.re"
        { opts.set_state_get_naked (lex_conf_bool()); return; }
-#line 3202 "src/parse/lex_conf.cc"
-yy768:
+#line 3241 "src/parse/lex_conf.cc"
+yy778:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy777;
+       if (yych == 'a') goto yy787;
        goto yy14;
-yy769:
+yy779:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy778;
+       if (yych == 'o') goto yy788;
        goto yy14;
-yy770:
+yy780:
        ++cur;
-#line 92 "../src/parse/lex_conf.re"
+#line 93 "../src/parse/lex_conf.re"
        { opts.set_state_set_naked (lex_conf_bool()); return; }
-#line 3215 "src/parse/lex_conf.cc"
-yy772:
+#line 3254 "src/parse/lex_conf.cc"
+yy782:
        ++cur;
-#line 93 "../src/parse/lex_conf.re"
+#line 94 "../src/parse/lex_conf.re"
        { opts.set_state_set_arg   (lex_conf_string ()); return; }
-#line 3220 "src/parse/lex_conf.cc"
-yy774:
+#line 3259 "src/parse/lex_conf.cc"
+yy784:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy779;
+       if (yych == 'e') goto yy789;
        goto yy14;
-yy775:
+yy785:
        yych = (unsigned char)*++cur;
-       if (yych == 'p') goto yy781;
+       if (yych == 'p') goto yy791;
        goto yy14;
-yy776:
+yy786:
        yych = (unsigned char)*++cur;
-       if (yych == 'k') goto yy782;
+       if (yych == 'k') goto yy792;
        goto yy14;
-yy777:
+yy787:
        yych = (unsigned char)*++cur;
-       if (yych == 'k') goto yy783;
+       if (yych == 'k') goto yy793;
        goto yy14;
-yy778:
+yy788:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy784;
+       if (yych == 'n') goto yy794;
        goto yy14;
-yy779:
+yy789:
        ++cur;
 #line 55 "../src/parse/lex_conf.re"
        { opts.set_bNoGenerationDate(lex_conf_bool());  return; }
-#line 3245 "src/parse/lex_conf.cc"
-yy781:
+#line 3284 "src/parse/lex_conf.cc"
+yy791:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy785;
+       if (yych == 'i') goto yy795;
        goto yy14;
-yy782:
+yy792:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy786;
+       if (yych == 'e') goto yy796;
        goto yy14;
-yy783:
+yy793:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy787;
+       if (yych == 'e') goto yy797;
        goto yy14;
-yy784:
+yy794:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy788;
+       if (yych == 'd') goto yy798;
        goto yy14;
-yy785:
+yy795:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy790;
+       if (yych == 'n') goto yy800;
        goto yy14;
-yy786:
+yy796:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy791;
+       if (yych == 'd') goto yy801;
        goto yy14;
-yy787:
+yy797:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy793;
+       if (yych == 'd') goto yy803;
        goto yy14;
-yy788:
+yy798:
        ++cur;
-#line 79 "../src/parse/lex_conf.re"
+#line 80 "../src/parse/lex_conf.re"
        { opts.set_cond_set_arg     (lex_conf_string ()); return; }
-#line 3278 "src/parse/lex_conf.cc"
-yy790:
+#line 3317 "src/parse/lex_conf.cc"
+yy800:
        yych = (unsigned char)*++cur;
-       if (yych == 'g') goto yy795;
+       if (yych == 'g') goto yy805;
        goto yy14;
-yy791:
+yy801:
        ++cur;
-#line 77 "../src/parse/lex_conf.re"
+#line 78 "../src/parse/lex_conf.re"
        { opts.set_cond_get_naked   (lex_conf_bool()); return; }
-#line 3287 "src/parse/lex_conf.cc"
-yy793:
+#line 3326 "src/parse/lex_conf.cc"
+yy803:
        ++cur;
-#line 80 "../src/parse/lex_conf.re"
+#line 81 "../src/parse/lex_conf.re"
        { opts.set_cond_set_naked   (lex_conf_bool()); return; }
-#line 3292 "src/parse/lex_conf.cc"
-yy795:
+#line 3331 "src/parse/lex_conf.cc"
+yy805:
        ++cur;
 #line 59 "../src/parse/lex_conf.re"
        { opts.set_bijective_mapping(!lex_conf_bool()); return; }
-#line 3297 "src/parse/lex_conf.cc"
+#line 3336 "src/parse/lex_conf.cc"
 }
-#line 168 "../src/parse/lex_conf.re"
+#line 169 "../src/parse/lex_conf.re"
 
 }
 
@@ -3303,102 +3342,102 @@ void Scanner::lex_conf_encoding_policy()
 {
        lex_conf_assign ();
 
-#line 3307 "src/parse/lex_conf.cc"
+#line 3346 "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 yy811;
        } else {
-               if (yych <= 'i') goto yy802;
-               if (yych == 's') goto yy803;
+               if (yych <= 'i') goto yy812;
+               if (yych == 's') goto yy813;
        }
        ++cur;
-yy800:
-#line 175 "../src/parse/lex_conf.re"
+yy810:
+#line 176 "../src/parse/lex_conf.re"
        { fatal("bad configuration value"
                " (expected: 'ignore', 'substitute', 'fail')"); }
-#line 3323 "src/parse/lex_conf.cc"
-yy801:
+#line 3362 "src/parse/lex_conf.cc"
+yy811:
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'a') goto yy804;
-       goto yy800;
-yy802:
+       if (yych == 'a') goto yy814;
+       goto yy810;
+yy812:
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'g') goto yy806;
-       goto yy800;
-yy803:
+       if (yych == 'g') goto yy816;
+       goto yy810;
+yy813:
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'u') goto yy807;
-       goto yy800;
-yy804:
+       if (yych == 'u') goto yy817;
+       goto yy810;
+yy814:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy808;
-yy805:
+       if (yych == 'i') goto yy818;
+yy815:
        cur = ptr;
-       goto yy800;
-yy806:
+       goto yy810;
+yy816:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy809;
-       goto yy805;
-yy807:
+       if (yych == 'n') goto yy819;
+       goto yy815;
+yy817:
        yych = (unsigned char)*++cur;
-       if (yych == 'b') goto yy810;
-       goto yy805;
-yy808:
+       if (yych == 'b') goto yy820;
+       goto yy815;
+yy818:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy811;
-       goto yy805;
-yy809:
+       if (yych == 'l') goto yy821;
+       goto yy815;
+yy819:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy813;
-       goto yy805;
-yy810:
+       if (yych == 'o') goto yy823;
+       goto yy815;
+yy820:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy814;
-       goto yy805;
-yy811:
+       if (yych == 's') goto yy824;
+       goto yy815;
+yy821:
        ++cur;
-#line 179 "../src/parse/lex_conf.re"
+#line 180 "../src/parse/lex_conf.re"
        { opts.set_encoding_policy(Enc::POLICY_FAIL);       goto end; }
-#line 3366 "src/parse/lex_conf.cc"
-yy813:
+#line 3405 "src/parse/lex_conf.cc"
+yy823:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy815;
-       goto yy805;
-yy814:
+       if (yych == 'r') goto yy825;
+       goto yy815;
+yy824:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy816;
-       goto yy805;
-yy815:
+       if (yych == 't') goto yy826;
+       goto yy815;
+yy825:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy817;
-       goto yy805;
-yy816:
+       if (yych == 'e') goto yy827;
+       goto yy815;
+yy826:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy819;
-       goto yy805;
-yy817:
+       if (yych == 'i') goto yy829;
+       goto yy815;
+yy827:
        ++cur;
-#line 177 "../src/parse/lex_conf.re"
+#line 178 "../src/parse/lex_conf.re"
        { opts.set_encoding_policy(Enc::POLICY_IGNORE);     goto end; }
-#line 3387 "src/parse/lex_conf.cc"
-yy819:
+#line 3426 "src/parse/lex_conf.cc"
+yy829:
        yych = (unsigned char)*++cur;
-       if (yych != 't') goto yy805;
+       if (yych != 't') goto yy815;
        yych = (unsigned char)*++cur;
-       if (yych != 'u') goto yy805;
+       if (yych != 'u') goto yy815;
        yych = (unsigned char)*++cur;
-       if (yych != 't') goto yy805;
+       if (yych != 't') goto yy815;
        yych = (unsigned char)*++cur;
-       if (yych != 'e') goto yy805;
+       if (yych != 'e') goto yy815;
        ++cur;
-#line 178 "../src/parse/lex_conf.re"
+#line 179 "../src/parse/lex_conf.re"
        { opts.set_encoding_policy(Enc::POLICY_SUBSTITUTE); goto end; }
-#line 3400 "src/parse/lex_conf.cc"
+#line 3439 "src/parse/lex_conf.cc"
 }
-#line 180 "../src/parse/lex_conf.re"
+#line 181 "../src/parse/lex_conf.re"
 
 end:
        lex_conf_semicolon();
@@ -3408,77 +3447,77 @@ void Scanner::lex_conf_input()
 {
        lex_conf_assign ();
 
-#line 3412 "src/parse/lex_conf.cc"
+#line 3451 "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 yy837;
+       if (yych <= 'c') goto yy839;
+       if (yych <= 'd') goto yy840;
+yy837:
        ++cur;
-yy828:
-#line 189 "../src/parse/lex_conf.re"
+yy838:
+#line 190 "../src/parse/lex_conf.re"
        { fatal("bad configuration value"
                " (expected: 'default', 'custom')"); }
-#line 3426 "src/parse/lex_conf.cc"
-yy829:
+#line 3465 "src/parse/lex_conf.cc"
+yy839:
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'u') goto yy831;
-       goto yy828;
-yy830:
+       if (yych == 'u') goto yy841;
+       goto yy838;
+yy840:
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'e') goto yy833;
-       goto yy828;
-yy831:
+       if (yych == 'e') goto yy843;
+       goto yy838;
+yy841:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy834;
-yy832:
+       if (yych == 's') goto yy844;
+yy842:
        cur = ptr;
-       goto yy828;
-yy833:
+       goto yy838;
+yy843:
        yych = (unsigned char)*++cur;
-       if (yych == 'f') goto yy835;
-       goto yy832;
-yy834:
+       if (yych == 'f') goto yy845;
+       goto yy842;
+yy844:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy836;
-       goto yy832;
-yy835:
+       if (yych == 't') goto yy846;
+       goto yy842;
+yy845:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy837;
-       goto yy832;
-yy836:
+       if (yych == 'a') goto yy847;
+       goto yy842;
+yy846:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy838;
-       goto yy832;
-yy837:
+       if (yych == 'o') goto yy848;
+       goto yy842;
+yy847:
        yych = (unsigned char)*++cur;
-       if (yych == 'u') goto yy839;
-       goto yy832;
-yy838:
+       if (yych == 'u') goto yy849;
+       goto yy842;
+yy848:
        yych = (unsigned char)*++cur;
-       if (yych == 'm') goto yy840;
-       goto yy832;
-yy839:
+       if (yych == 'm') goto yy850;
+       goto yy842;
+yy849:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy842;
-       goto yy832;
-yy840:
+       if (yych == 'l') goto yy852;
+       goto yy842;
+yy850:
        ++cur;
-#line 192 "../src/parse/lex_conf.re"
+#line 193 "../src/parse/lex_conf.re"
        { opts.set_input_api(INPUT_CUSTOM);  goto end; }
-#line 3473 "src/parse/lex_conf.cc"
-yy842:
+#line 3512 "src/parse/lex_conf.cc"
+yy852:
        yych = (unsigned char)*++cur;
-       if (yych != 't') goto yy832;
+       if (yych != 't') goto yy842;
        ++cur;
-#line 191 "../src/parse/lex_conf.re"
+#line 192 "../src/parse/lex_conf.re"
        { opts.set_input_api(INPUT_DEFAULT); goto end; }
-#line 3480 "src/parse/lex_conf.cc"
+#line 3519 "src/parse/lex_conf.cc"
 }
-#line 193 "../src/parse/lex_conf.re"
+#line 194 "../src/parse/lex_conf.re"
 
 end:
        lex_conf_semicolon();
@@ -3488,105 +3527,105 @@ void Scanner::lex_conf_empty_class()
 {
        lex_conf_assign ();
 
-#line 3492 "src/parse/lex_conf.cc"
+#line 3531 "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 yy859;
+       if (yych == 'm') goto yy860;
        ++cur;
-yy848:
-#line 202 "../src/parse/lex_conf.re"
+yy858:
+#line 203 "../src/parse/lex_conf.re"
        { fatal("bad configuration value"
                " (expected: 'match-empty', 'match-none', 'error')"); }
-#line 3504 "src/parse/lex_conf.cc"
-yy849:
+#line 3543 "src/parse/lex_conf.cc"
+yy859:
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'r') goto yy851;
-       goto yy848;
-yy850:
+       if (yych == 'r') goto yy861;
+       goto yy858;
+yy860:
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'a') goto yy853;
-       goto yy848;
-yy851:
+       if (yych == 'a') goto yy863;
+       goto yy858;
+yy861:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy854;
-yy852:
+       if (yych == 'r') goto yy864;
+yy862:
        cur = ptr;
-       goto yy848;
-yy853:
+       goto yy858;
+yy863:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy855;
-       goto yy852;
-yy854:
+       if (yych == 't') goto yy865;
+       goto yy862;
+yy864:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy856;
-       goto yy852;
-yy855:
+       if (yych == 'o') goto yy866;
+       goto yy862;
+yy865:
        yych = (unsigned char)*++cur;
-       if (yych == 'c') goto yy857;
-       goto yy852;
-yy856:
+       if (yych == 'c') goto yy867;
+       goto yy862;
+yy866:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy858;
-       goto yy852;
-yy857:
+       if (yych == 'r') goto yy868;
+       goto yy862;
+yy867:
        yych = (unsigned char)*++cur;
-       if (yych == 'h') goto yy860;
-       goto yy852;
-yy858:
+       if (yych == 'h') goto yy870;
+       goto yy862;
+yy868:
        ++cur;
-#line 206 "../src/parse/lex_conf.re"
+#line 207 "../src/parse/lex_conf.re"
        { opts.set_empty_class_policy(EMPTY_CLASS_ERROR);       goto end; }
-#line 3543 "src/parse/lex_conf.cc"
-yy860:
+#line 3582 "src/parse/lex_conf.cc"
+yy870:
        yych = (unsigned char)*++cur;
-       if (yych != '-') goto yy852;
+       if (yych != '-') goto yy862;
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy862;
-       if (yych == 'n') goto yy863;
-       goto yy852;
-yy862:
+       if (yych == 'e') goto yy872;
+       if (yych == 'n') goto yy873;
+       goto yy862;
+yy872:
        yych = (unsigned char)*++cur;
-       if (yych == 'm') goto yy864;
-       goto yy852;
-yy863:
+       if (yych == 'm') goto yy874;
+       goto yy862;
+yy873:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy865;
-       goto yy852;
-yy864:
+       if (yych == 'o') goto yy875;
+       goto yy862;
+yy874:
        yych = (unsigned char)*++cur;
-       if (yych == 'p') goto yy866;
-       goto yy852;
-yy865:
+       if (yych == 'p') goto yy876;
+       goto yy862;
+yy875:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy867;
-       goto yy852;
-yy866:
+       if (yych == 'n') goto yy877;
+       goto yy862;
+yy876:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy868;
-       goto yy852;
-yy867:
+       if (yych == 't') goto yy878;
+       goto yy862;
+yy877:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy869;
-       goto yy852;
-yy868:
+       if (yych == 'e') goto yy879;
+       goto yy862;
+yy878:
        yych = (unsigned char)*++cur;
-       if (yych == 'y') goto yy871;
-       goto yy852;
-yy869:
+       if (yych == 'y') goto yy881;
+       goto yy862;
+yy879:
        ++cur;
-#line 205 "../src/parse/lex_conf.re"
+#line 206 "../src/parse/lex_conf.re"
        { opts.set_empty_class_policy(EMPTY_CLASS_MATCH_NONE);  goto end; }
-#line 3583 "src/parse/lex_conf.cc"
-yy871:
+#line 3622 "src/parse/lex_conf.cc"
+yy881:
        ++cur;
-#line 204 "../src/parse/lex_conf.re"
+#line 205 "../src/parse/lex_conf.re"
        { opts.set_empty_class_policy(EMPTY_CLASS_MATCH_EMPTY); goto end; }
-#line 3588 "src/parse/lex_conf.cc"
+#line 3627 "src/parse/lex_conf.cc"
 }
-#line 207 "../src/parse/lex_conf.re"
+#line 208 "../src/parse/lex_conf.re"
 
 end:
        lex_conf_semicolon();
@@ -3596,65 +3635,65 @@ void Scanner::lex_conf_dfa_minimization()
 {
        lex_conf_assign ();
 
-#line 3600 "src/parse/lex_conf.cc"
+#line 3639 "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 yy887;
+       if (yych == 't') goto yy888;
        ++cur;
-yy876:
-#line 216 "../src/parse/lex_conf.re"
+yy886:
+#line 217 "../src/parse/lex_conf.re"
        { fatal("bad configuration value"
                " (expected: 'table', 'moore')"); }
-#line 3612 "src/parse/lex_conf.cc"
-yy877:
+#line 3651 "src/parse/lex_conf.cc"
+yy887:
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'o') goto yy879;
-       goto yy876;
-yy878:
+       if (yych == 'o') goto yy889;
+       goto yy886;
+yy888:
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'a') goto yy881;
-       goto yy876;
-yy879:
+       if (yych == 'a') goto yy891;
+       goto yy886;
+yy889:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy882;
-yy880:
+       if (yych == 'o') goto yy892;
+yy890:
        cur = ptr;
-       goto yy876;
-yy881:
+       goto yy886;
+yy891:
        yych = (unsigned char)*++cur;
-       if (yych == 'b') goto yy883;
-       goto yy880;
-yy882:
+       if (yych == 'b') goto yy893;
+       goto yy890;
+yy892:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy884;
-       goto yy880;
-yy883:
+       if (yych == 'r') goto yy894;
+       goto yy890;
+yy893:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy885;
-       goto yy880;
-yy884:
+       if (yych == 'l') goto yy895;
+       goto yy890;
+yy894:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy886;
-       goto yy880;
-yy885:
+       if (yych == 'e') goto yy896;
+       goto yy890;
+yy895:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy888;
-       goto yy880;
-yy886:
+       if (yych == 'e') goto yy898;
+       goto yy890;
+yy896:
        ++cur;
-#line 219 "../src/parse/lex_conf.re"
+#line 220 "../src/parse/lex_conf.re"
        { opts.set_dfa_minimization(DFA_MINIMIZATION_MOORE); goto end; }
-#line 3651 "src/parse/lex_conf.cc"
-yy888:
+#line 3690 "src/parse/lex_conf.cc"
+yy898:
        ++cur;
-#line 218 "../src/parse/lex_conf.re"
+#line 219 "../src/parse/lex_conf.re"
        { opts.set_dfa_minimization(DFA_MINIMIZATION_TABLE); goto end; }
-#line 3656 "src/parse/lex_conf.cc"
+#line 3695 "src/parse/lex_conf.cc"
 }
-#line 220 "../src/parse/lex_conf.re"
+#line 221 "../src/parse/lex_conf.re"
 
 end:
        lex_conf_semicolon();
@@ -3675,7 +3714,7 @@ void Scanner::lex_conf_enc(Enc::type_t enc)
 void Scanner::lex_conf_assign ()
 {
 
-#line 3679 "src/parse/lex_conf.cc"
+#line 3718 "src/parse/lex_conf.cc"
 {
        unsigned char yych;
        static const unsigned char yybm[] = {
@@ -3715,56 +3754,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 yy904;
        } else {
-               if (yych <= ' ') goto yy894;
-               if (yych == '=') goto yy895;
+               if (yych <= ' ') goto yy904;
+               if (yych == '=') goto yy905;
        }
        ++cur;
-yy893:
-#line 240 "../src/parse/lex_conf.re"
+yy903:
+#line 241 "../src/parse/lex_conf.re"
        { fatal ("missing '=' in configuration"); }
-#line 3728 "src/parse/lex_conf.cc"
-yy894:
+#line 3767 "src/parse/lex_conf.cc"
+yy904:
        yych = (unsigned char)*(ptr = ++cur);
        if (yych <= 0x1F) {
-               if (yych == '\t') goto yy898;
-               goto yy893;
+               if (yych == '\t') goto yy908;
+               goto yy903;
        } else {
-               if (yych <= ' ') goto yy898;
-               if (yych != '=') goto yy893;
+               if (yych <= ' ') goto yy908;
+               if (yych != '=') goto yy903;
        }
-yy895:
+yy905:
        ++cur;
        if (lim <= cur) fill(1);
        yych = (unsigned char)*cur;
        if (yybm[0+yych] & 128) {
-               goto yy895;
+               goto yy905;
        }
-#line 241 "../src/parse/lex_conf.re"
+#line 242 "../src/parse/lex_conf.re"
        { return; }
-#line 3747 "src/parse/lex_conf.cc"
-yy898:
+#line 3786 "src/parse/lex_conf.cc"
+yy908:
        ++cur;
        if (lim <= cur) fill(1);
        yych = (unsigned char)*cur;
        if (yych <= 0x1F) {
-               if (yych == '\t') goto yy898;
+               if (yych == '\t') goto yy908;
        } else {
-               if (yych <= ' ') goto yy898;
-               if (yych == '=') goto yy895;
+               if (yych <= ' ') goto yy908;
+               if (yych == '=') goto yy905;
        }
        cur = ptr;
-       goto yy893;
+       goto yy903;
 }
-#line 242 "../src/parse/lex_conf.re"
+#line 243 "../src/parse/lex_conf.re"
 
 }
 
 void Scanner::lex_conf_semicolon ()
 {
 
-#line 3768 "src/parse/lex_conf.cc"
+#line 3807 "src/parse/lex_conf.cc"
 {
        unsigned char yych;
        static const unsigned char yybm[] = {
@@ -3804,39 +3843,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 yy915;
        } else {
-               if (yych <= ' ') goto yy905;
-               if (yych == ';') goto yy906;
+               if (yych <= ' ') goto yy915;
+               if (yych == ';') goto yy916;
        }
        ++cur;
-yy904:
-#line 248 "../src/parse/lex_conf.re"
+yy914:
+#line 249 "../src/parse/lex_conf.re"
        { fatal ("missing ending ';' in configuration"); }
-#line 3817 "src/parse/lex_conf.cc"
-yy905:
+#line 3856 "src/parse/lex_conf.cc"
+yy915:
        yych = (unsigned char)*(ptr = ++cur);
        if (yybm[0+yych] & 128) {
-               goto yy908;
+               goto yy918;
        }
-       if (yych != ';') goto yy904;
-yy906:
+       if (yych != ';') goto yy914;
+yy916:
        ++cur;
-#line 249 "../src/parse/lex_conf.re"
+#line 250 "../src/parse/lex_conf.re"
        { return; }
-#line 3828 "src/parse/lex_conf.cc"
-yy908:
+#line 3867 "src/parse/lex_conf.cc"
+yy918:
        ++cur;
        if (lim <= cur) fill(1);
        yych = (unsigned char)*cur;
        if (yybm[0+yych] & 128) {
-               goto yy908;
+               goto yy918;
        }
-       if (yych == ';') goto yy906;
+       if (yych == ';') goto yy916;
        cur = ptr;
-       goto yy904;
+       goto yy914;
 }
-#line 250 "../src/parse/lex_conf.re"
+#line 251 "../src/parse/lex_conf.re"
 
 }
 
@@ -3850,7 +3889,7 @@ int32_t Scanner::lex_conf_number ()
        lex_conf_assign ();
        tok = cur;
 
-#line 3854 "src/parse/lex_conf.cc"
+#line 3893 "src/parse/lex_conf.cc"
 {
        unsigned char yych;
        static const unsigned char yybm[] = {
@@ -3890,21 +3929,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 yy924;
        } else {
-               if (yych <= '0') goto yy915;
-               if (yych <= '9') goto yy917;
+               if (yych <= '0') goto yy925;
+               if (yych <= '9') goto yy927;
        }
-yy913:
-yy914:
+yy923:
+yy924:
        yych = (unsigned char)*++cur;
-       if (yych <= '0') goto yy913;
-       if (yych <= '9') goto yy917;
-       goto yy913;
-yy915:
+       if (yych <= '0') goto yy923;
+       if (yych <= '9') goto yy927;
+       goto yy923;
+yy925:
        ++cur;
-yy916:
-#line 264 "../src/parse/lex_conf.re"
+yy926:
+#line 265 "../src/parse/lex_conf.re"
        {
                int32_t n = 0;
                if (!s_to_i32_unsafe (tok, cur, n))
@@ -3914,17 +3953,17 @@ yy916:
                lex_conf_semicolon ();
                return n;
        }
-#line 3918 "src/parse/lex_conf.cc"
-yy917:
+#line 3957 "src/parse/lex_conf.cc"
+yy927:
        ++cur;
        if (lim <= cur) fill(1);
        yych = (unsigned char)*cur;
        if (yybm[0+yych] & 128) {
-               goto yy917;
+               goto yy927;
        }
-       goto yy916;
+       goto yy926;
 }
-#line 273 "../src/parse/lex_conf.re"
+#line 274 "../src/parse/lex_conf.re"
 
 }
 
@@ -3934,7 +3973,7 @@ std::string Scanner::lex_conf_string ()
        std::string s;
        tok = cur;
 
-#line 3938 "src/parse/lex_conf.cc"
+#line 3977 "src/parse/lex_conf.cc"
 {
        unsigned char yych;
        static const unsigned char yybm[] = {
@@ -3975,38 +4014,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 yy932;
                } else {
-                       if (yych != ' ') goto yy922;
+                       if (yych != ' ') goto yy932;
                }
        } else {
                if (yych <= '\'') {
-                       if (yych <= '"') goto yy925;
-                       if (yych <= '&') goto yy922;
-                       goto yy925;
+                       if (yych <= '"') goto yy935;
+                       if (yych <= '&') goto yy932;
+                       goto yy935;
                } else {
-                       if (yych != ';') goto yy922;
+                       if (yych != ';') goto yy932;
                }
        }
-#line 300 "../src/parse/lex_conf.re"
+#line 301 "../src/parse/lex_conf.re"
        { goto end; }
-#line 3994 "src/parse/lex_conf.cc"
-yy922:
+#line 4033 "src/parse/lex_conf.cc"
+yy932:
        ++cur;
        if (lim <= cur) fill(1);
        yych = (unsigned char)*cur;
        if (yybm[0+yych] & 128) {
-               goto yy922;
+               goto yy932;
        }
-#line 296 "../src/parse/lex_conf.re"
+#line 297 "../src/parse/lex_conf.re"
        {
                s = std::string(tok, tok_len());
                goto end;
        }
-#line 4007 "src/parse/lex_conf.cc"
-yy925:
+#line 4046 "src/parse/lex_conf.cc"
+yy935:
        ++cur;
-#line 282 "../src/parse/lex_conf.re"
+#line 283 "../src/parse/lex_conf.re"
        {
                const char quote = tok[0];
                for (bool end;;) {
@@ -4021,9 +4060,9 @@ yy925:
                        }
                }
        }
-#line 4025 "src/parse/lex_conf.cc"
+#line 4064 "src/parse/lex_conf.cc"
 }
-#line 301 "../src/parse/lex_conf.re"
+#line 302 "../src/parse/lex_conf.re"
 
 end:
        lex_conf_semicolon ();
index 8733bf366e44552a1a44850dd38b974e053d1b46..c60c048ab6acc6d6977adcf844e71513f0420bd4 100644 (file)
@@ -9,9 +9,9 @@ namespace re2c {
 typedef std::vector<std::string> code_lines_t;
 
 void emit_action(OutputFile &o, uint32_t ind, const DFA &dfa, const State *s, const std::set<label_t> &used_labels);
-void gen_goto_plain(OutputFile &o, uint32_t ind, const State *to, const DFA &dfa, tcid_t tcid);
-void gen_goto_case(OutputFile &o, uint32_t ind, const State *to, const DFA &dfa, tcid_t tcid);
-void gen_goto_if(OutputFile &o, uint32_t ind, const State *to, const DFA &dfa, tcid_t tcid);
+void gen_goto_plain(OutputFile &o, uint32_t ind, const State *to, const DFA &dfa, tcid_t tcid, bool skip);
+void gen_goto_case(OutputFile &o, uint32_t ind, const State *to, const DFA &dfa, tcid_t tcid, bool skip);
+void gen_goto_if(OutputFile &o, uint32_t ind, const State *to, const DFA &dfa, tcid_t tcid, bool skip);
 void gen_settags(code_lines_t &code, const DFA &dfa, tcid_t tcid, const opt_t *opts);
 std::string vartag_name(tagver_t ver, const std::string &prefix);
 std::string vartag_expr(tagver_t ver, const std::string &prefix, const std::string &expression);
index ab4f8ada9d6b8b46460d3abe0689b6ce3acff71c..14bb15f7cf135e9456f58cadf6211dcc706f02af 100644 (file)
@@ -22,7 +22,7 @@ static void emit_accept_binary (OutputFile &o, uint32_t ind, const DFA &dfa, con
 static void emit_accept        (OutputFile &o, uint32_t ind, const DFA &dfa, const accept_t &acc);
 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);
+static void gen_goto           (code_lines_t &code, const State *to, const DFA &dfa, tcid_t tcid, const opt_t *opts, bool skip);
 static bool endstate           (const State *s);
 
 void emit_action(OutputFile &o, uint32_t ind, const DFA &dfa,
@@ -31,7 +31,7 @@ void emit_action(OutputFile &o, uint32_t ind, const DFA &dfa,
        const opt_t *opts = o.block().opts;
        switch (s->action.type) {
        case Action::MATCH:
-               o.wdelay_skip(ind, true);
+               o.wdelay_skip(ind, !opts->eager_skip);
                need(o, ind, s->fill);
                o.wdelay_peek(ind, !endstate(s));
                break;
@@ -43,7 +43,7 @@ void emit_action(OutputFile &o, uint32_t ind, const DFA &dfa,
                if (ul1 && dfa.accepts.size() > 1 && backup) {
                        o.wind(ind).wstring(opts->yyaccept).ws(" = ").wu64(init.save).ws(";\n");
                }
-               o.wdelay_skip(ind, ul1);
+               o.wdelay_skip(ind, ul1 && !opts->eager_skip);
                if (used_labels.count(init.label)) {
                        o.wstring(opts->labelPrefix).wlabel(init.label).wstring(":\n");
                }
@@ -60,7 +60,7 @@ void emit_action(OutputFile &o, uint32_t ind, const DFA &dfa,
                if (dfa.accepts.size() > 1) {
                        o.wind(ind).wstring(opts->yyaccept).ws(" = ").wu64(s->action.info.save).ws(";\n");
                }
-               o.wdelay_skip(ind, true);
+               o.wdelay_skip(ind, !opts->eager_skip);
                o.wdelay_backup(ind, true);
                need(o, ind, s->fill);
                o.wdelay_peek(ind, true);
@@ -89,7 +89,7 @@ void emit_accept_binary(OutputFile &o, uint32_t ind, const DFA &dfa,
                emit_accept_binary (o, ++ind, dfa, acc, m + 1, r);
                o.wind(--ind).ws("}\n");
        } else {
-               gen_goto_plain(o, ind, acc[l].first, dfa, acc[l].second);
+               gen_goto_plain(o, ind, acc[l].first, dfa, acc[l].second, false);
        }
 }
 
@@ -104,7 +104,7 @@ void emit_accept(OutputFile &o, uint32_t ind, const DFA &dfa, const accept_t &ac
 
        // only one possible 'yyaccept' value: unconditional jump
        if (nacc == 1) {
-               gen_goto_plain(o, ind, acc[0].first, dfa, acc[0].second);
+               gen_goto_plain(o, ind, acc[0].first, dfa, acc[0].second, false);
                return;
        }
 
@@ -144,10 +144,10 @@ void emit_accept(OutputFile &o, uint32_t ind, const DFA &dfa, const accept_t &ac
        o.wind(ind).ws("switch (").wstring(opts->yyaccept).ws(") {\n");
        for (uint32_t i = 0; i < nacc - 1; ++i) {
                o.wind(ind).ws("case ").wu32(i).ws(": ");
-               gen_goto_case(o, ind, acc[i].first, dfa, acc[i].second);
+               gen_goto_case(o, ind, acc[i].first, dfa, acc[i].second, false);
        }
        o.wind(ind).ws("default:");
-       gen_goto_case(o, ind, acc[nacc - 1].first, dfa, acc[nacc - 1].second);
+       gen_goto_case(o, ind, acc[nacc - 1].first, dfa, acc[nacc - 1].second, false);
        o.wind(ind).ws("}\n");
 }
 
@@ -227,10 +227,10 @@ void need(OutputFile &o, uint32_t ind, size_t some)
 }
 
 void gen_goto_case(OutputFile &o, uint32_t ind, const State *to,
-       const DFA &dfa, tcid_t tcid)
+       const DFA &dfa, tcid_t tcid, bool skip)
 {
        code_lines_t code;
-       gen_goto(code, to, dfa, tcid, o.block().opts);
+       gen_goto(code, to, dfa, tcid, o.block().opts, skip);
        const size_t lines = code.size();
 
        if (lines == 1) {
@@ -244,10 +244,10 @@ void gen_goto_case(OutputFile &o, uint32_t ind, const State *to,
 }
 
 void gen_goto_if(OutputFile &o, uint32_t ind, const State *to,
-       const DFA &dfa, tcid_t tcid)
+       const DFA &dfa, tcid_t tcid, bool skip)
 {
        code_lines_t code;
-       gen_goto(code, to, dfa, tcid, o.block().opts);
+       gen_goto(code, to, dfa, tcid, o.block().opts, skip);
        const size_t lines = code.size();
 
        if (lines == 1) {
@@ -262,10 +262,10 @@ void gen_goto_if(OutputFile &o, uint32_t ind, const State *to,
 }
 
 void gen_goto_plain(OutputFile &o, uint32_t ind, const State *to,
-       const DFA &dfa, tcid_t tcid)
+       const DFA &dfa, tcid_t tcid, bool skip)
 {
        code_lines_t code;
-       gen_goto(code, to, dfa, tcid, o.block().opts);
+       gen_goto(code, to, dfa, tcid, o.block().opts, skip);
        const size_t lines = code.size();
 
        for (size_t i = 0; i < lines; ++i) {
@@ -274,9 +274,14 @@ void gen_goto_plain(OutputFile &o, uint32_t ind, const State *to,
 }
 
 void gen_goto(code_lines_t &code, const State *to, const DFA &dfa,
-       tcid_t tcid, const opt_t *opts)
+       tcid_t tcid, const opt_t *opts, bool skip)
 {
        gen_settags(code, dfa, tcid, opts);
+       if (skip) {
+               std::ostringstream s;
+               output_skip(s, 0, opts);
+               code.push_back(s.str());
+       }
        if (to) {
                code.push_back("goto " + opts->labelPrefix
                        + to_string(to->label) + ";\n");
@@ -411,15 +416,13 @@ void gen_fintags(OutputFile &o, uint32_t ind, const DFA &dfa, const Rule &rule)
 
 bool endstate(const State *s)
 {
-       if (s->go.nSpans > 1) return false;
-
        // 'end' state is a state which has no outgoing transitions on symbols
        // usually 'end' states are final states (not all final states are 'end'
        // states), but sometimes 'end' state happens to be initial non-accepting
        // state, e.g. in case of rule '[]'
        const Action::type_t &a = s->go.span[0].to->action.type;
-       return a == Action::RULE
-               || a == Action::ACCEPT;
+       return s->go.nSpans == 1
+               && (a == Action::RULE || a == Action::ACCEPT);
 }
 
 } // namespace re2c
index 2340c167caecfef6598bd90ef39ca908c418066f..dc43350123d9f66142e5a0f3fc42d4358daaf4cd 100644 (file)
@@ -33,9 +33,10 @@ struct Case
        std::vector<std::pair<uint32_t, uint32_t> > ranges;
        const State *to;
        tcid_t tags;
+       bool skip;
 
        void emit(OutputFile &o, uint32_t ind) const;
-       inline Case(): ranges(), to(NULL), tags(TCID0) {}
+       inline Case(): ranges(), to(NULL), tags(TCID0), skip(false) {}
        FORBID_COPY(Case);
 };
 
@@ -44,8 +45,8 @@ struct Cases
        Case *cases;
        uint32_t cases_size;
 
-       void add(uint32_t lb, uint32_t ub, State *to, tcid_t tags);
-       Cases(const Span *spans, uint32_t nspans);
+       void add(uint32_t lb, uint32_t ub, State *to, tcid_t tags, bool skip);
+       Cases(const Span *spans, uint32_t nspans, bool skip);
        ~Cases();
        void emit(OutputFile &o, uint32_t ind, const DFA &dfa) const;
        void used_labels(std::set<label_t> &used);
@@ -64,7 +65,7 @@ struct Binary
        Cond * cond;
        If * thn;
        If * els;
-       Binary (const Span * s, uint32_t n, const State * next);
+       Binary (const Span * s, uint32_t n, const State * next, bool skip);
        ~Binary ();
        void emit (OutputFile &o, uint32_t ind, const DFA &dfa);
        void used_labels (std::set<label_t> & used);
@@ -79,22 +80,15 @@ struct Linear
                const Cond *cond;
                const State *to;
                tcid_t tags;
-
-               Branch(): cond(NULL), to(NULL), tags(TCID0) {}
-               void init(const Cond *c, const State *s, tcid_t ts)
-               {
-                       cond = c;
-                       to = s;
-                       tags = ts;
-               }
-               FORBID_COPY(Branch);
+               bool skip;
        };
 
        size_t nbranches;
        Branch *branches;
 
-       Linear(const Span *s, uint32_t n, const State *next);
+       Linear(const Span *s, uint32_t n, const State *next, bool skip);
        ~Linear();
+       void add_branch(const Cond *cond, const State *to, tcid_t tags, bool skip);
        void emit(OutputFile &o, uint32_t ind, const DFA &dfa);
        void used_labels(std::set<label_t> &used);
        FORBID_COPY(Linear);
@@ -112,7 +106,7 @@ struct If
                Binary * binary;
                Linear * linear;
        } info;
-       If (type_t t, const Span * sp, uint32_t nsp, const State * next);
+       If (type_t t, const Span * sp, uint32_t nsp, const State * next, bool skip);
        ~If ();
        void emit (OutputFile & o, uint32_t ind, const DFA &dfa);
        void used_labels (std::set<label_t> & used);
@@ -130,7 +124,7 @@ struct SwitchIf
                Cases * cases;
                If * ifs;
        } info;
-       SwitchIf (const Span * sp, uint32_t nsp, const State * next, bool sflag);
+       SwitchIf (const Span * sp, uint32_t nsp, const State * next, bool sflag, bool skip);
        ~SwitchIf ();
        void emit (OutputFile & o, uint32_t ind, const DFA &dfa);
        void used_labels (std::set<label_t> & used);
@@ -196,6 +190,7 @@ struct Go
        uint32_t nSpans; // number of spans
        Span * span;
        tcid_t tags;
+       bool skip;
        enum
        {
                EMPTY,
@@ -222,6 +217,7 @@ struct Go
                : nSpans (g.nSpans)
                , span (g.span)
                , tags (g.tags)
+               , skip (g.skip)
                , type (g.type)
                , info (g.info)
        {}
@@ -230,6 +226,7 @@ struct Go
                nSpans = g.nSpans;
                span = g.span;
                tags = g.tags;
+               skip = g.skip;
                type = g.type;
                info = g.info;
                return * this;
index b84cf971d773a5b4150a1716351025bcabbcc579..b6cb7193cfc0a73c110c67afa8c3f75e506077cb 100644 (file)
@@ -14,7 +14,17 @@ namespace re2c
 
 static uint32_t unmap (Span * new_span, const Span * old_span, uint32_t old_nspans, const State * x);
 
-Cases::Cases(const Span *spans, uint32_t nspans)
+static bool consume(const State *s)
+{
+       switch (s->action.type) {
+               default: return true;
+               case Action::RULE:
+               case Action::MOVE: 
+               case Action::ACCEPT: return false;
+       }
+}
+
+Cases::Cases(const Span *spans, uint32_t nspans, bool skip)
        : cases(new Case[nspans])
        , cases_size(0)
 {
@@ -25,15 +35,16 @@ Cases::Cases(const Span *spans, uint32_t nspans)
        const Span &s = spans[nspans - 1];
        c.to = s.to;
        c.tags = s.tags;
+       c.skip = skip && consume(s.to);
 
        for (uint32_t i = 0, lb = 0; i < nspans; ++i) {
                const Span &s = spans[i];
-               add(lb, s.ub, s.to, s.tags);
+               add(lb, s.ub, s.to, s.tags, skip && consume(s.to));
                lb = s.ub;
        }
 }
 
-void Cases::add(uint32_t lb, uint32_t ub, State *to, tcid_t tags)
+void Cases::add(uint32_t lb, uint32_t ub, State *to, tcid_t tags, bool skip)
 {
        for (uint32_t i = 0; i < cases_size; ++i) {
                Case &c = cases[i];
@@ -46,6 +57,7 @@ void Cases::add(uint32_t lb, uint32_t ub, State *to, tcid_t tags)
        c.ranges.push_back(std::make_pair(lb, ub));
        c.to = to;
        c.tags = tags;
+       c.skip = skip;
 }
 
 Cond::Cond (const std::string & cmp, uint32_t val)
@@ -53,7 +65,7 @@ Cond::Cond (const std::string & cmp, uint32_t val)
        , value (val)
 {}
 
-Binary::Binary (const Span * s, uint32_t n, const State * next)
+Binary::Binary (const Span * s, uint32_t n, const State * next, bool skip)
        : cond (NULL)
        , thn (NULL)
        , els (NULL)
@@ -61,79 +73,88 @@ Binary::Binary (const Span * s, uint32_t n, const State * next)
        const uint32_t l = n / 2;
        const uint32_t h = n - l;
        cond = new Cond ("<=", s[l - 1].ub - 1);
-       thn = new If (l > 4 ? If::BINARY : If::LINEAR, &s[0], l, next);
-       els = new If (h > 4 ? If::BINARY : If::LINEAR, &s[l], h, next);
+       thn = new If (l > 4 ? If::BINARY : If::LINEAR, &s[0], l, next, skip);
+       els = new If (h > 4 ? If::BINARY : If::LINEAR, &s[l], h, next, skip);
+}
+
+void Linear::add_branch(const Cond *cond, const State *to, tcid_t tags, bool skip)
+{
+       Branch &b = branches[nbranches++];
+       b.cond = cond;
+       b.to = to;
+       b.tags = tags;
+       b.skip = skip;
 }
 
-Linear::Linear(const Span *s, uint32_t n, const State *next)
+Linear::Linear(const Span *s, uint32_t n, const State *next, bool skip)
        : nbranches(0)
        , branches(new Branch[n])
 {
        for (;;) {
                if (n == 1 && s[0].to == next) {
-                       branches[nbranches++].init(NULL, NULL, s[0].tags);
+                       add_branch(NULL, NULL, s[0].tags, skip && consume(s[0].to));
                        return;
                } else if (n == 1) {
-                       branches[nbranches++].init(NULL, s[0].to, s[0].tags);
+                       add_branch(NULL, s[0].to, s[0].tags, skip && consume(s[0].to));
                        return;
                } else if (n == 2 && s[0].to == next) {
-                       branches[nbranches++].init(new Cond(">=", s[0].ub), s[1].to, s[1].tags);
-                       branches[nbranches++].init(NULL, NULL, s[0].tags);
+                       add_branch(new Cond(">=", s[0].ub), s[1].to, s[1].tags, skip && consume(s[1].to));
+                       add_branch(NULL, NULL, s[0].tags, skip && consume(s[0].to));
                        return;
                } else if (n == 3
                        && s[1].to == next
                        && s[1].ub - s[0].ub == 1
                        && s[2].to == s[0].to
                        && s[2].tags == s[0].tags) {
-                       branches[nbranches++].init(new Cond("!=", s[0].ub), s[0].to, s[0].tags);
-                       branches[nbranches++].init(NULL, NULL, s[1].tags);
+                       add_branch(new Cond("!=", s[0].ub), s[0].to, s[0].tags, skip && consume(s[0].to));
+                       add_branch(NULL, NULL, s[1].tags, skip && consume(s[1].to));
                        return;
                } else if (n >= 3
                        && s[1].ub - s[0].ub == 1
                        && s[2].to == s[0].to
                        && s[2].tags == s[0].tags) {
-                       branches[nbranches++].init(new Cond("==", s[0].ub), s[1].to, s[1].tags);
+                       add_branch(new Cond("==", s[0].ub), s[1].to, s[1].tags, skip && consume(s[1].to));
                        n -= 2;
                        s += 2;
                } else {
-                       branches[nbranches++].init(new Cond("<=", s[0].ub - 1), s[0].to, s[0].tags);
+                       add_branch(new Cond("<=", s[0].ub - 1), s[0].to, s[0].tags, skip && consume(s[0].to));
                        n -= 1;
                        s += 1;
                }
        }
 }
 
-If::If (type_t t, const Span * sp, uint32_t nsp, const State * next)
+If::If (type_t t, const Span * sp, uint32_t nsp, const State * next, bool skip)
        : type (t)
        , info ()
 {
        switch (type)
        {
                case BINARY:
-                       info.binary = new Binary (sp, nsp, next);
+                       info.binary = new Binary (sp, nsp, next, skip);
                        break;
                case LINEAR:
-                       info.linear = new Linear (sp, nsp, next);
+                       info.linear = new Linear (sp, nsp, next, skip);
                        break;
        }
 }
 
-SwitchIf::SwitchIf (const Span * sp, uint32_t nsp, const State * next, bool sflag)
+SwitchIf::SwitchIf (const Span * sp, uint32_t nsp, const State * next, bool sflag, bool skip)
        : type (IF)
        , info ()
 {
        if ((!sflag && nsp > 2) || (nsp > 8 && (sp[nsp - 2].ub - sp[0].ub <= 3 * (nsp - 2))))
        {
                type = SWITCH;
-               info.cases = new Cases (sp, nsp);
+               info.cases = new Cases (sp, nsp, skip);
        }
        else if (nsp > 5)
        {
-               info.ifs = new If (If::BINARY, sp, nsp, next);
+               info.ifs = new If (If::BINARY, sp, nsp, next, skip);
        }
        else
        {
-               info.ifs = new If (If::LINEAR, sp, nsp, next);
+               info.ifs = new If (If::LINEAR, sp, nsp, next, skip);
        }
 }
 
@@ -149,12 +170,12 @@ GoBitmap::GoBitmap (const Span * span, uint32_t nSpans, const Span * hspan,
        uint32_t bSpans = unmap (bspan, span, nSpans, bm_state);
        lgo = bSpans == 0
                ? NULL
-               : new SwitchIf (bspan, bSpans, next, sflag);
+               : new SwitchIf (bspan, bSpans, next, sflag, false);
        // if there are any low spans, then next state for high spans
        // must be NULL to trigger explicit goto generation in linear 'if'
        hgo = hSpans == 0
                ? NULL
-               : new SwitchIf (hspan, hSpans, lgo ? NULL : next, sflag);
+               : new SwitchIf (hspan, hSpans, lgo ? NULL : next, sflag, false);
        operator delete (bspan);
 }
 
@@ -175,19 +196,20 @@ CpgotoTable::CpgotoTable (const Span * span, uint32_t nSpans)
 
 Cpgoto::Cpgoto (const Span * span, uint32_t nSpans, const Span * hspan,
        uint32_t hSpans, const State * next, bool sflag)
-       : hgo (hSpans == 0 ? NULL : new SwitchIf (hspan, hSpans, next, sflag))
+       : hgo (hSpans == 0 ? NULL : new SwitchIf (hspan, hSpans, next, sflag, false))
        , table (new CpgotoTable (span, nSpans))
 {}
 
 Dot::Dot (const Span * sp, uint32_t nsp, const State * s)
        : from (s)
-       , cases (new Cases (sp, nsp))
+       , cases (new Cases (sp, nsp, false))
 {}
 
 Go::Go ()
        : nSpans (0)
        , span (NULL)
        , tags (TCID0)
+       , skip (false)
        , type (EMPTY)
        , info ()
 {}
@@ -199,6 +221,16 @@ void Go::init(const State *from, const opt_t *opts, bitmaps_t &bitmaps)
                return;
        }
 
+       const Action::type_t a = from->action.type;
+       const bool need_skip = opts->eager_skip
+               && a != Action::RULE
+               && a != Action::ACCEPT;
+
+       skip = need_skip;
+       for (uint32_t i = 0; skip && i < nSpans; ++i) {
+               skip = consume(span[i].to) && span[i].tags == TCID0;
+       }
+
        // initialize high (wide) spans
        uint32_t hSpans = 0;
        const Span * hspan = NULL;
@@ -240,17 +272,18 @@ void Go::init(const State *from, const opt_t *opts, bitmaps_t &bitmaps)
        }
 
        const uint32_t dSpans = nSpans - hSpans - nBitmaps;
+       const bool part_skip = need_skip && !skip;
        if (opts->target == opt_t::DOT)
        {
                type = DOT;
                info.dot = new Dot (span, nSpans, from);
        }
-       else if (opts->gFlag && (dSpans >= opts->cGotoThreshold) && !low_spans_have_tags)
+       else if (opts->gFlag && !part_skip && (dSpans >= opts->cGotoThreshold) && !low_spans_have_tags)
        {
                type = CPGOTO;
                info.cpgoto = new Cpgoto (span, nSpans, hspan, hSpans, from->next, opts->sFlag);
        }
-       else if (opts->bFlag && (nBitmaps > 0))
+       else if (opts->bFlag && !part_skip && (nBitmaps > 0))
        {
                type = BITMAP;
                info.bitmap = new GoBitmap (span, nSpans, hspan, hSpans, bm, bms, from->next, opts->sFlag);
@@ -259,7 +292,7 @@ void Go::init(const State *from, const opt_t *opts, bitmaps_t &bitmaps)
        else
        {
                type = SWITCH_IF;
-               info.switchif = new SwitchIf (span, nSpans, from->next, opts->sFlag);
+               info.switchif = new SwitchIf (span, nSpans, from->next, opts->sFlag, part_skip);
        }
 }
 
index 5a711ea56ffbced0aae4f25a601eed25ed080393..a8f91504ff12045d1536da0db38002f7c1fd8034 100644 (file)
@@ -73,13 +73,13 @@ void Cases::emit(OutputFile &o, uint32_t ind, const DFA &dfa) const
        for (uint32_t i = 1; i < cases_size; ++i) {
                const Case &c = cases[i];
                c.emit(o, ind);
-               gen_goto_case(o, ind, c.to, dfa, c.tags);
+               gen_goto_case(o, ind, c.to, dfa, c.tags, c.skip);
        }
 
        // default case must be the last one
        const Case &c = cases[0];
        o.wind(ind).ws("default:");
-       gen_goto_case(o, ind, c.to, dfa, c.tags);
+       gen_goto_case(o, ind, c.to, dfa, c.tags, c.skip);
 
        o.wind(ind).ws("}\n");
 }
@@ -101,9 +101,9 @@ void Linear::emit(OutputFile &o, uint32_t ind, const DFA &dfa)
                const Cond *cond = b.cond;
                if (cond) {
                        output_if(o, ind, cond->compare, cond->value);
-                       gen_goto_if(o, ind, b.to, dfa, b.tags);
+                       gen_goto_if(o, ind, b.to, dfa, b.tags, b.skip);
                } else {
-                       gen_goto_plain(o, ind, b.to, dfa, b.tags);
+                       gen_goto_plain(o, ind, b.to, dfa, b.tags, b.skip);
                }
        }
 }
@@ -138,7 +138,7 @@ void GoBitmap::emit (OutputFile & o, uint32_t ind, const DFA &dfa)
                o.wu32(bitmap->m);
        }
        o.ws(") {\n");
-       gen_goto_plain(o, ind + 1, bitmap_state, dfa, TCID0);
+       gen_goto_plain(o, ind + 1, bitmap_state, dfa, TCID0, false);
        o.wind(ind).ws("}\n");
        if (lgo != NULL)
        {
@@ -222,27 +222,24 @@ void Dot::emit(OutputFile &o, const DFA &dfa)
 
 void Go::emit (OutputFile & o, uint32_t ind, const DFA &dfa)
 {
+       if (type == DOT) {
+               info.dot->emit (o, dfa);
+               return;
+       }
+
        code_lines_t code;
        gen_settags(code, dfa, tags, o.block().opts);
        for (size_t i = 0; i < code.size(); ++i) {
                o.wind(ind).wstring(code[i]);
        }
-
-       switch (type) {
-               case EMPTY:
-                       break;
-               case SWITCH_IF:
-                       info.switchif->emit (o, ind, dfa);
-                       break;
-               case BITMAP:
-                       info.bitmap->emit (o, ind, dfa);
-                       break;
-               case CPGOTO:
-                       info.cpgoto->emit (o, ind, dfa);
-                       break;
-               case DOT:
-                       info.dot->emit (o, dfa);
-                       break;
+       o.wdelay_skip(ind, skip);
+
+       if (type == SWITCH_IF) {
+               info.switchif->emit (o, ind, dfa);
+       } else if (type == BITMAP) {
+               info.bitmap->emit (o, ind, dfa);
+       } else if (type == CPGOTO) {
+               info.cpgoto->emit (o, ind, dfa);
        }
 }
 
index b8c9628be237780a94e8aa19c231168dda69deb5..87923127d28d0ca70ee8fba6aae20be6a657aa6d 100644 (file)
@@ -117,6 +117,7 @@ namespace re2c
        /* internals */ \
        OPT (dfa_minimization_t, dfa_minimization, DFA_MINIMIZATION_MOORE) \
        OPT (bool, bijective_mapping, true) \
+       OPT (bool, eager_skip, false) \
        /* dump */ \
        OPT (bool, dump_dfa_raw, false) \
        OPT (bool, dump_dfa_det, false) \
index 2e765465dddf8131bf838261c4a4143aa70def50..a84b577736561511f3cc9de836f6cbe280b067d4 100644 (file)
@@ -148,6 +148,7 @@ opt_long:
        "skeleton"              end { opts.set_target (opt_t::SKELETON); goto opt; }
        "tags"                  end { opts.set_tags (true);              goto opt; }
        "non-bijective-mapping" end { opts.set_bijective_mapping(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; }
        "unicode"               end { if (!opts.set_encoding (Enc::UTF32))  { error_encoding (); return EXIT_FAIL; } goto opt; }
        "wide-chars"            end { if (!opts.set_encoding (Enc::UCS2))   { error_encoding (); return EXIT_FAIL; } goto opt; }
index 8f1fa69f7165c973b81ff779e799bdc90eb29e64..b3273bfed0064268a975764cf7bb736eece5ca4f 100644 (file)
@@ -57,6 +57,7 @@ void Scanner::lex_conf ()
        "flags:case-insensitive"             { opts.set_bCaseInsensitive(lex_conf_bool());   return; }
        "flags:case-inverted"                { opts.set_bCaseInverted(lex_conf_bool());      return; }
        "flags:non-bijective-mapping"        { opts.set_bijective_mapping(!lex_conf_bool()); return; }
+       "flags:eager-skip"                   { opts.set_eager_skip(lex_conf_bool());         return; }
 
        "flags:" ("e" | "ecb")        { lex_conf_enc(Enc::EBCDIC); return; }
        "flags:" ("u" | "unicode")    { lex_conf_enc(Enc::UTF32);  return; }
diff --git a/re2c/test/bug61.i--empty-class(match-none)--eager-skip.c b/re2c/test/bug61.i--empty-class(match-none)--eager-skip.c
new file mode 100644 (file)
index 0000000..32db514
--- /dev/null
@@ -0,0 +1,49 @@
+/* Generated by re2c */
+
+{
+       YYCTYPE yych;
+}
+
+
+
+{
+       YYCTYPE yych;
+}
+
+
+
+{
+       YYCTYPE yych;
+}
+
+
+
+{
+       YYCTYPE yych;
+}
+
+
+
+{
+       YYCTYPE yych;
+}
+
+re2c: warning: line 2: empty character class [-Wempty-character-class]
+re2c: warning: line 3: control flow is undefined for strings that match '', use default rule '*' [-Wundefined-control-flow]
+re2c: warning: line 2: unreachable rule  [-Wunreachable-rules]
+re2c: warning: line 6: empty character class [-Wempty-character-class]
+re2c: warning: line 7: control flow is undefined for strings that match '', use default rule '*' [-Wundefined-control-flow]
+re2c: warning: line 6: unreachable rule  [-Wunreachable-rules]
+re2c: warning: line 10: empty character class [-Wempty-character-class]
+re2c: warning: line 11: control flow is undefined for strings that match '', use default rule '*' [-Wundefined-control-flow]
+re2c: warning: line 10: unreachable rule  [-Wunreachable-rules]
+re2c: warning: line 14: empty character class [-Wempty-character-class]
+re2c: warning: line 14: empty character class [-Wempty-character-class]
+re2c: warning: line 14: empty character class [-Wempty-character-class]
+re2c: warning: line 15: control flow is undefined for strings that match '', use default rule '*' [-Wundefined-control-flow]
+re2c: warning: line 14: unreachable rule  [-Wunreachable-rules]
+re2c: warning: line 18: empty character class [-Wempty-character-class]
+re2c: warning: line 18: empty character class [-Wempty-character-class]
+re2c: warning: line 18: empty character class [-Wempty-character-class]
+re2c: warning: line 19: control flow is undefined for strings that match '', use default rule '*' [-Wundefined-control-flow]
+re2c: warning: line 18: unreachable rule  [-Wunreachable-rules]
diff --git a/re2c/test/bug61.i--empty-class(match-none)--eager-skip.re b/re2c/test/bug61.i--empty-class(match-none)--eager-skip.re
new file mode 100644 (file)
index 0000000..6da4ba8
--- /dev/null
@@ -0,0 +1,19 @@
+/*!re2c
+    [] {}
+*/
+
+/*!re2c
+    [^\x00-\xFF] {}
+*/
+
+/*!re2c
+    [\x00-\xFF]\[\x00-\xFF] {}
+*/
+
+/*!re2c
+    []\[] {}
+*/
+
+/*!re2c
+    [^\x00-\xFF]\[^\x00-\xFF] {}
+*/
diff --git a/re2c/test/input11.b--eager-skip.c b/re2c/test/input11.b--eager-skip.c
new file mode 100644 (file)
index 0000000..1878df1
--- /dev/null
@@ -0,0 +1,139 @@
+/* Generated by re2c */
+#line 1 "input11.b--eager-skip.re"
+
+#line 5 "input11.b--eager-skip.c"
+{
+       YYCTYPE yych;
+       if ((YYLIMIT - YYCURSOR) < 6) YYFILL(6);
+       yych = *YYCURSOR++;
+       if (yych <= '@') {
+               if (yych <= '/') {
+                       if (yych == '-') goto yy4;
+               } else {
+                       if (yych <= '0') goto yy5;
+                       if (yych <= '9') goto yy7;
+               }
+       } else {
+               if (yych <= 'q') {
+                       if (yych <= 'Z') goto yy9;
+                       if (yych >= 'a') goto yy9;
+               } else {
+                       if (yych <= 'r') goto yy12;
+                       if (yych <= 'z') goto yy9;
+               }
+       }
+yy3:
+#line 15 "input11.b--eager-skip.re"
+       { return -1; }
+#line 29 "input11.b--eager-skip.c"
+yy4:
+       yych = *YYCURSOR;
+       if (yych <= '0') goto yy3;
+       if (yych <= '9') {
+               ++YYCURSOR;
+               goto yy7;
+       }
+       goto yy3;
+yy5:
+yy6:
+#line 13 "input11.b--eager-skip.re"
+       { return 2; }
+#line 42 "input11.b--eager-skip.c"
+yy7:
+       if (YYLIMIT <= YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if (yych <= '/') goto yy6;
+       if (yych <= '9') {
+               ++YYCURSOR;
+               goto yy7;
+       }
+       goto yy6;
+yy9:
+       if (YYLIMIT <= YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+yy10:
+       if (yych <= '@') {
+               if (yych <= '/') goto yy11;
+               if (yych <= '9') {
+                       ++YYCURSOR;
+                       goto yy9;
+               }
+       } else {
+               if (yych <= 'Z') {
+                       ++YYCURSOR;
+                       goto yy9;
+               }
+               if (yych <= '`') goto yy11;
+               if (yych <= 'z') {
+                       ++YYCURSOR;
+                       goto yy9;
+               }
+       }
+yy11:
+#line 12 "input11.b--eager-skip.re"
+       { return 1; }
+#line 76 "input11.b--eager-skip.c"
+yy12:
+       yych = *YYCURSOR;
+       if (yych != 'e') goto yy10;
+       ++YYCURSOR;
+       yych = *YYCURSOR;
+       if (yych != '2') goto yy10;
+       ++YYCURSOR;
+       yych = *YYCURSOR;
+       if (yych != 'c') goto yy10;
+       ++YYCURSOR;
+       yych = *(YYMARKER = YYCURSOR);
+       if (yych != ':') goto yy10;
+       ++YYCURSOR;
+       yych = *YYCURSOR;
+       if (yych <= '^') {
+               if (yych <= '@') goto yy17;
+               if (yych <= 'Z') {
+                       ++YYCURSOR;
+                       goto yy18;
+               }
+       } else {
+               if (yych == '`') goto yy17;
+               if (yych <= 'z') {
+                       ++YYCURSOR;
+                       goto yy18;
+               }
+       }
+yy17:
+       YYCURSOR = YYMARKER;
+       goto yy11;
+yy18:
+       if (YYLIMIT <= YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if (yych <= 'Z') {
+               if (yych <= '/') goto yy20;
+               if (yych <= ':') {
+                       ++YYCURSOR;
+                       goto yy18;
+               }
+               if (yych >= 'A') {
+                       ++YYCURSOR;
+                       goto yy18;
+               }
+       } else {
+               if (yych <= '_') {
+                       if (yych >= '_') {
+                               ++YYCURSOR;
+                               goto yy18;
+                       }
+               } else {
+                       if (yych <= '`') goto yy20;
+                       if (yych <= 'z') {
+                               ++YYCURSOR;
+                               goto yy18;
+                       }
+               }
+       }
+yy20:
+#line 11 "input11.b--eager-skip.re"
+       { return 0; }
+#line 137 "input11.b--eager-skip.c"
+}
+#line 17 "input11.b--eager-skip.re"
+
diff --git a/re2c/test/input11.b--eager-skip.re b/re2c/test/input11.b--eager-skip.re
new file mode 100644 (file)
index 0000000..705eca7
--- /dev/null
@@ -0,0 +1,17 @@
+/*!re2c
+
+re2c:yybm:hex = 1;
+
+letter  = [a-zA-Z];
+digit   = [0-9];
+number  = "0" | ("-"? [1-9] digit*);
+name    = letter (letter|digit)*;
+config  = "re2c:" (letter|"_") (letter|digit|"_"|":")*;
+
+config { return 0; }
+name   { return 1; }
+number { return 2; }
+
+.|"\n" { return -1; }
+
+*/
diff --git a/re2c/test/reuse_conds_setup_1.cgir--eager-skip.c b/re2c/test/reuse_conds_setup_1.cgir--eager-skip.c
new file mode 100644 (file)
index 0000000..3d390a2
--- /dev/null
@@ -0,0 +1,197 @@
+/* Generated by re2c */
+
+enum YYCONDTYPE {
+       yycr1,
+       yycr2,
+};
+
+
+void scan(unsigned char* in)
+{
+
+{
+       YYCTYPE yych;
+       static void *yyctable[2] = {
+               &&yyc_r1,
+               &&yyc_r2,
+       };
+       goto *yyctable[YYGETCONDITION()];
+/* *********************************** */
+yyc_r1:
+       if (YYLIMIT <= YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if (yych <= '1') {
+               if (yych == '\n') goto yy3;
+               if (yych <= '0') {
+                       ++YYCURSOR;
+                       goto yy4;
+               }
+               ++YYCURSOR;
+               goto yy6;
+       } else {
+               if (yych <= 'a') {
+                       if (yych <= '`') {
+                               ++YYCURSOR;
+                               goto yy4;
+                       }
+                       ++YYCURSOR;
+                       goto yy8;
+               } else {
+                       if (yych <= 'b') {
+                               ++YYCURSOR;
+                               goto yy10;
+                       }
+                       if (yych <= 'c') {
+                               ++YYCURSOR;
+                               goto yy12;
+                       }
+                       ++YYCURSOR;
+                       goto yy4;
+               }
+       }
+yy3:
+yy4:
+       { return "SETUP-r1"; }
+       { return "."; }
+yy6:
+       { return "SETUP-r1"; }
+       { return "1"; }
+yy8:
+       { return "SETUP-r1"; }
+       { return "a"; }
+yy10:
+       { return "SETUP-r1"; }
+       { return "b"; }
+yy12:
+       { return "SETUP-r1"; }
+       { return "c"; }
+/* *********************************** */
+yyc_r2:
+       if (YYLIMIT <= YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if (yych <= '`') {
+               if (yych != '\n') {
+                       ++YYCURSOR;
+                       goto yy17;
+               }
+       } else {
+               if (yych <= 'a') {
+                       ++YYCURSOR;
+                       goto yy19;
+               }
+               if (yych == 'c') {
+                       ++YYCURSOR;
+                       goto yy21;
+               }
+               ++YYCURSOR;
+               goto yy17;
+       }
+yy17:
+       { return "SETUP-r2"; }
+       { return "."; }
+yy19:
+       { return "SETUP-r2"; }
+       { return "a"; }
+yy21:
+       { return "SETUP-r2"; }
+       { return "c"; }
+}
+
+
+}
+
+void scan(unsigned short* in)
+{
+
+{
+       YYCTYPE yych;
+       static void *yyctable[2] = {
+               &&yyc_r1,
+               &&yyc_r2,
+       };
+       goto *yyctable[YYGETCONDITION()];
+/* *********************************** */
+yyc_r1:
+       if (YYLIMIT <= YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if (yych <= '2') {
+               if (yych == '\n') goto yy3;
+               if (yych <= '1') {
+                       ++YYCURSOR;
+                       goto yy4;
+               }
+               ++YYCURSOR;
+               goto yy6;
+       } else {
+               if (yych <= 'a') {
+                       if (yych <= '`') {
+                               ++YYCURSOR;
+                               goto yy4;
+                       }
+                       ++YYCURSOR;
+                       goto yy8;
+               } else {
+                       if (yych <= 'b') {
+                               ++YYCURSOR;
+                               goto yy10;
+                       }
+                       if (yych <= 'c') {
+                               ++YYCURSOR;
+                               goto yy12;
+                       }
+                       ++YYCURSOR;
+                       goto yy4;
+               }
+       }
+yy3:
+yy4:
+       { return "SETUP-r1"; }
+       { return "."; }
+yy6:
+       { return "SETUP-r1"; }
+       { return "2"; }
+yy8:
+       { return "SETUP-r1"; }
+       { return "a"; }
+yy10:
+       { return "SETUP-r1"; }
+       { return "b"; }
+yy12:
+       { return "SETUP-r1"; }
+       { return "c"; }
+/* *********************************** */
+yyc_r2:
+       if (YYLIMIT <= YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if (yych <= '`') {
+               if (yych != '\n') {
+                       ++YYCURSOR;
+                       goto yy17;
+               }
+       } else {
+               if (yych <= 'a') {
+                       ++YYCURSOR;
+                       goto yy19;
+               }
+               if (yych == 'c') {
+                       ++YYCURSOR;
+                       goto yy21;
+               }
+               ++YYCURSOR;
+               goto yy17;
+       }
+yy17:
+       { return "."; }
+yy19:
+       { return "a"; }
+yy21:
+       { return "c"; }
+}
+
+}
+re2c: warning: line 14: control flow in condition 'r1' is undefined for strings that match '\xA', use default rule '*' [-Wundefined-control-flow]
+re2c: warning: line 14: control flow in condition 'r2' is undefined for strings that match '\xA', use default rule '*' [-Wundefined-control-flow]
+re2c: warning: line 19: control flow in condition 'r1' is undefined for strings that match '\xA', use default rule '*' [-Wundefined-control-flow]
+re2c: warning: line 19: control flow in condition 'r2' is undefined for strings that match '\xA', use default rule '*' [-Wundefined-control-flow]
+re2c: warning: line 29: control flow in condition 'r1' is undefined for strings that match '\xA', use default rule '*' [-Wundefined-control-flow]
+re2c: warning: line 29: control flow in condition 'r2' is undefined for strings that match '\xA', use default rule '*' [-Wundefined-control-flow]
diff --git a/re2c/test/reuse_conds_setup_1.cgir--eager-skip.re b/re2c/test/reuse_conds_setup_1.cgir--eager-skip.re
new file mode 100644 (file)
index 0000000..44e918d
--- /dev/null
@@ -0,0 +1,30 @@
+
+/*!types:re2c */
+
+void scan(unsigned char* in)
+{
+/*!rules:re2c
+
+<!r1>                  { return "SETUP-r1"; }
+<*>            "a"     { return "a"; }
+<*>            .       { return "."; }
+<r1>   "b" { return "b"; }
+<r1,r2>        "c" { return "c"; }
+
+*//*!use:re2c
+
+<r1>   "1" { return "1"; }
+<!r2>                  { return "SETUP-r2"; }
+
+*/
+
+}
+
+void scan(unsigned short* in)
+{
+/*!use:re2c
+
+<r1>   "2" { return "2"; }
+
+*/
+}
diff --git a/re2c/test/tags/bug121_var_multiple.i--tags--eager-skip--input(custom).c b/re2c/test/tags/bug121_var_multiple.i--tags--eager-skip--input(custom).c
new file mode 100644 (file)
index 0000000..e3631b7
--- /dev/null
@@ -0,0 +1,73 @@
+/* Generated by re2c */
+// overlapping trailing contexts of variable length:
+// we need multiple tags and we cannot deduplicate them
+
+
+{
+       YYCTYPE yych;
+       if (YYLESSTHAN (4)) YYFILL(4);
+       yych = YYPEEK ();
+       YYSKIP ();
+       switch (yych) {
+       case 'a':       goto yy4;
+       default:        goto yy2;
+       }
+yy2:
+       { d }
+yy4:
+       yych = YYPEEK ();
+       YYBACKUPTAG (yyt2);
+       switch (yych) {
+       case 'b':
+               YYSKIP ();
+               goto yy6;
+       default:        goto yy5;
+       }
+yy5:
+       YYRESTORETAG (yyt2);
+       { 1 }
+yy6:
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 'c':
+               YYBACKUPTAG (yyt1);
+               YYSKIP ();
+               goto yy9;
+       default:        goto yy8;
+       }
+yy7:
+       if (YYLESSTHAN (1)) YYFILL(1);
+       yych = YYPEEK ();
+yy8:
+       switch (yych) {
+       case 'b':
+               YYSKIP ();
+               goto yy7;
+       default:        goto yy5;
+       }
+yy9:
+       yych = YYPEEK ();
+       switch (yych) {
+       case 'c':
+               YYSKIP ();
+               goto yy11;
+       default:        goto yy10;
+       }
+yy10:
+       YYRESTORE ();
+       goto yy5;
+yy11:
+       if (YYLESSTHAN (1)) YYFILL(1);
+       yych = YYPEEK ();
+       switch (yych) {
+       case 'c':
+               YYSKIP ();
+               goto yy11;
+       default:        goto yy13;
+       }
+yy13:
+       YYRESTORETAG (yyt1);
+       { 0 }
+}
+
diff --git a/re2c/test/tags/bug121_var_multiple.i--tags--eager-skip--input(custom).re b/re2c/test/tags/bug121_var_multiple.i--tags--eager-skip--input(custom).re
new file mode 100644 (file)
index 0000000..b661c89
--- /dev/null
@@ -0,0 +1,8 @@
+// overlapping trailing contexts of variable length:
+// we need multiple tags and we cannot deduplicate them
+
+/*!re2c
+    "ab" / "c"{2,} { 0 }
+    "a"  / "b"*    { 1 }
+    *              { d }
+*/
diff --git a/re2c/test/tags/bug121_var_multiple.i--tags--eager-skip.c b/re2c/test/tags/bug121_var_multiple.i--tags--eager-skip.c
new file mode 100644 (file)
index 0000000..d08bf0e
--- /dev/null
@@ -0,0 +1,71 @@
+/* Generated by re2c */
+// overlapping trailing contexts of variable length:
+// we need multiple tags and we cannot deduplicate them
+
+
+{
+       YYCTYPE yych;
+       if ((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
+       yych = *YYCURSOR++;
+       switch (yych) {
+       case 'a':       goto yy4;
+       default:        goto yy2;
+       }
+yy2:
+       { d }
+yy4:
+       yych = *YYCURSOR;
+       yyt2 = YYCURSOR;
+       switch (yych) {
+       case 'b':
+               ++YYCURSOR;
+               goto yy6;
+       default:        goto yy5;
+       }
+yy5:
+       YYCURSOR = yyt2;
+       { 1 }
+yy6:
+       yych = *(YYMARKER = YYCURSOR);
+       switch (yych) {
+       case 'c':
+               yyt1 = YYCURSOR;
+               ++YYCURSOR;
+               goto yy9;
+       default:        goto yy8;
+       }
+yy7:
+       if (YYLIMIT <= YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+yy8:
+       switch (yych) {
+       case 'b':
+               ++YYCURSOR;
+               goto yy7;
+       default:        goto yy5;
+       }
+yy9:
+       yych = *YYCURSOR;
+       switch (yych) {
+       case 'c':
+               ++YYCURSOR;
+               goto yy11;
+       default:        goto yy10;
+       }
+yy10:
+       YYCURSOR = YYMARKER;
+       goto yy5;
+yy11:
+       if (YYLIMIT <= YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch (yych) {
+       case 'c':
+               ++YYCURSOR;
+               goto yy11;
+       default:        goto yy13;
+       }
+yy13:
+       YYCURSOR = yyt1;
+       { 0 }
+}
+
diff --git a/re2c/test/tags/bug121_var_multiple.i--tags--eager-skip.re b/re2c/test/tags/bug121_var_multiple.i--tags--eager-skip.re
new file mode 100644 (file)
index 0000000..b661c89
--- /dev/null
@@ -0,0 +1,8 @@
+// overlapping trailing contexts of variable length:
+// we need multiple tags and we cannot deduplicate them
+
+/*!re2c
+    "ab" / "c"{2,} { 0 }
+    "a"  / "b"*    { 1 }
+    *              { d }
+*/
diff --git a/re2c/test/yyaccept_missing.bci--eager-skip.c b/re2c/test/yyaccept_missing.bci--eager-skip.c
new file mode 100644 (file)
index 0000000..7e297b3
--- /dev/null
@@ -0,0 +1,158 @@
+/* Generated by re2c */
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#define YYGETCONDITION()  yy_state
+#define YYSETCONDITION(s) yy_state = s
+#define YYCTYPE         char
+#define YYCURSOR        p
+#define YYLIMIT         (s+l)
+#define YYMARKER        q
+#define YYFILL(n)
+
+#define STATE(name)  yyc##name
+
+static enum YYCONDTYPE yy_state;
+
+enum YYCONDTYPE {
+       yycINITIAL,
+       yycST_VALUE,
+};
+
+
+int scan(char *s, int l)
+{
+       char *p = s;
+       char *q = 0;
+       char *t;
+
+       for(;;)
+       {
+               t = p;
+
+               {
+                       YYCTYPE yych;
+                       unsigned int yyaccept = 0;
+                       if (YYGETCONDITION() < 1) {
+                               goto yyc_INITIAL;
+                       } else {
+                               goto yyc_ST_VALUE;
+                       }
+/* *********************************** */
+yyc_INITIAL:
+                       if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+                       yych = *YYCURSOR++;
+                       if (yych <= 0x00) goto yy3;
+                       if (yych == '$') goto yy7;
+                       goto yy5;
+yy3:
+                       { printf("EOF\n");      return 0; }
+yy5:
+yy6:
+                       { printf("ERR\n");      return 1; }
+yy7:
+                       yych = *YYCURSOR;
+                       if (yych <= '@') goto yy6;
+                       if (yych <= 'Z') {
+                               ++YYCURSOR;
+                               goto yy8;
+                       }
+                       if (yych <= '`') goto yy6;
+                       if (yych >= '{') goto yy6;
+                       ++YYCURSOR;
+yy8:
+                       {
+               printf("FOUND %s\n", t);
+               continue;
+       }
+/* *********************************** */
+yyc_ST_VALUE:
+                       {
+                               if (YYLIMIT <= YYCURSOR) YYFILL(1);
+                               yych = *(YYMARKER = YYCURSOR);
+                               if (yych <= 0x1F) {
+                                       if (yych == '\t') {
+                                               ++YYCURSOR;
+                                               goto yy13;
+                                       }
+                               } else {
+                                       if (yych <= ' ') {
+                                               ++YYCURSOR;
+                                               goto yy13;
+                                       }
+                                       if (yych == '$') {
+                                               ++YYCURSOR;
+                                               goto yy15;
+                                       }
+                               }
+yy12:
+                               {
+               YYSETCONDITION(STATE(INITIAL));
+               printf("Found spaces\n");
+       }
+yy13:
+                               if (YYLIMIT <= YYCURSOR) YYFILL(1);
+                               yych = *YYCURSOR;
+                               if (yych == '\t') {
+                                       ++YYCURSOR;
+                                       goto yy13;
+                               }
+                               if (yych == ' ') {
+                                       ++YYCURSOR;
+                                       goto yy13;
+                               }
+                               goto yy12;
+yy15:
+                               if (YYLIMIT <= YYCURSOR) YYFILL(1);
+                               yych = *YYCURSOR;
+                               if (yych <= '@') goto yy16;
+                               if (yych <= 'Z') {
+                                       ++YYCURSOR;
+                                       goto yy17;
+                               }
+                               if (yych <= '`') goto yy16;
+                               if (yych <= 'z') {
+                                       ++YYCURSOR;
+                                       goto yy17;
+                               }
+yy16:
+                               YYCURSOR = YYMARKER;
+                               if (yyaccept == 0) {
+                                       goto yy12;
+                               } else {
+                                       goto yy18;
+                               }
+yy17:
+                               yyaccept = 1;
+                               YYMARKER = YYCURSOR;
+                               if (YYLIMIT <= YYCURSOR) YYFILL(1);
+                               yych = *YYCURSOR;
+                               if (yych == '$') {
+                                       ++YYCURSOR;
+                                       goto yy15;
+                               }
+yy18:
+                               {
+               printf("Found $ or $\\<x>\n");
+               continue;
+       }
+                       }
+               }
+
+       }
+}
+
+int main(int argc, char **argv)
+{
+       if (argc > 1)
+       {
+               return scan(argv[1], strlen(argv[1]));
+       }
+       else
+       {
+               fprintf(stderr, "%s <expr>\n", argv[0]);
+               return 1;
+       }
+}
+re2c: warning: line 44: rule in condition 'ST_VALUE' matches empty string [-Wmatch-empty-string]
diff --git a/re2c/test/yyaccept_missing.bci--eager-skip.re b/re2c/test/yyaccept_missing.bci--eager-skip.re
new file mode 100644 (file)
index 0000000..842a27e
--- /dev/null
@@ -0,0 +1,67 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#define YYGETCONDITION()  yy_state
+#define YYSETCONDITION(s) yy_state = s
+#define YYCTYPE         char
+#define YYCURSOR        p
+#define YYLIMIT         (s+l)
+#define YYMARKER        q
+#define YYFILL(n)
+
+#define STATE(name)  yyc##name
+
+static enum YYCONDTYPE yy_state;
+
+/*!types:re2c */
+
+int scan(char *s, int l)
+{
+       char *p = s;
+       char *q = 0;
+       char *t;
+
+       for(;;)
+       {
+               t = p;
+/*!re2c
+       re2c:indent:top = 2;
+
+       TABS_AND_SPACES = [ \t]*;
+       LITERAL_DOLLAR = "$"[a-zA-Z];
+
+       <INITIAL>LITERAL_DOLLAR {
+               printf("FOUND %s\n", t);
+               continue;
+       }
+
+       <ST_VALUE>LITERAL_DOLLAR+ {
+               printf("Found $ or $\\<x>\n");
+               continue;
+       }
+
+       <ST_VALUE>TABS_AND_SPACES {
+               YYSETCONDITION(STATE(INITIAL));
+               printf("Found spaces\n");
+       }
+
+       <INITIAL>"\000"         { printf("EOF\n");      return 0; }
+       <INITIAL>[^]                    { printf("ERR\n");      return 1; }
+
+*/
+       }
+}
+
+int main(int argc, char **argv)
+{
+       if (argc > 1)
+       {
+               return scan(argv[1], strlen(argv[1]));
+       }
+       else
+       {
+               fprintf(stderr, "%s <expr>\n", argv[0]);
+               return 1;
+       }
+}