--- /dev/null
+/* 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, which
+// further are deduplicated and we end up with single
+// tag
+
+
+{
+ YYCTYPE yych;
+ if (YYLESSTHAN (4)) YYFILL(4);
+ yych = YYPEEK ();
+ switch (yych) {
+ case 'a': goto yy4;
+ default: goto yy2;
+ }
+yy2:
+ YYSKIP ();
+yy3:
+ { d }
+yy4:
+ YYSKIP ();
+ yych = YYPEEK ();
+ switch (yych) {
+ case 'b':
+ YYBACKUPCTX ();
+ goto yy5;
+ default: goto yy3;
+ }
+yy5:
+ YYSKIP ();
+ YYBACKUP ();
+ yych = YYPEEK ();
+ switch (yych) {
+ case 'b': goto yy7;
+ default: goto yy6;
+ }
+yy6:
+ YYRESTORECTX ();
+ { 1 }
+yy7:
+ YYSKIP ();
+ yych = YYPEEK ();
+ switch (yych) {
+ case 'c':
+ YYBACKUPCTX ();
+ goto yy9;
+ default: goto yy8;
+ }
+yy8:
+ YYRESTORE ();
+ goto yy6;
+yy9:
+ YYSKIP ();
+ YYRESTORECTX ();
+ { 0 }
+}
+
--- /dev/null
+// overlapping trailing contexts of fixed length:
+// because of generic API we cannot take advantage of
+// fixed length and have to use multiple tags, which
+// further are deduplicated and we end up with single
+// tag
+
+/*!re2c
+ "abb" / "c" { 0 }
+ "a" / "b" { 1 }
+ * { d }
+*/
--- /dev/null
+/* Generated by re2c */
+// overlapping trailing contexts of fixed length:
+// we don't need any tags at all
+
+
+{
+ YYCTYPE yych;
+ if ((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
+ yych = *YYCURSOR;
+ switch (yych) {
+ case 'a': goto yy4;
+ default: goto yy2;
+ }
+yy2:
+ ++YYCURSOR;
+yy3:
+ { d }
+yy4:
+ yych = *++YYCURSOR;
+ switch (yych) {
+ case 'b': goto yy5;
+ default: goto yy3;
+ }
+yy5:
+ yych = *(YYMARKER = ++YYCURSOR);
+ switch (yych) {
+ case 'b': goto yy7;
+ default: goto yy6;
+ }
+yy6:
+ YYCURSOR -= 1;
+ { 1 }
+yy7:
+ yych = *++YYCURSOR;
+ switch (yych) {
+ case 'c': goto yy9;
+ default: goto yy8;
+ }
+yy8:
+ YYCURSOR = YYMARKER;
+ goto yy6;
+yy9:
+ ++YYCURSOR;
+ YYCURSOR -= 1;
+ { 0 }
+}
+
--- /dev/null
+// overlapping trailing contexts of fixed length:
+// we don't need any tags at all
+
+/*!re2c
+ "abb" / "c" { 0 }
+ "a" / "b" { 1 }
+ * { d }
+*/
--- /dev/null
+/* Generated by re2c */
+// overlapping trailing contexts of variable length:
+// we need multiple tags and we cannot deduplicate them
+
+
+{
+ YYCTYPE yych;
+ long yytag0;
+ long yytag1;
+ YYBACKUPCTX ();
+ if (YYLESSTHAN (4)) YYFILL(4);
+ yych = YYPEEK ();
+ switch (yych) {
+ case 'a': goto yy4;
+ default: goto yy2;
+ }
+yy2:
+ YYSKIP ();
+ { d }
+yy4:
+ YYSKIP ();
+ yytag1 = YYDIST();
+ switch ((yych = YYPEEK ())) {
+ case 'b': goto yy6;
+ default: goto yy5;
+ }
+yy5:
+ YYRESTORECTX (yytag1);
+ { 1 }
+yy6:
+ YYSKIP ();
+ YYBACKUP ();
+ yych = YYPEEK ();
+ switch (yych) {
+ case 'c':
+ yytag0 = 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 (yytag0);
+ { 0 }
+}
+
--- /dev/null
+// overlapping trailing contexts of variable length:
+// we need multiple tags and we cannot deduplicate them
+
+/*!re2c
+ "ab" / "c"{2,} { 0 }
+ "a" / "b"* { 1 }
+ * { d }
+*/
--- /dev/null
+/* Generated by re2c */
+// overlapping trailing contexts of variable length:
+// we need multiple tags and we cannot deduplicate them
+
+
+{
+ YYCTYPE yych;
+ long yytag0;
+ long yytag1;
+ YYCTXMARKER = YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
+ yych = *YYCURSOR;
+ switch (yych) {
+ case 'a': goto yy4;
+ default: goto yy2;
+ }
+yy2:
+ ++YYCURSOR;
+ { d }
+yy4:
+ ++YYCURSOR;
+ yytag1 = (YYCURSOR - YYCTXMARKER);
+ switch ((yych = *YYCURSOR)) {
+ case 'b': goto yy6;
+ default: goto yy5;
+ }
+yy5:
+ YYCURSOR = YYCTXMARKER + yytag1;
+ { 1 }
+yy6:
+ yych = *(YYMARKER = ++YYCURSOR);
+ switch (yych) {
+ case 'c':
+ yytag0 = (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 + yytag0;
+ { 0 }
+}
+
--- /dev/null
+// overlapping trailing contexts of variable length:
+// we need multiple tags and we cannot deduplicate them
+
+/*!re2c
+ "ab" / "c"{2,} { 0 }
+ "a" / "b"* { 1 }
+ * { d }
+*/
/* Generated by re2c */
+// overlapping trailing contexts of variable length:
+// in principle, we need multiple tags here, but in this
+// particular case all tags can be implemented using sinle
+// variable (due to tag deduplication)
+
{
YYCTYPE yych;
}
yy2:
YYSKIP ();
- {}
+ { d }
yy4:
YYSKIP ();
YYBACKUPCTX ();
}
yy5:
YYRESTORECTX ();
- {}
+ { 1 }
yy6:
YYSKIP ();
switch ((yych = YYPEEK ())) {
}
yy7:
YYRESTORECTX ();
- {}
+ { 0 }
yy8:
YYSKIP ();
if (YYLESSTHAN (1)) YYFILL(1);
--- /dev/null
+// overlapping trailing contexts of variable length:
+// in principle, we need multiple tags here, but in this
+// particular case all tags can be implemented using sinle
+// variable (due to tag deduplication)
+
+/*!re2c
+ "ab" / "c"* { 0 }
+ "a" / "b"* { 1 }
+ * { d }
+*/
/* Generated by re2c */
+// overlapping trailing contexts of variable length:
+// in principle, we need multiple tags here, but in this
+// particular case all tags can be implemented using sinle
+// variable (due to tag deduplication)
+
{
YYCTYPE yych;
}
yy2:
++YYCURSOR;
- {}
+ { d }
yy4:
++YYCURSOR;
YYCTXMARKER = YYCURSOR;
}
yy5:
YYCURSOR = YYCTXMARKER;
- {}
+ { 1 }
yy6:
++YYCURSOR;
switch ((yych = *YYCURSOR)) {
}
yy7:
YYCURSOR = YYCTXMARKER;
- {}
+ { 0 }
yy8:
++YYCURSOR;
if (YYLIMIT <= YYCURSOR) YYFILL(1);
--- /dev/null
+// overlapping trailing contexts of variable length:
+// in principle, we need multiple tags here, but in this
+// particular case all tags can be implemented using sinle
+// variable (due to tag deduplication)
+
+/*!re2c
+ "ab" / "c"* { 0 }
+ "a" / "b"* { 1 }
+ * { d }
+*/
+++ /dev/null
-/*!re2c
- "ab" / "c"* {}
- "a" / "b"* {}
- * {}
-*/
+++ /dev/null
-/*!re2c
- "ab" / "c"* {}
- "a" / "b"* {}
- * {}
-*/