]> granicus.if.org Git - re2c/commitdiff
- Added support for underscores in named definitions.
authorhelly <helly@642ea486-5414-0410-9d7f-a0204ed87703>
Wed, 28 Mar 2007 20:11:17 +0000 (20:11 +0000)
committerhelly <helly@642ea486-5414-0410-9d7f-a0204ed87703>
Wed, 28 Mar 2007 20:11:17 +0000 (20:11 +0000)
re2c/CHANGELOG
re2c/bootstrap/scanner.cc
re2c/htdocs/index.html
re2c/scanner.re
re2c/test/input13.c [new file with mode: 0755]
re2c/test/input13.re [new file with mode: 0755]

index 30fbdf4a249ca3ae331a5faf9787b703ece32719..24b285b00eedf6164c6eea94f35139c152b72cff 100644 (file)
@@ -1,5 +1,6 @@
 Version 0.11.3 (2007-??-??)
 ---------------------------
+- Added support for underscores in named definitions.
 - Added new option --no-generation-date.
 - Fixed issue with long form of switches.
 
index ddc9f6c43d7924f169e4ba48bec39e7a3097f3d3..1978b45948fb5c692e4dbffd6b2a191846acb490 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.11.0.dev on Sat Jul 29 22:25:10 2006 */
+/* Generated by re2c 0.11.3.dev on Wed Mar 28 16:04:07 2007 */
 #line 1 "scanner.re"
 /* $Id$ */
 #include <stdlib.h>
