]> granicus.if.org Git - re2c/commitdiff
Dump final tag values to variables; actions must use these variables.
authorUlya Trofimovich <skvadrik@gmail.com>
Thu, 6 Oct 2016 11:35:13 +0000 (12:35 +0100)
committerUlya Trofimovich <skvadrik@gmail.com>
Thu, 6 Oct 2016 11:35:13 +0000 (12:35 +0100)
Having one variable per tag name is convenient:
    - tag calculation is not duplicated if tag is used multiple
      times in the action body
    - tag name is an l-value
    - there's no need to patch actions

Variables are user-defined: users know which variables they need
(unlike distance variables 'yyt<N>', which are generated by re2c
and affected by things like tag fixedness, deduplication, etc.);
users may also want to initialize these variables in some particular
way.

74 files changed:
re2c/Makefile.am
re2c/bootstrap/src/codegen/subst_tags.cc [deleted file]
re2c/src/codegen/emit.h
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/subst_tags.re [deleted file]
re2c/src/ir/skeleton/generate_code.cc
re2c/src/ir/skeleton/skeleton.h
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/conf4.i--tags--input(custom).c
re2c/test/tags/conf4.i--tags--input(custom).re
re2c/test/tags/conf4.i--tags.c
re2c/test/tags/conf4.i--tags.re
re2c/test/tags/conf5.i--tags--input(custom).c
re2c/test/tags/conf5.i--tags--input(custom).re
re2c/test/tags/conf5.i--tags.c
re2c/test/tags/conf5.i--tags.re
re2c/test/tags/conf6.--tags--input(custom).c
re2c/test/tags/conf6.--tags--input(custom).re
re2c/test/tags/conf6.--tags.c
re2c/test/tags/conf6.--tags.re
re2c/test/tags/dedup4.i--tags.c
re2c/test/tags/dedup4.i--tags.re
re2c/test/tags/dedup5.i--tags.c
re2c/test/tags/dedup5.i--tags.re
re2c/test/tags/fallback1.i--tags.c
re2c/test/tags/fallback1.i--tags.re
re2c/test/tags/fallback2.i--tags.c
re2c/test/tags/fallback2.i--tags.re
re2c/test/tags/fallback3.i--tags.c
re2c/test/tags/fallback3.i--tags.re
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/iter_plus.i--tags.re
re2c/test/tags/minimization.i.c
re2c/test/tags/minimization.i.re
re2c/test/tags/subst.i--tags.c [deleted file]
re2c/test/tags/subst.i--tags.re [deleted file]

index ba1b4c00fc4f4555a5302fa9edd43eb6b5b25ce2..cc8a68dd466995953aefaa5ad4b8bb7583545aec 100644 (file)
@@ -134,7 +134,6 @@ re2c_SOURCES = \
 AUTOGEN_LEX = src/parse/lex.cc
 AUTOGEN_LEX_CONF = src/parse/lex_conf.cc
 AUTOGEN_PARSEOPT = src/conf/parse_opts.cc
-AUTOGEN_SUBSTTAGS = src/codegen/subst_tags.cc
 AUTOGEN_PARSER = src/parse/parser.cc
 AUTOGEN_PARSER_HDR = src/parse/y.tab.h
 AUTOGEN = \
@@ -142,15 +141,13 @@ AUTOGEN = \
        $(AUTOGEN_LEX_CONF) \
        $(AUTOGEN_PARSER) \
        $(AUTOGEN_PARSER_HDR) \
-       $(AUTOGEN_PARSEOPT) \
-       $(AUTOGEN_SUBSTTAGS)
+       $(AUTOGEN_PARSEOPT)
 nodist_re2c_SOURCES = $(AUTOGEN)
 
 # bootstrap sources
 BOOTSTRAP_LEX = bootstrap/src/parse/lex.cc
 BOOTSTRAP_LEX_CONF = bootstrap/src/parse/lex_conf.cc
 BOOTSTRAP_PARSEOPT = bootstrap/src/conf/parse_opts.cc
-BOOTSTRAP_SUBSTTAGS = bootstrap/src/codegen/subst_tags.cc
 BOOTSTRAP_PARSER = bootstrap/src/parse/parser.cc
 BOOTSTRAP_PARSER_HDR = bootstrap/src/parse/y.tab.h
 BOOTSTRAP_DOC = bootstrap/doc/re2c.1
@@ -160,21 +157,18 @@ BOOTSTRAP = \
        $(BOOTSTRAP_DOC) \
        $(BOOTSTRAP_PARSER) \
        $(BOOTSTRAP_PARSER_HDR) \
-       $(BOOTSTRAP_PARSEOPT) \
-       $(BOOTSTRAP_SUBSTTAGS)
+       $(BOOTSTRAP_PARSEOPT)
 
 # custom sources
 CUSTOM_LEX = src/parse/lex.re
 CUSTOM_LEX_CONF = src/parse/lex_conf.re
 CUSTOM_PARSEOPT = src/conf/parse_opts.re
-CUSTOM_SUBSTTAGS = src/codegen/subst_tags.re
 CUSTOM_PARSER = src/parse/parser.ypp
 CUSTOM = \
        $(CUSTOM_LEX) \
        $(CUSTOM_LEX_CONF) \
        $(CUSTOM_PARSER) \
-       $(CUSTOM_PARSEOPT) \
-       $(CUSTOM_SUBSTTAGS)
+       $(CUSTOM_PARSEOPT)
 
 # docs
 SRC_DOC = doc/manpage.rst
diff --git a/re2c/bootstrap/src/codegen/subst_tags.cc b/re2c/bootstrap/src/codegen/subst_tags.cc
deleted file mode 100644 (file)
index 78c34bb..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-/* Generated by re2c 0.16 on Sat May 14 15:27:19 2016 */
-#line 1 "../src/codegen/subst_tags.re"
-#include "src/codegen/emit.h"
-#include "src/codegen/input_api.h"
-#include "src/conf/opt.h"
-#include "src/globals.h"
-
-namespace re2c
-{
-
-std::string subst_tags(const std::string &action,
-       const std::valarray<Tag> &tags, size_t ltag, size_t htag)
-{
-       if (ltag >= htag) {
-               return action;
-       }
-
-       std::string result;
-       const char
-               *head = action.c_str(),
-               *last = head + action.length(),
-               *tail = head,
-               *base;
-
-       loop: 
-#line 27 "src/codegen/subst_tags.cc"
-{
-       char yych;
-       long yytag1name;
-       static const unsigned char yybm[] = {
-                 0,   0,   0,   0,   0,   0,   0,   0, 
-                 0,   0,   0,   0,   0,   0,   0,   0, 
-                 0,   0,   0,   0,   0,   0,   0,   0, 
-                 0,   0,   0,   0,   0,   0,   0,   0, 
-                 0,   0,   0,   0,   0,   0,   0,   0, 
-                 0,   0,   0,   0,   0,   0,   0,   0, 
-               128, 128, 128, 128, 128, 128, 128, 128, 
-               128, 128,   0,   0,   0,   0,   0,   0, 
-                 0, 128, 128, 128, 128, 128, 128, 128, 
-               128, 128, 128, 128, 128, 128, 128, 128, 
-               128, 128, 128, 128, 128, 128, 128, 128, 
-               128, 128, 128,   0,   0,   0,   0, 128, 
-                 0, 128, 128, 128, 128, 128, 128, 128, 
-               128, 128, 128, 128, 128, 128, 128, 128, 
-               128, 128, 128, 128, 128, 128, 128, 128, 
-               128, 128, 128,   0,   0,   0,   0,   0, 
-                 0,   0,   0,   0,   0,   0,   0,   0, 
-                 0,   0,   0,   0,   0,   0,   0,   0, 
-                 0,   0,   0,   0,   0,   0,   0,   0, 
-                 0,   0,   0,   0,   0,   0,   0,   0, 
-                 0,   0,   0,   0,   0,   0,   0,   0, 
-                 0,   0,   0,   0,   0,   0,   0,   0, 
-                 0,   0,   0,   0,   0,   0,   0,   0, 
-                 0,   0,   0,   0,   0,   0,   0,   0, 
-                 0,   0,   0,   0,   0,   0,   0,   0, 
-                 0,   0,   0,   0,   0,   0,   0,   0, 
-                 0,   0,   0,   0,   0,   0,   0,   0, 
-                 0,   0,   0,   0,   0,   0,   0,   0, 
-                 0,   0,   0,   0,   0,   0,   0,   0, 
-                 0,   0,   0,   0,   0,   0,   0,   0, 
-                 0,   0,   0,   0,   0,   0,   0,   0, 
-                 0,   0,   0,   0,   0,   0,   0,   0, 
-       };
-       base = head;
-       yych = *head;
-       if (yych <= 0x00) goto yy2;
-       if (yych == '@') goto yy6;
-       goto yy4;
-yy2:
-       ++head;
-#line 33 "../src/codegen/subst_tags.re"
-       {
-                       if (base == last) {
-                               result.append(tail, base);
-                               return result;
-                       }
-                       goto loop;
-               }
-#line 80 "src/codegen/subst_tags.cc"
-yy4:
-       ++head;
-yy5:
-#line 31 "../src/codegen/subst_tags.re"
-       { goto loop; }
-#line 86 "src/codegen/subst_tags.cc"
-yy6:
-       yych = *++head;
-       if (yych <= 'Z') {
-               if (yych <= '/') goto yy5;
-               if (yych <= '9') {
-                       yytag1name = (head - base);
-                       goto yy7;
-               }
-               if (yych <= '@') goto yy5;
-               yytag1name = (head - base);
-       } else {
-               if (yych <= '_') {
-                       if (yych <= '^') goto yy5;
-                       yytag1name = (head - base);
-               } else {
-                       if (yych <= '`') goto yy5;
-                       if (yych >= '{') goto yy5;
-                       yytag1name = (head - base);
-               }
-       }
-yy7:
-       ++head;
-       yych = *head;
-       if (yybm[0+yych] & 128) {
-               goto yy7;
-       }
-#line 41 "../src/codegen/subst_tags.re"
-       {
-                       const std::string name((base + yytag1name), head);
-                       for (size_t i = ltag; i < htag; ++i) {
-                               const Tag &t = tags[i];
-                               if (name == *t.name) {
-                                       result.append(tail, base);
-                                       result.append(opts->input_api.expr_tag(tags, t));
-                                       tail = head;
-                                       break;
-                               }
-                       }
-                       goto loop;
-               }
-#line 127 "src/codegen/subst_tags.cc"
-}
-#line 54 "../src/codegen/subst_tags.re"
-
-}
-
-} // namespace re2c
index e4bbe3ce9b4115cb77f2c107224e5436163a5cb6..a96575c106e84498a5c0f8dc199cf2e26a277122 100644 (file)
@@ -21,8 +21,6 @@ std::string vartag_name(const std::string *name, size_t rule);
 std::string vartag_expr(const std::string *name, size_t rule);
 std::string vartag_name_fallback(const Tag &tag);
 std::string vartag_expr_fallback(const Tag &tag);
-std::string subst_tags(const std::string &action,
-       const std::valarray<Tag> &tags, size_t ltag, size_t htag);
 
 } // namespace re2c
 
