]> granicus.if.org Git - re2c/commitdiff
Added debug options '--dump-dfa-det', '--dump-dfa-tagopt' and '--dump-dfa-min'.
authorUlya Trofimovich <skvadrik@gmail.com>
Wed, 30 Nov 2016 16:48:45 +0000 (16:48 +0000)
committerUlya Trofimovich <skvadrik@gmail.com>
Wed, 30 Nov 2016 18:48:12 +0000 (18:48 +0000)
re2c/Makefile.am
re2c/bootstrap/src/conf/parse_opts.cc
re2c/src/conf/opt.cc
re2c/src/conf/opt.h
re2c/src/conf/parse_opts.re
re2c/src/ir/compile.cc
re2c/src/ir/dfa/dump.cc [new file with mode: 0644]
re2c/src/ir/dfa/dump.h [new file with mode: 0644]

index eb4f475921467a3dfab8db23fa671c6491cd7889..7da7381db5daec7804847ad2530eb9a52698ccd4 100644 (file)
@@ -25,6 +25,7 @@ SRC_HDR = \
        src/ir/dfa/cfg/cfg.h \
        src/ir/dfa/closure.h \
        src/ir/dfa/dfa.h \
+       src/ir/dfa/dump.h \
        src/ir/dfa/find_state.h \
        src/ir/dfa/tagpool.h \
        src/ir/nfa/nfa.h \
@@ -105,6 +106,7 @@ SRC = \
        src/ir/dfa/closure.cc \
        src/ir/dfa/dead_rules.cc \
        src/ir/dfa/determinization.cc \
+       src/ir/dfa/dump.cc \
        src/ir/dfa/fallback_tags.cc \
        src/ir/dfa/fillpoints.cc \
        src/ir/dfa/find_state.cc \
index d891b503aad36ed6d857135ff7929043e66976e0..b8f956196fea09422630a544952d426d72507418 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.16 on Wed May 11 11:08:20 2016 */
+/* Generated by re2c 0.16 on Wed Nov 30 14:43:42 2016 */
 #line 1 "../src/conf/parse_opts.re"
 #include "src/codegen/input_api.h"
 #include "src/conf/msg.h"
@@ -73,70 +73,64 @@ opt:
        };
        yych = (YYCTYPE)*YYCURSOR;
        if (yych <= 0x00) goto yy2;
-       if (yych == '-') goto yy5;
+       if (yych == '-') goto yy6;
        goto yy4;
 yy2:
        ++YYCURSOR;
-yy3:
 #line 40 "../src/conf/parse_opts.re"
        {
                error ("bad option: %s", *argv);
                return EXIT_FAIL;
        }
-#line 87 "src/conf/parse_opts.cc"
+#line 86 "src/conf/parse_opts.cc"
 yy4:
-       yyaccept = 0;
-       yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       goto yy10;
-yy5:
+       ++YYCURSOR;
+       yych = (YYCTYPE)*YYCURSOR;
+       if (yybm[0+yych] & 128) {
+               goto yy4;
+       }
+       goto yy8;
+yy6:
        ++YYCURSOR;
        if ((yych = (YYCTYPE)*YYCURSOR) <= '-') {
-               if (yych <= 0x00) goto yy11;
-               if (yych >= '-') goto yy13;
+               if (yych <= 0x00) goto yy10;
+               if (yych >= '-') goto yy12;
        } else {
-               if (yych == 'W') goto yy15;
+               if (yych == 'W') goto yy14;
        }
 #line 63 "../src/conf/parse_opts.re"
        { goto opt_short; }
-#line 102 "src/conf/parse_opts.cc"
-yy7:
+#line 104 "src/conf/parse_opts.cc"
+yy8:
        ++YYCURSOR;
 #line 61 "../src/conf/parse_opts.re"
        { if (!opts.source (*argv))     return EXIT_FAIL; goto opt; }
-#line 107 "src/conf/parse_opts.cc"
-yy9:
-       ++YYCURSOR;
-       yych = (YYCTYPE)*YYCURSOR;
+#line 109 "src/conf/parse_opts.cc"
 yy10:
-       if (yybm[0+yych] & 128) {
-               goto yy9;
-       }
-       goto yy7;
-yy11:
        ++YYCURSOR;
 #line 60 "../src/conf/parse_opts.re"
        { if (!opts.source ("<stdin>")) return EXIT_FAIL; goto opt; }
-#line 120 "src/conf/parse_opts.cc"
-yy13:
+#line 114 "src/conf/parse_opts.cc"
+yy12:
        ++YYCURSOR;
-       if ((yych = (YYCTYPE)*YYCURSOR) <= 0x00) goto yy17;
+       if ((yych = (YYCTYPE)*YYCURSOR) <= 0x00) goto yy16;
 #line 64 "../src/conf/parse_opts.re"
        { goto opt_long; }
-#line 126 "src/conf/parse_opts.cc"
-yy15:
-       yyaccept = 1;
+#line 120 "src/conf/parse_opts.cc"
+yy14:
+       yyaccept = 0;
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
        if (yych <= 'e') {
-               if (yych <= 0x00) goto yy19;
-               if (yych >= 'e') goto yy21;
+               if (yych <= 0x00) goto yy18;
+               if (yych >= 'e') goto yy20;
        } else {
-               if (yych == 'n') goto yy23;
+               if (yych == 'n') goto yy22;
        }
-yy16:
+yy15:
 #line 68 "../src/conf/parse_opts.re"
        { option = Warn::W;        goto opt_warn; }
-#line 139 "src/conf/parse_opts.cc"
-yy17:
+#line 133 "src/conf/parse_opts.cc"
+yy16:
        ++YYCURSOR;
 #line 46 "../src/conf/parse_opts.re"
        {
@@ -152,2259 +146,2360 @@ yy17:
                }
                goto end;
        }
-#line 156 "src/conf/parse_opts.cc"
-yy19:
+#line 150 "src/conf/parse_opts.cc"
+yy18:
        ++YYCURSOR;
 #line 66 "../src/conf/parse_opts.re"
        { warn.set_all ();       goto opt; }
-#line 161 "src/conf/parse_opts.cc"
-yy21:
+#line 155 "src/conf/parse_opts.cc"
+yy20:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy24;
-yy22:
+       if (yych == 'r') goto yy23;
+yy21:
        YYCURSOR = YYMARKER;
-       if (yyaccept <= 1) {
-               if (yyaccept == 0) {
-                       goto yy3;
-               } else {
-                       goto yy16;
-               }
+       if (yyaccept == 0) {
+               goto yy15;
        } else {
-               goto yy28;
+               goto yy27;
        }
+yy22:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'o') goto yy24;
+       goto yy21;
 yy23:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy25;
-       goto yy22;
+       if (yych == 'r') goto yy25;
+       goto yy21;
 yy24:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy26;
-       goto yy22;
+       if (yych == '-') goto yy26;
+       goto yy21;
 yy25:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy27;
-       goto yy22;
+       if (yych == 'o') goto yy28;
+       goto yy21;
 yy26:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy29;
-       goto yy22;
-yy27:
-       yyaccept = 2;
+       yyaccept = 1;
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'e') goto yy30;
-yy28:
+       if (yych == 'e') goto yy29;
+yy27:
 #line 69 "../src/conf/parse_opts.re"
        { option = Warn::WNO;      goto opt_warn; }
-#line 199 "src/conf/parse_opts.cc"
+#line 189 "src/conf/parse_opts.cc"
+yy28:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'r') goto yy30;
+       goto yy21;
 yy29:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 'r') goto yy31;
-       goto yy22;
+       goto yy21;
 yy30:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy32;
-       goto yy22;
+       if (yych <= 0x00) goto yy32;
+       if (yych == '-') goto yy34;
+       goto yy21;
 yy31:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy33;
-       if (yych == '-') goto yy35;
-       goto yy22;
+       if (yych == 'r') goto yy36;
+       goto yy21;
 yy32:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy37;
-       goto yy22;
-yy33:
        ++YYCURSOR;
 #line 67 "../src/conf/parse_opts.re"
        { warn.set_all_error (); goto opt; }
-#line 221 "src/conf/parse_opts.cc"
-yy35:
+#line 211 "src/conf/parse_opts.cc"
+yy34:
        ++YYCURSOR;
 #line 70 "../src/conf/parse_opts.re"
        { option = Warn::WERROR;   goto opt_warn; }
-#line 226 "src/conf/parse_opts.cc"
-yy37:
+#line 216 "src/conf/parse_opts.cc"
+yy36:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'o') goto yy22;
+       if (yych != 'o') goto yy21;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'r') goto yy22;
+       if (yych != 'r') goto yy21;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != '-') goto yy22;
+       if (yych != '-') goto yy21;
        ++YYCURSOR;
 #line 71 "../src/conf/parse_opts.re"
        { option = Warn::WNOERROR; goto opt_warn; }
-#line 237 "src/conf/parse_opts.cc"
+#line 227 "src/conf/parse_opts.cc"
 }
 #line 72 "../src/conf/parse_opts.re"
 
 
 opt_warn:
 
-#line 244 "src/conf/parse_opts.cc"
+#line 234 "src/conf/parse_opts.cc"
 {
        YYCTYPE yych;
        yych = (YYCTYPE)*YYCURSOR;
        switch (yych) {
-       case 'c':       goto yy46;
-       case 'e':       goto yy47;
-       case 'm':       goto yy48;
-       case 'n':       goto yy49;
-       case 's':       goto yy50;
-       case 'u':       goto yy51;
-       default:        goto yy44;
+       case 'c':       goto yy45;
+       case 'e':       goto yy46;
+       case 'm':       goto yy47;
+       case 'n':       goto yy48;
+       case 's':       goto yy49;
+       case 'u':       goto yy50;
+       default:        goto yy43;
        }
-yy44:
+yy43:
        ++YYCURSOR;
-yy45:
+yy44:
 #line 77 "../src/conf/parse_opts.re"
        {
                error ("bad warning: %s", *argv);
                return EXIT_FAIL;
        }
-#line 265 "src/conf/parse_opts.cc"
+#line 255 "src/conf/parse_opts.cc"
+yy45:
+       yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
+       if (yych == 'o') goto yy51;
+       goto yy44;
 yy46:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'o') goto yy52;
-       goto yy45;
+       if (yych == 'm') goto yy53;
+       goto yy44;
 yy47:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'm') goto yy54;
-       goto yy45;
+       if (yych == 'a') goto yy54;
+       goto yy44;
 yy48:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'a') goto yy55;
-       goto yy45;
+       if (yych == 'o') goto yy55;
+       goto yy44;
 yy49:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'o') goto yy56;
-       goto yy45;
+       if (yych == 'w') goto yy56;
+       goto yy44;
 yy50:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'w') goto yy57;
-       goto yy45;
+       if (yych == 'n') goto yy57;
+       if (yych == 's') goto yy58;
+       goto yy44;
 yy51:
-       yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'n') goto yy58;
-       if (yych == 's') goto yy59;
-       goto yy45;
-yy52:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy60;
-yy53:
+       if (yych == 'n') goto yy59;
+yy52:
        YYCURSOR = YYMARKER;
-       goto yy45;
+       goto yy44;
+yy53:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'p') goto yy60;
+       goto yy52;
 yy54:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'p') goto yy61;
-       goto yy53;
+       if (yych == 't') goto yy61;
+       goto yy52;
 yy55:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy62;
-       goto yy53;
+       if (yych == 'n') goto yy62;
+       goto yy52;
 yy56:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy63;
-       goto yy53;
+       if (yych == 'a') goto yy63;
+       goto yy52;
 yy57:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy64;
-       goto yy53;
+       if (yych == 'd') goto yy64;
+       if (yych == 'r') goto yy65;
+       goto yy52;
 yy58:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'd') goto yy65;
-       if (yych == 'r') goto yy66;
-       goto yy53;
+       if (yych == 'e') goto yy66;
+       goto yy52;
 yy59:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy67;
-       goto yy53;
+       if (yych == 'd') goto yy67;
+       goto yy52;
 yy60:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'd') goto yy68;
-       goto yy53;
+       if (yych == 't') goto yy68;
+       goto yy52;
 yy61:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy69;
-       goto yy53;
+       if (yych == 'c') goto yy69;
+       goto yy52;
 yy62:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'c') goto yy70;
-       goto yy53;
+       if (yych == 'd') goto yy70;
+       goto yy52;
 yy63:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'd') goto yy71;
-       goto yy53;
+       if (yych == 'p') goto yy71;
+       goto yy52;
 yy64:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'p') goto yy72;
-       goto yy53;
+       if (yych == 'e') goto yy72;
+       goto yy52;
 yy65:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 'e') goto yy73;
-       goto yy53;
+       goto yy52;
 yy66:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy74;
-       goto yy53;
+       if (yych == 'l') goto yy74;
+       goto yy52;
 yy67:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'l') goto yy75;
-       goto yy53;
+       if (yych == 'i') goto yy75;
+       goto yy52;
 yy68:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy76;
-       goto yy53;
+       if (yych == 'y') goto yy76;
+       goto yy52;
 yy69:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'y') goto yy77;
-       goto yy53;
+       if (yych == 'h') goto yy77;
+       goto yy52;
 yy70:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'h') goto yy78;
-       goto yy53;
+       if (yych == 'e') goto yy78;
+       goto yy52;
 yy71:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy79;
-       goto yy53;
+       if (yych == 'p') goto yy79;
+       goto yy52;
 yy72:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'p') goto yy80;
-       goto yy53;
+       if (yych == 'f') goto yy80;
+       goto yy52;
 yy73:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'f') goto yy81;
-       goto yy53;
+       if (yych == 'a') goto yy81;
+       goto yy52;
 yy74:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy82;
-       goto yy53;
+       if (yych == 'e') goto yy82;
+       goto yy52;
 yy75:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy83;
-       goto yy53;
+       if (yych == 't') goto yy83;
+       goto yy52;
 yy76:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy84;
-       goto yy53;
+       if (yych == '-') goto yy84;
+       goto yy52;
 yy77:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == '-') goto yy85;
-       goto yy53;
+       goto yy52;
 yy78:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy86;
-       goto yy53;
+       if (yych == 't') goto yy86;
+       goto yy52;
 yy79:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy87;
-       goto yy53;
+       if (yych == 'e') goto yy87;
+       goto yy52;
 yy80:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy88;
-       goto yy53;
+       if (yych == 'i') goto yy88;
+       goto yy52;
 yy81:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy89;
-       goto yy53;
+       if (yych == 'c') goto yy89;
+       goto yy52;
 yy82:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'c') goto yy90;
-       goto yy53;
+       if (yych == 's') goto yy90;
+       goto yy52;
 yy83:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy91;
