]> granicus.if.org Git - re2c/commitdiff
Make tags absolute, not relative.
authorUlya Trofimovich <skvadrik@gmail.com>
Tue, 11 Oct 2016 13:14:26 +0000 (14:14 +0100)
committerUlya Trofimovich <skvadrik@gmail.com>
Tue, 11 Oct 2016 13:14:26 +0000 (14:14 +0100)
Relative tags have some advantages:
    - only base marker has to be updated by YYFILL
    - ever-broken old code with overlapping trailing contexts
      can be fixed without user's help (provided that re2c
      autogenerates declarations of tag variables)
    - fixed-length contexts may be used with generic API
      (though it becomes less generic with relative tags,
      as we rely on the concept of relative offset)

However, the generated code is less efficient in simple cases
(default API, no YYFILL): relativity adds extra arithmetics with base
marker (which implies dereference of base marker in most of the cases),
so the code is actually worse than hand-written.

Even with YYFILL it turns out to be more efficient to keep all tags
in a struct together with other pointers and update them once in a
while: YYFILL is called very infrequently (if properly implemented
by the user), while tag operations happen unconditionally.

However, making tags absolute means that re2c will fail with error
on old code with overlapping trailing contexts (unless they have fixed
length or can be deduplicated). These cases are probably rare.

Generic API can't make use of fixed tags, but becomes truly generic:
'YYBACKUPTAG / YYRESTORETAG / YYCOPYTAG' make less assumptions
about the input.

74 files changed:
re2c/bootstrap/src/parse/lex.cc
re2c/bootstrap/src/parse/lex_conf.cc
re2c/src/codegen/emit_action.cc
re2c/src/codegen/emit_dfa.cc
re2c/src/codegen/input_api.cc
re2c/src/codegen/input_api.h
re2c/src/codegen/output.h
re2c/src/conf/opt.cc
re2c/src/conf/opt.h
re2c/src/ir/adfa/adfa.cc
re2c/src/ir/adfa/adfa.h
re2c/src/ir/adfa/prepare.cc
re2c/src/ir/compile.cc
re2c/src/ir/skeleton/generate_code.cc
re2c/src/ir/skeleton/skeleton.h
re2c/src/parse/lex.re
re2c/src/parse/lex_conf.re
re2c/test/tags/bug121_fix_multiple.i--input(custom).c [new file with mode: 0644]
re2c/test/tags/bug121_fix_multiple.i--input(custom).re [new file with mode: 0644]
re2c/test/tags/bug121_fix_multiple.i--tags--input(custom).c [new file with mode: 0644]
re2c/test/tags/bug121_fix_multiple.i--tags--input(custom).re [new file with mode: 0644]
re2c/test/tags/bug121_fix_none.i.c [moved from re2c/test/tags/bug121_fix.i.c with 100% similarity]
re2c/test/tags/bug121_fix_none.i.re [moved from re2c/test/tags/bug121_fix.i.re with 100% similarity]
re2c/test/tags/bug121_fix_single.i--input(custom).c [moved from re2c/test/tags/bug121_fix.i--input(custom).c with 100% similarity]
re2c/test/tags/bug121_fix_single.i--input(custom).re [moved from re2c/test/tags/bug121_fix.i--input(custom).re with 100% similarity]
re2c/test/tags/bug121_var_multiple.i--input(custom).c
re2c/test/tags/bug121_var_multiple.i--tags--input(custom).c [new file with mode: 0644]
re2c/test/tags/bug121_var_multiple.i--tags--input(custom).re [new file with mode: 0644]
re2c/test/tags/bug121_var_multiple.i--tags.c [new file with mode: 0644]
re2c/test/tags/bug121_var_multiple.i--tags.re [new file with mode: 0644]
re2c/test/tags/bug121_var_multiple.i.c
re2c/test/tags/conf1.i--tags--input(custom).c
re2c/test/tags/conf1.i--tags--input(custom).re
re2c/test/tags/conf1.i--tags.c
re2c/test/tags/conf1.i--tags.re
re2c/test/tags/conf2.i--tags--input(custom).c
re2c/test/tags/conf2.i--tags--input(custom).re
re2c/test/tags/conf2.i--tags.c
re2c/test/tags/conf2.i--tags.re
re2c/test/tags/conf3.i--tags--input(custom).c
re2c/test/tags/conf3.i--tags--input(custom).re
re2c/test/tags/conf3.i--tags.c
re2c/test/tags/conf3.i--tags.re
re2c/test/tags/dedup4.i--tags.c
re2c/test/tags/dedup5.i--tags.c
re2c/test/tags/fallback1.i--tags.c
re2c/test/tags/fallback2.i--tags.c
re2c/test/tags/fallback3.i--tags.c
re2c/test/tags/fix2.i--tags.c
re2c/test/tags/fix2.i--tags.re
re2c/test/tags/fix2_trail.i--tags--input(custom).c
re2c/test/tags/fix2_trail.i--tags--input(custom).re
re2c/test/tags/fix2_trail.i--tags.c
re2c/test/tags/fix2_trail.i--tags.re
re2c/test/tags/fix3.i--tags.c
re2c/test/tags/fix3.i--tags.re
re2c/test/tags/fix3_trail.i--tags--input(custom).c
re2c/test/tags/fix3_trail.i--tags--input(custom).re
re2c/test/tags/fix3_trail.i--tags.c
re2c/test/tags/fix3_trail.i--tags.re
re2c/test/tags/fix4.i--tags.c
re2c/test/tags/fix4.i--tags.re
re2c/test/tags/fix4_trail.i--tags--input(custom).c
re2c/test/tags/fix4_trail.i--tags--input(custom).re
re2c/test/tags/fix4_trail.i--tags.c
re2c/test/tags/fix4_trail.i--tags.re
re2c/test/tags/fix5.i--tags.c
re2c/test/tags/fix5.i--tags.re
re2c/test/tags/fix5_trail.i--tags--input(custom).c
re2c/test/tags/fix5_trail.i--tags--input(custom).re
re2c/test/tags/fix5_trail.i--tags.c
re2c/test/tags/fix5_trail.i--tags.re
re2c/test/tags/iter_plus.i--tags.c
re2c/test/tags/minimization.i.c

index be92270ffd4006d8ed42bf3878d57f20bcd2745e..d7b8e0cbb2adb1f56509d33e532d289a58e2d7ca 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.16 on Thu Oct  6 15:19:41 2016 */
+/* Generated by re2c 0.16 on Tue Oct 11 14:06:51 2016 */
 #line 1 "../src/parse/lex.re"
 #include "src/util/c99_stdint.h"
 #include <stddef.h>
@@ -715,7 +715,7 @@ yy123:
 
 void Scanner::lex_tags()
 {
-       ConfTags conf;
+       std::string fmt, sep;
        for (;;) {
 #line 721 "src/parse/lex.cc"
 {
@@ -815,7 +815,7 @@ yy139:
        {
                        if (opts->target == opt_t::CODE) {
                                out.wdelay_tags(opts->topIndent,
-                                       new ConfTags(conf));
+                                       new ConfTags(fmt, sep));
                        }
                        tok = pos = cur;
                        return;
@@ -858,7 +858,7 @@ yy149:
 yy150:
        ++YYCURSOR;
 #line 203 "../src/parse/lex.re"
-       { conf.format    = lex_conf_string(); continue; }
+       { fmt = lex_conf_string(); continue; }
 #line 863 "src/parse/lex.cc"
 yy152:
        yych = (YYCTYPE)*++YYCURSOR;
@@ -869,7 +869,7 @@ yy152:
        if (yych != 'r') goto yy142;
        ++YYCURSOR;
 #line 204 "../src/parse/lex.re"
-       { conf.separator = lex_conf_string(); continue; }
+       { sep = lex_conf_string(); continue; }
 #line 874 "src/parse/lex.cc"
 }
 #line 216 "../src/parse/lex.re"
index 45c5ed4241849a971ad5925610af6cfdc673c959..d679e8335dd08317ff43531c890a2ece27bb229f 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.16 on Wed Oct  5 22:22:36 2016 */
+/* Generated by re2c 0.16 on Thu Oct  6 18:44:38 2016 */
 #line 1 "../src/parse/lex_conf.re"
 #include "src/util/c99_stdint.h"
 #include <string>
@@ -186,35 +186,35 @@ yy14:
                                                goto yy188;
                                        }
                                } else {
-                                       goto yy279;
+                                       goto yy278;
                                }
                        } else {
                                if (yyaccept <= 16) {
                                        if (yyaccept == 15) {
-                                               goto yy355;
+                                               goto yy352;
                                        } else {
-                                               goto yy431;
+                                               goto yy425;
                                        }
                                } else {
-                                       goto yy537;
+                                       goto yy532;
                                }
                        }
                } else {
                        if (yyaccept <= 20) {
                                if (yyaccept <= 19) {
                                        if (yyaccept == 18) {
-                                               goto yy591;
+                                               goto yy590;
                                        } else {
                                                goto yy630;
                                        }
                                } else {
-                                       goto yy636;
+                                       goto yy637;
                                }
                        } else {
                                if (yyaccept == 21) {
-                                       goto yy713;
+                                       goto yy719;
                                } else {
-                                       goto yy716;
+                                       goto yy722;
                                }
                        }
                }
@@ -974,85 +974,84 @@ yy191:
        case 'P':       goto yy245;
        case 'R':       goto yy246;
        case 'S':       goto yy247;
-       case 'T':       goto yy248;
        default:        goto yy14;
        }
 yy192:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy249;
+       if (yych == '-') goto yy248;
        goto yy14;
 yy193:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy250;
+       if (yych == 'e') goto yy249;
        goto yy14;
 yy194:
        yych = (unsigned char)*++cur;
-       if (yych == 'p') goto yy251;
+       if (yych == 'p') goto yy250;
        goto yy14;
 yy195:
        yych = (unsigned char)*++cur;
-       if (yych == 'u') goto yy252;
+       if (yych == 'u') goto yy251;
        goto yy14;
 yy196:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy253;
+       if (yych == '-') goto yy252;
        goto yy14;
 yy197:
        yych = (unsigned char)*++cur;
        goto yy106;
 yy198:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy254;
+       if (yych == 't') goto yy253;
        goto yy14;
 yy199:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy255;
+       if (yych == 't') goto yy254;
        goto yy14;
 yy200:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy256;
+       if (yych == 'o') goto yy255;
        goto yy14;
 yy201:
        yych = (unsigned char)*++cur;
-       if (yych == 'x') goto yy257;
+       if (yych == 'x') goto yy256;
        goto yy14;
 yy202:
        yych = (unsigned char)*++cur;
-       if (yych == 'u') goto yy258;
+       if (yych == 'u') goto yy257;
        goto yy14;
 yy203:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy259;
+       if (yych == 't') goto yy258;
        goto yy14;
 yy204:
        yych = (unsigned char)*++cur;
        if (yych <= 'f') {
-               if (yych == 'd') goto yy260;
+               if (yych == 'd') goto yy259;
                goto yy14;
        } else {
-               if (yych <= 'g') goto yy261;
-               if (yych == 'v') goto yy262;
+               if (yych <= 'g') goto yy260;
+               if (yych == 'v') goto yy261;
                goto yy14;
        }
 yy205:
        yych = (unsigned char)*++cur;
-       if (yych == 'p') goto yy263;
+       if (yych == 'p') goto yy262;
        goto yy14;
 yy206:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy264;
+       if (yych == 's') goto yy263;
        goto yy14;
 yy207:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy265;
+       if (yych == 'l') goto yy264;
        goto yy14;
 yy208:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy266;
+       if (yych == 'r') goto yy265;
        goto yy14;
 yy209:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy267;
+       if (yych == 'r') goto yy266;
        goto yy14;
 yy210:
        yych = (unsigned char)*++cur;
@@ -1060,259 +1059,254 @@ yy210:
        goto yy14;
 yy211:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy268;
+       if (yych == 'e') goto yy267;
        goto yy14;
 yy212:
        yych = (unsigned char)*++cur;
-       if (yych == 'c') goto yy269;
+       if (yych == 'c') goto yy268;
        goto yy14;
 yy213:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy270;
+       if (yych == '-') goto yy269;
        goto yy14;
 yy214:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy271;
+       if (yych == 'e') goto yy270;
        goto yy14;
 yy215:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy272;
+       if (yych == 'r') goto yy271;
        goto yy14;
 yy216:
        yych = (unsigned char)*++cur;
-       if (yych == 'p') goto yy273;
+       if (yych == 'p') goto yy272;
        goto yy14;
 yy217:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy275;
+       if (yych == 'i') goto yy274;
        goto yy14;
 yy218:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy276;
+       if (yych == 'e') goto yy275;
        goto yy14;
 yy219:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy277;
+       if (yych == 'i') goto yy276;
        goto yy14;
 yy220:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy278;
+       if (yych == 'l') goto yy277;
        goto yy14;
 yy221:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy280;
+       if (yych == 'r') goto yy279;
        goto yy14;
 yy222:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy281;
+       if (yych == 't') goto yy280;
        goto yy14;
 yy223:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy282;
+       if (yych == 'e') goto yy281;
        goto yy14;
 yy224:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy283;
+       if (yych == 'i') goto yy282;
        goto yy14;
 yy225:
        yych = (unsigned char)*++cur;
-       if (yych == 'y') goto yy284;
+       if (yych == 'y') goto yy283;
        goto yy14;
 yy226:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy285;
+       if (yych == 'e') goto yy284;
        goto yy14;
 yy227:
        ++cur;
-#line 150 "../src/parse/lex_conf.re"
+#line 151 "../src/parse/lex_conf.re"
        { opts.set_bEmitYYCh      (lex_conf_bool()); return; }
-#line 1130 "src/parse/lex_conf.cc"
+#line 1129 "src/parse/lex_conf.cc"
 yy229:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy286;
+       if (yych == 'e') goto yy285;
        goto yy14;
 yy230:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy287;
+       if (yych == 'a') goto yy286;
        goto yy14;
 yy231:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy288;
+       if (yych == 'r') goto yy287;
        goto yy14;
 yy232:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy289;
+       if (yych == 's') goto yy288;
        goto yy14;
 yy233:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy290;
+       if (yych == 'e') goto yy289;
        goto yy14;
 yy234:
        yych = (unsigned char)*++cur;
-       if (yych == 'c') goto yy291;
+       if (yych == 'c') goto yy290;
        goto yy14;
 yy235:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy292;
+       if (yych == 'e') goto yy291;
        goto yy14;
 yy236:
        ++cur;
 #line 82 "../src/parse/lex_conf.re"
        { opts.set_condPrefix       (lex_conf_string ()); return; }
-#line 1163 "src/parse/lex_conf.cc"
+#line 1162 "src/parse/lex_conf.cc"
 yy238:
        yych = (unsigned char)*++cur;
-       if (yych == 'A') goto yy293;
+       if (yych == 'A') goto yy292;
        goto yy14;
 yy239:
        yych = (unsigned char)*++cur;
        if (yych <= 'S') {
-               if (yych == 'O') goto yy294;
+               if (yych == 'O') goto yy293;
                goto yy14;
        } else {
-               if (yych <= 'T') goto yy295;
-               if (yych <= 'U') goto yy296;
+               if (yych <= 'T') goto yy294;
+               if (yych <= 'U') goto yy295;
                goto yy14;
        }
 yy240:
        yych = (unsigned char)*++cur;
-       if (yych == 'E') goto yy297;
-       if (yych == 'I') goto yy298;
+       if (yych == 'E') goto yy296;
        goto yy14;
 yy241:
        yych = (unsigned char)*++cur;
-       if (yych == 'I') goto yy299;
+       if (yych == 'I') goto yy297;
        goto yy14;
 yy242:
        yych = (unsigned char)*++cur;
-       if (yych == 'E') goto yy300;
+       if (yych == 'E') goto yy298;
        goto yy14;
 yy243:
        yych = (unsigned char)*++cur;
-       if (yych == 'E') goto yy301;
-       if (yych == 'I') goto yy302;
+       if (yych == 'E') goto yy299;
+       if (yych == 'I') goto yy300;
        goto yy14;
 yy244:
        yych = (unsigned char)*++cur;
-       if (yych == 'A') goto yy303;
+       if (yych == 'A') goto yy301;
        goto yy14;
 yy245:
        yych = (unsigned char)*++cur;
-       if (yych == 'E') goto yy304;
+       if (yych == 'E') goto yy302;
        goto yy14;
 yy246:
        yych = (unsigned char)*++cur;
-       if (yych == 'E') goto yy305;
+       if (yych == 'E') goto yy303;
        goto yy14;
 yy247:
        yych = (unsigned char)*++cur;
-       if (yych == 'E') goto yy306;
-       if (yych == 'K') goto yy307;
+       if (yych == 'E') goto yy304;
+       if (yych == 'K') goto yy305;
        goto yy14;
 yy248:
        yych = (unsigned char)*++cur;
-       if (yych == 'A') goto yy308;
+       if (yych == 'v') goto yy306;
        goto yy14;
 yy249:
        yych = (unsigned char)*++cur;
-       if (yych == 'v') goto yy309;
+       if (yych == '-') goto yy307;
        goto yy14;
 yy250:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy310;
+       if (yych == 'u') goto yy308;
        goto yy14;
 yy251:
        yych = (unsigned char)*++cur;
-       if (yych == 'u') goto yy311;
+       if (yych == 'g') goto yy309;
        goto yy14;
 yy252:
        yych = (unsigned char)*++cur;
-       if (yych == 'g') goto yy312;
+       if (yych == 'm') goto yy310;
        goto yy14;
 yy253:
        yych = (unsigned char)*++cur;
-       if (yych == 'm') goto yy313;
+       if (yych == '-') goto yy311;
        goto yy14;
 yy254:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy314;
+       if (yych == 'y') goto yy312;
        goto yy14;
 yy255:
        yych = (unsigned char)*++cur;
-       if (yych == 'y') goto yy315;
+       if (yych == 'd') goto yy313;
        goto yy14;
 yy256:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy316;
+       if (yych == '-') goto yy314;
        goto yy14;
 yy257:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy317;
+       if (yych == 't') goto yy315;
        goto yy14;
 yy258:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy318;
+       if (yych == 'e') goto yy317;
        goto yy14;
 yy259:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy320;
+       if (yych == 'e') goto yy318;
        goto yy14;
 yy260:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy321;
+       if (yych == 'e') goto yy319;
        goto yy14;
 yy261:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy322;
+       if (yych == 'e') goto yy320;
        goto yy14;
 yy262:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy323;
+       if (yych == 'u') goto yy321;
        goto yy14;
 yy263:
        yych = (unsigned char)*++cur;
-       if (yych == 'u') goto yy324;
+       if (yych == 'a') goto yy322;
        goto yy14;
 yy264:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy325;
+       if (yych == 'e') goto yy323;
        goto yy14;
 yy265:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy326;
+       if (yych == 't') goto yy324;
        goto yy14;
 yy266:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy327;
+       if (yych == 'a') goto yy325;
        goto yy14;
 yy267:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy328;
+       if (yych == '-') goto yy326;
        goto yy14;
 yy268:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy329;
+       if (yych == 'o') goto yy327;
        goto yy14;
 yy269:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy330;
+       if (yych == '1') goto yy328;
+       if (yych == '8') goto yy89;
        goto yy14;
 yy270:
        yych = (unsigned char)*++cur;
-       if (yych == '1') goto yy331;
-       if (yych == '8') goto yy89;
+       if (yych == '-') goto yy329;
        goto yy14;
 yy271:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy332;
+       if (yych == 'i') goto yy330;
        goto yy14;
 yy272:
-       yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy333;
-       goto yy14;
-yy273:
        ++cur;
-#line 135 "../src/parse/lex_conf.re"
+#line 136 "../src/parse/lex_conf.re"
        {
                const int32_t n = lex_conf_number ();
                if (n < 0)
@@ -1322,955 +1316,965 @@ yy273:
                opts.set_topIndent (static_cast<uint32_t> (n));
                return;
        }
-#line 1326 "src/parse/lex_conf.cc"
+#line 1320 "src/parse/lex_conf.cc"
+yy274:
+       yych = (unsigned char)*++cur;
+       if (yych == 'l') goto yy331;
+       goto yy14;
 yy275:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy334;
+       if (yych == 'x') goto yy332;
        goto yy14;
 yy276:
        yych = (unsigned char)*++cur;
-       if (yych == 'x') goto yy335;
+       if (yych == 'x') goto yy333;
        goto yy14;
 yy277:
-       yych = (unsigned char)*++cur;
-       if (yych == 'x') goto yy336;
-       goto yy14;
-yy278:
        yyaccept = 14;
        yych = (unsigned char)*(ptr = ++cur);
        if (yych <= 0x1F) {
                if (yych == '\t') {
                        ctx = cur;
-                       goto yy338;
+                       goto yy335;
                }
        } else {
                if (yych <= ' ') {
                        ctx = cur;
-                       goto yy338;
+                       goto yy335;
                }
                if (yych == '=') {
                        ctx = cur;
-                       goto yy340;
+                       goto yy337;
                }
        }
-yy279:
-#line 163 "../src/parse/lex_conf.re"
+yy278:
+#line 164 "../src/parse/lex_conf.re"
        { out.block().user_start_label = lex_conf_string(); return; }
-#line 1360 "src/parse/lex_conf.cc"
+#line 1354 "src/parse/lex_conf.cc"
+yy279:
+       yych = (unsigned char)*++cur;
+       if (yych == 't') goto yy339;
+       goto yy14;
 yy280:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy342;
+       if (yych == 'l') goto yy341;
        goto yy14;
 yy281:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy344;
+       if (yych == 's') goto yy342;
        goto yy14;
 yy282:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy345;
+       if (yych == 'x') goto yy343;
        goto yy14;
 yy283:
        yych = (unsigned char)*++cur;
-       if (yych == 'x') goto yy346;
+       if (yych == 'y') goto yy345;
        goto yy14;
 yy284:
        yych = (unsigned char)*++cur;
-       if (yych == 'y') goto yy348;
+       if (yych == 'r') goto yy346;
        goto yy14;
 yy285:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy349;
+       if (yych == 'c') goto yy347;
        goto yy14;
 yy286:
        yych = (unsigned char)*++cur;
-       if (yych == 'c') goto yy350;
+       if (yych == 'b') goto yy348;
        goto yy14;
 yy287:
        yych = (unsigned char)*++cur;
-       if (yych == 'b') goto yy351;
+       if (yych == 'a') goto yy349;
        goto yy14;
 yy288:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy352;
+       if (yych == 'h') goto yy350;
        goto yy14;
 yy289:
        yych = (unsigned char)*++cur;
-       if (yych == 'h') goto yy353;
+       if (yych == 'r') goto yy351;
        goto yy14;
 yy290:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy354;
+       if (yych == 'o') goto yy353;
        goto yy14;
 yy291:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy356;
+       if (yych == 'f') goto yy354;
        goto yy14;
 yy292:
        yych = (unsigned char)*++cur;
-       if (yych == 'f') goto yy357;
+       if (yych == 'C') goto yy355;
        goto yy14;
 yy293:
        yych = (unsigned char)*++cur;
-       if (yych == 'C') goto yy358;
+       if (yych == 'N') goto yy356;
+       if (yych == 'P') goto yy357;
        goto yy14;
 yy294:
        yych = (unsigned char)*++cur;
-       if (yych == 'N') goto yy359;
+       if (yych <= 'W') goto yy14;
+       if (yych <= 'X') goto yy358;
+       if (yych <= 'Y') goto yy359;
        goto yy14;
 yy295:
        yych = (unsigned char)*++cur;
-       if (yych <= 'W') goto yy14;
-       if (yych <= 'X') goto yy360;
-       if (yych <= 'Y') goto yy361;
+       if (yych == 'R') goto yy360;
        goto yy14;
 yy296:
        yych = (unsigned char)*++cur;
-       if (yych == 'R') goto yy362;
+       if (yych == 'B') goto yy361;
        goto yy14;
 yy297:
        yych = (unsigned char)*++cur;
-       if (yych == 'B') goto yy363;
+       if (yych == 'L') goto yy362;
        goto yy14;
 yy298:
        yych = (unsigned char)*++cur;
-       if (yych == 'S') goto yy364;
+       if (yych == 'T') goto yy363;
        goto yy14;
 yy299:
        yych = (unsigned char)*++cur;
-       if (yych == 'L') goto yy365;
+       if (yych == 'S') goto yy364;
        goto yy14;
 yy300:
        yych = (unsigned char)*++cur;
-       if (yych == 'T') goto yy366;
+       if (yych == 'M') goto yy365;
        goto yy14;
 yy301:
        yych = (unsigned char)*++cur;
-       if (yych == 'S') goto yy367;
+       if (yych == 'R') goto yy366;
        goto yy14;
 yy302:
        yych = (unsigned char)*++cur;
-       if (yych == 'M') goto yy368;
+       if (yych == 'E') goto yy367;
        goto yy14;
 yy303:
        yych = (unsigned char)*++cur;
-       if (yych == 'R') goto yy369;
+       if (yych == 'S') goto yy368;
        goto yy14;
 yy304:
        yych = (unsigned char)*++cur;
-       if (yych == 'E') goto yy370;
+       if (yych == 'T') goto yy369;
        goto yy14;
 yy305:
        yych = (unsigned char)*++cur;
-       if (yych == 'S') goto yy371;
+       if (yych == 'I') goto yy370;
        goto yy14;
 yy306:
        yych = (unsigned char)*++cur;
-       if (yych == 'T') goto yy372;
+       if (yych == 'e') goto yy371;
        goto yy14;
 yy307:
        yych = (unsigned char)*++cur;
-       if (yych == 'I') goto yy373;
+       if (yych == 'i') goto yy372;
        goto yy14;
 yy308:
        yych = (unsigned char)*++cur;
-       if (yych == 'G') goto yy374;
+       if (yych == 't') goto yy373;
        goto yy14;
 yy309:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy376;
+       if (yych == '-') goto yy374;
        goto yy14;
 yy310:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy377;
+       if (yych == 'i') goto yy375;
        goto yy14;
 yy311:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy378;
+       if (yych == 'd') goto yy376;
        goto yy14;
 yy312:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy379;
+       if (yych == '-') goto yy377;
        goto yy14;
 yy313:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy380;
+       if (yych == 'i') goto yy378;
        goto yy14;
 yy314:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy381;
+       if (yych == 's') goto yy379;
        goto yy14;
 yy315:
+       ++cur;
+#line 72 "../src/parse/lex_conf.re"
+       { lex_conf_input();            return; }
+#line 1506 "src/parse/lex_conf.cc"
+yy317:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy382;
+       if (yych == 'd') goto yy380;
        goto yy14;
-yy316:
+yy318:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy383;
+       if (yych == 'b') goto yy381;
        goto yy14;
-yy317:
+yy319:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy384;
+       if (yych == 'n') goto yy382;
        goto yy14;
-yy318:
-       ++cur;
-#line 72 "../src/parse/lex_conf.re"
-       { lex_conf_input();            return; }
-#line 1519 "src/parse/lex_conf.cc"
 yy320:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy385;
+       if (yych == 'r') goto yy383;
        goto yy14;
 yy321:
        yych = (unsigned char)*++cur;
-       if (yych == 'b') goto yy386;
+       if (yych == 't') goto yy384;
        goto yy14;
 yy322:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy387;
+       if (yych == 'b') goto yy385;
        goto yy14;
 yy323:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy388;
+       if (yych == 't') goto yy386;
        goto yy14;
 yy324:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy389;
+       if (yych == '-') goto yy387;
        goto yy14;
 yy325:
        yych = (unsigned char)*++cur;
-       if (yych == 'b') goto yy390;
+       if (yych == 'b') goto yy388;
        goto yy14;
 yy326:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy391;
+       if (yych == 'h') goto yy389;
        goto yy14;
 yy327:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy392;
+       if (yych == 'd') goto yy390;
        goto yy14;
 yy328:
        yych = (unsigned char)*++cur;
-       if (yych == 'b') goto yy393;
+       if (yych == '6') goto yy126;
        goto yy14;
 yy329:
        yych = (unsigned char)*++cur;
-       if (yych == 'h') goto yy394;
+       if (yych == 'c') goto yy391;
        goto yy14;
 yy330:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy395;
+       if (yych == 'n') goto yy392;
        goto yy14;
 yy331:
        yych = (unsigned char)*++cur;
-       if (yych == '6') goto yy126;
+       if (yych == 'l') goto yy393;
        goto yy14;
 yy332:
        yych = (unsigned char)*++cur;
-       if (yych == 'c') goto yy396;
+       if (yych == 't') goto yy394;
        goto yy14;
 yy333:
-       yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy397;
-       goto yy14;
-yy334:
-       yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy398;
-       goto yy14;
-yy335:
-       yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy399;
-       goto yy14;
-yy336:
        ++cur;
-#line 159 "../src/parse/lex_conf.re"
+#line 160 "../src/parse/lex_conf.re"
        { opts.set_labelPrefix (lex_conf_string ()); return; }
-#line 1588 "src/parse/lex_conf.cc"
-yy338:
+#line 1575 "src/parse/lex_conf.cc"
+yy335:
        ++cur;
        if (lim <= cur) fill(1);
        yych = (unsigned char)*cur;
        if (yybm[0+yych] & 64) {
-               goto yy338;
+               goto yy335;
        }
        if (yych != '=') goto yy14;
-yy340:
+yy337:
        ++cur;
        if ((lim - cur) < 2) fill(2);
        yych = (unsigned char)*cur;
        if (yych <= ',') {
                if (yych <= '\t') {
                        if (yych <= 0x08) goto yy14;
-                       goto yy340;
+                       goto yy337;
                } else {
-                       if (yych == ' ') goto yy340;
+                       if (yych == ' ') goto yy337;
                        goto yy14;
                }
        } else {
                if (yych <= '/') {
-                       if (yych <= '-') goto yy401;
+                       if (yych <= '-') goto yy396;
                        goto yy14;
                } else {
-                       if (yych <= '0') goto yy402;
-                       if (yych <= '9') goto yy404;
+                       if (yych <= '0') goto yy397;
+                       if (yych <= '9') goto yy399;
                        goto yy14;
                }
        }
-yy342:
+yy339:
        ++cur;
 #line 97 "../src/parse/lex_conf.re"
        { opts.set_bUseStateAbort  (lex_conf_bool()); return; }
-#line 1623 "src/parse/lex_conf.cc"
-yy344:
+#line 1610 "src/parse/lex_conf.cc"
+yy341:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy406;
+       if (yych == 'a') goto yy401;
        goto yy14;
-yy345:
+yy342:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy407;
+       if (yych == 's') goto yy402;
        goto yy14;
-yy346:
+yy343:
        ++cur;
-#line 130 "../src/parse/lex_conf.re"
+#line 131 "../src/parse/lex_conf.re"
        { opts.set_tags_prefix    (lex_conf_string ()); return; }
-#line 1636 "src/parse/lex_conf.cc"
-yy348:
+#line 1623 "src/parse/lex_conf.cc"
+yy345:
        yych = (unsigned char)*++cur;
        if (yych <= 'c') {
                if (yych <= '`') goto yy14;
-               if (yych <= 'a') goto yy408;
-               if (yych <= 'b') goto yy409;
-               goto yy410;
+               if (yych <= 'a') goto yy403;
+               if (yych <= 'b') goto yy404;
+               goto yy405;
        } else {
                if (yych <= 'r') goto yy14;
-               if (yych <= 's') goto yy411;
-               if (yych <= 't') goto yy412;
+               if (yych <= 's') goto yy406;
+               if (yych <= 't') goto yy407;
                goto yy14;
        }
-yy349:
+yy346:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy413;
+       if (yych == 's') goto yy408;
        goto yy14;
-yy350:
+yy347:
        yych = (unsigned char)*++cur;
-       if (yych == 'k') goto yy414;
+       if (yych == 'k') goto yy409;
        goto yy14;
-yy351:
+yy348:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy416;
+       if (yych == 'l') goto yy411;
        goto yy14;
-yy352:
+yy349:
        yych = (unsigned char)*++cur;
-       if (yych == 'm') goto yy417;
+       if (yych == 'm') goto yy412;
        goto yy14;
-yy353:
+yy350:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy418;
+       if (yych == 'o') goto yy413;
        goto yy14;
-yy354:
+yy351:
        yyaccept = 15;
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == '@') goto yy419;
-yy355:
+       if (yych == '@') goto yy414;
+yy352:
 #line 84 "../src/parse/lex_conf.re"
        { opts.set_condDivider      (lex_conf_string ()); return; }
-#line 1677 "src/parse/lex_conf.cc"
+#line 1664 "src/parse/lex_conf.cc"
+yy353:
+       yych = (unsigned char)*++cur;
+       if (yych == 'n') goto yy415;
+       goto yy14;
+yy354:
+       yych = (unsigned char)*++cur;
+       if (yych == 'i') goto yy416;
+       goto yy14;
+yy355:
+       yych = (unsigned char)*++cur;
+       if (yych == 'K') goto yy417;
+       goto yy14;
 yy356:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy420;
+       if (yych == 'D') goto yy418;
        goto yy14;
 yy357:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy421;
+       if (yych == 'Y') goto yy419;
        goto yy14;
 yy358:
        yych = (unsigned char)*++cur;
-       if (yych == 'K') goto yy422;
+       if (yych == 'M') goto yy420;
        goto yy14;
 yy359:
        yych = (unsigned char)*++cur;
-       if (yych == 'D') goto yy423;
+       if (yych == 'P') goto yy421;
        goto yy14;
 yy360:
        yych = (unsigned char)*++cur;
-       if (yych == 'M') goto yy424;
+       if (yych == 'S') goto yy422;
        goto yy14;
 yy361:
        yych = (unsigned char)*++cur;
-       if (yych == 'P') goto yy425;
+       if (yych == 'U') goto yy423;
        goto yy14;
 yy362:
        yych = (unsigned char)*++cur;
-       if (yych == 'S') goto yy426;
+       if (yych == 'L') goto yy424;
        goto yy14;
 yy363:
        yych = (unsigned char)*++cur;