@@ -350,23 +350,23 @@ scan:
                goto value;
     }
 {
-       static unsigned char yybm[] = {
+       static const unsigned char yybm[] = {
                112, 112, 112, 112, 112, 112, 112, 112, 
-               112, 114,   0, 112, 112, 112, 112, 112, 
+               112, 116,   0, 112, 112, 112, 112, 112, 
                112, 112, 112, 112, 112, 112, 112, 112, 
                112, 112, 112, 112, 112, 112, 112, 112, 
-               114, 112,  48, 112, 112, 112, 112,  80, 
+               116, 112,  48, 112, 112, 112, 112,  80, 
                112, 112, 112, 112, 112, 112, 112, 112, 
-               252, 252, 252, 252, 252, 252, 252, 252
-               252, 252, 112, 112, 112, 112, 112, 112, 
-               112, 124, 124, 124, 124, 124, 124, 124
-               124, 124, 124, 124, 124, 124, 124, 124
-               124, 124, 124, 124, 124, 124, 124, 124
-               124, 124, 124, 112,   0,  96, 112, 120, 
-               112, 124, 124, 124, 124, 124, 124, 124
-               124, 124, 124, 124, 124, 124, 124, 124
-               124, 124, 124, 124, 124, 124, 124, 124
-               124, 124, 124, 112, 112, 112, 112, 112, 
+               248, 248, 248, 248, 248, 248, 248, 248
+               248, 248, 112, 112, 112, 112, 112, 112, 
+               112, 120, 120, 120, 120, 120, 120, 120
+               120, 120, 120, 120, 120, 120, 120, 120
+               120, 120, 120, 120, 120, 120, 120, 120
+               120, 120, 120, 112,   0,  96, 112, 120, 
+               112, 120, 120, 120, 120, 120, 120, 120
+               120, 120, 120, 120, 120, 120, 120, 120
+               120, 120, 120, 120, 120, 120, 120, 120
+               120, 120, 120, 112, 112, 112, 112, 112, 
                112, 112, 112, 112, 112, 112, 112, 112, 
                112, 112, 112, 112, 112, 112, 112, 112, 
                112, 112, 112, 112, 112, 112, 112, 112, 
@@ -391,50 +391,59 @@ scan:
                unsigned int yyaccept = 0;
                if((YYLIMIT - YYCURSOR) < 5) YYFILL(5);
                yych = *YYCURSOR;
-               if(yych <= '/') {
-                       if(yych <= '!') {
+               if(yych <= ':') {
+                       if(yych <= '"') {
                                if(yych <= 0x0C) {
                                        if(yych <= 0x08) goto yy85;
                                        if(yych <= 0x09) goto yy79;
                                        if(yych <= 0x0A) goto yy81;
                                        goto yy85;
                                } else {
-                                       if(yych <= 0x0D) goto yy83;
-                                       if(yych == ' ') goto yy79;
-                                       goto yy85;
+                                       if(yych <= 0x1F) {
+                                               if(yych <= 0x0D) goto yy83;
+                                               goto yy85;
+                                       } else {
+                                               if(yych <= ' ') goto yy79;
+                                               if(yych <= '!') goto yy85;
+                                               goto yy66;
+                                       }
                                }
                        } else {
-                               if(yych <= ')') {
-                                       if(yych <= '"') goto yy66;
+                               if(yych <= '*') {
                                        if(yych <= '&') goto yy85;
                                        if(yych <= '\'') goto yy68;
-                                       goto yy72;
+                                       if(yych <= ')') goto yy72;
+                                       goto yy64;
                                } else {
-                                       if(yych <= '+') {
-                                               if(yych <= '*') goto yy64;
-                                               goto yy73;
+                                       if(yych <= '-') {
+                                               if(yych <= '+') goto yy73;
+                                               goto yy85;
                                        } else {
-                                               if(yych <= '-') goto yy85;
                                                if(yych <= '.') goto yy77;
-                                               goto yy62;
+                                               if(yych <= '/') goto yy62;
+                                               goto yy85;
                                        }
                                }
                        }
                } else {
-                       if(yych <= 'Z') {
-                               if(yych <= '=') {
-                                       if(yych == ';') goto yy72;
-                                       if(yych <= '<') goto yy85;
-                                       goto yy72;
+                       if(yych <= '\\') {
+                               if(yych <= '>') {
+                                       if(yych == '<') goto yy85;
+                                       if(yych <= '=') goto yy72;
+                                       goto yy85;
                                } else {
-                                       if(yych == '?') goto yy73;
-                                       if(yych <= '@') goto yy85;
-                                       goto yy76;
+                                       if(yych <= '@') {
+                                               if(yych <= '?') goto yy73;
+                                               goto yy85;
+                                       } else {
+                                               if(yych <= 'Z') goto yy76;
+                                               if(yych <= '[') goto yy70;
+                                               goto yy72;
+                                       }
                                }
                        } else {
                                if(yych <= 'q') {
-                                       if(yych <= '[') goto yy70;
-                                       if(yych <= '\\') goto yy72;
+                                       if(yych == '_') goto yy76;
                                        if(yych <= '`') goto yy85;
                                        goto yy76;
                                } else {
@@ -463,14 +472,14 @@ yy61:
                { depth = 1;
                                  goto code;
                                }
-#line 467 "scanner.cc"
+#line 476 "scanner.cc"
 yy62:
                ++YYCURSOR;
                if((yych = *YYCURSOR) == '*') goto yy121;
 yy63:
 #line 239 "scanner.re"
                { RETURN(*tok); }
-#line 474 "scanner.cc"
+#line 483 "scanner.cc"
 yy64:
                ++YYCURSOR;
                if((yych = *YYCURSOR) == '/') goto yy119;
@@ -478,7 +487,7 @@ yy65:
 #line 241 "scanner.re"
                { yylval.op = *tok;
                                  RETURN(CLOSE); }
-#line 482 "scanner.cc"
+#line 491 "scanner.cc"
 yy66:
                yyaccept = 1;
                yych = *(YYMARKER = ++YYCURSOR);
@@ -486,7 +495,7 @@ yy66:
 yy67:
 #line 226 "scanner.re"
                { fatal("unterminated string constant (missing \")"); }
-#line 490 "scanner.cc"
+#line 499 "scanner.cc"
 yy68:
                yyaccept = 2;
                yych = *(YYMARKER = ++YYCURSOR);
@@ -494,7 +503,7 @@ yy68:
 yy69:
 #line 227 "scanner.re"
                { fatal("unterminated string constant (missing ')"); }
-#line 498 "scanner.cc"
+#line 507 "scanner.cc"
 yy70:
                yyaccept = 3;
                yych = *(YYMARKER = ++YYCURSOR);
@@ -504,7 +513,7 @@ yy70:
 yy71:
 #line 237 "scanner.re"
                { fatal("unterminated range (missing ])"); }
-#line 508 "scanner.cc"
+#line 517 "scanner.cc"
 yy72:
                yych = *++YYCURSOR;
                goto yy63;
@@ -520,7 +529,7 @@ yy75:
                { cur = cursor;
                                  yylval.symbol = Symbol::find(token());
                                  return ID; }
-#line 524 "scanner.cc"
+#line 533 "scanner.cc"
 yy76:
                yych = *++YYCURSOR;
                goto yy90;
@@ -531,7 +540,7 @@ yy77:
                                  yylval.regexp = mkDot();
                                  return RANGE;
                                }
-#line 535 "scanner.cc"
+#line 544 "scanner.cc"
 yy79:
                ++YYCURSOR;
                yych = *YYCURSOR;
@@ -539,7 +548,7 @@ yy79:
 yy80:
 #line 277 "scanner.re"
                { goto scan; }
-#line 543 "scanner.cc"
+#line 552 "scanner.cc"
 yy81:
                ++YYCURSOR;
 yy82:
@@ -548,7 +557,7 @@ yy82:
                                  pos = cursor; cline++;
                                  goto scan;
                                }
-#line 552 "scanner.cc"
+#line 561 "scanner.cc"
 yy83:
                ++YYCURSOR;
                if((yych = *YYCURSOR) == 0x0A) goto yy86;
@@ -560,7 +569,7 @@ yy84:
                                  fatal(msg.str().c_str());
                                  goto scan;
                                }
-#line 564 "scanner.cc"
+#line 573 "scanner.cc"
 yy85:
                yych = *++YYCURSOR;
                goto yy84;
@@ -572,7 +581,7 @@ yy87:
                if(YYLIMIT == YYCURSOR) YYFILL(1);
                yych = *YYCURSOR;
 yy88:
-               if(yybm[0+yych] & 2) {
+               if(yybm[0+yych] & 4) {
                        goto yy87;
                }
                goto yy80;
@@ -581,7 +590,7 @@ yy89:
                if(YYLIMIT == YYCURSOR) YYFILL(1);
                yych = *YYCURSOR;
 yy90:
-               if(yybm[0+yych] & 4) {
+               if(yybm[0+yych] & 8) {
                        goto yy89;
                }
                goto yy75;
@@ -597,10 +606,13 @@ yy94:
                ++YYCURSOR;
                if(YYLIMIT == YYCURSOR) YYFILL(1);
                yych = *YYCURSOR;
-               if(yych <= '@') goto yy95;
-               if(yych <= 'Z') goto yy96;
-               if(yych <= '`') goto yy95;
-               if(yych <= 'z') goto yy96;
+               if(yych <= '^') {
+                       if(yych <= '@') goto yy95;
+                       if(yych <= 'Z') goto yy96;
+               } else {
+                       if(yych == '`') goto yy95;
+                       if(yych <= 'z') goto yy96;
+               }
 yy95:
                YYCURSOR = YYMARKER;
                if(yyaccept <= 3) {
@@ -633,10 +645,21 @@ yy96:
                YYMARKER = ++YYCURSOR;
                if(YYLIMIT == YYCURSOR) YYFILL(1);
                yych = *YYCURSOR;
-               if(yybm[0+yych] & 8) {
-                       goto yy96;
+               if(yych <= 'Z') {
+                       if(yych <= '9') {
+                               if(yych >= '0') goto yy96;
+                       } else {
+                               if(yych <= ':') goto yy94;
+                               if(yych >= 'A') goto yy96;
+                       }
+               } else {
+                       if(yych <= '_') {
+                               if(yych >= '_') goto yy96;
+                       } else {
+                               if(yych <= '`') goto yy98;
+                               if(yych <= 'z') goto yy96;
+                       }
                }
-               if(yych == ':') goto yy94;
 yy98:
 #line 261 "scanner.re"
                { cur = cursor;
@@ -645,7 +668,7 @@ yy98:
                                  yylval.str = new Str(token());
                                  return CONFIG;
                                }
-#line 649 "scanner.cc"
+#line 672 "scanner.cc"
 yy99:
                ++YYCURSOR;
                if(YYLIMIT == YYCURSOR) YYFILL(1);
@@ -681,7 +704,7 @@ yy104:
                { cur = cursor;
                                  yylval.regexp = ranToRE(token());
                                  return RANGE; }
-#line 685 "scanner.cc"
+#line 708 "scanner.cc"
 yy106:
                ++YYCURSOR;
                if(YYLIMIT == YYCURSOR) YYFILL(1);
@@ -694,7 +717,7 @@ yy107:
                { cur = cursor;
                                  yylval.regexp = invToRE(token());
                                  return RANGE; }
-#line 698 "scanner.cc"
+#line 721 "scanner.cc"
 yy109:
                ++YYCURSOR;
                if(YYLIMIT == YYCURSOR) YYFILL(1);
@@ -716,7 +739,7 @@ yy112:
                { cur = cursor;
                                  yylval.regexp = strToCaseInsensitiveRE(token());
                                  return STRING; }
-#line 720 "scanner.cc"
+#line 743 "scanner.cc"
 yy114:
                ++YYCURSOR;
                if(YYLIMIT == YYCURSOR) YYFILL(1);
@@ -738,19 +761,19 @@ yy117:
                { cur = cursor;
                                  yylval.regexp = strToRE(token());
                                  return STRING; }
-#line 742 "scanner.cc"
+#line 765 "scanner.cc"
 yy119:
                ++YYCURSOR;
 #line 215 "scanner.re"
                { tok = cursor;
                                  RETURN(0); }
-#line 748 "scanner.cc"
+#line 771 "scanner.cc"
 yy121:
                ++YYCURSOR;
 #line 212 "scanner.re"
                { depth = 1;
                                  goto comment; }
-#line 754 "scanner.cc"
+#line 777 "scanner.cc"
 yy123:
                yych = *++YYCURSOR;
                if(yych == ',') goto yy137;
@@ -771,14 +794,14 @@ yy126:
 yy127:
 #line 259 "scanner.re"
                { fatal("illegal closure form, use '{n}', '{n,}', '{n,m}' where n and m are numbers"); }
-#line 775 "scanner.cc"
+#line 798 "scanner.cc"
 yy128:
                ++YYCURSOR;
 #line 247 "scanner.re"
                { yylval.extop.minsize = atoi((char *)tok+1);
                                  yylval.extop.maxsize = atoi((char *)tok+1);
                                  RETURN(CLOSESIZE); }
-#line 782 "scanner.cc"
+#line 805 "scanner.cc"
 yy130:
                yyaccept = 6;
                yych = *(YYMARKER = ++YYCURSOR);
@@ -790,7 +813,7 @@ yy130:
                { yylval.extop.minsize = atoi((char *)tok+1);
                                  yylval.extop.maxsize = -1;
                                  RETURN(CLOSESIZE); }
-#line 794 "scanner.cc"
+#line 817 "scanner.cc"
 yy133:
                ++YYCURSOR;
                if(YYLIMIT == YYCURSOR) YYFILL(1);
@@ -803,7 +826,7 @@ yy133:
                { yylval.extop.minsize = atoi((char *)tok+1);
                                  yylval.extop.maxsize = MAX(yylval.extop.minsize,atoi(strchr((char *)tok, ',')+1));
                                  RETURN(CLOSESIZE); }
-#line 807 "scanner.cc"
+#line 830 "scanner.cc"
 yy137:
                yyaccept = 6;
                yych = *(YYMARKER = ++YYCURSOR);
@@ -814,7 +837,7 @@ yy137:
 #line 244 "scanner.re"
                { yylval.op = '*';
                                  RETURN(CLOSE); }
-#line 818 "scanner.cc"
+#line 841 "scanner.cc"
        }
 }
 #line 290 "scanner.re"
@@ -822,7 +845,7 @@ yy137:
 
 code:
 {
-       static unsigned char yybm[] = {
+       static const unsigned char yybm[] = {
                192, 192, 192, 192, 192, 192, 192, 192, 
                192, 192,   0, 192, 192, 192, 192, 192, 
                192, 192, 192, 192, 192, 192, 192, 192, 
@@ -857,7 +880,7 @@ code:
                192, 192, 192, 192, 192, 192, 192, 192, 
        };
 
-#line 861 "scanner.cc"
+#line 884 "scanner.cc"
        {
                YYCTYPE yych;
                if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
@@ -888,13 +911,13 @@ code:
                                        return CODE;
                                  }
                                  goto code; }
-#line 892 "scanner.cc"
+#line 915 "scanner.cc"
 yy144:
                ++YYCURSOR;
 #line 300 "scanner.re"
                { ++depth;
                                  goto code; }
-#line 898 "scanner.cc"
+#line 921 "scanner.cc"
 yy146:
                ++YYCURSOR;
 #line 302 "scanner.re"
@@ -902,7 +925,7 @@ yy146:
                                  pos = cursor; cline++;
                                  goto code;
                                }
-#line 906 "scanner.cc"
+#line 929 "scanner.cc"
 yy148:
                ++YYCURSOR;
 #line 306 "scanner.re"
@@ -912,13 +935,13 @@ yy148:
                                  }
                                  goto code;
                                }
-#line 916 "scanner.cc"
+#line 939 "scanner.cc"
 yy150:
                ++YYCURSOR;
 yy151:
 #line 312 "scanner.re"
                { goto code; }
-#line 922 "scanner.cc"
+#line 945 "scanner.cc"
 yy152:
                yych = *(YYMARKER = ++YYCURSOR);
                if(yych == 0x0A) goto yy151;
@@ -970,7 +993,7 @@ yy159:
 comment:
 {
 
-#line 974 "scanner.cc"
+#line 997 "scanner.cc"
        {
                YYCTYPE yych;
                if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
@@ -990,7 +1013,7 @@ yy164:
 #line 328 "scanner.re"
                { if(cursor == eof) RETURN(0);
                                  goto comment; }
-#line 994 "scanner.cc"
+#line 1017 "scanner.cc"
 yy165:
                yych = *++YYCURSOR;
                if(yych == '*') goto yy169;
@@ -1002,7 +1025,7 @@ yy166:
                                  tok = pos = cursor; cline++;
                                  goto comment;
                                }
-#line 1006 "scanner.cc"
+#line 1029 "scanner.cc"
 yy168:
                yych = *++YYCURSOR;
                goto yy164;
@@ -1012,7 +1035,7 @@ yy169:
                { ++depth;
                                  fatal("ambiguous /* found");
                                  goto comment; }
-#line 1016 "scanner.cc"
+#line 1039 "scanner.cc"
 yy171:
                ++YYCURSOR;
 #line 317 "scanner.re"
@@ -1020,7 +1043,7 @@ yy171:
                                        goto scan;
                                    else
                                        goto comment; }
-#line 1024 "scanner.cc"
+#line 1047 "scanner.cc"
        }
 }
 #line 330 "scanner.re"
@@ -1028,7 +1051,7 @@ yy171:
 
 config:
 {
-       static unsigned char yybm[] = {
+       static const unsigned char yybm[] = {
                  0,   0,   0,   0,   0,   0,   0,   0, 
                  0, 128,   0,   0,   0,   0,   0,   0, 
                  0,   0,   0,   0,   0,   0,   0,   0, 
@@ -1063,7 +1086,7 @@ config:
                  0,   0,   0,   0,   0,   0,   0,   0, 
        };
 
-#line 1067 "scanner.cc"
+#line 1090 "scanner.cc"
        {
                YYCTYPE yych;
                if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
@@ -1082,7 +1105,7 @@ yy175:
 yy176:
 #line 334 "scanner.re"
                { goto config; }
-#line 1086 "scanner.cc"
+#line 1109 "scanner.cc"
 yy177:
                ++YYCURSOR;
                yych = *YYCURSOR;
@@ -1093,12 +1116,12 @@ yy178:
                                  cur = cursor;
                                  RETURN('='); 
                                }
-#line 1097 "scanner.cc"
+#line 1120 "scanner.cc"
 yy179:
                ++YYCURSOR;
 #line 339 "scanner.re"
                { fatal("missing '='"); }
-#line 1102 "scanner.cc"
+#line 1125 "scanner.cc"
 yy181:
                ++YYCURSOR;
                if(YYLIMIT == YYCURSOR) YYFILL(1);
@@ -1123,7 +1146,7 @@ yy184:
 
 value:
 {
-       static unsigned char yybm[] = {
+       static const unsigned char yybm[] = {
                248, 248, 248, 248, 248, 248, 248, 248, 
                248, 192,   0, 248, 248, 192, 248, 248, 
                248, 248, 248, 248, 248, 248, 248, 248, 
@@ -1158,7 +1181,7 @@ value:
                248, 248, 248, 248, 248, 248, 248, 248, 
        };
 
-#line 1162 "scanner.cc"
+#line 1185 "scanner.cc"
        {
                YYCTYPE yych;
                if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
@@ -1197,7 +1220,7 @@ yy187:
                                  iscfg = 0;
                                  return VALUE;
                                }
-#line 1201 "scanner.cc"
+#line 1224 "scanner.cc"
 yy188:
                ++YYCURSOR;
                if(yybm[0+(yych = *YYCURSOR)] & 8) {
@@ -1210,7 +1233,7 @@ yy189:
                                  iscfg = 0;
                                  return NUMBER;
                                }
-#line 1214 "scanner.cc"
+#line 1237 "scanner.cc"
 yy190:
                yych = *++YYCURSOR;
                if(yych <= '0') goto yy194;
index 3c35eddcf586501df54d1edbd508449a252f8bdd..13d9ee5b90192d63d54f2af6a7635f86717655e3 100755 (executable)
@@ -81,6 +81,7 @@ fixes which were incorporated. <a href=
 <h1>Changelog</h1>
 <h2>2007-??-??: 0.11.3</h2>
 <ul>
+<li>Added support for underscores in named definitions.</li>
 <li>Added new option --no-generation-date.</li>
 <li>Fixed issue with long form of switches.</li>
 </ul>
index 858a0f7dadbb7bd0518e53bff5cb8f72c72b6367..7182bddfce6bcb0c101d645728a94135b8f18c5c 100644 (file)
@@ -86,8 +86,8 @@ sstring = "'"     ((esc \ ['] ) | "\\" dot)* "'" ;
 letter  = [a-zA-Z];
 digit   = [0-9];
 number  = "0" | ("-"? [1-9] digit*);
-name    = letter (letter|digit)*;
-cname   = ":" letter (letter|digit|"_")*;
+name    = (letter|"_") (letter|digit|"_")*;
+cname   = ":" name;
 space   = [ \t];
 eol     = ("\r\n" | "\n");
 config  = "re2c" cname+;
diff --git a/re2c/test/input13.c b/re2c/test/input13.c
new file mode 100755 (executable)
index 0000000..2ff6133
--- /dev/null
@@ -0,0 +1,44 @@
+/* Generated by re2c */
+#line 1 "input13.re"
+
+#line 5 "<stdout>"
+{
+       YYCTYPE yych;
+
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       switch(yych) {
+       case 'a':       goto yy2;
+       case 'b':       goto yy4;
+       case 'c':       goto yy6;
+       case 'd':       goto yy8;
+       default:        goto yy10;
+       }
+yy2:
+       ++YYCURSOR;
+#line 8 "input13.re"
+       { return 'a'; }
+#line 22 "<stdout>"
+yy4:
+       ++YYCURSOR;
+#line 9 "input13.re"
+       { return 'b'; }
+#line 27 "<stdout>"
+yy6:
+       ++YYCURSOR;
+#line 10 "input13.re"
+       { return 'c'; }
+#line 32 "<stdout>"
+yy8:
+       ++YYCURSOR;
+#line 11 "input13.re"
+       { return 'd'; }
+#line 37 "<stdout>"
+yy10:
+       ++YYCURSOR;
+#line 12 "input13.re"
+       { return '\0'; }
+#line 42 "<stdout>"
+}
+#line 14 "input13.re"
+
diff --git a/re2c/test/input13.re b/re2c/test/input13.re
new file mode 100755 (executable)
index 0000000..ee3cc07
--- /dev/null
@@ -0,0 +1,14 @@
+/*!re2c
+
+space_ = "a";
+_space = "b";
+s_pace = "c";
+_      = "d";
+
+space_  { return 'a'; }
+_space  { return 'b'; }
+s_pace  { return 'c'; }
+_       { return 'd'; }
+[^]     { return '\0'; }
+
+*/