index b798e273db637073f209082a16188e7e6414884a..3a3ce7200a0d1f4e1f289da579710ead7ed91d2e 100644 (file)
@@ -215,9 +215,13 @@ 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, dfa.tags, dfa.tags[rule.trail], dfa.basetag));
+               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]));
        }
 
        if (opts->target == opt_t::SKELETON) {
@@ -232,9 +236,8 @@ void emit_rule(OutputFile &o, uint32_t ind, const DFA &dfa, size_t rule_idx)
                        if (!yySetupRule.empty()) {
                                o.wind(ind).wstring(yySetupRule).ws("\n");
                        }
-                       const std::string action = subst_tags(code->text, dfa.tags, rule.ltag, rule.htag);
                        o.wline_info(code->loc.line, code->loc.filename.c_str())
-                               .wind(ind).wstring(action).ws("\n")
+                               .wind(ind).wstring(code->text).ws("\n")
                                .wdelay_line_info();
                } else if (!cond.empty()) {
                        std::string action = opts->condGoto;
index b8cca424563e97b2feed3efda648a7b6ad517dc1..454fefaa61781083dd5baeca50a18be9a9d18e87 100644 (file)
@@ -143,7 +143,7 @@ void DFA::emit(Output & output, uint32_t& ind, bool isLastCond, bool& bPrologBra
        OutputFile &o = output.source;
        OutputBlock &ob = o.block();
 
-       std::set<std::string> tagnames;
+       std::set<std::string> tagnames, tagvars;
        if (basetag) {
                const size_t ntags = tags.size();
                for (size_t i = 0; i < ntags; ++i) {
@@ -151,6 +151,9 @@ void DFA::emit(Output & output, uint32_t& ind, bool isLastCond, bool& bPrologBra
                        if (t.type == Tag::VAR && t.var.orig == i) {
                                tagnames.insert(vartag_name(t.name, t.rule));
                        }
+                       if (t.name != NULL) {
+                               tagvars.insert(*t.name);
+                       }
                }
                const bool *copy = tagpool[copy_tags];
                for (size_t i = 0; i < ntags; ++i) {
@@ -188,7 +191,7 @@ void DFA::emit(Output & output, uint32_t& ind, bool isLastCond, bool& bPrologBra
                {
                        emit_data(*skeleton);
                        emit_start(*skeleton, o, max_fill, need_backup, need_backupctx,
-                               need_accept, basetag, tagnames);
+                               need_accept, basetag, tagnames, tagvars);
                        uint32_t i = 2;
                        emit_body (o, i, used_labels, initial_label);
                        emit_end(*skeleton, o, need_backup, need_backupctx);
index a35d0f3fc64328a7aff00f7edf27133cc546aa55..d3f86c07b33fbe8f8c3486376aad67f9ca512650 100644 (file)
@@ -129,10 +129,10 @@ std::string InputAPI::stmt_dist (uint32_t ind, const bool *mask,
        return s + expr_dist() + ";\n";
 }
 
-std::string InputAPI::expr_tag(const std::valarray<Tag> &tags, const Tag &tag) const
+std::string InputAPI::stmt_tag_finalizer(uint32_t ind,
+       const std::valarray<Tag> &tags, const Tag &tag) const
 {
        std::string expr;
-
        if (tag.type == Tag::VAR) {
                const Tag &orig = tags[tag.var.orig];
                expr = vartag_expr(orig.name, orig.rule);
@@ -142,7 +142,7 @@ std::string InputAPI::expr_tag(const std::valarray<Tag> &tags, const Tag &tag) c
                        if (type_ == DEFAULT) {
                                // optimize '(YYCTXMARKER + ((YYCURSOR - YCTXMARKER) - tag))'
                                // to       '(YYCURSOR - tag)'
-                               return "(" + opts->yycursor + " - " + dist + ")";
+                               return indent(ind) + *tag.name + " = " + opts->yycursor + " - " + dist + ";\n";
                        }
                        expr = opts->tags_yydist + "() - " + dist;
                } else {
@@ -151,9 +151,11 @@ std::string InputAPI::expr_tag(const std::valarray<Tag> &tags, const Tag &tag) c
                }
        }
 
-       return (type_ == DEFAULT)
-               ? "(" + opts->yyctxmarker + " + " + expr + ")"
-               : opts->tags_yytag + "(" + expr + ")";
+       const std::string 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
index 4ed39cfe9992efb4e0ac8a1efcd6dd04ca99d738..2fdadbf6b2cc8b83f7647e64fe81048d9b56f8fc 100644 (file)
@@ -35,7 +35,8 @@ public:
        std::string expr_dist () const;
        std::string stmt_dist (uint32_t ind, const bool *tagmask,
                const std::valarray<Tag> &tags) const;
-       std::string expr_tag(const std::valarray<Tag> &tags, const Tag &tag) 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;
diff --git a/re2c/src/codegen/subst_tags.re b/re2c/src/codegen/subst_tags.re
deleted file mode 100644 (file)
index a760dee..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-#include "src/codegen/emit.h"
-#include "src/codegen/input_api.h"
-#include "src/conf/opt.h"
-#include "src/globals.h"
-
-namespace re2c
-{
-
-std::string subst_tags(const std::string &action,
-       const std::valarray<Tag> &tags, size_t ltag, size_t htag)
-{
-       if (ltag >= htag) {
-               return action;
-       }
-
-       std::string result;
-       const char
-               *head = action.c_str(),
-               *last = head + action.length(),
-               *tail = head,
-               *base;
-
-       loop: /*!re2c
-
-               re2c:define:YYCTYPE = char;
-               re2c:define:YYCURSOR = head;
-               re2c:define:YYCTXMARKER = base;
-               re2c:yyfill:enable = 0;
-               re2c:flags:tags = 1;
-
-               * { goto loop; }
-
-               "\x00" {
-                       if (base == last) {
-                               result.append(tail, base);
-                               return result;
-                       }
-                       goto loop;
-               }
-
-               "@" @name [a-zA-Z0-9_]+ {
-                       const std::string name(@name, head);
-                       for (size_t i = ltag; i < htag; ++i) {
-                               const Tag &t = tags[i];
-                               if (name == *t.name) {
-                                       result.append(tail, base);
-                                       result.append(opts->input_api.expr_tag(tags, t));
-                                       tail = head;
-                                       break;
-                               }
-                       }
-                       goto loop;
-               }
-       */
-}
-
-} // namespace re2c
index 3e4d87d6b03ac79e79cca06e216049b33823d3fe..2c53f0801c5efd9204d94806f3af6a4516b79eab 100644 (file)
@@ -94,7 +94,8 @@ void emit_prolog(OutputFile &o)
 
 void emit_start(const Skeleton &skel, OutputFile &o, size_t maxfill,
        bool backup, bool backupctx, bool accept, bool basetag,
-       const std::set<std::string> &tagnames)
+       const std::set<std::string> &tagnames,
+       const std::set<std::string> &tagvars)
 {
        const size_t
                sizeof_cunit = opts->encoding.szCodeUnit(),
@@ -121,6 +122,7 @@ void emit_start(const Skeleton &skel, OutputFile &o, size_t maxfill,
                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");
                }
@@ -240,6 +242,18 @@ void emit_start(const Skeleton &skel, OutputFile &o, size_t maxfill,
                output_tags_default(o.stream(), 2, tagnames);
                o.ws("\n").wstring(opts->input_api.stmt_backupctx(2));
        }
+
+       std::set<std::string>::const_iterator
+               var1 = tagvars.begin(),
+               var2 = tagvars.end();
+       if (var1 != var2) {
+               o.ws("\n").wind(2).ws("YYCTYPE *").wstring(*var1);
+               for (++var1; var1 != var2; ++var1) {
+                       o.ws(", *").wstring(*var1);
+               }
+               o.ws(";");
+       }
+
        o.ws("\n");
        if (opts->bFlag && BitMap::first) {
                BitMap::gen(o, 2, 0, std::min(0x100u, opts->encoding.nCodeUnits()));
index 6d7b9a6de2191ec3d10fa52919d05bb3e88164cf..df5f3c562c447cd49d11cd29e41be8d19d400621 100644 (file)
@@ -89,7 +89,8 @@ 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,
-       const std::set<std::string> &tagnames);
+       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_epilog(OutputFile &o, const std::set<std::string> &names);
 void emit_action(const Skeleton &skel, OutputFile &o, uint32_t ind,
index d4969f58124e40a44daf452a3750eb7bb270e218..4576df3c5a5e51d6c88f3301277a6e65c1e3dea2 100644 (file)
@@ -19,10 +19,9 @@ static void lex(const char *s)
 #define YYRESTORE()        s = marker
 #define YYBACKUPCTX()      basectx = s
 #define YYRESTORECTX(dist) s = basectx + dist
-#define ZZ_CTX(dist)       (basectx + dist)
+#define ZZ_CTX(tag, dist)  tag = basectx + dist
 #define ZZ_DIST()          (s - basectx)
-    const char *marker;
-    const char *basectx;
+    const char *marker, *basectx, *p1, *p2, *p3;
     
 {
        char yych;
@@ -248,12 +247,15 @@ yy16:
        default:        goto yy17;
        }
 yy17:
+       ZZ_CTX(p3, zz_0p3);
+       ZZ_CTX(p2, zz_0p2);
+       ZZ_CTX(p1, zz_0p1);
        {
             printf("%u.%u.%u.%u\n",
-                parse_oct(basectx, ZZ_CTX(zz_0p1)),
-                parse_oct(ZZ_CTX(zz_0p1) + 1, ZZ_CTX(zz_0p2)),
-                parse_oct(ZZ_CTX(zz_0p2) + 1, ZZ_CTX(zz_0p3)),
-                parse_oct(ZZ_CTX(zz_0p3) + 1, s));
+                parse_oct(basectx, p1),
+                parse_oct(p1 + 1, p2),
+                parse_oct(p2 + 1, p3),
+                parse_oct(p3 + 1, s));
             return;
         }
 yy18:
index cd5b845c3bc7f69e992147c63bbc02b477390b87..b5f0a140f329b7f5b40074c8dbbc3dc6f5188296 100644 (file)
@@ -18,10 +18,9 @@ static void lex(const char *s)
 #define YYRESTORE()        s = marker
 #define YYBACKUPCTX()      basectx = s
 #define YYRESTORECTX(dist) s = basectx + dist
-#define ZZ_CTX(dist)       (basectx + dist)
+#define ZZ_CTX(tag, dist)  tag = basectx + dist
 #define ZZ_DIST()          (s - basectx)
-    const char *marker;
-    const char *basectx;
+    const char *marker, *basectx, *p1, *p2, *p3;
     /*!re2c
         re2c:define:YYCTYPE = char;
         re2c:yyfill:enable = 0;
@@ -36,10 +35,10 @@ static void lex(const char *s)
         d oct @p3
         d oct {
             printf("%u.%u.%u.%u\n",
-                parse_oct(basectx, @p1),
-                parse_oct(@p1 + 1, @p2),
-                parse_oct(@p2 + 1, @p3),
-                parse_oct(@p3 + 1, s));
+                parse_oct(basectx, p1),
+                parse_oct(p1 + 1, p2),
+                parse_oct(p2 + 1, p3),
+                parse_oct(p3 + 1, s));
             return;
         }
 
index b87bcacdc3fdaa29832526d660779ecfab6189d4..67f35146d0dc34dca7bafc6434dada47ae0546ec 100644 (file)
@@ -13,8 +13,7 @@ static inline unsigned parse_oct(const char *s, const char *e)
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER;
-    const char *YYCTXMARKER;
+    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3;
     
 {
        char yych;
@@ -228,12 +227,15 @@ yy16:
        default:        goto yy17;
        }
 yy17:
+       p3 = YYCTXMARKER + zz_0p3;
+       p2 = YYCTXMARKER + zz_0p2;
+       p1 = YYCTXMARKER + zz_0p1;
        {
             printf("%u.%u.%u.%u\n",
-                parse_oct(YYCTXMARKER, (YYCTXMARKER + zz_0p1)),
-                parse_oct((YYCTXMARKER + zz_0p1) + 1, (YYCTXMARKER + zz_0p2)),
-                parse_oct((YYCTXMARKER + zz_0p2) + 1, (YYCTXMARKER + zz_0p3)),
-                parse_oct((YYCTXMARKER + zz_0p3) + 1, YYCURSOR));
+                parse_oct(YYCTXMARKER, p1),
+                parse_oct(p1 + 1, p2),
+                parse_oct(p2 + 1, p3),
+                parse_oct(p3 + 1, YYCURSOR));
             return;
         }
 yy18:
index a39f96f07cd1f4a361ad572381f33832dfcabd21..a5c7a81562e81895b815cdbc826f842dac81a303 100644 (file)
@@ -12,8 +12,7 @@ static inline unsigned parse_oct(const char *s, const char *e)
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER;
-    const char *YYCTXMARKER;
+    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3;
     /*!re2c
         re2c:define:YYCTYPE = char;
         re2c:yyfill:enable = 0;
@@ -28,10 +27,10 @@ static void lex(const char *YYCURSOR)
         d oct @p3
         d oct {
             printf("%u.%u.%u.%u\n",
-                parse_oct(YYCTXMARKER, @p1),
-                parse_oct(@p1 + 1, @p2),
-                parse_oct(@p2 + 1, @p3),
-                parse_oct(@p3 + 1, YYCURSOR));
+                parse_oct(YYCTXMARKER, p1),
+                parse_oct(p1 + 1, p2),
+                parse_oct(p2 + 1, p3),
+                parse_oct(p3 + 1, YYCURSOR));
             return;
         }
 
index 9cd85b1bca612043a23d4a3b991d9052e71d741c..2a53d9130ae3dbb744c2b7bbe05fa3001628a6bf 100644 (file)
@@ -19,10 +19,9 @@ static void lex(const char *s)
 #define YYRESTORE()        s = marker
 #define YYBACKUPCTX()      basectx = s
 #define YYRESTORECTX(dist) s = basectx + dist
-#define ZZ_CTX(dist)       (basectx + dist)
+#define ZZ_CTX(tag, dist)  tag = basectx + dist
 #define ZZ_DIST()          (s - basectx)
-    const char *marker;
-    const char *basectx;
+    const char *marker, *basectx, *p1, *p2, *p3;
     long zz_0p1;long zz_0p2;long zz_0p3;
     
 {
@@ -246,12 +245,15 @@ yy16:
        default:        goto yy17;
        }
 yy17:
+       ZZ_CTX(p3, zz_0p3);
+       ZZ_CTX(p2, zz_0p2);
+       ZZ_CTX(p1, zz_0p1);
        {
             printf("%u.%u.%u.%u\n",
-                parse_oct(basectx, ZZ_CTX(zz_0p1)),
-                parse_oct(ZZ_CTX(zz_0p1) + 1, ZZ_CTX(zz_0p2)),
-                parse_oct(ZZ_CTX(zz_0p2) + 1, ZZ_CTX(zz_0p3)),
-                parse_oct(ZZ_CTX(zz_0p3) + 1, s));
+                parse_oct(basectx, p1),
+                parse_oct(p1 + 1, p2),
+                parse_oct(p2 + 1, p3),
+                parse_oct(p3 + 1, s));
             return;
         }
 yy18:
index d03d7d950a42f5345192b8a7726f9e59533f3862..30768df4608de3aa0143783becc3566e6da3eeea 100644 (file)
@@ -18,10 +18,9 @@ static void lex(const char *s)
 #define YYRESTORE()        s = marker
 #define YYBACKUPCTX()      basectx = s
 #define YYRESTORECTX(dist) s = basectx + dist
-#define ZZ_CTX(dist)       (basectx + dist)
+#define ZZ_CTX(tag, dist)  tag = basectx + dist
 #define ZZ_DIST()          (s - basectx)
-    const char *marker;
-    const char *basectx;
+    const char *marker, *basectx, *p1, *p2, *p3;
     /*!tags:re2c*/
     /*!re2c
         re2c:define:YYCTYPE = char;
@@ -40,10 +39,10 @@ static void lex(const char *s)
         d oct @p3
         d oct {
             printf("%u.%u.%u.%u\n",
-                parse_oct(basectx, @p1),
-                parse_oct(@p1 + 1, @p2),
-                parse_oct(@p2 + 1, @p3),
-                parse_oct(@p3 + 1, s));
+                parse_oct(basectx, p1),
+                parse_oct(p1 + 1, p2),
+                parse_oct(p2 + 1, p3),
+                parse_oct(p3 + 1, s));
             return;
         }
     */
index c71261f94caa4ff08904b374e1ae432a70fb4297..3c7eb852d89148b78374ee3b58e2dd6951b0e759 100644 (file)
@@ -13,8 +13,7 @@ static inline unsigned parse_oct(const char *s, const char *e)
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER;
-    const char *YYCTXMARKER;
+    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3;
     long zz_0p1;long zz_0p2;long zz_0p3;
     
 {
@@ -226,12 +225,15 @@ yy16:
        default:        goto yy17;
        }
 yy17:
+       p3 = YYCTXMARKER + zz_0p3;
+       p2 = YYCTXMARKER + zz_0p2;
+       p1 = YYCTXMARKER + zz_0p1;
        {
             printf("%u.%u.%u.%u\n",
-                parse_oct(YYCTXMARKER, (YYCTXMARKER + zz_0p1)),
-                parse_oct((YYCTXMARKER + zz_0p1) + 1, (YYCTXMARKER + zz_0p2)),
-                parse_oct((YYCTXMARKER + zz_0p2) + 1, (YYCTXMARKER + zz_0p3)),
-                parse_oct((YYCTXMARKER + zz_0p3) + 1, YYCURSOR));
+                parse_oct(YYCTXMARKER, p1),
+                parse_oct(p1 + 1, p2),
+                parse_oct(p2 + 1, p3),
+                parse_oct(p3 + 1, YYCURSOR));
             return;
         }
 yy18:
index 3fdb86cf7df9d3a2f41276c698578cfb9b3fb2ab..a297a50921a83606b0cb44f4e3ed33783e4e549e 100644 (file)
@@ -12,8 +12,7 @@ static inline unsigned parse_oct(const char *s, const char *e)
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER;
-    const char *YYCTXMARKER;
+    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3;
     /*!tags:re2c*/
     /*!re2c
         re2c:define:YYCTYPE = char;
@@ -30,10 +29,10 @@ static void lex(const char *YYCURSOR)
         d oct @p3
         d oct {
             printf("%u.%u.%u.%u\n",
-                parse_oct(YYCTXMARKER, @p1),
-                parse_oct(@p1 + 1, @p2),
-                parse_oct(@p2 + 1, @p3),
-                parse_oct(@p3 + 1, YYCURSOR));
+                parse_oct(YYCTXMARKER, p1),
+                parse_oct(p1 + 1, p2),
+                parse_oct(p2 + 1, p3),
+                parse_oct(p3 + 1, YYCURSOR));
             return;
         }
     */
index 5570188d1bae5e01017291535486e107f7ee153f..2e463d1f56d1a1c1b03a5e486ee1802945d7846f 100644 (file)
@@ -19,10 +19,9 @@ static void lex(const char *s)
 #define YYRESTORE()        s = marker
 #define YYBACKUPCTX()      basectx = s
 #define YYRESTORECTX(dist) s = basectx + dist
-#define ZZ_CTX(dist)       (basectx + dist)
+#define ZZ_CTX(tag, dist)  tag = basectx + dist
 #define ZZ_DIST()          (s - basectx)
-    const char *marker;
-    const char *basectx;
+    const char *marker, *basectx, *p1, *p2, *p3;
     
     ptrdiff_t zz_0p1 = 0, zz_0p2 = 0, zz_0p3 = 0;
     
@@ -247,12 +246,15 @@ yy16:
        default:        goto yy17;
        }
 yy17:
+       ZZ_CTX(p3, zz_0p3);
+       ZZ_CTX(p2, zz_0p2);
+       ZZ_CTX(p1, zz_0p1);
        {
             printf("%u.%u.%u.%u\n",
-                parse_oct(basectx, ZZ_CTX(zz_0p1)),
-                parse_oct(ZZ_CTX(zz_0p1) + 1, ZZ_CTX(zz_0p2)),
-                parse_oct(ZZ_CTX(zz_0p2) + 1, ZZ_CTX(zz_0p3)),
-                parse_oct(ZZ_CTX(zz_0p3) + 1, s));
+                parse_oct(basectx, p1),
+                parse_oct(p1 + 1, p2),
+                parse_oct(p2 + 1, p3),
+                parse_oct(p3 + 1, s));
             return;
         }
 yy18:
index 58502263e86b4f122cd843dae6b72815be1cfcc7..e8d124427ffbd2040ca95cd6bac842e44d4305d3 100644 (file)
@@ -18,10 +18,9 @@ static void lex(const char *s)
 #define YYRESTORE()        s = marker
 #define YYBACKUPCTX()      basectx = s
 #define YYRESTORECTX(dist) s = basectx + dist
-#define ZZ_CTX(dist)       (basectx + dist)
+#define ZZ_CTX(tag, dist)  tag = basectx + dist
 #define ZZ_DIST()          (s - basectx)
-    const char *marker;
-    const char *basectx;
+    const char *marker, *basectx, *p1, *p2, *p3;
     /*!tags:re2c sep="\n"; line="long @@ = 0;"; line=; sep=; */
     ptrdiff_t /*!tags:re2c sep=", "; line="@@ = 0"; */;
     /*!re2c
@@ -41,10 +40,10 @@ static void lex(const char *s)
         d oct @p3
         d oct {
             printf("%u.%u.%u.%u\n",
-                parse_oct(basectx, @p1),
-                parse_oct(@p1 + 1, @p2),
-                parse_oct(@p2 + 1, @p3),
-                parse_oct(@p3 + 1, s));
+                parse_oct(basectx, p1),
+                parse_oct(p1 + 1, p2),
+                parse_oct(p2 + 1, p3),
+                parse_oct(p3 + 1, s));
             return;
         }
     */
index 9d4656d74bd8503bfd3610ac691de59af3934941..d601ad87995bec80b6880f24ae1b11f9587620f1 100644 (file)
@@ -13,8 +13,7 @@ static inline unsigned parse_oct(const char *s, const char *e)
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER;
-    const char *YYCTXMARKER;
+    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3;
     
     ptrdiff_t zz_0p1 = 0, zz_0p2 = 0, zz_0p3 = 0;
     
@@ -227,12 +226,15 @@ yy16:
        default:        goto yy17;
        }
 yy17:
+       p3 = YYCTXMARKER + zz_0p3;
+       p2 = YYCTXMARKER + zz_0p2;
+       p1 = YYCTXMARKER + zz_0p1;
        {
             printf("%u.%u.%u.%u\n",
-                parse_oct(YYCTXMARKER, (YYCTXMARKER + zz_0p1)),
-                parse_oct((YYCTXMARKER + zz_0p1) + 1, (YYCTXMARKER + zz_0p2)),
-                parse_oct((YYCTXMARKER + zz_0p2) + 1, (YYCTXMARKER + zz_0p3)),
-                parse_oct((YYCTXMARKER + zz_0p3) + 1, YYCURSOR));
+                parse_oct(YYCTXMARKER, p1),
+                parse_oct(p1 + 1, p2),
+                parse_oct(p2 + 1, p3),
+                parse_oct(p3 + 1, YYCURSOR));
             return;
         }
 yy18:
index ca3eeab5f10872f62a411f1e0992203a1384348c..d6576dfd05ae6e9424e46bcf95dc7c73f3b0c201 100644 (file)
@@ -12,8 +12,7 @@ static inline unsigned parse_oct(const char *s, const char *e)
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER;
-    const char *YYCTXMARKER;
+    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3;
     /*!tags:re2c sep="\n"; line="long @@ = 0;"; line=; sep=; */
     ptrdiff_t /*!tags:re2c sep=", "; line="@@ = 0"; */;
     /*!re2c
@@ -31,10 +30,10 @@ static void lex(const char *YYCURSOR)
         d oct @p3
         d oct {
             printf("%u.%u.%u.%u\n",
-                parse_oct(YYCTXMARKER, @p1),
-                parse_oct(@p1 + 1, @p2),
-                parse_oct(@p2 + 1, @p3),
-                parse_oct(@p3 + 1, YYCURSOR));
+                parse_oct(YYCTXMARKER, p1),
+                parse_oct(p1 + 1, p2),
+                parse_oct(p2 + 1, p3),
+                parse_oct(p3 + 1, YYCURSOR));
             return;
         }
     */
index 548488900eb0588e7d2c0253f1edc1bbf16541fb..b0f2beba9513d1072bd2f6e24bf13f1d9cb75488 100644 (file)
@@ -34,10 +34,9 @@ static void lex(const char *s)
 #define YYRESTORE()        s = marker
 #define YYBACKUPCTX()      basectx = s
 #define YYRESTORECTX(dist) s = basectx + dist
-#define ZZ_CTX(dist)       (basectx + dist)
+#define ZZ_CTX(tag, dist)  tag = basectx + dist
 #define ZZ_DIST()          (s - basectx)
-    const char *marker;
-    const char *basectx;
+    const char *marker, *basectx, *p1, *p2, *p3;
     contexts_t ctxs;
     
 {
@@ -261,12 +260,15 @@ yy16:
        default:        goto yy17;
        }
 yy17:
+       ZZ_CTX(p3, ctxs.zz_0p3);
+       ZZ_CTX(p2, ctxs.zz_0p2);
+       ZZ_CTX(p1, ctxs.zz_0p1);
        {
             printf("%u.%u.%u.%u\n",
-                parse_oct(basectx, ZZ_CTX(ctxs.zz_0p1)),
-                parse_oct(ZZ_CTX(ctxs.zz_0p1) + 1, ZZ_CTX(ctxs.zz_0p2)),
-                parse_oct(ZZ_CTX(ctxs.zz_0p2) + 1, ZZ_CTX(ctxs.zz_0p3)),
-                parse_oct(ZZ_CTX(ctxs.zz_0p3) + 1, s));
+                parse_oct(basectx, p1),
+                parse_oct(p1 + 1, p2),
+                parse_oct(p2 + 1, p3),
+                parse_oct(p3 + 1, s));
             return;
         }
 yy18:
