]> granicus.if.org Git - re2c/commitdiff
- Add error message for illegal closure forms
authorhelly <helly@642ea486-5414-0410-9d7f-a0204ed87703>
Tue, 27 Dec 2005 23:58:09 +0000 (23:58 +0000)
committerhelly <helly@642ea486-5414-0410-9d7f-a0204ed87703>
Tue, 27 Dec 2005 23:58:09 +0000 (23:58 +0000)
bootstrap/scanner.cc
scanner.re
test/error1.c [new file with mode: 0755]
test/error1.re [new file with mode: 0755]
test/error2.c [new file with mode: 0755]
test/error2.re [new file with mode: 0755]
test/error3.c [new file with mode: 0755]
test/error3.re [new file with mode: 0755]

index fc534a745ce657cba162b3af91146fb04f88e369..1ef13067b20dcbbb29812c679361510633ffcc5e 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.9.12.dev on Tue Dec 27 23:51:46 2005 */
+/* Generated by re2c 0.9.12.dev on Wed Dec 28 00:53:17 2005 */
 #line 1 "scanner.re"
 /* $Id$ */
 #include <stdlib.h>
@@ -285,23 +285,27 @@ yy29:
        }
 yy31:  yyaccept = 0;
        yych = *(YYMARKER = ++YYCURSOR);
-       if(yych <= '/') goto yy32;
-       if(yych <= '0') goto yy84;
-       if(yych <= '9') goto yy85;
-       goto yy32;
+       if(yych <= '/'){
+               if(yych == ',') goto yy87;
+               goto yy32;
+       } else {
+               if(yych <= '0') goto yy84;
+               if(yych <= '9') goto yy85;
+               goto yy32;
+       }
 yy32:
 #line 139 "scanner.re"
 { depth = 1;
                                  goto code;
                                }
-#line 298 "scanner.cc"
+#line 302 "scanner.cc"
 yy33:  ++YYCURSOR;
        if((yych = *YYCURSOR) == '*')   goto yy82;
        goto yy34;
 yy34:
 #line 169 "scanner.re"
 { RETURN(*tok); }
-#line 305 "scanner.cc"
+#line 309 "scanner.cc"
 yy35:  ++YYCURSOR;
        if((yych = *YYCURSOR) == '/')   goto yy80;
        goto yy36;
@@ -309,7 +313,7 @@ yy36:
 #line 171 "scanner.re"
 { yylval.op = *tok;
                                  RETURN(CLOSE); }
-#line 313 "scanner.cc"
+#line 317 "scanner.cc"
 yy37:  yyaccept = 1;
        yych = *(YYMARKER = ++YYCURSOR);
        if(yych != 0x0A)        goto yy76;
@@ -317,7 +321,7 @@ yy37:       yyaccept = 1;
 yy38:
 #line 156 "scanner.re"
 { fatal("unterminated string constant (missing \")"); }
-#line 321 "scanner.cc"
+#line 325 "scanner.cc"
 yy39:  yyaccept = 2;
        yych = *(YYMARKER = ++YYCURSOR);
        if(yych != 0x0A)        goto yy71;
@@ -325,7 +329,7 @@ yy39:       yyaccept = 2;
 yy40:
 #line 157 "scanner.re"
 { fatal("unterminated string constant (missing ')"); }
-#line 329 "scanner.cc"
+#line 333 "scanner.cc"
 yy41:  yyaccept = 3;
        yych = *(YYMARKER = ++YYCURSOR);
        if(yych == 0x0A)        goto yy42;
@@ -334,7 +338,7 @@ yy41:       yyaccept = 3;
 yy42:
 #line 167 "scanner.re"
 { fatal("unterminated range (missing ])"); }
-#line 338 "scanner.cc"
+#line 342 "scanner.cc"
 yy43:  yych = *++YYCURSOR;
        goto yy34;
 yy44:  yych = *++YYCURSOR;