-       goto yy53;
+       if (yych == 'i') goto yy91;
+       goto yy52;
 yy84:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy92;
-       goto yy53;
+       if (yych == 'c') goto yy92;
+       goto yy52;
 yy85:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'c') goto yy93;
-       goto yy53;
+       if (yych == 'e') goto yy93;
+       goto yy52;
 yy86:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 'e') goto yy94;
-       goto yy53;
+       goto yy52;
 yy87:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy95;
-       goto yy53;
+       if (yych == 'd') goto yy95;
+       goto yy52;
 yy88:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'd') goto yy96;
-       goto yy53;
+       if (yych == 'n') goto yy96;
+       goto yy52;
 yy89:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy97;
-       goto yy53;
+       if (yych == 'h') goto yy97;
+       goto yy52;
 yy90:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'h') goto yy98;
-       goto yy53;
+       if (yych == 's') goto yy98;
+       goto yy52;
 yy91:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy99;
-       goto yy53;
+       if (yych == 'o') goto yy99;
+       goto yy52;
 yy92:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy100;
-       goto yy53;
+       if (yych == 'h') goto yy100;
+       goto yy52;
 yy93:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'h') goto yy101;
-       goto yy53;
+       if (yych == 'm') goto yy101;
+       goto yy52;
 yy94:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'm') goto yy102;
-       goto yy53;
+       if (yych == 'r') goto yy102;
+       goto yy52;
 yy95:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy103;
-       goto yy53;
+       if (yych == '-') goto yy103;
+       goto yy52;
 yy96:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy104;
-       goto yy53;
+       if (yych == 'e') goto yy104;
+       goto yy52;
 yy97:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy105;
-       goto yy53;
+       if (yych == 'a') goto yy105;
+       goto yy52;
 yy98:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy106;
-       goto yy53;
+       if (yych == '-') goto yy106;
+       goto yy52;
 yy99:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy107;
-       goto yy53;
+       if (yych == 'n') goto yy107;
+       goto yy52;
 yy100:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy108;
-       goto yy53;
+       if (yych == 'a') goto yy108;
+       goto yy52;
 yy101:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy109;
-       goto yy53;
+       if (yych == 'p') goto yy109;
+       goto yy52;
 yy102:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'p') goto yy110;
-       goto yy53;
+       if (yych == 'm') goto yy110;
+       goto yy52;
 yy103:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'm') goto yy111;
-       goto yy53;
+       if (yych == 'r') goto yy111;
+       goto yy52;
 yy104:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy112;
-       goto yy53;
+       if (yych == 'd') goto yy112;
+       goto yy52;
 yy105:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'd') goto yy113;
-       goto yy53;
+       if (yych == 'b') goto yy113;
+       goto yy52;
 yy106:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'b') goto yy114;
-       goto yy53;
+       if (yych == 'e') goto yy114;
+       goto yy52;
 yy107:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy115;
-       goto yy53;
+       if (yych == '-') goto yy115;
+       goto yy52;
 yy108:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy116;
-       goto yy53;
+       if (yych == 'r') goto yy116;
+       goto yy52;
 yy109:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy117;
-       goto yy53;
+       if (yych == 't') goto yy117;
+       goto yy52;
 yy110:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy118;
-       goto yy53;
+       if (yych == 'i') goto yy118;
+       goto yy52;
 yy111:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy119;
-       goto yy53;
+       if (yych == 'a') goto yy119;
+       goto yy52;
 yy112:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy120;
-       goto yy53;
+       if (yych == '-') goto yy120;
+       goto yy52;
 yy113:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy121;
-       goto yy53;
+       if (yych == 'l') goto yy121;
+       goto yy52;
 yy114:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'l') goto yy122;
-       goto yy53;
+       if (yych == 's') goto yy122;
+       goto yy52;
 yy115:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy123;
-       goto yy53;
+       if (yych == 'o') goto yy123;
+       goto yy52;
 yy116:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy124;
-       goto yy53;
+       if (yych == 'a') goto yy124;
+       goto yy52;
 yy117:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy125;
-       goto yy53;
+       if (yych == 'y') goto yy125;
+       goto yy52;
 yy118:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'y') goto yy126;
-       goto yy53;
+       if (yych == 'n') goto yy126;
+       goto yy52;
 yy119:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 'n') goto yy127;
-       goto yy53;
+       goto yy52;
 yy120:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy128;
-       goto yy53;
+       if (yych == 'c') goto yy128;
+       goto yy52;
 yy121:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'c') goto yy129;
-       goto yy53;
+       if (yych == 'e') goto yy129;
+       goto yy52;
 yy122:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy130;
-       goto yy53;
+       if (yych == 'c') goto yy130;
+       goto yy52;
 yy123:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'c') goto yy131;
-       goto yy53;
+       if (yych == 'r') goto yy131;
+       goto yy52;
 yy124:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy132;
-       goto yy53;
+       if (yych == 'c') goto yy132;
+       goto yy52;
 yy125:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'c') goto yy133;
-       goto yy53;
+       if (yych == '-') goto yy133;
+       goto yy52;
 yy126:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy134;
-       goto yy53;
+       if (yych == 'i') goto yy134;
+       goto yy52;
 yy127:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy135;
-       goto yy53;
+       if (yych == 'g') goto yy135;
+       goto yy52;
 yy128:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'g') goto yy136;
-       goto yy53;
+       if (yych == 'o') goto yy136;
+       goto yy52;
 yy129:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy137;
-       goto yy53;
+       if (yych == '-') goto yy137;
+       goto yy52;
 yy130:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy138;
-       goto yy53;
+       if (yych == 'a') goto yy138;
+       goto yy52;
 yy131:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy139;
-       goto yy53;
+       if (yych == 'd') goto yy139;
+       goto yy52;
 yy132:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'd') goto yy140;
-       goto yy53;
+       if (yych == 't') goto yy140;
+       goto yy52;
 yy133:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy141;
-       goto yy53;
+       if (yych == 's') goto yy141;
+       goto yy52;
 yy134:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 's') goto yy142;
-       goto yy53;
+       goto yy52;
 yy135:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy143;
-       goto yy53;
+       if (yych == 'e') goto yy143;
+       goto yy52;
 yy136:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy144;
-       goto yy53;
+       if (yych == 'n') goto yy144;
+       goto yy52;
 yy137:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy145;
-       goto yy53;
+       if (yych == 'r') goto yy145;
+       goto yy52;
 yy138:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy146;
-       goto yy53;
+       if (yych == 'p') goto yy146;
+       goto yy52;
 yy139:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'p') goto yy147;
-       goto yy53;
+       if (yych == 'e') goto yy147;
+       goto yy52;
 yy140:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 'e') goto yy148;
-       goto yy53;
+       goto yy52;
 yy141:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy149;
-       goto yy53;
+       if (yych == 't') goto yy149;
+       goto yy52;
 yy142:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 't') goto yy150;
-       goto yy53;
+       goto yy52;
 yy143:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy151;
-       goto yy53;
+       if (yych <= 0x00) goto yy151;
+       goto yy52;
 yy144:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy152;
-       goto yy53;
+       if (yych == 't') goto yy153;
+       goto yy52;
 yy145:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy154;
-       goto yy53;
+       if (yych == 'u') goto yy154;
+       goto yy52;
 yy146:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'u') goto yy155;
-       goto yy53;
+       if (yych == 'e') goto yy155;
+       goto yy52;
 yy147:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy156;
-       goto yy53;
+       if (yych == 'r') goto yy156;
+       goto yy52;
 yy148:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 'r') goto yy157;
-       goto yy53;
+       goto yy52;
 yy149:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 'r') goto yy158;
-       goto yy53;
+       goto yy52;
 yy150:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy159;
-       goto yy53;
+       if (yych == 'i') goto yy159;
+       goto yy52;
 yy151:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy160;
-       goto yy53;
-yy152:
        ++YYCURSOR;
 #line 85 "../src/conf/parse_opts.re"
        { warn.set (Warn::SWAPPED_RANGE,            option); goto opt; }
-#line 694 "src/conf/parse_opts.cc"
+#line 684 "src/conf/parse_opts.cc"
+yy153:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'r') goto yy160;
+       goto yy52;
 yy154:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy161;
-       goto yy53;
+       if (yych == 'l') goto yy161;
+       goto yy52;
 yy155:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'l') goto yy162;
-       goto yy53;
+       if (yych <= 0x00) goto yy162;
+       goto yy52;
 yy156:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy163;
-       goto yy53;
+       if (yych <= 0x00) goto yy164;
+       goto yy52;
 yy157:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy165;
-       goto yy53;
+       if (yych == '-') goto yy166;
+       goto yy52;
 yy158:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy167;
-       goto yy53;
+       if (yych == 'i') goto yy167;
+       goto yy52;
 yy159:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy168;
-       goto yy53;
+       if (yych == 'c') goto yy168;
+       goto yy52;
 yy160:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'c') goto yy169;
-       goto yy53;
+       if (yych == 'o') goto yy169;
+       goto yy52;
 yy161:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy170;
-       goto yy53;
+       if (yych == 'e') goto yy170;
+       goto yy52;
 yy162:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy171;
-       goto yy53;
-yy163:
        ++YYCURSOR;
 #line 88 "../src/conf/parse_opts.re"
        { warn.set (Warn::USELESS_ESCAPE,           option); goto opt; }
-#line 735 "src/conf/parse_opts.cc"
-yy165:
+#line 725 "src/conf/parse_opts.cc"
+yy164:
        ++YYCURSOR;
 #line 81 "../src/conf/parse_opts.re"
        { warn.set (Warn::CONDITION_ORDER,          option); goto opt; }
-#line 740 "src/conf/parse_opts.cc"
+#line 730 "src/conf/parse_opts.cc"
+yy166:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'c') goto yy171;
+       goto yy52;
 yy167:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'c') goto yy172;
-       goto yy53;
+       if (yych == 'n') goto yy172;
+       goto yy52;
 yy168:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy173;
-       goto yy53;
+       if (yych == '-') goto yy173;
+       goto yy52;
 yy169:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy174;
-       goto yy53;
+       if (yych == 'l') goto yy174;
+       goto yy52;
 yy170:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'l') goto yy175;
-       goto yy53;
+       if (yych == 's') goto yy175;
+       goto yy52;
 yy171:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy176;
-       goto yy53;
+       if (yych == 'l') goto yy176;
+       goto yy52;
 yy172:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'l') goto yy177;
-       goto yy53;
+       if (yych == 'g') goto yy177;
+       goto yy52;
 yy173:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'g') goto yy178;
-       goto yy53;
+       if (yych == 't') goto yy178;
+       goto yy52;
 yy174:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy179;
-       goto yy53;
+       if (yych == '-') goto yy179;
+       goto yy52;
 yy175:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy180;
-       goto yy53;
+       if (yych <= 0x00) goto yy180;
+       goto yy52;
 yy176:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy181;
-       goto yy53;
+       if (yych == 'a') goto yy182;
+       goto yy52;
 yy177:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy183;
-       goto yy53;
+       if (yych <= 0x00) goto yy183;
+       goto yy52;
 yy178:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy184;
-       goto yy53;
+       if (yych == 'a') goto yy185;
+       goto yy52;
 yy179:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy186;
-       goto yy53;
+       if (yych == 'f') goto yy186;
+       goto yy52;
 yy180:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'f') goto yy187;
-       goto yy53;
-yy181:
        ++YYCURSOR;
 #line 87 "../src/conf/parse_opts.re"
        { warn.set (Warn::UNREACHABLE_RULES,        option); goto opt; }
-#line 801 "src/conf/parse_opts.cc"
-yy183:
+#line 791 "src/conf/parse_opts.cc"
+yy182:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy188;
-       goto yy53;
-yy184:
+       if (yych == 's') goto yy187;
+       goto yy52;
+yy183:
        ++YYCURSOR;
 #line 83 "../src/conf/parse_opts.re"
        { warn.set (Warn::MATCH_EMPTY_STRING,       option); goto opt; }
-#line 810 "src/conf/parse_opts.cc"
+#line 800 "src/conf/parse_opts.cc"
+yy185:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'g') goto yy188;
+       goto yy52;
 yy186:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'g') goto yy189;
-       goto yy53;
+       if (yych == 'l') goto yy189;
+       goto yy52;
 yy187:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'l') goto yy190;
-       goto yy53;
+       if (yych == 's') goto yy190;
+       goto yy52;
 yy188:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 's') goto yy191;
-       goto yy53;
+       goto yy52;
 yy189:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy192;
-       goto yy53;
+       if (yych == 'o') goto yy192;
+       goto yy52;
 yy190:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy193;
-       goto yy53;
+       if (yych <= 0x00) goto yy193;
+       goto yy52;
 yy191:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy194;
-       goto yy53;
+       if (yych <= 0x00) goto yy195;
+       goto yy52;
 yy192:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy196;
-       goto yy53;
+       if (yych == 'w') goto yy197;
+       goto yy52;
 yy193:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'w') goto yy198;
-       goto yy53;
-yy194:
        ++YYCURSOR;
 #line 82 "../src/conf/parse_opts.re"
        { warn.set (Warn::EMPTY_CHARACTER_CLASS,    option); goto opt; }
-#line 847 "src/conf/parse_opts.cc"
-yy196:
+#line 837 "src/conf/parse_opts.cc"
+yy195:
        ++YYCURSOR;
 #line 84 "../src/conf/parse_opts.re"
        { warn.set (Warn::NONDETERMINISTIC_TAGS,    option); goto opt; }
-#line 852 "src/conf/parse_opts.cc"
-yy198:
+#line 842 "src/conf/parse_opts.cc"
+yy197:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy53;
+       if (yych >= 0x01) goto yy52;
        ++YYCURSOR;
 #line 86 "../src/conf/parse_opts.re"
        { warn.set (Warn::UNDEFINED_CONTROL_FLOW,   option); goto opt; }
-#line 859 "src/conf/parse_opts.cc"
+#line 849 "src/conf/parse_opts.cc"
 }
 #line 89 "../src/conf/parse_opts.re"
 
 
 opt_short:
 