index ccaac4544bf751df48d6d5728e92a861fc006d80..5c0e6175c0a29068582446da4f042b43addc3810 100644 (file)
@@ -33,10 +33,9 @@ static void lex(const char *s)
 #define YYRESTORE()        s = marker
 #define YYBACKUPCTX()      basectx = s
 #define YYRESTORECTX(dist) s = basectx + dist
-#define ZZ_CTX(dist)       (basectx + dist)
+#define ZZ_CTX(tag, dist)  tag = basectx + dist
 #define ZZ_DIST()          (s - basectx)
-    const char *marker;
-    const char *basectx;
+    const char *marker, *basectx, *p1, *p2, *p3;
     contexts_t ctxs;
     /*!re2c
         re2c:define:YYCTYPE = char;
@@ -57,10 +56,10 @@ static void lex(const char *s)
         d oct @p3
         d oct {
             printf("%u.%u.%u.%u\n",
-                parse_oct(basectx, @p1),
-                parse_oct(@p1 + 1, @p2),
-                parse_oct(@p2 + 1, @p3),
-                parse_oct(@p3 + 1, s));
+                parse_oct(basectx, p1),
+                parse_oct(p1 + 1, p2),
+                parse_oct(p2 + 1, p3),
+                parse_oct(p3 + 1, s));
             return;
         }
     */