-       if (yych == 'U') goto yy427;
+       if (yych == 'C') goto yy426;
+       if (yych == 'S') goto yy427;
        goto yy14;
 yy364:
        yych = (unsigned char)*++cur;
-       if (yych == 'T') goto yy428;
+       if (yych == 'S') goto yy428;
        goto yy14;
 yy365:
        yych = (unsigned char)*++cur;
-       if (yych == 'L') goto yy430;
+       if (yych == 'I') goto yy429;
        goto yy14;
 yy366:
        yych = (unsigned char)*++cur;
-       if (yych == 'C') goto yy432;
-       if (yych == 'S') goto yy433;
+       if (yych == 'K') goto yy430;
        goto yy14;
 yy367:
        yych = (unsigned char)*++cur;
-       if (yych == 'S') goto yy434;
+       if (yych == 'K') goto yy431;
        goto yy14;
 yy368:
        yych = (unsigned char)*++cur;
-       if (yych == 'I') goto yy435;
+       if (yych == 'T') goto yy433;
        goto yy14;
 yy369:
        yych = (unsigned char)*++cur;
-       if (yych == 'K') goto yy436;
+       if (yych == 'C') goto yy434;
+       if (yych == 'S') goto yy435;
        goto yy14;
 yy370:
        yych = (unsigned char)*++cur;
-       if (yych == 'K') goto yy437;
+       if (yych == 'P') goto yy436;
        goto yy14;
 yy371:
        yych = (unsigned char)*++cur;
-       if (yych == 'T') goto yy439;
+       if (yych == 'c') goto yy438;
        goto yy14;
 yy372:
        yych = (unsigned char)*++cur;
-       if (yych == 'C') goto yy440;
-       if (yych == 'S') goto yy441;
+       if (yych == 'n') goto yy439;
        goto yy14;
 yy373:
        yych = (unsigned char)*++cur;
-       if (yych == 'P') goto yy442;
+       if (yych == 'e') goto yy440;
        goto yy14;
 yy374:
-       ++cur;
-#line 127 "../src/parse/lex_conf.re"
-       { opts.set_tags_yytag   (lex_conf_string ()); return; }
-#line 1756 "src/parse/lex_conf.cc"
+       yych = (unsigned char)*++cur;
+       if (yych == 'o') goto yy441;
+       goto yy14;
+yy375:
+       yych = (unsigned char)*++cur;
+       if (yych == 'n') goto yy442;
+       goto yy14;
 yy376:
        yych = (unsigned char)*++cur;
-       if (yych == 'c') goto yy444;
+       if (yych == 'o') goto yy443;
        goto yy14;
 yy377:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy445;
+       if (yych == 'c') goto yy444;
        goto yy14;
 yy378:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy446;
+       if (yych == 'n') goto yy445;
        goto yy14;
 yy379:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy447;
+       if (yych == 'y') goto yy446;
        goto yy14;
 yy380:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy448;
+       if (yych == '-') goto yy447;
        goto yy14;
 yy381:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy449;
+       if (yych == 'u') goto yy448;
        goto yy14;
 yy382:
        yych = (unsigned char)*++cur;
-       if (yych == 'c') goto yy450;
+       if (yych == 'e') goto yy449;
        goto yy14;
 yy383:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy451;
+       if (yych == 's') goto yy450;
        goto yy14;
 yy384:
        yych = (unsigned char)*++cur;
-       if (yych == 'y') goto yy452;
-       goto yy14;
+       goto yy115;
 yy385:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy453;
+       if (yych == 'l') goto yy451;
        goto yy14;
 yy386:
        yych = (unsigned char)*++cur;
-       if (yych == 'u') goto yy454;
+       if (yych == 'o') goto yy452;
        goto yy14;
 yy387:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy455;
+       if (yych == 'c') goto yy453;
        goto yy14;
 yy388:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy456;
+       if (yych == 'l') goto yy454;
        goto yy14;
 yy389:
        yych = (unsigned char)*++cur;
-       goto yy115;
+       if (yych == 'e') goto yy455;
+       goto yy14;
 yy390:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy457;
+       if (yych == 'e') goto yy456;
        goto yy14;
 yy391:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy458;
+       if (yych == 'h') goto yy457;
        goto yy14;
 yy392:
        yych = (unsigned char)*++cur;
-       if (yych == 'c') goto yy459;
+       if (yych == 'g') goto yy458;
        goto yy14;
 yy393:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy460;
+       if (yych == 'L') goto yy460;
        goto yy14;
 yy394:
-       yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy461;
-       goto yy14;
-yy395:
-       yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy462;
-       goto yy14;
-yy396:
-       yych = (unsigned char)*++cur;
-       if (yych == 'h') goto yy463;
-       goto yy14;
-yy397:
-       yych = (unsigned char)*++cur;
-       if (yych == 'g') goto yy464;
-       goto yy14;
-yy398:
-       yych = (unsigned char)*++cur;
-       if (yych == 'L') goto yy466;
-       goto yy14;
-yy399:
        ++cur;
 #line 96 "../src/parse/lex_conf.re"
        { opts.set_yynext          (lex_conf_string ()); return; }
-#line 1852 "src/parse/lex_conf.cc"
-yy401:
+#line 1834 "src/parse/lex_conf.cc"
+yy396:
        yych = (unsigned char)*++cur;
        if (yych <= '0') goto yy14;
-       if (yych <= '9') goto yy404;
+       if (yych <= '9') goto yy399;
        goto yy14;
-yy402:
+yy397:
        ++cur;
-yy403:
+yy398:
        cur = ctx;
-#line 162 "../src/parse/lex_conf.re"
+#line 163 "../src/parse/lex_conf.re"
        { out.block().force_start_label = lex_conf_bool(); return; }
-#line 1864 "src/parse/lex_conf.cc"
-yy404:
+#line 1846 "src/parse/lex_conf.cc"
+yy399:
        ++cur;
        if (lim <= cur) fill(1);
        yych = (unsigned char)*cur;
        if (yybm[0+yych] & 128) {
-               goto yy404;
+               goto yy399;
        }
-       goto yy403;
-yy406:
+       goto yy398;
+yy401:
        yych = (unsigned char)*++cur;
-       if (yych == 'b') goto yy467;
+       if (yych == 'b') goto yy461;
        goto yy14;
-yy407:
+yy402:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy468;
+       if (yych == 'i') goto yy462;
        goto yy14;
-yy408:
+yy403:
        yych = (unsigned char)*++cur;
-       if (yych == 'c') goto yy469;
+       if (yych == 'c') goto yy463;
        goto yy14;
-yy409:
+yy404:
+       yych = (unsigned char)*++cur;
+       if (yych == 'm') goto yy464;
+       goto yy14;
+yy405:
+       yych = (unsigned char)*++cur;
+       if (yych == 'h') goto yy466;
+       if (yych == 't') goto yy468;
+       goto yy14;
+yy406:
+       yych = (unsigned char)*++cur;
+       if (yych == 't') goto yy469;
+       goto yy14;
+yy407:
        yych = (unsigned char)*++cur;
-       if (yych == 'm') goto yy470;
+       if (yych == 'a') goto yy470;
        goto yy14;
-yy410:
+yy408:
        yych = (unsigned char)*++cur;
-       if (yych == 'h') goto yy472;
-       if (yych == 't') goto yy474;
+       if (yych == 'i') goto yy471;
        goto yy14;
+yy409:
+       ++cur;
+#line 158 "../src/parse/lex_conf.re"
+       { opts.set_fill_check   (lex_conf_bool()); return; }
+#line 1892 "src/parse/lex_conf.cc"
 yy411:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy475;
+       if (yych == 'e') goto yy472;
        goto yy14;
 yy412:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy476;
+       if (yych == 'e') goto yy474;
        goto yy14;
 yy413:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy477;
+       if (yych == 'l') goto yy475;
        goto yy14;
 yy414:
-       ++cur;
-#line 157 "../src/parse/lex_conf.re"
-       { opts.set_fill_check   (lex_conf_bool()); return; }
-#line 1910 "src/parse/lex_conf.cc"
+       yych = (unsigned char)*++cur;
+       if (yych == 'c') goto yy476;
+       goto yy14;
+yy415:
+       yych = (unsigned char)*++cur;
+       if (yych == 'd') goto yy477;
+       goto yy14;
 yy416:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy478;
+       if (yych == 'x') goto yy479;
        goto yy14;
 yy417:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy480;
+       if (yych == 'U') goto yy481;
        goto yy14;
 yy418:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy481;
+       if (yych == 'T') goto yy482;
        goto yy14;
 yy419:
        yych = (unsigned char)*++cur;
-       if (yych == 'c') goto yy482;
+       if (yych == 'T') goto yy483;
        goto yy14;
 yy420:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy483;
+       if (yych == 'A') goto yy484;
        goto yy14;
 yy421:
        yych = (unsigned char)*++cur;
-       if (yych == 'x') goto yy485;
+       if (yych == 'E') goto yy485;
        goto yy14;
 yy422:
        yych = (unsigned char)*++cur;
-       if (yych == 'U') goto yy487;
+       if (yych == 'O') goto yy487;
        goto yy14;
 yy423:
        yych = (unsigned char)*++cur;
-       if (yych == 'T') goto yy488;
+       if (yych == 'G') goto yy488;
        goto yy14;
 yy424:
-       yych = (unsigned char)*++cur;
-       if (yych == 'A') goto yy489;
-       goto yy14;
+       yyaccept = 16;
+       yych = (unsigned char)*(ptr = ++cur);
+       if (yych == ':') goto yy490;
+       if (yych == '@') goto yy491;
 yy425:
-       yych = (unsigned char)*++cur;
-       if (yych == 'E') goto yy490;
-       goto yy14;
+#line 153 "../src/parse/lex_conf.re"
+       { opts.set_fill         (lex_conf_string ()); return; }
+#line 1953 "src/parse/lex_conf.cc"
 yy426:
        yych = (unsigned char)*++cur;
        if (yych == 'O') goto yy492;
        goto yy14;
 yy427:
        yych = (unsigned char)*++cur;
-       if (yych == 'G') goto yy493;
+       if (yych == 'T') goto yy493;
        goto yy14;
 yy428:
-       ++cur;
-#line 128 "../src/parse/lex_conf.re"
-       { opts.set_tags_yydist  (lex_conf_string ()); return; }
-#line 1963 "src/parse/lex_conf.cc"
+       yych = (unsigned char)*++cur;
+       if (yych == 'T') goto yy494;
+       goto yy14;
+yy429:
+       yych = (unsigned char)*++cur;
+       if (yych == 'T') goto yy495;
+       goto yy14;
 yy430:
-       yyaccept = 16;
-       yych = (unsigned char)*(ptr = ++cur);
-       if (yych == ':') goto yy495;
-       if (yych == '@') goto yy496;
-yy431:
-#line 152 "../src/parse/lex_conf.re"
-       { opts.set_fill         (lex_conf_string ()); return; }
-#line 1972 "src/parse/lex_conf.cc"
-yy432:
        yych = (unsigned char)*++cur;
-       if (yych == 'O') goto yy497;
+       if (yych == 'E') goto yy497;
        goto yy14;
+yy431:
+       ++cur;
+#line 120 "../src/parse/lex_conf.re"
+       { opts.set_yypeek       (lex_conf_string ()); return; }
+#line 1978 "src/parse/lex_conf.cc"
 yy433:
        yych = (unsigned char)*++cur;
-       if (yych == 'T') goto yy498;
+       if (yych == 'O') goto yy498;
        goto yy14;
 yy434:
        yych = (unsigned char)*++cur;
-       if (yych == 'T') goto yy499;
+       if (yych == 'O') goto yy499;
        goto yy14;
 yy435:
        yych = (unsigned char)*++cur;
        if (yych == 'T') goto yy500;
        goto yy14;
 yy436:
+       ++cur;
+#line 121 "../src/parse/lex_conf.re"
+       { opts.set_yyskip       (lex_conf_string ()); return; }
+#line 1995 "src/parse/lex_conf.cc"
+yy438:
        yych = (unsigned char)*++cur;
-       if (yych == 'E') goto yy502;
+       if (yych == 't') goto yy501;
        goto yy14;
-yy437:
-       ++cur;
-#line 120 "../src/parse/lex_conf.re"
-       { opts.set_yypeek       (lex_conf_string ()); return; }
-#line 1997 "src/parse/lex_conf.cc"
 yy439:
        yych = (unsigned char)*++cur;
-       if (yych == 'O') goto yy503;
+       if (yych == 's') goto yy502;
+       if (yych == 'v') goto yy503;
        goto yy14;
 yy440:
        yych = (unsigned char)*++cur;
-       if (yych == 'O') goto yy504;
+       if (yych == 'd') goto yy504;
        goto yy14;
 yy441:
        yych = (unsigned char)*++cur;
-       if (yych == 'T') goto yy505;
+       if (yych == 'u') goto yy505;
        goto yy14;
 yy442:
-       ++cur;
-#line 121 "../src/parse/lex_conf.re"
-       { opts.set_yyskip       (lex_conf_string ()); return; }
-#line 2014 "src/parse/lex_conf.cc"
+       yych = (unsigned char)*++cur;
+       if (yych == 'i') goto yy506;
+       goto yy14;
+yy443:
+       yych = (unsigned char)*++cur;
+       if (yych == 't') goto yy91;
+       goto yy14;
 yy444:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy506;
+       if (yych == 'l') goto yy507;
        goto yy14;
 yy445:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy507;
-       if (yych == 'v') goto yy508;
+       if (yych == 'g') goto yy508;
        goto yy14;
 yy446:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy509;
+       if (yych == 'n') goto yy509;
        goto yy14;
 yy447:
        yych = (unsigned char)*++cur;
-       if (yych == 'u') goto yy510;
+       if (yych == 'i') goto yy510;
        goto yy14;
 yy448:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy511;
+       if (yych == 'g') goto yy511;
        goto yy14;
 yy449:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy91;
+       if (yych == 'r') goto yy512;
        goto yy14;
 yy450:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy512;
+       if (yych == 'i') goto yy513;
        goto yy14;
 yy451:
        yych = (unsigned char)*++cur;
-       if (yych == 'g') goto yy513;
+       if (yych == 'e') goto yy514;
        goto yy14;
 yy452:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy514;
+       if (yych == 'n') goto yy95;
        goto yy14;
 yy453:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy515;
+       if (yych == 'o') goto yy515;
        goto yy14;
 yy454:
        yych = (unsigned char)*++cur;
-       if (yych == 'g') goto yy516;
+       if (yych == 'e') goto yy516;
        goto yy14;
 yy455:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy517;
+       if (yych == 'a') goto yy517;
        goto yy14;
 yy456:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy518;
-       goto yy14;
+       goto yy123;
 yy457:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy519;
+       if (yych == 'a') goto yy518;
        goto yy14;
 yy458:
-       yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy95;
-       goto yy14;
-yy459:
-       yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy520;
-       goto yy14;
+       ++cur;
+#line 134 "../src/parse/lex_conf.re"
+       { opts.set_indString (lex_conf_string ()); return; }
+#line 2080 "src/parse/lex_conf.cc"
 yy460:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy521;
+       if (yych == 'a') goto yy519;
        goto yy14;
 yy461:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy522;
+       if (yych == 'e') goto yy520;
        goto yy14;
 yy462:
        yych = (unsigned char)*++cur;
-       goto yy123;
+       if (yych == 'o') goto yy521;
+       goto yy14;
 yy463:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy523;
+       if (yych == 'c') goto yy522;
        goto yy14;
 yy464:
        ++cur;
-#line 133 "../src/parse/lex_conf.re"
-       { opts.set_indString (lex_conf_string ()); return; }
-#line 2099 "src/parse/lex_conf.cc"
+#line 101 "../src/parse/lex_conf.re"
+       { opts.set_yybm         (lex_conf_string ()); return; }
+#line 2101 "src/parse/lex_conf.cc"
 yy466:
+       ++cur;
+#line 149 "../src/parse/lex_conf.re"
+       { opts.set_yych           (lex_conf_string ()); return; }
+#line 2106 "src/parse/lex_conf.cc"
+yy468:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy524;
+       if (yych == 'a') goto yy523;
        goto yy14;
-yy467:
+yy469:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy525;
+       if (yych == 'a') goto yy524;
        goto yy14;
-yy468:
+yy470:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy526;
+       if (yych == 'r') goto yy525;
        goto yy14;
-yy469:
+yy471:
        yych = (unsigned char)*++cur;
-       if (yych == 'c') goto yy527;
+       if (yych == 'o') goto yy526;
        goto yy14;
-yy470:
-       ++cur;
-#line 101 "../src/parse/lex_conf.re"
-       { opts.set_yybm         (lex_conf_string ()); return; }
-#line 2120 "src/parse/lex_conf.cc"
 yy472:
        ++cur;
-#line 148 "../src/parse/lex_conf.re"
-       { opts.set_yych           (lex_conf_string ()); return; }
-#line 2125 "src/parse/lex_conf.cc"
+#line 154 "../src/parse/lex_conf.re"
+       { opts.set_fill_use     (lex_conf_bool()); return; }
+#line 2127 "src/parse/lex_conf.cc"
 yy474:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy528;
+       if (yych == 't') goto yy527;
        goto yy14;
 yy475:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy529;
+       if (yych == 'd') goto yy528;
        goto yy14;
 yy476:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy530;
+       if (yych == 'o') goto yy530;
        goto yy14;
 yy477:
-       yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy531;
-       goto yy14;
-yy478:
        ++cur;
-#line 153 "../src/parse/lex_conf.re"
-       { opts.set_fill_use     (lex_conf_bool()); return; }
-#line 2146 "src/parse/lex_conf.cc"
-yy480:
-       yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy532;
-       goto yy14;
+#line 87 "../src/parse/lex_conf.re"
+       { opts.set_condGotoParam    (lex_conf_string ()); return; }
+#line 2144 "src/parse/lex_conf.cc"
+yy479:
+       ++cur;
+#line 83 "../src/parse/lex_conf.re"
+       { opts.set_condEnumPrefix   (lex_conf_string ()); return; }
+#line 2149 "src/parse/lex_conf.cc"
 yy481:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy533;
+       if (yych == 'P') goto yy531;
        goto yy14;
 yy482:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy535;
+       if (yych == 'Y') goto yy533;
        goto yy14;
 yy483:
-       ++cur;
-#line 87 "../src/parse/lex_conf.re"
-       { opts.set_condGotoParam    (lex_conf_string ()); return; }
-#line 2163 "src/parse/lex_conf.cc"
+       yych = (unsigned char)*++cur;
+       if (yych == 'A') goto yy534;
+       goto yy14;
+yy484:
+       yych = (unsigned char)*++cur;
+       if (yych == 'R') goto yy535;
+       goto yy14;
 yy485:
        ++cur;
-#line 83 "../src/parse/lex_conf.re"
-       { opts.set_condEnumPrefix   (lex_conf_string ()); return; }
-#line 2168 "src/parse/lex_conf.cc"
+#line 148 "../src/parse/lex_conf.re"
+       { opts.set_yyctype        (lex_conf_string ()); return; }
+#line 2170 "src/parse/lex_conf.cc"
 yy487:
        yych = (unsigned char)*++cur;
-       if (yych == 'P') goto yy536;
+       if (yych == 'R') goto yy536;
        goto yy14;
 yy488:
+       ++cur;
+#line 146 "../src/parse/lex_conf.re"
+       { opts.set_yydebug (lex_conf_string ()); return; }
+#line 2179 "src/parse/lex_conf.cc"
+yy490:
        yych = (unsigned char)*++cur;
-       if (yych == 'Y') goto yy538;
+       if (yych == 'n') goto yy538;
        goto yy14;
-yy489:
+yy491:
        yych = (unsigned char)*++cur;
-       if (yych == 'R') goto yy539;
+       if (yych == 'l') goto yy539;
        goto yy14;
-yy490:
-       ++cur;
-#line 147 "../src/parse/lex_conf.re"
-       { opts.set_yyctype        (lex_conf_string ()); return; }
-#line 2185 "src/parse/lex_conf.cc"
 yy492:
        yych = (unsigned char)*++cur;
-       if (yych == 'R') goto yy540;
+       if (yych == 'N') goto yy540;
        goto yy14;
 yy493:
-       ++cur;
-#line 145 "../src/parse/lex_conf.re"
-       { opts.set_yydebug (lex_conf_string ()); return; }
-#line 2194 "src/parse/lex_conf.cc"
-yy495:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy542;
+       if (yych == 'A') goto yy541;
        goto yy14;
-yy496:
+yy494:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy543;
+       if (yych == 'H') goto yy542;
        goto yy14;
+yy495:
+       ++cur;
+#line 118 "../src/parse/lex_conf.re"
+       { opts.set_yylimit     (lex_conf_string ()); return; }
+#line 2204 "src/parse/lex_conf.cc"
 yy497:
        yych = (unsigned char)*++cur;
-       if (yych == 'N') goto yy544;
+       if (yych == 'R') goto yy543;
        goto yy14;
 yy498:
        yych = (unsigned char)*++cur;
-       if (yych == 'A') goto yy545;
+       if (yych == 'R') goto yy545;
        goto yy14;
 yy499:
        yych = (unsigned char)*++cur;
-       if (yych == 'H') goto yy546;
+       if (yych == 'N') goto yy546;
        goto yy14;
 yy500:
-       ++cur;
-#line 118 "../src/parse/lex_conf.re"
-       { opts.set_yylimit     (lex_conf_string ()); return; }
-#line 2219 "src/parse/lex_conf.cc"
+       yych = (unsigned char)*++cur;
+       if (yych == 'A') goto yy547;
+       goto yy14;
+yy501:
+       yych = (unsigned char)*++cur;
+       if (yych == 'o') goto yy548;
+       goto yy14;
 yy502:
        yych = (unsigned char)*++cur;
-       if (yych == 'R') goto yy547;
+       if (yych == 'e') goto yy549;
        goto yy14;
 yy503:
        yych = (unsigned char)*++cur;
-       if (yych == 'R') goto yy549;
+       if (yych == 'e') goto yy550;
        goto yy14;
 yy504:
        yych = (unsigned char)*++cur;
-       if (yych == 'N') goto yy550;
+       if (yych == '-') goto yy551;
        goto yy14;
 yy505:
        yych = (unsigned char)*++cur;
-       if (yych == 'A') goto yy551;
+       if (yych == 't') goto yy552;
        goto yy14;
 yy506:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy552;
+       if (yych == 'm') goto yy553;
        goto yy14;
 yy507:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy553;
+       if (yych == 'a') goto yy554;
        goto yy14;
 yy508:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy554;
+       if (yych == '-') goto yy555;
        goto yy14;
 yy509:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy555;
+       if (yych == 't') goto yy556;
        goto yy14;
 yy510:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy556;
+       if (yych == 'f') goto yy557;
        goto yy14;
 yy511:
        yych = (unsigned char)*++cur;
-       if (yych == 'm') goto yy557;
+       if (yych == '-') goto yy558;
        goto yy14;
 yy512:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy558;
+       if (yych == 'a') goto yy559;
        goto yy14;
 yy513:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy559;
+       if (yych == 'o') goto yy560;
        goto yy14;
 yy514:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy560;
-       goto yy14;
+       goto yy117;
 yy515:
        yych = (unsigned char)*++cur;
-       if (yych == 'f') goto yy561;
+       if (yych == 'n') goto yy561;
        goto yy14;
 yy516:
        yych = (unsigned char)*++cur;
@@ -2278,68 +2282,49 @@ yy516:
        goto yy14;
 yy517:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy563;
+       if (yych == 'd') goto yy563;
        goto yy14;
 yy518:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy564;
+       if (yych == 'r') goto yy564;
        goto yy14;
 yy519:
        yych = (unsigned char)*++cur;
-       goto yy117;
+       if (yych == 'b') goto yy565;
+       goto yy14;
 yy520:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy565;
+       if (yych == 'l') goto yy566;
        goto yy14;
 yy521:
        yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy566;
+       if (yych == 'n') goto yy568;
        goto yy14;
 yy522:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy567;
+       if (yych == 'e') goto yy570;
        goto yy14;
 yy523:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy568;
+       if (yych == 'b') goto yy571;
        goto yy14;
 yy524:
        yych = (unsigned char)*++cur;
-       if (yych == 'b') goto yy569;
+       if (yych == 'b') goto yy572;
        goto yy14;
 yy525:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy570;
+       if (yych == 'g') goto yy573;
        goto yy14;
 yy526:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy572;
+       if (yych == 'n') goto yy574;
        goto yy14;
 yy527:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy574;
+       if (yych == 'e') goto yy576;
        goto yy14;
 yy528:
-       yych = (unsigned char)*++cur;
-       if (yych == 'b') goto yy575;
-       goto yy14;
-yy529:
-       yych = (unsigned char)*++cur;
-       if (yych == 'b') goto yy576;
-       goto yy14;
-yy530:
-       yych = (unsigned char)*++cur;
-       if (yych == 'g') goto yy577;
-       goto yy14;
-yy531:
-       yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy578;
-       goto yy14;
-yy532:
-       yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy580;
-       goto yy14;
-yy533:
        ++cur;
 #line 104 "../src/parse/lex_conf.re"
        {
@@ -2351,482 +2336,498 @@ yy533:
                opts.set_cGotoThreshold (static_cast<uint32_t> (n));
                return;
        }
-#line 2355 "src/parse/lex_conf.cc"
-yy535:
+#line 2340 "src/parse/lex_conf.cc"
+yy530:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy581;
+       if (yych == 'n') goto yy577;
        goto yy14;
-yy536:
+yy531:
        yyaccept = 17;
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'C') goto yy582;
-yy537:
+       if (yych == 'C') goto yy578;
+       if (yych == 'T') goto yy579;
+yy532:
 #line 122 "../src/parse/lex_conf.re"
        { opts.set_yybackup     (lex_conf_string ()); return; }
-#line 2367 "src/parse/lex_conf.cc"
-yy538:
+#line 2353 "src/parse/lex_conf.cc"
+yy533:
        yych = (unsigned char)*++cur;
-       if (yych == 'P') goto yy583;
+       if (yych == 'P') goto yy580;
        goto yy14;
-yy539:
+yy534:
        yych = (unsigned char)*++cur;
-       if (yych == 'K') goto yy584;
+       if (yych == 'G') goto yy581;
        goto yy14;
-yy540:
+yy535:
+       yych = (unsigned char)*++cur;
+       if (yych == 'K') goto yy583;
+       goto yy14;
+yy536:
        ++cur;
 #line 115 "../src/parse/lex_conf.re"
        { opts.set_yycursor    (lex_conf_string ()); return; }
-#line 2380 "src/parse/lex_conf.cc"
-yy542:
+#line 2370 "src/parse/lex_conf.cc"
+yy538:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy585;
+       if (yych == 'a') goto yy584;
        goto yy14;
-yy543:
+yy539:
+       yych = (unsigned char)*++cur;
+       if (yych == 'e') goto yy585;
+       goto yy14;
+yy540:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy586;
+       if (yych == 'D') goto yy586;
        goto yy14;
-yy544:
+yy541:
        yych = (unsigned char)*++cur;
-       if (yych == 'D') goto yy587;
+       if (yych == 'T') goto yy587;
        goto yy14;
+yy542:
+       yych = (unsigned char)*++cur;
+       if (yych == 'A') goto yy588;
+       goto yy14;
+yy543:
+       ++cur;
+#line 116 "../src/parse/lex_conf.re"
+       { opts.set_yymarker    (lex_conf_string ()); return; }
+#line 2395 "src/parse/lex_conf.cc"
 yy545:
        yych = (unsigned char)*++cur;
-       if (yych == 'T') goto yy588;
+       if (yych == 'E') goto yy589;
        goto yy14;
 yy546:
        yych = (unsigned char)*++cur;
-       if (yych == 'A') goto yy589;
+       if (yych == 'D') goto yy591;
        goto yy14;
 yy547:
-       ++cur;
-#line 116 "../src/parse/lex_conf.re"
-       { opts.set_yymarker    (lex_conf_string ()); return; }
-#line 2405 "src/parse/lex_conf.cc"
+       yych = (unsigned char)*++cur;
+       if (yych == 'T') goto yy592;
+       goto yy14;
+yy548:
+       yych = (unsigned char)*++cur;
+       if (yych == 'r') goto yy593;
+       goto yy14;
 yy549:
        yych = (unsigned char)*++cur;
-       if (yych == 'E') goto yy590;
+       if (yych == 'n') goto yy594;
        goto yy14;
 yy550:
        yych = (unsigned char)*++cur;
-       if (yych == 'D') goto yy592;
+       if (yych == 'r') goto yy595;
        goto yy14;
 yy551:
        yych = (unsigned char)*++cur;
-       if (yych == 'T') goto yy593;
+       if (yych == 'g') goto yy596;
        goto yy14;
 yy552:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy594;
+       if (yych == 'p') goto yy597;
        goto yy14;
 yy553:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy595;
+       if (yych == 'i') goto yy598;
        goto yy14;
 yy554:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy596;
+       if (yych == 's') goto yy599;
        goto yy14;
 yy555:
        yych = (unsigned char)*++cur;
-       if (yych == 'g') goto yy597;
+       if (yych == 'p') goto yy600;
        goto yy14;
 yy556:
        yych = (unsigned char)*++cur;
-       if (yych == 'p') goto yy598;
+       if (yych == 'a') goto yy601;
        goto yy14;
 yy557:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy599;
+       if (yych == 's') goto yy602;
        goto yy14;
 yy558:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy600;
+       if (yych == 'i') goto yy603;
        goto yy14;
 yy559:
        yych = (unsigned char)*++cur;
-       if (yych == 'p') goto yy601;
+       if (yych == 't') goto yy604;
        goto yy14;
 yy560:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy602;
+       if (yych == 'n') goto yy605;
        goto yy14;
 yy561:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy603;
+       if (yych == 'd') goto yy607;
        goto yy14;
 yy562:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy604;
+       if (yych == 's') goto yy608;
        goto yy14;
 yy563:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy605;
+       if (yych == 'e') goto yy609;
        goto yy14;
 yy564:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy606;
+       if (yych == 's') goto yy610;
        goto yy14;
 yy565:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy608;
+       if (yych == 'e') goto yy611;
        goto yy14;
 yy566:
-       yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy609;
-       goto yy14;
-yy567:
-       yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy610;
-       goto yy14;
-yy568:
-       yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy611;
-       goto yy14;
-yy569:
-       yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy612;
-       goto yy14;
-yy570:
        ++cur;
 #line 98 "../src/parse/lex_conf.re"
        { opts.set_bUseStateNext   (lex_conf_bool()); return; }
-#line 2494 "src/parse/lex_conf.cc"
-yy572:
+#line 2484 "src/parse/lex_conf.cc"
+yy568:
        ++cur;
-#line 131 "../src/parse/lex_conf.re"
+#line 132 "../src/parse/lex_conf.re"
        { opts.set_tags_expression(lex_conf_string ()); return; }
-#line 2499 "src/parse/lex_conf.cc"
-yy574:
+#line 2489 "src/parse/lex_conf.cc"
+yy570:
        yych = (unsigned char)*++cur;
-       if (yych == 'p') goto yy613;
+       if (yych == 'p') goto yy612;
        goto yy14;
-yy575:
+yy571:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy614;
+       if (yych == 'l') goto yy613;
        goto yy14;
-yy576:
+yy572:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy615;
+       if (yych == 'l') goto yy614;
        goto yy14;
-yy577:
+yy573:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy616;
+       if (yych == 'e') goto yy615;
        goto yy14;
-yy578:
+yy574:
        ++cur;
-#line 149 "../src/parse/lex_conf.re"
+#line 150 "../src/parse/lex_conf.re"
        { opts.set_yychConversion (lex_conf_bool()); return; }
-#line 2520 "src/parse/lex_conf.cc"
-yy580:
+#line 2510 "src/parse/lex_conf.cc"
+yy576:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy617;
+       if (yych == 'r') goto yy616;
        goto yy14;
-yy581:
+yy577:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy619;
+       if (yych == 'd') goto yy618;
        goto yy14;
-yy582:
+yy578:
        yych = (unsigned char)*++cur;
-       if (yych == 'T') goto yy621;
+       if (yych == 'T') goto yy620;
        goto yy14;
-yy583:
+yy579:
+       yych = (unsigned char)*++cur;
+       if (yych == 'A') goto yy621;
+       goto yy14;
+yy580:
        yych = (unsigned char)*++cur;
        if (yych == 'E') goto yy622;
        goto yy14;
-yy584:
+yy581:
+       ++cur;
+#line 128 "../src/parse/lex_conf.re"
+       { opts.set_yycopytag    (lex_conf_string ()); return; }
+#line 2535 "src/parse/lex_conf.cc"
+yy583:
        yych = (unsigned char)*++cur;
        if (yych == 'E') goto yy624;
        goto yy14;
-yy585:
+yy584:
        yych = (unsigned char)*++cur;
        if (yych == 'k') goto yy625;
        goto yy14;
-yy586:
+yy585:
        yych = (unsigned char)*++cur;
        if (yych == 'n') goto yy626;
        goto yy14;
-yy587:
+yy586:
        yych = (unsigned char)*++cur;
        if (yych == 'I') goto yy628;
        goto yy14;
-yy588:
+yy587:
        yych = (unsigned char)*++cur;
        if (yych == 'E') goto yy629;
        goto yy14;
-yy589:
+yy588:
        yych = (unsigned char)*++cur;
        if (yych == 'N') goto yy631;
        goto yy14;
-yy590:
+yy589:
        yyaccept = 18;
        yych = (unsigned char)*(ptr = ++cur);
        if (yych == 'C') goto yy633;
-yy591:
-#line 124 "../src/parse/lex_conf.re"
+       if (yych == 'T') goto yy634;
+yy590:
+#line 125 "../src/parse/lex_conf.re"
        { opts.set_yyrestore    (lex_conf_string ()); return; }
 #line 2568 "src/parse/lex_conf.cc"
+yy591:
+       yych = (unsigned char)*++cur;
+       if (yych == 'I') goto yy635;
+       goto yy14;
 yy592:
        yych = (unsigned char)*++cur;