@@ -343,44 +347,44 @@ yy45:     ++YYCURSOR;
        yych = *YYCURSOR;
        goto yy58;
 yy46:
-#line 189 "scanner.re"
+#line 191 "scanner.re"
 { cur = cursor;
                                  yylval.symbol = Symbol::find(token());
                                  return ID; }
-#line 351 "scanner.cc"
+#line 355 "scanner.cc"
 yy47:  ++YYCURSOR;
        goto yy48;
 yy48:
-#line 193 "scanner.re"
+#line 195 "scanner.re"
 { cur = cursor;
                                  yylval.regexp = mkDot();
                                  return RANGE;
                                }
-#line 360 "scanner.cc"
+#line 364 "scanner.cc"
 yy49:  ++YYCURSOR;
        yych = *YYCURSOR;
        goto yy56;
 yy50:
-#line 198 "scanner.re"
+#line 200 "scanner.re"
 { goto scan; }
-#line 367 "scanner.cc"
+#line 371 "scanner.cc"
 yy51:  ++YYCURSOR;
        goto yy52;
 yy52:
-#line 200 "scanner.re"
+#line 202 "scanner.re"
 { if(cursor == eof) RETURN(0);
                                  pos = cursor; cline++;
                                  goto scan;
                                }
-#line 376 "scanner.cc"
+#line 380 "scanner.cc"
 yy53:  ++YYCURSOR;
        goto yy54;
 yy54:
-#line 205 "scanner.re"
+#line 207 "scanner.re"
 { std::cerr << "unexpected character: " << *tok << std::endl;
                                  goto scan;
                                }
-#line 384 "scanner.cc"
+#line 388 "scanner.cc"
 yy55:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
@@ -420,6 +424,7 @@ yy61:       YYCURSOR = YYMARKER;
        case 1: goto yy38;
        case 2: goto yy40;
        case 3: goto yy42;
+       case 4: goto yy88;
        }
 yy62:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
@@ -445,7 +450,7 @@ yy66:
 { cur = cursor;
                                  yylval.regexp = ranToRE(token());
                                  return RANGE; }
-#line 449 "scanner.cc"
+#line 454 "scanner.cc"
 yy67:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
@@ -458,7 +463,7 @@ yy69:
 { cur = cursor;
                                  yylval.regexp = invToRE(token());
                                  return RANGE; }
-#line 462 "scanner.cc"
+#line 467 "scanner.cc"
 yy70:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
@@ -483,7 +488,7 @@ yy74:
 { cur = cursor;
                                  yylval.regexp = strToCaseInsensitiveRE(token());
                                  return STRING; }
-#line 487 "scanner.cc"
+#line 492 "scanner.cc"
 yy75:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
@@ -508,254 +513,266 @@ yy79:
 { cur = cursor;
                                  yylval.regexp = strToRE(token());
                                  return STRING; }
-#line 512 "scanner.cc"
+#line 517 "scanner.cc"
 yy80:  ++YYCURSOR;
        goto yy81;
 yy81:
 #line 145 "scanner.re"
 { tok = cursor;
                                  RETURN(0); }
-#line 519 "scanner.cc"
+#line 524 "scanner.cc"
 yy82:  ++YYCURSOR;
        goto yy83;
 yy83:
 #line 142 "scanner.re"
 { depth = 1;
                                  goto comment; }
-#line 526 "scanner.cc"
+#line 531 "scanner.cc"
 yy84:  yych = *++YYCURSOR;
-       if(yych == ',') goto yy96;
+       if(yych == ',') goto yy98;
        goto yy86;
 yy85:  ++YYCURSOR;
        if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
        goto yy86;
 yy86:  if(yych <= '/'){
-               if(yych == ',') goto yy89;
+               if(yych == ',') goto yy91;
                goto yy61;
        } else {
                if(yych <= '9') goto yy85;
-               if(yych != '}') goto yy61;
-               goto yy87;
+               if(yych == '}') goto yy89;
+               goto yy61;
        }
 yy87:  ++YYCURSOR;
        goto yy88;
 yy88:
+#line 189 "scanner.re"
+{ fatal("illegal closure form, use '{n}', '{n,}', '{n,m}' where n and m are numbers"); }
+#line 552 "scanner.cc"
+yy89:  ++YYCURSOR;
+       goto yy90;
+yy90:
 #line 177 "scanner.re"
 { yylval.extop.minsize = atoi((char *)tok+1);
                                  yylval.extop.maxsize = atoi((char *)tok+1);
                                  RETURN(CLOSESIZE); }
-#line 549 "scanner.cc"
-yy89:  yych = *++YYCURSOR;
-       if(yych != '}') goto yy93;
-       goto yy90;
-yy90:  ++YYCURSOR;
-       goto yy91;
-yy91:
+#line 560 "scanner.cc"
+yy91:  yyaccept = 4;
+       yych = *(YYMARKER = ++YYCURSOR);
+       if(yych <= '/') goto yy88;
+       if(yych <= '9') goto yy94;
+       if(yych != '}') goto yy88;
+       goto yy92;
+yy92:  ++YYCURSOR;
+       goto yy93;
+yy93:
 #line 185 "scanner.re"
 { yylval.extop.minsize = atoi((char *)tok+1);
                                  yylval.extop.maxsize = -1;
                                  RETURN(CLOSESIZE); }
-#line 560 "scanner.cc"
-yy92:  ++YYCURSOR;
+#line 574 "scanner.cc"
+yy94:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       goto yy93;
-yy93:  if(yych <= '/') goto yy61;
-       if(yych <= '9') goto yy92;
-       if(yych != '}') goto yy61;
-       goto yy94;
-yy94:  ++YYCURSOR;
        goto yy95;
-yy95:
+yy95:  if(yych <= '/') goto yy61;
+       if(yych <= '9') goto yy94;
+       if(yych != '}') goto yy61;
+       goto yy96;
+yy96:  ++YYCURSOR;
+       goto yy97;
+yy97:
 #line 181 "scanner.re"
 { yylval.extop.minsize = atoi((char *)tok+1);
                                  yylval.extop.maxsize = MAX(yylval.extop.minsize,atoi(strchr((char *)tok, ',')+1));
                                  RETURN(CLOSESIZE); }
-#line 576 "scanner.cc"
-yy96:  yych = *++YYCURSOR;
-       if(yych != '}') goto yy93;
-       goto yy97;
-yy97:  ++YYCURSOR;
-       goto yy98;
-yy98:
+#line 590 "scanner.cc"
+yy98:  yyaccept = 4;
+       yych = *(YYMARKER = ++YYCURSOR);
+       if(yych <= '/') goto yy88;
+       if(yych <= '9') goto yy94;
+       if(yych != '}') goto yy88;
+       goto yy99;
+yy99:  ++YYCURSOR;
+       goto yy100;
+yy100:
 #line 174 "scanner.re"
 { yylval.op = '*';
                                  RETURN(CLOSE); }
-#line 586 "scanner.cc"
+#line 603 "scanner.cc"
 }
-#line 208 "scanner.re"
+#line 210 "scanner.re"
 
 
 code:
 