-#line 866 "src/conf/parse_opts.cc"
+#line 856 "src/conf/parse_opts.cc"
 {
        YYCTYPE yych;
        yych = (YYCTYPE)*YYCURSOR;
        if (yych <= 'b') {
                if (yych <= 'D') {
                        if (yych <= '7') {
-                               if (yych <= 0x00) goto yy203;
-                               if (yych == '1') goto yy207;
-                               goto yy205;
+                               if (yych <= 0x00) goto yy202;
+                               if (yych == '1') goto yy206;
+                               goto yy204;
                        } else {
                                if (yych <= '>') {
-                                       if (yych <= '8') goto yy209;
-                                       goto yy205;
+                                       if (yych <= '8') goto yy208;
+                                       goto yy204;
                                } else {
-                                       if (yych <= '?') goto yy211;
-                                       if (yych <= 'C') goto yy205;
-                                       goto yy213;
+                                       if (yych <= '?') goto yy210;
+                                       if (yych <= 'C') goto yy204;
+                                       goto yy212;
                                }
                        }
                } else {
                        if (yych <= 'S') {
-                               if (yych == 'F') goto yy215;
-                               if (yych <= 'R') goto yy205;
-                               goto yy217;
+                               if (yych == 'F') goto yy214;
+                               if (yych <= 'R') goto yy204;
+                               goto yy216;
                        } else {
                                if (yych <= 'U') {
-                                       if (yych <= 'T') goto yy219;
-                                       goto yy205;
+                                       if (yych <= 'T') goto yy218;
+                                       goto yy204;
                                } else {
-                                       if (yych <= 'V') goto yy221;
-                                       if (yych <= 'a') goto yy205;
-                                       goto yy223;
+                                       if (yych <= 'V') goto yy220;
+                                       if (yych <= 'a') goto yy204;
+                                       goto yy222;
                                }
                        }
                }
        } else {
                if (yych <= 'o') {
                        if (yych <= 'f') {
-                               if (yych <= 'c') goto yy225;
-                               if (yych <= 'd') goto yy227;
-                               if (yych <= 'e') goto yy229;
-                               goto yy231;
+                               if (yych <= 'c') goto yy224;
+                               if (yych <= 'd') goto yy226;
+                               if (yych <= 'e') goto yy228;
+                               goto yy230;
                        } else {
                                if (yych <= 'h') {
-                                       if (yych <= 'g') goto yy233;
-                                       goto yy211;
+                                       if (yych <= 'g') goto yy232;
+                                       goto yy210;
                                } else {
-                                       if (yych <= 'i') goto yy235;
-                                       if (yych <= 'n') goto yy205;
-                                       goto yy237;
+                                       if (yych <= 'i') goto yy234;
+                                       if (yych <= 'n') goto yy204;
+                                       goto yy236;
                                }
                        }
                } else {
                        if (yych <= 't') {
-                               if (yych <= 'q') goto yy205;
-                               if (yych <= 'r') goto yy239;
-                               if (yych <= 's') goto yy241;
-                               goto yy243;
+                               if (yych <= 'q') goto yy204;
+                               if (yych <= 'r') goto yy238;
+                               if (yych <= 's') goto yy240;
+                               goto yy242;
                        } else {
                                if (yych <= 'v') {
-                                       if (yych <= 'u') goto yy245;
-                                       goto yy247;
+                                       if (yych <= 'u') goto yy244;
+                                       goto yy246;
                                } else {
-                                       if (yych <= 'w') goto yy249;
-                                       if (yych <= 'x') goto yy251;
-                                       goto yy205;
+                                       if (yych <= 'w') goto yy248;
+                                       if (yych <= 'x') goto yy250;
+                                       goto yy204;
                                }
                        }
                }
        }
-yy203:
+yy202:
        ++YYCURSOR;
 #line 98 "../src/conf/parse_opts.re"
        { goto opt; }
-#line 941 "src/conf/parse_opts.cc"
-yy205:
+#line 931 "src/conf/parse_opts.cc"
+yy204:
        ++YYCURSOR;
 #line 94 "../src/conf/parse_opts.re"
        {
                error ("bad short option: %s", *argv);
                return EXIT_FAIL;
        }
-#line 949 "src/conf/parse_opts.cc"
-yy207:
+#line 939 "src/conf/parse_opts.cc"
+yy206:
        ++YYCURSOR;
 #line 123 "../src/conf/parse_opts.re"
        { goto opt_short; }
-#line 954 "src/conf/parse_opts.cc"
-yy209:
+#line 944 "src/conf/parse_opts.cc"
+yy208:
        ++YYCURSOR;
 #line 118 "../src/conf/parse_opts.re"
        { if (!opts.set_encoding (Enc::UTF8))   { error_encoding (); return EXIT_FAIL; } goto opt_short; }
-#line 959 "src/conf/parse_opts.cc"
-yy211:
+#line 949 "src/conf/parse_opts.cc"
+yy210:
        ++YYCURSOR;
 #line 99 "../src/conf/parse_opts.re"
        { usage ();   return EXIT_OK; }
-#line 964 "src/conf/parse_opts.cc"
-yy213:
+#line 954 "src/conf/parse_opts.cc"
+yy212:
        ++YYCURSOR;
 #line 105 "../src/conf/parse_opts.re"
        { opts.set_target (opt_t::DOT);      goto opt_short; }
-#line 969 "src/conf/parse_opts.cc"
-yy215:
+#line 959 "src/conf/parse_opts.cc"
+yy214:
        ++YYCURSOR;
 #line 107 "../src/conf/parse_opts.re"
        { opts.set_FFlag (true);             goto opt_short; }
-#line 974 "src/conf/parse_opts.cc"
-yy217:
+#line 964 "src/conf/parse_opts.cc"
+yy216:
        ++YYCURSOR;
 #line 112 "../src/conf/parse_opts.re"
        { opts.set_target (opt_t::SKELETON); goto opt_short; }
-#line 979 "src/conf/parse_opts.cc"
-yy219:
+#line 969 "src/conf/parse_opts.cc"
+yy218:
        ++YYCURSOR;
 #line 113 "../src/conf/parse_opts.re"
        { opts.set_tags (true);              goto opt_short; }
-#line 984 "src/conf/parse_opts.cc"
-yy221:
+#line 974 "src/conf/parse_opts.cc"
+yy220:
        ++YYCURSOR;
 #line 101 "../src/conf/parse_opts.re"
        { vernum ();  return EXIT_OK; }
-#line 989 "src/conf/parse_opts.cc"
-yy223:
+#line 979 "src/conf/parse_opts.cc"
+yy222:
        ++YYCURSOR;
 #line 102 "../src/conf/parse_opts.re"
        { opts.set_bFlag (true);             goto opt_short; }
-#line 994 "src/conf/parse_opts.cc"
-yy225:
+#line 984 "src/conf/parse_opts.cc"
+yy224:
        ++YYCURSOR;
 #line 103 "../src/conf/parse_opts.re"
        { opts.set_cFlag (true);             goto opt_short; }
-#line 999 "src/conf/parse_opts.cc"
-yy227:
+#line 989 "src/conf/parse_opts.cc"
+yy226:
        ++YYCURSOR;
 #line 104 "../src/conf/parse_opts.re"
        { opts.set_dFlag (true);             goto opt_short; }
-#line 1004 "src/conf/parse_opts.cc"
-yy229:
+#line 994 "src/conf/parse_opts.cc"
+yy228:
        ++YYCURSOR;
 #line 114 "../src/conf/parse_opts.re"
        { if (!opts.set_encoding (Enc::EBCDIC)) { error_encoding (); return EXIT_FAIL; } goto opt_short; }
-#line 1009 "src/conf/parse_opts.cc"
-yy231:
+#line 999 "src/conf/parse_opts.cc"
+yy230:
        ++YYCURSOR;
 #line 106 "../src/conf/parse_opts.re"
        { opts.set_fFlag (true);             goto opt_short; }
-#line 1014 "src/conf/parse_opts.cc"
-yy233:
+#line 1004 "src/conf/parse_opts.cc"
+yy232:
        ++YYCURSOR;
 #line 108 "../src/conf/parse_opts.re"
        { opts.set_gFlag (true);             goto opt_short; }
-#line 1019 "src/conf/parse_opts.cc"
-yy235:
+#line 1009 "src/conf/parse_opts.cc"
+yy234:
        ++YYCURSOR;
 #line 109 "../src/conf/parse_opts.re"
        { opts.set_iFlag (true);             goto opt_short; }
-#line 1024 "src/conf/parse_opts.cc"
-yy237:
+#line 1014 "src/conf/parse_opts.cc"
+yy236:
        ++YYCURSOR;
-       if ((yych = (YYCTYPE)*YYCURSOR) <= 0x00) goto yy253;
+       if ((yych = (YYCTYPE)*YYCURSOR) <= 0x00) goto yy252;
 #line 120 "../src/conf/parse_opts.re"
        { *argv = YYCURSOR;                                                             goto opt_output; }
-#line 1030 "src/conf/parse_opts.cc"
-yy239:
+#line 1020 "src/conf/parse_opts.cc"
+yy238:
        ++YYCURSOR;
 #line 110 "../src/conf/parse_opts.re"
        { opts.set_rFlag (true);             goto opt_short; }
-#line 1035 "src/conf/parse_opts.cc"
-yy241:
+#line 1025 "src/conf/parse_opts.cc"
+yy240:
        ++YYCURSOR;
 #line 111 "../src/conf/parse_opts.re"
        { opts.set_sFlag (true);             goto opt_short; }
-#line 1040 "src/conf/parse_opts.cc"
-yy243:
+#line 1030 "src/conf/parse_opts.cc"
+yy242:
        ++YYCURSOR;
-       if ((yych = (YYCTYPE)*YYCURSOR) <= 0x00) goto yy255;
+       if ((yych = (YYCTYPE)*YYCURSOR) <= 0x00) goto yy254;
 #line 122 "../src/conf/parse_opts.re"
        { *argv = YYCURSOR;                                                                  goto opt_header; }
-#line 1046 "src/conf/parse_opts.cc"
-yy245:
+#line 1036 "src/conf/parse_opts.cc"
+yy244:
        ++YYCURSOR;
 #line 115 "../src/conf/parse_opts.re"
        { if (!opts.set_encoding (Enc::UTF32))  { error_encoding (); return EXIT_FAIL; } goto opt_short; }
-#line 1051 "src/conf/parse_opts.cc"
-yy247:
+#line 1041 "src/conf/parse_opts.cc"
+yy246:
        ++YYCURSOR;
 #line 100 "../src/conf/parse_opts.re"
        { version (); return EXIT_OK; }
-#line 1056 "src/conf/parse_opts.cc"
-yy249:
+#line 1046 "src/conf/parse_opts.cc"
+yy248:
        ++YYCURSOR;
 #line 116 "../src/conf/parse_opts.re"
        { if (!opts.set_encoding (Enc::UCS2))   { error_encoding (); return EXIT_FAIL; } goto opt_short; }
-#line 1061 "src/conf/parse_opts.cc"
-yy251:
+#line 1051 "src/conf/parse_opts.cc"
+yy250:
        ++YYCURSOR;
 #line 117 "../src/conf/parse_opts.re"
        { if (!opts.set_encoding (Enc::UTF16))  { error_encoding (); return EXIT_FAIL; } goto opt_short; }
-#line 1066 "src/conf/parse_opts.cc"
-yy253:
+#line 1056 "src/conf/parse_opts.cc"
+yy252:
        ++YYCURSOR;
 #line 119 "../src/conf/parse_opts.re"
        { if (!next (YYCURSOR, argv)) { error_arg ("-o, --output"); return EXIT_FAIL; } goto opt_output; }
-#line 1071 "src/conf/parse_opts.cc"
-yy255:
+#line 1061 "src/conf/parse_opts.cc"
+yy254:
        ++YYCURSOR;
 #line 121 "../src/conf/parse_opts.re"
        { if (!next (YYCURSOR, argv)) { error_arg ("-t, --type-header"); return EXIT_FAIL; } goto opt_header; }
-#line 1076 "src/conf/parse_opts.cc"
+#line 1066 "src/conf/parse_opts.cc"
 }
 #line 124 "../src/conf/parse_opts.re"
 
 
 opt_long:
 
-#line 1083 "src/conf/parse_opts.cc"
+#line 1073 "src/conf/parse_opts.cc"
 {
        YYCTYPE yych;
        yych = (YYCTYPE)*YYCURSOR;
        switch (yych) {
-       case 'b':       goto yy261;
-       case 'c':       goto yy262;
-       case 'd':       goto yy263;
-       case 'e':       goto yy264;
-       case 'f':       goto yy265;
-       case 'h':       goto yy266;
-       case 'i':       goto yy267;
-       case 'n':       goto yy268;
-       case 'o':       goto yy269;
-       case 'r':       goto yy270;
-       case 's':       goto yy271;
-       case 't':       goto yy272;
-       case 'u':       goto yy273;
-       case 'v':       goto yy274;
-       case 'w':       goto yy275;
-       default:        goto yy259;
+       case 'b':       goto yy260;
+       case 'c':       goto yy261;
+       case 'd':       goto yy262;
+       case 'e':       goto yy263;
+       case 'f':       goto yy264;
+       case 'h':       goto yy265;
+       case 'i':       goto yy266;
+       case 'n':       goto yy267;
+       case 'o':       goto yy268;
+       case 'r':       goto yy269;
+       case 's':       goto yy270;
+       case 't':       goto yy271;
+       case 'u':       goto yy272;
+       case 'v':       goto yy273;
+       case 'w':       goto yy274;
+       default:        goto yy258;
        }
-yy259:
+yy258:
        ++YYCURSOR;
-yy260:
+yy259:
 #line 129 "../src/conf/parse_opts.re"
        {
                error ("bad long option: %s", *argv);
                return EXIT_FAIL;
        }
-#line 1113 "src/conf/parse_opts.cc"
+#line 1103 "src/conf/parse_opts.cc"
+yy260:
+       yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
+       if (yych == 'i') goto yy275;
+       goto yy259;
 yy261:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'i') goto yy276;
-       goto yy260;
+       if (yych == 'a') goto yy277;
+       if (yych == 'o') goto yy278;
+       goto yy259;
 yy262:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'a') goto yy278;
-       if (yych == 'o') goto yy279;
-       goto yy260;
+       if (yych <= 'f') {
+               if (yych <= 'd') goto yy259;
+               if (yych <= 'e') goto yy279;
+               goto yy280;
+       } else {
+               if (yych == 'u') goto yy281;
+               goto yy259;
+       }
 yy263:
-       yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych <= 'd') goto yy260;
-       if (yych <= 'e') goto yy280;
-       if (yych <= 'f') goto yy281;
-       goto yy260;
-yy264:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
        if (yych <= 'l') {
                if (yych == 'c') goto yy282;
-               goto yy260;
+               goto yy259;
        } else {
                if (yych <= 'm') goto yy283;
                if (yych <= 'n') goto yy284;
-               goto yy260;
+               goto yy259;
        }
-yy265:
+yy264:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
        if (yych == 'l') goto yy285;
-       goto yy260;
-yy266:
+       goto yy259;
+yy265:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
        if (yych == 'e') goto yy286;
-       goto yy260;
-yy267:
+       goto yy259;
+yy266:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
        if (yych == 'n') goto yy287;
-       goto yy260;
-yy268:
+       goto yy259;
+yy267:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
        if (yych == 'e') goto yy288;
        if (yych == 'o') goto yy289;