index 99ef9fe08cab5224a6db7ea3e83623773c740f33..ff1c9ebf902fa4b4a2b98f20570820639a9cead2 100644 (file)
@@ -28,8 +28,7 @@ struct contexts_t
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER;
-    const char *YYCTXMARKER;
+    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3;
     contexts_t ctxs;
     
 {
@@ -241,12 +240,15 @@ yy16:
        default:        goto yy17;
        }
 yy17:
+       p3 = YYCTXMARKER + ctxs.zz_0p3;
+       p2 = YYCTXMARKER + ctxs.zz_0p2;
+       p1 = YYCTXMARKER + ctxs.zz_0p1;
        {
             printf("%u.%u.%u.%u\n",
-                parse_oct(YYCTXMARKER, (YYCTXMARKER + ctxs.zz_0p1)),
-                parse_oct((YYCTXMARKER + ctxs.zz_0p1) + 1, (YYCTXMARKER + ctxs.zz_0p2)),
-                parse_oct((YYCTXMARKER + ctxs.zz_0p2) + 1, (YYCTXMARKER + ctxs.zz_0p3)),
-                parse_oct((YYCTXMARKER + ctxs.zz_0p3) + 1, YYCURSOR));
+                parse_oct(YYCTXMARKER, p1),
+                parse_oct(p1 + 1, p2),
+                parse_oct(p2 + 1, p3),
+                parse_oct(p3 + 1, YYCURSOR));
             return;
         }
 yy18:
index 0a4f13828ecf14cbc20db35c45e4de2d4315adc2..e1652c7e526f4a153c748a34dc70493a0bbbf950 100644 (file)
@@ -27,8 +27,7 @@ struct contexts_t
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER;
-    const char *YYCTXMARKER;
+    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3;
     contexts_t ctxs;
     /*!re2c
         re2c:define:YYCTYPE = char;
@@ -47,10 +46,10 @@ static void lex(const char *YYCURSOR)
         d oct @p3
         d oct {
             printf("%u.%u.%u.%u\n",
-                parse_oct(YYCTXMARKER, @p1),
-                parse_oct(@p1 + 1, @p2),
-                parse_oct(@p2 + 1, @p3),
-                parse_oct(@p3 + 1, YYCURSOR));
+                parse_oct(YYCTXMARKER, p1),
+                parse_oct(p1 + 1, p2),
+                parse_oct(p2 + 1, p3),
+                parse_oct(p3 + 1, YYCURSOR));
             return;
         }
     */
index 1d245f9e65924ee03214377976d284783887df00..bc4c4f4fddc2c245b2fe503f4133f6d2a931437b 100644 (file)
@@ -28,10 +28,9 @@ static void lex(const char *s)
 #define YYRESTORE()        s = marker
 #define YYBACKUPCTX()      basectx = s
 #define YYRESTORECTX(dist) s = basectx + dist
-#define ZZ_CTX(dist)       (basectx + dist)
+#define ZZ_CTX(tag, dist)  tag = basectx + dist
 #define ZZ_DIST()          (s - basectx)
-    const char *marker;
-    const char *basectx;
+    const char *marker, *basectx, *p1, *p2, *p3;
     contexts_t ctxs;
     
 {
@@ -255,12 +254,15 @@ yy16:
        default:        goto yy17;
        }
 yy17:
+       ZZ_CTX(p3, ctxs.zz_0p3);
+       ZZ_CTX(p2, ctxs.zz_0p2);
+       ZZ_CTX(p1, ctxs.zz_0p1);
        {
             printf("%u.%u.%u.%u\n",
-                parse_oct(basectx, ZZ_CTX(ctxs.zz_0p1)),
-                parse_oct(ZZ_CTX(ctxs.zz_0p1) + 1, ZZ_CTX(ctxs.zz_0p2)),
-                parse_oct(ZZ_CTX(ctxs.zz_0p2) + 1, ZZ_CTX(ctxs.zz_0p3)),
-                parse_oct(ZZ_CTX(ctxs.zz_0p3) + 1, s));
+                parse_oct(basectx, p1),
+                parse_oct(p1 + 1, p2),
+                parse_oct(p2 + 1, p3),
+                parse_oct(p3 + 1, s));
             return;
         }
 yy18:
index 5f24d7b64970af740d3ccc9d2f8a4951761f90cd..fbc0faf414c6eb508e0099865fa11d2179cc7410 100644 (file)
@@ -27,10 +27,9 @@ static void lex(const char *s)
 #define YYRESTORE()        s = marker
 #define YYBACKUPCTX()      basectx = s
 #define YYRESTORECTX(dist) s = basectx + dist
-#define ZZ_CTX(dist)       (basectx + dist)
+#define ZZ_CTX(tag, dist)  tag = basectx + dist
 #define ZZ_DIST()          (s - basectx)
-    const char *marker;
-    const char *basectx;
+    const char *marker, *basectx, *p1, *p2, *p3;
     contexts_t ctxs;
     /*!re2c
         re2c:define:YYCTYPE = char;
@@ -51,10 +50,10 @@ static void lex(const char *s)
         d oct @p3
         d oct {
             printf("%u.%u.%u.%u\n",
-                parse_oct(basectx, @p1),
-                parse_oct(@p1 + 1, @p2),
-                parse_oct(@p2 + 1, @p3),
-                parse_oct(@p3 + 1, s));
+                parse_oct(basectx, p1),
+                parse_oct(p1 + 1, p2),
+                parse_oct(p2 + 1, p3),
+                parse_oct(p3 + 1, s));
             return;
         }
     */
index 1f5634e53e1ba97b121011ff6f036ab10d88b89d..093de8ea1b4a8687bd2d2d7a696ae11fe42b5e30 100644 (file)
@@ -22,8 +22,7 @@ struct contexts_t
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER;
-    const char *YYCTXMARKER;
+    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3;
     contexts_t ctxs;
     
 {
@@ -235,12 +234,15 @@ yy16:
        default:        goto yy17;
        }
 yy17:
+       p3 = YYCTXMARKER + ctxs.zz_0p3;
+       p2 = YYCTXMARKER + ctxs.zz_0p2;
+       p1 = YYCTXMARKER + ctxs.zz_0p1;
        {
             printf("%u.%u.%u.%u\n",
-                parse_oct(YYCTXMARKER, (YYCTXMARKER + ctxs.zz_0p1)),
-                parse_oct((YYCTXMARKER + ctxs.zz_0p1) + 1, (YYCTXMARKER + ctxs.zz_0p2)),
-                parse_oct((YYCTXMARKER + ctxs.zz_0p2) + 1, (YYCTXMARKER + ctxs.zz_0p3)),
-                parse_oct((YYCTXMARKER + ctxs.zz_0p3) + 1, YYCURSOR));
+                parse_oct(YYCTXMARKER, p1),
+                parse_oct(p1 + 1, p2),
+                parse_oct(p2 + 1, p3),
+                parse_oct(p3 + 1, YYCURSOR));
             return;
         }
 yy18:
index 068ce5aaa869052bc9561f9247d14ab425297a88..96f815b59b8bf330a69d80e807535965166c2d4c 100644 (file)
@@ -21,8 +21,7 @@ struct contexts_t
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER;
-    const char *YYCTXMARKER;
+    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3;
     contexts_t ctxs;
     /*!re2c
         re2c:define:YYCTYPE = char;
@@ -41,10 +40,10 @@ static void lex(const char *YYCURSOR)
         d oct @p3
         d oct {
             printf("%u.%u.%u.%u\n",
-                parse_oct(YYCTXMARKER, @p1),
-                parse_oct(@p1 + 1, @p2),
-                parse_oct(@p2 + 1, @p3),
-                parse_oct(@p3 + 1, YYCURSOR));
+                parse_oct(YYCTXMARKER, p1),
+                parse_oct(p1 + 1, p2),
+                parse_oct(p2 + 1, p3),
+                parse_oct(p3 + 1, YYCURSOR));
             return;
         }
     */
index 9af4d34ca487cf4505921ffb3a3ae763b5ba114b..503a9922a63d35bc561a61521b6810a8c03481b8 100644 (file)
@@ -29,13 +29,12 @@ static void lex(const char *s)
 #define YYRESTORE()        s = marker
 #define YYBACKUPCTX()      basectx = s
 #define YYRESTORECTX(dist) s = basectx + dist
-#define ZZ_CTX(dist)       (basectx + dist)
+#define ZZ_CTX(tag, dist)  tag = basectx + dist
 #define ZZ_DIST()          (s - basectx)
-    const char *marker;
-    const char *basectx;
+    const char *marker, *basectx, *p1, *p2, *p3;
     contexts_t ctxs;
     
-#line 39 "tags/conf6.--tags--input(custom).c"
+#line 38 "tags/conf6.--tags--input(custom).c"
 {
        char yych;
        YYBACKUPCTX ();
@@ -56,9 +55,9 @@ static void lex(const char *s)
 yy2:
        YYSKIP ();
 yy3:
-#line 55 "tags/conf6.--tags--input(custom).re"
+#line 54 "tags/conf6.--tags--input(custom).re"
        { printf("error\n"); return; }
-#line 62 "tags/conf6.--tags--input(custom).c"
+#line 61 "tags/conf6.--tags--input(custom).c"
 yy4:
        YYSKIP ();
        YYBACKUP ();
@@ -259,16 +258,19 @@ yy16:
        default:        goto yy17;
        }
 yy17:
-#line 60 "tags/conf6.--tags--input(custom).re"
+       ZZ_CTX(p3, ctxs.zz_0p3);
+       ZZ_CTX(p2, ctxs.zz_0p2);
+       ZZ_CTX(p1, ctxs.zz_0p1);
+#line 59 "tags/conf6.--tags--input(custom).re"
        {
             printf("%u.%u.%u.%u\n",
-                parse_oct(basectx, ZZ_CTX(ctxs.zz_0p1)),
-                parse_oct(ZZ_CTX(ctxs.zz_0p1) + 1, ZZ_CTX(ctxs.zz_0p2)),
-                parse_oct(ZZ_CTX(ctxs.zz_0p2) + 1, ZZ_CTX(ctxs.zz_0p3)),
-                parse_oct(ZZ_CTX(ctxs.zz_0p3) + 1, s));
+                parse_oct(basectx, p1),
+                parse_oct(p1 + 1, p2),
+                parse_oct(p2 + 1, p3),
+                parse_oct(p3 + 1, s));
             return;
         }
-#line 272 "tags/conf6.--tags--input(custom).c"
+#line 274 "tags/conf6.--tags--input(custom).c"
 yy18:
        YYSKIP ();
        yych = YYPEEK ();
@@ -299,7 +301,7 @@ yy20:
        yych = YYPEEK ();
        goto yy17;
 }
-#line 68 "tags/conf6.--tags--input(custom).re"
+#line 67 "tags/conf6.--tags--input(custom).re"
 
 }
 
index 876b0edfc0e9527caca6ac73463ae0e59be3c8b2..794b6ec793bfc94533a65a1b5daeb54ec67705fe 100644 (file)
@@ -35,10 +35,9 @@ static void lex(const char *s)
 #define YYRESTORE()        s = marker
 #define YYBACKUPCTX()      basectx = s
 #define YYRESTORECTX(dist) s = basectx + dist
-#define ZZ_CTX(dist)       (basectx + dist)
+#define ZZ_CTX(tag, dist)  tag = basectx + dist
 #define ZZ_DIST()          (s - basectx)
-    const char *marker;
-    const char *basectx;
+    const char *marker, *basectx, *p1, *p2, *p3;
     contexts_t ctxs;
     /*!re2c
         re2c:define:YYCTYPE = char;
@@ -59,10 +58,10 @@ static void lex(const char *s)
         d oct @p3
         d oct {
             printf("%u.%u.%u.%u\n",
-                parse_oct(basectx, @p1),
-                parse_oct(@p1 + 1, @p2),
-                parse_oct(@p2 + 1, @p3),
-                parse_oct(@p3 + 1, s));
+                parse_oct(basectx, p1),
+                parse_oct(p1 + 1, p2),
+                parse_oct(p2 + 1, p3),
+                parse_oct(p3 + 1, s));
             return;
         }
     */
index 059c122a91b878653985b23ce9c7b49c96c1e8f3..f967b2f2a7943555256b6b9a151cc330285b2ef6 100644 (file)
@@ -23,11 +23,10 @@ struct contexts_t
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER;
-    const char *YYCTXMARKER;
+    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3;
     contexts_t ctxs;
     
-#line 31 "tags/conf6.--tags.c"
+#line 30 "tags/conf6.--tags.c"
 {
        char yych;
        YYCTXMARKER = YYCURSOR;
@@ -48,9 +47,9 @@ static void lex(const char *YYCURSOR)
 yy2:
        ++YYCURSOR;
 yy3:
-#line 45 "tags/conf6.--tags.re"
+#line 44 "tags/conf6.--tags.re"
        { printf("error\n"); return; }
-#line 54 "tags/conf6.--tags.c"
+#line 53 "tags/conf6.--tags.c"
 yy4:
        yych = *(YYMARKER = ++YYCURSOR);
        switch (yych) {
@@ -239,16 +238,19 @@ yy16:
        default:        goto yy17;
        }
 yy17:
-#line 50 "tags/conf6.--tags.re"
+       p3 = YYCTXMARKER + ctxs.zz_0p3;
+       p2 = YYCTXMARKER + ctxs.zz_0p2;
+       p1 = YYCTXMARKER + ctxs.zz_0p1;
+#line 49 "tags/conf6.--tags.re"
        {
             printf("%u.%u.%u.%u\n",
-                parse_oct(YYCTXMARKER, (YYCTXMARKER + ctxs.zz_0p1)),
-                parse_oct((YYCTXMARKER + ctxs.zz_0p1) + 1, (YYCTXMARKER + ctxs.zz_0p2)),
-                parse_oct((YYCTXMARKER + ctxs.zz_0p2) + 1, (YYCTXMARKER + ctxs.zz_0p3)),
-                parse_oct((YYCTXMARKER + ctxs.zz_0p3) + 1, YYCURSOR));
+                parse_oct(YYCTXMARKER, p1),
+                parse_oct(p1 + 1, p2),
+                parse_oct(p2 + 1, p3),
+                parse_oct(p3 + 1, YYCURSOR));
             return;
         }
-#line 252 "tags/conf6.--tags.c"
+#line 254 "tags/conf6.--tags.c"
 yy18:
        yych = *++YYCURSOR;
        switch (yych) {
@@ -277,7 +279,7 @@ yy20:
        yych = *YYCURSOR;
        goto yy17;
 }
-#line 58 "tags/conf6.--tags.re"
+#line 57 "tags/conf6.--tags.re"
 
 }
 
index 73b95dcaa94fd6838a7c0156d8909fffcd435a94..b87121762f219874b6740f4716ffff3910be64cd 100644 (file)
@@ -29,8 +29,7 @@ struct contexts_t
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER;
-    const char *YYCTXMARKER;
+    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3;
     contexts_t ctxs;
     /*!re2c
         re2c:define:YYCTYPE = char;
@@ -49,10 +48,10 @@ static void lex(const char *YYCURSOR)
         d oct @p3
         d oct {
             printf("%u.%u.%u.%u\n",
-                parse_oct(YYCTXMARKER, @p1),
-                parse_oct(@p1 + 1, @p2),
-                parse_oct(@p2 + 1, @p3),
-                parse_oct(@p3 + 1, YYCURSOR));
+                parse_oct(YYCTXMARKER, p1),
+                parse_oct(p1 + 1, p2),
+                parse_oct(p2 + 1, p3),
+                parse_oct(p3 + 1, YYCURSOR));
             return;
         }
     */
index 7879148e7cd792e3b3eabe17c71cee3b09771cf8..a66912a220c8e5bc6527e8e08f6edf2b7b846a9a 100644 (file)
@@ -32,7 +32,8 @@ yy4:
        }
 yy5:
        YYCURSOR = YYCTXMARKER + yyt0;
-       { (YYCTXMARKER + yyt0p) }
+       p = YYCTXMARKER + yyt0p;
+       { 1 p }
 yy6:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
@@ -59,7 +60,8 @@ yy8:
        }
 yy10:
        YYCURSOR = YYCTXMARKER + yyt0;
-       { (YYCTXMARKER + yyt0p) }
+       p = YYCTXMARKER + yyt0p;
+       { 2 p }
 yy11:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
@@ -100,7 +102,8 @@ yy17:
                goto yy18;
        }
 yy18:
-       { (YYCTXMARKER + yyt0p) }
+       p = YYCTXMARKER + yyt0p;
+       { 1 p }
 yy19:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
@@ -122,7 +125,8 @@ yy21:
        }
 yy23:
        YYCURSOR = YYCTXMARKER + yyt0p;
-       { (YYCTXMARKER + yyt1p) }
+       p = YYCTXMARKER + yyt1p;
+       { 2 p }
 }
 
 
@@ -157,7 +161,8 @@ yy28:
                goto yy29;
        }
 yy29:
-       { (YYCTXMARKER + yyt0p) }
+       p = YYCTXMARKER + yyt0p;
+       { 1 p }
 yy30:
        yyaccept = 1;
        YYMARKER = ++YYCURSOR;
@@ -198,7 +203,8 @@ yy34:
        }
 yy35:
        YYCURSOR = YYCTXMARKER + yyt1;
-       { (YYCTXMARKER + yyt0p) }
+       p = YYCTXMARKER + yyt0p;
+       { 2 p }
 }
 
 
@@ -240,7 +246,8 @@ yy41:
        default:        goto yy43;
        }
 yy43:
-       { (YYCTXMARKER + yyt0p) }
+       p = YYCTXMARKER + yyt0p;
+       { 1 p }
 yy44:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
@@ -267,6 +274,7 @@ yy46:
        }
 yy47:
        YYCURSOR = YYCTXMARKER + yyt1;
-       { (YYCTXMARKER + yyt0p) }
+       p = YYCTXMARKER + yyt0p;
+       { 2 p }
 }
 
index 2cb604e19c13275311b9c3fca19dcfb2a225f065..588187bd04b8e4bd2aad18d70f680b20df04468f 100644 (file)
@@ -1,23 +1,23 @@
 /*!re2c
-    "a" @p "b"* / "d"* { @p }
-    "a" @p "b"* / "c"* { @p }
+    "a" @p "b"* / "d"* { p }
+    "a" @p "b"* / "c"* { p }
     * {}
 */
 
 /*!re2c
-    "a" @p "b"*        { @p }
-    "a" @p "b"* / "c"* { @p }
+    "a" @p "b"*        { p }
+    "a" @p "b"* / "c"* { p }
     * {}
 */
 
 /*!re2c
-    "a" @p "b"*         { @p }
-    "a" @p "b"* / "cd"* { @p }
+    "a" @p "b"*         { p }
+    "a" @p "b"* / "cd"* { p }
     * {}
 */
 
 /*!re2c
-    "a" @p "b"+         { @p }
-    "a" @p "b"+ / "cd"* { @p }
+    "a" @p "b"+         { p }
+    "a" @p "b"+ / "cd"* { p }
     * {}
 */
index fb251b4775702173c28a683e5deef9b26d86cf5f..5ada826aed30140478075df237fa5cb9ea604475 100644 (file)
@@ -32,7 +32,8 @@ yy4:
        }
 yy5:
        ++YYCURSOR;
-       { (YYCTXMARKER + yyt0p) }
+       p = YYCTXMARKER + yyt0p;
+       { p }
 yy7:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
@@ -78,7 +79,8 @@ yy13:
        {}
 yy14:
        ++YYCURSOR;
-       { (YYCTXMARKER + yyt0p) }
+       p = YYCTXMARKER + yyt0p;
+       { p }
 yy16:
        yych = *(YYMARKER = ++YYCURSOR);
        switch (yych) {
index 979270408ba1db3b6e478b37fdd75e46187721ad..e7f0aad90d872aa660faf660e45185328b36a1cd 100644 (file)
@@ -6,11 +6,11 @@
 // in the other case non-looping transition goes first (and tags are not lost).
 
 /*!re2c
-    (@p "ac")* "b" { @p }
+    (@p "ac")* "b" { p }
     * {}
 */
 
 /*!re2c
-    (@p "bc")* "a" { @p }
+    (@p "bc")* "a" { p }
     * {}
 */
index 7cf1c46b7e4a184b637727ba34542a525c820729..a6e7a3974acafa59a1585b27fae1d413f08cd374 100644 (file)
@@ -25,7 +25,8 @@
        default:        goto yy2;
        }
 yy2:
-       { 3 (YYCTXMARKER + yyt1p) }
+       p = YYCTXMARKER + yyt1p;
+       { 3 p }
 yy3:
        yyaccept = 0;
        yych = *(YYMARKER = ++YYCURSOR);
@@ -57,7 +58,8 @@ yy6:
        default:        goto yy7;
        }
 yy7:
-       { 2 (YYCTXMARKER + yyt1p) }
+       p = YYCTXMARKER + yyt1p;
+       { 2 p }
 yy8:
        yych = *++YYCURSOR;
        switch (yych) {
index 2f465d27dabea54e17b150e21ea1216890ed85bb..682e172f8033684871dbba59a7a3d34037a98035 100644 (file)
@@ -13,7 +13,7 @@
 /*!re2c
 
     "ababa"          { 1 }
-    "ab" @p "a" "c"? { 2 @p }
-    @p "a"?          { 3 @p }
+    "ab" @p "a" "c"? { 2 p }
+    @p "a"?          { 3 p }
 
 */
index 4c83a6d93e0b97ba61bae659e2230e285aca44a0..f748f83a304f03390614d4d2062a30c4964e97e8 100644 (file)
@@ -26,7 +26,8 @@
        default:        goto yy2;
        }
 yy2:
-       { (YYCTXMARKER + yyt0p) }
+       p = YYCTXMARKER + yyt0p;
+       { p }
 yy3:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
index 2a244c1bc8d4cabcfcdcdf3da034acfb912e059f..acb036a57213f35f4e857c69558101876c989393 100644 (file)
@@ -14,6 +14,6 @@
 
 /*!re2c
 
-    ("ab" @p)* { @p }
+    ("ab" @p)* { p }
 
 */
index e8e5f70dfd78e1f343e1fce9e4665f5a61a0063d..3c2913b7539b541d15f86bafb02dde8bc7f7d9f5 100644 (file)
@@ -58,7 +58,8 @@ yy7:
        default:        goto yy8;
        }
 yy8:
-       { (YYCTXMARKER + yyt0p) }
+       p = YYCTXMARKER + yyt0p;
+       { p }
 yy9:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
index 78da595121b66808cb39041dbc0be69bc8f2bc5d..da7e1294138e12ebb996e3b356108fad401e8bb1 100644 (file)
@@ -5,7 +5,7 @@
 
 /*!re2c
 
-    ("a" @p "bc")+ { @p }
+    ("a" @p "bc")+ { p }
     * {}
 
 */
index 455b3f1e635826e8a4641557a9b29f080622f247..3b67d12787db7b9198df59649ba03743427c86da 100644 (file)
@@ -4,8 +4,7 @@
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER;
-    const char *YYCTXMARKER;
+    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3, *p4;
     
 {
        char yych;
@@ -108,13 +107,17 @@ yy18:
        }
 yy19:
        ++YYCURSOR;
+       p4 = YYCURSOR - 5;
+       p3 = YYCURSOR - 9;
+       p2 = YYCURSOR - 12;
+       p1 = YYCURSOR - 14;
        {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%.*s'\n",
-                (YYCURSOR - 14) - YYCTXMARKER, YYCTXMARKER,
-                (YYCURSOR - 12) - (YYCURSOR - 14), (YYCURSOR - 14),
-                (YYCURSOR - 9) - (YYCURSOR - 12), (YYCURSOR - 12),
-                (YYCURSOR - 5) - (YYCURSOR - 9), (YYCURSOR - 9),
-                YYCURSOR - (YYCURSOR - 5), (YYCURSOR - 5));
+                p1 - YYCTXMARKER, YYCTXMARKER,
+                p2 - p1, p1,
+                p3 - p2, p2,
+                p4 - p3, p3,
+                YYCURSOR - p4, p4);
                 return;
         }
 }
index af302d99b5d5069f59d1f0d4b118dcdad6b563b6..e9ea3f4363f20bf662eaadedb969fa883b7b60e0 100644 (file)
@@ -3,8 +3,7 @@
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER;
-    const char *YYCTXMARKER;
+    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3, *p4;
     /*!re2c
         re2c:define:YYCTYPE = char;
         re2c:yyfill:enable = 0;
@@ -15,11 +14,11 @@ static void lex(const char *YYCURSOR)
             @p3 "3333"
             @p4 "44444" {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%.*s'\n",
-                @p1 - YYCTXMARKER, YYCTXMARKER,
-                @p2 - @p1, @p1,
-                @p3 - @p2, @p2,
-                @p4 - @p3, @p3,
-                YYCURSOR - @p4, @p4);
+                p1 - YYCTXMARKER, YYCTXMARKER,
+                p2 - p1, p1,
+                p3 - p2, p2,
+                p4 - p3, p3,
+                YYCURSOR - p4, p4);
                 return;
         }
     */
index 55c999e648e226a8861ef72cd04751e63deebb1f..9f979083af8525a68b3d33a1b02432043485efa5 100644 (file)
@@ -2,10 +2,17 @@
 #include <stddef.h>
 #include <stdio.h>
 
-static void lex(const char *YYCURSOR)
+static void lex(const char *s)
 {
-    const char *YYMARKER;
-    const char *YYCTXMARKER;
+#define YYPEEK()           *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;
     
 {
        char yych;
@@ -124,13 +131,16 @@ yy18:
 yy19:
        YYSKIP ();
        YYRESTORECTX (YYDIST() - 5);
+       YYTAG(p3, YYDIST() - 4);
+       YYTAG(p2, YYDIST() - 7);
+       YYTAG(p1, YYDIST() - 9);
        {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n",
-                YYTAG(YYDIST() - 9) - YYCTXMARKER, YYCTXMARKER,
-                YYTAG(YYDIST() - 7) - YYTAG(YYDIST() - 9), YYTAG(YYDIST() - 9),
-                YYTAG(YYDIST() - 4) - YYTAG(YYDIST() - 7), YYTAG(YYDIST() - 7),
-                YYCURSOR - YYTAG(YYDIST() - 4), YYTAG(YYDIST() - 4),
-                YYCURSOR);
+                p1 - base, base,
+                p2 - p1, p1,
+                p3 - p2, p2,
+                s - p3, p3,
+                s);
                 return;
         }
 }
index 9c54b2332e6dd09204f9ac15c886cc7a7a149860..e964fbd51fe06695d5cc90c21a1420486c2981ea 100644 (file)
@@ -1,10 +1,17 @@
 #include <stddef.h>
 #include <stdio.h>
 
-static void lex(const char *YYCURSOR)
+static void lex(const char *s)
 {
-    const char *YYMARKER;
-    const char *YYCTXMARKER;
+#define YYPEEK()           *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;
     /*!re2c
         re2c:define:YYCTYPE = char;
         re2c:yyfill:enable = 0;
@@ -15,11 +22,11 @@ static void lex(const char *YYCURSOR)
             @p3 "3333"
             / "44444" {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n",
-                @p1 - YYCTXMARKER, YYCTXMARKER,
-                @p2 - @p1, @p1,
-                @p3 - @p2, @p2,
-                YYCURSOR - @p3, @p3,
-                YYCURSOR);
+                p1 - base, base,
+                p2 - p1, p1,
+                p3 - p2, p2,
+                s - p3, p3,
+                s);
                 return;
         }
     */
index a7a01401e3b65c3938671a4e2ca22377842310f4..ffa7faf87d1a4830b290356d8e0dd774b9411357 100644 (file)
@@ -4,8 +4,7 @@
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER;
-    const char *YYCTXMARKER;
+    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3;
     
 {
        char yych;
@@ -109,12 +108,15 @@ yy18:
 yy19:
        ++YYCURSOR;
        YYCURSOR -= 5;
+       p3 = YYCURSOR - 4;
+       p2 = YYCURSOR - 7;
+       p1 = YYCURSOR - 9;
        {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n",
-                (YYCURSOR - 9) - YYCTXMARKER, YYCTXMARKER,
-                (YYCURSOR - 7) - (YYCURSOR - 9), (YYCURSOR - 9),
-                (YYCURSOR - 4) - (YYCURSOR - 7), (YYCURSOR - 7),
-                YYCURSOR - (YYCURSOR - 4), (YYCURSOR - 4),
+                p1 - YYCTXMARKER, YYCTXMARKER,
+                p2 - p1, p1,
+                p3 - p2, p2,
+                YYCURSOR - p3, p3,
                 YYCURSOR);
                 return;
         }
index 9c54b2332e6dd09204f9ac15c886cc7a7a149860..596eec60f3b790d42b172df3ae199b6a4d35a558 100644 (file)
@@ -3,8 +3,7 @@
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER;
-    const char *YYCTXMARKER;
+    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3;
     /*!re2c
         re2c:define:YYCTYPE = char;
         re2c:yyfill:enable = 0;
@@ -15,10 +14,10 @@ static void lex(const char *YYCURSOR)
             @p3 "3333"
             / "44444" {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n",
-                @p1 - YYCTXMARKER, YYCTXMARKER,
-                @p2 - @p1, @p1,
-                @p3 - @p2, @p2,
-                YYCURSOR - @p3, @p3,
+                p1 - YYCTXMARKER, YYCTXMARKER,
+                p2 - p1, p1,
+                p3 - p2, p2,
+                YYCURSOR - p3, p3,
                 YYCURSOR);
                 return;
         }
index 8dc773035e39e9c8c7ea82f78550015d5bed46cc..441655eb167810f0d348f44c037126ba713ce7b2 100644 (file)
@@ -4,8 +4,7 @@
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER;
-    const char *YYCTXMARKER;
+    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3, *p4;
     
 {
        char yych;
@@ -32,13 +31,17 @@ static void lex(const char *YYCURSOR)
        default:        goto yy3;
        }
 yy2:
+       p4 = YYCTXMARKER + yyt0p4;
+       p3 = YYCTXMARKER + yyt0p3;
+       p2 = YYCTXMARKER + yyt0p2;
+       p1 = YYCTXMARKER + yyt0p1;
        {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%.*s'\n",
-                (YYCTXMARKER + yyt0p1) - YYCTXMARKER, YYCTXMARKER,
-                (YYCTXMARKER + yyt0p2) - (YYCTXMARKER + yyt0p1), (YYCTXMARKER + yyt0p1),
-                (YYCTXMARKER + yyt0p3) - (YYCTXMARKER + yyt0p2), (YYCTXMARKER + yyt0p2),
-                (YYCTXMARKER + yyt0p4) - (YYCTXMARKER + yyt0p3), (YYCTXMARKER + yyt0p3),
-                YYCURSOR - (YYCTXMARKER + yyt0p4), (YYCTXMARKER + yyt0p4));
+                p1 - YYCTXMARKER, YYCTXMARKER,
+                p2 - p1, p1,
+                p3 - p2, p2,
+                p4 - p3, p3,
+                YYCURSOR - p4, p4);
                 return;
         }
 yy3:
@@ -128,4 +131,4 @@ int main(int argc, char **argv)
     }
     return 0;
 }
-re2c: warning: line 17: rule matches empty string [-Wmatch-empty-string]
+re2c: warning: line 16: rule matches empty string [-Wmatch-empty-string]
index 93cb1365722e7662aa51eaf83d91fc53b849bcbb..8092052716bb1fe05e09634cba077f4251f109ca 100644 (file)
@@ -3,8 +3,7 @@
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER;
-    const char *YYCTXMARKER;
+    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3, *p4;
     /*!re2c
         re2c:define:YYCTYPE = char;
         re2c:yyfill:enable = 0;
@@ -16,11 +15,11 @@ static void lex(const char *YYCURSOR)
             @p3 "3"*
             @p4 "4"* {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%.*s'\n",
-                @p1 - YYCTXMARKER, YYCTXMARKER,
-                @p2 - @p1, @p1,
-                @p3 - @p2, @p2,
-                @p4 - @p3, @p3,
-                YYCURSOR - @p4, @p4);
+                p1 - YYCTXMARKER, YYCTXMARKER,
+                p2 - p1, p1,
+                p3 - p2, p2,
+                p4 - p3, p3,
+                YYCURSOR - p4, p4);
                 return;
         }
     */
index 51310e7009275971d303e00d597f8b1abc61e301..f208d660078be1816064aa7b03acacc8f78727af 100644 (file)
@@ -2,10 +2,17 @@
 #include <stddef.h>
 #include <stdio.h>
 
-static void lex(const char *YYCURSOR)
+static void lex(const char *s)
 {
-    const char *YYMARKER;
-    const char *YYCTXMARKER;
+#define YYPEEK()           *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;
     
 {
        char yych;
@@ -33,13 +40,16 @@ static void lex(const char *YYCURSOR)
        }
 yy2:
        YYRESTORECTX (yyt0);
+       YYTAG(p3, yyt0p3);
+       YYTAG(p2, yyt0p2);
+       YYTAG(p1, yyt0p1);
        {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n",
-                YYTAG(yyt0p1) - YYCTXMARKER, YYCTXMARKER,
-                YYTAG(yyt0p2) - YYTAG(yyt0p1), YYTAG(yyt0p1),
-                YYTAG(yyt0p3) - YYTAG(yyt0p2), YYTAG(yyt0p2),
-                YYCURSOR - YYTAG(yyt0p3), YYTAG(yyt0p3),
-                YYCURSOR);
+                p1 - base, base,
+                p2 - p1, p1,
+                p3 - p2, p2,
+                s - p3, p3,
+                s);
                 return;
         }
 yy3:
@@ -129,4 +139,4 @@ int main(int argc, char **argv)
     }
     return 0;
 }
-re2c: warning: line 17: rule matches empty string [-Wmatch-empty-string]
+re2c: warning: line 24: rule matches empty string [-Wmatch-empty-string]
index efdaff32f71946fb2747c49ee53e353e28b3d0c9..c1e533983cf8cfb79e8150bb601d7d9edab3dbae 100644 (file)
@@ -1,10 +1,17 @@
 #include <stddef.h>
 #include <stdio.h>
 
-static void lex(const char *YYCURSOR)
+static void lex(const char *s)
 {
-    const char *YYMARKER;
-    const char *YYCTXMARKER;
+#define YYPEEK()           *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;
     /*!re2c
         re2c:define:YYCTYPE = char;
         re2c:yyfill:enable = 0;
@@ -16,11 +23,11 @@ static void lex(const char *YYCURSOR)
             @p3 "3"*
             / "4"* {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n",
-                @p1 - YYCTXMARKER, YYCTXMARKER,
-                @p2 - @p1, @p1,
-                @p3 - @p2, @p2,
-                YYCURSOR - @p3, @p3,
-                YYCURSOR);
+                p1 - base, base,
+                p2 - p1, p1,
+                p3 - p2, p2,
+                s - p3, p3,
+                s);
                 return;
         }
     */
index bae11c9eddfffac2db6c2d2552e0731b332fbcf1..05142025ac3c85aa63007f239266c9a31773bcc4 100644 (file)
@@ -4,8 +4,7 @@
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER;
-    const char *YYCTXMARKER;
+    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3;
     
 {
        char yych;
@@ -33,12 +32,15 @@ static void lex(const char *YYCURSOR)
        }
 yy2:
        YYCURSOR = YYCTXMARKER + yyt0;
+       p3 = YYCTXMARKER + yyt0p3;
+       p2 = YYCTXMARKER + yyt0p2;
+       p1 = YYCTXMARKER + yyt0p1;
        {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n",
-                (YYCTXMARKER + yyt0p1) - YYCTXMARKER, YYCTXMARKER,
-                (YYCTXMARKER + yyt0p2) - (YYCTXMARKER + yyt0p1), (YYCTXMARKER + yyt0p1),
-                (YYCTXMARKER + yyt0p3) - (YYCTXMARKER + yyt0p2), (YYCTXMARKER + yyt0p2),
-                YYCURSOR - (YYCTXMARKER + yyt0p3), (YYCTXMARKER + yyt0p3),
+                p1 - YYCTXMARKER, YYCTXMARKER,
+                p2 - p1, p1,
+                p3 - p2, p2,
+                YYCURSOR - p3, p3,
                 YYCURSOR);
                 return;
         }
@@ -129,4 +131,4 @@ int main(int argc, char **argv)
     }
     return 0;
 }
-re2c: warning: line 17: rule matches empty string [-Wmatch-empty-string]
+re2c: warning: line 16: rule matches empty string [-Wmatch-empty-string]
index efdaff32f71946fb2747c49ee53e353e28b3d0c9..10364fe99f42378df82f24352e05381c6b7cc877 100644 (file)
@@ -3,8 +3,7 @@
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER;
-    const char *YYCTXMARKER;
+    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3;
     /*!re2c
         re2c:define:YYCTYPE = char;
         re2c:yyfill:enable = 0;
@@ -16,10 +15,10 @@ static void lex(const char *YYCURSOR)
             @p3 "3"*
             / "4"* {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n",
-                @p1 - YYCTXMARKER, YYCTXMARKER,
-                @p2 - @p1, @p1,
-                @p3 - @p2, @p2,
-                YYCURSOR - @p3, @p3,
+                p1 - YYCTXMARKER, YYCTXMARKER,
+                p2 - p1, p1,
+                p3 - p2, p2,
+                YYCURSOR - p3, p3,
                 YYCURSOR);
                 return;
         }
index 2c36b56884e3b190d633dd576c0b1b859fff5c64..defefabd3a00101889daf9c67c63bfe4155092b5 100644 (file)
@@ -4,8 +4,7 @@
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER;
-    const char *YYCTXMARKER;
+    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3, *p4;
     
 {
        char yych;
@@ -64,13 +63,17 @@ yy9:
        }
 yy11:
        ++YYCURSOR;
+       p4 = YYCURSOR - 1;
+       p3 = YYCTXMARKER + yyt0p3;
+       p2 = YYCTXMARKER + (yyt0p3 - 1);
+       p1 = YYCTXMARKER + yyt0p1;
        {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%.*s'\n",
-                (YYCTXMARKER + yyt0p1) - YYCTXMARKER, YYCTXMARKER,
-                (YYCTXMARKER + (yyt0p3 - 1)) - (YYCTXMARKER + yyt0p1), (YYCTXMARKER + yyt0p1),
-                (YYCTXMARKER + yyt0p3) - (YYCTXMARKER + (yyt0p3 - 1)), (YYCTXMARKER + (yyt0p3 - 1)),
-                (YYCURSOR - 1) - (YYCTXMARKER + yyt0p3), (YYCTXMARKER + yyt0p3),
-                YYCURSOR - (YYCURSOR - 1), (YYCURSOR - 1));
+                p1 - YYCTXMARKER, YYCTXMARKER,
+                p2 - p1, p1,
+                p3 - p2, p2,
+                p4 - p3, p3,
+                YYCURSOR - p4, p4);
                 return;
         }
 }
index b9285d2c5b956b7030dd679d16fa3baf601aa522..ebb9b26bd9a1b6bc50b21a306a1a3f3133d99d7e 100644 (file)
@@ -3,8 +3,7 @@
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER;
-    const char *YYCTXMARKER;
+    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3, *p4;
     /*!re2c
         re2c:define:YYCTYPE = char;
         re2c:yyfill:enable = 0;
@@ -15,11 +14,11 @@ static void lex(const char *YYCURSOR)
             @p3 "3"*
             @p4 "4" {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%.*s'\n",
-                @p1 - YYCTXMARKER, YYCTXMARKER,
-                @p2 - @p1, @p1,
-                @p3 - @p2, @p2,
-                @p4 - @p3, @p3,
-                YYCURSOR - @p4, @p4);
+                p1 - YYCTXMARKER, YYCTXMARKER,
+                p2 - p1, p1,
+                p3 - p2, p2,
+                p4 - p3, p3,
+                YYCURSOR - p4, p4);
                 return;
         }
     */
index 54ad6543b87b56a4845ee34ef693552cdf38e853..2bb0fc9b2115b1deed35bd6b8473f3f180be1748 100644 (file)
@@ -2,10 +2,17 @@
 #include <stddef.h>
 #include <stdio.h>
 
-static void lex(const char *YYCURSOR)
+static void lex(const char *s)
 {
-    const char *YYMARKER;
-    const char *YYCTXMARKER;
+#define YYPEEK()           *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;
     
 {
        char yych;
@@ -68,13 +75,16 @@ yy9:
 yy11:
        YYSKIP ();
        YYRESTORECTX (YYDIST() - 1);
+       YYTAG(p3, yyt0p3);
+       YYTAG(p2, (yyt0p3 - 1));
+       YYTAG(p1, yyt0p1);
        {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n",
-                YYTAG(yyt0p1) - YYCTXMARKER, YYCTXMARKER,
-                YYTAG((yyt0p3 - 1)) - YYTAG(yyt0p1), YYTAG(yyt0p1),
-                YYTAG(yyt0p3) - YYTAG((yyt0p3 - 1)), YYTAG((yyt0p3 - 1)),
-                YYCURSOR - YYTAG(yyt0p3), YYTAG(yyt0p3),
-                YYCURSOR);
+                p1 - base, base,
+                p2 - p1, p1,
+                p3 - p2, p2,
+                s - p3, p3,
+                s);
                 return;
         }
 }
index f48a2a0257d5d33516780a33664d029846c5df19..e456605a1a4a24171bc90a1d2f7d208713ffc6b0 100644 (file)
@@ -1,10 +1,17 @@
 #include <stddef.h>
 #include <stdio.h>
 