-#line 593 "scanner.cc"
+#line 610 "scanner.cc"
 {
        YYCTYPE yych;
        unsigned int yyaccept = 0;
-       goto yy99;
+       goto yy101;
        ++YYCURSOR;
-yy99:
+yy101:
        if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
        if(yych <= '&'){
                if(yych <= 0x0A){
-                       if(yych <= 0x09)        goto yy107;
-                       goto yy105;
-               } else {
-                       if(yych == '"') goto yy109;
+                       if(yych <= 0x09)        goto yy109;
                        goto yy107;
+               } else {
+                       if(yych == '"') goto yy111;
+                       goto yy109;
                }
        } else {
                if(yych <= '{'){
-                       if(yych <= '\'')        goto yy110;
-                       if(yych <= 'z') goto yy107;
-                       goto yy103;
+                       if(yych <= '\'')        goto yy112;
+                       if(yych <= 'z') goto yy109;
+                       goto yy105;
                } else {
-                       if(yych != '}') goto yy107;
-                       goto yy101;
+                       if(yych != '}') goto yy109;
+                       goto yy103;
                }
        }
-yy101: ++YYCURSOR;
-       goto yy102;
-yy102:
-#line 212 "scanner.re"
+yy103: ++YYCURSOR;
+       goto yy104;
+yy104:
+#line 214 "scanner.re"
 { if(--depth == 0){
                                        cur = cursor;
                                        yylval.token = new Token(token(), tline);
                                        return CODE;
                                  }
                                  goto code; }
-#line 630 "scanner.cc"
-yy103: ++YYCURSOR;
-       goto yy104;
-yy104:
-#line 218 "scanner.re"
-{ ++depth;
-                                 goto code; }
-#line 637 "scanner.cc"
+#line 647 "scanner.cc"
 yy105: ++YYCURSOR;
        goto yy106;
 yy106:
 #line 220 "scanner.re"
+{ ++depth;
+                                 goto code; }
+#line 654 "scanner.cc"
+yy107: ++YYCURSOR;
+       goto yy108;
+yy108:
+#line 222 "scanner.re"
 { if(cursor == eof) fatal("missing '}'");
                                  pos = cursor; cline++;
                                  goto code;
                                }
-#line 646 "scanner.cc"
-yy107: ++YYCURSOR;
-       goto yy108;
-yy108:
-#line 224 "scanner.re"
+#line 663 "scanner.cc"
+yy109: ++YYCURSOR;
+       goto yy110;
+yy110:
+#line 226 "scanner.re"
 { goto code; }
-#line 652 "scanner.cc"
-yy109: yyaccept = 0;
+#line 669 "scanner.cc"
+yy111: yyaccept = 0;
        yych = *(YYMARKER = ++YYCURSOR);
-       if(yych == 0x0A)        goto yy108;
-       goto yy116;
-yy110: yyaccept = 0;
+       if(yych == 0x0A)        goto yy110;
+       goto yy118;
+yy112: yyaccept = 0;
        yych = *(YYMARKER = ++YYCURSOR);
-       if(yych == 0x0A)        goto yy108;
-       goto yy112;
-yy111: ++YYCURSOR;
+       if(yych == 0x0A)        goto yy110;
+       goto yy114;
+yy113: ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       goto yy112;
-yy112: if(yych <= '&'){
-               if(yych != 0x0A)        goto yy111;
-               goto yy113;
+       goto yy114;
+yy114: if(yych <= '&'){
+               if(yych != 0x0A)        goto yy113;
+               goto yy115;
        } else {
-               if(yych <= '\'')        goto yy107;
-               if(yych == '\\')        goto yy114;
-               goto yy111;
+               if(yych <= '\'')        goto yy109;
+               if(yych == '\\')        goto yy116;
+               goto yy113;
        }
-yy113: YYCURSOR = YYMARKER;
+yy115: YYCURSOR = YYMARKER;
        switch(yyaccept){
-       case 0: goto yy108;
+       case 0: goto yy110;
        }
-yy114: ++YYCURSOR;
+yy116: ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if(yych == 0x0A)        goto yy113;
-       goto yy111;
-yy115: ++YYCURSOR;
+       if(yych == 0x0A)        goto yy115;
+       goto yy113;
+yy117: ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       goto yy116;
-yy116: if(yych <= '!'){
-               if(yych == 0x0A)        goto yy113;
-               goto yy115;
-       } else {
-               if(yych <= '"') goto yy107;
-               if(yych != '\\')        goto yy115;
+       goto yy118;
+yy118: if(yych <= '!'){
+               if(yych == 0x0A)        goto yy115;
                goto yy117;
+       } else {
+               if(yych <= '"') goto yy109;
+               if(yych != '\\')        goto yy117;
+               goto yy119;
        }
-yy117: ++YYCURSOR;
+yy119: ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if(yych == 0x0A)        goto yy113;
-       goto yy115;
+       if(yych == 0x0A)        goto yy115;
+       goto yy117;
 }
-#line 225 "scanner.re"
+#line 227 "scanner.re"
 
 
 comment:
 
-#line 705 "scanner.cc"
+#line 722 "scanner.cc"
 {
        YYCTYPE yych;
-       goto yy118;
+       goto yy120;
        ++YYCURSOR;
-yy118:
+yy120:
        if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
        if(yych <= ')'){
-               if(yych == 0x0A)        goto yy123;
-               goto yy125;
+               if(yych == 0x0A)        goto yy125;
+               goto yy127;
        } else {
-               if(yych <= '*') goto yy120;
-               if(yych == '/') goto yy122;
-               goto yy125;
+               if(yych <= '*') goto yy122;
+               if(yych == '/') goto yy124;
+               goto yy127;
        }
-yy120: ++YYCURSOR;
-       if((yych = *YYCURSOR) == '/')   goto yy128;
-       goto yy121;
-yy121:
-#line 239 "scanner.re"
+yy122: ++YYCURSOR;
+       if((yych = *YYCURSOR) == '/')   goto yy130;
+       goto yy123;
+yy123:
+#line 241 "scanner.re"
 { goto comment; }
-#line 727 "scanner.cc"
-yy122: yych = *++YYCURSOR;
-       if(yych == '*') goto yy126;
-       goto yy121;
-yy123: ++YYCURSOR;
-       goto yy124;
-yy124:
-#line 235 "scanner.re"
+#line 744 "scanner.cc"
+yy124: yych = *++YYCURSOR;
+       if(yych == '*') goto yy128;
+       goto yy123;
+yy125: ++YYCURSOR;
+       goto yy126;
+yy126:
+#line 237 "scanner.re"
 { if(cursor == eof) RETURN(0);
                                  tok = pos = cursor; cline++;
                                  goto comment;
                                }
-#line 739 "scanner.cc"
-yy125: yych = *++YYCURSOR;
-       goto yy121;
-yy126: ++YYCURSOR;
-       goto yy127;
-yy127:
-#line 233 "scanner.re"
-{ ++depth;
-                                 goto comment; }
-#line 748 "scanner.cc"
+#line 756 "scanner.cc"
+yy127: yych = *++YYCURSOR;
+       goto yy123;
 yy128: ++YYCURSOR;
        goto yy129;
 yy129:
-#line 229 "scanner.re"
+#line 235 "scanner.re"
+{ ++depth;
+                                 goto comment; }
+#line 765 "scanner.cc"
+yy130: ++YYCURSOR;
+       goto yy131;
+yy131:
+#line 231 "scanner.re"
 { if(--depth == 0)
                                        goto scan;
                                    else
                                        goto comment; }
-#line 757 "scanner.cc"
+#line 774 "scanner.cc"
 }
-#line 240 "scanner.re"
+#line 242 "scanner.re"
 
 }
 
index fb819917fcee1a54101ad1cff6bbc9d6e2ec98a4..242e1fb70d370bf45b311b20a1976ef901458d7d 100644 (file)
@@ -186,6 +186,8 @@ scan:
                                  yylval.extop.maxsize = -1;
                                  RETURN(CLOSESIZE); }
 