-       goto yy260;
-yy269:
+       goto yy259;
+yy268:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
        if (yych == 'u') goto yy290;
-       goto yy260;
-yy270:
+       goto yy259;
+yy269:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
        if (yych == 'e') goto yy291;
-       goto yy260;
-yy271:
+       goto yy259;
+yy270:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
        if (yych <= 'j') {
                if (yych == 'i') goto yy292;
-               goto yy260;
+               goto yy259;
        } else {
                if (yych <= 'k') goto yy293;
                if (yych == 't') goto yy294;
-               goto yy260;
+               goto yy259;
        }
-yy272:
+yy271:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
        if (yych == 'a') goto yy295;
        if (yych == 'y') goto yy296;
-       goto yy260;
-yy273:
+       goto yy259;
+yy272:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
        if (yych == 'n') goto yy297;
        if (yych == 't') goto yy298;
-       goto yy260;
-yy274:
+       goto yy259;
+yy273:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
        if (yych == 'e') goto yy299;
-       goto yy260;
-yy275:
+       goto yy259;
+yy274:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
        if (yych == 'i') goto yy300;
-       goto yy260;
-yy276:
+       goto yy259;
+yy275:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 't') goto yy301;
-yy277:
+yy276:
        YYCURSOR = YYMARKER;
-       goto yy260;
-yy278:
+       goto yy259;
+yy277:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 's') goto yy302;
-       goto yy277;
-yy279:
+       goto yy276;
+yy278:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 'm') goto yy303;
-       goto yy277;
-yy280:
+       goto yy276;
+yy279:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 'b') goto yy304;
-       goto yy277;
-yy281:
+       goto yy276;
+yy280:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 'a') goto yy305;
-       goto yy277;
+       goto yy276;
+yy281:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'm') goto yy306;
+       goto yy276;
 yy282:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'b') goto yy306;
-       goto yy277;
+       if (yych == 'b') goto yy307;
+       goto yy276;
 yy283:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy307;
-       if (yych == 'p') goto yy308;
-       goto yy277;
+       if (yych == 'i') goto yy308;
+       if (yych == 'p') goto yy309;
+       goto yy276;
 yy284:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'c') goto yy309;
-       goto yy277;
+       if (yych == 'c') goto yy310;
+       goto yy276;
 yy285:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy310;
-       goto yy277;
+       if (yych == 'e') goto yy311;
+       goto yy276;
 yy286:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'l') goto yy311;
-       goto yy277;
+       if (yych == 'l') goto yy312;
+       goto yy276;
 yy287:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'p') goto yy312;
-       goto yy277;
+       if (yych == 'p') goto yy313;
+       goto yy276;
 yy288:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy313;
-       goto yy277;
+       if (yych == 's') goto yy314;
+       goto yy276;
 yy289:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy314;
-       goto yy277;
+       if (yych == '-') goto yy315;
+       goto yy276;
 yy290:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy315;
-       goto yy277;
+       if (yych == 't') goto yy316;
+       goto yy276;
 yy291:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'u') goto yy316;
-       goto yy277;
+       if (yych == 'u') goto yy317;
+       goto yy276;
 yy292:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy317;
-       goto yy277;
+       if (yych == 'n') goto yy318;
+       goto yy276;
 yy293:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy318;
-       goto yy277;
+       if (yych == 'e') goto yy319;
+       goto yy276;
 yy294:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy319;
-       if (yych == 'o') goto yy320;
-       goto yy277;
+       if (yych == 'a') goto yy320;
+       if (yych == 'o') goto yy321;
+       goto yy276;
 yy295:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'g') goto yy321;
-       goto yy277;
+       if (yych == 'g') goto yy322;
+       goto yy276;
 yy296:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'p') goto yy322;
-       goto yy277;
+       if (yych == 'p') goto yy323;
+       goto yy276;
 yy297:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy323;
-       goto yy277;
+       if (yych == 'i') goto yy324;
+       goto yy276;
 yy298:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'f') goto yy324;
-       goto yy277;
+       if (yych == 'f') goto yy325;
+       goto yy276;
 yy299:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy325;
-       goto yy277;
+       if (yych == 'r') goto yy326;
+       goto yy276;
 yy300:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'd') goto yy326;
-       goto yy277;
+       if (yych == 'd') goto yy327;
+       goto yy276;
 yy301:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy327;
-       goto yy277;
+       if (yych == '-') goto yy328;
+       goto yy276;
 yy302:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy328;
-       goto yy277;
+       if (yych == 'e') goto yy329;
+       goto yy276;
 yy303:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'p') goto yy329;
-       goto yy277;
+       if (yych == 'p') goto yy330;
+       goto yy276;
 yy304:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'u') goto yy330;
-       goto yy277;
+       if (yych == 'u') goto yy331;
+       goto yy276;
 yy305:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy331;
-       goto yy277;
+       if (yych == '-') goto yy332;
+       goto yy276;
 yy306:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy332;
-       goto yy277;
+       if (yych == 'p') goto yy333;
+       goto yy276;
 yy307:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy334;
-       goto yy277;
+       if (yych <= 0x00) goto yy334;
+       goto yy276;
 yy308:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy335;
-       goto yy277;
+       if (yych == 't') goto yy336;
+       goto yy276;
 yy309:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy336;
-       goto yy277;
+       if (yych == 't') goto yy337;
+       goto yy276;
 yy310:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'x') goto yy337;
-       goto yy277;
+       if (yych == 'o') goto yy338;
+       goto yy276;
 yy311:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'p') goto yy338;
-       goto yy277;
+       if (yych == 'x') goto yy339;
+       goto yy276;
 yy312:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'u') goto yy339;
-       goto yy277;
+       if (yych == 'p') goto yy340;
+       goto yy276;
 yy313:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy340;
-       goto yy277;
+       if (yych == 'u') goto yy341;
+       goto yy276;
 yy314:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 't') goto yy342;
+       goto yy276;
+yy315:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych <= 'f') {
-               if (yych == 'd') goto yy341;
-               goto yy277;
+               if (yych == 'd') goto yy343;
+               goto yy276;
        } else {
-               if (yych <= 'g') goto yy342;
-               if (yych == 'v') goto yy343;
-               goto yy277;
+               if (yych <= 'g') goto yy344;
+               if (yych == 'v') goto yy345;
+               goto yy276;
        }
-yy315:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'p') goto yy344;
-       goto yy277;
 yy316:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy345;
-       goto yy277;
+       if (yych == 'p') goto yy346;
+       goto yy276;
 yy317:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'g') goto yy346;
-       goto yy277;
+       if (yych == 's') goto yy347;
+       goto yy276;
 yy318:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'l') goto yy347;
-       goto yy277;
+       if (yych == 'g') goto yy348;
+       goto yy276;
 yy319:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy348;
-       goto yy277;
+       if (yych == 'l') goto yy349;
+       goto yy276;
 yy320:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy349;
-       goto yy277;
+       if (yych == 'r') goto yy350;
+       goto yy276;
 yy321:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy350;
-       goto yy277;
+       if (yych == 'r') goto yy351;
+       goto yy276;
 yy322:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy351;
-       goto yy277;
+       if (yych == 's') goto yy352;
+       goto yy276;
 yy323:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'c') goto yy352;
-       goto yy277;
+       if (yych == 'e') goto yy353;
+       goto yy276;
 yy324:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy353;
-       goto yy277;
+       if (yych == 'c') goto yy354;
+       goto yy276;
 yy325:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy354;
-       if (yych == 's') goto yy355;
-       goto yy277;
+       if (yych == '-') goto yy355;
+       goto yy276;
 yy326:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy356;
-       goto yy277;
+       if (yych == 'n') goto yy356;
+       if (yych == 's') goto yy357;
+       goto yy276;
 yy327:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'v') goto yy357;
-       goto yy277;
+       if (yych == 'e') goto yy358;
+       goto yy276;
 yy328:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy358;
-       goto yy277;
+       if (yych == 'v') goto yy359;
+       goto yy276;
 yy329:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'u') goto yy359;
-       goto yy277;
+       if (yych == '-') goto yy360;
+       goto yy276;
 yy330:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'g') goto yy360;
-       goto yy277;
+       if (yych == 'u') goto yy361;
+       goto yy276;
 yy331:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'm') goto yy361;
-       goto yy277;
+       if (yych == 'g') goto yy362;
+       goto yy276;
 yy332:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'm') goto yy363;
+       goto yy276;
+yy333:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == '-') goto yy364;
+       goto yy276;
+yy334:
        ++YYCURSOR;
 #line 152 "../src/conf/parse_opts.re"
        { if (!opts.set_encoding (Enc::EBCDIC)) { error_encoding (); return EXIT_FAIL; } goto opt; }
-#line 1427 "src/conf/parse_opts.cc"
-yy334:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy362;
-       goto yy277;
-yy335:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'y') goto yy363;
-       goto yy277;
+#line 1433 "src/conf/parse_opts.cc"
 yy336:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'd') goto yy364;
-       goto yy277;
+       if (yych == '-') goto yy365;
+       goto yy276;
 yy337:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy365;
-       goto yy277;
+       if (yych == 'y') goto yy366;
+       goto yy276;
 yy338:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy366;
-       goto yy277;
+       if (yych == 'd') goto yy367;
+       goto yy276;
 yy339:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy368;
-       goto yy277;
+       if (yych == '-') goto yy368;
+       goto yy276;
 yy340:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy369;
-       goto yy277;
+       if (yych <= 0x00) goto yy369;
+       goto yy276;
 yy341:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy370;
-       goto yy277;
+       if (yych == 't') goto yy371;
+       goto yy276;
 yy342:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy371;
-       goto yy277;
+       if (yych == 'e') goto yy372;
+       goto yy276;
 yy343:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy372;
-       goto yy277;
+       if (yych == 'e') goto yy373;
+       goto yy276;
 yy344:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'u') goto yy373;
-       goto yy277;
+       if (yych == 'e') goto yy374;
+       goto yy276;
 yy345:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy374;
-       goto yy277;
+       if (yych == 'e') goto yy375;
+       goto yy276;
 yy346:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'l') goto yy375;
-       goto yy277;
+       if (yych == 'u') goto yy376;
+       goto yy276;
 yy347:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy376;
-       goto yy277;
+       if (yych == 'a') goto yy377;
+       goto yy276;
 yy348:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy377;
-       goto yy277;
+       if (yych == 'l') goto yy378;
+       goto yy276;
 yy349:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy378;
-       goto yy277;
+       if (yych == 'e') goto yy379;
+       goto yy276;
 yy350:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy379;
-       goto yy277;
+       if (yych == 't') goto yy380;
+       goto yy276;
 yy351:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy381;
-       goto yy277;
+       if (yych == 'a') goto yy381;
+       goto yy276;
 yy352:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy382;
-       goto yy277;
+       if (yych <= 0x00) goto yy382;
+       goto yy276;
 yy353:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '1') goto yy383;
-       if (yych == '8') goto yy384;
-       goto yy277;
+       if (yych == '-') goto yy384;
+       goto yy276;
 yy354:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'u') goto yy385;
-       goto yy277;
+       if (yych == 'o') goto yy385;
+       goto yy276;
 yy355:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy386;
-       goto yy277;
+       if (yych == '1') goto yy386;
+       if (yych == '8') goto yy387;
+       goto yy276;
 yy356:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy387;
-       goto yy277;
+       if (yych == 'u') goto yy388;
+       goto yy276;
 yy357:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy388;
-       goto yy277;
+       if (yych == 'i') goto yy389;
+       goto yy276;
 yy358:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy389;
-       goto yy277;
+       if (yych == '-') goto yy390;
+       goto yy276;
 yy359:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy390;
-       goto yy277;
+       if (yych == 'e') goto yy391;
+       goto yy276;
 yy360:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy391;
-       goto yy277;
+       if (yych == 'i') goto yy392;
+       goto yy276;
 yy361:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy392;
-       goto yy277;
+       if (yych == 't') goto yy393;
+       goto yy276;
 yy362:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'd') goto yy393;
-       goto yy277;
+       if (yych == '-') goto yy394;
+       goto yy276;
 yy363:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy394;
-       goto yy277;
+       if (yych == 'i') goto yy395;
+       goto yy276;
 yy364:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy395;
-       goto yy277;
+       if (yych == 'd') goto yy396;
+       goto yy276;
 yy365:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy396;
-       goto yy277;
+       if (yych == 'd') goto yy397;
+       goto yy276;
 yy366:
-       ++YYCURSOR;
-#line 133 "../src/conf/parse_opts.re"
-       { usage ();   return EXIT_OK; }
-#line 1561 "src/conf/parse_opts.cc"
-yy368:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy397;
-       goto yy277;
-yy369:
+       if (yych == '-') goto yy398;
+       goto yy276;
+yy367:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'd') goto yy399;
-       goto yy277;
-yy370:
+       if (yych == 'i') goto yy399;
+       goto yy276;
+yy368:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'b') goto yy400;
-       goto yy277;
+       if (yych == 's') goto yy400;
+       goto yy276;
+yy369:
+       ++YYCURSOR;
+#line 133 "../src/conf/parse_opts.re"
+       { usage ();   return EXIT_OK; }
+#line 1571 "src/conf/parse_opts.cc"
 yy371:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy401;
-       goto yy277;
+       if (yych <= 0x00) goto yy401;
+       goto yy276;
 yy372:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy402;
-       goto yy277;
+       if (yych == 'd') goto yy403;
+       goto yy276;
 yy373:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy403;
-       goto yy277;
+       if (yych == 'b') goto yy404;
+       goto yy276;
 yy374:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'b') goto yy404;
-       goto yy277;
+       if (yych == 'n') goto yy405;
+       goto yy276;
 yy375:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy405;
-       goto yy277;
+       if (yych == 'r') goto yy406;
+       goto yy276;
 yy376:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy406;
-       goto yy277;
+       if (yych == 't') goto yy407;
+       goto yy276;
 yy377:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy407;
-       goto yy277;
+       if (yych == 'b') goto yy408;
+       goto yy276;
 yy378:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'b') goto yy408;
-       goto yy277;
+       if (yych == 'e') goto yy409;
+       goto yy276;
 yy379:
-       ++YYCURSOR;
-#line 151 "../src/conf/parse_opts.re"
-       { opts.set_tags (true);              goto opt; }
-#line 1610 "src/conf/parse_opts.cc"
-yy381:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'h') goto yy409;
-       goto yy277;
-yy382:
+       if (yych == 't') goto yy410;
+       goto yy276;
+yy380:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'd') goto yy410;
-       goto yy277;
-yy383:
+       if (yych == '-') goto yy411;
+       goto yy276;
+yy381:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '6') goto yy411;
-       goto yy277;
+       if (yych == 'b') goto yy412;
+       goto yy276;
+yy382:
+       ++YYCURSOR;
+#line 151 "../src/conf/parse_opts.re"
+       { opts.set_tags (true);              goto opt; }
+#line 1620 "src/conf/parse_opts.cc"
 yy384:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy412;
