]> granicus.if.org Git - re2c/commitdiff
Featurerequest #869298 (Add case insensitive string literals)
authorhelly <helly@642ea486-5414-0410-9d7f-a0204ed87703>
Mon, 19 Apr 2004 02:13:49 +0000 (02:13 +0000)
committerhelly <helly@642ea486-5414-0410-9d7f-a0204ed87703>
Mon, 19 Apr 2004 02:13:49 +0000 (02:13 +0000)
actions.cc
bootstrap/scanner.cc
examples/repeater.re
re.h
re2c.1.in
scanner.re

index c9599e23dc5a24be2450ec8bd803e3df1dc7935a..f344b5b849c3fa2f477b3067e8e5044a5c014038 100644 (file)
@@ -423,6 +423,32 @@ RegExp *strToRE(SubStr s){
     return re;
 }
 
+RegExp *strToCaseInsensitiveRE(SubStr s){
+    s.len -= 2; s.str += 1;
+    if(s.len == 0)
+       return new NullOp;
+       uchar c = unescape(s);
+       RegExp *re, *reL, *reU;
+       if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
+           reL = matchChar(tolower(c));
+       reU = matchChar(toupper(c));
+           re = mkAlt(reL, reU);
+       } else {
+           re = matchChar(c);
+       }
+    while(s.len > 0) {
+               uchar c = unescape(s);
+               if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
+                   reL = matchChar(tolower(c));
+               reU = matchChar(toupper(c));
+                       re = new CatOp(re, mkAlt(reL, reU));
+       } else {
+                       re = new CatOp(re, matchChar(c));
+               }
+       }
+    return re;
+}
+
 RegExp *ranToRE(SubStr s){
     s.len -= 2; s.str += 1;
     if(s.len == 0)
index 7f2941401ee6c82f3e58cd026c817aa2514a800c..5b39048e8a676aacda7005f2d8191117dc137594 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.9.2 on Sun Mar 14 23:47:55 2004 */
+/* Generated by re2c 0.9.2 on Mon Apr 19 03:45:41 2004 */
 #line 1 "scanner.re"
 /* $Id$ */
 #include <stdlib.h>
@@ -158,440 +158,472 @@ yy16:   ++YYCURSOR;
 yy15:
        if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
-       if(yych <= ':'){
+       if(yych <= '/'){
                if(yych <= '"'){
                        if(yych <= '\n'){
-                               if(yych <= '\b')        goto yy35;
-                               if(yych <= '\t')        goto yy31;
-                               goto yy33;
+                               if(yych <= '\b')        goto yy37;
+                               if(yych <= '\t')        goto yy33;
+                               goto yy35;
                        } else {
-                               if(yych == ' ') goto yy31;
-                               if(yych <= '!') goto yy35;
+                               if(yych == ' ') goto yy33;
+                               if(yych <= '!') goto yy37;
                                goto yy23;
                        }
                } else {
-                       if(yych <= '*'){
-                               if(yych <= '\'')        goto yy35;
-                               if(yych <= ')') goto yy27;
-                               goto yy21;
+                       if(yych <= ')'){
+                               if(yych <= '&') goto yy37;
+                               if(yych <= '\'')        goto yy25;
+                               goto yy29;
                        } else {
-                               if(yych <= '+') goto yy28;
-                               if(yych == '/') goto yy19;
-                               goto yy35;
+                               if(yych <= '*') goto yy21;
+                               if(yych <= '+') goto yy30;
+                               if(yych <= '.') goto yy37;
+                               goto yy19;
                        }
                }
        } else {
-               if(yych <= 'Z'){
-                       if(yych <= '='){
-                               if(yych == '<') goto yy35;
-                               goto yy27;
+               if(yych <= '@'){
+                       if(yych <= '<'){
+                               if(yych == ';') goto yy29;
+                               goto yy37;
                        } else {
-                               if(yych == '?') goto yy28;
-                               if(yych <= '@') goto yy35;
-                               goto yy29;
+                               if(yych <= '=') goto yy29;
+                               if(yych == '?') goto yy30;
+                               goto yy37;
                        }
                } else {
                        if(yych <= '`'){
-                               if(yych <= '[') goto yy25;
-                               if(yych <= '\\')        goto yy27;
-                               goto yy35;
+                               if(yych <= 'Z') goto yy31;
+                               if(yych <= '[') goto yy27;
+                               if(yych <= '\\')        goto yy29;
+                               goto yy37;
                        } else {
-                               if(yych <= 'z') goto yy29;
+                               if(yych <= 'z') goto yy31;
                                if(yych <= '{') goto yy17;
-                               if(yych <= '|') goto yy27;
-                               goto yy35;
+                               if(yych <= '|') goto yy29;
+                               goto yy37;
                        }
                }
        }
 yy17:  yyaccept = 0;
        yych = *(YYMARKER = ++YYCURSOR);
        if(yych <= '/') goto yy18;
-       if(yych <= '9') goto yy56;
+       if(yych <= '9') goto yy62;
        goto yy18;
 yy18:
 #line 106 "scanner.re"
 { depth = 1;
                                  goto code;
                                }
-#line 132 "re2c-output.c"
+#line 134 "re2c-output.c"
 yy19:  yych = *++YYCURSOR;
-       if(yych == '*') goto yy54;
+       if(yych == '*') goto yy60;
        goto yy20;
 yy20:
-#line 125 "scanner.re"
+#line 130 "scanner.re"
 { RETURN(*tok); }
-#line 139 "re2c-output.c"
+#line 141 "re2c-output.c"
 yy21:  yych = *++YYCURSOR;
-       if(yych == '/') goto yy52;
+       if(yych == '/') goto yy58;
        goto yy22;
 yy22:
-#line 127 "scanner.re"
+#line 132 "scanner.re"
 { yylval.op = *tok;
                                  RETURN(CLOSE); }
-#line 147 "re2c-output.c"
+#line 149 "re2c-output.c"
 yy23:  yyaccept = 1;
        yych = *(YYMARKER = ++YYCURSOR);
-       if(yych != '\n')        goto yy48;
+       if(yych != '\n')        goto yy54;
        goto yy24;
 yy24:
-#line 118 "scanner.re"
+#line 123 "scanner.re"
 { fatal("bad string"); }
-#line 155 "re2c-output.c"
+#line 157 "re2c-output.c"
 yy25:  yyaccept = 2;
        yych = *(YYMARKER = ++YYCURSOR);
-       if(yych != '\n')        goto yy42;
+       if(yych != '\n')        goto yy49;
        goto yy26;
 yy26:
-#line 123 "scanner.re"
+#line 158 "scanner.re"
+{ cerr << "unexpected character: " << *tok << endl;
+                                 goto scan;
+                               }
+#line 167 "re2c-output.c"
+yy27:  yyaccept = 3;
+       yych = *(YYMARKER = ++YYCURSOR);
+       if(yych != '\n')        goto yy43;
+       goto yy28;
+yy28:
+#line 128 "scanner.re"
 { fatal("bad character constant"); }
-#line 163 "re2c-output.c"
-yy27:  yych = *++YYCURSOR;
+#line 175 "re2c-output.c"
+yy29:  yych = *++YYCURSOR;
        goto yy20;
-yy28:  yych = *++YYCURSOR;
+yy30:  yych = *++YYCURSOR;
        goto yy22;
-yy29:  yych = *++YYCURSOR;
-       goto yy40;
-yy30:
-#line 142 "scanner.re"
+yy31:  yych = *++YYCURSOR;
+       goto yy41;
+yy32:
+#line 147 "scanner.re"
 { cur = cursor;
                                  yylval.symbol = Symbol::find(token());
                                  return ID; }
-#line 175 "re2c-output.c"
-yy31:  yych = *++YYCURSOR;
-       goto yy38;
-yy32:
-#line 146 "scanner.re"
-{ goto scan; }
-#line 181 "re2c-output.c"
+#line 187 "re2c-output.c"
 yy33:  yych = *++YYCURSOR;
-       goto yy34;
+       goto yy39;
 yy34:
-#line 148 "scanner.re"
-{ if(cursor == eof) RETURN(0);
-                                 pos = cursor; cline++;
-                                 goto scan;
-                               }
-#line 190 "re2c-output.c"
+#line 151 "scanner.re"
+{ goto scan; }
+#line 193 "re2c-output.c"
 yy35:  yych = *++YYCURSOR;
        goto yy36;
 yy36:
 #line 153 "scanner.re"
-{ cerr << "unexpected character: " << *tok << endl;
+{ if(cursor == eof) RETURN(0);
+                                 pos = cursor; cline++;
                                  goto scan;
-                               }
-#line 198 "re2c-output.c"
-yy37:  ++YYCURSOR;
+                               }
+#line 202 "re2c-output.c"
+yy37:  yych = *++YYCURSOR;
+       goto yy26;
+yy38:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       goto yy38;
-yy38:  if(yych == '\t')        goto yy37;
-       if(yych == ' ') goto yy37;
-       goto yy32;
-yy39:  ++YYCURSOR;
+       goto yy39;
+yy39:  if(yych == '\t')        goto yy38;
+       if(yych == ' ') goto yy38;
+       goto yy34;
+yy40:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       goto yy40;
-yy40:  if(yych <= '@'){
-               if(yych <= '/') goto yy30;
-               if(yych <= '9') goto yy39;
-               goto yy30;
+       goto yy41;
+yy41:  if(yych <= '@'){
+               if(yych <= '/') goto yy32;
+               if(yych <= '9') goto yy40;
+               goto yy32;
        } else {
-               if(yych <= 'Z') goto yy39;
-               if(yych <= '`') goto yy30;
-               if(yych <= 'z') goto yy39;
-               goto yy30;
+               if(yych <= 'Z') goto yy40;
+               if(yych <= '`') goto yy32;
+               if(yych <= 'z') goto yy40;
+               goto yy32;
        }
-yy41:  ++YYCURSOR;
+yy42:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       goto yy42;
-yy42:  if(yych <= '['){
-               if(yych != '\n')        goto yy41;
-               goto yy43;
+       goto yy43;
+yy43:  if(yych <= '['){
+               if(yych != '\n')        goto yy42;
+               goto yy44;
        } else {
-               if(yych <= '\\')        goto yy44;
-               if(yych <= ']') goto yy45;
-               goto yy41;
+               if(yych <= '\\')        goto yy45;
+               if(yych <= ']') goto yy46;
+               goto yy42;
        }
-yy43:  YYCURSOR = YYMARKER;
+yy44:  YYCURSOR = YYMARKER;
        switch(yyaccept){
        case 0: goto yy18;
        case 1: goto yy24;
+       case 3: goto yy28;
        case 2: goto yy26;
        }
-yy44:  ++YYCURSOR;
+yy45:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if(yych == '\n')        goto yy43;
-       goto yy41;
-yy45:  yych = *++YYCURSOR;
-       goto yy46;
-yy46:
-#line 120 "scanner.re"
+       if(yych == '\n')        goto yy44;
+       goto yy42;
+yy46:  yych = *++YYCURSOR;
+       goto yy47;
+yy47:
+#line 125 "scanner.re"
 { cur = cursor;
                                  yylval.regexp = ranToRE(token());
                                  return RANGE; }
-#line 250 "re2c-output.c"
-yy47:  ++YYCURSOR;
+#line 257 "re2c-output.c"
+yy48:  ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       goto yy49;
+yy49:  if(yych <= '&'){
+               if(yych == '\n')        goto yy44;
+               goto yy48;
+       } else {
+               if(yych <= '\'')        goto yy51;
+               if(yych != '\\')        goto yy48;
+               goto yy50;
+       }
+yy50:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
+       if(yych == '\n')        goto yy44;
        goto yy48;
-yy48:  if(yych <= '!'){
-               if(yych == '\n')        goto yy43;
-               goto yy47;
+yy51:  yych = *++YYCURSOR;
+       goto yy52;
+yy52:
+#line 119 "scanner.re"
+{ cur = cursor;
+                                 yylval.regexp = strToCaseInsensitiveRE(token());
+                                 return STRING; }
+#line 282 "re2c-output.c"
+yy53:  ++YYCURSOR;
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       goto yy54;
+yy54:  if(yych <= '!'){
+               if(yych == '\n')        goto yy44;
+               goto yy53;
        } else {
-               if(yych <= '"') goto yy50;
-               if(yych != '\\')        goto yy47;
-               goto yy49;
+               if(yych <= '"') goto yy56;
+               if(yych != '\\')        goto yy53;
+               goto yy55;
        }
-yy49:  ++YYCURSOR;
+yy55:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if(yych == '\n')        goto yy43;
-       goto yy47;
-yy50:  yych = *++YYCURSOR;
-       goto yy51;
-yy51:
+       if(yych == '\n')        goto yy44;
+       goto yy53;
+yy56:  yych = *++YYCURSOR;
+       goto yy57;
+yy57:
 #line 115 "scanner.re"
 { cur = cursor;
                                  yylval.regexp = strToRE(token());
                                  return STRING; }
-#line 275 "re2c-output.c"
-yy52:  yych = *++YYCURSOR;
-       goto yy53;
-yy53:
+#line 307 "re2c-output.c"
+yy58:  yych = *++YYCURSOR;
+       goto yy59;
+yy59:
 #line 112 "scanner.re"
 { tok = cursor;
                                  RETURN(0); }
-#line 282 "re2c-output.c"
-yy54:  yych = *++YYCURSOR;
-       goto yy55;
-yy55:
+#line 314 "re2c-output.c"
+yy60:  yych = *++YYCURSOR;
+       goto yy61;
+yy61:
 #line 109 "scanner.re"
 { depth = 1;
                                  goto comment; }
-#line 289 "re2c-output.c"
-yy56:  ++YYCURSOR;
+#line 321 "re2c-output.c"
+yy62:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       goto yy57;
-yy57:  if(yych <= '/'){
-               if(yych == ',') goto yy60;
-               goto yy43;
+       goto yy63;
+yy63:  if(yych <= '/'){
+               if(yych == ',') goto yy66;
+               goto yy44;
        } else {
-               if(yych <= '9') goto yy56;
-               if(yych != '}') goto yy43;
-               goto yy58;
+               if(yych <= '9') goto yy62;
+               if(yych != '}') goto yy44;
+               goto yy64;
        }
-yy58:  yych = *++YYCURSOR;
-       goto yy59;
-yy59:
-#line 130 "scanner.re"
+yy64:  yych = *++YYCURSOR;
+       goto yy65;
+yy65:
+#line 135 "scanner.re"
 { yylval.extop.minsize = atoi((char *)tok+1);
                                  yylval.extop.maxsize = atoi((char *)tok+1);
                                  RETURN(CLOSESIZE); }
-#line 309 "re2c-output.c"
-yy60:  yych = *++YYCURSOR;
-       if(yych != '}') goto yy64;
-       goto yy61;
-yy61:  yych = *++YYCURSOR;
-       goto yy62;
-yy62:
-#line 138 "scanner.re"
+#line 341 "re2c-output.c"
+yy66:  yych = *++YYCURSOR;
+       if(yych != '}') goto yy70;
+       goto yy67;
+yy67:  yych = *++YYCURSOR;
+       goto yy68;
+yy68:
+#line 143 "scanner.re"
 { yylval.extop.minsize = atoi((char *)tok+1);
                                  yylval.extop.maxsize = -1;
                                  RETURN(CLOSESIZE); }
-#line 320 "re2c-output.c"
-yy63:  ++YYCURSOR;
+#line 352 "re2c-output.c"
+yy69:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       goto yy64;
-yy64:  if(yych <= '/') goto yy43;
-       if(yych <= '9') goto yy63;
-       if(yych != '}') goto yy43;
-       goto yy65;
-yy65:  yych = *++YYCURSOR;
-       goto yy66;
-yy66:
-#line 134 "scanner.re"
+       goto yy70;
+yy70:  if(yych <= '/') goto yy44;
+       if(yych <= '9') goto yy69;
+       if(yych != '}') goto yy44;
+       goto yy71;
+yy71:  yych = *++YYCURSOR;
+       goto yy72;
+yy72:
+#line 139 "scanner.re"
 { yylval.extop.minsize = atoi((char *)tok+1);
                                  yylval.extop.maxsize = MAX(yylval.extop.minsize,atoi(strchr((char *)tok, ',')+1));
                                  RETURN(CLOSESIZE); }
-#line 336 "re2c-output.c"
+#line 368 "re2c-output.c"
 }
-#line 156 "scanner.re"
+#line 161 "scanner.re"
 
 
 code:
 
-#line 340 "re2c-output.c"
+#line 372 "re2c-output.c"
 {
        YYCTYPE yych;
        unsigned int yyaccept;
-       goto yy67;
-yy68:  ++YYCURSOR;
-yy67:
+       goto yy73;
+yy74:  ++YYCURSOR;
+yy73:
        if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
        if(yych <= '&'){
                if(yych <= '\n'){
-                       if(yych <= '\t')        goto yy75;
-                       goto yy73;
+                       if(yych <= '\t')        goto yy81;
+                       goto yy79;
                } else {
-                       if(yych == '"') goto yy77;
-                       goto yy75;
+                       if(yych == '"') goto yy83;
+                       goto yy81;
                }
        } else {
                if(yych <= '{'){
-                       if(yych <= '\'')        goto yy78;
-                       if(yych <= 'z') goto yy75;
-                       goto yy71;
+                       if(yych <= '\'')        goto yy84;
+                       if(yych <= 'z') goto yy81;
+                       goto yy77;
                } else {
-                       if(yych != '}') goto yy75;
-                       goto yy69;
+                       if(yych != '}') goto yy81;
+                       goto yy75;
                }
        }
-yy69:  yych = *++YYCURSOR;
-       goto yy70;
-yy70:
-#line 160 "scanner.re"
+yy75:  yych = *++YYCURSOR;
+       goto yy76;
+yy76:
+#line 165 "scanner.re"
 { if(--depth == 0){
                                        cur = cursor;
                                        yylval.token = new Token(token(), tline);
                                        return CODE;
                                  }
                                  goto code; }
-#line 377 "re2c-output.c"
-yy71:  yych = *++YYCURSOR;
-       goto yy72;
-yy72:
-#line 166 "scanner.re"
+#line 409 "re2c-output.c"
+yy77:  yych = *++YYCURSOR;
+       goto yy78;
+yy78:
+#line 171 "scanner.re"
 { ++depth;
                                  goto code; }
-#line 384 "re2c-output.c"
-yy73:  yych = *++YYCURSOR;
-       goto yy74;
-yy74:
-#line 168 "scanner.re"
+#line 416 "re2c-output.c"
+yy79:  yych = *++YYCURSOR;
+       goto yy80;
+yy80:
+#line 173 "scanner.re"
 { if(cursor == eof) fatal("missing '}'");
                                  pos = cursor; cline++;
                                  goto code;
                                }
-#line 393 "re2c-output.c"
-yy75:  yych = *++YYCURSOR;
-       goto yy76;
-yy76:
-#line 172 "scanner.re"
+#line 425 "re2c-output.c"
+yy81:  yych = *++YYCURSOR;
+       goto yy82;
+yy82:
+#line 177 "scanner.re"
 { goto code; }
-#line 399 "re2c-output.c"
-yy77:  yyaccept = 0;
+#line 431 "re2c-output.c"
+yy83:  yyaccept = 0;
        yych = *(YYMARKER = ++YYCURSOR);
-       if(yych == '\n')        goto yy76;
-       goto yy84;
-yy78:  yyaccept = 0;
+       if(yych == '\n')        goto yy82;
+       goto yy90;
+yy84:  yyaccept = 0;
        yych = *(YYMARKER = ++YYCURSOR);
-       if(yych == '\n')        goto yy76;
-       goto yy80;
-yy79:  ++YYCURSOR;
+       if(yych == '\n')        goto yy82;
+       goto yy86;
+yy85:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       goto yy80;
-yy80:  if(yych <= '&'){
-               if(yych != '\n')        goto yy79;
-               goto yy81;
+       goto yy86;
+yy86:  if(yych <= '&'){
+               if(yych != '\n')        goto yy85;
+               goto yy87;
        } else {
-               if(yych <= '\'')        goto yy75;
-               if(yych == '\\')        goto yy82;
-               goto yy79;
+               if(yych <= '\'')        goto yy81;
+               if(yych == '\\')        goto yy88;
+               goto yy85;
        }
-yy81:  YYCURSOR = YYMARKER;
+yy87:  YYCURSOR = YYMARKER;
        switch(yyaccept){
-       case 0: goto yy76;
+       case 0: goto yy82;
        }
-yy82:  ++YYCURSOR;
+yy88:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if(yych == '\n')        goto yy81;
-       goto yy79;
-yy83:  ++YYCURSOR;
+       if(yych == '\n')        goto yy87;
+       goto yy85;
+yy89:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       goto yy84;
-yy84:  if(yych <= '!'){
-               if(yych == '\n')        goto yy81;
-               goto yy83;
+       goto yy90;
+yy90:  if(yych <= '!'){
+               if(yych == '\n')        goto yy87;
+               goto yy89;
        } else {
-               if(yych <= '"') goto yy75;
-               if(yych != '\\')        goto yy83;
-               goto yy85;
+               if(yych <= '"') goto yy81;
+               if(yych != '\\')        goto yy89;
+               goto yy91;
        }
-yy85:  ++YYCURSOR;
+yy91:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if(yych == '\n')        goto yy81;
-       goto yy83;
+       if(yych == '\n')        goto yy87;
+       goto yy89;
 }
-#line 173 "scanner.re"
+#line 178 "scanner.re"
 
 
 comment:
 
-#line 449 "re2c-output.c"
+#line 481 "re2c-output.c"
 {
        YYCTYPE yych;
        unsigned int yyaccept;
-       goto yy86;
-yy87:  ++YYCURSOR;
-yy86:
+       goto yy92;
+yy93:  ++YYCURSOR;
+yy92:
        if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
        if(yych <= ')'){
-               if(yych == '\n')        goto yy91;
-               goto yy93;
+               if(yych == '\n')        goto yy97;
+               goto yy99;
        } else {
-               if(yych <= '*') goto yy88;
-               if(yych == '/') goto yy90;
-               goto yy93;
+               if(yych <= '*') goto yy94;
+               if(yych == '/') goto yy96;
+               goto yy99;
        }
-yy88:  yych = *++YYCURSOR;
-       if(yych == '/') goto yy96;
-       goto yy89;
-yy89:
-#line 187 "scanner.re"
+yy94:  yych = *++YYCURSOR;
+       if(yych == '/') goto yy102;
+       goto yy95;
+yy95:
+#line 192 "scanner.re"
 { goto comment; }
-#line 472 "re2c-output.c"
-yy90:  yych = *++YYCURSOR;
-       if(yych == '*') goto yy94;
-       goto yy89;
-yy91:  yych = *++YYCURSOR;
-       goto yy92;
-yy92:
-#line 183 "scanner.re"
+#line 504 "re2c-output.c"
+yy96:  yych = *++YYCURSOR;
+       if(yych == '*') goto yy100;
+       goto yy95;
+yy97:  yych = *++YYCURSOR;
+       goto yy98;
+yy98:
+#line 188 "scanner.re"
 { if(cursor == eof) RETURN(0);
                                  tok = pos = cursor; cline++;
                                  goto comment;
                                }
-#line 484 "re2c-output.c"
-yy93:  yych = *++YYCURSOR;
-       goto yy89;
-yy94:  yych = *++YYCURSOR;
+#line 516 "re2c-output.c"
+yy99:  yych = *++YYCURSOR;
        goto yy95;
-yy95:
-#line 181 "scanner.re"
+yy100: yych = *++YYCURSOR;
+       goto yy101;
+yy101:
+#line 186 "scanner.re"
 { ++depth;
                                  goto comment; }
-#line 493 "re2c-output.c"
-yy96:  yych = *++YYCURSOR;
-       goto yy97;
-yy97:
-#line 177 "scanner.re"
+#line 525 "re2c-output.c"
+yy102: yych = *++YYCURSOR;
+       goto yy103;
+yy103:
+#line 182 "scanner.re"
 { if(--depth == 0)
                                        goto scan;
                                    else
                                        goto comment; }
-#line 502 "re2c-output.c"
+#line 534 "re2c-output.c"
 }
-#line 188 "scanner.re"
+#line 193 "scanner.re"
 
 }
 
index c8e20557b9eb95dcf9ecd361e7a7edc9c52c8435..9afff2f0356316689485e87834d26ae4ae21824c 100755 (executable)
@@ -13,9 +13,9 @@ char *q;
 #define YYMARKER        q
 #define YYFILL(n)
 /*!re2c
-       "a"{1}"\n"          {RET(1);}
-       "a"{2,3}"\n"    {RET(2);}
-       "a"{4,}"\n"         {RET(3);}
+       'a'{1}"\n"          {RET(1);}
+       'a'{2,3}"\n"    {RET(2);}
+       'a'{4,}"\n"         {RET(3);}
        [^aq]|"\n"      {RET(0);}
 */
 }
@@ -30,6 +30,12 @@ main()
        do_scan("aaaa\n");
        do_scan("q");
        do_scan("a");
+       do_scan("A\n");
+       do_scan("AA\n");
+       do_scan("aAa\n");
+       do_scan("AaaA\n");
+       do_scan("Q");
+       do_scan("A");
        do_scan("\n");
        do_scan("0");
 }
diff --git a/re.h b/re.h
index 51fd1c7bb91f7e3a7c6bae80cf2a038bc0f4e72e..6e6124c2ffebfb86f8f9a2780d8b95cd0a8d9b0b 100644 (file)
--- a/re.h
+++ b/re.h
@@ -201,5 +201,6 @@ extern void genCode(ostream&, RegExp*);
 extern RegExp *mkDiff(RegExp*, RegExp*);
 extern RegExp *strToRE(SubStr);
 extern RegExp *ranToRE(SubStr);
-
+extern RegExp *strToCaseInsensitiveRE(SubStr s);
+       
 #endif
index 1b155564f271c01522a13a9b94bceb8536d32c28..346b46bbcd216550d9f0f5fe233d4522d3318154 100644 (file)
--- a/re2c.1.in
+++ b/re2c.1.in
@@ -7,6 +7,9 @@
 .ds rx regular expression
 .ds lx \fIl\fP-expression
 \"$Log$
+\"Revision 1.7  2004/04/19 02:13:48  helly
+\"Featurerequest #869298 (Add case insensitive string literals)
+\"
 \"Revision 1.6  2004/04/17 15:49:13  helly
 \"Fix example, cur must be set to make the uncommented printf's working
 \"
@@ -175,6 +178,10 @@ Name definitions are of the form
 the literal string \fCfoo\fP.
 ANSI-C escape sequences can be used.
 .TP
+\fC'foo'\fP
+the literal string \fCfoo\fP (characters [a-zA-Z] treated case-insensitive).
+ANSI-C escape sequences can be used.
+.TP
 \fC[xyz]\fP
 a "character class"; in this case,
 the \*(rx matches either an '\fCx\fP', a '\fCy\fP', or a '\fCz\fP'.
index 4b76eb4c8ca09a18e08e97359fbd293d22973708..15d0b5f345df56ad043ea2443886f34eadd32abb 100644 (file)
@@ -115,6 +115,11 @@ scan:
        dstring                 { cur = cursor;
                                  yylval.regexp = strToRE(token());
                                  return STRING; }
+
+       sstring                 { cur = cursor;
+                                 yylval.regexp = strToCaseInsensitiveRE(token());
+                                 return STRING; }
+
        "\""                    { fatal("bad string"); }
 
        cstring                 { cur = cursor;