-static void lex(const char *YYCURSOR)
+static void lex(const char *s)
 {
-    const char *YYMARKER;
-    const char *YYCTXMARKER;
+#define YYPEEK()           *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;
     /*!re2c
         re2c:define:YYCTYPE = char;
         re2c:yyfill:enable = 0;
@@ -15,11 +22,11 @@ static void lex(const char *YYCURSOR)
             @p3 "3"*
             / "4" {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n",
-                @p1 - YYCTXMARKER, YYCTXMARKER,
-                @p2 - @p1, @p1,
-                @p3 - @p2, @p2,
-                YYCURSOR - @p3, @p3,
-                YYCURSOR);
+                p1 - base, base,
+                p2 - p1, p1,
+                p3 - p2, p2,
+                s - p3, p3,
+                s);
                 return;
         }
     */
index a09540a9094cc1f5b0174c5ec624a834f7cb770f..9ce2e30e8f00ffaf82161167485ef0551513dfdb 100644 (file)
@@ -4,8 +4,7 @@
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER;
-    const char *YYCTXMARKER;
+    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3;
     
 {
        char yych;
@@ -65,12 +64,15 @@ yy9:
 yy11:
        ++YYCURSOR;
        YYCURSOR -= 1;
+       p3 = YYCTXMARKER + yyt0p3;
+       p2 = YYCTXMARKER + (yyt0p3 - 1);
+       p1 = YYCTXMARKER + yyt0p1;
        {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n",
-                (YYCTXMARKER + yyt0p1) - YYCTXMARKER, YYCTXMARKER,
-                (YYCTXMARKER + (yyt0p3 - 1)) - (YYCTXMARKER + yyt0p1), (YYCTXMARKER + yyt0p1),
-                (YYCTXMARKER + yyt0p3) - (YYCTXMARKER + (yyt0p3 - 1)), (YYCTXMARKER + (yyt0p3 - 1)),
-                YYCURSOR - (YYCTXMARKER + yyt0p3), (YYCTXMARKER + yyt0p3),
+                p1 - YYCTXMARKER, YYCTXMARKER,
+                p2 - p1, p1,
+                p3 - p2, p2,
+                YYCURSOR - p3, p3,
                 YYCURSOR);
                 return;
         }
index f48a2a0257d5d33516780a33664d029846c5df19..32c3bcde3e89b33ad6d5f117dd47757e2b8adc9e 100644 (file)
@@ -3,8 +3,7 @@
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER;
-    const char *YYCTXMARKER;
+    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3;
     /*!re2c
         re2c:define:YYCTYPE = char;
         re2c:yyfill:enable = 0;
@@ -15,10 +14,10 @@ static void lex(const char *YYCURSOR)
             @p3 "3"*
             / "4" {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n",
-                @p1 - YYCTXMARKER, YYCTXMARKER,
-                @p2 - @p1, @p1,
-                @p3 - @p2, @p2,
-                YYCURSOR - @p3, @p3,
+                p1 - YYCTXMARKER, YYCTXMARKER,
+                p2 - p1, p1,
+                p3 - p2, p2,
+                YYCURSOR - p3, p3,
                 YYCURSOR);
                 return;
         }
index 900066ffcbafc36f1770ae3acd1a4aebdf59928b..8962d6f8e2b191f623b234f50e31be04c02e5649 100644 (file)
@@ -4,8 +4,7 @@
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER;
-    const char *YYCTXMARKER;
+    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3, *p4;
     
 {
        char yych;
@@ -77,13 +76,17 @@ yy12:
        yych = *YYCURSOR;
        goto yy15;
 yy13:
+       p4 = YYCTXMARKER + yyt0p4;
+       p3 = YYCTXMARKER + (yyt0p4 - 1);
+       p2 = YYCTXMARKER + yyt0p2;
+       p1 = YYCTXMARKER + (yyt0p2 - 1);
        {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%.*s'\n",
-                (YYCTXMARKER + (yyt0p2 - 1)) - YYCTXMARKER, YYCTXMARKER,
-                (YYCTXMARKER + yyt0p2) - (YYCTXMARKER + (yyt0p2 - 1)), (YYCTXMARKER + (yyt0p2 - 1)),
-                (YYCTXMARKER + (yyt0p4 - 1)) - (YYCTXMARKER + yyt0p2), (YYCTXMARKER + yyt0p2),
-                (YYCTXMARKER + yyt0p4) - (YYCTXMARKER + (yyt0p4 - 1)), (YYCTXMARKER + (yyt0p4 - 1)),
-                YYCURSOR - (YYCTXMARKER + yyt0p4), (YYCTXMARKER + yyt0p4));
+                p1 - YYCTXMARKER, YYCTXMARKER,
+                p2 - p1, p1,
+                p3 - p2, p2,
+                p4 - p3, p3,
+                YYCURSOR - p4, p4);
                 return;
         }
 yy14:
index 363ec8a79949b7026f080fe7f8ab2af1802cf55d..fecf25d7ae5a8e5d4091df037f37ced75d7abad0 100644 (file)
@@ -3,8 +3,7 @@
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER;
-    const char *YYCTXMARKER;
+    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3, *p4;
     /*!re2c
         re2c:define:YYCTYPE = char;
         re2c:yyfill:enable = 0;
@@ -16,11 +15,11 @@ static void lex(const char *YYCURSOR)
             @p3 "3"
             @p4 "4"* {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%.*s'\n",
-                @p1 - YYCTXMARKER, YYCTXMARKER,
-                @p2 - @p1, @p1,
-                @p3 - @p2, @p2,
-                @p4 - @p3, @p3,
-                YYCURSOR - @p4, @p4);
+                p1 - YYCTXMARKER, YYCTXMARKER,
+                p2 - p1, p1,
+                p3 - p2, p2,
+                p4 - p3, p3,
+                YYCURSOR - p4, p4);
                 return;
         }
     */
index 00beed62a43b9ce89e068337f12e7929d49a57b5..d3e973b2c3a5f202f56ba46cf508b57c920c4724 100644 (file)
@@ -2,10 +2,17 @@
 #include <stddef.h>
 #include <stdio.h>
 
-static void lex(const char *YYCURSOR)
+static void lex(const char *s)
 {
-    const char *YYMARKER;
-    const char *YYCTXMARKER;
+#define YYPEEK()           *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;
     
 {
        char yych;
@@ -83,13 +90,16 @@ yy12:
        goto yy15;
 yy13:
        YYRESTORECTX (yyt0);
+       YYTAG(p3, (yyt0 - 1));
+       YYTAG(p2, yyt0p2);
+       YYTAG(p1, (yyt0p2 - 1));
        {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n",
-                YYTAG((yyt0p2 - 1)) - YYCTXMARKER, YYCTXMARKER,
-                YYTAG(yyt0p2) - YYTAG((yyt0p2 - 1)), YYTAG((yyt0p2 - 1)),
-                YYTAG((yyt0 - 1)) - YYTAG(yyt0p2), YYTAG(yyt0p2),
-                YYCURSOR - YYTAG((yyt0 - 1)), YYTAG((yyt0 - 1)),
-                YYCURSOR);
+                p1 - base, base,
+                p2 - p1, p1,
+                p3 - p2, p2,
+                s - p3, p3,
+                s);
                 return;
         }
 yy14:
index 3f2f0d70e060c76f168d238f335d941e24ece4e8..a9a61afb15f133fe638f34b8d8838e0b80691b96 100644 (file)
@@ -1,10 +1,17 @@
 #include <stddef.h>
 #include <stdio.h>
 
-static void lex(const char *YYCURSOR)
+static void lex(const char *s)
 {
-    const char *YYMARKER;
-    const char *YYCTXMARKER;
+#define YYPEEK()           *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;
     /*!re2c
         re2c:define:YYCTYPE = char;
         re2c:yyfill:enable = 0;
@@ -16,11 +23,11 @@ static void lex(const char *YYCURSOR)
             @p3 "3"
             / "4"* {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n",
-                @p1 - YYCTXMARKER, YYCTXMARKER,
-                @p2 - @p1, @p1,
-                @p3 - @p2, @p2,
-                YYCURSOR - @p3, @p3,
-                YYCURSOR);
+                p1 - base, base,
+                p2 - p1, p1,
+                p3 - p2, p2,
+                s - p3, p3,
+                s);
                 return;
         }
     */
index f7000327e3a2813f958d42288ede7652cfb4b5ee..1cfccf50fed663b2f4cf4a675e51aaa6234e2e2b 100644 (file)
@@ -4,8 +4,7 @@
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER;
-    const char *YYCTXMARKER;
+    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3;
     
 {
        char yych;
@@ -78,12 +77,15 @@ yy12:
        goto yy15;
 yy13:
        YYCURSOR = YYCTXMARKER + yyt0;
+       p3 = YYCTXMARKER + (yyt0 - 1);
+       p2 = YYCTXMARKER + yyt0p2;
+       p1 = YYCTXMARKER + (yyt0p2 - 1);
        {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n",
-                (YYCTXMARKER + (yyt0p2 - 1)) - YYCTXMARKER, YYCTXMARKER,
-                (YYCTXMARKER + yyt0p2) - (YYCTXMARKER + (yyt0p2 - 1)), (YYCTXMARKER + (yyt0p2 - 1)),
-                (YYCTXMARKER + (yyt0 - 1)) - (YYCTXMARKER + yyt0p2), (YYCTXMARKER + yyt0p2),
-                YYCURSOR - (YYCTXMARKER + (yyt0 - 1)), (YYCTXMARKER + (yyt0 - 1)),
+                p1 - YYCTXMARKER, YYCTXMARKER,
+                p2 - p1, p1,
+                p3 - p2, p2,
+                YYCURSOR - p3, p3,
                 YYCURSOR);
                 return;
         }
index 3f2f0d70e060c76f168d238f335d941e24ece4e8..55bb1812a5d585322b7d26677a3156dab15e485f 100644 (file)
@@ -3,8 +3,7 @@
 
 static void lex(const char *YYCURSOR)
 {
-    const char *YYMARKER;
-    const char *YYCTXMARKER;
+    const char *YYMARKER, *YYCTXMARKER, *p1, *p2, *p3;
     /*!re2c
         re2c:define:YYCTYPE = char;
         re2c:yyfill:enable = 0;
@@ -16,10 +15,10 @@ static void lex(const char *YYCURSOR)
             @p3 "3"
             / "4"* {
             printf("'%.*s', '%.*s', '%.*s', '%.*s', '%s'\n",
-                @p1 - YYCTXMARKER, YYCTXMARKER,
-                @p2 - @p1, @p1,
-                @p3 - @p2, @p2,
-                YYCURSOR - @p3, @p3,
+                p1 - YYCTXMARKER, YYCTXMARKER,
+                p2 - p1, p1,
+                p3 - p2, p2,
+                YYCURSOR - p3, p3,
                 YYCURSOR);
                 return;
         }
index 83d8a110e7d65cee954db028ee9014ae4aaf18e6..3d00e9c1949d11fe0e8e723471ee39b88862089d 100644 (file)
@@ -29,6 +29,7 @@ yy4:
        default:        goto yy6;
        }
 yy6:
-       { (YYCTXMARKER + yyt0p) }
+       p = YYCTXMARKER + yyt0p;
+       { p }
 }
 
index d7d25e73e92ca66f8f6f82d269925da2fdfb7b8f..4b11079fde0126be694be789f58b35e5d1d7fa4b 100644 (file)
@@ -2,6 +2,6 @@
 // this is crucial if 'r' contains tags (tag duplication is forbidden)
 
 /*!re2c
-    (@p "a")+ { @p }
+    (@p "a")+ { p }
     *         { d }
 */
index 991bca43d6f9781ae4cdd8fcd626c0316cc5a625..b02abf91f207fcb549f83082ba1a4610523cad37 100644 (file)
@@ -61,6 +61,7 @@ yy12:
        }
 yy13:
        ++YYCURSOR;
-       { (YYCTXMARKER + yyt0p) }
+       p = YYCTXMARKER + yyt0p;
+       { p }
 }
 
index 949b0c4b073e1eb1cfa0e64482a44ec72d2004d8..e8ce365b23bb81abb4aee20f61cf0c8475e0a0bb 100644 (file)
@@ -9,6 +9,6 @@
 
 /*!re2c
     re2c:flags:tags = 1;
-    "b" @p "a" | "ca" { @p }
+    "b" @p "a" | "ca" { p }
     * {}
 */
diff --git a/re2c/test/tags/subst.i--tags.c b/re2c/test/tags/subst.i--tags.c
deleted file mode 100644 (file)
index 88aeff0..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-/* Generated by re2c */
-// Be careful with substitution of tag names:
-// if one tag's name is a prefix of another tag's name,
-// tag with longer name must be substituted first.
-
-
-{
-       YYCTYPE yych;
-       long yyt0p;
-       long yyt0p1;
-       long yyt0p12;
-       long yyt0p123;
-       YYCTXMARKER = YYCURSOR;
-       if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
-       yych = *YYCURSOR;
-       switch (yych) {
-       case 'a':       goto yy4;
-       default:        goto yy2;
-       }
-yy2:
-       ++YYCURSOR;
-yy3:
-       {}
-yy4:
-       yych = *(YYMARKER = ++YYCURSOR);
-       switch (yych) {
-       case 'a':
-       case 'b':       goto yy6;
-       default:        goto yy3;
-       }
-yy5:
-       ++YYCURSOR;
-       if (YYLIMIT <= YYCURSOR) YYFILL(1);
-       yych = *YYCURSOR;
-yy6:
-       switch (yych) {
-       case 'a':       goto yy5;
-       case 'b':
-               yyt0p12 = (YYCURSOR - YYCTXMARKER);
-               goto yy8;
-       default:        goto yy7;
-       }
-yy7:
-       YYCURSOR = YYMARKER;
-       goto yy3;
-yy8:
-       ++YYCURSOR;
-       if (YYLIMIT <= YYCURSOR) YYFILL(1);
-       yych = *YYCURSOR;
-       switch (yych) {
-       case 'b':       goto yy8;
-       case 'c':
-               yyt0p123 = (YYCURSOR - YYCTXMARKER);
-               goto yy10;
-       default:        goto yy7;
-       }
-yy10:
-       ++YYCURSOR;
-       if (YYLIMIT <= YYCURSOR) YYFILL(1);
-       yych = *YYCURSOR;
-       switch (yych) {
-       case 'c':       goto yy10;
-       case 'd':
-               yyt0p = (YYCURSOR - YYCTXMARKER);
-               goto yy12;
-       default:        goto yy7;
-       }
-yy12:
-       ++YYCURSOR;
-       if (YYLIMIT <= YYCURSOR) YYFILL(1);
-       yych = *YYCURSOR;
-       switch (yych) {
-       case 'd':       goto yy12;
-       case 'e':
-               yyt0p1 = (YYCURSOR - YYCTXMARKER);
-               goto yy14;
-       default:        goto yy7;
-       }
-yy14:
-       ++YYCURSOR;
-       if (YYLIMIT <= YYCURSOR) YYFILL(1);
-       yych = *YYCURSOR;
-       switch (yych) {
-       case 'e':       goto yy14;
-       default:        goto yy16;
-       }
-yy16:
-       { (YYCTXMARKER + yyt0p) (YYCTXMARKER + yyt0p1) (YYCTXMARKER + yyt0p12) (YYCTXMARKER + yyt0p123) }
-}
-
diff --git a/re2c/test/tags/subst.i--tags.re b/re2c/test/tags/subst.i--tags.re
deleted file mode 100644 (file)
index efc3b7c..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-// Be careful with substitution of tag names:
-// if one tag's name is a prefix of another tag's name,
-// tag with longer name must be substituted first.
-
-/*!re2c
-    "a"+ @p12 "b"+ @p123 "c"+ @p "d"+ @p1 "e"+ { @p @p1 @p12 @p123 }
-    * {}
-*/