-       goto yy277;
+       if (yych == 'h') goto yy413;
+       goto yy276;
 yy385:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'm') goto yy414;
-       goto yy277;
+       if (yych == 'd') goto yy414;
+       goto yy276;
 yy386:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy415;
-       goto yy277;
+       if (yych == '6') goto yy415;
+       goto yy276;
 yy387:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'c') goto yy416;
-       goto yy277;
+       if (yych <= 0x00) goto yy416;
+       goto yy276;
 yy388:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'c') goto yy417;
-       goto yy277;
+       if (yych == 'm') goto yy418;
+       goto yy276;
 yy389:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy418;
-       goto yy277;
+       if (yych == 'o') goto yy419;
+       goto yy276;
 yy390:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy419;
-       goto yy277;
+       if (yych == 'c') goto yy420;
+       goto yy276;
 yy391:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy420;
-       goto yy277;
+       if (yych == 'c') goto yy421;
+       goto yy276;
 yy392:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy421;
-       goto yy277;
+       if (yych == 'n') goto yy422;
+       goto yy276;
 yy393:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy422;
-       goto yy277;
+       if (yych == 'e') goto yy423;
+       goto yy276;
 yy394:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'c') goto yy423;
-       goto yy277;
+       if (yych == 'o') goto yy424;
+       goto yy276;
 yy395:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy424;
-       goto yy277;
+       if (yych == 'n') goto yy425;
+       goto yy276;
 yy396:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'y') goto yy425;
-       goto yy277;
+       if (yych == 'f') goto yy426;
+       goto yy276;
 yy397:
-       ++YYCURSOR;
-#line 160 "../src/conf/parse_opts.re"
-       { goto opt_input; }
-#line 1679 "src/conf/parse_opts.cc"
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'o') goto yy427;
+       goto yy276;
+yy398:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'c') goto yy428;
+       goto yy276;
 yy399:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy426;
-       goto yy277;
+       if (yych == 'n') goto yy429;
+       goto yy276;
 yy400:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'u') goto yy427;
-       goto yy277;
+       if (yych == 'y') goto yy430;
+       goto yy276;
 yy401:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy428;
-       goto yy277;
-yy402:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy429;
-       goto yy277;
+       ++YYCURSOR;
+#line 160 "../src/conf/parse_opts.re"
+       { goto opt_input; }
+#line 1693 "src/conf/parse_opts.cc"
 yy403:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy430;
-       goto yy277;
+       if (yych == '-') goto yy431;
+       goto yy276;
 yy404:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'l') goto yy432;
-       goto yy277;
+       if (yych == 'u') goto yy432;
+       goto yy276;
 yy405:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy433;
-       goto yy277;
+       if (yych == 'e') goto yy433;
+       goto yy276;
 yy406:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy434;
-       goto yy277;
+       if (yych == 's') goto yy434;
+       goto yy276;
 yy407:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'c') goto yy435;
-       goto yy277;
+       if (yych <= 0x00) goto yy435;
+       goto yy276;
 yy408:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'l') goto yy436;
-       goto yy277;
+       if (yych == 'l') goto yy437;
+       goto yy276;
 yy409:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy437;
-       goto yy277;
+       if (yych == '-') goto yy438;
+       goto yy276;
 yy410:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy438;
-       goto yy277;
+       if (yych == 'o') goto yy439;
+       goto yy276;
 yy411:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy439;
-       goto yy277;
+       if (yych == 'c') goto yy440;
+       goto yy276;
 yy412:
-       ++YYCURSOR;
-#line 156 "../src/conf/parse_opts.re"
-       { if (!opts.set_encoding (Enc::UTF8))   { error_encoding (); return EXIT_FAIL; } goto opt; }
-#line 1736 "src/conf/parse_opts.cc"
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'l') goto yy441;
+       goto yy276;
+yy413:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'e') goto yy442;
+       goto yy276;
 yy414:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy441;
-       goto yy277;
+       if (yych == 'e') goto yy443;
+       goto yy276;
 yy415:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy443;
-       goto yy277;
+       if (yych <= 0x00) goto yy444;
+       goto yy276;
 yy416:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'h') goto yy444;
-       goto yy277;
-yy417:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy445;
-       goto yy277;
+       ++YYCURSOR;
+#line 156 "../src/conf/parse_opts.re"
+       { if (!opts.set_encoding (Enc::UTF8))   { error_encoding (); return EXIT_FAIL; } goto opt; }
+#line 1750 "src/conf/parse_opts.cc"
 yy418:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy446;
-       if (yych == 'v') goto yy447;
-       goto yy277;
+       if (yych <= 0x00) goto yy446;
+       goto yy276;
 yy419:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'd') goto yy448;
-       goto yy277;
+       if (yych == 'n') goto yy448;
+       goto yy276;
 yy420:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'u') goto yy449;
-       goto yy277;
+       if (yych == 'h') goto yy449;
+       goto yy276;
 yy421:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy450;
-       goto yy277;
+       if (yych == 't') goto yy450;
+       goto yy276;
 yy422:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy451;
-       goto yy277;
+       if (yych == 's') goto yy451;
+       if (yych == 'v') goto yy452;
+       goto yy276;
 yy423:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'l') goto yy452;
-       goto yy277;
+       if (yych == 'd') goto yy453;
+       goto yy276;
 yy424:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'g') goto yy453;
-       goto yy277;
+       if (yych == 'u') goto yy454;
+       goto yy276;
 yy425:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy454;
-       goto yy277;
+       if (yych == 'i') goto yy455;
+       goto yy276;
 yy426:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy455;
-       goto yy277;
+       if (yych == 'a') goto yy456;
+       goto yy276;
 yy427:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'g') goto yy456;
-       goto yy277;
+       if (yych == 't') goto yy457;
+       goto yy276;
 yy428:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy457;
-       goto yy277;
+       if (yych == 'l') goto yy458;
+       goto yy276;
 yy429:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy458;
-       goto yy277;
+       if (yych == 'g') goto yy459;
+       goto yy276;
 yy430:
-       ++YYCURSOR;
-#line 157 "../src/conf/parse_opts.re"
-       { if (!next (YYCURSOR, argv)) { error_arg ("-o, --output"); return EXIT_FAIL; } goto opt_output; }
-#line 1806 "src/conf/parse_opts.cc"
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'n') goto yy460;
+       goto yy276;
+yy431:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'i') goto yy461;
+       goto yy276;
 yy432:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy459;
-       goto yy277;
+       if (yych == 'g') goto yy462;
+       goto yy276;
 yy433:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'p') goto yy460;
-       goto yy277;
+       if (yych == 'r') goto yy463;
+       goto yy276;
 yy434:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy461;
-       goto yy277;
+       if (yych == 'i') goto yy464;
+       goto yy276;
 yy435:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy462;
-       goto yy277;
-yy436:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy463;
-       goto yy277;
+       ++YYCURSOR;
+#line 157 "../src/conf/parse_opts.re"
+       { if (!next (YYCURSOR, argv)) { error_arg ("-o, --output"); return EXIT_FAIL; } goto opt_output; }
+#line 1824 "src/conf/parse_opts.cc"
 yy437:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy464;
-       goto yy277;
+       if (yych == 'e') goto yy465;
+       goto yy276;
 yy438:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy465;
-       goto yy277;
+       if (yych == 'p') goto yy466;
+       goto yy276;
 yy439:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'n') goto yy467;
+       goto yy276;
+yy440:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'o') goto yy468;
+       goto yy276;
+yy441:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'e') goto yy469;
+       goto yy276;
+yy442:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'a') goto yy470;
+       goto yy276;
+yy443:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych <= 0x00) goto yy471;
+       goto yy276;
+yy444:
        ++YYCURSOR;
 #line 155 "../src/conf/parse_opts.re"
        { if (!opts.set_encoding (Enc::UTF16))  { error_encoding (); return EXIT_FAIL; } goto opt; }
-#line 1839 "src/conf/parse_opts.cc"
-yy441:
+#line 1857 "src/conf/parse_opts.cc"
+yy446:
        ++YYCURSOR;
 #line 135 "../src/conf/parse_opts.re"
        { vernum ();  return EXIT_OK; }
-#line 1844 "src/conf/parse_opts.cc"
-yy443:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy467;
-       goto yy277;
-yy444:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy469;
-       goto yy277;
-yy445:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy470;
-       goto yy277;
-yy446:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy471;
-       goto yy277;
-yy447:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy472;
-       goto yy277;
+#line 1862 "src/conf/parse_opts.cc"
 yy448:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy473;
-       goto yy277;
+       if (yych <= 0x00) goto yy473;
+       goto yy276;
 yy449:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy474;
-       goto yy277;
+       if (yych == 'a') goto yy475;
+       goto yy276;
 yy450:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'm') goto yy475;
-       goto yy277;
+       if (yych == 'o') goto yy476;
+       goto yy276;
 yy451:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy476;
-       goto yy277;
+       if (yych == 'e') goto yy477;
+       goto yy276;
 yy452:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy478;
-       goto yy277;
+       if (yych == 'e') goto yy478;
+       goto yy276;
 yy453:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == '-') goto yy479;
-       goto yy277;
+       goto yy276;
 yy454:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 't') goto yy480;
-       goto yy277;
+       goto yy276;
 yy455:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'f') goto yy481;
-       goto yy277;
+       if (yych == 'm') goto yy481;
+       goto yy276;
 yy456:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == '-') goto yy482;
-       goto yy277;
+       goto yy276;
 yy457:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy483;
-       goto yy277;
+       if (yych <= 0x00) goto yy483;
+       goto yy276;
 yy458:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy484;
-       goto yy277;
+       if (yych == 'a') goto yy485;
+       goto yy276;
 yy459:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy485;
-       goto yy277;
+       if (yych == '-') goto yy486;
+       goto yy276;
 yy460:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy487;
-       goto yy277;
+       if (yych == 't') goto yy487;
+       goto yy276;
 yy461:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy488;
-       goto yy277;
+       if (yych == 'f') goto yy488;
+       goto yy276;
 yy462:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy490;
-       goto yy277;
+       if (yych == '-') goto yy489;
+       goto yy276;
 yy463:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy491;
-       goto yy277;
+       if (yych == 'a') goto yy490;
+       goto yy276;
 yy464:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'd') goto yy492;
-       goto yy277;
+       if (yych == 'o') goto yy491;
+       goto yy276;
 yy465:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych <= 0x00) goto yy492;
+       goto yy276;
+yy466:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'a') goto yy494;
+       goto yy276;
+yy467:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych <= 0x00) goto yy495;
+       goto yy276;
+yy468:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'n') goto yy497;
+       goto yy276;
+yy469:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == '-') goto yy498;
+       goto yy276;
+yy470:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'd') goto yy499;
+       goto yy276;
+yy471:
        ++YYCURSOR;
 #line 153 "../src/conf/parse_opts.re"
        { if (!opts.set_encoding (Enc::UTF32))  { error_encoding (); return EXIT_FAIL; } goto opt; }
-#line 1937 "src/conf/parse_opts.cc"
-yy467:
+#line 1959 "src/conf/parse_opts.cc"
+yy473:
        ++YYCURSOR;
 #line 134 "../src/conf/parse_opts.re"
        { version (); return EXIT_OK; }
-#line 1942 "src/conf/parse_opts.cc"
-yy469:
+#line 1964 "src/conf/parse_opts.cc"
+yy475:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy493;
-       goto yy277;
-yy470:
+       if (yych == 'r') goto yy500;
+       goto yy276;
+yy476:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy494;
-       goto yy277;
-yy471:
+       if (yych == 'r') goto yy501;
+       goto yy276;
+yy477:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy495;
-       goto yy277;
-yy472:
+       if (yych == 'n') goto yy502;
+       goto yy276;
+yy478:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy496;
-       goto yy277;
-yy473:
+       if (yych == 'r') goto yy503;
+       goto yy276;
+yy479:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'g') goto yy497;
-       goto yy277;
-yy474:
+       if (yych == 'g') goto yy504;
+       goto yy276;
+yy480:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'p') goto yy498;
-       goto yy277;
-yy475:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy499;
-       goto yy277;
-yy476:
-       ++YYCURSOR;
-#line 139 "../src/conf/parse_opts.re"
-       { opts.set_target (opt_t::DOT);      goto opt; }
-#line 1975 "src/conf/parse_opts.cc"
-yy478:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy500;
-       goto yy277;
-yy479:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'p') goto yy501;
-       goto yy277;
-yy480:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy502;
-       goto yy277;
+       if (yych == 'p') goto yy505;
+       goto yy276;
 yy481:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy503;
-       goto yy277;
+       if (yych == 'i') goto yy506;
+       goto yy276;
 yy482:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy504;
-       goto yy277;
+       if (yych <= 'l') {
+               if (yych == 'd') goto yy507;
+               goto yy276;
+       } else {
+               if (yych <= 'm') goto yy508;
+               if (yych == 't') goto yy509;
+               goto yy276;
+       }
 yy483:
+       ++YYCURSOR;
+#line 139 "../src/conf/parse_opts.re"
+       { opts.set_target (opt_t::DOT);      goto opt; }
+#line 2007 "src/conf/parse_opts.cc"
+yy485:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy505;
-       goto yy277;
-yy484:
+       if (yych == 's') goto yy510;
+       goto yy276;
+yy486:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy506;
-       goto yy277;
-yy485:
-       ++YYCURSOR;
-#line 144 "../src/conf/parse_opts.re"
-       { opts.set_rFlag (true);             goto opt; }
-#line 2008 "src/conf/parse_opts.cc"
+       if (yych == 'p') goto yy511;
+       goto yy276;
 yy487:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy507;
-       goto yy277;
+       if (yych == 'a') goto yy512;
+       goto yy276;
 yy488:
-       ++YYCURSOR;
-#line 150 "../src/conf/parse_opts.re"
-       { opts.set_target (opt_t::SKELETON); goto opt; }
-#line 2017 "src/conf/parse_opts.cc"
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 's') goto yy513;
+       goto yy276;
+yy489:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'i') goto yy514;
+       goto yy276;
 yy490:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'd') goto yy508;
-       goto yy277;
+       if (yych == 't') goto yy515;
+       goto yy276;
 yy491:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy509;
-       goto yy277;
+       if (yych == 'n') goto yy516;
+       goto yy276;
 yy492:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy510;
