]> granicus.if.org Git - re2c/commitdiff
- Also implement '.' as shortcut for [\000-\377]
authorhelly <helly@642ea486-5414-0410-9d7f-a0204ed87703>
Sat, 9 Jul 2005 18:51:47 +0000 (18:51 +0000)
committerhelly <helly@642ea486-5414-0410-9d7f-a0204ed87703>
Sat, 9 Jul 2005 18:51:47 +0000 (18:51 +0000)
CHANGELOG
bootstrap/scanner.cc
scanner.re
test/input7.c [new file with mode: 0755]
test/input7.re [new file with mode: 0755]
test/input8.c [new file with mode: 0755]
test/input8.re [new file with mode: 0755]

index 7a42f28620775daa716c6cfd6b4a8b9496c343c4..79926d436d70ff5c035c090147e8d04972d93d30 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,6 @@
 Version 0.9.9 (????-??-??)
 --------------------------
-- Implemented #1232777 negated char classes.
+- Implemented #1232777 negated char classes and '.'.
 
 Version 0.9.8 (2005-06-26)
 --------------------------
index cbdbde0b84166823c52b47b2128298604d63d690..32ae6fa575b06688827976451cc91b9ec70fed20 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.9.9.dev on Sat Jul  9 12:50:01 2005 */
+/* Generated by re2c 0.9.9.dev on Sat Jul  9 20:41:37 2005 */
 #line 1 "scanner.re"
 /* $Id$ */
 #include <stdlib.h>