-       if (yych == 'I') goto yy634;
+       if (yych == 'E') goto yy636;
        goto yy14;
 yy593:
        yych = (unsigned char)*++cur;
-       if (yych == 'E') goto yy635;
+       if (yych == 's') goto yy638;
        goto yy14;
 yy594:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy637;
+       if (yych == 's') goto yy639;
        goto yy14;
 yy595:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy638;
+       if (yych == 't') goto yy640;
        goto yy14;
 yy596:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy639;
+       if (yych == 'o') goto yy641;
        goto yy14;
 yy597:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy640;
+       if (yych == 'u') goto yy642;
        goto yy14;
 yy598:
        yych = (unsigned char)*++cur;
-       if (yych == 'u') goto yy641;
+       if (yych == 'z') goto yy643;
        goto yy14;
 yy599:
        yych = (unsigned char)*++cur;
-       if (yych == 'z') goto yy642;
+       if (yych == 's') goto yy644;
        goto yy14;
 yy600:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy643;
+       if (yych == 'o') goto yy646;
        goto yy14;
 yy601:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy645;
+       if (yych == 'x') goto yy93;
        goto yy14;
 yy602:
        yych = (unsigned char)*++cur;
-       if (yych == 'x') goto yy93;
-       goto yy14;
+       goto yy119;
 yy603:
        yych = (unsigned char)*++cur;
-       goto yy119;
+       if (yych == 'n') goto yy647;
+       goto yy14;
 yy604:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy646;
+       if (yych == 'i') goto yy648;
        goto yy14;
 yy605:
-       yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy647;
-       goto yy14;
-yy606:
        ++cur;
 #line 58 "../src/parse/lex_conf.re"
        { opts.set_version(!lex_conf_bool());          return; }
 #line 2628 "src/parse/lex_conf.cc"
+yy607:
+       yych = (unsigned char)*++cur;
+       if (yych == 'i') goto yy649;
+       goto yy14;
 yy608:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy648;
+       if (yych == 't') goto yy650;
        goto yy14;
 yy609:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy649;
+       if (yych == 'r') goto yy651;
        goto yy14;
 yy610:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy650;
-       goto yy14;
+       goto yy125;
 yy611:
        yych = (unsigned char)*++cur;
-       goto yy125;
+       if (yych == 'l') goto yy652;
+       goto yy14;
 yy612:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy651;
+       if (yych == 't') goto yy654;
        goto yy14;
 yy613:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy653;
+       if (yych == 'e') goto yy656;
        goto yy14;
 yy614:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy655;
+       if (yych == 'e') goto yy658;
        goto yy14;
 yy615:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy657;
+       if (yych == 't') goto yy660;
        goto yy14;
 yy616:
-       yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy659;
-       goto yy14;
-yy617:
        ++cur;
-#line 155 "../src/parse/lex_conf.re"
+#line 156 "../src/parse/lex_conf.re"
        { opts.set_fill_arg_use (lex_conf_bool()); return; }
 #line 2668 "src/parse/lex_conf.cc"
-yy619:
+yy618:
        ++cur;
 #line 85 "../src/parse/lex_conf.re"
        { opts.set_condDividerParam (lex_conf_string ()); return; }
 #line 2673 "src/parse/lex_conf.cc"
+yy620:
+       yych = (unsigned char)*++cur;
+       if (yych == 'X') goto yy662;
+       goto yy14;
 yy621:
        yych = (unsigned char)*++cur;
-       if (yych == 'X') goto yy661;
+       if (yych == 'G') goto yy664;
        goto yy14;
 yy622:
        ++cur;
 #line 76 "../src/parse/lex_conf.re"
        { opts.set_yycondtype       (lex_conf_string ()); return; }
-#line 2682 "src/parse/lex_conf.cc"
+#line 2686 "src/parse/lex_conf.cc"
 yy624:
        yych = (unsigned char)*++cur;
-       if (yych == 'R') goto yy663;
+       if (yych == 'R') goto yy666;
        goto yy14;
 yy625:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy665;
+       if (yych == 'e') goto yy668;
        goto yy14;
 yy626:
        ++cur;
-#line 154 "../src/parse/lex_conf.re"
+#line 155 "../src/parse/lex_conf.re"
        { opts.set_fill_arg     (lex_conf_string ()); return; }
-#line 2695 "src/parse/lex_conf.cc"
+#line 2699 "src/parse/lex_conf.cc"
 yy628:
        yych = (unsigned char)*++cur;
-       if (yych == 'T') goto yy666;
+       if (yych == 'T') goto yy669;
        goto yy14;
 yy629:
        yyaccept = 19;
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == ':') goto yy667;
+       if (yych == ':') goto yy670;
 yy630:
 #line 90 "../src/parse/lex_conf.re"
        { opts.set_state_get       (lex_conf_string ()); return; }
-#line 2707 "src/parse/lex_conf.cc"
+#line 2711 "src/parse/lex_conf.cc"
 yy631:
        ++cur;
-#line 126 "../src/parse/lex_conf.re"
+#line 129 "../src/parse/lex_conf.re"
        { opts.set_yylessthan   (lex_conf_string ()); return; }
-#line 2712 "src/parse/lex_conf.cc"
+#line 2716 "src/parse/lex_conf.cc"
 yy633:
        yych = (unsigned char)*++cur;
-       if (yych == 'T') goto yy668;
+       if (yych == 'T') goto yy671;
        goto yy14;
 yy634:
        yych = (unsigned char)*++cur;
-       if (yych == 'T') goto yy669;
+       if (yych == 'A') goto yy672;
        goto yy14;
 yy635:
+       yych = (unsigned char)*++cur;
+       if (yych == 'T') goto yy673;
+       goto yy14;
+yy636:
        yyaccept = 20;
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == ':') goto yy670;
-       if (yych == '@') goto yy671;
-yy636:
+       if (yych == ':') goto yy674;
+       if (yych == '@') goto yy675;
+yy637:
 #line 92 "../src/parse/lex_conf.re"
        { opts.set_state_set       (lex_conf_string ()); return; }
-#line 2729 "src/parse/lex_conf.cc"
-yy637:
-       yych = (unsigned char)*++cur;
-       goto yy100;
+#line 2737 "src/parse/lex_conf.cc"
 yy638:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy672;
-       goto yy14;
+       goto yy100;
 yy639:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy673;
+       if (yych == 'i') goto yy676;
        goto yy14;
 yy640:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy674;
+       if (yych == 'e') goto yy677;
        goto yy14;
 yy641:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy675;
+       if (yych == 't') goto yy678;
        goto yy14;
 yy642:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy676;
+       if (yych == 't') goto yy679;
        goto yy14;
 yy643:
+       yych = (unsigned char)*++cur;
+       if (yych == 'a') goto yy680;
+       goto yy14;
+yy644:
        ++cur;
 #line 73 "../src/parse/lex_conf.re"
        { lex_conf_empty_class();      return; }
-#line 2757 "src/parse/lex_conf.cc"
-yy645:
-       yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy677;
-       goto yy14;
+#line 2765 "src/parse/lex_conf.cc"
 yy646:
        yych = (unsigned char)*++cur;
-       if (yych == 'f') goto yy678;
+       if (yych == 'l') goto yy681;
        goto yy14;
 yy647:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy679;
+       if (yych == 'f') goto yy682;
        goto yy14;
 yy648:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy680;
+       if (yych == 'o') goto yy683;
        goto yy14;
 yy649:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy681;
+       if (yych == 't') goto yy684;
        goto yy14;
 yy650:
        yych = (unsigned char)*++cur;
-       goto yy121;
+       if (yych == 'a') goto yy685;
+       goto yy14;
 yy651:
+       yych = (unsigned char)*++cur;
+       goto yy121;
+yy652:
        ++cur;
 #line 95 "../src/parse/lex_conf.re"
        { opts.set_yyfilllabel     (lex_conf_string ()); return; }
-#line 2785 "src/parse/lex_conf.cc"
-yy653:
+#line 2793 "src/parse/lex_conf.cc"
+yy654:
        ++cur;
 #line 99 "../src/parse/lex_conf.re"
        { opts.set_yyaccept        (lex_conf_string ()); return; }
-#line 2790 "src/parse/lex_conf.cc"
-yy655:
+#line 2798 "src/parse/lex_conf.cc"
+yy656:
        ++cur;
 #line 88 "../src/parse/lex_conf.re"
        { opts.set_yyctable         (lex_conf_string ()); return; }
-#line 2795 "src/parse/lex_conf.cc"
-yy657:
+#line 2803 "src/parse/lex_conf.cc"
+yy658:
        ++cur;
-#line 166 "../src/parse/lex_conf.re"
+#line 167 "../src/parse/lex_conf.re"
        { lex_conf_string (); return; }
-#line 2800 "src/parse/lex_conf.cc"
-yy659:
+#line 2808 "src/parse/lex_conf.cc"
+yy660:
        ++cur;
 #line 113 "../src/parse/lex_conf.re"
        { opts.set_yytarget (lex_conf_string ()); return; }
-#line 2805 "src/parse/lex_conf.cc"
-yy661:
+#line 2813 "src/parse/lex_conf.cc"
+yy662:
        ++cur;
 #line 123 "../src/parse/lex_conf.re"
        { opts.set_yybackupctx  (lex_conf_string ()); return; }
-#line 2810 "src/parse/lex_conf.cc"
-yy663:
+#line 2818 "src/parse/lex_conf.cc"
+yy664:
+       ++cur;
+#line 124 "../src/parse/lex_conf.re"
+       { opts.set_yybackuptag  (lex_conf_string ()); return; }
+#line 2823 "src/parse/lex_conf.cc"
+yy666:
        ++cur;
 #line 117 "../src/parse/lex_conf.re"
        { opts.set_yyctxmarker (lex_conf_string ()); return; }
-#line 2815 "src/parse/lex_conf.cc"
-yy665:
-       yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy682;
-       goto yy14;
-yy666:
-       yych = (unsigned char)*++cur;
-       if (yych == 'I') goto yy684;
-       goto yy14;
-yy667:
-       yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy685;
-       goto yy14;
+#line 2828 "src/parse/lex_conf.cc"
 yy668:
        yych = (unsigned char)*++cur;
-       if (yych == 'X') goto yy686;
+       if (yych == 'd') goto yy686;
        goto yy14;
 yy669:
        yych = (unsigned char)*++cur;
@@ -2838,332 +2839,353 @@ yy670:
        goto yy14;
 yy671:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy690;
+       if (yych == 'X') goto yy690;
        goto yy14;
 yy672:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy691;
+       if (yych == 'G') goto yy692;
        goto yy14;
 yy673:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy692;
+       if (yych == 'I') goto yy694;
        goto yy14;
 yy674:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy694;
+       if (yych == 'n') goto yy695;
        goto yy14;
 yy675:
        yych = (unsigned char)*++cur;
-       goto yy104;
+       if (yych == 's') goto yy696;
+       goto yy14;
 yy676:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy695;
+       if (yych == 't') goto yy697;
        goto yy14;
 yy677:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy696;
+       if (yych == 'd') goto yy698;
        goto yy14;
 yy678:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy697;
+       if (yych == 'o') goto yy700;
        goto yy14;
 yy679:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy698;
-       goto yy14;
+       goto yy104;
 yy680:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy699;
+       if (yych == 't') goto yy701;
        goto yy14;
 yy681:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy700;
+       if (yych == 'i') goto yy702;
        goto yy14;
 yy682:
-       ++cur;
-#line 156 "../src/parse/lex_conf.re"
-       { opts.set_fill_naked   (lex_conf_bool()); return; }
-#line 2887 "src/parse/lex_conf.cc"
+       yych = (unsigned char)*++cur;
+       if (yych == 'o') goto yy703;
+       goto yy14;
+yy683:
+       yych = (unsigned char)*++cur;
+       if (yych == 'n') goto yy704;
+       goto yy14;
 yy684:
        yych = (unsigned char)*++cur;
-       if (yych == 'O') goto yy701;
+       if (yych == 'i') goto yy705;
        goto yy14;
 yy685:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy702;
+       if (yych == 't') goto yy706;
        goto yy14;
 yy686:
        ++cur;
-#line 125 "../src/parse/lex_conf.re"
-       { opts.set_yyrestorectx (lex_conf_string ()); return; }
-#line 2900 "src/parse/lex_conf.cc"
+#line 157 "../src/parse/lex_conf.re"
+       { opts.set_fill_naked   (lex_conf_bool()); return; }
+#line 2904 "src/parse/lex_conf.cc"
 yy688:
        yych = (unsigned char)*++cur;
-       if (yych == 'O') goto yy703;
+       if (yych == 'O') goto yy707;
        goto yy14;
 yy689:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy704;
+       if (yych == 'a') goto yy708;
        goto yy14;
 yy690:
-       yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy705;
-       goto yy14;
-yy691:
-       yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy706;
-       goto yy14;
+       ++cur;
+#line 126 "../src/parse/lex_conf.re"
+       { opts.set_yyrestorectx (lex_conf_string ()); return; }
+#line 2917 "src/parse/lex_conf.cc"
 yy692:
        ++cur;
-#line 60 "../src/parse/lex_conf.re"
-       { opts.set_bCaseInverted(lex_conf_bool());     return; }
-#line 2921 "src/parse/lex_conf.cc"
+#line 127 "../src/parse/lex_conf.re"
+       { opts.set_yyrestoretag (lex_conf_string ()); return; }
+#line 2922 "src/parse/lex_conf.cc"
 yy694:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy109;
+       if (yych == 'O') goto yy709;
        goto yy14;
 yy695:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy707;
+       if (yych == 'a') goto yy710;
        goto yy14;
 yy696:
        yych = (unsigned char)*++cur;
-       if (yych == 'c') goto yy708;
+       if (yych == 't') goto yy711;
        goto yy14;
 yy697:
        yych = (unsigned char)*++cur;
-       goto yy112;
-yy698:
-       yych = (unsigned char)*++cur;
-       if (yych == '-') goto yy709;
-       goto yy14;
-yy699:
-       yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy710;
+       if (yych == 'i') goto yy712;
        goto yy14;
+yy698:
+       ++cur;
+#line 60 "../src/parse/lex_conf.re"
+       { opts.set_bCaseInverted(lex_conf_bool());     return; }
+#line 2943 "src/parse/lex_conf.cc"
 yy700:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy711;
+       if (yych == 's') goto yy109;
        goto yy14;
 yy701:
        yych = (unsigned char)*++cur;
-       if (yych == 'N') goto yy712;
+       if (yych == 'i') goto yy713;
        goto yy14;
 yy702:
        yych = (unsigned char)*++cur;
-       if (yych == 'k') goto yy714;
+       if (yych == 'c') goto yy714;
        goto yy14;
 yy703:
        yych = (unsigned char)*++cur;
-       if (yych == 'N') goto yy715;
-       goto yy14;
+       goto yy112;
 yy704:
        yych = (unsigned char)*++cur;
-       if (yych == 'k') goto yy717;
+       if (yych == '-') goto yy715;
        goto yy14;
 yy705:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy718;
+       if (yych == 'o') goto yy716;
        goto yy14;
 yy706:
        yych = (unsigned char)*++cur;
-       if (yych == 'v') goto yy719;
+       if (yych == 'e') goto yy717;
        goto yy14;
 yy707:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy720;
+       if (yych == 'N') goto yy718;
        goto yy14;
 yy708:
        yych = (unsigned char)*++cur;
-       if (yych == 'y') goto yy721;
+       if (yych == 'k') goto yy720;
        goto yy14;
 yy709:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy723;
+       if (yych == 'N') goto yy721;
        goto yy14;
 yy710:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy724;
+       if (yych == 'k') goto yy723;
        goto yy14;
 yy711:
        yych = (unsigned char)*++cur;
-       goto yy108;
+       if (yych == 'a') goto yy724;
+       goto yy14;
 yy712:
+       yych = (unsigned char)*++cur;
+       if (yych == 'v') goto yy725;
+       goto yy14;
+yy713:
+       yych = (unsigned char)*++cur;
+       if (yych == 'o') goto yy726;
+       goto yy14;
+yy714:
+       yych = (unsigned char)*++cur;
+       if (yych == 'y') goto yy727;
+       goto yy14;
+yy715:
+       yych = (unsigned char)*++cur;
+       if (yych == 'd') goto yy729;
+       goto yy14;
+yy716:
+       yych = (unsigned char)*++cur;
+       if (yych == 'n') goto yy730;
+       goto yy14;
+yy717:
+       yych = (unsigned char)*++cur;
+       goto yy108;
+yy718:
        yyaccept = 21;
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == ':') goto yy725;
-yy713:
+       if (yych == ':') goto yy731;
+yy719:
 #line 77 "../src/parse/lex_conf.re"
        { opts.set_cond_get         (lex_conf_string ()); return; }
-#line 2999 "src/parse/lex_conf.cc"
-yy714:
+#line 3021 "src/parse/lex_conf.cc"
+yy720:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy726;
+       if (yych == 'e') goto yy732;
        goto yy14;
-yy715:
+yy721:
        yyaccept = 22;
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == ':') goto yy727;
-       if (yych == '@') goto yy728;
-yy716:
+       if (yych == ':') goto yy733;
+       if (yych == '@') goto yy734;
+yy722:
 #line 79 "../src/parse/lex_conf.re"
        { opts.set_cond_set         (lex_conf_string ()); return; }
-#line 3012 "src/parse/lex_conf.cc"
-yy717:
+#line 3034 "src/parse/lex_conf.cc"
+yy723:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy729;
+       if (yych == 'e') goto yy735;
        goto yy14;
-yy718:
+yy724:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy730;
+       if (yych == 't') goto yy736;
        goto yy14;
-yy719:
+yy725:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy731;
+       if (yych == 'e') goto yy737;
        goto yy14;
-yy720:
+yy726:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy733;
+       if (yych == 'n') goto yy739;
        goto yy14;
-yy721:
+yy727:
        ++cur;
 #line 71 "../src/parse/lex_conf.re"
        { lex_conf_encoding_policy();  return; }
-#line 3033 "src/parse/lex_conf.cc"
-yy723:
+#line 3055 "src/parse/lex_conf.cc"
+yy729:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy735;
+       if (yych == 'a') goto yy741;
        goto yy14;
-yy724:
+yy730:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy736;
+       if (yych == 's') goto yy742;
        goto yy14;
-yy725:
+yy731:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy737;
+       if (yych == 'n') goto yy743;
        goto yy14;
-yy726:
+yy732:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy738;
+       if (yych == 'd') goto yy744;
        goto yy14;
-yy727:
+yy733:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy740;
+       if (yych == 'n') goto yy746;
        goto yy14;
-yy728:
+yy734:
        yych = (unsigned char)*++cur;
-       if (yych == 'c') goto yy741;
+       if (yych == 'c') goto yy747;
        goto yy14;
-yy729:
+yy735:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy742;
+       if (yych == 'd') goto yy748;
        goto yy14;
-yy730:
+yy736:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy744;
+       if (yych == 'e') goto yy750;
        goto yy14;
-yy731:
+yy737:
        ++cur;
 #line 59 "../src/parse/lex_conf.re"
        { opts.set_bCaseInsensitive(lex_conf_bool());  return; }
-#line 3070 "src/parse/lex_conf.cc"
-yy733:
+#line 3092 "src/parse/lex_conf.cc"
+yy739:
        ++cur;
 #line 74 "../src/parse/lex_conf.re"
        { lex_conf_dfa_minimization(); return; }
-#line 3075 "src/parse/lex_conf.cc"
-yy735:
+#line 3097 "src/parse/lex_conf.cc"
+yy741:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy746;
+       if (yych == 't') goto yy752;
        goto yy14;
-yy736:
+yy742:
        yych = (unsigned char)*++cur;
        goto yy102;
-yy737:
+yy743:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy747;
+       if (yych == 'a') goto yy753;
        goto yy14;
-yy738:
+yy744:
        ++cur;
 #line 91 "../src/parse/lex_conf.re"
        { opts.set_state_get_naked (lex_conf_bool()); return; }
-#line 3091 "src/parse/lex_conf.cc"
-yy740:
+#line 3113 "src/parse/lex_conf.cc"
+yy746:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy748;
+       if (yych == 'a') goto yy754;
        goto yy14;
-yy741:
+yy747:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy749;
+       if (yych == 'o') goto yy755;
        goto yy14;
-yy742:
+yy748:
        ++cur;
 #line 93 "../src/parse/lex_conf.re"
        { opts.set_state_set_naked (lex_conf_bool()); return; }
-#line 3104 "src/parse/lex_conf.cc"
-yy744:
+#line 3126 "src/parse/lex_conf.cc"
+yy750:
        ++cur;
 #line 94 "../src/parse/lex_conf.re"
        { opts.set_state_set_arg   (lex_conf_string ()); return; }
-#line 3109 "src/parse/lex_conf.cc"
-yy746:
+#line 3131 "src/parse/lex_conf.cc"
+yy752:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy750;
+       if (yych == 'e') goto yy756;
        goto yy14;
-yy747:
+yy753:
        yych = (unsigned char)*++cur;
-       if (yych == 'k') goto yy752;
+       if (yych == 'k') goto yy758;
        goto yy14;
-yy748:
+yy754:
        yych = (unsigned char)*++cur;
-       if (yych == 'k') goto yy753;
+       if (yych == 'k') goto yy759;
        goto yy14;
-yy749:
+yy755:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy754;
+       if (yych == 'n') goto yy760;
        goto yy14;
-yy750:
+yy756:
        ++cur;
 #line 57 "../src/parse/lex_conf.re"
        { opts.set_bNoGenerationDate(lex_conf_bool()); return; }
-#line 3130 "src/parse/lex_conf.cc"
-yy752:
+#line 3152 "src/parse/lex_conf.cc"
+yy758:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy755;
+       if (yych == 'e') goto yy761;
        goto yy14;
-yy753:
+yy759:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy756;
+       if (yych == 'e') goto yy762;
        goto yy14;
-yy754:
+yy760:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy757;
+       if (yych == 'd') goto yy763;
        goto yy14;
-yy755:
+yy761:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy759;
+       if (yych == 'd') goto yy765;
        goto yy14;
-yy756:
+yy762:
        yych = (unsigned char)*++cur;
-       if (yych == 'd') goto yy761;
+       if (yych == 'd') goto yy767;
        goto yy14;
-yy757:
+yy763:
        ++cur;
 #line 80 "../src/parse/lex_conf.re"
        { opts.set_cond_set_arg     (lex_conf_string ()); return; }
-#line 3155 "src/parse/lex_conf.cc"
-yy759:
+#line 3177 "src/parse/lex_conf.cc"
+yy765:
        ++cur;
 #line 78 "../src/parse/lex_conf.re"
        { opts.set_cond_get_naked   (lex_conf_bool()); return; }
-#line 3160 "src/parse/lex_conf.cc"
-yy761:
+#line 3182 "src/parse/lex_conf.cc"
+yy767:
        ++cur;
 #line 81 "../src/parse/lex_conf.re"
        { opts.set_cond_set_naked   (lex_conf_bool()); return; }
-#line 3165 "src/parse/lex_conf.cc"
+#line 3187 "src/parse/lex_conf.cc"
 }
-#line 167 "../src/parse/lex_conf.re"
+#line 168 "../src/parse/lex_conf.re"
 
 }
 
@@ -3171,102 +3193,102 @@ void Scanner::lex_conf_encoding_policy()
 {
        lex_conf_assign ();
 
-#line 3175 "src/parse/lex_conf.cc"
+#line 3197 "src/parse/lex_conf.cc"
 {
        unsigned char yych;
        if ((lim - cur) < 10) fill(10);
        yych = (unsigned char)*cur;
        if (yych <= 'h') {
-               if (yych == 'f') goto yy767;
+               if (yych == 'f') goto yy773;
        } else {
-               if (yych <= 'i') goto yy768;
-               if (yych == 's') goto yy769;
+               if (yych <= 'i') goto yy774;
+               if (yych == 's') goto yy775;
        }
        ++cur;
-yy766:
-#line 174 "../src/parse/lex_conf.re"
+yy772:
+#line 175 "../src/parse/lex_conf.re"
        { fatal("bad configuration value"
                " (expected: 'ignore', 'substitute', 'fail')"); }
-#line 3191 "src/parse/lex_conf.cc"
-yy767:
-       yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'a') goto yy770;
-       goto yy766;
-yy768:
-       yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'g') goto yy772;
-       goto yy766;
-yy769:
-       yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'u') goto yy773;
-       goto yy766;
-yy770:
-       yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy774;
-yy771:
-       cur = ptr;
-       goto yy766;
-yy772:
-       yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy775;
-       goto yy771;
+#line 3213 "src/parse/lex_conf.cc"
 yy773:
-       yych = (unsigned char)*++cur;
-       if (yych == 'b') goto yy776;
-       goto yy771;
+       yych = (unsigned char)*(ptr = ++cur);
+       if (yych == 'a') goto yy776;
+       goto yy772;
 yy774:
-       yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy777;
-       goto yy771;
+       yych = (unsigned char)*(ptr = ++cur);
+       if (yych == 'g') goto yy778;
+       goto yy772;
 yy775:
-       yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy779;
-       goto yy771;
+       yych = (unsigned char)*(ptr = ++cur);
+       if (yych == 'u') goto yy779;
+       goto yy772;
 yy776:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy780;
-       goto yy771;
+       if (yych == 'i') goto yy780;
 yy777:
-       ++cur;
-#line 178 "../src/parse/lex_conf.re"
-       { opts.set_encoding_policy(Enc::POLICY_FAIL);       goto end; }
-#line 3234 "src/parse/lex_conf.cc"
+       cur = ptr;
+       goto yy772;
+yy778:
+       yych = (unsigned char)*++cur;
+       if (yych == 'n') goto yy781;
+       goto yy777;
 yy779:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy781;
-       goto yy771;
+       if (yych == 'b') goto yy782;
+       goto yy777;
 yy780:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy782;
-       goto yy771;
+       if (yych == 'l') goto yy783;
+       goto yy777;
 yy781:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy783;
-       goto yy771;
+       if (yych == 'o') goto yy785;
+       goto yy777;
 yy782:
        yych = (unsigned char)*++cur;
-       if (yych == 'i') goto yy785;
-       goto yy771;
+       if (yych == 's') goto yy786;
+       goto yy777;
 yy783:
        ++cur;
-#line 176 "../src/parse/lex_conf.re"
-       { opts.set_encoding_policy(Enc::POLICY_IGNORE);     goto end; }
-#line 3255 "src/parse/lex_conf.cc"
+#line 179 "../src/parse/lex_conf.re"
+       { opts.set_encoding_policy(Enc::POLICY_FAIL);       goto end; }
+#line 3256 "src/parse/lex_conf.cc"
 yy785:
        yych = (unsigned char)*++cur;
-       if (yych != 't') goto yy771;
+       if (yych == 'r') goto yy787;
+       goto yy777;
+yy786:
        yych = (unsigned char)*++cur;
-       if (yych != 'u') goto yy771;
+       if (yych == 't') goto yy788;
+       goto yy777;
+yy787:
        yych = (unsigned char)*++cur;
-       if (yych != 't') goto yy771;
+       if (yych == 'e') goto yy789;
+       goto yy777;
+yy788:
        yych = (unsigned char)*++cur;
-       if (yych != 'e') goto yy771;
+       if (yych == 'i') goto yy791;
+       goto yy777;
+yy789:
        ++cur;
 #line 177 "../src/parse/lex_conf.re"
+       { opts.set_encoding_policy(Enc::POLICY_IGNORE);     goto end; }
+#line 3277 "src/parse/lex_conf.cc"
+yy791:
+       yych = (unsigned char)*++cur;
+       if (yych != 't') goto yy777;
+       yych = (unsigned char)*++cur;
+       if (yych != 'u') goto yy777;
+       yych = (unsigned char)*++cur;
+       if (yych != 't') goto yy777;
+       yych = (unsigned char)*++cur;
+       if (yych != 'e') goto yy777;
+       ++cur;
+#line 178 "../src/parse/lex_conf.re"
        { opts.set_encoding_policy(Enc::POLICY_SUBSTITUTE); goto end; }
-#line 3268 "src/parse/lex_conf.cc"
+#line 3290 "src/parse/lex_conf.cc"
 }
-#line 179 "../src/parse/lex_conf.re"
+#line 180 "../src/parse/lex_conf.re"
 
 end:
        lex_conf_semicolon();
@@ -3276,77 +3298,77 @@ void Scanner::lex_conf_input()
 {
        lex_conf_assign ();
 
-#line 3280 "src/parse/lex_conf.cc"
+#line 3302 "src/parse/lex_conf.cc"
 {
        unsigned char yych;
        if ((lim - cur) < 7) fill(7);
        yych = (unsigned char)*cur;
-       if (yych <= 'b') goto yy793;
-       if (yych <= 'c') goto yy795;
-       if (yych <= 'd') goto yy796;
-yy793:
+       if (yych <= 'b') goto yy799;
+       if (yych <= 'c') goto yy801;
+       if (yych <= 'd') goto yy802;
+yy799:
        ++cur;
-yy794:
-#line 188 "../src/parse/lex_conf.re"
+yy800:
+#line 189 "../src/parse/lex_conf.re"
        { fatal("bad configuration value"
                " (expected: 'default', 'custom')"); }
-#line 3294 "src/parse/lex_conf.cc"
-yy795:
+#line 3316 "src/parse/lex_conf.cc"
+yy801:
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'u') goto yy797;
-       goto yy794;
-yy796:
+       if (yych == 'u') goto yy803;
+       goto yy800;
+yy802:
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'e') goto yy799;
-       goto yy794;
-yy797:
+       if (yych == 'e') goto yy805;
+       goto yy800;
+yy803:
        yych = (unsigned char)*++cur;
-       if (yych == 's') goto yy800;
-yy798:
+       if (yych == 's') goto yy806;
+yy804:
        cur = ptr;
-       goto yy794;
-yy799:
+       goto yy800;
+yy805:
        yych = (unsigned char)*++cur;
-       if (yych == 'f') goto yy801;
-       goto yy798;
-yy800:
+       if (yych == 'f') goto yy807;
+       goto yy804;
+yy806:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy802;
-       goto yy798;
-yy801:
+       if (yych == 't') goto yy808;
+       goto yy804;
+yy807:
        yych = (unsigned char)*++cur;
-       if (yych == 'a') goto yy803;
-       goto yy798;
-yy802:
+       if (yych == 'a') goto yy809;
+       goto yy804;
+yy808:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy804;
-       goto yy798;
-yy803:
+       if (yych == 'o') goto yy810;
+       goto yy804;
+yy809:
        yych = (unsigned char)*++cur;
-       if (yych == 'u') goto yy805;
-       goto yy798;
-yy804:
+       if (yych == 'u') goto yy811;
+       goto yy804;
+yy810:
        yych = (unsigned char)*++cur;
-       if (yych == 'm') goto yy806;
-       goto yy798;
-yy805:
+       if (yych == 'm') goto yy812;
+       goto yy804;
+yy811:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy808;
-       goto yy798;
-yy806:
+       if (yych == 'l') goto yy814;
+       goto yy804;
+yy812:
        ++cur;
-#line 191 "../src/parse/lex_conf.re"
+#line 192 "../src/parse/lex_conf.re"
        { opts.set_input_api(InputAPI::CUSTOM);  goto end; }
-#line 3341 "src/parse/lex_conf.cc"
-yy808:
+#line 3363 "src/parse/lex_conf.cc"
+yy814:
        yych = (unsigned char)*++cur;
-       if (yych != 't') goto yy798;
+       if (yych != 't') goto yy804;
        ++cur;
-#line 190 "../src/parse/lex_conf.re"
+#line 191 "../src/parse/lex_conf.re"
        { opts.set_input_api(InputAPI::DEFAULT); goto end; }
-#line 3348 "src/parse/lex_conf.cc"
+#line 3370 "src/parse/lex_conf.cc"
 }
-#line 192 "../src/parse/lex_conf.re"
+#line 193 "../src/parse/lex_conf.re"
 
 end:
        lex_conf_semicolon();
@@ -3356,105 +3378,105 @@ void Scanner::lex_conf_empty_class()
 {
        lex_conf_assign ();
 
-#line 3360 "src/parse/lex_conf.cc"
+#line 3382 "src/parse/lex_conf.cc"
 {
        unsigned char yych;
        if ((lim - cur) < 11) fill(11);
        yych = (unsigned char)*cur;
-       if (yych == 'e') goto yy815;
-       if (yych == 'm') goto yy816;
+       if (yych == 'e') goto yy821;
+       if (yych == 'm') goto yy822;
        ++cur;
-yy814:
-#line 201 "../src/parse/lex_conf.re"
+yy820:
+#line 202 "../src/parse/lex_conf.re"
        { fatal("bad configuration value"
                " (expected: 'match-empty', 'match-none', 'error')"); }
-#line 3372 "src/parse/lex_conf.cc"
-yy815:
+#line 3394 "src/parse/lex_conf.cc"
+yy821:
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'r') goto yy817;
-       goto yy814;
-yy816:
+       if (yych == 'r') goto yy823;
+       goto yy820;
+yy822:
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'a') goto yy819;
-       goto yy814;
-yy817:
+       if (yych == 'a') goto yy825;
+       goto yy820;
+yy823:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy820;
-yy818:
+       if (yych == 'r') goto yy826;
+yy824:
        cur = ptr;
-       goto yy814;
-yy819:
+       goto yy820;
+yy825:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy821;
-       goto yy818;
-yy820:
+       if (yych == 't') goto yy827;
+       goto yy824;
+yy826:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy822;
-       goto yy818;
-yy821:
+       if (yych == 'o') goto yy828;
+       goto yy824;
+yy827:
        yych = (unsigned char)*++cur;
-       if (yych == 'c') goto yy823;
-       goto yy818;
-yy822:
+       if (yych == 'c') goto yy829;
+       goto yy824;
+yy828:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy824;
-       goto yy818;
-yy823:
+       if (yych == 'r') goto yy830;
+       goto yy824;
+yy829:
        yych = (unsigned char)*++cur;