-       goto yy277;
-yy493:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy511;
-       goto yy277;
+       ++YYCURSOR;
+#line 144 "../src/conf/parse_opts.re"
+       { opts.set_rFlag (true);             goto opt; }
+#line 2040 "src/conf/parse_opts.cc"
 yy494:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy512;
-       goto yy277;
+       if (yych == 's') goto yy517;
+       goto yy276;
 yy495:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy513;
-       goto yy277;
-yy496:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy514;
-       goto yy277;
+       ++YYCURSOR;
+#line 150 "../src/conf/parse_opts.re"
+       { opts.set_target (opt_t::SKELETON); goto opt; }
+#line 2049 "src/conf/parse_opts.cc"
 yy497:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy515;
-       goto yy277;
+       if (yych == 'd') goto yy518;
+       goto yy276;
 yy498:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'u') goto yy516;
-       goto yy277;
+       if (yych == 's') goto yy519;
+       goto yy276;
 yy499:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'z') goto yy517;
-       goto yy277;
+       if (yych == 'e') goto yy520;
+       goto yy276;
 yy500:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy518;
-       goto yy277;
+       if (yych == 's') goto yy521;
+       goto yy276;
 yy501:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy519;
-       goto yy277;
+       if (yych == 's') goto yy522;
+       goto yy276;
 yy502:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'x') goto yy520;
-       goto yy277;
+       if (yych == 's') goto yy523;
+       goto yy276;
 yy503:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy521;
-       goto yy277;
+       if (yych == 't') goto yy524;
+       goto yy276;
 yy504:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy523;
-       goto yy277;
+       if (yych == 'o') goto yy525;
+       goto yy276;
 yy505:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy524;
-       goto yy277;
+       if (yych == 'u') goto yy526;
+       goto yy276;
 yy506:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy525;
-       goto yy277;
+       if (yych == 'z') goto yy527;
+       goto yy276;
 yy507:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy527;
-       goto yy277;
+       if (yych == 'e') goto yy528;
+       goto yy276;
 yy508:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy528;
-       goto yy277;
+       if (yych == 'i') goto yy529;
+       goto yy276;
 yy509:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy529;
-       goto yy277;
+       if (yych == 'a') goto yy530;
+       goto yy276;
 yy510:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy530;
-       goto yy277;
+       if (yych == 's') goto yy531;
+       goto yy276;
 yy511:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy531;
-       goto yy277;
+       if (yych == 'o') goto yy532;
+       goto yy276;
 yy512:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy533;
-       goto yy277;
+       if (yych == 'x') goto yy533;
+       goto yy276;
 yy513:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy535;
-       goto yy277;
+       if (yych <= 0x00) goto yy534;
+       goto yy276;
 yy514:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy536;
-       goto yy277;
+       if (yych == 'n') goto yy536;
+       goto yy276;
 yy515:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy537;
-       goto yy277;
+       if (yych == 'i') goto yy537;
+       goto yy276;
 yy516:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy538;
-       goto yy277;
+       if (yych <= 0x00) goto yy538;
+       goto yy276;
 yy517:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy539;
-       goto yy277;
+       if (yych == 's') goto yy540;
+       goto yy276;
 yy518:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy540;
-       goto yy277;
+       if (yych == 'i') goto yy541;
+       goto yy276;
 yy519:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'l') goto yy542;
-       goto yy277;
+       if (yych == 't') goto yy542;
+       goto yy276;
 yy520:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy543;
-       goto yy277;
+       if (yych == 'r') goto yy543;
+       goto yy276;
 yy521:
-       ++YYCURSOR;
-#line 145 "../src/conf/parse_opts.re"
-       { opts.set_sFlag (true);             goto opt; }
-#line 2146 "src/conf/parse_opts.cc"
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych <= 0x00) goto yy544;
+       goto yy276;
+yy522:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych <= 0x00) goto yy546;
+       goto yy276;
 yy523:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'f') goto yy545;
-       goto yy277;
+       if (yych == 'i') goto yy548;
+       goto yy276;
 yy524:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy546;
-       goto yy277;
+       if (yych == 'e') goto yy549;
+       goto yy276;
 yy525:
-       ++YYCURSOR;
-#line 147 "../src/conf/parse_opts.re"
-       { opts.set_version (false);          goto opt; }
-#line 2159 "src/conf/parse_opts.cc"
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 't') goto yy550;
+       goto yy276;
+yy526:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 't') goto yy551;
+       goto yy276;
 yy527:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy547;
-       goto yy277;
+       if (yych == 'a') goto yy552;
+       goto yy276;
 yy528:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy549;
-       goto yy277;
+       if (yych == 't') goto yy553;
+       goto yy276;
 yy529:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy550;
-       goto yy277;
+       if (yych == 'n') goto yy554;
+       goto yy276;
 yy530:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy551;
-       goto yy277;
+       if (yych == 'g') goto yy555;
+       goto yy276;
 yy531:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych <= 0x00) goto yy556;
+       goto yy276;
+yy532:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'l') goto yy558;
+       goto yy276;
+yy533:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych <= 0x00) goto yy559;
+       goto yy276;
+yy534:
+       ++YYCURSOR;
+#line 145 "../src/conf/parse_opts.re"
+       { opts.set_sFlag (true);             goto opt; }
+#line 2202 "src/conf/parse_opts.cc"
+yy536:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'f') goto yy561;
+       goto yy276;
+yy537:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'o') goto yy562;
+       goto yy276;
+yy538:
+       ++YYCURSOR;
+#line 147 "../src/conf/parse_opts.re"
+       { opts.set_version (false);          goto opt; }
+#line 2215 "src/conf/parse_opts.cc"
+yy540:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych <= 0x00) goto yy563;
+       goto yy276;
+yy541:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 't') goto yy565;
+       goto yy276;
+yy542:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'a') goto yy566;
+       goto yy276;
+yy543:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych <= 0x00) goto yy567;
+       goto yy276;
+yy544:
        ++YYCURSOR;
 #line 154 "../src/conf/parse_opts.re"
        { if (!opts.set_encoding (Enc::UCS2))   { error_encoding (); return EXIT_FAIL; } goto opt; }
-#line 2180 "src/conf/parse_opts.cc"
-yy533:
+#line 2236 "src/conf/parse_opts.cc"
+yy546:
        ++YYCURSOR;
 #line 136 "../src/conf/parse_opts.re"
        { opts.set_bFlag (true);             goto opt; }
-#line 2185 "src/conf/parse_opts.cc"
-yy535:
+#line 2241 "src/conf/parse_opts.cc"
+yy548:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy553;
-       goto yy277;
-yy536:
+       if (yych == 't') goto yy569;
+       goto yy276;
+yy549:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'd') goto yy554;
-       goto yy277;
-yy537:
+       if (yych == 'd') goto yy570;
+       goto yy276;
+yy550:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy555;
-       goto yy277;
-yy538:
+       if (yych == 'o') goto yy571;
+       goto yy276;
+yy551:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy556;
-       goto yy277;
-yy539:
+       if (yych <= 0x00) goto yy572;
+       goto yy276;
+yy552:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy558;
-       goto yy277;
-yy540:
+       if (yych == 't') goto yy574;
+       goto yy276;
+yy553:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych <= 0x00) goto yy575;
+       goto yy276;
+yy554:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych <= 0x00) goto yy577;
+       goto yy276;
+yy555:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'o') goto yy579;
+       goto yy276;
+yy556:
        ++YYCURSOR;
 #line 161 "../src/conf/parse_opts.re"
        { goto opt_empty_class; }
-#line 2210 "src/conf/parse_opts.cc"
-yy542:
+#line 2278 "src/conf/parse_opts.cc"
+yy558:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy559;
-       goto yy277;
-yy543:
+       if (yych == 'i') goto yy580;
+       goto yy276;
+yy559:
        ++YYCURSOR;
 #line 141 "../src/conf/parse_opts.re"
        { opts.set_FFlag (true);             goto opt; }
-#line 2219 "src/conf/parse_opts.cc"
-yy545:
+#line 2287 "src/conf/parse_opts.cc"
+yy561:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy560;
-       goto yy277;
-yy546:
+       if (yych == 'o') goto yy581;
+       goto yy276;
+yy562:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy561;
-       goto yy277;
-yy547:
+       if (yych == 'n') goto yy582;
+       goto yy276;
+yy563:
        ++YYCURSOR;
 #line 163 "../src/conf/parse_opts.re"
        { goto opt; }
-#line 2232 "src/conf/parse_opts.cc"
-yy549:
+#line 2300 "src/conf/parse_opts.cc"
+yy565:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy562;
-       goto yy277;
-yy550:
+       if (yych == 'i') goto yy583;
+       goto yy276;
+yy566:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy563;
-       goto yy277;
-yy551:
+       if (yych == 't') goto yy584;
+       goto yy276;
+yy567:
        ++YYCURSOR;
 #line 158 "../src/conf/parse_opts.re"
        { if (!next (YYCURSOR, argv)) { error_arg ("-t, --type-header"); return EXIT_FAIL; } goto opt_header; }
-#line 2245 "src/conf/parse_opts.cc"
-yy553:
+#line 2313 "src/conf/parse_opts.cc"
+yy569:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy564;
-       goto yy277;
-yy554:
+       if (yych == 'i') goto yy585;
+       goto yy276;
+yy570:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy565;
-       goto yy277;
-yy555:
+       if (yych <= 0x00) goto yy586;
+       goto yy276;
+yy571:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy567;
-       goto yy277;
-yy556:
+       if (yych == 's') goto yy588;
+       goto yy276;
+yy572:
        ++YYCURSOR;
 #line 138 "../src/conf/parse_opts.re"
        { opts.set_dFlag (true);             goto opt; }
-#line 2262 "src/conf/parse_opts.cc"
-yy558:
+#line 2330 "src/conf/parse_opts.cc"
+yy574:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy568;
-       goto yy277;
-yy559:
+       if (yych == 'i') goto yy589;
+       goto yy276;
+yy575:
+       ++YYCURSOR;
+#line 165 "../src/conf/parse_opts.re"
+       { opts.set_dump_dfa_det(true);    goto opt; }
+#line 2339 "src/conf/parse_opts.cc"
+yy577:
+       ++YYCURSOR;
+#line 167 "../src/conf/parse_opts.re"
+       { opts.set_dump_dfa_min(true);    goto opt; }
+#line 2344 "src/conf/parse_opts.cc"
+yy579:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'c') goto yy569;
-       goto yy277;
-yy560:
+       if (yych == 'p') goto yy590;
+       goto yy276;
+yy580:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy570;
-       goto yy277;
-yy561:
+       if (yych == 'c') goto yy591;
+       goto yy276;
+yy581:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy572;
-       goto yy277;
-yy562:
+       if (yych <= 0x00) goto yy592;
+       goto yy276;
+yy582:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy573;
-       goto yy277;
-yy563:
+       if (yych == '-') goto yy594;
+       goto yy276;
+yy583:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy574;
-       goto yy277;
-yy564:
+       if (yych == 'o') goto yy595;
+       goto yy276;
+yy584:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'v') goto yy575;
-       goto yy277;
-yy565:
+       if (yych == 'e') goto yy596;
+       goto yy276;
+yy585:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'v') goto yy597;
+       goto yy276;
+yy586:
        ++YYCURSOR;
 #line 149 "../src/conf/parse_opts.re"
        { opts.set_bCaseInverted (true);     goto opt; }
-#line 2295 "src/conf/parse_opts.cc"
-yy567:
+#line 2377 "src/conf/parse_opts.cc"
+yy588:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy576;
-       goto yy277;
-yy568:
+       if (yych <= 0x00) goto yy598;
+       goto yy276;
+yy589:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy578;
-       goto yy277;
-yy569:
+       if (yych == 'o') goto yy600;
+       goto yy276;
+yy590:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'y') goto yy579;
-       goto yy277;
-yy570:
+       if (yych == 't') goto yy601;
+       goto yy276;
+yy591:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 'y') goto yy602;
+       goto yy276;
+yy592:
        ++YYCURSOR;
 #line 143 "../src/conf/parse_opts.re"
        { opts.set_iFlag (true);             goto opt; }
-#line 2312 "src/conf/parse_opts.cc"
-yy572:
+#line 2398 "src/conf/parse_opts.cc"
+yy594:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'd') goto yy580;
-       goto yy277;
-yy573:
+       if (yych == 'd') goto yy603;
+       goto yy276;
+yy595:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy581;
-       goto yy277;
-yy574:
+       if (yych == 'n') goto yy604;
+       goto yy276;
+yy596:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy582;
-       goto yy277;
-yy575:
+       if (yych <= 0x00) goto yy605;
+       goto yy276;
+yy597:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy584;
-       goto yy277;
-yy576:
+       if (yych == 'e') goto yy607;
+       goto yy276;
+yy598:
        ++YYCURSOR;
 #line 142 "../src/conf/parse_opts.re"
        { opts.set_gFlag (true);             goto opt; }
-#line 2333 "src/conf/parse_opts.cc"
-yy578:
+#line 2419 "src/conf/parse_opts.cc"
+yy600:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy585;
-       goto yy277;
-yy579:
+       if (yych == 'n') goto yy608;
+       goto yy276;
+yy601:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy586;
-       goto yy277;
-yy580:
+       if (yych <= 0x00) goto yy609;
+       goto yy276;
+yy602:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy588;
-       goto yy277;
-yy581:
+       if (yych <= 0x00) goto yy611;
+       goto yy276;
+yy603:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy589;
-       goto yy277;
-yy582:
+       if (yych == 'a') goto yy613;
+       goto yy276;
+yy604:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == 's') goto yy614;
+       goto yy276;
+yy605:
        ++YYCURSOR;
 #line 140 "../src/conf/parse_opts.re"
        { opts.set_fFlag (true);             goto opt; }
-#line 2354 "src/conf/parse_opts.cc"
-yy584:
+#line 2444 "src/conf/parse_opts.cc"
+yy607:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy590;
-       goto yy277;
-yy585:
+       if (yych <= 0x00) goto yy615;
+       goto yy276;
+yy608:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy592;
-       goto yy277;
-yy586:
+       if (yych <= 0x00) goto yy617;
+       goto yy276;
+yy609:
+       ++YYCURSOR;
+#line 166 "../src/conf/parse_opts.re"
+       { opts.set_dump_dfa_tagopt(true); goto opt; }
+#line 2457 "src/conf/parse_opts.cc"
+yy611:
        ++YYCURSOR;
 #line 159 "../src/conf/parse_opts.re"
        { goto opt_encoding_policy; }