@@ -238,22 +238,23 @@ yy29:
        if(yych <= '/'){
                if(yych <= '"'){
                        if(yych <= 0x0A){
-                               if(yych <= 0x08)        goto yy51;
+                               if(yych <= 0x08)        goto yy53;
                                if(yych <= 0x09)        goto yy47;
                                goto yy49;
                        } else {
                                if(yych == ' ') goto yy47;
-                               if(yych <= '!') goto yy51;
+                               if(yych <= '!') goto yy53;
                                goto yy37;
                        }
                } else {
-                       if(yych <= ')'){
-                               if(yych <= '&') goto yy51;
+                       if(yych <= '*'){
+                               if(yych <= '&') goto yy53;
                                if(yych <= '\'')        goto yy39;
-                               goto yy43;
+                               if(yych <= ')') goto yy43;
+                               goto yy35;
                        } else {
-                               if(yych <= '*') goto yy35;
                                if(yych <= '+') goto yy44;
+                               if(yych <= '-') goto yy53;
                                if(yych <= '.') goto yy51;
                                goto yy33;
                        }
@@ -262,97 +263,97 @@ yy29:
                if(yych <= '@'){
                        if(yych <= '<'){
                                if(yych == ';') goto yy43;
-                               goto yy51;
+                               goto yy53;
                        } else {
                                if(yych <= '=') goto yy43;
                                if(yych == '?') goto yy44;
-                               goto yy51;
+                               goto yy53;
                        }
                } else {
                        if(yych <= '`'){
                                if(yych <= 'Z') goto yy45;
                                if(yych <= '[') goto yy41;
                                if(yych <= '\\')        goto yy43;
-                               goto yy51;
+                               goto yy53;
                        } else {
                                if(yych <= 'z') goto yy45;
                                if(yych <= '{') goto yy31;
                                if(yych <= '|') goto yy43;
-                               goto yy51;
+                               goto yy53;
                        }
                }
        }
 yy31:  yyaccept = 0;
        yych = *(YYMARKER = ++YYCURSOR);
        if(yych <= '/') goto yy32;
-       if(yych <= '9') goto yy82;
+       if(yych <= '9') goto yy84;
        goto yy32;
 yy32:
 #line 139 "scanner.re"
 { depth = 1;
                                  goto code;
                                }
-#line 296 "scanner.cc"
+#line 297 "scanner.cc"
 yy33:  ++YYCURSOR;
-       if((yych = *YYCURSOR) == '*')   goto yy80;
+       if((yych = *YYCURSOR) == '*')   goto yy82;
        goto yy34;
 yy34:
 #line 169 "scanner.re"
 { RETURN(*tok); }
-#line 303 "scanner.cc"
+#line 304 "scanner.cc"
 yy35:  ++YYCURSOR;
-       if((yych = *YYCURSOR) == '/')   goto yy78;
+       if((yych = *YYCURSOR) == '/')   goto yy80;
        goto yy36;
 yy36:
 #line 171 "scanner.re"
 { yylval.op = *tok;
                                  RETURN(CLOSE); }
-#line 311 "scanner.cc"
+#line 312 "scanner.cc"
 yy37:  yyaccept = 1;
        yych = *(YYMARKER = ++YYCURSOR);
-       if(yych != 0x0A)        goto yy74;
+       if(yych != 0x0A)        goto yy76;
        goto yy38;
 yy38:
 #line 156 "scanner.re"
 { fatal("unterminated string constant (missing \")"); }
-#line 319 "scanner.cc"
+#line 320 "scanner.cc"
 yy39:  yyaccept = 2;
        yych = *(YYMARKER = ++YYCURSOR);
-       if(yych != 0x0A)        goto yy69;
+       if(yych != 0x0A)        goto yy71;
        goto yy40;
 yy40:
 #line 157 "scanner.re"
 { fatal("unterminated string constant (missing ')"); }
-#line 327 "scanner.cc"
+#line 328 "scanner.cc"
 yy41:  yyaccept = 3;
        yych = *(YYMARKER = ++YYCURSOR);
        if(yych == 0x0A)        goto yy42;
-       if(yych == '^') goto yy60;
-       goto yy58;
+       if(yych == '^') goto yy62;
+       goto yy60;
 yy42:
 #line 167 "scanner.re"
 { fatal("unterminated range (missing ])"); }
-#line 336 "scanner.cc"
+#line 337 "scanner.cc"
 yy43:  yych = *++YYCURSOR;
        goto yy34;
 yy44:  yych = *++YYCURSOR;
        goto yy36;
 yy45:  ++YYCURSOR;
        yych = *YYCURSOR;
-       goto yy56;
+       goto yy58;
 yy46:
 #line 186 "scanner.re"
 { cur = cursor;
                                  yylval.symbol = Symbol::find(token());
                                  return ID; }
-#line 349 "scanner.cc"
+#line 350 "scanner.cc"
 yy47:  ++YYCURSOR;
        yych = *YYCURSOR;
-       goto yy54;
+       goto yy56;
 yy48:
 #line 190 "scanner.re"
 { goto scan; }
-#line 356 "scanner.cc"
+#line 357 "scanner.cc"
 yy49:  ++YYCURSOR;
        goto yy50;
 yy50:
@@ -361,377 +362,386 @@ yy50:
                                  pos = cursor; cline++;
                                  goto scan;
                                }
-#line 365 "scanner.cc"
+#line 366 "scanner.cc"
 yy51:  ++YYCURSOR;
        goto yy52;
 yy52:
 #line 197 "scanner.re"
+{ cur = cursor;
+                                 yylval.regexp = ranToRE("[\\000-\\377]");
+                                 return RANGE;
+                               }
+#line 375 "scanner.cc"
+yy53:  ++YYCURSOR;
+       goto yy54;
+yy54:
+#line 202 "scanner.re"
 { std::cerr << "unexpected character: " << *tok << std::endl;
                                  goto scan;
                                }
-#line 373 "scanner.cc"
-yy53:  ++YYCURSOR;
+#line 383 "scanner.cc"
+yy55:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       goto yy54;
-yy54:  if(yych == 0x09)        goto yy53;
-       if(yych == ' ') goto yy53;
+       goto yy56;
+yy56:  if(yych == 0x09)        goto yy55;
+       if(yych == ' ') goto yy55;
        goto yy48;
-yy55:  ++YYCURSOR;
+yy57:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       goto yy56;
-yy56:  if(yych <= '@'){
+       goto yy58;
+yy58:  if(yych <= '@'){
                if(yych <= '/') goto yy46;
-               if(yych <= '9') goto yy55;
+               if(yych <= '9') goto yy57;
                goto yy46;
        } else {
-               if(yych <= 'Z') goto yy55;
+               if(yych <= 'Z') goto yy57;
                if(yych <= '`') goto yy46;
-               if(yych <= 'z') goto yy55;
+               if(yych <= 'z') goto yy57;
                goto yy46;
        }
-yy57:  ++YYCURSOR;
+yy59:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       goto yy58;
-yy58:  if(yych <= '['){
-               if(yych != 0x0A)        goto yy57;
-               goto yy59;
+       goto yy60;
+yy60:  if(yych <= '['){
+               if(yych != 0x0A)        goto yy59;
+               goto yy61;
        } else {
-               if(yych <= '\\')        goto yy62;
-               if(yych <= ']') goto yy63;
-               goto yy57;
+               if(yych <= '\\')        goto yy64;
+               if(yych <= ']') goto yy65;
+               goto yy59;
        }
-yy59:  YYCURSOR = YYMARKER;
+yy61:  YYCURSOR = YYMARKER;
        switch(yyaccept){
        case 0: goto yy32;
        case 1: goto yy38;
        case 2: goto yy40;
        case 3: goto yy42;
        }
-yy60:  ++YYCURSOR;
+yy62:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       goto yy61;
-yy61:  if(yych <= '['){
-               if(yych == 0x0A)        goto yy59;
-               goto yy60;
+       goto yy63;
+yy63:  if(yych <= '['){
+               if(yych == 0x0A)        goto yy61;
+               goto yy62;
        } else {
-               if(yych <= '\\')        goto yy65;
-               if(yych <= ']') goto yy66;
-               goto yy60;
+               if(yych <= '\\')        goto yy67;
+               if(yych <= ']') goto yy68;
+               goto yy62;
        }
-yy62:  ++YYCURSOR;
+yy64:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if(yych == 0x0A)        goto yy59;
-       goto yy57;
-yy63:  ++YYCURSOR;
-       goto yy64;
-yy64:
+       if(yych == 0x0A)        goto yy61;
+       goto yy59;
+yy65:  ++YYCURSOR;
+       goto yy66;
+yy66:
 #line 163 "scanner.re"
 { cur = cursor;
                                  yylval.regexp = ranToRE(token());
                                  return RANGE; }
-#line 438 "scanner.cc"
-yy65:  ++YYCURSOR;
+#line 448 "scanner.cc"
+yy67:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if(yych == 0x0A)        goto yy59;
-       goto yy60;
-yy66:  ++YYCURSOR;
-       goto yy67;
-yy67:
+       if(yych == 0x0A)        goto yy61;
+       goto yy62;
+yy68:  ++YYCURSOR;
+       goto yy69;
+yy69:
 #line 159 "scanner.re"
 { cur = cursor;
                                  yylval.regexp = invToRE(token());
                                  return RANGE; }
-#line 451 "scanner.cc"
-yy68:  ++YYCURSOR;
+#line 461 "scanner.cc"
+yy70:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       goto yy69;
-yy69:  if(yych <= '&'){
-               if(yych == 0x0A)        goto yy59;
-               goto yy68;
-       } else {
-               if(yych <= '\'')        goto yy71;
-               if(yych != '\\')        goto yy68;
+       goto yy71;
+yy71:  if(yych <= '&'){
+               if(yych == 0x0A)        goto yy61;
                goto yy70;
+       } else {
+               if(yych <= '\'')        goto yy73;
+               if(yych != '\\')        goto yy70;
+               goto yy72;
        }
-yy70:  ++YYCURSOR;
+yy72:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if(yych == 0x0A)        goto yy59;
-       goto yy68;
-yy71:  ++YYCURSOR;
-       goto yy72;
-yy72:
+       if(yych == 0x0A)        goto yy61;
+       goto yy70;
+yy73:  ++YYCURSOR;
+       goto yy74;
+yy74:
 #line 152 "scanner.re"
 { cur = cursor;
                                  yylval.regexp = strToCaseInsensitiveRE(token());
                                  return STRING; }
-#line 476 "scanner.cc"
-yy73:  ++YYCURSOR;
+#line 486 "scanner.cc"
+yy75:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       goto yy74;
-yy74:  if(yych <= '!'){
-               if(yych == 0x0A)        goto yy59;
-               goto yy73;
-       } else {
-               if(yych <= '"') goto yy76;
-               if(yych != '\\')        goto yy73;
+       goto yy76;
+yy76:  if(yych <= '!'){
+               if(yych == 0x0A)        goto yy61;
                goto yy75;
+       } else {
+               if(yych <= '"') goto yy78;
+               if(yych != '\\')        goto yy75;
+               goto yy77;
        }
-yy75:  ++YYCURSOR;
+yy77:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if(yych == 0x0A)        goto yy59;
-       goto yy73;
-yy76:  ++YYCURSOR;
-       goto yy77;
-yy77:
+       if(yych == 0x0A)        goto yy61;
+       goto yy75;
+yy78:  ++YYCURSOR;
+       goto yy79;
+yy79:
 #line 148 "scanner.re"
 { cur = cursor;
                                  yylval.regexp = strToRE(token());
                                  return STRING; }
-#line 501 "scanner.cc"
-yy78:  ++YYCURSOR;
-       goto yy79;
-yy79:
-#line 145 "scanner.re"
-{ tok = cursor;
-                                 RETURN(0); }
-#line 508 "scanner.cc"
+#line 511 "scanner.cc"
 yy80:  ++YYCURSOR;
        goto yy81;
 yy81:
+#line 145 "scanner.re"
+{ tok = cursor;
+                                 RETURN(0); }
+#line 518 "scanner.cc"
+yy82:  ++YYCURSOR;
+       goto yy83;
+yy83:
 #line 142 "scanner.re"
 { depth = 1;
                                  goto comment; }
-#line 515 "scanner.cc"
-yy82:  ++YYCURSOR;
+#line 525 "scanner.cc"
+yy84:  ++YYCURSOR;
        if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
-       goto yy83;
-yy83:  if(yych <= '/'){
-               if(yych == ',') goto yy86;
-               goto yy59;
+       goto yy85;
+yy85:  if(yych <= '/'){
+               if(yych == ',') goto yy88;
+               goto yy61;
        } else {
-               if(yych <= '9') goto yy82;
-               if(yych != '}') goto yy59;
-               goto yy84;
+               if(yych <= '9') goto yy84;
+               if(yych != '}') goto yy61;
+               goto yy86;
        }
-yy84:  ++YYCURSOR;
-       goto yy85;
-yy85:
+yy86:  ++YYCURSOR;
+       goto yy87;
+yy87:
 #line 174 "scanner.re"
 { yylval.extop.minsize = atoi((char *)tok+1);
                                  yylval.extop.maxsize = atoi((char *)tok+1);
                                  RETURN(CLOSESIZE); }
-#line 535 "scanner.cc"
-yy86:  yych = *++YYCURSOR;
-       if(yych != '}') goto yy90;
-       goto yy87;
-yy87:  ++YYCURSOR;
-       goto yy88;
-yy88:
+#line 545 "scanner.cc"
+yy88:  yych = *++YYCURSOR;
+       if(yych != '}') goto yy92;
+       goto yy89;
+yy89:  ++YYCURSOR;
+       goto yy90;
+yy90:
 #line 182 "scanner.re"
 { yylval.extop.minsize = atoi((char *)tok+1);
                                  yylval.extop.maxsize = -1;
                                  RETURN(CLOSESIZE); }
-#line 546 "scanner.cc"
-yy89:  ++YYCURSOR;
+#line 556 "scanner.cc"
+yy91:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       goto yy90;
-yy90:  if(yych <= '/') goto yy59;
-       if(yych <= '9') goto yy89;
-       if(yych != '}') goto yy59;
-       goto yy91;
-yy91:  ++YYCURSOR;
        goto yy92;
-yy92:
+yy92:  if(yych <= '/') goto yy61;
+       if(yych <= '9') goto yy91;
+       if(yych != '}') goto yy61;
+       goto yy93;
+yy93:  ++YYCURSOR;
+       goto yy94;
+yy94:
 #line 178 "scanner.re"
 { yylval.extop.minsize = atoi((char *)tok+1);
                                  yylval.extop.maxsize = MAX(yylval.extop.minsize,atoi(strchr((char *)tok, ',')+1));
                                  RETURN(CLOSESIZE); }
-#line 562 "scanner.cc"
+#line 572 "scanner.cc"
 }
-#line 200 "scanner.re"
+#line 205 "scanner.re"
 
 
 code:
 
-#line 569 "scanner.cc"
+#line 579 "scanner.cc"
 {
        YYCTYPE yych;
        unsigned int yyaccept;
-       goto yy93;
+       goto yy95;
        ++YYCURSOR;
-yy93:
+yy95:
        if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
        if(yych <= '&'){
                if(yych <= 0x0A){
-                       if(yych <= 0x09)        goto yy101;
-                       goto yy99;
-               } else {
-                       if(yych == '"') goto yy103;
+                       if(yych <= 0x09)        goto yy103;
                        goto yy101;
+               } else {
+                       if(yych == '"') goto yy105;
+                       goto yy103;
                }
        } else {
                if(yych <= '{'){
-                       if(yych <= '\'')        goto yy104;
-                       if(yych <= 'z') goto yy101;
-                       goto yy97;
+                       if(yych <= '\'')        goto yy106;
+                       if(yych <= 'z') goto yy103;
+                       goto yy99;
                } else {
-                       if(yych != '}') goto yy101;
-                       goto yy95;
+                       if(yych != '}') goto yy103;
+                       goto yy97;
                }
        }
-yy95:  ++YYCURSOR;
-       goto yy96;
-yy96:
-#line 204 "scanner.re"
+yy97:  ++YYCURSOR;
+       goto yy98;
+yy98:
+#line 209 "scanner.re"
 { if(--depth == 0){
                                        cur = cursor;
                                        yylval.token = new Token(token(), tline);
                                        return CODE;
                                  }
                                  goto code; }
-#line 606 "scanner.cc"
-yy97:  ++YYCURSOR;
-       goto yy98;
-yy98:
-#line 210 "scanner.re"
-{ ++depth;
-                                 goto code; }
-#line 613 "scanner.cc"
+#line 616 "scanner.cc"
 yy99:  ++YYCURSOR;
        goto yy100;
 yy100:
-#line 212 "scanner.re"
+#line 215 "scanner.re"
+{ ++depth;
+                                 goto code; }
+#line 623 "scanner.cc"
+yy101: ++YYCURSOR;
+       goto yy102;
+yy102:
+#line 217 "scanner.re"
 { if(cursor == eof) fatal("missing '}'");
                                  pos = cursor; cline++;
                                  goto code;
                                }
-#line 622 "scanner.cc"
-yy101: ++YYCURSOR;
-       goto yy102;
-yy102:
-#line 216 "scanner.re"
+#line 632 "scanner.cc"
+yy103: ++YYCURSOR;
+       goto yy104;
+yy104:
+#line 221 "scanner.re"
 { goto code; }
-#line 628 "scanner.cc"
-yy103: yyaccept = 0;
+#line 638 "scanner.cc"
+yy105: yyaccept = 0;
        yych = *(YYMARKER = ++YYCURSOR);
-       if(yych == 0x0A)        goto yy102;
-       goto yy110;
-yy104: yyaccept = 0;
+       if(yych == 0x0A)        goto yy104;
+       goto yy112;
+yy106: yyaccept = 0;
        yych = *(YYMARKER = ++YYCURSOR);
-       if(yych == 0x0A)        goto yy102;
-       goto yy106;
-yy105: ++YYCURSOR;
+       if(yych == 0x0A)        goto yy104;
+       goto yy108;
+yy107: ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       goto yy106;
-yy106: if(yych <= '&'){
-               if(yych != 0x0A)        goto yy105;
-               goto yy107;
+       goto yy108;
+yy108: if(yych <= '&'){
+               if(yych != 0x0A)        goto yy107;
+               goto yy109;
        } else {
-               if(yych <= '\'')        goto yy101;
-               if(yych == '\\')        goto yy108;
-               goto yy105;
+               if(yych <= '\'')        goto yy103;
+               if(yych == '\\')        goto yy110;
+               goto yy107;
        }
-yy107: YYCURSOR = YYMARKER;
+yy109: YYCURSOR = YYMARKER;
        switch(yyaccept){
-       case 0: goto yy102;
+       case 0: goto yy104;
        }
-yy108: ++YYCURSOR;
+yy110: ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if(yych == 0x0A)        goto yy107;
-       goto yy105;
-yy109: ++YYCURSOR;
+       if(yych == 0x0A)        goto yy109;
+       goto yy107;
+yy111: ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       goto yy110;
-yy110: if(yych <= '!'){
-               if(yych == 0x0A)        goto yy107;
-               goto yy109;
-       } else {
-               if(yych <= '"') goto yy101;
-               if(yych != '\\')        goto yy109;
+       goto yy112;
+yy112: if(yych <= '!'){
+               if(yych == 0x0A)        goto yy109;
                goto yy111;
+       } else {
+               if(yych <= '"') goto yy103;
+               if(yych != '\\')        goto yy111;
+               goto yy113;
        }
-yy111: ++YYCURSOR;
+yy113: ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if(yych == 0x0A)        goto yy107;
-       goto yy109;
+       if(yych == 0x0A)        goto yy109;
+       goto yy111;
 }
-#line 217 "scanner.re"
+#line 222 "scanner.re"
 
 
 comment:
 
-#line 681 "scanner.cc"
+#line 691 "scanner.cc"
 {
        YYCTYPE yych;
-       goto yy112;
+       goto yy114;
        ++YYCURSOR;
-yy112:
+yy114:
        if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
        if(yych <= ')'){
-               if(yych == 0x0A)        goto yy117;
-               goto yy119;
+               if(yych == 0x0A)        goto yy119;
+               goto yy121;
        } else {
-               if(yych <= '*') goto yy114;
-               if(yych == '/') goto yy116;
-               goto yy119;
+               if(yych <= '*') goto yy116;
+               if(yych == '/') goto yy118;
+               goto yy121;
        }
-yy114: ++YYCURSOR;
-       if((yych = *YYCURSOR) == '/')   goto yy122;
-       goto yy115;
-yy115:
-#line 231 "scanner.re"
+yy116: ++YYCURSOR;
+       if((yych = *YYCURSOR) == '/')   goto yy124;
+       goto yy117;
+yy117:
+#line 236 "scanner.re"
 { goto comment; }
-#line 703 "scanner.cc"
-yy116: yych = *++YYCURSOR;
-       if(yych == '*') goto yy120;
-       goto yy115;
-yy117: ++YYCURSOR;
-       goto yy118;
-yy118:
-#line 227 "scanner.re"
+#line 713 "scanner.cc"
+yy118: yych = *++YYCURSOR;
+       if(yych == '*') goto yy122;
+       goto yy117;
+yy119: ++YYCURSOR;
+       goto yy120;
+yy120:
+#line 232 "scanner.re"
 { if(cursor == eof) RETURN(0);
                                  tok = pos = cursor; cline++;
                                  goto comment;
                                }
-#line 715 "scanner.cc"
-yy119: yych = *++YYCURSOR;
-       goto yy115;
-yy120: ++YYCURSOR;
-       goto yy121;
-yy121:
-#line 225 "scanner.re"
-{ ++depth;
-                                 goto comment; }
-#line 724 "scanner.cc"
+#line 725 "scanner.cc"
+yy121: yych = *++YYCURSOR;
+       goto yy117;
 yy122: ++YYCURSOR;
        goto yy123;
 yy123:
-#line 221 "scanner.re"
+#line 230 "scanner.re"
+{ ++depth;
+                                 goto comment; }
+#line 734 "scanner.cc"
+yy124: ++YYCURSOR;
+       goto yy125;
+yy125:
+#line 226 "scanner.re"
 { if(--depth == 0)
                                        goto scan;
                                    else
                                        goto comment; }
-#line 733 "scanner.cc"
+#line 743 "scanner.cc"
 }
-#line 232 "scanner.re"
+#line 237 "scanner.re"
 
 }
 
index d270df791b25fd7d86b0da728628e895a63dd60d..1086e20629e50a680ac85566dfc020ec2cb776ab 100644 (file)
@@ -194,6 +194,11 @@ scan:
                                  goto scan;
                                }
 
+       "."                     { cur = cursor;
+                                 yylval.regexp = ranToRE("[\\000-\\377]");
+                                 return RANGE;
+                               }
+
        any                     { std::cerr << "unexpected character: " << *tok << std::endl;
                                  goto scan;
                                }
diff --git a/test/input7.c b/test/input7.c
new file mode 100755 (executable)
index 0000000..300284c
--- /dev/null
@@ -0,0 +1,21 @@
+/* Generated by re2c */
+#line 1 "input7.re"
+
+#line 5 "<stdout>"
+{
+       YYCTYPE yych;
+       goto yy0;
+       ++YYCURSOR;
+yy0:
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       goto yy2;
+yy2:   ++YYCURSOR;
+       goto yy3;
+yy3:
+#line 3 "input7.re"
+{ return 0; }
+#line 19 "<stdout>"
+}
+#line 5 "input7.re"
+
diff --git a/test/input7.re b/test/input7.re
new file mode 100755 (executable)
index 0000000..4af565d
--- /dev/null
@@ -0,0 +1,5 @@
+/*!re2c
+
+.       { return 0; }
+
+*/
diff --git a/test/input8.c b/test/input8.c
new file mode 100755 (executable)
index 0000000..a3296dc
--- /dev/null
@@ -0,0 +1,49 @@
+/* Generated by re2c */
+#line 1 "input8.re"
+
+#line 5 "<stdout>"
+{
+       YYCTYPE yych;
+       unsigned int yyaccept;
+       goto yy0;
+       ++YYCURSOR;
+yy0:
+       if((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
+       yych = *YYCURSOR;
+       goto yy2;
+yy2:   yyaccept = 0;
+       yych = *(YYMARKER = ++YYCURSOR);
+       if(yych <= 0x00)        goto yy4;
+       goto yy6;
+yy3:
+#line 4 "input8.re"
+{ return 1; }
+#line 22 "<stdout>"
+yy4:   yyaccept = 1;
+       yych = *(YYMARKER = ++YYCURSOR);
+       if(yych <= 0x00)        goto yy7;
+       goto yy8;
+yy5:
+#line 3 "input8.re"
+{ return 0; }
+#line 30 "<stdout>"
+yy6:   yych = *++YYCURSOR;
+       if(yych >= 0x01)        goto yy8;
+       goto yy7;
+yy7:   yych = *++YYCURSOR;
+       if(yych <= 0x00)        goto yy10;
+       goto yy5;
+yy8:   yych = *++YYCURSOR;
+       if(yych <= 0x00)        goto yy10;
+       goto yy9;
+yy9:   YYCURSOR = YYMARKER;
+       switch(yyaccept){
+       case 1: goto yy5;
+       case 0: goto yy3;
+       }
+yy10:  ++YYCURSOR;
+       yych = *YYCURSOR;
+       goto yy5;
+}
+#line 6 "input8.re"
+
diff --git a/test/input8.re b/test/input8.re
new file mode 100755 (executable)
index 0000000..9d62783
--- /dev/null
@@ -0,0 +1,6 @@
+/*!re2c
+
+.{1,3}"\000"       { return 0; }
+.                  { return 1; }
+
+*/