-       if (yych == 'h') goto yy826;
-       goto yy818;
-yy824:
+       if (yych == 'h') goto yy832;
+       goto yy824;
+yy830:
        ++cur;
-#line 205 "../src/parse/lex_conf.re"
+#line 206 "../src/parse/lex_conf.re"
        { opts.set_empty_class_policy(EMPTY_CLASS_ERROR);       goto end; }
-#line 3411 "src/parse/lex_conf.cc"
-yy826:
+#line 3433 "src/parse/lex_conf.cc"
+yy832:
        yych = (unsigned char)*++cur;
-       if (yych != '-') goto yy818;
+       if (yych != '-') goto yy824;
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy828;
-       if (yych == 'n') goto yy829;
-       goto yy818;
-yy828:
+       if (yych == 'e') goto yy834;
+       if (yych == 'n') goto yy835;
+       goto yy824;
+yy834:
        yych = (unsigned char)*++cur;
-       if (yych == 'm') goto yy830;
-       goto yy818;
-yy829:
+       if (yych == 'm') goto yy836;
+       goto yy824;
+yy835:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy831;
-       goto yy818;
-yy830:
+       if (yych == 'o') goto yy837;
+       goto yy824;
+yy836:
        yych = (unsigned char)*++cur;
-       if (yych == 'p') goto yy832;
-       goto yy818;
-yy831:
+       if (yych == 'p') goto yy838;
+       goto yy824;
+yy837:
        yych = (unsigned char)*++cur;
-       if (yych == 'n') goto yy833;
-       goto yy818;
-yy832:
+       if (yych == 'n') goto yy839;
+       goto yy824;
+yy838:
        yych = (unsigned char)*++cur;
-       if (yych == 't') goto yy834;
-       goto yy818;
-yy833:
+       if (yych == 't') goto yy840;
+       goto yy824;
+yy839:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy835;
-       goto yy818;
-yy834:
+       if (yych == 'e') goto yy841;
+       goto yy824;
+yy840:
        yych = (unsigned char)*++cur;
-       if (yych == 'y') goto yy837;
-       goto yy818;
-yy835:
+       if (yych == 'y') goto yy843;
+       goto yy824;
+yy841:
        ++cur;
-#line 204 "../src/parse/lex_conf.re"
+#line 205 "../src/parse/lex_conf.re"
        { opts.set_empty_class_policy(EMPTY_CLASS_MATCH_NONE);  goto end; }
-#line 3451 "src/parse/lex_conf.cc"
-yy837:
+#line 3473 "src/parse/lex_conf.cc"
+yy843:
        ++cur;
-#line 203 "../src/parse/lex_conf.re"
+#line 204 "../src/parse/lex_conf.re"
        { opts.set_empty_class_policy(EMPTY_CLASS_MATCH_EMPTY); goto end; }
-#line 3456 "src/parse/lex_conf.cc"
+#line 3478 "src/parse/lex_conf.cc"
 }
-#line 206 "../src/parse/lex_conf.re"
+#line 207 "../src/parse/lex_conf.re"
 
 end:
        lex_conf_semicolon();
@@ -3464,65 +3486,65 @@ void Scanner::lex_conf_dfa_minimization()
 {
        lex_conf_assign ();
 
-#line 3468 "src/parse/lex_conf.cc"
+#line 3490 "src/parse/lex_conf.cc"
 {
        unsigned char yych;
        if ((lim - cur) < 5) fill(5);
        yych = (unsigned char)*cur;
-       if (yych == 'm') goto yy843;
-       if (yych == 't') goto yy844;
+       if (yych == 'm') goto yy849;
+       if (yych == 't') goto yy850;
        ++cur;
-yy842:
-#line 215 "../src/parse/lex_conf.re"
+yy848:
+#line 216 "../src/parse/lex_conf.re"
        { fatal("bad configuration value"
                " (expected: 'table', 'moore')"); }
-#line 3480 "src/parse/lex_conf.cc"
-yy843:
+#line 3502 "src/parse/lex_conf.cc"
+yy849:
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'o') goto yy845;
-       goto yy842;
-yy844:
+       if (yych == 'o') goto yy851;
+       goto yy848;
+yy850:
        yych = (unsigned char)*(ptr = ++cur);
-       if (yych == 'a') goto yy847;
-       goto yy842;
-yy845:
+       if (yych == 'a') goto yy853;
+       goto yy848;
+yy851:
        yych = (unsigned char)*++cur;
-       if (yych == 'o') goto yy848;
-yy846:
+       if (yych == 'o') goto yy854;
+yy852:
        cur = ptr;
-       goto yy842;
-yy847:
+       goto yy848;
+yy853:
        yych = (unsigned char)*++cur;
-       if (yych == 'b') goto yy849;
-       goto yy846;
-yy848:
+       if (yych == 'b') goto yy855;
+       goto yy852;
+yy854:
        yych = (unsigned char)*++cur;
-       if (yych == 'r') goto yy850;
-       goto yy846;
-yy849:
+       if (yych == 'r') goto yy856;
+       goto yy852;
+yy855:
        yych = (unsigned char)*++cur;
-       if (yych == 'l') goto yy851;
-       goto yy846;
-yy850:
+       if (yych == 'l') goto yy857;
+       goto yy852;
+yy856:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy852;
-       goto yy846;
-yy851:
+       if (yych == 'e') goto yy858;
+       goto yy852;
+yy857:
        yych = (unsigned char)*++cur;
-       if (yych == 'e') goto yy854;
-       goto yy846;
-yy852:
+       if (yych == 'e') goto yy860;
+       goto yy852;
+yy858:
        ++cur;
-#line 218 "../src/parse/lex_conf.re"
+#line 219 "../src/parse/lex_conf.re"
        { opts.set_dfa_minimization(DFA_MINIMIZATION_MOORE); goto end; }
-#line 3519 "src/parse/lex_conf.cc"
-yy854:
+#line 3541 "src/parse/lex_conf.cc"
+yy860:
        ++cur;
-#line 217 "../src/parse/lex_conf.re"
+#line 218 "../src/parse/lex_conf.re"
        { opts.set_dfa_minimization(DFA_MINIMIZATION_TABLE); goto end; }
-#line 3524 "src/parse/lex_conf.cc"
+#line 3546 "src/parse/lex_conf.cc"
 }
-#line 219 "../src/parse/lex_conf.re"
+#line 220 "../src/parse/lex_conf.re"
 
 end:
        lex_conf_semicolon();