-#line 2367 "src/conf/parse_opts.cc"
-yy588:
+#line 2462 "src/conf/parse_opts.cc"
+yy613:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy594;
-       goto yy277;
-yy589:
+       if (yych == 't') goto yy619;
+       goto yy276;
+yy614:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy595;
-       goto yy277;
-yy590:
+       if (yych <= 0x00) goto yy620;
+       goto yy276;
+yy615:
        ++YYCURSOR;
 #line 148 "../src/conf/parse_opts.re"
        { opts.set_bCaseInsensitive (true);  goto opt; }
-#line 2380 "src/conf/parse_opts.cc"
-yy592:
+#line 2475 "src/conf/parse_opts.cc"
+yy617:
        ++YYCURSOR;
 #line 162 "../src/conf/parse_opts.re"
        { goto opt_dfa_minimization; }
-#line 2385 "src/conf/parse_opts.cc"
-yy594:
+#line 2480 "src/conf/parse_opts.cc"
+yy619:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy597;
-       goto yy277;
-yy595:
+       if (yych == 'e') goto yy622;
+       goto yy276;
+yy620:
        ++YYCURSOR;
 #line 137 "../src/conf/parse_opts.re"
        { opts.set_cFlag (true);             goto opt; }
-#line 2394 "src/conf/parse_opts.cc"
-yy597:
+#line 2489 "src/conf/parse_opts.cc"
+yy622:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy277;
+       if (yych >= 0x01) goto yy276;
        ++YYCURSOR;
 #line 146 "../src/conf/parse_opts.re"
        { opts.set_bNoGenerationDate (true); goto opt; }
-#line 2401 "src/conf/parse_opts.cc"
+#line 2496 "src/conf/parse_opts.cc"
 }
-#line 164 "../src/conf/parse_opts.re"
+#line 168 "../src/conf/parse_opts.re"
 
 
 opt_output:
 
-#line 2408 "src/conf/parse_opts.cc"
+#line 2503 "src/conf/parse_opts.cc"
 {
        YYCTYPE yych;
        static const unsigned char yybm[] = {
@@ -2442,39 +2537,33 @@ opt_output:
                128, 128, 128, 128, 128, 128, 128, 128, 
        };
        yych = (YYCTYPE)*YYCURSOR;
-       if (yych <= 0x00) goto yy602;
-       if (yych != '-') goto yy604;
-yy602:
+       if (yych <= 0x00) goto yy627;
+       if (yych != '-') goto yy629;
+yy627:
        ++YYCURSOR;
-#line 169 "../src/conf/parse_opts.re"
+#line 173 "../src/conf/parse_opts.re"
        {
                error ("bad argument to option -o, --output: %s", *argv);
                return EXIT_FAIL;
        }
-#line 2455 "src/conf/parse_opts.cc"
-yy604:
-       yych = (YYCTYPE)*++YYCURSOR;
-       goto yy608;
-yy605:
-       ++YYCURSOR;
-#line 173 "../src/conf/parse_opts.re"
-       { opts.set_output_file(*argv); goto opt; }
-#line 2463 "src/conf/parse_opts.cc"
-yy607:
+#line 2550 "src/conf/parse_opts.cc"
+yy629:
        ++YYCURSOR;
        yych = (YYCTYPE)*YYCURSOR;
-yy608:
        if (yybm[0+yych] & 128) {
-               goto yy607;
+               goto yy629;
        }
-       goto yy605;
+       ++YYCURSOR;
+#line 177 "../src/conf/parse_opts.re"
+       { opts.set_output_file(*argv); goto opt; }
+#line 2560 "src/conf/parse_opts.cc"
 }
-#line 174 "../src/conf/parse_opts.re"
+#line 178 "../src/conf/parse_opts.re"
 
 
 opt_header:
 
-#line 2478 "src/conf/parse_opts.cc"
+#line 2567 "src/conf/parse_opts.cc"
 {
        YYCTYPE yych;
        static const unsigned char yybm[] = {
@@ -2512,34 +2601,28 @@ opt_header:
                128, 128, 128, 128, 128, 128, 128, 128, 
        };
        yych = (YYCTYPE)*YYCURSOR;
-       if (yych <= 0x00) goto yy611;
-       if (yych != '-') goto yy613;
-yy611:
+       if (yych <= 0x00) goto yy635;
+       if (yych != '-') goto yy637;
+yy635:
        ++YYCURSOR;
-#line 179 "../src/conf/parse_opts.re"
+#line 183 "../src/conf/parse_opts.re"
        {
                error ("bad argument to option -t, --type-header: %s", *argv);
                return EXIT_FAIL;
        }
-#line 2525 "src/conf/parse_opts.cc"
-yy613:
-       yych = (YYCTYPE)*++YYCURSOR;
-       goto yy617;
-yy614:
-       ++YYCURSOR;
-#line 183 "../src/conf/parse_opts.re"
-       { opts.set_header_file (*argv); goto opt; }
-#line 2533 "src/conf/parse_opts.cc"
-yy616:
+#line 2614 "src/conf/parse_opts.cc"
+yy637:
        ++YYCURSOR;
        yych = (YYCTYPE)*YYCURSOR;
-yy617:
        if (yybm[0+yych] & 128) {
-               goto yy616;
+               goto yy637;
        }
-       goto yy614;
+       ++YYCURSOR;
+#line 187 "../src/conf/parse_opts.re"
+       { opts.set_header_file (*argv); goto opt; }
+#line 2624 "src/conf/parse_opts.cc"
 }
-#line 184 "../src/conf/parse_opts.re"
+#line 188 "../src/conf/parse_opts.re"
 
 
 opt_encoding_policy:
@@ -2549,115 +2632,115 @@ opt_encoding_policy:
                return EXIT_FAIL;
        }
 
-#line 2553 "src/conf/parse_opts.cc"
+#line 2636 "src/conf/parse_opts.cc"
 {
        YYCTYPE yych;
        yych = (YYCTYPE)*YYCURSOR;
        if (yych <= 'h') {
-               if (yych == 'f') goto yy622;
+               if (yych == 'f') goto yy645;
        } else {
-               if (yych <= 'i') goto yy623;
-               if (yych == 's') goto yy624;
+               if (yych <= 'i') goto yy646;
+               if (yych == 's') goto yy647;
        }
        ++YYCURSOR;
-yy621:
-#line 194 "../src/conf/parse_opts.re"
+yy644:
+#line 198 "../src/conf/parse_opts.re"
        {
                error ("bad argument to option --encoding-policy (expected: ignore | substitute | fail): %s", *argv);
                return EXIT_FAIL;
        }
-#line 2570 "src/conf/parse_opts.cc"
-yy622:
+#line 2653 "src/conf/parse_opts.cc"
+yy645:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'a') goto yy625;
-       goto yy621;
-yy623:
+       if (yych == 'a') goto yy648;
+       goto yy644;
+yy646:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'g') goto yy627;
-       goto yy621;
-yy624:
+       if (yych == 'g') goto yy650;
+       goto yy644;
+yy647:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'u') goto yy628;
-       goto yy621;
-yy625:
+       if (yych == 'u') goto yy651;
+       goto yy644;
+yy648:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy629;
-yy626:
+       if (yych == 'i') goto yy652;
+yy649:
        YYCURSOR = YYMARKER;
-       goto yy621;
-yy627:
+       goto yy644;
+yy650:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy630;
-       goto yy626;
-yy628:
+       if (yych == 'n') goto yy653;
+       goto yy649;
+yy651:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'b') goto yy631;
-       goto yy626;
-yy629:
+       if (yych == 'b') goto yy654;
+       goto yy649;
+yy652:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'l') goto yy632;
-       goto yy626;
-yy630:
+       if (yych == 'l') goto yy655;
+       goto yy649;
+yy653:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy633;
-       goto yy626;
-yy631:
+       if (yych == 'o') goto yy656;
+       goto yy649;
+yy654:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy634;
-       goto yy626;
-yy632:
+       if (yych == 's') goto yy657;
+       goto yy649;
+yy655:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy635;
-       goto yy626;
-yy633:
+       if (yych <= 0x00) goto yy658;
+       goto yy649;
+yy656:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy637;
-       goto yy626;
-yy634:
+       if (yych == 'r') goto yy660;
+       goto yy649;
+yy657:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy638;
-       goto yy626;
-yy635:
+       if (yych == 't') goto yy661;
+       goto yy649;
+yy658:
        ++YYCURSOR;
-#line 200 "../src/conf/parse_opts.re"
+#line 204 "../src/conf/parse_opts.re"
        { opts.set_encoding_policy (Enc::POLICY_FAIL);       goto opt; }
-#line 2625 "src/conf/parse_opts.cc"
-yy637:
+#line 2708 "src/conf/parse_opts.cc"
+yy660:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy639;
-       goto yy626;
-yy638:
+       if (yych == 'e') goto yy662;
+       goto yy649;
+yy661:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'i') goto yy640;
-       goto yy626;
-yy639:
+       if (yych == 'i') goto yy663;
+       goto yy649;
+yy662:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy641;
-       goto yy626;
-yy640:
+       if (yych <= 0x00) goto yy664;
+       goto yy649;
+yy663:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy643;
-       goto yy626;
-yy641:
+       if (yych == 't') goto yy666;
+       goto yy649;
+yy664:
        ++YYCURSOR;
-#line 198 "../src/conf/parse_opts.re"
+#line 202 "../src/conf/parse_opts.re"
        { opts.set_encoding_policy (Enc::POLICY_IGNORE);     goto opt; }
-#line 2646 "src/conf/parse_opts.cc"
-yy643:
+#line 2729 "src/conf/parse_opts.cc"
+yy666:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'u') goto yy626;
+       if (yych != 'u') goto yy649;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 't') goto yy626;
+       if (yych != 't') goto yy649;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych != 'e') goto yy626;
+       if (yych != 'e') goto yy649;
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy626;
+       if (yych >= 0x01) goto yy649;
        ++YYCURSOR;
-#line 199 "../src/conf/parse_opts.re"
+#line 203 "../src/conf/parse_opts.re"
        { opts.set_encoding_policy (Enc::POLICY_SUBSTITUTE); goto opt; }
-#line 2659 "src/conf/parse_opts.cc"
+#line 2742 "src/conf/parse_opts.cc"
 }
-#line 201 "../src/conf/parse_opts.re"
+#line 205 "../src/conf/parse_opts.re"
 
 
 opt_input:
@@ -2667,86 +2750,86 @@ opt_input:
                return EXIT_FAIL;
        }
 
-#line 2671 "src/conf/parse_opts.cc"
+#line 2754 "src/conf/parse_opts.cc"
 {
        YYCTYPE yych;
        yych = (YYCTYPE)*YYCURSOR;
-       if (yych <= 'b') goto yy651;
-       if (yych <= 'c') goto yy653;
-       if (yych <= 'd') goto yy654;
-yy651:
+       if (yych <= 'b') goto yy674;
+       if (yych <= 'c') goto yy676;
+       if (yych <= 'd') goto yy677;
+yy674:
        ++YYCURSOR;
-yy652:
-#line 211 "../src/conf/parse_opts.re"
+yy675:
+#line 215 "../src/conf/parse_opts.re"
        {
                error ("bad argument to option --input (expected: default | custom): %s", *argv);
                return EXIT_FAIL;
        }
-#line 2686 "src/conf/parse_opts.cc"
-yy653:
+#line 2769 "src/conf/parse_opts.cc"
+yy676:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'u') goto yy655;
-       goto yy652;
-yy654:
+       if (yych == 'u') goto yy678;
+       goto yy675;
+yy677:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'e') goto yy657;
-       goto yy652;
-yy655:
+       if (yych == 'e') goto yy680;
+       goto yy675;
+yy678:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 's') goto yy658;
-yy656:
+       if (yych == 's') goto yy681;
+yy679:
        YYCURSOR = YYMARKER;
-       goto yy652;
-yy657:
+       goto yy675;
+yy680:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'f') goto yy659;
-       goto yy656;
-yy658:
+       if (yych == 'f') goto yy682;
+       goto yy679;
+yy681:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy660;
-       goto yy656;
-yy659:
+       if (yych == 't') goto yy683;
+       goto yy679;
+yy682:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'a') goto yy661;
-       goto yy656;
-yy660:
+       if (yych == 'a') goto yy684;
+       goto yy679;
+yy683:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy662;
-       goto yy656;
-yy661:
+       if (yych == 'o') goto yy685;
+       goto yy679;
+yy684:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'u') goto yy663;
-       goto yy656;
-yy662:
+       if (yych == 'u') goto yy686;
+       goto yy679;
+yy685:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'm') goto yy664;
-       goto yy656;
-yy663:
+       if (yych == 'm') goto yy687;
+       goto yy679;
+yy686:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'l') goto yy665;
-       goto yy656;
-yy664:
+       if (yych == 'l') goto yy688;
+       goto yy679;
+yy687:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy666;
-       goto yy656;
-yy665:
+       if (yych <= 0x00) goto yy689;
+       goto yy679;
+yy688:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy668;
-       goto yy656;
-yy666:
+       if (yych == 't') goto yy691;
+       goto yy679;
+yy689:
        ++YYCURSOR;
-#line 216 "../src/conf/parse_opts.re"
+#line 220 "../src/conf/parse_opts.re"
        { opts.set_input_api (InputAPI::CUSTOM);  goto opt; }
-#line 2741 "src/conf/parse_opts.cc"
-yy668:
+#line 2824 "src/conf/parse_opts.cc"
+yy691:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych >= 0x01) goto yy656;
+       if (yych >= 0x01) goto yy679;
        ++YYCURSOR;
-#line 215 "../src/conf/parse_opts.re"
+#line 219 "../src/conf/parse_opts.re"
        { opts.set_input_api (InputAPI::DEFAULT); goto opt; }
-#line 2748 "src/conf/parse_opts.cc"
+#line 2831 "src/conf/parse_opts.cc"
 }
-#line 217 "../src/conf/parse_opts.re"
+#line 221 "../src/conf/parse_opts.re"
 
 
 opt_empty_class:
@@ -2756,120 +2839,120 @@ opt_empty_class:
                return EXIT_FAIL;
        }
 
-#line 2760 "src/conf/parse_opts.cc"
+#line 2843 "src/conf/parse_opts.cc"
 {
        YYCTYPE yych;
        yych = (YYCTYPE)*YYCURSOR;
-       if (yych == 'e') goto yy675;
-       if (yych == 'm') goto yy676;
+       if (yych == 'e') goto yy698;
+       if (yych == 'm') goto yy699;
        ++YYCURSOR;
-yy674:
-#line 227 "../src/conf/parse_opts.re"
+yy697:
+#line 231 "../src/conf/parse_opts.re"
        {
                error ("bad argument to option --empty-class (expected: match-empty | match-none | error): %s", *argv);
                return EXIT_FAIL;
        }
-#line 2773 "src/conf/parse_opts.cc"
-yy675:
+#line 2856 "src/conf/parse_opts.cc"
+yy698:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'r') goto yy677;
-       goto yy674;
-yy676:
+       if (yych == 'r') goto yy700;
+       goto yy697;
+yy699:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'a') goto yy679;
-       goto yy674;
-yy677:
+       if (yych == 'a') goto yy702;
+       goto yy697;
+yy700:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy680;
-yy678:
+       if (yych == 'r') goto yy703;
+yy701:
        YYCURSOR = YYMARKER;