+       "{" [0-9]* ","          { fatal("illegal closure form, use '{n}', '{n,}', '{n,m}' where n and m are numbers"); }
+
        letter (letter|digit)*  { cur = cursor;
                                  yylval.symbol = Symbol::find(token());
                                  return ID; }
diff --git a/test/error1.c b/test/error1.c
new file mode 100755 (executable)
index 0000000..145d8fd
--- /dev/null
@@ -0,0 +1,17 @@
+line 18, column 5: illegal closure form, use '{n}', '{n,}', '{n,m}' where n and m are numbers
+/* Generated by re2c */
+#line 1 "error1.re"
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#define RET(n) return n
+
+int scan(const char *s, int l) {
+const char *p = s;
+const char *q;
+#define YYCTYPE         char
+#define YYCURSOR        p
+#define YYLIMIT         (s+l)
+#define YYMARKER        q
+#define YYFILL(n)
diff --git a/test/error1.re b/test/error1.re
new file mode 100755 (executable)
index 0000000..8bf9085
--- /dev/null
@@ -0,0 +1,21 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#define RET(n) return n
+
+int scan(const char *s, int l) {
+const char *p = s;
+const char *q;
+#define YYCTYPE         char
+#define YYCURSOR        p
+#define YYLIMIT         (s+l)
+#define YYMARKER        q
+#define YYFILL(n)
+/*!re2c
+       any     = [\000-\377];
+
+       'a'{,}"\n"      {RET(1);}
+       any             {RET(0);}
+*/
+}
diff --git a/test/error2.c b/test/error2.c
new file mode 100755 (executable)
index 0000000..8ea7e6a
--- /dev/null
@@ -0,0 +1,17 @@
+line 18, column 5: illegal closure form, use '{n}', '{n,}', '{n,m}' where n and m are numbers
+/* Generated by re2c */
+#line 1 "error2.re"
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#define RET(n) return n
+
+int scan(const char *s, int l) {
+const char *p = s;
+const char *q;
+#define YYCTYPE         char
+#define YYCURSOR        p
+#define YYLIMIT         (s+l)
+#define YYMARKER        q
+#define YYFILL(n)
diff --git a/test/error2.re b/test/error2.re
new file mode 100755 (executable)
index 0000000..7beb353
--- /dev/null
@@ -0,0 +1,21 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#define RET(n) return n
+
+int scan(const char *s, int l) {
+const char *p = s;
+const char *q;
+#define YYCTYPE         char
+#define YYCURSOR        p
+#define YYLIMIT         (s+l)
+#define YYMARKER        q
+#define YYFILL(n)
+/*!re2c
+       any     = [\000-\377];
+
+       'a'{0,b}"\n"    {RET(1);}
+       any             {RET(0);}
+*/
+}
diff --git a/test/error3.c b/test/error3.c
new file mode 100755 (executable)
index 0000000..9183a14
--- /dev/null
@@ -0,0 +1,46 @@
+unexpected character: ]
+/* Generated by re2c */
+#line 1 "error3.re"
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#define RET(n) return n
+
+int scan(const char *s, int l) {
+const char *p = s;
+const char *q;
+#define YYCTYPE         char
+#define YYCURSOR        p
+#define YYLIMIT         (s+l)
+#define YYMARKER        q
+#define YYFILL(n)
+
+#line 19 "<stdout>"
+{
+       YYCTYPE yych;
+       goto yy0;
+       ++YYCURSOR;
+yy0:
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych){
+       case 'a':       goto yy2;
+       default:        goto yy4;
+       }
+yy2:   ++YYCURSOR;
+       goto yy3;
+yy3:
+#line 18 "error3.re"
+{RET(1);}
+#line 36 "<stdout>"
+yy4:   ++YYCURSOR;
+       goto yy5;
+yy5:
+#line 19 "error3.re"
+{RET(0);}
+#line 42 "<stdout>"
+}
+#line 20 "error3.re"
+
+}
diff --git a/test/error3.re b/test/error3.re
new file mode 100755 (executable)
index 0000000..959d250
--- /dev/null
@@ -0,0 +1,21 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#define RET(n) return n
+
+int scan(const char *s, int l) {
+const char *p = s;
+const char *q;
+#define YYCTYPE         char
+#define YYCURSOR        p
+#define YYLIMIT         (s+l)
+#define YYMARKER        q
+#define YYFILL(n)
+/*!re2c
+       any     = [\000-\377];
+
+       [a]]    {RET(1);}
+       any     {RET(0);}
+*/
+}