@@ -3543,7 +3565,7 @@ void Scanner::lex_conf_enc(Enc::type_t enc)
 void Scanner::lex_conf_assign ()
 {
 
-#line 3547 "src/parse/lex_conf.cc"
+#line 3569 "src/parse/lex_conf.cc"
 {
        unsigned char yych;
        static const unsigned char yybm[] = {
@@ -3583,56 +3605,56 @@ void Scanner::lex_conf_assign ()
        if ((lim - cur) < 2) fill(2);
        yych = (unsigned char)*cur;
        if (yych <= 0x1F) {
-               if (yych == '\t') goto yy860;
+               if (yych == '\t') goto yy866;
        } else {
-               if (yych <= ' ') goto yy860;
-               if (yych == '=') goto yy861;
+               if (yych <= ' ') goto yy866;
+               if (yych == '=') goto yy867;
        }
        ++cur;
-yy859:
-#line 239 "../src/parse/lex_conf.re"
+yy865:
+#line 240 "../src/parse/lex_conf.re"
        { fatal ("missing '=' in configuration"); }
-#line 3596 "src/parse/lex_conf.cc"
-yy860:
+#line 3618 "src/parse/lex_conf.cc"
+yy866:
        yych = (unsigned char)*(ptr = ++cur);
        if (yych <= 0x1F) {
-               if (yych == '\t') goto yy864;
-               goto yy859;
+               if (yych == '\t') goto yy870;
+               goto yy865;
        } else {
-               if (yych <= ' ') goto yy864;
-               if (yych != '=') goto yy859;
+               if (yych <= ' ') goto yy870;
+               if (yych != '=') goto yy865;
        }
-yy861:
+yy867:
        ++cur;
        if (lim <= cur) fill(1);
        yych = (unsigned char)*cur;
        if (yybm[0+yych] & 128) {
-               goto yy861;
+               goto yy867;
        }
-#line 240 "../src/parse/lex_conf.re"
+#line 241 "../src/parse/lex_conf.re"
        { return; }
-#line 3615 "src/parse/lex_conf.cc"
-yy864:
+#line 3637 "src/parse/lex_conf.cc"
+yy870:
        ++cur;
        if (lim <= cur) fill(1);
        yych = (unsigned char)*cur;
        if (yych <= 0x1F) {
-               if (yych == '\t') goto yy864;
+               if (yych == '\t') goto yy870;
        } else {
-               if (yych <= ' ') goto yy864;
-               if (yych == '=') goto yy861;
+               if (yych <= ' ') goto yy870;
+               if (yych == '=') goto yy867;
        }
        cur = ptr;
-       goto yy859;
+       goto yy865;
 }
-#line 241 "../src/parse/lex_conf.re"
+#line 242 "../src/parse/lex_conf.re"
 
 }
 
 void Scanner::lex_conf_semicolon ()
 {
 
-#line 3636 "src/parse/lex_conf.cc"
+#line 3658 "src/parse/lex_conf.cc"
 {
        unsigned char yych;
        static const unsigned char yybm[] = {
@@ -3672,39 +3694,39 @@ void Scanner::lex_conf_semicolon ()
        if ((lim - cur) < 2) fill(2);
        yych = (unsigned char)*cur;
        if (yych <= 0x1F) {
-               if (yych == '\t') goto yy871;
+               if (yych == '\t') goto yy877;
        } else {
-               if (yych <= ' ') goto yy871;
-               if (yych == ';') goto yy872;
+               if (yych <= ' ') goto yy877;
+               if (yych == ';') goto yy878;
        }
        ++cur;
-yy870:
-#line 247 "../src/parse/lex_conf.re"
+yy876:
+#line 248 "../src/parse/lex_conf.re"
        { fatal ("missing ending ';' in configuration"); }
-#line 3685 "src/parse/lex_conf.cc"
-yy871:
+#line 3707 "src/parse/lex_conf.cc"
+yy877:
        yych = (unsigned char)*(ptr = ++cur);
        if (yybm[0+yych] & 128) {
-               goto yy874;
+               goto yy880;
        }
-       if (yych != ';') goto yy870;
-yy872:
+       if (yych != ';') goto yy876;
+yy878:
        ++cur;
-#line 248 "../src/parse/lex_conf.re"
+#line 249 "../src/parse/lex_conf.re"
        { return; }
-#line 3696 "src/parse/lex_conf.cc"
-yy874:
+#line 3718 "src/parse/lex_conf.cc"
+yy880:
        ++cur;
        if (lim <= cur) fill(1);
        yych = (unsigned char)*cur;
        if (yybm[0+yych] & 128) {
-               goto yy874;
+               goto yy880;
        }
-       if (yych == ';') goto yy872;
+       if (yych == ';') goto yy878;
        cur = ptr;
-       goto yy870;
+       goto yy876;
 }
-#line 249 "../src/parse/lex_conf.re"
+#line 250 "../src/parse/lex_conf.re"
 
 }
 
@@ -3718,7 +3740,7 @@ int32_t Scanner::lex_conf_number ()
        lex_conf_assign ();
        tok = cur;
 
-#line 3722 "src/parse/lex_conf.cc"
+#line 3744 "src/parse/lex_conf.cc"
 {
        unsigned char yych;
        static const unsigned char yybm[] = {
@@ -3758,21 +3780,21 @@ int32_t Scanner::lex_conf_number ()
        if ((lim - cur) < 2) fill(2);
        yych = (unsigned char)*cur;
        if (yych <= '/') {
-               if (yych == '-') goto yy880;
+               if (yych == '-') goto yy886;
        } else {
-               if (yych <= '0') goto yy881;
-               if (yych <= '9') goto yy883;
+               if (yych <= '0') goto yy887;
+               if (yych <= '9') goto yy889;
        }
-yy879:
-yy880:
+yy885:
+yy886:
        yych = (unsigned char)*++cur;
-       if (yych <= '0') goto yy879;
-       if (yych <= '9') goto yy883;
-       goto yy879;
-yy881:
+       if (yych <= '0') goto yy885;
+       if (yych <= '9') goto yy889;
+       goto yy885;
+yy887:
        ++cur;
-yy882:
-#line 263 "../src/parse/lex_conf.re"
+yy888:
+#line 264 "../src/parse/lex_conf.re"
        {
                int32_t n = 0;
                if (!s_to_i32_unsafe (tok, cur, n))
@@ -3782,17 +3804,17 @@ yy882:
                lex_conf_semicolon ();
                return n;
        }
-#line 3786 "src/parse/lex_conf.cc"
-yy883:
+#line 3808 "src/parse/lex_conf.cc"
+yy889:
        ++cur;
        if (lim <= cur) fill(1);
        yych = (unsigned char)*cur;
        if (yybm[0+yych] & 128) {
-               goto yy883;
+               goto yy889;
        }
-       goto yy882;
+       goto yy888;
 }
-#line 272 "../src/parse/lex_conf.re"
+#line 273 "../src/parse/lex_conf.re"
 
 }
 
@@ -3802,7 +3824,7 @@ std::string Scanner::lex_conf_string ()
        std::string s;
        tok = cur;
 
-#line 3806 "src/parse/lex_conf.cc"
+#line 3828 "src/parse/lex_conf.cc"
 {
        unsigned char yych;
        static const unsigned char yybm[] = {
@@ -3843,38 +3865,38 @@ std::string Scanner::lex_conf_string ()
        yych = (unsigned char)*cur;
        if (yych <= '!') {
                if (yych <= '\n') {
-                       if (yych <= 0x08) goto yy888;
+                       if (yych <= 0x08) goto yy894;
                } else {
-                       if (yych != ' ') goto yy888;
+                       if (yych != ' ') goto yy894;
                }
        } else {
                if (yych <= '\'') {
-                       if (yych <= '"') goto yy891;
-                       if (yych <= '&') goto yy888;
-                       goto yy891;
+                       if (yych <= '"') goto yy897;
+                       if (yych <= '&') goto yy894;
+                       goto yy897;
                } else {
-                       if (yych != ';') goto yy888;
+                       if (yych != ';') goto yy894;
                }
        }
-#line 299 "../src/parse/lex_conf.re"
+#line 300 "../src/parse/lex_conf.re"
        { goto end; }
-#line 3862 "src/parse/lex_conf.cc"
-yy888:
+#line 3884 "src/parse/lex_conf.cc"
+yy894:
        ++cur;
        if (lim <= cur) fill(1);
        yych = (unsigned char)*cur;
        if (yybm[0+yych] & 128) {
-               goto yy888;
+               goto yy894;
        }
-#line 295 "../src/parse/lex_conf.re"
+#line 296 "../src/parse/lex_conf.re"
        {
                s = std::string(tok, tok_len());
                goto end;
        }
-#line 3875 "src/parse/lex_conf.cc"
-yy891:
+#line 3897 "src/parse/lex_conf.cc"
+yy897:
        ++cur;
-#line 281 "../src/parse/lex_conf.re"
+#line 282 "../src/parse/lex_conf.re"
        {
                const char quote = tok[0];
                for (bool end;;) {
@@ -3889,9 +3911,9 @@ yy891:
                        }
                }
        }
-#line 3893 "src/parse/lex_conf.cc"
+#line 3915 "src/parse/lex_conf.cc"
 }
-#line 300 "../src/parse/lex_conf.re"
+#line 301 "../src/parse/lex_conf.re"
 
 end:
        lex_conf_semicolon ();
index bc5dc4be4b21aa222261c2338f059776191178c6..f25ba1c35953148c39966cc202db1ce752e80260 100644 (file)
@@ -32,6 +32,7 @@ static void genYYFill(OutputFile &o, size_t need);
 static void genSetCondition(OutputFile &o, uint32_t ind, const std::string &cond);
 static void genSetState(OutputFile &o, uint32_t ind, uint32_t fillIndex);
 static void gen_goto(code_lines_t &code, bool &readCh, const State *to, const DFA &dfa, const tagcmd_t &tags, bool restore_fallback);
+static void gen_fintags(OutputFile &o, uint32_t ind, const DFA &dfa, const Rule &rule);
 
 void emit_action(OutputFile &o, uint32_t ind, bool &readCh,
        const DFA &dfa, const State *s, const std::set<label_t> &used_labels)
@@ -214,14 +215,8 @@ void emit_rule(OutputFile &o, uint32_t ind, const DFA &dfa, size_t rule_idx)
 {
        const Rule &rule = dfa.rules[rule_idx];
        const RuleInfo *info = rule.info;
-       const std::valarray<Tag> &tags = dfa.tags;
 
-       if (rule.trail != Tag::NONE) {
-               o.wstring(opts->input_api.stmt_restorectx(ind, tags, tags[rule.trail], dfa.basetag));
-       }
-       for (size_t t = rule.ltag; t < rule.htag; ++t) {
-               o.wstring(opts->input_api.stmt_tag_finalizer(ind, tags, tags[t]));
-       }
+       gen_fintags(o, ind, dfa, rule);
 
        if (opts->target == opt_t::SKELETON) {
                emit_action(*dfa.skeleton, o, ind, rule_idx);
@@ -390,30 +385,124 @@ void gen_goto(code_lines_t &code, bool &readCh, const State *to,
 void gen_settags(code_lines_t &code, const DFA &dfa,
        const tagcmd_t &cmd, bool restore_fallback)
 {
-       if (cmd.empty()) return;
+       const bool generic = opts->input_api.type() == InputAPI::CUSTOM;
+       const bool
+               *set = dfa.tagpool[cmd.set],
+               *copy = dfa.tagpool[cmd.copy];
+       const std::valarray<Tag> &tags = dfa.tags;
+       const size_t ntags = tags.size();
+       std::string line;
 
-       if (!dfa.basetag) {
+       // single tag YYCTXMARKER, backwards compatibility
+       if (cmd.set != ZERO_TAGS && dfa.oldstyle_ctxmarker) {
                assert(cmd.copy == ZERO_TAGS);
-               code.push_back(opts->input_api.stmt_backupctx(0));
+               line = generic
+                       ? opts->yybackupctx + " ();\n"
+                       : opts->yyctxmarker + " = " + opts->yycursor + ";\n";
+               code.push_back(line);
                return;
        }
 
-       const std::valarray<Tag> &tags = dfa.tags;
-       const size_t ntags = tags.size();
-       const bool *copy = dfa.tagpool[cmd.copy];
-       for (size_t t = 0; t < ntags; ++t) {
-               if (copy[t]) {
-                       const Tag &tag = tags[t];
+       // copy
+       for (size_t i = 0; i < ntags; ++i) {
+               if (copy[i]) {
+                       const Tag &tag = tags[i];
                        std::string
                                x = vartag_expr(tag.name, tag.rule),
                                y = vartag_expr_fallback(tag);
                        if (restore_fallback) std::swap(x, y);
-                       code.push_back(y + " = " + x + ";\n");
+                       line = generic
+                               ? opts->yycopytag + " (" + y + ", " + x + ");\n"
+                               : y + " = " + x + ";\n";
+                       code.push_back(line);
                }
        }
-       if (cmd.set != ZERO_TAGS) {
-               code.push_back(opts->input_api.stmt_dist(0,
-                       dfa.tagpool[cmd.set], tags));
+
+       // set
+       if (generic) {
+               for (size_t i = 0; i < ntags; ++i) {
+                       if (set[i]) {
+                               const Tag &tag = tags[i];
+                               line = opts->yybackuptag + " ("
+                                       + vartag_expr(tag.name, tag.rule) + ");\n";
+                               code.push_back(line);
+                       }
+               }
+       } else if (cmd.set != ZERO_TAGS) {
+               line = "";
+               for (size_t i = 0; i < ntags; ++i) {
+                       if (set[i]) {
+                               const Tag &tag = tags[i];
+                               line += vartag_expr(tag.name, tag.rule) + " = ";
+                       }
+               }
+               line += opts->yycursor + ";\n";
+               code.push_back(line);
+       }
+}
+
+void gen_fintags(OutputFile &o, uint32_t ind, const DFA &dfa, const Rule &rule)
+{
+       const bool generic = opts->input_api.type() == InputAPI::CUSTOM;
+       const std::valarray<Tag> &tags = dfa.tags;
+
+       // trailing context
+       if (rule.trail != Tag::NONE) {
+               const Tag &tag = tags[rule.trail];
+               o.wind(ind);
+               if (tag.type == Tag::FIX) {
+                       assert(!generic);
+                       o.wstring(opts->yycursor).ws(" -= ").wu64(tag.fix.dist);
+               } else if (dfa.oldstyle_ctxmarker) {
+                       if (generic) {
+                               o.wstring(opts->yyrestorectx).ws(" ()");
+                       } else {
+                               o.wstring(opts->yycursor).ws(" = ").wstring(opts->yyctxmarker);
+                       }
+               } else {
+                       const Tag &orig = tags[tag.var.orig];
+                       const std::string expr = vartag_expr(orig.name, orig.rule);
+                       if (generic) {
+                               o.wstring(opts->yyrestoretag).ws(" (").wstring(expr).ws(")");
+                       } else {
+                               o.wstring(opts->yycursor).ws(" = ").wstring(expr);
+                       }
+               }
+               o.ws(";\n");
+       }
+
+       // named tags
+       for (size_t t = rule.ltag; t < rule.htag; ++t) {
+               const Tag &tag = tags[t];
+
+               // fixed
+               if (tag.type == Tag::FIX) {
+                       assert(!generic);
+                       o.wind(ind).wstring(*tag.name).ws(" = ");
+                       if (tag.fix.base == Tag::NONE) {
+                               // optimize '(YYCTXMARKER + ((YYCURSOR - YCTXMARKER) - tag))'
+                               // to       '(YYCURSOR - tag)'
+                               o.wstring(opts->yycursor).ws(" - ").wu64(tag.fix.dist);
+                       } else {
+                               const Tag &orig = tags[tags[tag.fix.base].var.orig];
+                               o.wstring(vartag_expr(orig.name, orig.rule))
+                                       .ws(" - ").wu64(tag.fix.dist);
+                       }
+                       o.ws(";\n");
+                       continue;
+               }
+
+               // variable
+               const Tag &orig = tags[tag.var.orig];
+               const std::string expr = vartag_expr(orig.name, orig.rule);
+               o.wind(ind);
+               if (generic) {
+                       o.wstring(opts->yycopytag).ws(" (").wstring(*tag.name)
+                               .ws(", ").wstring(expr).ws(")");
+               } else {
+                       o.wstring(*tag.name).ws(" = ").wstring(expr);
+               }
+               o.ws(";\n");
        }
 }
 
index 4c9656cd8a5a43bfcf65c32341b0d25301cbe977..811b973329dcb5431bf60daef3f2d37ffbc35976 100644 (file)
@@ -144,7 +144,7 @@ void DFA::emit(Output & output, uint32_t& ind, bool isLastCond, bool& bPrologBra
        OutputBlock &ob = o.block();
 
        std::set<std::string> tagnames, tagvars;
-       if (basetag) {
+       if (!oldstyle_ctxmarker) {
                const size_t ntags = tags.size();
                for (size_t i = 0; i < ntags; ++i) {
                        const Tag &t = tags[i];
@@ -190,11 +190,11 @@ void DFA::emit(Output & output, uint32_t& ind, bool isLastCond, bool& bPrologBra
                if (output.skeletons.insert (name).second)
                {
                        emit_data(*skeleton);
-                       emit_start(*skeleton, o, max_fill, need_backup, need_backupctx,
-                               need_accept, basetag, tagnames, tagvars);
+                       emit_start(*skeleton, o, max_fill, need_backup,
+                               need_accept, oldstyle_ctxmarker, tagnames, tagvars);
                        uint32_t i = 2;
                        emit_body (o, i, used_labels, initial_label);
-                       emit_end(*skeleton, o, need_backup, need_backupctx);
+                       emit_end(*skeleton, o, need_backup, oldstyle_ctxmarker);
                }
        } else if (opts->target == opt_t::DOT) {
                emit_dot(o, isLastCond, ob.types);
@@ -264,9 +264,6 @@ void DFA::emit(Output & output, uint32_t& ind, bool isLastCond, bool& bPrologBra
                        }
                        o.wstring(opts->condPrefix).wstring(cond).ws(":\n");
                }
-               if (basetag) {
-                       o.wstring(opts->input_api.stmt_backupctx(ind));
-               }
                if (opts->cFlag && opts->bFlag && BitMap::first)
                {
                        o.wind(ind++).ws("{\n");
index 0135efd191eea06a2d46cb073d3587ae6d201a7f..8e5ec681e551664d8adba355a5c39d1b7260b3f8 100644 (file)
@@ -80,79 +80,6 @@ std::string InputAPI::stmt_backup (uint32_t ind) const
        return indent (ind) + s + ";\n";
 }
 
-std::string InputAPI::stmt_backupctx (uint32_t ind) const
-{
-       std::string s;
-       switch (type_)
-       {
-               case DEFAULT:
-                       s = opts->yyctxmarker + " = " + opts->yycursor;
-                       break;
-               case CUSTOM:
-                       s = opts->yybackupctx + " ()";
-                       break;
-       }
-       return indent(ind) + s + ";\n";
-}
-
-std::string InputAPI::expr_dist () const
-{
-       std::string s;
-       switch (type_) {
-               case DEFAULT:
-                       s = "(" + opts->yycursor + " - " + opts->yyctxmarker + ")";
-                       break;
-               case CUSTOM:
-                       s = opts->tags_yydist + "()";
-                       break;
-       }
-       return s;
-}
-
-std::string InputAPI::stmt_dist (uint32_t ind, const bool *mask,
-       const std::valarray<Tag> &tags) const
-{
-       std::string s = indent(ind);
-       for (size_t i = 0; i < tags.size(); ++i) {
-               if (mask[i]) {
-                       const Tag &t = tags[tags[i].var.orig];
-                       s += vartag_expr(t.name, t.rule) + " = ";
-               }
-       }
-       return s + expr_dist() + ";\n";
-}
-
-std::string InputAPI::stmt_tag_finalizer(uint32_t ind,
-       const std::valarray<Tag> &tags, const Tag &tag) const
-{
-       // fixed tags
-       if (tag.type == Tag::FIX) {
-               assert(type_ == DEFAULT);
-               const std::string dist = to_string(tag.fix.dist);
-               std::string expr;
-               if (tag.fix.base == Tag::NONE) {
-                       // optimize '(YYCTXMARKER + ((YYCURSOR - YCTXMARKER) - tag))'
-                       // to       '(YYCURSOR - tag)'
-                       expr = opts->yycursor + " - " + dist;
-               } else {
-                       const Tag &orig = tags[tags[tag.fix.base].var.orig];
-                       expr = opts->yyctxmarker + " + ("
-                               + vartag_expr(orig.name, orig.rule)
-                               + " - " + dist + ")";
-               }
-               return indent(ind) + *tag.name + " = " + expr + ";\n";
-       }
-
-       // variable tags
-       const Tag &orig = tags[tag.var.orig];
-       const std::string
-               expr = vartag_expr(orig.name, orig.rule),
-               stmt = type_ == DEFAULT
-                       ? *tag.name + " = " + opts->yyctxmarker + " + " + expr
-                       : opts->tags_yytag + "(" + *tag.name + ", " + expr + ")";
-       return indent(ind) + stmt + ";\n";
-}
-
 std::string InputAPI::stmt_restore (uint32_t ind) const
 {
        std::string s;
@@ -168,29 +95,6 @@ std::string InputAPI::stmt_restore (uint32_t ind) const
        return indent (ind) + s + ";\n";
 }
 
-std::string InputAPI::stmt_restorectx(uint32_t ind,
-       const std::valarray<Tag> &tags, const Tag &tag, bool basetag) const
-{
-       std::string s;
-
-       if (tag.type == Tag::FIX) {
-               assert(type_ == DEFAULT);
-               s = opts->yycursor + " -= " + to_string(tag.fix.dist);
-       } else if (basetag) {
-               const Tag &orig = tags[tag.var.orig];
-               const std::string expr = vartag_expr(orig.name, orig.rule);
-               s = (type_ == DEFAULT)
-                       ? opts->yycursor + " = " + opts->yyctxmarker + " + " + expr
-                       : opts->yyrestorectx + " (" + expr + ")";
-       } else {
-               s = (type_ == DEFAULT)
-                       ? opts->yycursor + " = " + opts->yyctxmarker
-                       : opts->yyrestorectx + " ()";
-       }
-
-       return indent(ind) + s + ";\n";
-}
-
 std::string InputAPI::stmt_skip_peek (uint32_t ind) const
 {
        return type_ == DEFAULT
index 2fdadbf6b2cc8b83f7647e64fe81048d9b56f8fc..adce72d24f787ff73e14a8cf0fa6ad57276c8ac2 100644 (file)
@@ -31,15 +31,7 @@ public:
        std::string stmt_peek (uint32_t ind) const;
        std::string stmt_skip (uint32_t ind) const;
        std::string stmt_backup (uint32_t ind) const;
-       std::string stmt_backupctx (uint32_t ind) const;
-       std::string expr_dist () const;
-       std::string stmt_dist (uint32_t ind, const bool *tagmask,
-               const std::valarray<Tag> &tags) const;
-       std::string stmt_tag_finalizer(uint32_t ind,
-               const std::valarray<Tag> &tags, const Tag &tag) const;
        std::string stmt_restore (uint32_t ind) const;
-       std::string stmt_restorectx(uint32_t ind,
-               const std::valarray<Tag> &tags, const Tag &tag, bool basetag) const;
        std::string stmt_skip_peek (uint32_t ind) const;
        std::string stmt_skip_backup (uint32_t ind) const;
        std::string stmt_backup_peek (uint32_t ind) const;
index 914ef32793767af0a912c1535653f01e7040d64e..70e301ad5ae30b7a27fb6d8f3b7775064af6ee53 100644 (file)
@@ -22,7 +22,9 @@ struct ConfTags
 {
        std::string format;
        std::string separator;
-       ConfTags(): format("long @@;"), separator("") {}
+
+       ConfTags(const std::string &f, const std::string &s)
+               : format(f), separator(s) {}
 };
 
 struct OutputFragment
index e05008ebe0f5a8802fae64ef9481c86fecf5b419..758031bf4517764270507bc5136c24824315fd23 100644 (file)
@@ -76,8 +76,6 @@ void opt_t::fix ()
                        state_set = Opt::baseopt.state_set;
                        state_set_arg = Opt::baseopt.state_set_arg;
                        state_set_naked = Opt::baseopt.state_set_naked;
-                       tags_yytag = Opt::baseopt.tags_yytag;
-                       tags_yydist = Opt::baseopt.tags_yydist;
                        tags_prefix = Opt::baseopt.tags_prefix;
                        tags_expression = Opt::baseopt.tags_expression;
                        yyfilllabel = Opt::baseopt.yyfilllabel;
@@ -96,8 +94,11 @@ void opt_t::fix ()
                        yyskip = Opt::baseopt.yyskip;
                        yybackup = Opt::baseopt.yybackup;
                        yybackupctx = Opt::baseopt.yybackupctx;
+                       yybackuptag = Opt::baseopt.yybackuptag;
                        yyrestore = Opt::baseopt.yyrestore;
                        yyrestorectx = Opt::baseopt.yyrestorectx;
+                       yyrestoretag = Opt::baseopt.yyrestoretag;
+                       yycopytag = Opt::baseopt.yycopytag;
                        yylessthan = Opt::baseopt.yylessthan;
                        dFlag = Opt::baseopt.dFlag;
                        yydebug = Opt::baseopt.yydebug;
@@ -156,8 +157,6 @@ void opt_t::fix ()
        }
        if (!tags)
        {
-               tags_yytag = Opt::baseopt.tags_yytag;
-               tags_yydist = Opt::baseopt.tags_yydist;
                tags_prefix = Opt::baseopt.tags_prefix;
                tags_expression = Opt::baseopt.tags_expression;
        }
@@ -184,8 +183,11 @@ void opt_t::fix ()
                yyskip = Opt::baseopt.yyskip;
                yybackup = Opt::baseopt.yybackup;
                yybackupctx = Opt::baseopt.yybackupctx;
+               yybackuptag = Opt::baseopt.yybackuptag;
                yyrestore = Opt::baseopt.yyrestore;
                yyrestorectx = Opt::baseopt.yyrestorectx;
+               yyrestoretag = Opt::baseopt.yyrestoretag;
+               yycopytag = Opt::baseopt.yycopytag;
                yylessthan = Opt::baseopt.yylessthan;
        }
        if (!dFlag)
@@ -305,6 +307,7 @@ void Opt::reset_mapCodeName ()
        useropt->state_set = Opt::baseopt.state_set;
        useropt->yybackup = Opt::baseopt.yybackup;
        useropt->yybackupctx = Opt::baseopt.yybackupctx;
+       useropt->yybackuptag = Opt::baseopt.yybackuptag;
        useropt->yycondtype = Opt::baseopt.yycondtype;
        useropt->yyctxmarker = Opt::baseopt.yyctxmarker;
        useropt->yyctype = Opt::baseopt.yyctype;
@@ -316,9 +319,9 @@ void Opt::reset_mapCodeName ()
        useropt->yypeek = Opt::baseopt.yypeek;
        useropt->yyrestore = Opt::baseopt.yyrestore;
        useropt->yyrestorectx = Opt::baseopt.yyrestorectx;
+       useropt->yyrestoretag = Opt::baseopt.yyrestoretag;
+       useropt->yycopytag = Opt::baseopt.yycopytag;
        useropt->yyskip = Opt::baseopt.yyskip;
-       useropt->tags_yytag = Opt::baseopt.tags_yytag;
-       useropt->tags_yydist = Opt::baseopt.tags_yydist;
        useropt->yyfilllabel = Opt::baseopt.yyfilllabel;
        useropt->yynext = Opt::baseopt.yynext;
        useropt->yyaccept = Opt::baseopt.yyaccept;
index ceeaebf745b9f0b1d4a88735fe36497856ed3633..ccaee2922bb53b7107b30414ed724b299fcc64be 100644 (file)
@@ -58,8 +58,6 @@ namespace re2c
        OPT (bool, bUseStateNext, false) \
        /* tags */ \
        OPT (bool, tags, false) \
-       OPT (std::string, tags_yytag, "YYTAG") \
-       OPT (std::string, tags_yydist, "YYDIST") \
        OPT (std::string, tags_prefix, "yyt") \
        OPT (std::string, tags_expression, "@@") \
        /* reuse */ \
@@ -87,8 +85,11 @@ namespace re2c
        OPT (std::string, yyskip, "YYSKIP") \
        OPT (std::string, yybackup, "YYBACKUP") \
        OPT (std::string, yybackupctx, "YYBACKUPCTX") \
+       OPT (std::string, yybackuptag, "YYBACKUPTAG") \
        OPT (std::string, yyrestore, "YYRESTORE") \
        OPT (std::string, yyrestorectx, "YYRESTORECTX") \
+       OPT (std::string, yyrestoretag, "YYRESTORETAG") \
+       OPT (std::string, yycopytag, "YYCOPYTAG") \
        OPT (std::string, yylessthan, "YYLESSTHAN") \
        /* #line directives */ \
        OPT (bool, iFlag, false) \
index ce31cb5e90f6002bbc31fd68d080ff37d999b73d..aac23a9677b72e3c77197fff3a297af290d1f187 100644 (file)
@@ -23,7 +23,6 @@ DFA::DFA
        , const std::string &n
        , const std::string &c
        , uint32_t l
-       , size_t used_tags
        )
        : accepts ()
        , skeleton (skel)
@@ -38,29 +37,10 @@ DFA::DFA
        , tags(dfa.tags)
        , tagpool(dfa.tagpool)
        , copy_tags(dfa.copy_tags)
-
-       // statistics
        , max_fill (0)
        , need_backup (false)
-
-       // determine if 'YYCTXMARKER' or 'YYBACKUPCTX'/'YYRESTORECTX' pair is used
-       , need_backupctx (used_tags > 0 || opts->tags)
        , need_accept (false)
-
-       // Tags (except trailing contexts) imply the existence of base marker
-       // that points at the beginning of lexeme. First, it is a feature
-       // of re2c API. Second, it simplifies implementation (otherwise
-       // it would be hard to mix generic API and fixed-length contexts).
-       //
-       // The only case without base marker is when:
-       //     - tags are disabled, only trailing contexts are allowed
-       //     - trailing contexts don't overlap (one marker is enough
-       //       for all of them)
-       // If generic API is used, fixed-length contexts are forbidden,
-       // which may cause additional overlaps.
-       , basetag (used_tags > 1
-               || dfa.copy_tags != ZERO_TAGS
-               || opts->tags)
+       , oldstyle_ctxmarker (false)
 {
        const size_t nstates = dfa.states.size();
        const size_t nchars = dfa.nchars;
index 45247fdaa16e940c722ef0e8f73fd9889c14f4cf..3a0f18cab93298c50c0592cd69f0a61292590934 100644 (file)
@@ -72,9 +72,8 @@ struct DFA
        size_t copy_tags;
        size_t max_fill;
        bool need_backup;
-       bool need_backupctx;
        bool need_accept;
-       bool basetag;
+       bool oldstyle_ctxmarker;
 
        DFA     ( const dfa_t &dfa
                , const std::vector<size_t> &fill
@@ -83,12 +82,11 @@ struct DFA
                , const std::string &n
                , const std::string &c
                , uint32_t l
-               , size_t used_tags
                );
        ~DFA ();
        void reorder();
        void prepare();
-       void calc_stats();
+       void calc_stats(uint32_t line, size_t used_tags);
        void emit (Output &, uint32_t &, bool, bool &);
 
 private:
index 9b8a29fd1d14ec570a24ac7b4c60cc09b0e20fd6..61eb587225029154023d2662e898d32e664d24ea 100644 (file)
@@ -4,6 +4,7 @@
 
 #include "src/codegen/bitmap.h"
 #include "src/codegen/go.h"
+#include "src/conf/msg.h"
 #include "src/globals.h"
 #include "src/ir/adfa/action.h"
 #include "src/ir/adfa/adfa.h"
@@ -189,7 +190,7 @@ void DFA::prepare ()
        }
 }
 
-void DFA::calc_stats ()
+void DFA::calc_stats(uint32_t line, size_t used_tags)
 {
        // calculate 'YYMAXFILL'
        max_fill = 0;
@@ -206,6 +207,26 @@ void DFA::calc_stats ()
 
        // determine if 'yyaccept' variable is used
        need_accept = accepts.size () > 1;
+
+       // determine if 'YYCTXMARKER' or 'YYBACKUPCTX'/'YYRESTORECTX' pair is used
+       // If tags are not enabled explicitely and trailing contexts
+       // don't overlap (single variable is enough for all of them), then
+       // re2c should use old-style YYCTXMARKER for backwards compatibility.
+       // Note that with generic API fixed-length contexts are forbidden,
+       // which may cause additional overlaps.
+       oldstyle_ctxmarker = used_tags == 1
+               && copy_tags == ZERO_TAGS
+               && !opts->tags;
+
+       // error if tags are not enabled, but we need them
+       if (!opts->tags
+               && (used_tags > 1 || copy_tags != ZERO_TAGS)) {
+               error("line %u: overlapping trailing contexts need "
+                       "multiple context markers, use '-t, --tags' "
+                       "option and '/*!tags:re2c ... */' directive",
+                       line);
+               exit(1);
+       }
 }
 
 void DFA::hoist_tags()
index 0879fcc7b817a1be7e65a267ac94a14b77e8bb09..6d17b1d30f590d38d10d32d2d5b547b096075eca 100644 (file)
@@ -78,8 +78,7 @@ static smart_ptr<DFA> compile_rules(
        fillpoints(dfa, fill);
 
        // ADFA stands for 'DFA with actions'
-       DFA *adfa = new DFA(dfa, fill, skeleton, cs,
-               name, cond, line, used_tags);
+       DFA *adfa = new DFA(dfa, fill, skeleton, cs, name, cond, line);
 
        // see note [reordering DFA states]
        adfa->reorder();
@@ -88,7 +87,7 @@ static smart_ptr<DFA> compile_rules(
        adfa->prepare();
 
        // finally gather overall DFA statistics
-       adfa->calc_stats();
+       adfa->calc_stats(line, used_tags);
 
        // accumulate global statistics from this particular DFA
        output.max_fill = std::max (output.max_fill, adfa->max_fill);
index 71e42bb119cac04e5df5c9709ee971c2ef5b3457..8748272213bded4acb7b9906b20cc4668886a2f3 100644 (file)
@@ -5,6 +5,7 @@
 #include <string>
 
 #include "src/codegen/bitmap.h"
+#include "src/codegen/indent.h"
 #include "src/codegen/output.h"
 #include "src/conf/opt.h"
 #include "src/globals.h"
@@ -93,7 +94,7 @@ void emit_prolog(OutputFile &o)
 }
 
 void emit_start(const Skeleton &skel, OutputFile &o, size_t maxfill,
-       bool backup, bool backupctx, bool accept, bool basetag,
+       bool backup, bool accept, bool oldstyle_ctxmarker,
        const std::set<std::string> &tagnames,
        const std::set<std::string> &tagvars)
 {
@@ -117,15 +118,14 @@ void emit_start(const Skeleton &skel, OutputFile &o, size_t maxfill,
                o.ws("\n#define YYBACKUP() marker = cursor");
                o.ws("\n#define YYRESTORE() cursor = marker");
        }
-       if (backupctx) {
+       if (oldstyle_ctxmarker) {
                o.ws("\n#define YYBACKUPCTX() ctxmarker = cursor");
-               if(basetag) {
-                       o.ws("\n#define YYRESTORECTX(dist) cursor = ctxmarker + dist");
-                       o.ws("\n#define YYDIST() (cursor - ctxmarker)");
-                       o.ws("\n#define YYTAG(tag, dist) tag = ctxmarker + dist");
-               } else {
-                       o.ws("\n#define YYRESTORECTX() cursor = ctxmarker");
-               }
+               o.ws("\n#define YYRESTORECTX() cursor = ctxmarker");
+       }
+       if (opts->tags) {
+               o.ws("\n#define YYBACKUPTAG(tag) tag = cursor");
+               o.ws("\n#define YYRESTORETAG(tag) cursor = tag");
+               o.ws("\n#define YYCOPYTAG(tag1, tag2) tag1 = tag2");
        }
        o.ws("\n#define YYLESSTHAN(n) (limit - cursor) < n");
        o.ws("\n#define YYFILL(n) { break; }");
@@ -230,19 +230,19 @@ void emit_start(const Skeleton &skel, OutputFile &o, size_t maxfill,
        if (backup) {
                o.ws("\n").wind(2).ws("const YYCTYPE *marker = NULL;");
        }
-       if (backupctx) {
+       if (oldstyle_ctxmarker) {
                o.ws("\n").wind(2).ws("const YYCTYPE *ctxmarker = NULL;");
        }
        o.ws("\n").wind(2).ws("YYCTYPE yych;");
        if (accept) {
                o.ws("\n").wind(2).ws("unsigned int yyaccept = 0;");
        }
-       if (!tagnames.empty()) {
-               o.ws("\n");
-               output_tags(o.stream(), ConfTags(), tagnames);
-               o.ws("\n").wstring(opts->input_api.stmt_backupctx(2));
-       }
 
+       // autogenerated tag variables
+       ConfTags conf("\n" + indent(2) + "const YYCTYPE *@@;", "");
+       output_tags(o.stream(), conf, tagnames);
+
+       // user-defined tag variables
        std::set<std::string>::const_iterator
                var1 = tagvars.begin(),
                var2 = tagvars.end();
@@ -261,7 +261,7 @@ void emit_start(const Skeleton &skel, OutputFile &o, size_t maxfill,
        o.ws("\n");
 }
 
-void emit_end(const Skeleton &skel, OutputFile &o, bool backup, bool backupctx)
+void emit_end(const Skeleton &skel, OutputFile &o, bool backup, bool oldstyle_ctxmarker)
 {
        const std::string &name = skel.name;
 
@@ -293,10 +293,15 @@ void emit_end(const Skeleton &skel, OutputFile &o, bool backup, bool backupctx)
                o.ws("\n#undef YYBACKUP");
                o.ws("\n#undef YYRESTORE");
        }
-       if (backupctx) {
+       if (oldstyle_ctxmarker) {
                o.ws("\n#undef YYBACKUPCTX");
                o.ws("\n#undef YYRESTORECTX");
        }
+       if (opts->tags) {
+               o.ws("\n#undef YYBACKUPTAG");
+               o.ws("\n#undef YYRESTORETAG");
+               o.ws("\n#undef YYCOPYTAG");
+       }
        o.ws("\n#undef YYLESSTHAN");
        o.ws("\n#undef YYFILL");
        o.ws("\n");
index df5f3c562c447cd49d11cd29e41be8d19d400621..1ac6da181ab93c6de501a6c4d8b4b03d8fab3c62 100644 (file)
@@ -88,10 +88,10 @@ void fprint_default_path(FILE *f, const Skeleton &skel, const path_t &p);
 void emit_data(const Skeleton &skel);
 void emit_prolog(OutputFile & o);
 void emit_start(const Skeleton &skel, OutputFile &o, size_t maxfill,
-       bool backup, bool backupctx, bool accept, bool basetag,
+       bool backup, bool accept, bool oldstyle_ctxmarker,
        const std::set<std::string> &tagnames,
        const std::set<std::string> &tagvars);
-void emit_end(const Skeleton &skel, OutputFile &o, bool backup, bool backupctx);
+void emit_end(const Skeleton &skel, OutputFile &o, bool backup, bool oldstyle_ctxmarker);
 void emit_epilog(OutputFile &o, const std::set<std::string> &names);
 void emit_action(const Skeleton &skel, OutputFile &o, uint32_t ind,
        size_t rule);
index c9dbf400cd08653636239fb416325d4fcd78cb53..58e29e1e4bbc48fbc69b3f87ae5951ed3aee0dff 100644 (file)
@@ -196,19 +196,19 @@ void Scanner::lex_end_of_comment()
 
 void Scanner::lex_tags()
 {
-       ConfTags conf;
+       std::string fmt, sep;
        for (;;) {/*!re2c
                * { fatal("unrecognized configuration"); }
 
-               "format"    { conf.format    = lex_conf_string(); continue; }
-               "separator" { conf.separator = lex_conf_string(); continue; }
+               "format"    { fmt = lex_conf_string(); continue; }
+               "separator" { sep = lex_conf_string(); continue; }
 
                space+ { continue; }
                eol    { ++cline; continue; }
                eoc    {
                        if (opts->target == opt_t::CODE) {
                                out.wdelay_tags(opts->topIndent,
-                                       new ConfTags(conf));
+                                       new ConfTags(fmt, sep));
                        }
                        tok = pos = cur;
                        return;
index a66ab469e28064111fcb4e943742479020f57be3..201822273151696e328031f476f179f8ef52f518 100644 (file)
@@ -121,11 +121,12 @@ void Scanner::lex_conf ()
        "define:YYSKIP"       { opts.set_yyskip       (lex_conf_string ()); return; }
        "define:YYBACKUP"     { opts.set_yybackup     (lex_conf_string ()); return; }
        "define:YYBACKUPCTX"  { opts.set_yybackupctx  (lex_conf_string ()); return; }
+       "define:YYBACKUPTAG"  { opts.set_yybackuptag  (lex_conf_string ()); return; }
        "define:YYRESTORE"    { opts.set_yyrestore    (lex_conf_string ()); return; }
        "define:YYRESTORECTX" { opts.set_yyrestorectx (lex_conf_string ()); return; }
+       "define:YYRESTORETAG" { opts.set_yyrestoretag (lex_conf_string ()); return; }
+       "define:YYCOPYTAG"    { opts.set_yycopytag    (lex_conf_string ()); return; }
        "define:YYLESSTHAN"   { opts.set_yylessthan   (lex_conf_string ()); return; }
-       "define:YYTAG"        { opts.set_tags_yytag   (lex_conf_string ()); return; }
-       "define:YYDIST"       { opts.set_tags_yydist  (lex_conf_string ()); return; }
 
        "tags:prefix"     { opts.set_tags_prefix    (lex_conf_string ()); return; }
        "tags:expression" { opts.set_tags_expression(lex_conf_string ()); return; }
diff --git a/re2c/test/tags/bug121_fix_multiple.i--input(custom).c b/re2c/test/tags/bug121_fix_multiple.i--input(custom).c
new file mode 100644 (file)
index 0000000..2d0ddf8
--- /dev/null
@@ -0,0 +1 @@
+re2c: error: line 10: overlapping trailing contexts need multiple context markers, use '-t, --tags' option and '/*!tags:re2c ... */' directive
diff --git a/re2c/test/tags/bug121_fix_multiple.i--input(custom).re b/re2c/test/tags/bug121_fix_multiple.i--input(custom).re
new file mode 100644 (file)
index 0000000..cc0a50b
--- /dev/null
@@ -0,0 +1,10 @@
+// overlapping trailing contexts of fixed length:
+// because of generic API we cannot take advantage of
+// fixed length and have to use multiple tags
+// (deduplication doesn't help)
+
+/*!re2c
+    "aba" / "ba" { 0 }
+    "a"   / "ba" { 1 }
+    *            { d }
+*/
diff --git a/re2c/test/tags/bug121_fix_multiple.i--tags--input(custom).c b/re2c/test/tags/bug121_fix_multiple.i--tags--input(custom).c
new file mode 100644 (file)
index 0000000..6f2d86c
--- /dev/null
@@ -0,0 +1,72 @@
+/* Generated by re2c */
+// overlapping trailing contexts of fixed length:
+// because of generic API we cannot take advantage of
+// fixed length and have to use multiple tags
+// (deduplication doesn't help)
+
+
+{
+       YYCTYPE yych;
+       unsigned int yyaccept = 0;
+       if (YYLESSTHAN (5)) YYFILL(5);
+       yych = YYPEEK ();
+       switch (yych) {
+       case 'a':       goto yy4;
+       default:        goto yy2;
+       }
+yy2:
+       YYSKIP ();
+yy3:
+       { d }
+yy4:
+       yyaccept = 0;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 'b':
+               YYBACKUPTAG (yyt1);
+               goto yy5;
+       default:        goto yy3;
+       }
+yy5:
+       YYSKIP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 'a':       goto yy7;
+       default:        goto yy6;
+       }
+yy6:
+       YYRESTORE ();
+       if (yyaccept == 0) {
+               goto yy3;
+       } else {
+               goto yy8;
+       }
+yy7:
+       yyaccept = 1;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 'b':
+               YYBACKUPTAG (yyt0);
+               goto yy9;
+       default:        goto yy8;
+       }
+yy8:
+       YYRESTORETAG (yyt1);
+       { 1 }
+yy9:
+       YYSKIP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 'a':       goto yy10;
+       default:        goto yy6;
+       }
+yy10:
+       YYSKIP ();
+       YYRESTORETAG (yyt0);
+       { 0 }
+}
+
diff --git a/re2c/test/tags/bug121_fix_multiple.i--tags--input(custom).re b/re2c/test/tags/bug121_fix_multiple.i--tags--input(custom).re
new file mode 100644 (file)
index 0000000..cc0a50b
--- /dev/null
@@ -0,0 +1,10 @@
+// overlapping trailing contexts of fixed length:
+// because of generic API we cannot take advantage of
+// fixed length and have to use multiple tags
+// (deduplication doesn't help)
+
+/*!re2c
+    "aba" / "ba" { 0 }
+    "a"   / "ba" { 1 }
+    *            { d }
+*/
index 58ae1af804ce1b8935ebb133b02b80106c9ca670..555e5584792657ae4f516c2673a5c3ea6b8b24fe 100644 (file)
@@ -1,69 +1 @@
-/* Generated by re2c */
-// overlapping trailing contexts of variable length:
-// we need multiple tags and we cannot deduplicate them
-
-
-{
-       YYCTYPE yych;
-       YYBACKUPCTX ();
-       if (YYLESSTHAN (4)) YYFILL(4);
-       yych = YYPEEK ();
-       switch (yych) {
-       case 'a':       goto yy4;
-       default:        goto yy2;
-       }
-yy2:
-       YYSKIP ();
-       { d }
-yy4:
-       YYSKIP ();
-       yyt1 = YYDIST();
-       switch ((yych = YYPEEK ())) {
-       case 'b':       goto yy6;
-       default:        goto yy5;
-       }
-yy5:
-       YYRESTORECTX (yyt1);
-       { 1 }
-yy6:
-       YYSKIP ();
-       YYBACKUP ();
-       yych = YYPEEK ();
-       switch (yych) {
-       case 'c':
-               yyt0 = YYDIST();
-               goto yy9;
-       default:        goto yy8;
-       }
-yy7:
-       YYSKIP ();
-       if (YYLESSTHAN (1)) YYFILL(1);
-       yych = YYPEEK ();
-yy8:
-       switch (yych) {
-       case 'b':       goto yy7;
-       default:        goto yy5;
-       }
-yy9:
-       YYSKIP ();
-       yych = YYPEEK ();
-       switch (yych) {
-       case 'c':       goto yy11;
-       default:        goto yy10;
-       }
-yy10:
-       YYRESTORE ();
-       goto yy5;
-yy11:
-       YYSKIP ();
-       if (YYLESSTHAN (1)) YYFILL(1);
-       yych = YYPEEK ();
-       switch (yych) {
-       case 'c':       goto yy11;
-       default:        goto yy13;
-       }
-yy13:
-       YYRESTORECTX (yyt0);
-       { 0 }
-}
-
+re2c: error: line 8: overlapping trailing contexts need multiple context markers, use '-t, --tags' option and '/*!tags:re2c ... */' directive
diff --git a/re2c/test/tags/bug121_var_multiple.i--tags--input(custom).c b/re2c/test/tags/bug121_var_multiple.i--tags--input(custom).c
new file mode 100644 (file)
index 0000000..8a0d233
--- /dev/null
@@ -0,0 +1,68 @@
+/* Generated by re2c */
+// overlapping trailing contexts of variable length:
+// we need multiple tags and we cannot deduplicate them
+
+
+{
+       YYCTYPE yych;
+       if (YYLESSTHAN (4)) YYFILL(4);
+       yych = YYPEEK ();
+       switch (yych) {
+       case 'a':       goto yy4;
+       default:        goto yy2;
+       }
+yy2:
+       YYSKIP ();
+       { d }
+yy4:
+       YYSKIP ();
+       YYBACKUPTAG (yyt1);
+       switch ((yych = YYPEEK ())) {
+       case 'b':       goto yy6;
+       default:        goto yy5;
+       }
+yy5:
+       YYRESTORETAG (yyt1);
+       { 1 }
+yy6:
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 'c':
+               YYBACKUPTAG (yyt0);
+               goto yy9;
+       default:        goto yy8;
+       }
+yy7:
+       YYSKIP ();
+       if (YYLESSTHAN (1)) YYFILL(1);
+       yych = YYPEEK ();
+yy8:
+       switch (yych) {
+       case 'b':       goto yy7;
+       default:        goto yy5;
+       }
+yy9:
+       YYSKIP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 'c':       goto yy11;
+       default:        goto yy10;
+       }
+yy10:
+       YYRESTORE ();
+       goto yy5;
+yy11:
+       YYSKIP ();
+       if (YYLESSTHAN (1)) YYFILL(1);
+       yych = YYPEEK ();
+       switch (yych) {
+       case 'c':       goto yy11;
+       default:        goto yy13;
+       }
+yy13:
+       YYRESTORETAG (yyt0);
+       { 0 }
+}
+
diff --git a/re2c/test/tags/bug121_var_multiple.i--tags--input(custom).re b/re2c/test/tags/bug121_var_multiple.i--tags--input(custom).re
new file mode 100644 (file)
index 0000000..b661c89
--- /dev/null
@@ -0,0 +1,8 @@
+// overlapping trailing contexts of variable length:
+// we need multiple tags and we cannot deduplicate them
+
+/*!re2c
+    "ab" / "c"{2,} { 0 }
+    "a"  / "b"*    { 1 }
+    *              { d }
+*/
diff --git a/re2c/test/tags/bug121_var_multiple.i--tags.c b/re2c/test/tags/bug121_var_multiple.i--tags.c
new file mode 100644 (file)
index 0000000..5309365
--- /dev/null
@@ -0,0 +1,65 @@
+/* Generated by re2c */
+// overlapping trailing contexts of variable length:
+// we need multiple tags and we cannot deduplicate them
+
+
+{
+       YYCTYPE yych;
+       if ((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
+       yych = *YYCURSOR;
+       switch (yych) {
+       case 'a':       goto yy4;
+       default:        goto yy2;
+       }
+yy2:
+       ++YYCURSOR;
+       { d }
+yy4:
+       ++YYCURSOR;
+       yyt1 = YYCURSOR;
+       switch ((yych = *YYCURSOR)) {
+       case 'b':       goto yy6;
+       default:        goto yy5;
+       }
+yy5:
+       YYCURSOR = yyt1;
+       { 1 }
+yy6:
+       yych = *(YYMARKER = ++YYCURSOR);
+       switch (yych) {
+       case 'c':
+               yyt0 = YYCURSOR;
+               goto yy9;
+       default:        goto yy8;
+       }
+yy7:
+       ++YYCURSOR;
+       if (YYLIMIT <= YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+yy8:
+       switch (yych) {
+       case 'b':       goto yy7;
+       default:        goto yy5;
+       }
+yy9:
+       yych = *++YYCURSOR;
+       switch (yych) {
+       case 'c':       goto yy11;
+       default:        goto yy10;
+       }
+yy10:
+       YYCURSOR = YYMARKER;
+       goto yy5;
+yy11:
+       ++YYCURSOR;
+       if (YYLIMIT <= YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch (yych) {
+       case 'c':       goto yy11;
+       default:        goto yy13;
+       }
+yy13:
+       YYCURSOR = yyt0;
+       { 0 }
+}
+
diff --git a/re2c/test/tags/bug121_var_multiple.i--tags.re b/re2c/test/tags/bug121_var_multiple.i--tags.re
new file mode 100644 (file)
index 0000000..b661c89
--- /dev/null
@@ -0,0 +1,8 @@
+// overlapping trailing contexts of variable length:
+// we need multiple tags and we cannot deduplicate them
+
+/*!re2c
+    "ab" / "c"{2,} { 0 }
+    "a"  / "b"*    { 1 }
+    *              { d }
+*/
index 1307dfa102b76dc2879d41a88ebaa819e58727ef..555e5584792657ae4f516c2673a5c3ea6b8b24fe 100644 (file)
@@ -1,66 +1 @@
-/* Generated by re2c */
-// overlapping trailing contexts of variable length:
-// we need multiple tags and we cannot deduplicate them
-
-
-{
-       YYCTYPE yych;
-       YYCTXMARKER = YYCURSOR;
-       if ((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
-       yych = *YYCURSOR;
-       switch (yych) {
-       case 'a':       goto yy4;
-       default:        goto yy2;
-       }
-yy2:
-       ++YYCURSOR;
-       { d }
-yy4:
-       ++YYCURSOR;
-       yyt1 = (YYCURSOR - YYCTXMARKER);
-       switch ((yych = *YYCURSOR)) {
-       case 'b':       goto yy6;
-       default:        goto yy5;
-       }
-yy5:
-       YYCURSOR = YYCTXMARKER + yyt1;
-       { 1 }
-yy6:
-       yych = *(YYMARKER = ++YYCURSOR);
-       switch (yych) {
-       case 'c':
-               yyt0 = (YYCURSOR - YYCTXMARKER);
-               goto yy9;
-       default:        goto yy8;
-       }
-yy7:
-       ++YYCURSOR;
-       if (YYLIMIT <= YYCURSOR) YYFILL(1);
-       yych = *YYCURSOR;
-yy8:
-       switch (yych) {
-       case 'b':       goto yy7;
-       default:        goto yy5;
-       }
-yy9:
-       yych = *++YYCURSOR;
-       switch (yych) {
-       case 'c':       goto yy11;
-       default:        goto yy10;
-       }
-yy10:
-       YYCURSOR = YYMARKER;
-       goto yy5;
-yy11:
-       ++YYCURSOR;
-       if (YYLIMIT <= YYCURSOR) YYFILL(1);
-       yych = *YYCURSOR;
-       switch (yych) {
-       case 'c':       goto yy11;
-       default:        goto yy13;
-       }
-yy13:
-       YYCURSOR = YYCTXMARKER + yyt0;
-       { 0 }
-}
-
+re2c: error: line 8: overlapping trailing contexts need multiple context markers, use '-t, --tags' option and '/*!tags:re2c ... */' directive
index 2a53d9130ae3dbb744c2b7bbe05fa3001628a6bf..933e7cc533c056c6c718c468a85e65876b021dd5 100644 (file)
@@ -13,20 +13,18 @@ static inline unsigned parse_oct(const char *s, const char *e)
 
 static void lex(const char *s)
 {
-#define YYPEEK()           *s
-#define YYSKIP()           ++s
-#define YYBACKUP()         marker = s
-#define YYRESTORE()        s = marker
-#define YYBACKUPCTX()      basectx = s
-#define YYRESTORECTX(dist) s = basectx + dist
-#define ZZ_CTX(tag, dist)  tag = basectx + dist
-#define ZZ_DIST()          (s - basectx)
-    const char *marker, *basectx, *p1, *p2, *p3;
-    long zz_0p1;long zz_0p2;long zz_0p3;
+#define YYPEEK()     *s
+#define YYSKIP()     ++s
+#define YYBACKUP()   marker = s
+#define YYRESTORE()  s = marker
+#define ZZBT(t)      t = s
+#define ZZRT(t)      s = t
+#define ZZCT(t1, t2) t1 = t2
+    const char *marker, *p0, *p1, *p2, *p3;
+    const char *zz_0p0;const char *zz_0p1;const char *zz_0p2;const char *zz_0p3;
     
 {
        char yych;
-       YYBACKUPCTX ();
        yych = YYPEEK ();
        switch (yych) {
        case '0':
@@ -38,7 +36,9 @@ static void lex(const char *s)
        case '6':
        case '7':
        case '8':
-       case '9':       goto yy4;
+       case '9':
+               ZZBT (zz_0p0);
+               goto yy4;
        default:        goto yy2;
        }
 yy2:
@@ -51,7 +51,7 @@ yy4:
        yych = YYPEEK ();
        switch (yych) {
        case '.':
-               zz_0p1 = ZZ_DIST();
+               ZZBT (zz_0p1);
                goto yy5;
        case '0':
        case '1':
@@ -89,7 +89,7 @@ yy7:
        yych = YYPEEK ();
        switch (yych) {
        case '.':
-               zz_0p1 = ZZ_DIST();
+               ZZBT (zz_0p1);
                goto yy5;
        case '0':
        case '1':
@@ -108,7 +108,7 @@ yy8:
        yych = YYPEEK ();
        switch (yych) {
        case '.':
-               zz_0p2 = ZZ_DIST();
+               ZZBT (zz_0p2);
                goto yy10;
        case '0':
        case '1':
@@ -127,7 +127,7 @@ yy9:
        yych = YYPEEK ();
        switch (yych) {
        case '.':
-               zz_0p1 = ZZ_DIST();
+               ZZBT (zz_0p1);
                goto yy5;
        default:        goto yy6;
        }
@@ -152,7 +152,7 @@ yy11:
        yych = YYPEEK ();
        switch (yych) {
        case '.':
-               zz_0p2 = ZZ_DIST();
+               ZZBT (zz_0p2);
                goto yy10;
        case '0':
        case '1':
@@ -171,7 +171,7 @@ yy12:
        yych = YYPEEK ();
        switch (yych) {
        case '.':
-               zz_0p3 = ZZ_DIST();
+               ZZBT (zz_0p3);
                goto yy14;
        case '0':
        case '1':
@@ -190,7 +190,7 @@ yy13:
        yych = YYPEEK ();
        switch (yych) {
        case '.':
-               zz_0p2 = ZZ_DIST();
+               ZZBT (zz_0p2);
                goto yy10;
        default:        goto yy6;
        }
@@ -215,7 +215,7 @@ yy15:
        yych = YYPEEK ();
        switch (yych) {
        case '.':
-               zz_0p3 = ZZ_DIST();
+               ZZBT (zz_0p3);
                goto yy14;
        case '0':
        case '1':
@@ -245,12 +245,13 @@ yy16:
        default:        goto yy17;
        }
 yy17:
-       ZZ_CTX(p3, zz_0p3);
-       ZZ_CTX(p2, zz_0p2);
-       ZZ_CTX(p1, zz_0p1);
+       ZZCT (p3, zz_0p3);
+       ZZCT (p2, zz_0p2);
+       ZZCT (p1, zz_0p1);
+       ZZCT (p0, zz_0p0);
        {
             printf("%u.%u.%u.%u\n",
-                parse_oct(basectx, p1),
+                parse_oct(p0, p1),
                 parse_oct(p1 + 1, p2),
                 parse_oct(p2 + 1, p3),
                 parse_oct(p3 + 1, s));
@@ -261,7 +262,7 @@ yy18:
        yych = YYPEEK ();
        switch (yych) {
        case '.':
-               zz_0p3 = ZZ_DIST();
+               ZZBT (zz_0p3);
                goto yy14;
        default:        goto yy6;
        }
index 4f58a3c84c2e2eec5139b321b053c2446a68216e..a12a7f750d86fe4de255825656166143fe065af8 100644 (file)
@@ -12,16 +12,15 @@ static inline unsigned parse_oct(const char *s, const char *e)
 
 static void lex(const char *s)
 {
-#define YYPEEK()           *s
-#define YYSKIP()           ++s
-#define YYBACKUP()         marker = s
-#define YYRESTORE()        s = marker
-#define YYBACKUPCTX()      basectx = s
-#define YYRESTORECTX(dist) s = basectx + dist
-#define ZZ_CTX(tag, dist)  tag = basectx + dist
-#define ZZ_DIST()          (s - basectx)
-    const char *marker, *basectx, *p1, *p2, *p3;
-    /*!tags:re2c*/
+#define YYPEEK()     *s
+#define YYSKIP()     ++s
+#define YYBACKUP()   marker = s
+#define YYRESTORE()  s = marker
+#define ZZBT(t)      t = s
+#define ZZRT(t)      s = t
+#define ZZCT(t1, t2) t1 = t2
+    const char *marker, *p0, *p1, *p2, *p3;
+    /*!tags:re2c format = "const char *@@;"; */
     /*!re2c
         re2c:define:YYCTYPE = char;
         re2c:yyfill:enable = 0;
@@ -31,20 +30,22 @@ static void lex(const char *s)
 
         * { printf("error\n"); return; }
 
+        @p0
           oct @p1
         d oct @p2
         d oct @p3
         d oct {
             printf("%u.%u.%u.%u\n",
-                parse_oct(basectx, p1),
+                parse_oct(p0, p1),
                 parse_oct(p1 + 1, p2),
                 parse_oct(p2 + 1, p3),
                 parse_oct(p3 + 1, s));
             return;
         }
 
-        re2c:define:YYTAG = "ZZ_CTX";
-        re2c:define:YYDIST = "ZZ_DIST";
+        re2c:define:YYBACKUPTAG = "ZZBT";
+        re2c:define:YYRESTORETAG = "ZZRT";
+        re2c:define:YYCOPYTAG = "ZZCT";
         re2c:tags:prefix = "zz_";
     */
 }
index 3c7eb852d89148b78374ee3b58e2dd6951b0e759..48df09418e87e0405e425f50930d9ac7e67667d6 100644 (file)
@@ -13,12 +13,11 @@ static inline unsigned parse_oct(const char *s, const char *e)
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3;
-    long zz_0p1;long zz_0p2;long zz_0p3;
+    const char *YYMARKER, *p0, *p1, *p2, *p3;
+    const char *zz_0p0;const char *zz_0p1;const char *zz_0p2;const char *zz_0p3;
     
 {
        char yych;
-       YYCTXMARKER = YYCURSOR;
        yych = *YYCURSOR;
        switch (yych) {
        case '0':
@@ -30,7 +29,9 @@ static void lex(const char *YYCURSOR)
        case '6':
        case '7':
        case '8':
-       case '9':       goto yy4;
+       case '9':
+               zz_0p0 = YYCURSOR;
+               goto yy4;
        default:        goto yy2;
        }
 yy2:
@@ -41,7 +42,7 @@ yy4:
        yych = *(YYMARKER = ++YYCURSOR);
        switch (yych) {
        case '.':
-               zz_0p1 = (YYCURSOR - YYCTXMARKER);
+               zz_0p1 = YYCURSOR;
                goto yy5;
        case '0':
        case '1':
@@ -77,7 +78,7 @@ yy7:
        yych = *++YYCURSOR;
        switch (yych) {
        case '.':
-               zz_0p1 = (YYCURSOR - YYCTXMARKER);
+               zz_0p1 = YYCURSOR;
                goto yy5;
        case '0':
        case '1':
@@ -95,7 +96,7 @@ yy8:
        yych = *++YYCURSOR;
        switch (yych) {
        case '.':
-               zz_0p2 = (YYCURSOR - YYCTXMARKER);
+               zz_0p2 = YYCURSOR;
                goto yy10;
        case '0':
        case '1':
@@ -113,7 +114,7 @@ yy9:
        yych = *++YYCURSOR;
        switch (yych) {
        case '.':
-               zz_0p1 = (YYCURSOR - YYCTXMARKER);
+               zz_0p1 = YYCURSOR;
                goto yy5;
        default:        goto yy6;
        }
@@ -136,7 +137,7 @@ yy11:
        yych = *++YYCURSOR;
        switch (yych) {
        case '.':
-               zz_0p2 = (YYCURSOR - YYCTXMARKER);
+               zz_0p2 = YYCURSOR;
                goto yy10;
        case '0':
        case '1':
@@ -154,7 +155,7 @@ yy12:
        yych = *++YYCURSOR;
        switch (yych) {
        case '.':
-               zz_0p3 = (YYCURSOR - YYCTXMARKER);
+               zz_0p3 = YYCURSOR;
                goto yy14;
        case '0':
        case '1':
@@ -172,7 +173,7 @@ yy13:
        yych = *++YYCURSOR;
        switch (yych) {
        case '.':
-               zz_0p2 = (YYCURSOR - YYCTXMARKER);
+               zz_0p2 = YYCURSOR;
                goto yy10;
        default:        goto yy6;
        }
@@ -195,7 +196,7 @@ yy15:
        yych = *++YYCURSOR;
        switch (yych) {
        case '.':
-               zz_0p3 = (YYCURSOR - YYCTXMARKER);
+               zz_0p3 = YYCURSOR;
                goto yy14;
        case '0':
        case '1':
@@ -225,12 +226,13 @@ yy16:
        default:        goto yy17;
        }
 yy17:
-       p3 = YYCTXMARKER + zz_0p3;
-       p2 = YYCTXMARKER + zz_0p2;
-       p1 = YYCTXMARKER + zz_0p1;
+       p3 = zz_0p3;
+       p2 = zz_0p2;
+       p1 = zz_0p1;
+       p0 = zz_0p0;
        {
             printf("%u.%u.%u.%u\n",
-                parse_oct(YYCTXMARKER, p1),
+                parse_oct(p0, p1),
                 parse_oct(p1 + 1, p2),
                 parse_oct(p2 + 1, p3),
                 parse_oct(p3 + 1, YYCURSOR));
@@ -240,7 +242,7 @@ yy18:
        yych = *++YYCURSOR;
        switch (yych) {
        case '.':
-               zz_0p3 = (YYCURSOR - YYCTXMARKER);
+               zz_0p3 = YYCURSOR;
                goto yy14;
        default:        goto yy6;
        }
index a33553a8f38c8b18488b7fc9bc7b179813b31090..dbe44f3ca6363b29d2bba53258e8db116ee7fb15 100644 (file)
@@ -12,8 +12,8 @@ static inline unsigned parse_oct(const char *s, const char *e)
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3;
-    /*!tags:re2c*/
+    const char *YYMARKER, *p0, *p1, *p2, *p3;
+    /*!tags:re2c format = "const char *@@;"; */
     /*!re2c
         re2c:define:YYCTYPE = char;
         re2c:yyfill:enable = 0;
@@ -23,12 +23,13 @@ static void lex(const char *YYCURSOR)
 
         * { printf("error\n"); return; }
 
+        @p0
           oct @p1
         d oct @p2
         d oct @p3
         d oct {
             printf("%u.%u.%u.%u\n",
-                parse_oct(YYCTXMARKER, p1),
+                parse_oct(p0, p1),
                 parse_oct(p1 + 1, p2),
                 parse_oct(p2 + 1, p3),
                 parse_oct(p3 + 1, YYCURSOR));
index 0725e30b41e6a3ea3f3ad2c14db86523ae65f290..dd33a2f2836390406173bb8d15bb017e3b1cb337 100644 (file)
@@ -23,7 +23,7 @@ struct input_t {
     char *cur;
     char *mar;
     char *tok;
-    long yyt1p1;long yyt1p2;long yyt1p3;
+    char *yyt1p1;char *yyt1p2;char *yyt1p3;
     bool eof;
 
     input_t()
@@ -51,6 +51,7 @@ struct input_t {
         cur -= free;
         mar -= free;
         tok -= free;
+        yyt1p1 -= free;yyt1p2 -= free;yyt1p3 -= free;
         lim += fread(lim, 1, free, stdin);
         if (lim < buf + SIZE) {
             eof = true;
@@ -67,10 +68,9 @@ static bool lex(input_t & in)
 #define YYSKIP()           ++in.cur
 #define YYBACKUP()         in.mar = in.cur
 #define YYRESTORE()        in.cur = in.mar
-#define YYBACKUPCTX()      in.tok = in.cur
-#define YYRESTORECTX(dist) in.cur = in.tok + dist
-#define YYTAG(tag, dist)   tag = in.tok + dist
-#define YYDIST()           in.cur - in.tok
+#define YYBACKUPTAG(t)     t = in.cur
+#define YYRESTORETAG(t)    in.cur = t
+#define YYCOPYTAG(t1, t2)  t1 = t2
 #define YYLESSTHAN(n)      in.lim - in.cur < n
 loop:
     in.tok = in.cur;
@@ -78,7 +78,6 @@ loop:
     
 {
        char yych;
-       YYBACKUPCTX ();
        if (YYLESSTHAN (16)) if (!in.fill(16)) return false;
        yych = YYPEEK ();
        switch (yych) {
@@ -108,7 +107,7 @@ yy6:
        yych = YYPEEK ();
        switch (yych) {
        case '.':
-               in.yyt1p1 = YYDIST();
+               YYBACKUPTAG (in.yyt1p1);
                goto yy7;
        case '0':
        case '1':
@@ -146,7 +145,7 @@ yy9:
        yych = YYPEEK ();
        switch (yych) {
        case '.':
-               in.yyt1p1 = YYDIST();
+               YYBACKUPTAG (in.yyt1p1);
                goto yy7;
        case '0':
        case '1':
@@ -165,7 +164,7 @@ yy10:
        yych = YYPEEK ();
        switch (yych) {
        case '.':
-               in.yyt1p2 = YYDIST();
+               YYBACKUPTAG (in.yyt1p2);
                goto yy12;
        case '0':
        case '1':
@@ -184,7 +183,7 @@ yy11:
        yych = YYPEEK ();
        switch (yych) {
        case '.':
-               in.yyt1p1 = YYDIST();
+               YYBACKUPTAG (in.yyt1p1);
                goto yy7;
        default:        goto yy8;
        }
@@ -209,7 +208,7 @@ yy13:
        yych = YYPEEK ();
        switch (yych) {
        case '.':
-               in.yyt1p2 = YYDIST();
+               YYBACKUPTAG (in.yyt1p2);
                goto yy12;
        case '0':
        case '1':
@@ -228,7 +227,7 @@ yy14:
        yych = YYPEEK ();
        switch (yych) {
        case '.':
-               in.yyt1p3 = YYDIST();
+               YYBACKUPTAG (in.yyt1p3);
                goto yy16;
        case '0':
        case '1':
@@ -247,7 +246,7 @@ yy15:
        yych = YYPEEK ();
        switch (yych) {
        case '.':
-               in.yyt1p2 = YYDIST();
+               YYBACKUPTAG (in.yyt1p2);
                goto yy12;
        default:        goto yy8;
        }
@@ -272,7 +271,7 @@ yy17:
        yych = YYPEEK ();
        switch (yych) {
        case '.':
-               in.yyt1p3 = YYDIST();
+               YYBACKUPTAG (in.yyt1p3);
                goto yy16;
        case '0':
        case '1':
@@ -308,15 +307,15 @@ yy19:
        yych = YYPEEK ();
        switch (yych) {
        case '.':
-               in.yyt1p3 = YYDIST();
+               YYBACKUPTAG (in.yyt1p3);
                goto yy16;
        default:        goto yy8;
        }
 yy20:
        YYSKIP ();
-       YYTAG(p3, in.yyt1p3);
-       YYTAG(p2, in.yyt1p2);
-       YYTAG(p1, in.yyt1p1);
+       YYCOPYTAG (p3, in.yyt1p3);
+       YYCOPYTAG (p2, in.yyt1p2);
+       YYCOPYTAG (p1, in.yyt1p1);
        {
             printf("> %u.%u.%u.%u\n",
                 parse_oct(in.tok, p1),
index 17dcc3c267d3f19e5692047f0e9f02f2de7810ba..759610b2d257b2079c11ddd8bd799c69176cc572 100644 (file)
@@ -21,7 +21,7 @@ struct input_t {
     char *cur;
     char *mar;
     char *tok;
-    /*!tags:re2c*/
+    /*!tags:re2c format = "char *@@;"; */
     bool eof;
 
     input_t()
@@ -49,6 +49,7 @@ struct input_t {
         cur -= free;
         mar -= free;
         tok -= free;
+        /*!tags:re2c format = "@@ -= free;"; */
         lim += fread(lim, 1, free, stdin);
         if (lim < buf + SIZE) {
             eof = true;
@@ -65,10 +66,9 @@ static bool lex(input_t & in)
 #define YYSKIP()           ++in.cur
 #define YYBACKUP()         in.mar = in.cur
 #define YYRESTORE()        in.cur = in.mar
-#define YYBACKUPCTX()      in.tok = in.cur
-#define YYRESTORECTX(dist) in.cur = in.tok + dist
-#define YYTAG(tag, dist)   tag = in.tok + dist
-#define YYDIST()           in.cur - in.tok
+#define YYBACKUPTAG(t)     t = in.cur
+#define YYRESTORETAG(t)    in.cur = t
+#define YYCOPYTAG(t1, t2)  t1 = t2
 #define YYLESSTHAN(n)      in.lim - in.cur < n
 loop:
     in.tok = in.cur;
index 6f64700e3c968d9733eff7c741d7552b0d047368..4f8d199bbcc1b2f22e30786d57a5e1fa8558f78d 100644 (file)
@@ -23,7 +23,7 @@ struct input_t {
     char *cur;
     char *mar;
     char *tok;
-    long yyt1p1;long yyt1p2;long yyt1p3;
+    char *yyt1p1;char *yyt1p2;char *yyt1p3;
     bool eof;
 
     input_t()
@@ -51,6 +51,7 @@ struct input_t {
         cur -= free;
         mar -= free;
         tok -= free;
+        yyt1p1 -= free;yyt1p2 -= free;yyt1p3 -= free;
         lim += fread(lim, 1, free, stdin);
         if (lim < buf + SIZE) {
             eof = true;
@@ -69,7 +70,6 @@ loop:
     
 {
        char yych;
-       in.tok = in.cur;
        if ((in.lim - in.cur) < 16) if (!in.fill(16)) return false;
        yych = *in.cur;
        switch (yych) {
@@ -97,7 +97,7 @@ yy6:
        yych = *(in.mar = ++in.cur);
        switch (yych) {
        case '.':
-               in.yyt1p1 = (in.cur - in.tok);
+               in.yyt1p1 = in.cur;
                goto yy7;
        case '0':
        case '1':
@@ -133,7 +133,7 @@ yy9:
        yych = *++in.cur;
        switch (yych) {
        case '.':
-               in.yyt1p1 = (in.cur - in.tok);
+               in.yyt1p1 = in.cur;
                goto yy7;
        case '0':
        case '1':
@@ -151,7 +151,7 @@ yy10:
        yych = *++in.cur;
        switch (yych) {
        case '.':
-               in.yyt1p2 = (in.cur - in.tok);
+               in.yyt1p2 = in.cur;
                goto yy12;
        case '0':
        case '1':
@@ -169,7 +169,7 @@ yy11:
        yych = *++in.cur;
        switch (yych) {
        case '.':
-               in.yyt1p1 = (in.cur - in.tok);
+               in.yyt1p1 = in.cur;
                goto yy7;
        default:        goto yy8;
        }
@@ -192,7 +192,7 @@ yy13:
        yych = *++in.cur;
        switch (yych) {
        case '.':
-               in.yyt1p2 = (in.cur - in.tok);
+               in.yyt1p2 = in.cur;
                goto yy12;
        case '0':
        case '1':
@@ -210,7 +210,7 @@ yy14:
        yych = *++in.cur;
        switch (yych) {
        case '.':
-               in.yyt1p3 = (in.cur - in.tok);
+               in.yyt1p3 = in.cur;
                goto yy16;
        case '0':
        case '1':
@@ -228,7 +228,7 @@ yy15:
        yych = *++in.cur;
        switch (yych) {
        case '.':
-               in.yyt1p2 = (in.cur - in.tok);
+               in.yyt1p2 = in.cur;
                goto yy12;
        default:        goto yy8;
        }
@@ -251,7 +251,7 @@ yy17:
        yych = *++in.cur;
        switch (yych) {
        case '.':
-               in.yyt1p3 = (in.cur - in.tok);
+               in.yyt1p3 = in.cur;
                goto yy16;
        case '0':
        case '1':
@@ -285,15 +285,15 @@ yy19:
        yych = *++in.cur;
        switch (yych) {
        case '.':
-               in.yyt1p3 = (in.cur - in.tok);
+               in.yyt1p3 = in.cur;
                goto yy16;
        default:        goto yy8;
        }
 yy20:
        ++in.cur;
-       p3 = in.tok + in.yyt1p3;
-       p2 = in.tok + in.yyt1p2;
-       p1 = in.tok + in.yyt1p1;
+       p3 = in.yyt1p3;
+       p2 = in.yyt1p2;
+       p1 = in.yyt1p1;
        {
             printf("> %u.%u.%u.%u\n",
                 parse_oct(in.tok, p1),
index 5ae2ecacf46a7c48b3c553c9fcaf29326e6d1ed8..78cd325bba66afd04b89ac70efee42221d3d2cd4 100644 (file)
@@ -21,7 +21,7 @@ struct input_t {
     char *cur;
     char *mar;
     char *tok;
-    /*!tags:re2c*/
+    /*!tags:re2c format = "char *@@;"; */
     bool eof;
 
     input_t()
@@ -49,6 +49,7 @@ struct input_t {
         cur -= free;
         mar -= free;
         tok -= free;
+        /*!tags:re2c format = "@@ -= free;"; */
         lim += fread(lim, 1, free, stdin);
         if (lim < buf + SIZE) {
             eof = true;
@@ -69,7 +70,6 @@ loop:
         re2c:define:YYCURSOR = in.cur;
         re2c:define:YYLIMIT = in.lim;
         re2c:define:YYMARKER = in.mar;
-        re2c:define:YYCTXMARKER = in.tok;
         re2c:define:YYFILL = "if (!in.fill(@@)) return false;";
         re2c:define:YYFILL:naked = 1;
         re2c:tags:expression = "in.@@";
index bc4c4f4fddc2c245b2fe503f4133f6d2a931437b..f017f3bf9b29f127f9242268af1e172dd3c7f570 100644 (file)
@@ -11,13 +11,13 @@ static inline unsigned parse_oct(const char *s, const char *e)
     return oct;
 }
 
-struct contexts_t
+struct tags_t
 {
-    long zz_0p1;long zz_0p2;long zz_0p3;
+    const char *yyt0p0;const char *yyt0p1;const char *yyt0p2;const char *yyt0p3;
 
-    contexts_t();
-    void push(long arg_zz_0p1,long arg_zz_0p2,long arg_zz_0p3);
-    void pop(long &arg_zz_0p1,long &arg_zz_0p2,long &arg_zz_0p3);
+    tags_t();
+    void push(const char *arg_yyt0p0,const char *arg_yyt0p1,const char *arg_yyt0p2,const char *arg_yyt0p3);
+    void pop(const char *&arg_yyt0p0,const char *&arg_yyt0p1,const char *&arg_yyt0p2,const char *&arg_yyt0p3);
 };
 
 static void lex(const char *s)
@@ -26,16 +26,14 @@ static void lex(const char *s)
 #define YYSKIP()           ++s
 #define YYBACKUP()         marker = s
 #define YYRESTORE()        s = marker
-#define YYBACKUPCTX()      basectx = s
-#define YYRESTORECTX(dist) s = basectx + dist
-#define ZZ_CTX(tag, dist)  tag = basectx + dist
-#define ZZ_DIST()          (s - basectx)
-    const char *marker, *basectx, *p1, *p2, *p3;
-    contexts_t ctxs;
+#define YYBACKUPTAG(t)     t = s
+#define YYRESTORETAG(t)    s = t
+#define YYCOPYTAG(t1, t2)  t1 = t2
+    const char *marker, *p0, *p1, *p2, *p3;
+    tags_t tags;
     
 {
        char yych;
-       YYBACKUPCTX ();
        yych = YYPEEK ();
        switch (yych) {
        case '0':
@@ -47,7 +45,9 @@ static void lex(const char *s)
        case '6':
        case '7':
        case '8':
-       case '9':       goto yy4;
+       case '9':
+               YYBACKUPTAG (tags.yyt0p0);
+               goto yy4;
        default:        goto yy2;
        }
 yy2:
@@ -60,7 +60,7 @@ yy4:
        yych = YYPEEK ();
        switch (yych) {
        case '.':
-               ctxs.zz_0p1 = ZZ_DIST();
+               YYBACKUPTAG (tags.yyt0p1);
                goto yy5;
        case '0':
        case '1':
@@ -98,7 +98,7 @@ yy7:
        yych = YYPEEK ();
        switch (yych) {
        case '.':
-               ctxs.zz_0p1 = ZZ_DIST();
+               YYBACKUPTAG (tags.yyt0p1);
                goto yy5;
        case '0':
        case '1':
@@ -117,7 +117,7 @@ yy8:
        yych = YYPEEK ();
        switch (yych) {
        case '.':
-               ctxs.zz_0p2 = ZZ_DIST();
+               YYBACKUPTAG (tags.yyt0p2);
                goto yy10;
        case '0':
        case '1':
@@ -136,7 +136,7 @@ yy9:
        yych = YYPEEK ();
        switch (yych) {
        case '.':
-               ctxs.zz_0p1 = ZZ_DIST();
+               YYBACKUPTAG (tags.yyt0p1);
                goto yy5;
        default:        goto yy6;
        }
@@ -161,7 +161,7 @@ yy11:
        yych = YYPEEK ();
        switch (yych) {
        case '.':
-               ctxs.zz_0p2 = ZZ_DIST();
+               YYBACKUPTAG (tags.yyt0p2);
                goto yy10;
        case '0':
        case '1':
@@ -180,7 +180,7 @@ yy12:
        yych = YYPEEK ();
        switch (yych) {
        case '.':
-               ctxs.zz_0p3 = ZZ_DIST();
+               YYBACKUPTAG (tags.yyt0p3);
                goto yy14;
        case '0':
        case '1':
@@ -199,7 +199,7 @@ yy13:
        yych = YYPEEK ();
        switch (yych) {
        case '.':
-               ctxs.zz_0p2 = ZZ_DIST();
+               YYBACKUPTAG (tags.yyt0p2);
                goto yy10;
        default:        goto yy6;
        }
@@ -224,7 +224,7 @@ yy15:
        yych = YYPEEK ();
        switch (yych) {
        case '.':
-               ctxs.zz_0p3 = ZZ_DIST();
+               YYBACKUPTAG (tags.yyt0p3);
                goto yy14;
        case '0':
        case '1':
@@ -254,12 +254,13 @@ yy16:
        default:        goto yy17;
        }
 yy17:
-       ZZ_CTX(p3, ctxs.zz_0p3);
-       ZZ_CTX(p2, ctxs.zz_0p2);
-       ZZ_CTX(p1, ctxs.zz_0p1);
+       YYCOPYTAG (p3, tags.yyt0p3);
+       YYCOPYTAG (p2, tags.yyt0p2);
+       YYCOPYTAG (p1, tags.yyt0p1);
+       YYCOPYTAG (p0, tags.yyt0p0);
        {
             printf("%u.%u.%u.%u\n",
-                parse_oct(basectx, p1),
+                parse_oct(p0, p1),
                 parse_oct(p1 + 1, p2),
                 parse_oct(p2 + 1, p3),
                 parse_oct(p3 + 1, s));
@@ -270,7 +271,7 @@ yy18:
        yych = YYPEEK ();
        switch (yych) {
        case '.':
-               ctxs.zz_0p3 = ZZ_DIST();
+               YYBACKUPTAG (tags.yyt0p3);
                goto yy14;
        default:        goto yy6;
        }
@@ -298,16 +299,16 @@ yy20:
 
 }
 
-contexts_t::contexts_t(): zz_0p1(0),zz_0p2(0),zz_0p3(0) {}
+tags_t::tags_t(): yyt0p0(0),yyt0p1(0),yyt0p2(0),yyt0p3(0) {}
 
-void contexts_t::push(long arg_zz_0p1,long arg_zz_0p2,long arg_zz_0p3)
+void tags_t::push(const char *arg_yyt0p0,const char *arg_yyt0p1,const char *arg_yyt0p2,const char *arg_yyt0p3)
 {
-    zz_0p1 = arg_zz_0p1;zz_0p2 = arg_zz_0p2;zz_0p3 = arg_zz_0p3;
+    yyt0p0 = arg_yyt0p0;yyt0p1 = arg_yyt0p1;yyt0p2 = arg_yyt0p2;yyt0p3 = arg_yyt0p3;
 }
 
-void contexts_t::pop(long &arg_zz_0p1,long &arg_zz_0p2,long &arg_zz_0p3)
+void tags_t::pop(const char *&arg_yyt0p0,const char *&arg_yyt0p1,const char *&arg_yyt0p2,const char *&arg_yyt0p3)
 {
-    arg_zz_0p1 = zz_0p1;arg_zz_0p2 = zz_0p2;arg_zz_0p3 = zz_0p3;
+    arg_yyt0p0 = yyt0p0;arg_yyt0p1 = yyt0p1;arg_yyt0p2 = yyt0p2;arg_yyt0p3 = yyt0p3;
 }
 
 int main(int argc, char **argv)
index 564f2dfb661a628e5a0ec4ca7eaa4835137f4f76..41c8efe32a7a529388f29b58cba77724858166d2 100644 (file)
@@ -10,16 +10,16 @@ static inline unsigned parse_oct(const char *s, const char *e)
     return oct;
 }
 
-struct contexts_t
+struct tags_t
 {
-    /*!tags:re2c format = "long @@;"; */
+    /*!tags:re2c format = "const char *@@;"; */
 
-    contexts_t();
+    tags_t();
     void push(/*!tags:re2c
-        format = "long arg_@@";
+        format = "const char *arg_@@";
         separator = ","; */);
     void pop(/*!tags:re2c
-        format = "long &arg_@@";
+        format = "const char *&arg_@@";
         separator = ","; */);
 };
 
@@ -29,32 +29,28 @@ static void lex(const char *s)
 #define YYSKIP()           ++s
 #define YYBACKUP()         marker = s
 #define YYRESTORE()        s = marker
-#define YYBACKUPCTX()      basectx = s
-#define YYRESTORECTX(dist) s = basectx + dist
-#define ZZ_CTX(tag, dist)  tag = basectx + dist
-#define ZZ_DIST()          (s - basectx)
-    const char *marker, *basectx, *p1, *p2, *p3;
-    contexts_t ctxs;
+#define YYBACKUPTAG(t)     t = s
+#define YYRESTORETAG(t)    s = t
+#define YYCOPYTAG(t1, t2)  t1 = t2
+    const char *marker, *p0, *p1, *p2, *p3;
+    tags_t tags;
     /*!re2c
         re2c:define:YYCTYPE = char;
         re2c:yyfill:enable = 0;
-
-        re2c:define:YYTAG = "ZZ_CTX";
-        re2c:define:YYDIST = "ZZ_DIST";
-        re2c:tags:prefix = "zz_";
-        re2c:tags:expression = "ctxs.@@";
+        re2c:tags:expression = "tags.@@";
 
         oct = [0-9]{1,3};
         d   = ".";
 
         * { printf("error\n"); return; }
 
+        @p0
           oct @p1
         d oct @p2
         d oct @p3
         d oct {
             printf("%u.%u.%u.%u\n",
-                parse_oct(basectx, p1),
+                parse_oct(p0, p1),
                 parse_oct(p1 + 1, p2),
                 parse_oct(p2 + 1, p3),
                 parse_oct(p3 + 1, s));
@@ -63,20 +59,20 @@ static void lex(const char *s)
     */
 }
 
-contexts_t::contexts_t(): /*!tags:re2c
+tags_t::tags_t(): /*!tags:re2c
     format = "@@(0)";
     separator = ",";
 */ {}
 
-void contexts_t::push(/*!tags:re2c
-    format = "long arg_@@";
+void tags_t::push(/*!tags:re2c
+    format = "const char *arg_@@";
     separator = ","; */)
 {
     /*!tags:re2c format = "@@ = arg_@@;"; */
 }
 
-void contexts_t::pop(/*!tags:re2c
-    format = "long &arg_@@";
+void tags_t::pop(/*!tags:re2c
+    format = "const char *&arg_@@";
     separator = ","; */)
 {
     /*!tags:re2c format = "arg_@@ = @@;"; */
index 093de8ea1b4a8687bd2d2d7a696ae11fe42b5e30..46a5d64552106adfa29b25121ae418b21a90884b 100644 (file)
@@ -11,23 +11,22 @@ static inline unsigned parse_oct(const char *s, const char *e)
     return oct;
 }
 
-struct contexts_t
+struct tags_t
 {
-    long zz_0p1;long zz_0p2;long zz_0p3;
+    const char *yyt0p0;const char *yyt0p1;const char *yyt0p2;const char *yyt0p3;
 
-    contexts_t();
-    void push(long arg_zz_0p1,long arg_zz_0p2,long arg_zz_0p3);
-    void pop(long &arg_zz_0p1,long &arg_zz_0p2,long &arg_zz_0p3);
+    tags_t();
+    void push(const char *arg_yyt0p0,const char *arg_yyt0p1,const char *arg_yyt0p2,const char *arg_yyt0p3);
+    void pop(const char *&arg_yyt0p0,const char *&arg_yyt0p1,const char *&arg_yyt0p2,const char *&arg_yyt0p3);
 };
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3;
-    contexts_t ctxs;
+    const char *YYMARKER, *p0, *p1, *p2, *p3;
+    tags_t tags;
     
 {
        char yych;
-       YYCTXMARKER = YYCURSOR;
        yych = *YYCURSOR;
        switch (yych) {
        case '0':
@@ -39,7 +38,9 @@ static void lex(const char *YYCURSOR)
        case '6':
        case '7':
        case '8':
-       case '9':       goto yy4;
+       case '9':
+               tags.yyt0p0 = YYCURSOR;
+               goto yy4;
        default:        goto yy2;
        }
 yy2:
@@ -50,7 +51,7 @@ yy4:
        yych = *(YYMARKER = ++YYCURSOR);
        switch (yych) {
        case '.':
-               ctxs.zz_0p1 = (YYCURSOR - YYCTXMARKER);
+               tags.yyt0p1 = YYCURSOR;
                goto yy5;
        case '0':
        case '1':
@@ -86,7 +87,7 @@ yy7:
        yych = *++YYCURSOR;
        switch (yych) {
        case '.':
-               ctxs.zz_0p1 = (YYCURSOR - YYCTXMARKER);
+               tags.yyt0p1 = YYCURSOR;
                goto yy5;
        case '0':
        case '1':
@@ -104,7 +105,7 @@ yy8:
        yych = *++YYCURSOR;
        switch (yych) {
        case '.':
-               ctxs.zz_0p2 = (YYCURSOR - YYCTXMARKER);
+               tags.yyt0p2 = YYCURSOR;
                goto yy10;
        case '0':
        case '1':
@@ -122,7 +123,7 @@ yy9:
        yych = *++YYCURSOR;
        switch (yych) {
        case '.':
-               ctxs.zz_0p1 = (YYCURSOR - YYCTXMARKER);
+               tags.yyt0p1 = YYCURSOR;
                goto yy5;
        default:        goto yy6;
        }
@@ -145,7 +146,7 @@ yy11:
        yych = *++YYCURSOR;
        switch (yych) {
        case '.':
-               ctxs.zz_0p2 = (YYCURSOR - YYCTXMARKER);
+               tags.yyt0p2 = YYCURSOR;
                goto yy10;
        case '0':
        case '1':
@@ -163,7 +164,7 @@ yy12:
        yych = *++YYCURSOR;
        switch (yych) {
        case '.':
-               ctxs.zz_0p3 = (YYCURSOR - YYCTXMARKER);
+               tags.yyt0p3 = YYCURSOR;
                goto yy14;
        case '0':
        case '1':
@@ -181,7 +182,7 @@ yy13:
        yych = *++YYCURSOR;
        switch (yych) {
        case '.':
-               ctxs.zz_0p2 = (YYCURSOR - YYCTXMARKER);
+               tags.yyt0p2 = YYCURSOR;
                goto yy10;
        default:        goto yy6;
        }
@@ -204,7 +205,7 @@ yy15:
        yych = *++YYCURSOR;
        switch (yych) {
        case '.':
-               ctxs.zz_0p3 = (YYCURSOR - YYCTXMARKER);
+               tags.yyt0p3 = YYCURSOR;
                goto yy14;
        case '0':
        case '1':
@@ -234,12 +235,13 @@ yy16:
        default:        goto yy17;
        }
 yy17:
-       p3 = YYCTXMARKER + ctxs.zz_0p3;
-       p2 = YYCTXMARKER + ctxs.zz_0p2;
-       p1 = YYCTXMARKER + ctxs.zz_0p1;
+       p3 = tags.yyt0p3;
+       p2 = tags.yyt0p2;
+       p1 = tags.yyt0p1;
+       p0 = tags.yyt0p0;
        {
             printf("%u.%u.%u.%u\n",
-                parse_oct(YYCTXMARKER, p1),
+                parse_oct(p0, p1),
                 parse_oct(p1 + 1, p2),
                 parse_oct(p2 + 1, p3),
                 parse_oct(p3 + 1, YYCURSOR));
@@ -249,7 +251,7 @@ yy18:
        yych = *++YYCURSOR;
        switch (yych) {
        case '.':
-               ctxs.zz_0p3 = (YYCURSOR - YYCTXMARKER);
+               tags.yyt0p3 = YYCURSOR;
                goto yy14;
        default:        goto yy6;
        }
@@ -276,16 +278,16 @@ yy20:
 
 }
 
-contexts_t::contexts_t(): zz_0p1(0),zz_0p2(0),zz_0p3(0) {}
+tags_t::tags_t(): yyt0p0(0),yyt0p1(0),yyt0p2(0),yyt0p3(0) {}
 
-void contexts_t::push(long arg_zz_0p1,long arg_zz_0p2,long arg_zz_0p3)
+void tags_t::push(const char *arg_yyt0p0,const char *arg_yyt0p1,const char *arg_yyt0p2,const char *arg_yyt0p3)
 {
-    zz_0p1 = arg_zz_0p1;zz_0p2 = arg_zz_0p2;zz_0p3 = arg_zz_0p3;
+    yyt0p0 = arg_yyt0p0;yyt0p1 = arg_yyt0p1;yyt0p2 = arg_yyt0p2;yyt0p3 = arg_yyt0p3;
 }
 
-void contexts_t::pop(long &arg_zz_0p1,long &arg_zz_0p2,long &arg_zz_0p3)
+void tags_t::pop(const char *&arg_yyt0p0,const char *&arg_yyt0p1,const char *&arg_yyt0p2,const char *&arg_yyt0p3)
 {
-    arg_zz_0p1 = zz_0p1;arg_zz_0p2 = zz_0p2;arg_zz_0p3 = zz_0p3;
+    arg_yyt0p0 = yyt0p0;arg_yyt0p1 = yyt0p1;arg_yyt0p2 = yyt0p2;arg_yyt0p3 = yyt0p3;
 }
 
 int main(int argc, char **argv)
index 40f288643a908f4b84f0e757eb9170176bf2c55d..2b95261d2e3e2284330c2066b097bbfaef1081b1 100644 (file)
@@ -10,41 +10,40 @@ static inline unsigned parse_oct(const char *s, const char *e)
     return oct;
 }
 
-struct contexts_t
+struct tags_t
 {
-    /*!tags:re2c format = "long @@;"; */
+    /*!tags:re2c format = "const char *@@;"; */
 
-    contexts_t();
+    tags_t();
     void push(/*!tags:re2c
-        format = "long arg_@@";
+        format = "const char *arg_@@";
         separator = ","; */);
     void pop(/*!tags:re2c
-        format = "long &arg_@@";
+        format = "const char *&arg_@@";
         separator = ","; */);
 };
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3;
-    contexts_t ctxs;
+    const char *YYMARKER, *p0, *p1, *p2, *p3;
+    tags_t tags;
     /*!re2c
         re2c:define:YYCTYPE = char;
         re2c:yyfill:enable = 0;
-
-        re2c:tags:prefix = "zz_";
-        re2c:tags:expression = "ctxs.@@";
+        re2c:tags:expression = "tags.@@";
 
         oct = [0-9]{1,3};
         d   = ".";
 
         * { printf("error\n"); return; }
 
+        @p0
           oct @p1
         d oct @p2
         d oct @p3
         d oct {
             printf("%u.%u.%u.%u\n",
-                parse_oct(YYCTXMARKER, p1),
+                parse_oct(p0, p1),
                 parse_oct(p1 + 1, p2),
                 parse_oct(p2 + 1, p3),
                 parse_oct(p3 + 1, YYCURSOR));
@@ -53,20 +52,20 @@ static void lex(const char *YYCURSOR)
     */
 }
 
-contexts_t::contexts_t(): /*!tags:re2c
+tags_t::tags_t(): /*!tags:re2c
     format = "@@(0)";
     separator = ",";
 */ {}
 
-void contexts_t::push(/*!tags:re2c
-    format = "long arg_@@";
+void tags_t::push(/*!tags:re2c
+    format = "const char *arg_@@";
     separator = ","; */)
 {
     /*!tags:re2c format = "@@ = arg_@@;"; */
 }
 
-void contexts_t::pop(/*!tags:re2c
-    format = "long &arg_@@";
+void tags_t::pop(/*!tags:re2c
+    format = "const char *&arg_@@";
     separator = ","; */)
 {
     /*!tags:re2c format = "arg_@@ = @@;"; */
index 96f0c53152069380ed3e05f7a9369622f3e447b0..f48d2e4a62ccc87d0575b42de62bede36dd835b6 100644 (file)
@@ -2,7 +2,6 @@
 
 {
        YYCTYPE yych;
-       YYCTXMARKER = YYCURSOR;
        if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
        switch (yych) {
@@ -16,21 +15,21 @@ yy4:
        ++YYCURSOR;
        switch ((yych = *YYCURSOR)) {
        case 'b':
-               yyt0p = (YYCURSOR - YYCTXMARKER);
+               yyt0p = YYCURSOR;
                goto yy6;
        case 'c':
-               yyt0 = yyt0p = (YYCURSOR - YYCTXMARKER);
+               yyt0 = yyt0p = YYCURSOR;
                goto yy8;
        case 'd':
-               yyt0 = yyt0p = (YYCURSOR - YYCTXMARKER);
+               yyt0 = yyt0p = YYCURSOR;
                goto yy11;
        default:
-               yyt0 = yyt0p = (YYCURSOR - YYCTXMARKER);
+               yyt0 = yyt0p = YYCURSOR;
                goto yy5;
        }
 yy5:
-       YYCURSOR = YYCTXMARKER + yyt0;
-       p = YYCTXMARKER + yyt0p;
+       YYCURSOR = yyt0;
+       p = yyt0p;
        { 1 p }
 yy6:
        ++YYCURSOR;
@@ -39,13 +38,13 @@ yy6:
        switch (yych) {
        case 'b':       goto yy6;
        case 'c':
-               yyt0 = (YYCURSOR - YYCTXMARKER);
+               yyt0 = YYCURSOR;
                goto yy8;
        case 'd':
-               yyt0 = (YYCURSOR - YYCTXMARKER);
+               yyt0 = YYCURSOR;
                goto yy11;
        default:
-               yyt0 = (YYCURSOR - YYCTXMARKER);
+               yyt0 = YYCURSOR;
                goto yy5;
        }
 yy8:
@@ -57,8 +56,8 @@ yy8:
        default:        goto yy10;
        }
 yy10:
-       YYCURSOR = YYCTXMARKER + yyt0;
-       p = YYCTXMARKER + yyt0p;
+       YYCURSOR = yyt0;
+       p = yyt0p;
        { 2 p }
 yy11:
        ++YYCURSOR;
@@ -74,7 +73,6 @@ yy11:
 
 {
        YYCTYPE yych;
-       YYCTXMARKER = YYCURSOR;
        if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
        switch (yych) {
@@ -88,17 +86,17 @@ yy17:
        ++YYCURSOR;
        switch ((yych = *YYCURSOR)) {
        case 'b':
-               yyt0p = yyt1p = (YYCURSOR - YYCTXMARKER);
+               yyt0p = yyt1p = YYCURSOR;
                goto yy19;
        case 'c':
-               yyt0p = yyt1p = (YYCURSOR - YYCTXMARKER);
+               yyt0p = yyt1p = YYCURSOR;
                goto yy21;
        default:
-               yyt0p = (YYCURSOR - YYCTXMARKER);
+               yyt0p = YYCURSOR;
                goto yy18;
        }
 yy18:
-       p = YYCTXMARKER + yyt0p;
+       p = yyt0p;
        { 1 p }
 yy19:
        ++YYCURSOR;
@@ -107,7 +105,7 @@ yy19:
        switch (yych) {
        case 'b':       goto yy19;
        case 'c':
-               yyt0p = (YYCURSOR - YYCTXMARKER);
+               yyt0p = YYCURSOR;
                goto yy21;
        default:        goto yy18;
        }
@@ -120,8 +118,8 @@ yy21:
        default:        goto yy23;
        }
 yy23:
-       YYCURSOR = YYCTXMARKER + yyt0p;
-       p = YYCTXMARKER + yyt1p;
+       YYCURSOR = yyt0p;
+       p = yyt1p;
        { 2 p }
 }
 
@@ -130,7 +128,6 @@ yy23:
 {
        YYCTYPE yych;
        unsigned int yyaccept = 0;
-       YYCTXMARKER = YYCURSOR;
        if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
        switch (yych) {
@@ -145,17 +142,17 @@ yy28:
        yych = *(YYMARKER = ++YYCURSOR);
        switch (yych) {
        case 'b':
-               yyt0p = (YYCURSOR - YYCTXMARKER);
+               yyt0p = YYCURSOR;
                goto yy30;
        case 'c':
-               yyt0p = yyt1 = (YYCURSOR - YYCTXMARKER);
+               yyt0p = yyt1 = YYCURSOR;
                goto yy32;
        default:
-               yyt0p = (YYCURSOR - YYCTXMARKER);
+               yyt0p = YYCURSOR;
                goto yy29;
        }
 yy29:
-       p = YYCTXMARKER + yyt0p;
+       p = yyt0p;
        { 1 p }
 yy30:
        yyaccept = 1;
@@ -165,7 +162,7 @@ yy30:
        switch (yych) {
        case 'b':       goto yy30;
        case 'c':
-               yyt1 = (YYCURSOR - YYCTXMARKER);
+               yyt1 = YYCURSOR;
                goto yy32;
        default:        goto yy29;
        }
@@ -181,7 +178,7 @@ yy33:
        YYCURSOR = YYMARKER;
        switch (yyaccept) {
        case 0: 
-               yyt0p = (YYCURSOR - YYCTXMARKER);
+               yyt0p = YYCURSOR;
                goto yy29;
        case 1:         goto yy29;
        default:        goto yy35;
@@ -196,8 +193,8 @@ yy34:
        default:        goto yy35;
        }
 yy35:
-       YYCURSOR = YYCTXMARKER + yyt1;
-       p = YYCTXMARKER + yyt0p;
+       YYCURSOR = yyt1;
+       p = yyt0p;
        { 2 p }
 }
 
@@ -206,7 +203,6 @@ yy35:
 {
        YYCTYPE yych;
        unsigned int yyaccept = 0;
-       YYCTXMARKER = YYCURSOR;
        if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
        switch (yych) {
@@ -221,7 +217,7 @@ yy40:
        yych = *++YYCURSOR;
        switch (yych) {
        case 'b':
-               yyt0p = (YYCURSOR - YYCTXMARKER);
+               yyt0p = YYCURSOR;
                goto yy41;
        default:        goto yy39;
        }
@@ -233,12 +229,12 @@ yy41:
        switch (yych) {
        case 'b':       goto yy41;
        case 'c':
-               yyt1 = (YYCURSOR - YYCTXMARKER);
+               yyt1 = YYCURSOR;
                goto yy44;
        default:        goto yy43;
        }
 yy43:
-       p = YYCTXMARKER + yyt0p;
+       p = yyt0p;
        { 1 p }
 yy44:
        ++YYCURSOR;
@@ -265,8 +261,8 @@ yy46:
        default:        goto yy47;
        }
 yy47:
-       YYCURSOR = YYCTXMARKER + yyt1;
-       p = YYCTXMARKER + yyt0p;
+       YYCURSOR = yyt1;
+       p = yyt0p;
        { 2 p }
 }
 
index 0a0afe7e0239e38d90676529b8847ad8c25ca251..fc0be967558022dca004e0ad659286183658d9f9 100644 (file)
@@ -9,12 +9,11 @@
 
 {
        YYCTYPE yych;
-       YYCTXMARKER = YYCURSOR;
        if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
        switch (yych) {
        case 'a':
-               yyt0p = (YYCURSOR - YYCTXMARKER);
+               yyt0p = YYCURSOR;
                goto yy4;
        case 'b':       goto yy5;
        default:        goto yy2;
@@ -31,7 +30,7 @@ yy4:
        }
 yy5:
        ++YYCURSOR;
-       p = YYCTXMARKER + yyt0p;
+       p = yyt0p;
        { p }
 yy7:
        ++YYCURSOR;
@@ -39,7 +38,7 @@ yy7:
        yych = *YYCURSOR;
        switch (yych) {
        case 'a':
-               yyt0p = (YYCURSOR - YYCTXMARKER);
+               yyt0p = YYCURSOR;
                goto yy9;
        case 'b':       goto yy5;
        default:        goto yy8;
@@ -61,13 +60,12 @@ yy9:
 
 {
        YYCTYPE yych;
-       YYCTXMARKER = YYCURSOR;
        if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
        switch (yych) {
        case 'a':       goto yy14;
        case 'b':
-               yyt0p = (YYCURSOR - YYCTXMARKER);
+               yyt0p = YYCURSOR;
                goto yy16;
        default:        goto yy12;
        }
@@ -77,7 +75,7 @@ yy13:
        {}
 yy14:
        ++YYCURSOR;
-       p = YYCTXMARKER + yyt0p;
+       p = yyt0p;
        { p }
 yy16:
        yych = *(YYMARKER = ++YYCURSOR);
@@ -92,7 +90,7 @@ yy17:
        switch (yych) {
        case 'a':       goto yy14;
        case 'b':
-               yyt0p = (YYCURSOR - YYCTXMARKER);
+               yyt0p = YYCURSOR;
                goto yy19;
        default:        goto yy18;
        }
index e4a1800f0604b7f564974abba296edd2a8460991..ebe77acd9d78cae5bbe269c06d9da1a791ce60e7 100644 (file)
 {
        YYCTYPE yych;
        unsigned int yyaccept = 0;
-       YYCTXMARKER = YYCURSOR;
        if ((YYLIMIT - YYCURSOR) < 5) YYFILL(5);
        yych = *YYCURSOR;
-       yyt1p = (YYCURSOR - YYCTXMARKER);
+       yyt1p = YYCURSOR;
        switch (yych) {
        case 'a':       goto yy3;
        default:        goto yy2;
        }
 yy2:
-       p = YYCTXMARKER + yyt1p;
+       p = yyt1p;
        { 3 p }
 yy3:
        yyaccept = 0;
@@ -37,7 +36,7 @@ yy4:
        yych = *++YYCURSOR;
        switch (yych) {
        case 'a':
-               yyt1p = (YYCURSOR - YYCTXMARKER);
+               yyt1p = YYCURSOR;
                goto yy6;
        default:        goto yy5;
        }
@@ -57,7 +56,7 @@ yy6:
        default:        goto yy7;
        }
 yy7:
-       p = YYCTXMARKER + yyt1p;
+       p = yyt1p;
        { 2 p }
 yy8:
        yych = *++YYCURSOR;
index 25d30ccb2e6be89cbd9f686fa85e134c08e30471..206aacb06088ffb95dd4dc5e1a4e23130b9fc0ec 100644 (file)
@@ -17,7 +17,6 @@
 {
        YYCTYPE yych;
        unsigned int yyaccept = 0;
-       YYCTXMARKER = YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
        yych = *(YYMARKER = YYCURSOR);
        switch (yych) {
@@ -25,7 +24,7 @@
        default:        goto yy2;
        }
 yy2:
-       p = YYCTXMARKER + yyt0p;
+       p = yyt0p;
        { p }
 yy3:
        ++YYCURSOR;
@@ -40,7 +39,7 @@ yy4:
        if (yyaccept == 0) {
                goto yy2;
        } else {
-               yyt0p = (YYCURSOR - YYCTXMARKER);
+               yyt0p = YYCURSOR;
                goto yy2;
        }
 yy5:
@@ -51,7 +50,7 @@ yy5:
        switch (yych) {
        case 'a':       goto yy3;
        default:
-               yyt0p = (YYCURSOR - YYCTXMARKER);
+               yyt0p = YYCURSOR;
                goto yy2;
        }
 }
index 83ae3f3e87baaf734b5a19cf572f8639a6469820..bf2f3b7e454149b5d55049cbca312ed30933225c 100644 (file)
@@ -8,7 +8,6 @@
 {
        YYCTYPE yych;
        unsigned int yyaccept = 0;
-       YYCTXMARKER = YYCURSOR;
        if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
        switch (yych) {
@@ -24,7 +23,7 @@ yy4:
        yych = *(YYMARKER = ++YYCURSOR);
        switch (yych) {
        case 'b':
-               yyt0p = (YYCURSOR - YYCTXMARKER);
+               yyt0p = YYCURSOR;
                goto yy5;
        default:        goto yy3;
        }
@@ -56,7 +55,7 @@ yy7:
        default:        goto yy8;
        }
 yy8:
-       p = YYCTXMARKER + yyt0p;
+       p = yyt0p;
        { p }
 yy9:
        ++YYCURSOR;
@@ -64,7 +63,7 @@ yy9:
        yych = *YYCURSOR;
        switch (yych) {
        case 'b':
-               yyt0p = (YYCURSOR - YYCTXMARKER);
+               yyt0p = YYCURSOR;
                goto yy5;
        default:        goto yy6;
        }
index 3b67d12787db7b9198df59649ba03743427c86da..585fb60658f35ce0123d6c1e1cc78cbd209c98dc 100644 (file)
@@ -4,11 +4,11 @@
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3, *p4;
+    const char *YYMARKER, *p0, *p1, *p2, *p3, *p4;
+    
     
 {
        char yych;
-       YYCTXMARKER = YYCURSOR;
        yych = *YYCURSOR;
        switch (yych) {
        case '0':       goto yy4;
@@ -111,9 +111,10 @@ yy19:
        p3 = YYCURSOR - 9;
        p2 = YYCURSOR - 12;
        p1 = YYCURSOR - 14;
+       p0 = YYCURSOR - 15;
        {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%.*s'\n",
-                p1 - YYCTXMARKER, YYCTXMARKER,
+                p1 - p0, p0,
                 p2 - p1, p1,
                 p3 - p2, p2,
                 p4 - p3, p3,
index e9ea3f4363f20bf662eaadedb969fa883b7b60e0..ba31a5b2ad6c3747c97d687d4a86b5c3a498e663 100644 (file)
@@ -3,18 +3,20 @@
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3, *p4;
+    const char *YYMARKER, *p0, *p1, *p2, *p3, *p4;
+    /*!tags:re2c format = "const char *@@;"; */
     /*!re2c
         re2c:define:YYCTYPE = char;
         re2c:yyfill:enable = 0;
 
         * { printf("error\n"); return; }
-        "0" @p1 "11"
-            @p2 "222"
-            @p3 "3333"
-            @p4 "44444" {
+        @p0 "0"
+        @p1 "11"
+        @p2 "222"
+        @p3 "3333"
+        @p4 "44444" {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%.*s'\n",
-                p1 - YYCTXMARKER, YYCTXMARKER,
+                p1 - p0, p0,
                 p2 - p1, p1,
                 p3 - p2, p2,
                 p4 - p3, p3,
index be754e9ed41ff0a01059af36d34cde8dd8ba962a..0271822ec5261e3c800e7fa0151143fd486a4ce7 100644 (file)
@@ -8,18 +8,19 @@ static void lex(const char *s)
 #define YYSKIP()           ++s
 #define YYBACKUP()         marker = s
 #define YYRESTORE()        s = marker
-#define YYBACKUPCTX()      base = s
-#define YYRESTORECTX(dist) s = base + dist
-#define YYTAG(tag, dist)   tag = base + dist
-#define YYDIST()           (s - base)
-    const char *marker, *base, *p1, *p2, *p3;
+#define YYBACKUPTAG(t)     t = s
+#define YYRESTORETAG(t)    s = t
+#define YYCOPYTAG(t1, t2)  t1 = t2
+    const char *marker, *p0, *p1, *p2, *p3;
+    const char *yyt0;const char *yyt0p0;const char *yyt0p1;const char *yyt0p2;const char *yyt0p3;
     
 {
        char yych;
-       YYBACKUPCTX ();
        yych = YYPEEK ();
        switch (yych) {
-       case '0':       goto yy4;
+       case '0':
+               YYBACKUPTAG (yyt0p0);
+               goto yy4;
        default:        goto yy2;
        }
 yy2:
@@ -32,7 +33,7 @@ yy4:
        yych = YYPEEK ();
        switch (yych) {
        case '1':
-               yyt0p1 = YYDIST();
+               YYBACKUPTAG (yyt0p1);
                goto yy5;
        default:        goto yy3;
        }
@@ -51,7 +52,7 @@ yy7:
        yych = YYPEEK ();
        switch (yych) {
        case '2':
-               yyt0p2 = YYDIST();
+               YYBACKUPTAG (yyt0p2);
                goto yy8;
        default:        goto yy6;
        }
@@ -74,7 +75,7 @@ yy10:
        yych = YYPEEK ();
        switch (yych) {
        case '3':
-               yyt0p3 = YYDIST();
+               YYBACKUPTAG (yyt0p3);
                goto yy11;
        default:        goto yy6;
        }
@@ -104,7 +105,7 @@ yy14:
        yych = YYPEEK ();
        switch (yych) {
        case '4':
-               yyt0 = YYDIST();
+               YYBACKUPTAG (yyt0);
                goto yy15;
        default:        goto yy6;
        }
@@ -138,13 +139,14 @@ yy18:
        }
 yy19:
        YYSKIP ();
-       YYRESTORECTX (yyt0);
-       YYTAG(p3, yyt0p3);
-       YYTAG(p2, yyt0p2);
-       YYTAG(p1, yyt0p1);
+       YYRESTORETAG (yyt0);
+       YYCOPYTAG (p3, yyt0p3);
+       YYCOPYTAG (p2, yyt0p2);
+       YYCOPYTAG (p1, yyt0p1);
+       YYCOPYTAG (p0, yyt0p0);
        {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n",
-                p1 - base, base,
+                p1 - p0, p0,
                 p2 - p1, p1,
                 p3 - p2, p2,
                 s - p3, p3,
index e964fbd51fe06695d5cc90c21a1420486c2981ea..18b1846edc0391cc624cfcad95108a0b7422960e 100644 (file)
@@ -7,22 +7,23 @@ static void lex(const char *s)
 #define YYSKIP()           ++s
 #define YYBACKUP()         marker = s
 #define YYRESTORE()        s = marker
-#define YYBACKUPCTX()      base = s
-#define YYRESTORECTX(dist) s = base + dist
-#define YYTAG(tag, dist)   tag = base + dist
-#define YYDIST()           (s - base)
-    const char *marker, *base, *p1, *p2, *p3;
+#define YYBACKUPTAG(t)     t = s
+#define YYRESTORETAG(t)    s = t
+#define YYCOPYTAG(t1, t2)  t1 = t2
+    const char *marker, *p0, *p1, *p2, *p3;
+    /*!tags:re2c format = "const char *@@;"; */
     /*!re2c
         re2c:define:YYCTYPE = char;
         re2c:yyfill:enable = 0;
 
         * { printf("error\n"); return; }
-        "0" @p1 "11"
-            @p2 "222"
-            @p3 "3333"
-            / "44444" {
+        @p0 "0"
+        @p1 "11"
+        @p2 "222"
+        @p3 "3333"
+        / "44444" {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n",
-                p1 - base, base,
+                p1 - p0, p0,
                 p2 - p1, p1,
                 p3 - p2, p2,
                 s - p3, p3,
index ffa7faf87d1a4830b290356d8e0dd774b9411357..822c582cb98a9dc7e575dd023bc2e74377652f92 100644 (file)
@@ -4,11 +4,11 @@
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3;
+    const char *YYMARKER, *p0, *p1, *p2, *p3;
+    
     
 {
        char yych;
-       YYCTXMARKER = YYCURSOR;
        yych = *YYCURSOR;
        switch (yych) {
        case '0':       goto yy4;
@@ -111,9 +111,10 @@ yy19:
        p3 = YYCURSOR - 4;
        p2 = YYCURSOR - 7;
        p1 = YYCURSOR - 9;
+       p0 = YYCURSOR - 10;
        {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n",
-                p1 - YYCTXMARKER, YYCTXMARKER,
+                p1 - p0, p0,
                 p2 - p1, p1,
                 p3 - p2, p2,
                 YYCURSOR - p3, p3,
index 596eec60f3b790d42b172df3ae199b6a4d35a558..254bb48267c094091cdf4371c53b134014dc12ca 100644 (file)
@@ -3,18 +3,20 @@
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3;
+    const char *YYMARKER, *p0, *p1, *p2, *p3;
+    /*!tags:re2c format = "const char *@@;"; */
     /*!re2c
         re2c:define:YYCTYPE = char;
         re2c:yyfill:enable = 0;
 
         * { printf("error\n"); return; }
-        "0" @p1 "11"
-            @p2 "222"
-            @p3 "3333"
-            / "44444" {
+        @p0 "0"
+        @p1 "11"
+        @p2 "222"
+        @p3 "3333"
+        / "44444" {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n",
-                p1 - YYCTXMARKER, YYCTXMARKER,
+                p1 - p0, p0,
                 p2 - p1, p1,
                 p3 - p2, p2,
                 YYCURSOR - p3, p3,
index 682c762da6163c26a33441229672cf7175531ff6..42ca5961e0a6f99b9c46f5b915e8da8295d8da4c 100644 (file)
@@ -4,36 +4,39 @@
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3, *p4;
+    const char *YYMARKER, *p0, *p1, *p2, *p3, *p4;
+    const char *yyt0p0;const char *yyt0p1;const char *yyt0p2;const char *yyt0p3;const char *yyt0p4;
     
 {
        char yych;
-       YYCTXMARKER = YYCURSOR;
        yych = *YYCURSOR;
        switch (yych) {
-       case '0':       goto yy5;
+       case '0':
+               yyt0p0 = YYCURSOR;
+               goto yy5;
        case '1':
-               yyt0p1 = (YYCURSOR - YYCTXMARKER);
+               yyt0p1 = yyt0p0 = YYCURSOR;
                goto yy7;
        case '2':
-               yyt0p2 = yyt0p1 = (YYCURSOR - YYCTXMARKER);
+               yyt0p2 = yyt0p1 = yyt0p0 = YYCURSOR;
                goto yy9;
        case '3':
-               yyt0p3 = yyt0p2 = yyt0p1 = (YYCURSOR - YYCTXMARKER);
+               yyt0p3 = yyt0p2 = yyt0p1 = yyt0p0 = YYCURSOR;
                goto yy11;
        case '4':
-               yyt0p4 = yyt0p3 = yyt0p2 = yyt0p1 = (YYCURSOR - YYCTXMARKER);
+               yyt0p4 = yyt0p3 = yyt0p2 = yyt0p1 = yyt0p0 = YYCURSOR;
                goto yy13;
        default:        goto yy3;
        }
 yy2:
-       p4 = YYCTXMARKER + yyt0p4;
-       p3 = YYCTXMARKER + yyt0p3;
-       p2 = YYCTXMARKER + yyt0p2;
-       p1 = YYCTXMARKER + yyt0p1;
+       p4 = yyt0p4;
+       p3 = yyt0p3;
+       p2 = yyt0p2;
+       p1 = yyt0p1;
+       p0 = yyt0p0;
        {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%.*s'\n",
-                p1 - YYCTXMARKER, YYCTXMARKER,
+                p1 - p0, p0,
                 p2 - p1, p1,
                 p3 - p2, p2,
                 p4 - p3, p3,
@@ -49,19 +52,19 @@ yy5:
        switch (yych) {
        case '0':       goto yy5;
        case '1':
-               yyt0p1 = (YYCURSOR - YYCTXMARKER);
+               yyt0p1 = YYCURSOR;
                goto yy7;
        case '2':
-               yyt0p2 = yyt0p1 = (YYCURSOR - YYCTXMARKER);
+               yyt0p2 = yyt0p1 = YYCURSOR;
                goto yy9;
        case '3':
-               yyt0p3 = yyt0p2 = yyt0p1 = (YYCURSOR - YYCTXMARKER);
+               yyt0p3 = yyt0p2 = yyt0p1 = YYCURSOR;
                goto yy11;
        case '4':
-               yyt0p4 = yyt0p3 = yyt0p2 = yyt0p1 = (YYCURSOR - YYCTXMARKER);
+               yyt0p4 = yyt0p3 = yyt0p2 = yyt0p1 = YYCURSOR;
                goto yy13;
        default:
-               yyt0p4 = yyt0p3 = yyt0p2 = yyt0p1 = (YYCURSOR - YYCTXMARKER);
+               yyt0p4 = yyt0p3 = yyt0p2 = yyt0p1 = YYCURSOR;
                goto yy2;
        }
 yy7:
@@ -70,16 +73,16 @@ yy7:
        switch (yych) {
        case '1':       goto yy7;
        case '2':
-               yyt0p2 = (YYCURSOR - YYCTXMARKER);
+               yyt0p2 = YYCURSOR;
                goto yy9;
        case '3':
-               yyt0p3 = yyt0p2 = (YYCURSOR - YYCTXMARKER);
+               yyt0p3 = yyt0p2 = YYCURSOR;
                goto yy11;
        case '4':
-               yyt0p4 = yyt0p3 = yyt0p2 = (YYCURSOR - YYCTXMARKER);
+               yyt0p4 = yyt0p3 = yyt0p2 = YYCURSOR;
                goto yy13;
        default:
-               yyt0p4 = yyt0p3 = yyt0p2 = (YYCURSOR - YYCTXMARKER);
+               yyt0p4 = yyt0p3 = yyt0p2 = YYCURSOR;
                goto yy2;
        }
 yy9:
@@ -88,13 +91,13 @@ yy9:
        switch (yych) {
        case '2':       goto yy9;
        case '3':
-               yyt0p3 = (YYCURSOR - YYCTXMARKER);
+               yyt0p3 = YYCURSOR;
                goto yy11;
        case '4':
-               yyt0p4 = yyt0p3 = (YYCURSOR - YYCTXMARKER);
+               yyt0p4 = yyt0p3 = YYCURSOR;
                goto yy13;
        default:
-               yyt0p4 = yyt0p3 = (YYCURSOR - YYCTXMARKER);
+               yyt0p4 = yyt0p3 = YYCURSOR;
                goto yy2;
        }
 yy11:
@@ -103,10 +106,10 @@ yy11:
        switch (yych) {
        case '3':       goto yy11;
        case '4':
-               yyt0p4 = (YYCURSOR - YYCTXMARKER);
+               yyt0p4 = YYCURSOR;
                goto yy13;
        default:
-               yyt0p4 = (YYCURSOR - YYCTXMARKER);
+               yyt0p4 = YYCURSOR;
                goto yy2;
        }
 yy13:
@@ -127,4 +130,4 @@ int main(int argc, char **argv)
     }
     return 0;
 }
-re2c: warning: line 16: rule matches empty string [-Wmatch-empty-string]
+re2c: warning: line 17: rule matches empty string [-Wmatch-empty-string]
index 8092052716bb1fe05e09634cba077f4251f109ca..4b34b83f660335e92dc5ded31356e4b8eab81e3a 100644 (file)
@@ -3,19 +3,20 @@
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3, *p4;
+    const char *YYMARKER, *p0, *p1, *p2, *p3, *p4;
+    /*!tags:re2c format = "const char *@@;"; */
     /*!re2c
         re2c:define:YYCTYPE = char;
         re2c:yyfill:enable = 0;
 
         * { printf("error\n"); return; }
-        "0"*
-            @p1 "1"*
-            @p2 "2"*
-            @p3 "3"*
-            @p4 "4"* {
+        @p0 "0"*
+        @p1 "1"*
+        @p2 "2"*
+        @p3 "3"*
+        @p4 "4"* {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%.*s'\n",
-                p1 - YYCTXMARKER, YYCTXMARKER,
+                p1 - p0, p0,
                 p2 - p1, p1,
                 p3 - p2, p2,
                 p4 - p3, p3,
index 1ffbf41bbe28e4180489d169a72ff2621bcaf416..ffcae56a0e1ae7ca445836fd32195ba77c818b8d 100644 (file)
@@ -8,40 +8,52 @@ static void lex(const char *s)
 #define YYSKIP()           ++s
 #define YYBACKUP()         marker = s
 #define YYRESTORE()        s = marker
-#define YYBACKUPCTX()      base = s
-#define YYRESTORECTX(dist) s = base + dist
-#define YYTAG(tag, dist)   tag = base + dist
-#define YYDIST()           (s - base)
-    const char *marker, *base, *p1, *p2, *p3;
+#define YYBACKUPTAG(t)     t = s
+#define YYRESTORETAG(t)    s = t
+#define YYCOPYTAG(t1, t2)  t1 = t2
+    const char *marker, *p0, *p1, *p2, *p3;
+    const char *yyt0;const char *yyt0p0;const char *yyt0p1;const char *yyt0p2;const char *yyt0p3;
     
 {
        char yych;
-       YYBACKUPCTX ();
        yych = YYPEEK ();
        switch (yych) {
-       case '0':       goto yy5;
+       case '0':
+               YYBACKUPTAG (yyt0p0);
+               goto yy5;
        case '1':
-               yyt0p1 = YYDIST();
+               YYBACKUPTAG (yyt0p1);
+               YYBACKUPTAG (yyt0p0);
                goto yy7;
        case '2':
-               yyt0p2 = yyt0p1 = YYDIST();
+               YYBACKUPTAG (yyt0p2);
+               YYBACKUPTAG (yyt0p1);
+               YYBACKUPTAG (yyt0p0);
                goto yy9;
        case '3':
-               yyt0p3 = yyt0p2 = yyt0p1 = YYDIST();
+               YYBACKUPTAG (yyt0p3);
+               YYBACKUPTAG (yyt0p2);
+               YYBACKUPTAG (yyt0p1);
+               YYBACKUPTAG (yyt0p0);
                goto yy11;
        case '4':
-               yyt0 = yyt0p3 = yyt0p2 = yyt0p1 = YYDIST();
+               YYBACKUPTAG (yyt0);
+               YYBACKUPTAG (yyt0p3);
+               YYBACKUPTAG (yyt0p2);
+               YYBACKUPTAG (yyt0p1);
+               YYBACKUPTAG (yyt0p0);
                goto yy13;
        default:        goto yy3;
        }
 yy2:
-       YYRESTORECTX (yyt0);
-       YYTAG(p3, yyt0p3);
-       YYTAG(p2, yyt0p2);
-       YYTAG(p1, yyt0p1);
+       YYRESTORETAG (yyt0);
+       YYCOPYTAG (p3, yyt0p3);
+       YYCOPYTAG (p2, yyt0p2);
+       YYCOPYTAG (p1, yyt0p1);
+       YYCOPYTAG (p0, yyt0p0);
        {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n",
-                p1 - base, base,
+                p1 - p0, p0,
                 p2 - p1, p1,
                 p3 - p2, p2,
                 s - p3, p3,
@@ -57,19 +69,28 @@ yy5:
        switch (yych) {
        case '0':       goto yy5;
        case '1':
-               yyt0p1 = YYDIST();
+               YYBACKUPTAG (yyt0p1);
                goto yy7;
        case '2':
-               yyt0p2 = yyt0p1 = YYDIST();
+               YYBACKUPTAG (yyt0p2);
+               YYBACKUPTAG (yyt0p1);
                goto yy9;
        case '3':
-               yyt0p3 = yyt0p2 = yyt0p1 = YYDIST();
+               YYBACKUPTAG (yyt0p3);
+               YYBACKUPTAG (yyt0p2);
+               YYBACKUPTAG (yyt0p1);
                goto yy11;
        case '4':
-               yyt0 = yyt0p3 = yyt0p2 = yyt0p1 = YYDIST();
+               YYBACKUPTAG (yyt0);
+               YYBACKUPTAG (yyt0p3);
+               YYBACKUPTAG (yyt0p2);
+               YYBACKUPTAG (yyt0p1);
                goto yy13;
        default:
-               yyt0 = yyt0p3 = yyt0p2 = yyt0p1 = YYDIST();
+               YYBACKUPTAG (yyt0);
+               YYBACKUPTAG (yyt0p3);
+               YYBACKUPTAG (yyt0p2);
+               YYBACKUPTAG (yyt0p1);
                goto yy2;
        }
 yy7:
@@ -78,16 +99,21 @@ yy7:
        switch (yych) {
        case '1':       goto yy7;
        case '2':
-               yyt0p2 = YYDIST();
+               YYBACKUPTAG (yyt0p2);
                goto yy9;
        case '3':
-               yyt0p3 = yyt0p2 = YYDIST();
+               YYBACKUPTAG (yyt0p3);
+               YYBACKUPTAG (yyt0p2);
                goto yy11;
        case '4':
-               yyt0 = yyt0p3 = yyt0p2 = YYDIST();
+               YYBACKUPTAG (yyt0);
+               YYBACKUPTAG (yyt0p3);
+               YYBACKUPTAG (yyt0p2);
                goto yy13;
        default:
-               yyt0 = yyt0p3 = yyt0p2 = YYDIST();
+               YYBACKUPTAG (yyt0);
+               YYBACKUPTAG (yyt0p3);
+               YYBACKUPTAG (yyt0p2);
                goto yy2;
        }
 yy9:
@@ -96,13 +122,15 @@ yy9:
        switch (yych) {
        case '2':       goto yy9;
        case '3':
-               yyt0p3 = YYDIST();
+               YYBACKUPTAG (yyt0p3);
                goto yy11;
        case '4':
-               yyt0 = yyt0p3 = YYDIST();
+               YYBACKUPTAG (yyt0);
+               YYBACKUPTAG (yyt0p3);
                goto yy13;
        default:
-               yyt0 = yyt0p3 = YYDIST();
+               YYBACKUPTAG (yyt0);
+               YYBACKUPTAG (yyt0p3);
                goto yy2;
        }
 yy11:
@@ -111,10 +139,10 @@ yy11:
        switch (yych) {
        case '3':       goto yy11;
        case '4':
-               yyt0 = YYDIST();
+               YYBACKUPTAG (yyt0);
                goto yy13;
        default:
-               yyt0 = YYDIST();
+               YYBACKUPTAG (yyt0);
                goto yy2;
        }
 yy13:
index c1e533983cf8cfb79e8150bb601d7d9edab3dbae..1a9ae763492970d5352b6c55c8ed0ddf266c6d00 100644 (file)
@@ -7,23 +7,23 @@ static void lex(const char *s)
 #define YYSKIP()           ++s
 #define YYBACKUP()         marker = s
 #define YYRESTORE()        s = marker
-#define YYBACKUPCTX()      base = s
-#define YYRESTORECTX(dist) s = base + dist
-#define YYTAG(tag, dist)   tag = base + dist
-#define YYDIST()           (s - base)
-    const char *marker, *base, *p1, *p2, *p3;
+#define YYBACKUPTAG(t)     t = s
+#define YYRESTORETAG(t)    s = t
+#define YYCOPYTAG(t1, t2)  t1 = t2
+    const char *marker, *p0, *p1, *p2, *p3;
+    /*!tags:re2c format = "const char *@@;"; */
     /*!re2c
         re2c:define:YYCTYPE = char;
         re2c:yyfill:enable = 0;
 
         * { printf("error\n"); return; }
-        "0"*
-            @p1 "1"*
-            @p2 "2"*
-            @p3 "3"*
-            / "4"* {
+        @p0 "0"*
+        @p1 "1"*
+        @p2 "2"*
+        @p3 "3"*
+        / "4"* {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n",
-                p1 - base, base,
+                p1 - p0, p0,
                 p2 - p1, p1,
                 p3 - p2, p2,
                 s - p3, p3,
index 5c022b19559aade92166d8f503aa9740ef5c93da..60d698eb986a7a612685aab2654b4f2515665dd3 100644 (file)
@@ -4,36 +4,39 @@
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3;
+    const char *YYMARKER, *p0, *p1, *p2, *p3;
+    const char *yyt0;const char *yyt0p0;const char *yyt0p1;const char *yyt0p2;const char *yyt0p3;
     
 {
        char yych;
-       YYCTXMARKER = YYCURSOR;
        yych = *YYCURSOR;
        switch (yych) {
-       case '0':       goto yy5;
+       case '0':
+               yyt0p0 = YYCURSOR;
+               goto yy5;
        case '1':
-               yyt0p1 = (YYCURSOR - YYCTXMARKER);
+               yyt0p1 = yyt0p0 = YYCURSOR;
                goto yy7;
        case '2':
-               yyt0p2 = yyt0p1 = (YYCURSOR - YYCTXMARKER);
+               yyt0p2 = yyt0p1 = yyt0p0 = YYCURSOR;
                goto yy9;
        case '3':
-               yyt0p3 = yyt0p2 = yyt0p1 = (YYCURSOR - YYCTXMARKER);
+               yyt0p3 = yyt0p2 = yyt0p1 = yyt0p0 = YYCURSOR;
                goto yy11;
        case '4':
-               yyt0 = yyt0p3 = yyt0p2 = yyt0p1 = (YYCURSOR - YYCTXMARKER);
+               yyt0 = yyt0p3 = yyt0p2 = yyt0p1 = yyt0p0 = YYCURSOR;
                goto yy13;
        default:        goto yy3;
        }
 yy2:
-       YYCURSOR = YYCTXMARKER + yyt0;
-       p3 = YYCTXMARKER + yyt0p3;
-       p2 = YYCTXMARKER + yyt0p2;
-       p1 = YYCTXMARKER + yyt0p1;
+       YYCURSOR = yyt0;
+       p3 = yyt0p3;
+       p2 = yyt0p2;
+       p1 = yyt0p1;
+       p0 = yyt0p0;
        {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n",
-                p1 - YYCTXMARKER, YYCTXMARKER,
+                p1 - p0, p0,
                 p2 - p1, p1,
                 p3 - p2, p2,
                 YYCURSOR - p3, p3,
@@ -49,19 +52,19 @@ yy5:
        switch (yych) {
        case '0':       goto yy5;
        case '1':
-               yyt0p1 = (YYCURSOR - YYCTXMARKER);
+               yyt0p1 = YYCURSOR;
                goto yy7;
        case '2':
-               yyt0p2 = yyt0p1 = (YYCURSOR - YYCTXMARKER);
+               yyt0p2 = yyt0p1 = YYCURSOR;
                goto yy9;
        case '3':
-               yyt0p3 = yyt0p2 = yyt0p1 = (YYCURSOR - YYCTXMARKER);
+               yyt0p3 = yyt0p2 = yyt0p1 = YYCURSOR;
                goto yy11;
        case '4':
-               yyt0 = yyt0p3 = yyt0p2 = yyt0p1 = (YYCURSOR - YYCTXMARKER);
+               yyt0 = yyt0p3 = yyt0p2 = yyt0p1 = YYCURSOR;
                goto yy13;
        default:
-               yyt0 = yyt0p3 = yyt0p2 = yyt0p1 = (YYCURSOR - YYCTXMARKER);
+               yyt0 = yyt0p3 = yyt0p2 = yyt0p1 = YYCURSOR;
                goto yy2;
        }
 yy7:
@@ -70,16 +73,16 @@ yy7:
        switch (yych) {
        case '1':       goto yy7;
        case '2':
-               yyt0p2 = (YYCURSOR - YYCTXMARKER);
+               yyt0p2 = YYCURSOR;
                goto yy9;
        case '3':
-               yyt0p3 = yyt0p2 = (YYCURSOR - YYCTXMARKER);
+               yyt0p3 = yyt0p2 = YYCURSOR;
                goto yy11;
        case '4':
-               yyt0 = yyt0p3 = yyt0p2 = (YYCURSOR - YYCTXMARKER);
+               yyt0 = yyt0p3 = yyt0p2 = YYCURSOR;
                goto yy13;
        default:
-               yyt0 = yyt0p3 = yyt0p2 = (YYCURSOR - YYCTXMARKER);
+               yyt0 = yyt0p3 = yyt0p2 = YYCURSOR;
                goto yy2;
        }
 yy9:
@@ -88,13 +91,13 @@ yy9:
        switch (yych) {
        case '2':       goto yy9;
        case '3':
-               yyt0p3 = (YYCURSOR - YYCTXMARKER);
+               yyt0p3 = YYCURSOR;
                goto yy11;
        case '4':
-               yyt0 = yyt0p3 = (YYCURSOR - YYCTXMARKER);
+               yyt0 = yyt0p3 = YYCURSOR;
                goto yy13;
        default:
-               yyt0 = yyt0p3 = (YYCURSOR - YYCTXMARKER);
+               yyt0 = yyt0p3 = YYCURSOR;
                goto yy2;
        }
 yy11:
@@ -103,10 +106,10 @@ yy11:
        switch (yych) {
        case '3':       goto yy11;
        case '4':
-               yyt0 = (YYCURSOR - YYCTXMARKER);
+               yyt0 = YYCURSOR;
                goto yy13;
        default:
-               yyt0 = (YYCURSOR - YYCTXMARKER);
+               yyt0 = YYCURSOR;
                goto yy2;
        }
 yy13:
@@ -127,4 +130,4 @@ int main(int argc, char **argv)
     }
     return 0;
 }
-re2c: warning: line 16: rule matches empty string [-Wmatch-empty-string]
+re2c: warning: line 17: rule matches empty string [-Wmatch-empty-string]
index 10364fe99f42378df82f24352e05381c6b7cc877..f4034bcc7f6bb472cd1ea4d70a20dd2a430bd6fb 100644 (file)
@@ -3,19 +3,20 @@
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3;
+    const char *YYMARKER, *p0, *p1, *p2, *p3;
+    /*!tags:re2c format = "const char *@@;"; */
     /*!re2c
         re2c:define:YYCTYPE = char;
         re2c:yyfill:enable = 0;
 
         * { printf("error\n"); return; }
-        "0"*
-            @p1 "1"*
-            @p2 "2"*
-            @p3 "3"*
-            / "4"* {
+        @p0 "0"*
+        @p1 "1"*
+        @p2 "2"*
+        @p3 "3"*
+        / "4"* {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n",
-                p1 - YYCTXMARKER, YYCTXMARKER,
+                p1 - p0, p0,
                 p2 - p1, p1,
                 p3 - p2, p2,
                 YYCURSOR - p3, p3,
index b760c16df907ea4f1bd2a579270ca0f78bb2f86f..c6be783169c88460d4d1771544616b0ec414526b 100644 (file)
@@ -4,11 +4,11 @@
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3, *p4;
+    const char *YYMARKER, *p0, *p1, *p2, *p3, *p4;
+    const char *yyt0p1;const char *yyt0p3;
     
 {
        char yych;
-       YYCTXMARKER = YYCURSOR;
        yych = *YYCURSOR;
        switch (yych) {
        case '0':       goto yy4;
@@ -22,10 +22,10 @@ yy4:
        yych = *(YYMARKER = ++YYCURSOR);
        switch (yych) {
        case '1':
-               yyt0p1 = (YYCURSOR - YYCTXMARKER);
+               yyt0p1 = YYCURSOR;
                goto yy5;
        case '2':
-               yyt0p1 = (YYCURSOR - YYCTXMARKER);
+               yyt0p1 = YYCURSOR;
                goto yy8;
        default:        goto yy3;
        }
@@ -44,10 +44,10 @@ yy8:
        yych = *++YYCURSOR;
        switch (yych) {
        case '3':
-               yyt0p3 = (YYCURSOR - YYCTXMARKER);
+               yyt0p3 = YYCURSOR;
                goto yy9;
        case '4':
-               yyt0p3 = (YYCURSOR - YYCTXMARKER);
+               yyt0p3 = YYCURSOR;
                goto yy11;
        default:        goto yy7;
        }
@@ -62,12 +62,13 @@ yy9:
 yy11:
        ++YYCURSOR;
        p4 = YYCURSOR - 1;
-       p3 = YYCTXMARKER + yyt0p3;
-       p2 = YYCTXMARKER + (yyt0p3 - 1);
-       p1 = YYCTXMARKER + yyt0p1;
+       p3 = yyt0p3;
+       p2 = yyt0p3 - 1;
+       p1 = yyt0p1;
+       p0 = yyt0p1 - 1;
        {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%.*s'\n",
-                p1 - YYCTXMARKER, YYCTXMARKER,
+                p1 - p0, p0,
                 p2 - p1, p1,
                 p3 - p2, p2,
                 p4 - p3, p3,
index ebb9b26bd9a1b6bc50b21a306a1a3f3133d99d7e..e39a69206560001b1f5d3b95c38c47dd7aaa3784 100644 (file)
@@ -3,18 +3,20 @@
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3, *p4;
+    const char *YYMARKER, *p0, *p1, *p2, *p3, *p4;
+    /*!tags:re2c format = "const char *@@;"; */
     /*!re2c
         re2c:define:YYCTYPE = char;
         re2c:yyfill:enable = 0;
 
         * { printf("error\n"); return; }
-        "0" @p1 "1"*
-            @p2 "2"
-            @p3 "3"*
-            @p4 "4" {
+        @p0 "0"
+        @p1 "1"*
+        @p2 "2"
+        @p3 "3"*
+        @p4 "4" {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%.*s'\n",
-                p1 - YYCTXMARKER, YYCTXMARKER,
+                p1 - p0, p0,
                 p2 - p1, p1,
                 p3 - p2, p2,
                 p4 - p3, p3,
index 8091eb5921dd88a2c2f42378c78e8c7c35746c68..a346017c403101f8faca27fb500f03837df2319c 100644 (file)
@@ -8,18 +8,19 @@ static void lex(const char *s)
 #define YYSKIP()           ++s
 #define YYBACKUP()         marker = s
 #define YYRESTORE()        s = marker
-#define YYBACKUPCTX()      base = s
-#define YYRESTORECTX(dist) s = base + dist
-#define YYTAG(tag, dist)   tag = base + dist
-#define YYDIST()           (s - base)
-    const char *marker, *base, *p1, *p2, *p3;
+#define YYBACKUPTAG(t)     t = s
+#define YYRESTORETAG(t)    s = t
+#define YYCOPYTAG(t1, t2)  t1 = t2
+    const char *marker, *p0, *p1, *p2, *p3;
+    const char *yyt0;const char *yyt0p0;const char *yyt0p1;const char *yyt0p2;const char *yyt0p3;
     
 {
        char yych;
-       YYBACKUPCTX ();
        yych = YYPEEK ();
        switch (yych) {
-       case '0':       goto yy4;
+       case '0':
+               YYBACKUPTAG (yyt0p0);
+               goto yy4;
        default:        goto yy2;
        }
 yy2:
@@ -32,10 +33,11 @@ yy4:
        yych = YYPEEK ();
        switch (yych) {
        case '1':
-               yyt0p1 = YYDIST();
+               YYBACKUPTAG (yyt0p1);
                goto yy5;
        case '2':
-               yyt0p2 = yyt0p1 = YYDIST();
+               YYBACKUPTAG (yyt0p2);
+               YYBACKUPTAG (yyt0p1);
                goto yy8;
        default:        goto yy3;
        }
@@ -45,7 +47,7 @@ yy5:
        switch (yych) {
        case '1':       goto yy5;
        case '2':
-               yyt0p2 = YYDIST();
+               YYBACKUPTAG (yyt0p2);
                goto yy8;
        default:        goto yy7;
        }
@@ -57,10 +59,11 @@ yy8:
        yych = YYPEEK ();
        switch (yych) {
        case '3':
-               yyt0p3 = YYDIST();
+               YYBACKUPTAG (yyt0p3);
                goto yy9;
        case '4':
-               yyt0 = yyt0p3 = YYDIST();
+               YYBACKUPTAG (yyt0);
+               YYBACKUPTAG (yyt0p3);
                goto yy11;
        default:        goto yy7;
        }
@@ -70,19 +73,20 @@ yy9:
        switch (yych) {
        case '3':       goto yy9;
        case '4':
-               yyt0 = YYDIST();
+               YYBACKUPTAG (yyt0);
                goto yy11;
        default:        goto yy7;
        }
 yy11:
        YYSKIP ();
-       YYRESTORECTX (yyt0);
-       YYTAG(p3, yyt0p3);
-       YYTAG(p2, yyt0p2);
-       YYTAG(p1, yyt0p1);
+       YYRESTORETAG (yyt0);
+       YYCOPYTAG (p3, yyt0p3);
+       YYCOPYTAG (p2, yyt0p2);
+       YYCOPYTAG (p1, yyt0p1);
+       YYCOPYTAG (p0, yyt0p0);
        {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n",
-                p1 - base, base,
+                p1 - p0, p0,
                 p2 - p1, p1,
                 p3 - p2, p2,
                 s - p3, p3,
index e456605a1a4a24171bc90a1d2f7d208713ffc6b0..7b396be10b1519ab7e86b8c5a14b83ccfa0d1e51 100644 (file)
@@ -7,22 +7,23 @@ static void lex(const char *s)
 #define YYSKIP()           ++s
 #define YYBACKUP()         marker = s
 #define YYRESTORE()        s = marker
-#define YYBACKUPCTX()      base = s
-#define YYRESTORECTX(dist) s = base + dist
-#define YYTAG(tag, dist)   tag = base + dist
-#define YYDIST()           (s - base)
-    const char *marker, *base, *p1, *p2, *p3;
+#define YYBACKUPTAG(t)     t = s
+#define YYRESTORETAG(t)    s = t
+#define YYCOPYTAG(t1, t2)  t1 = t2
+    const char *marker, *p0, *p1, *p2, *p3;
+    /*!tags:re2c format = "const char *@@;"; */
     /*!re2c
         re2c:define:YYCTYPE = char;
         re2c:yyfill:enable = 0;
 
         * { printf("error\n"); return; }
-        "0" @p1 "1"*
-            @p2 "2"
-            @p3 "3"*
-            / "4" {
+        @p0 "0"
+        @p1 "1"*
+        @p2 "2"
+        @p3 "3"*
+        / "4" {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n",
-                p1 - base, base,
+                p1 - p0, p0,
                 p2 - p1, p1,
                 p3 - p2, p2,
                 s - p3, p3,
index ad871383e6a0dcb6b71f83ff8ea9a0483b911eb7..d0750ab92eb4209be8e9837688386da5ee4afaf2 100644 (file)
@@ -4,11 +4,11 @@
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3;
+    const char *YYMARKER, *p0, *p1, *p2, *p3;
+    const char *yyt0p1;const char *yyt0p3;
     
 {
        char yych;
-       YYCTXMARKER = YYCURSOR;
        yych = *YYCURSOR;
        switch (yych) {
        case '0':       goto yy4;
@@ -22,10 +22,10 @@ yy4:
        yych = *(YYMARKER = ++YYCURSOR);
        switch (yych) {
        case '1':
-               yyt0p1 = (YYCURSOR - YYCTXMARKER);
+               yyt0p1 = YYCURSOR;
                goto yy5;
        case '2':
-               yyt0p1 = (YYCURSOR - YYCTXMARKER);
+               yyt0p1 = YYCURSOR;
                goto yy8;
        default:        goto yy3;
        }
@@ -44,10 +44,10 @@ yy8:
        yych = *++YYCURSOR;
        switch (yych) {
        case '3':
-               yyt0p3 = (YYCURSOR - YYCTXMARKER);
+               yyt0p3 = YYCURSOR;
                goto yy9;
        case '4':
-               yyt0p3 = (YYCURSOR - YYCTXMARKER);
+               yyt0p3 = YYCURSOR;
                goto yy11;
        default:        goto yy7;
        }
@@ -62,12 +62,13 @@ yy9:
 yy11:
        ++YYCURSOR;
        YYCURSOR -= 1;
-       p3 = YYCTXMARKER + yyt0p3;
-       p2 = YYCTXMARKER + (yyt0p3 - 1);
-       p1 = YYCTXMARKER + yyt0p1;
+       p3 = yyt0p3;
+       p2 = yyt0p3 - 1;
+       p1 = yyt0p1;
+       p0 = yyt0p1 - 1;
        {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n",
-                p1 - YYCTXMARKER, YYCTXMARKER,
+                p1 - p0, p0,
                 p2 - p1, p1,
                 p3 - p2, p2,
                 YYCURSOR - p3, p3,
index 32c3bcde3e89b33ad6d5f117dd47757e2b8adc9e..8a4a53e3c5cc7d1965f6b660c3725473138b100b 100644 (file)
@@ -3,18 +3,20 @@
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3;
+    const char *YYMARKER, *p0, *p1, *p2, *p3;
+    /*!tags:re2c format = "const char *@@;"; */
     /*!re2c
         re2c:define:YYCTYPE = char;
         re2c:yyfill:enable = 0;
 
         * { printf("error\n"); return; }
-        "0" @p1 "1"*
-            @p2 "2"
-            @p3 "3"*
-            / "4" {
+        @p0 "0"
+        @p1 "1"*
+        @p2 "2"
+        @p3 "3"*
+        / "4" {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n",
-                p1 - YYCTXMARKER, YYCTXMARKER,
+                p1 - p0, p0,
                 p2 - p1, p1,
                 p3 - p2, p2,
                 YYCURSOR - p3, p3,
index 8e30a014ec24d531a348ac321d8868f7bed30eaa..365c334e0c4b8cd5eb29b2de4ab2f737678a96d0 100644 (file)
@@ -4,15 +4,19 @@
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3, *p4;
+    const char *YYMARKER, *p0, *p1, *p2, *p3, *p4;
+    const char *yyt0p0;const char *yyt0p2;const char *yyt0p4;
     
 {
        char yych;
-       YYCTXMARKER = YYCURSOR;
        yych = *YYCURSOR;
        switch (yych) {
-       case '0':       goto yy4;
-       case '1':       goto yy5;
+       case '0':
+               yyt0p0 = YYCURSOR;
+               goto yy4;
+       case '1':
+               yyt0p0 = YYCURSOR;
+               goto yy5;
        default:        goto yy2;
        }
 yy2:
@@ -30,10 +34,10 @@ yy5:
        yych = *(YYMARKER = ++YYCURSOR);
        switch (yych) {
        case '2':
-               yyt0p2 = (YYCURSOR - YYCTXMARKER);
+               yyt0p2 = YYCURSOR;
                goto yy10;
        case '3':
-               yyt0p2 = (YYCURSOR - YYCTXMARKER);
+               yyt0p2 = YYCURSOR;
                goto yy12;
        default:        goto yy3;
        }
@@ -53,10 +57,10 @@ yy9:
        yych = *++YYCURSOR;
        switch (yych) {
        case '2':
-               yyt0p2 = (YYCURSOR - YYCTXMARKER);
+               yyt0p2 = YYCURSOR;
                goto yy10;
        case '3':
-               yyt0p2 = (YYCURSOR - YYCTXMARKER);
+               yyt0p2 = YYCURSOR;
                goto yy12;
        default:        goto yy8;
        }
@@ -70,17 +74,18 @@ yy10:
        }
 yy12:
        ++YYCURSOR;
-       yyt0p4 = (YYCURSOR - YYCTXMARKER);
+       yyt0p4 = YYCURSOR;
        yych = *YYCURSOR;
        goto yy15;
 yy13:
-       p4 = YYCTXMARKER + yyt0p4;
-       p3 = YYCTXMARKER + (yyt0p4 - 1);
-       p2 = YYCTXMARKER + yyt0p2;
-       p1 = YYCTXMARKER + (yyt0p2 - 1);
+       p4 = yyt0p4;
+       p3 = yyt0p4 - 1;
+       p2 = yyt0p2;
+       p1 = yyt0p2 - 1;
+       p0 = yyt0p0;
        {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%.*s'\n",
-                p1 - YYCTXMARKER, YYCTXMARKER,
+                p1 - p0, p0,
                 p2 - p1, p1,
                 p3 - p2, p2,
                 p4 - p3, p3,
index fecf25d7ae5a8e5d4091df037f37ced75d7abad0..9344278f44031fa6c0549fc2e11c670dd23de322 100644 (file)
@@ -3,19 +3,20 @@
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3, *p4;
+    const char *YYMARKER, *p0, *p1, *p2, *p3, *p4;
+    /*!tags:re2c format = "const char *@@;"; */
     /*!re2c
         re2c:define:YYCTYPE = char;
         re2c:yyfill:enable = 0;
 
         * { printf("error\n"); return; }
-        "0"*
-            @p1 "1"
-            @p2 "2"*
-            @p3 "3"
-            @p4 "4"* {
+        @p0 "0"*
+        @p1 "1"
+        @p2 "2"*
+        @p3 "3"
+        @p4 "4"* {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%.*s'\n",
-                p1 - YYCTXMARKER, YYCTXMARKER,
+                p1 - p0, p0,
                 p2 - p1, p1,
                 p3 - p2, p2,
                 p4 - p3, p3,
index 1ad31185f6c66e93d02c3a8e173b550a46e4f595..2a97cc56c564f26e01066524a5f7df9a83bb18b5 100644 (file)
@@ -8,20 +8,22 @@ static void lex(const char *s)
 #define YYSKIP()           ++s
 #define YYBACKUP()         marker = s
 #define YYRESTORE()        s = marker
-#define YYBACKUPCTX()      base = s
-#define YYRESTORECTX(dist) s = base + dist
-#define YYTAG(tag, dist)   tag = base + dist
-#define YYDIST()           (s - base)
-    const char *marker, *base, *p1, *p2, *p3;
+#define YYBACKUPTAG(t)     t = s
+#define YYRESTORETAG(t)    s = t
+#define YYCOPYTAG(t1, t2)  t1 = t2
+    const char *marker, *p0, *p1, *p2, *p3;
+    const char *yyt0;const char *yyt0p0;const char *yyt0p1;const char *yyt0p2;const char *yyt0p3;
     
 {
        char yych;
-       YYBACKUPCTX ();
        yych = YYPEEK ();
        switch (yych) {
-       case '0':       goto yy4;
+       case '0':
+               YYBACKUPTAG (yyt0p0);
+               goto yy4;
        case '1':
-               yyt0p1 = YYDIST();
+               YYBACKUPTAG (yyt0p1);
+               YYBACKUPTAG (yyt0p0);
                goto yy5;
        default:        goto yy2;
        }
@@ -44,10 +46,11 @@ yy5:
        yych = YYPEEK ();
        switch (yych) {
        case '2':
-               yyt0p2 = YYDIST();
+               YYBACKUPTAG (yyt0p2);
                goto yy10;
        case '3':
-               yyt0p3 = yyt0p2 = YYDIST();
+               YYBACKUPTAG (yyt0p3);
+               YYBACKUPTAG (yyt0p2);
                goto yy12;
        default:        goto yy3;
        }
@@ -58,7 +61,7 @@ yy7:
        switch (yych) {
        case '0':       goto yy6;
        case '1':
-               yyt0p1 = YYDIST();
+               YYBACKUPTAG (yyt0p1);
                goto yy9;
        default:        goto yy8;
        }
@@ -70,10 +73,11 @@ yy9:
        yych = YYPEEK ();
        switch (yych) {
        case '2':
-               yyt0p2 = YYDIST();
+               YYBACKUPTAG (yyt0p2);
                goto yy10;
        case '3':
-               yyt0p3 = yyt0p2 = YYDIST();
+               YYBACKUPTAG (yyt0p3);
+               YYBACKUPTAG (yyt0p2);
                goto yy12;
        default:        goto yy8;
        }
@@ -83,23 +87,24 @@ yy10:
        switch (yych) {
        case '2':       goto yy10;
        case '3':
-               yyt0p3 = YYDIST();
+               YYBACKUPTAG (yyt0p3);
                goto yy12;
        default:        goto yy8;
        }
 yy12:
        YYSKIP ();
-       yyt0 = YYDIST();
+       YYBACKUPTAG (yyt0);
        yych = YYPEEK ();
        goto yy15;
 yy13:
-       YYRESTORECTX (yyt0);
-       YYTAG(p3, yyt0p3);
-       YYTAG(p2, yyt0p2);
-       YYTAG(p1, yyt0p1);
+       YYRESTORETAG (yyt0);
+       YYCOPYTAG (p3, yyt0p3);
+       YYCOPYTAG (p2, yyt0p2);
+       YYCOPYTAG (p1, yyt0p1);
+       YYCOPYTAG (p0, yyt0p0);
        {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n",
-                p1 - base, base,
+                p1 - p0, p0,
                 p2 - p1, p1,
                 p3 - p2, p2,
                 s - p3, p3,
index a9a61afb15f133fe638f34b8d8838e0b80691b96..26a575fa993abcc4233b47f7bdaad57664802212 100644 (file)
@@ -7,23 +7,23 @@ static void lex(const char *s)
 #define YYSKIP()           ++s
 #define YYBACKUP()         marker = s
 #define YYRESTORE()        s = marker
-#define YYBACKUPCTX()      base = s
-#define YYRESTORECTX(dist) s = base + dist
-#define YYTAG(tag, dist)   tag = base + dist
-#define YYDIST()           (s - base)
-    const char *marker, *base, *p1, *p2, *p3;
+#define YYBACKUPTAG(t)     t = s
+#define YYRESTORETAG(t)    s = t
+#define YYCOPYTAG(t1, t2)  t1 = t2
+    const char *marker, *p0, *p1, *p2, *p3;
+    /*!tags:re2c format = "const char *@@;"; */
     /*!re2c
         re2c:define:YYCTYPE = char;
         re2c:yyfill:enable = 0;
 
         * { printf("error\n"); return; }
-        "0"*
-            @p1 "1"
-            @p2 "2"*
-            @p3 "3"
-            / "4"* {
+        @p0 "0"*
+        @p1 "1"
+        @p2 "2"*
+        @p3 "3"
+        / "4"* {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n",
-                p1 - base, base,
+                p1 - p0, p0,
                 p2 - p1, p1,
                 p3 - p2, p2,
                 s - p3, p3,
index c3c437b8bd5334a23b8b68d40746eaeac0219bec..8b90ba03cbd4ac32c7ef7ff2e954258a0d7710a7 100644 (file)
@@ -4,15 +4,19 @@
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3;
+    const char *YYMARKER, *p0, *p1, *p2, *p3;
+    const char *yyt0;const char *yyt0p0;const char *yyt0p2;
     
 {
        char yych;
-       YYCTXMARKER = YYCURSOR;
        yych = *YYCURSOR;
        switch (yych) {
-       case '0':       goto yy4;
-       case '1':       goto yy5;
+       case '0':
+               yyt0p0 = YYCURSOR;
+               goto yy4;
+       case '1':
+               yyt0p0 = YYCURSOR;
+               goto yy5;
        default:        goto yy2;
        }
 yy2:
@@ -30,10 +34,10 @@ yy5:
        yych = *(YYMARKER = ++YYCURSOR);
        switch (yych) {
        case '2':
-               yyt0p2 = (YYCURSOR - YYCTXMARKER);
+               yyt0p2 = YYCURSOR;
                goto yy10;
        case '3':
-               yyt0p2 = (YYCURSOR - YYCTXMARKER);
+               yyt0p2 = YYCURSOR;
                goto yy12;
        default:        goto yy3;
        }
@@ -53,10 +57,10 @@ yy9:
        yych = *++YYCURSOR;
        switch (yych) {
        case '2':
-               yyt0p2 = (YYCURSOR - YYCTXMARKER);
+               yyt0p2 = YYCURSOR;
                goto yy10;
        case '3':
-               yyt0p2 = (YYCURSOR - YYCTXMARKER);
+               yyt0p2 = YYCURSOR;
                goto yy12;
        default:        goto yy8;
        }
@@ -70,17 +74,18 @@ yy10:
        }
 yy12:
        ++YYCURSOR;
-       yyt0 = (YYCURSOR - YYCTXMARKER);
+       yyt0 = YYCURSOR;
        yych = *YYCURSOR;
        goto yy15;
 yy13:
-       YYCURSOR = YYCTXMARKER + yyt0;
-       p3 = YYCTXMARKER + (yyt0 - 1);
-       p2 = YYCTXMARKER + yyt0p2;
-       p1 = YYCTXMARKER + (yyt0p2 - 1);
+       YYCURSOR = yyt0;
+       p3 = yyt0 - 1;
+       p2 = yyt0p2;
+       p1 = yyt0p2 - 1;
+       p0 = yyt0p0;
        {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n",
-                p1 - YYCTXMARKER, YYCTXMARKER,
+                p1 - p0, p0,
                 p2 - p1, p1,
                 p3 - p2, p2,
                 YYCURSOR - p3, p3,
index 55bb1812a5d585322b7d26677a3156dab15e485f..218e739536cb6d0b47f57f4520a5cca7471560f5 100644 (file)
@@ -3,19 +3,20 @@
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3;
+    const char *YYMARKER, *p0, *p1, *p2, *p3;
+    /*!tags:re2c format = "const char *@@;"; */
     /*!re2c
         re2c:define:YYCTYPE = char;
         re2c:yyfill:enable = 0;
 
         * { printf("error\n"); return; }
-        "0"*
-            @p1 "1"
-            @p2 "2"*
-            @p3 "3"
-            / "4"* {
+        @p0 "0"*
+        @p1 "1"
+        @p2 "2"*
+        @p3 "3"
+        / "4"* {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n",
-                p1 - YYCTXMARKER, YYCTXMARKER,
+                p1 - p0, p0,
                 p2 - p1, p1,
                 p3 - p2, p2,
                 YYCURSOR - p3, p3,
index fa8335e4cdd2ca84ad32a15598a3970b23c5efa1..3fb4b7efc4349466c64a3db3748532b674a0d182 100644 (file)
@@ -5,12 +5,11 @@
 
 {
        YYCTYPE yych;
-       YYCTXMARKER = YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        switch (yych) {
        case 'a':
-               yyt0p = (YYCURSOR - YYCTXMARKER);
+               yyt0p = YYCURSOR;
                goto yy4;
        default:        goto yy2;
        }
@@ -23,12 +22,12 @@ yy4:
        yych = *YYCURSOR;
        switch (yych) {
        case 'a':
-               yyt0p = (YYCURSOR - YYCTXMARKER);
+               yyt0p = YYCURSOR;
                goto yy4;
        default:        goto yy6;
        }
 yy6:
-       p = YYCTXMARKER + yyt0p;
+       p = yyt0p;
        { p }
 }
 
index 2dd1acb5913647ca49c2e05f3563e95f74f3822f..ea283061b3db612f73abb0cab789ed2fdcacdd4e 100644 (file)
@@ -32,7 +32,6 @@ yy5:
 
 {
        YYCTYPE yych;
-       YYCTXMARKER = YYCURSOR;
        if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
        switch (yych) {
@@ -48,7 +47,7 @@ yy11:
        yych = *++YYCURSOR;
        switch (yych) {
        case 'a':
-               yyt0p = (YYCURSOR - YYCTXMARKER);
+               yyt0p = YYCURSOR;
                goto yy13;
        default:        goto yy10;
        }
@@ -60,7 +59,7 @@ yy12:
        }
 yy13:
        ++YYCURSOR;
-       p = YYCTXMARKER + yyt0p;
+       p = yyt0p;
        { p }
 }