-       goto yy674;
-yy679:
+       goto yy697;
+yy702:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy681;
-       goto yy678;
-yy680:
+       if (yych == 't') goto yy704;
+       goto yy701;
+yy703:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy682;
-       goto yy678;
-yy681:
+       if (yych == 'o') goto yy705;
+       goto yy701;
+yy704:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'c') goto yy683;
-       goto yy678;
-yy682:
+       if (yych == 'c') goto yy706;
+       goto yy701;
+yy705:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy684;
-       goto yy678;
-yy683:
+       if (yych == 'r') goto yy707;
+       goto yy701;
+yy706:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'h') goto yy685;
-       goto yy678;
-yy684:
+       if (yych == 'h') goto yy708;
+       goto yy701;
+yy707:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy686;
-       goto yy678;
-yy685:
+       if (yych <= 0x00) goto yy709;
+       goto yy701;
+yy708:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '-') goto yy688;
-       goto yy678;
-yy686:
+       if (yych == '-') goto yy711;
+       goto yy701;
+yy709:
        ++YYCURSOR;
-#line 233 "../src/conf/parse_opts.re"
+#line 237 "../src/conf/parse_opts.re"
        { opts.set_empty_class_policy (EMPTY_CLASS_ERROR);       goto opt; }
-#line 2820 "src/conf/parse_opts.cc"
-yy688:
+#line 2903 "src/conf/parse_opts.cc"
+yy711:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy689;
-       if (yych == 'n') goto yy690;
-       goto yy678;
-yy689:
+       if (yych == 'e') goto yy712;
+       if (yych == 'n') goto yy713;
+       goto yy701;
+yy712:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'm') goto yy691;
-       goto yy678;
-yy690:
+       if (yych == 'm') goto yy714;
+       goto yy701;
+yy713:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy692;
-       goto yy678;
-yy691:
+       if (yych == 'o') goto yy715;
+       goto yy701;
+yy714:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'p') goto yy693;
-       goto yy678;
-yy692:
+       if (yych == 'p') goto yy716;
+       goto yy701;
+yy715:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'n') goto yy694;
-       goto yy678;
-yy693:
+       if (yych == 'n') goto yy717;
+       goto yy701;
+yy716:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 't') goto yy695;
-       goto yy678;
-yy694:
+       if (yych == 't') goto yy718;
+       goto yy701;
+yy717:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy696;
-       goto yy678;
-yy695:
+       if (yych == 'e') goto yy719;
+       goto yy701;
+yy718:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'y') goto yy697;
-       goto yy678;
-yy696:
+       if (yych == 'y') goto yy720;
+       goto yy701;
+yy719:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy698;
-       goto yy678;
-yy697:
+       if (yych <= 0x00) goto yy721;
+       goto yy701;
+yy720:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy700;
-       goto yy678;
-yy698:
+       if (yych <= 0x00) goto yy723;
+       goto yy701;
+yy721:
        ++YYCURSOR;
-#line 232 "../src/conf/parse_opts.re"
+#line 236 "../src/conf/parse_opts.re"
        { opts.set_empty_class_policy (EMPTY_CLASS_MATCH_NONE);  goto opt; }
-#line 2866 "src/conf/parse_opts.cc"
-yy700:
+#line 2949 "src/conf/parse_opts.cc"
+yy723:
        ++YYCURSOR;
-#line 231 "../src/conf/parse_opts.re"
+#line 235 "../src/conf/parse_opts.re"
        { opts.set_empty_class_policy (EMPTY_CLASS_MATCH_EMPTY); goto opt; }
-#line 2871 "src/conf/parse_opts.cc"
+#line 2954 "src/conf/parse_opts.cc"
 }
-#line 234 "../src/conf/parse_opts.re"
+#line 238 "../src/conf/parse_opts.re"
 
 
 opt_dfa_minimization:
@@ -2879,74 +2962,74 @@ opt_dfa_minimization:
                return EXIT_FAIL;
        }
 
-#line 2883 "src/conf/parse_opts.cc"
+#line 2966 "src/conf/parse_opts.cc"
 {
        YYCTYPE yych;
        yych = (YYCTYPE)*YYCURSOR;
-       if (yych == 'm') goto yy706;
-       if (yych == 't') goto yy707;
+       if (yych == 'm') goto yy729;
+       if (yych == 't') goto yy730;
        ++YYCURSOR;
-yy705:
-#line 244 "../src/conf/parse_opts.re"
+yy728:
+#line 248 "../src/conf/parse_opts.re"
        {
                error ("bad argument to option --dfa-minimization (expected: table | moore): %s", *argv);
                return EXIT_FAIL;
        }
-#line 2896 "src/conf/parse_opts.cc"
-yy706:
+#line 2979 "src/conf/parse_opts.cc"
+yy729:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'o') goto yy708;
-       goto yy705;
-yy707:
+       if (yych == 'o') goto yy731;
+       goto yy728;
+yy730:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
-       if (yych == 'a') goto yy710;
-       goto yy705;
-yy708:
+       if (yych == 'a') goto yy733;
+       goto yy728;
+yy731:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'o') goto yy711;
-yy709:
+       if (yych == 'o') goto yy734;
+yy732:
        YYCURSOR = YYMARKER;
-       goto yy705;
-yy710:
+       goto yy728;
+yy733:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'b') goto yy712;
-       goto yy709;
-yy711:
+       if (yych == 'b') goto yy735;
+       goto yy732;
+yy734:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'r') goto yy713;
-       goto yy709;
-yy712:
+       if (yych == 'r') goto yy736;
+       goto yy732;
+yy735:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'l') goto yy714;
-       goto yy709;
-yy713:
+       if (yych == 'l') goto yy737;
+       goto yy732;
+yy736:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy715;
-       goto yy709;
-yy714:
+       if (yych == 'e') goto yy738;
+       goto yy732;
+yy737:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == 'e') goto yy716;
-       goto yy709;
-yy715:
+       if (yych == 'e') goto yy739;
+       goto yy732;
+yy738:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy717;
-       goto yy709;
-yy716:
+       if (yych <= 0x00) goto yy740;
+       goto yy732;
+yy739:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 0x00) goto yy719;
-       goto yy709;
-yy717:
+       if (yych <= 0x00) goto yy742;
+       goto yy732;
+yy740:
        ++YYCURSOR;
-#line 249 "../src/conf/parse_opts.re"
+#line 253 "../src/conf/parse_opts.re"
        { opts.set_dfa_minimization (DFA_MINIMIZATION_MOORE); goto opt; }
-#line 2943 "src/conf/parse_opts.cc"
-yy719:
+#line 3026 "src/conf/parse_opts.cc"
+yy742:
        ++YYCURSOR;
-#line 248 "../src/conf/parse_opts.re"
+#line 252 "../src/conf/parse_opts.re"
        { opts.set_dfa_minimization (DFA_MINIMIZATION_TABLE); goto opt; }
-#line 2948 "src/conf/parse_opts.cc"
+#line 3031 "src/conf/parse_opts.cc"
 }
-#line 250 "../src/conf/parse_opts.re"
+#line 254 "../src/conf/parse_opts.re"
 
 
 end:
index 1503b6bf27d9e4b96c0c510b50c16c69a4f2c85b..a1bd46f5ebef2d4c5feff424a21cf099cdc6a4c7 100644 (file)
@@ -114,6 +114,9 @@ void opt_t::fix ()
                        fill_arg_use = Opt::baseopt.fill_arg_use;
                        fill_naked = Opt::baseopt.fill_naked;
                        labelPrefix = Opt::baseopt.labelPrefix;
+                       dump_dfa_det = Opt::baseopt.dump_dfa_det;
+                       dump_dfa_tagopt = Opt::baseopt.dump_dfa_tagopt;
+                       dump_dfa_min = Opt::baseopt.dump_dfa_min;
                        break;
                default:
                        break;
index b404d9d470cb8e6ddc7b314dee0d2b7337a456d9..b8797035cd5b770bf30b639ba569e94c90b06cf8 100644 (file)
@@ -112,7 +112,11 @@ namespace re2c
        /* labels */ \
        OPT (std::string, labelPrefix, "yy") \
        /* internals */ \
-       OPT (dfa_minimization_t, dfa_minimization, DFA_MINIMIZATION_MOORE)
+       OPT (dfa_minimization_t, dfa_minimization, DFA_MINIMIZATION_MOORE) \
+       /* dump */ \
+       OPT (bool, dump_dfa_det, false) \
+       OPT (bool, dump_dfa_tagopt, false) \
+       OPT (bool, dump_dfa_min, false)
 
 struct opt_t
 {
index a8b2536e5dc65a832344a339a9e76d83f230876b..cab8f8933431ad4d3a8a5f767b181ec01c583ee7 100644 (file)
@@ -161,6 +161,10 @@ opt_long:
        "empty-class"        end { goto opt_empty_class; }
        "dfa-minimization"   end { goto opt_dfa_minimization; }
        "single-pass"        end { goto opt; } // deprecated
+
+       "dump-dfa-det"       end { opts.set_dump_dfa_det(true);    goto opt; }
+       "dump-dfa-tagopt"    end { opts.set_dump_dfa_tagopt(true); goto opt; }
+       "dump-dfa-min"       end { opts.set_dump_dfa_min(true);    goto opt; }
 */
 
 opt_output:
index eb8d7cbbbdedb3dbfa40ecf63e8ac123fa6768d8..600fd4372fb09a069a33e6b4a27655a576f8afde 100644 (file)
@@ -7,6 +7,7 @@
 #include "src/ir/compile.h"
 #include "src/ir/adfa/adfa.h"
 #include "src/ir/dfa/dfa.h"
+#include "src/ir/dfa/dump.h"
 #include "src/ir/nfa/nfa.h"
 #include "src/ir/regexp/regexp.h"
 #include "src/ir/skeleton/skeleton.h"
@@ -59,6 +60,7 @@ static smart_ptr<DFA> compile_rules(
        nfa_t nfa(rules);
 
        dfa_t dfa(nfa, cs, cond);
+       if (opts->dump_dfa_det) dump_dfa(dfa);
 
        // skeleton must be constructed after DFA construction
        // but prior to any other DFA transformations
@@ -74,8 +76,10 @@ static smart_ptr<DFA> compile_rules(
 
        // try to minimize the number of tag variables
        optimize_tags(dfa);
+       if (opts->dump_dfa_tagopt) dump_dfa(dfa);
 
        minimization(dfa);
+       if (opts->dump_dfa_min) dump_dfa(dfa);
 
        // find YYFILL states and calculate argument to YYFILL
        std::vector<size_t> fill;
diff --git a/re2c/src/ir/dfa/dump.cc b/re2c/src/ir/dfa/dump.cc
new file mode 100644 (file)
index 0000000..6d773b3
--- /dev/null
@@ -0,0 +1,90 @@
+#include <stdio.h>
+
+#include "src/ir/dfa/dump.h"
+
+namespace re2c
+{
+
+static void dump_tcmd(const dfa_t &dfa, const dfa_state_t *state, size_t sym)
+{
+       const tagsave_t *s;
+       const tagcopy_t *c;
+
+       if (state->tcmd) {
+               const tcmd_t &cmd = state->tcmd[sym];
+               s = cmd.save;
+               c = cmd.copy;
+       } else {
+               const tccmd_t &cmd = dfa.tcpool[state->tcid[sym]];
+               s = cmd.save;
+               c = cmd.copy;
+       }
+
+       if (!s && !c) return;
+
+       fprintf(stderr, "/");
+       for (; c; c = c->next) {
+               fprintf(stderr, "%d=%d ", c->lhs, c->rhs);
+       }
+       for (; s; s = s->next) {
+               fprintf(stderr, "%d%s ", s->ver, s->bottom ? "?" : "");
+       }
+}
+
+void dump_dfa(const dfa_t &dfa)
+{
+       const size_t
+               nstate = dfa.states.size(),
+               nsym = dfa.nchars;
+
+       fprintf(stderr,
+               "digraph DFA {\n"
+               "  rankdir=LR\n"
+               "  node[shape=Mrecord fontname=fixed]\n"
+               "  edge[arrowhead=vee fontname=fixed]\n\n");
+
+       for (uint32_t i = 0; i < nstate; ++i) {
+               const dfa_state_t *s = dfa.states[i];
+
+               // state
+               fprintf(stderr, "  n%u [height=0.2 width=0.2 label=\"%u\"]\n", i, i);
+
+               // finalizer
+               if (s->rule != Rule::NONE) {
+                       const Rule &r = dfa.rules[s->rule];
+
+                       fprintf(stderr,
+                               "subgraph { rank=same"
+                               " n%u [style=filled fillcolor=lightgray]"
+                               " dr%u [shape=none label=\"",
+                               i, i);
+                       dump_tcmd(dfa, s, nsym);
+
+                       fprintf(stderr, "(");
+                       for (size_t t = r.lvar; t < r.hvar; ++t) {
+                               if (t > r.lvar) fprintf(stderr, " ");
+                               fprintf(stderr, "%d", dfa.finvers[t]);
+                       }
+                       fprintf(stderr, ")");
+
+                       fprintf(stderr, "\"]"
+                               " n%u:s -> dr%u:n [style=dotted minlen=0]}\n",
+                               i, i);
+               }
+
+               // transitions
+               for (uint32_t c = 0; c < nsym; ++c) {
+                       const size_t j = s->arcs[c];
+                       if (j != dfa_t::NIL) {
+                               fprintf(stderr, "  n%u -> n%u [label=\"%u",
+                                       i, static_cast<uint32_t>(j), c);
+                               dump_tcmd(dfa, s, c);
+                               fprintf(stderr, "\"]\n");
+                       }
+               }
+       }
+
+       fprintf(stderr, "}\n");
+}
+
+} // namespace re2c
diff --git a/re2c/src/ir/dfa/dump.h b/re2c/src/ir/dfa/dump.h
new file mode 100644 (file)
index 0000000..9a72cc2
--- /dev/null
@@ -0,0 +1,13 @@
+#ifndef _RE2C_IR_DFA_DUMP_
+#define _RE2C_IR_DFA_DUMP_
+
+#include "src/ir/dfa/dfa.h"
+
+namespace re2c
+{
+
+void dump_dfa(const dfa_t &dfa);
+
+} // namespace re2c
+
+#endif // _RE2C_IR_DFA_DUMP_