From b6577c8d1efb49ba1a5dfe408653889c4cfca98d Mon Sep 17 00:00:00 2001 From: helly Date: Wed, 28 Mar 2007 20:11:17 +0000 Subject: [PATCH] - Added support for underscores in named definitions. --- re2c/CHANGELOG | 1 + re2c/bootstrap/scanner.cc | 203 +++++++++++++++++++++----------------- re2c/htdocs/index.html | 1 + re2c/scanner.re | 4 +- re2c/test/input13.c | 44 +++++++++ re2c/test/input13.re | 14 +++ 6 files changed, 175 insertions(+), 92 deletions(-) create mode 100755 re2c/test/input13.c create mode 100755 re2c/test/input13.re diff --git a/re2c/CHANGELOG b/re2c/CHANGELOG index 30fbdf4a..24b285b0 100644 --- a/re2c/CHANGELOG +++ b/re2c/CHANGELOG @@ -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. diff --git a/re2c/bootstrap/scanner.cc b/re2c/bootstrap/scanner.cc index ddc9f6c4..1978b459 100644 --- a/re2c/bootstrap/scanner.cc +++ b/re2c/bootstrap/scanner.cc @@ -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 @@ -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; diff --git a/re2c/htdocs/index.html b/re2c/htdocs/index.html index 3c35eddc..13d9ee5b 100755 --- a/re2c/htdocs/index.html +++ b/re2c/htdocs/index.html @@ -81,6 +81,7 @@ fixes which were incorporated. Changelog

2007-??-??: 0.11.3

    +
  • Added support for underscores in named definitions.
  • Added new option --no-generation-date.
  • Fixed issue with long form of switches.
diff --git a/re2c/scanner.re b/re2c/scanner.re index 858a0f7d..7182bddf 100644 --- a/re2c/scanner.re +++ b/re2c/scanner.re @@ -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 index 00000000..2ff61334 --- /dev/null +++ b/re2c/test/input13.c @@ -0,0 +1,44 @@ +/* Generated by re2c */ +#line 1 "input13.re" + +#line 5 "" +{ + 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 "" +yy4: + ++YYCURSOR; +#line 9 "input13.re" + { return 'b'; } +#line 27 "" +yy6: + ++YYCURSOR; +#line 10 "input13.re" + { return 'c'; } +#line 32 "" +yy8: + ++YYCURSOR; +#line 11 "input13.re" + { return 'd'; } +#line 37 "" +yy10: + ++YYCURSOR; +#line 12 "input13.re" + { return '\0'; } +#line 42 "" +} +#line 14 "input13.re" + diff --git a/re2c/test/input13.re b/re2c/test/input13.re new file mode 100755 index 00000000..ee3cc071 --- /dev/null +++ b/re2c/test/input13.re @@ -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'; } + +*/ -- 2.40.0