Disallow condition names and named definitions to start with digit.
authorUlya Trofimovich <skvadrik@gmail.com>
Sat, 26 Aug 2017 09:31:35 +0000 (10:31 +0100)
committerUlya Trofimovich <skvadrik@gmail.com>
Sat, 26 Aug 2017 09:51:56 +0000 (10:51 +0100)
This has always been the intended behavior and was accidentally broken
by commit e3db638fc3e9bfb318edafedbefd02f25f1c1b8c.

re2c/bootstrap/src/ast/lex.cc
re2c/src/ast/lex.re
re2c/test/cond_error_12.c.c [new file with mode: 0644]
re2c/test/cond_error_12.c.re [new file with mode: 0644]
re2c/test/error15.c [new file with mode: 0644]
re2c/test/error15.re [new file with mode: 0644]

index fdeb9da09d1169dee2f8bea161a0f19bed488734..6026649c1a5eeb0cea8e1249758ea048f35de754 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by re2c 1.0.1 on Fri Aug 11 22:29:44 2017 */
+/* Generated by re2c 1.0.1 on Sat Aug 26 10:29:18 2017 */
 #line 1 "../src/ast/lex.re"
 #include "src/util/c99_stdint.h"
 #include <stddef.h>
@@ -1019,23 +1019,23 @@ scan:
                if (yych <= '\\') {
                        if (yych <= '?') {
                                if (yych <= '/') goto yy202;
-                               if (yych <= '9') goto yy203;
-                               if (yych <= ':') goto yy205;
+                               if (yych <= '9') goto yy183;
+                               if (yych <= ':') goto yy203;
                                goto yy191;
                        } else {
                                if (yych <= '@') goto yy195;
-                               if (yych <= 'Z') goto yy203;
+                               if (yych <= 'Z') goto yy204;
                                if (yych <= '[') goto yy206;
                                goto yy191;
                        }
                } else {
                        if (yych <= 'q') {
-                               if (yych == '_') goto yy203;
-                               if (yych >= 'a') goto yy203;
+                               if (yych == '_') goto yy204;
+                               if (yych >= 'a') goto yy204;
                        } else {
                                if (yych <= 'z') {
                                        if (yych <= 'r') goto yy208;
-                                       goto yy203;
+                                       goto yy204;
                                } else {
                                        if (yych <= '{') goto yy209;
                                        if (yych <= '|') goto yy191;
@@ -1104,20 +1104,14 @@ yy193:
 #line 1105 "src/ast/lex.cc"
 yy195:
        yych = (YYCTYPE)*++YYCURSOR;
-       if (yych <= 'Z') {
-               if (yych <= '/') goto yy184;
-               if (yych <= '9') goto yy216;
+       if (yych <= '^') {
                if (yych <= '@') goto yy184;
-               goto yy216;
+               if (yych <= 'Z') goto yy216;
+               goto yy184;
        } else {
-               if (yych <= '_') {
-                       if (yych <= '^') goto yy184;
-                       goto yy216;
-               } else {
-                       if (yych <= '`') goto yy184;
-                       if (yych <= 'z') goto yy216;
-                       goto yy184;
-               }
+               if (yych == '`') goto yy184;
+               if (yych <= 'z') goto yy216;
+               goto yy184;
        }
 yy196:
        yych = (YYCTYPE)*++YYCURSOR;
@@ -1127,7 +1121,7 @@ yy197:
        ++YYCURSOR;
 #line 232 "../src/ast/lex.re"
        { yylval.regexp = lex_str('\''); return TOKEN_REGEXP; }
-#line 1131 "src/ast/lex.cc"
+#line 1125 "src/ast/lex.cc"
 yy199:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == '/') goto yy219;
@@ -1139,56 +1133,56 @@ yy200:
                                        yylval.regexp = ast_dot(cline, get_column());
                                        return TOKEN_REGEXP;
                                }
-#line 1143 "src/ast/lex.cc"
+#line 1137 "src/ast/lex.cc"
 yy202:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == '*') goto yy221;
        if (yych == '/') goto yy223;
        goto yy192;
 yy203:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == '=') goto yy225;
+       goto yy184;
+yy204:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
        yych = (YYCTYPE)*YYCURSOR;
-yy204:
+yy205:
        if (yybm[0+yych] & 32) {
-               goto yy203;
+               goto yy204;
        }
        if (yych <= ' ') {
                if (yych == '\t') {
                        YYCTXMARKER = YYCURSOR;
-                       goto yy227;
+                       goto yy229;
                }
-               if (yych <= 0x1F) goto yy225;
+               if (yych <= 0x1F) goto yy227;
                YYCTXMARKER = YYCURSOR;
-               goto yy227;
+               goto yy229;
        } else {
                if (yych <= ',') {
-                       if (yych <= '+') goto yy225;
+                       if (yych <= '+') goto yy227;
                        YYCTXMARKER = YYCURSOR;
-                       goto yy229;
+                       goto yy231;
                } else {
-                       if (yych <= '<') goto yy225;
+                       if (yych <= '<') goto yy227;
                        if (yych <= '>') {
                                YYCTXMARKER = YYCURSOR;
-                               goto yy229;
+                               goto yy231;
                        }
-                       goto yy225;
+                       goto yy227;
                }
        }
-yy205:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '=') goto yy231;
-       goto yy184;
 yy206:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == '^') goto yy233;
 #line 234 "../src/ast/lex.re"
        { yylval.regexp = lex_cls(false); return TOKEN_REGEXP; }
-#line 1188 "src/ast/lex.cc"
+#line 1182 "src/ast/lex.cc"
 yy208:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 'e') goto yy235;
-       goto yy204;
+       goto yy205;
 yy209:
        yyaccept = 1;
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
@@ -1213,7 +1207,7 @@ yy210:
                                        code_line = cline;
                                        goto code;
                                }
-#line 1217 "src/ast/lex.cc"
+#line 1211 "src/ast/lex.cc"
 yy211:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
@@ -1270,7 +1264,7 @@ yy218:
                yylval.regexp = ast_tag(cline, get_column(), name, tok[0] == '#');
                return TOKEN_REGEXP;
        }
-#line 1274 "src/ast/lex.cc"
+#line 1268 "src/ast/lex.cc"
 yy219:
        ++YYCURSOR;
 #line 227 "../src/ast/lex.re"
@@ -1278,7 +1272,7 @@ yy219:
                                        tok = cur;
                                        return 0;
                                }
-#line 1282 "src/ast/lex.cc"
+#line 1276 "src/ast/lex.cc"
 yy221:
        ++YYCURSOR;
 #line 221 "../src/ast/lex.re"
@@ -1286,15 +1280,26 @@ yy221:
                                        depth = 1;
                                        goto comment;
                                }
-#line 1290 "src/ast/lex.cc"
+#line 1284 "src/ast/lex.cc"
 yy223:
        ++YYCURSOR;
 #line 218 "../src/ast/lex.re"
        {
                                goto nextLine;
                        }
-#line 1297 "src/ast/lex.cc"
+#line 1291 "src/ast/lex.cc"
 yy225:
+       yych = (YYCTYPE)*++YYCURSOR;
+       if (yych == '>') goto yy243;
+#line 211 "../src/ast/lex.re"
+       {
+                                       tok += 2; /* skip ":=" */
+                                       depth = 0;
+                                       code_line = cline;
+                                       goto code;
+                               }
+#line 1302 "src/ast/lex.cc"
+yy227:
        ++YYCURSOR;
        YYCURSOR -= 1;
 #line 308 "../src/ast/lex.re"
@@ -1314,24 +1319,24 @@ yy225:
                                                return TOKEN_REGEXP;
                                        }
                                }
-#line 1318 "src/ast/lex.cc"
-yy227:
+#line 1323 "src/ast/lex.cc"
+yy229:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
        yych = (YYCTYPE)*YYCURSOR;
        if (yych <= ' ') {
-               if (yych == '\t') goto yy227;
-               if (yych <= 0x1F) goto yy243;
-               goto yy227;
+               if (yych == '\t') goto yy229;
+               if (yych <= 0x1F) goto yy245;
+               goto yy229;
        } else {
                if (yych <= ',') {
-                       if (yych <= '+') goto yy243;
+                       if (yych <= '+') goto yy245;
                } else {
-                       if (yych <= '<') goto yy243;
-                       if (yych >= '?') goto yy243;
+                       if (yych <= '<') goto yy245;
+                       if (yych >= '?') goto yy245;
                }
        }
-yy229:
+yy231:
        ++YYCURSOR;
        YYCURSOR = YYCTXMARKER;
 #line 303 "../src/ast/lex.re"
@@ -1339,27 +1344,16 @@ yy229:
                                        yylval.str = new std::string (tok, tok_len ());
                                        return TOKEN_ID;
                                }
-#line 1343 "src/ast/lex.cc"
-yy231:
-       yych = (YYCTYPE)*++YYCURSOR;
-       if (yych == '>') goto yy245;
-#line 211 "../src/ast/lex.re"
-       {
-                                       tok += 2; /* skip ":=" */
-                                       depth = 0;
-                                       code_line = cline;
-                                       goto code;
-                               }
-#line 1354 "src/ast/lex.cc"
+#line 1348 "src/ast/lex.cc"
 yy233:
        ++YYCURSOR;
 #line 235 "../src/ast/lex.re"
        { yylval.regexp = lex_cls(true);  return TOKEN_REGEXP; }
-#line 1359 "src/ast/lex.cc"
+#line 1353 "src/ast/lex.cc"
 yy235:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == '2') goto yy247;
-       goto yy204;
+       goto yy205;
 yy236:
        ++YYCURSOR;
 yy237:
@@ -1367,7 +1361,7 @@ yy237:
        {
                                        fatal_lc(get_cline(), get_column(), "illegal closure form, use '{n}', '{n,}', '{n,m}' where n and m are numbers");
                                }
-#line 1371 "src/ast/lex.cc"
+#line 1365 "src/ast/lex.cc"
 yy238:
        ++YYCURSOR;
        if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
@@ -1375,22 +1369,9 @@ yy238:
        if (yybm[0+yych] & 64) {
                goto yy238;
        }
-       if (yych <= '^') {
-               if (yych <= ',') {
-                       if (yych <= '+') goto yy213;
-                       goto yy248;
-               } else {
-                       if (yych <= '@') goto yy213;
-                       if (yych >= '[') goto yy213;
-               }
-       } else {
-               if (yych <= 'z') {
-                       if (yych == '`') goto yy213;
-               } else {
-                       if (yych == '}') goto yy249;
-                       goto yy213;
-               }
-       }
+       if (yych == ',') goto yy248;
+       if (yych == '}') goto yy249;
+       goto yy213;
 yy240:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
@@ -1418,6 +1399,14 @@ yy242:
        if (yych == 'i') goto yy253;
        goto yy213;
 yy243:
+       ++YYCURSOR;
+       YYCURSOR -= 2;
+#line 207 "../src/ast/lex.re"
+       {
+                                       return *tok;
+                               }
+#line 1409 "src/ast/lex.cc"
+yy245:
        ++YYCURSOR;
        YYCURSOR = YYCTXMARKER;
 #line 290 "../src/ast/lex.re"
@@ -1433,19 +1422,11 @@ yy243:
                                                return TOKEN_ID;
                                        }
                                }
-#line 1437 "src/ast/lex.cc"
-yy245:
-       ++YYCURSOR;
-       YYCURSOR -= 2;
-#line 207 "../src/ast/lex.re"
-       {
-                                       return *tok;
-                               }
-#line 1445 "src/ast/lex.cc"
+#line 1426 "src/ast/lex.cc"
 yy247:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 'c') goto yy254;
-       goto yy204;
+       goto yy205;
 yy248:
        yyaccept = 2;
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
@@ -1464,7 +1445,7 @@ yy249:
                                        yylval.bounds.max = yylval.bounds.min;
                                        return TOKEN_CLOSESIZE;
                                }
-#line 1468 "src/ast/lex.cc"
+#line 1449 "src/ast/lex.cc"
 yy251:
        ++YYCURSOR;
 #line 280 "../src/ast/lex.re"
@@ -1475,7 +1456,7 @@ yy251:
                                        yylval.str = new std::string (tok + 1, tok_len () - 2); // -2 to omit braces
                                        return TOKEN_ID;
                                }
-#line 1479 "src/ast/lex.cc"
+#line 1460 "src/ast/lex.cc"
 yy253:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 'n') goto yy259;
@@ -1483,7 +1464,7 @@ yy253:
 yy254:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == ':') goto yy260;
-       goto yy204;
+       goto yy205;
 yy255:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
@@ -1503,7 +1484,7 @@ yy257:
                                        yylval.bounds.max = std::numeric_limits<uint32_t>::max();
                                        return TOKEN_CLOSESIZE;
                                }
-#line 1507 "src/ast/lex.cc"
+#line 1488 "src/ast/lex.cc"
 yy259:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == 'e') goto yy264;
@@ -1512,7 +1493,7 @@ yy260:
        ++YYCURSOR;
 #line 288 "../src/ast/lex.re"
        { return TOKEN_CONF; }
-#line 1516 "src/ast/lex.cc"
+#line 1497 "src/ast/lex.cc"
 yy262:
        ++YYCURSOR;
 #line 254 "../src/ast/lex.re"
@@ -1528,7 +1509,7 @@ yy262:
                                        }
                                        return TOKEN_CLOSESIZE;
                                }
-#line 1532 "src/ast/lex.cc"
+#line 1513 "src/ast/lex.cc"
 yy264:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych <= '0') goto yy266;
@@ -1589,7 +1570,7 @@ yy271:
                set_sourceline ();
                return TOKEN_LINE_INFO;
        }
-#line 1593 "src/ast/lex.cc"
+#line 1574 "src/ast/lex.cc"
 yy273:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == '\n') goto yy271;
@@ -1619,7 +1600,7 @@ yy277:
 
 code:
 
-#line 1623 "src/ast/lex.cc"
+#line 1604 "src/ast/lex.cc"
 {
        YYCTYPE yych;
        unsigned int yyaccept = 0;
@@ -1692,7 +1673,7 @@ yy280:
                                        }
                                        goto code;
                                }
-#line 1696 "src/ast/lex.cc"
+#line 1677 "src/ast/lex.cc"
 yy282:
        ++YYCURSOR;
 yy283:
@@ -1700,7 +1681,7 @@ yy283:
        {
                                        goto code;
                                }
-#line 1704 "src/ast/lex.cc"
+#line 1685 "src/ast/lex.cc"
 yy284:
        yyaccept = 0;
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
@@ -1739,7 +1720,7 @@ yy285:
                                        cline++;
                                        goto code;
                                }
-#line 1743 "src/ast/lex.cc"
+#line 1724 "src/ast/lex.cc"
 yy286:
        yyaccept = 1;
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
@@ -1764,7 +1745,7 @@ yy288:
                                        }
                                        goto code;
                                }
-#line 1768 "src/ast/lex.cc"
+#line 1749 "src/ast/lex.cc"
 yy290:
        ++YYCURSOR;
 #line 359 "../src/ast/lex.re"
@@ -1780,7 +1761,7 @@ yy290:
                                        }
                                        goto code;
                                }
-#line 1784 "src/ast/lex.cc"
+#line 1765 "src/ast/lex.cc"
 yy292:
        yyaccept = 2;
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
@@ -1806,7 +1787,7 @@ yy293:
                                        cline++;
                                        goto code;
                                }
-#line 1810 "src/ast/lex.cc"
+#line 1791 "src/ast/lex.cc"
 yy294:
        ++YYCURSOR;
        goto yy293;
@@ -1845,7 +1826,7 @@ yy300:
        {
                                        goto code;
                                }
-#line 1849 "src/ast/lex.cc"
+#line 1830 "src/ast/lex.cc"
 yy302:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
@@ -1940,7 +1921,7 @@ yy318:
                                        set_sourceline ();
                                        goto code;
                                }
-#line 1944 "src/ast/lex.cc"
+#line 1925 "src/ast/lex.cc"
 yy320:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == '\n') goto yy318;
@@ -1974,7 +1955,7 @@ yy324:
 
 comment:
 
-#line 1978 "src/ast/lex.cc"
+#line 1959 "src/ast/lex.cc"
 {
        YYCTYPE yych;
        static const unsigned char yybm[] = {
@@ -2029,7 +2010,7 @@ yy328:
                                        }
                                        goto comment;
                                }
-#line 2033 "src/ast/lex.cc"
+#line 2014 "src/ast/lex.cc"
 yy329:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
        if (yybm[0+yych] & 32) {
@@ -2047,7 +2028,7 @@ yy330:
                                        cline++;
                                        goto comment;
                                }
-#line 2051 "src/ast/lex.cc"
+#line 2032 "src/ast/lex.cc"
 yy331:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == '/') goto yy338;
@@ -2092,7 +2073,7 @@ yy338:
                                                goto comment;
                                        }
                                }
-#line 2096 "src/ast/lex.cc"
+#line 2077 "src/ast/lex.cc"
 yy340:
        ++YYCURSOR;
 #line 449 "../src/ast/lex.re"
@@ -2101,7 +2082,7 @@ yy340:
                                        fatal_lc(get_cline(), get_column(), "ambiguous /* found");
                                        goto comment;
                                }
-#line 2105 "src/ast/lex.cc"
+#line 2086 "src/ast/lex.cc"
 yy342:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych != 'i') goto yy335;
@@ -2163,7 +2144,7 @@ yy352:
                                        set_sourceline ();
                                        goto comment;
                                }
-#line 2167 "src/ast/lex.cc"
+#line 2148 "src/ast/lex.cc"
 yy354:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == '\n') goto yy352;
@@ -2193,7 +2174,7 @@ yy358:
 
 nextLine:
 
-#line 2197 "src/ast/lex.cc"
+#line 2178 "src/ast/lex.cc"
 {
        YYCTYPE yych;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
@@ -2206,7 +2187,7 @@ nextLine:
                }
                goto nextLine;
             }
-#line 2210 "src/ast/lex.cc"
+#line 2191 "src/ast/lex.cc"
 yy363:
        ++YYCURSOR;
 #line 478 "../src/ast/lex.re"
@@ -2217,7 +2198,7 @@ yy363:
                cline++;
                goto scan;
             }
-#line 2221 "src/ast/lex.cc"
+#line 2202 "src/ast/lex.cc"
 }
 #line 490 "../src/ast/lex.re"
 
@@ -2245,7 +2226,7 @@ fst:
        tok = cur;
        c = get_column();
        
-#line 2249 "src/ast/lex.cc"
+#line 2230 "src/ast/lex.cc"
 {
        YYCTYPE yych;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
@@ -2253,18 +2234,18 @@ fst:
        if (yych == ']') goto yy368;
 #line 516 "../src/ast/lex.re"
        { l = lex_cls_chr(); goto snd; }
-#line 2257 "src/ast/lex.cc"
+#line 2238 "src/ast/lex.cc"
 yy368:
        ++YYCURSOR;
 #line 515 "../src/ast/lex.re"
        { return ast_cls(cline, c0, cls, neg); }
-#line 2262 "src/ast/lex.cc"
+#line 2243 "src/ast/lex.cc"
 }
 #line 517 "../src/ast/lex.re"
 
 snd:
        
-#line 2268 "src/ast/lex.cc"
+#line 2249 "src/ast/lex.cc"
 {
        YYCTYPE yych;
        if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
@@ -2273,7 +2254,7 @@ snd:
 yy372:
 #line 520 "../src/ast/lex.re"
        { u = l; goto add; }
-#line 2277 "src/ast/lex.cc"
+#line 2258 "src/ast/lex.cc"
 yy373:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych != ']') goto yy375;
@@ -2291,7 +2272,7 @@ yy375:
                        }
                        goto add;
                }
-#line 2295 "src/ast/lex.cc"
+#line 2276 "src/ast/lex.cc"
 }
 #line 529 "../src/ast/lex.re"
 
@@ -2305,7 +2286,7 @@ uint32_t Scanner::lex_cls_chr()
        tok = cur;
        const uint32_t l = get_cline(), c = get_column();
        
-#line 2309 "src/ast/lex.cc"
+#line 2290 "src/ast/lex.cc"
 {
        YYCTYPE yych;
        unsigned int yyaccept = 0;
@@ -2321,12 +2302,12 @@ uint32_t Scanner::lex_cls_chr()
 yy380:
 #line 546 "../src/ast/lex.re"
        { return static_cast<uint8_t>(tok[0]); }
-#line 2325 "src/ast/lex.cc"
+#line 2306 "src/ast/lex.cc"
 yy381:
        ++YYCURSOR;
 #line 541 "../src/ast/lex.re"
        { fatal_lc(l, c, "newline in character class"); }
-#line 2330 "src/ast/lex.cc"
+#line 2311 "src/ast/lex.cc"
 yy383:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == '\n') goto yy381;
@@ -2383,7 +2364,7 @@ yy386:
                        warn.useless_escape(cline, get_column(), tok[1]);
                        return static_cast<uint8_t>(tok[1]);
                }
-#line 2387 "src/ast/lex.cc"
+#line 2368 "src/ast/lex.cc"
 yy387:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == '\n') goto yy381;
@@ -2392,7 +2373,7 @@ yy388:
        ++YYCURSOR;
 #line 557 "../src/ast/lex.re"
        { return static_cast<uint8_t>('-'); }
-#line 2396 "src/ast/lex.cc"
+#line 2377 "src/ast/lex.cc"
 yy390:
        yyaccept = 0;
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
@@ -2401,7 +2382,7 @@ yy390:
 yy391:
 #line 543 "../src/ast/lex.re"
        { fatal_lc(l, c, "syntax error in octal escape sequence"); }
-#line 2405 "src/ast/lex.cc"
+#line 2386 "src/ast/lex.cc"
 yy392:
        ++YYCURSOR;
        goto yy391;
@@ -2419,7 +2400,7 @@ yy393:
 yy394:
 #line 542 "../src/ast/lex.re"
        { fatal_lc(l, c, "syntax error in hexadecimal escape sequence"); }
-#line 2423 "src/ast/lex.cc"
+#line 2404 "src/ast/lex.cc"
 yy395:
        yyaccept = 1;
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
@@ -2437,47 +2418,47 @@ yy396:
        ++YYCURSOR;
 #line 556 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\\'); }
-#line 2441 "src/ast/lex.cc"
+#line 2422 "src/ast/lex.cc"
 yy398:
        ++YYCURSOR;
 #line 558 "../src/ast/lex.re"
        { return static_cast<uint8_t>(']'); }
-#line 2446 "src/ast/lex.cc"
+#line 2427 "src/ast/lex.cc"
 yy400:
        ++YYCURSOR;
 #line 549 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\a'); }
-#line 2451 "src/ast/lex.cc"
+#line 2432 "src/ast/lex.cc"
 yy402:
        ++YYCURSOR;
 #line 550 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\b'); }
-#line 2456 "src/ast/lex.cc"
+#line 2437 "src/ast/lex.cc"
 yy404:
        ++YYCURSOR;
 #line 551 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\f'); }
-#line 2461 "src/ast/lex.cc"
+#line 2442 "src/ast/lex.cc"
 yy406:
        ++YYCURSOR;
 #line 552 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\n'); }
-#line 2466 "src/ast/lex.cc"
+#line 2447 "src/ast/lex.cc"
 yy408:
        ++YYCURSOR;
 #line 553 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\r'); }
-#line 2471 "src/ast/lex.cc"
+#line 2452 "src/ast/lex.cc"
 yy410:
        ++YYCURSOR;
 #line 554 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\t'); }
-#line 2476 "src/ast/lex.cc"
+#line 2457 "src/ast/lex.cc"
 yy412:
        ++YYCURSOR;
 #line 555 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\v'); }
-#line 2481 "src/ast/lex.cc"
+#line 2462 "src/ast/lex.cc"
 yy414:
        yyaccept = 1;
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
@@ -2542,7 +2523,7 @@ yy420:
        ++YYCURSOR;
 #line 548 "../src/ast/lex.re"
        { return unesc_oct(tok, cur); }
-#line 2546 "src/ast/lex.cc"
+#line 2527 "src/ast/lex.cc"
 yy422:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych <= '@') {
@@ -2571,7 +2552,7 @@ yy424:
        ++YYCURSOR;
 #line 547 "../src/ast/lex.re"
        { return unesc_hex(tok, cur); }
-#line 2575 "src/ast/lex.cc"
+#line 2556 "src/ast/lex.cc"
 yy426:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych <= '@') {
@@ -2605,7 +2586,7 @@ uint32_t Scanner::lex_str_chr(char quote, bool &end)
        tok = cur;
        const uint32_t l = get_cline(), c = get_column();
        
-#line 2609 "src/ast/lex.cc"
+#line 2590 "src/ast/lex.cc"
 {
        YYCTYPE yych;
        unsigned int yyaccept = 0;
@@ -2624,12 +2605,12 @@ yy431:
                        end = tok[0] == quote;
                        return static_cast<uint8_t>(tok[0]);
                }
-#line 2628 "src/ast/lex.cc"
+#line 2609 "src/ast/lex.cc"
 yy432:
        ++YYCURSOR;
 #line 573 "../src/ast/lex.re"
        { fatal_lc(l, c, "newline in character string"); }
-#line 2633 "src/ast/lex.cc"
+#line 2614 "src/ast/lex.cc"
 yy434:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == '\n') goto yy432;
@@ -2685,7 +2666,7 @@ yy437:
                        }
                        return static_cast<uint8_t>(tok[1]);
                }
-#line 2689 "src/ast/lex.cc"
+#line 2670 "src/ast/lex.cc"
 yy438:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych == '\n') goto yy432;
@@ -2698,7 +2679,7 @@ yy439:
 yy440:
 #line 575 "../src/ast/lex.re"
        { fatal_lc(l, c, "syntax error in octal escape sequence"); }
-#line 2702 "src/ast/lex.cc"
+#line 2683 "src/ast/lex.cc"
 yy441:
        ++YYCURSOR;
        goto yy440;
@@ -2716,7 +2697,7 @@ yy442:
 yy443:
 #line 574 "../src/ast/lex.re"
        { fatal_lc(l, c, "syntax error in hexadecimal escape sequence"); }
-#line 2720 "src/ast/lex.cc"
+#line 2701 "src/ast/lex.cc"
 yy444:
        yyaccept = 1;
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
@@ -2734,42 +2715,42 @@ yy445:
        ++YYCURSOR;
 #line 591 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\\'); }
-#line 2738 "src/ast/lex.cc"
+#line 2719 "src/ast/lex.cc"
 yy447:
        ++YYCURSOR;
 #line 584 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\a'); }
-#line 2743 "src/ast/lex.cc"
+#line 2724 "src/ast/lex.cc"
 yy449:
        ++YYCURSOR;
 #line 585 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\b'); }
-#line 2748 "src/ast/lex.cc"
+#line 2729 "src/ast/lex.cc"
 yy451:
        ++YYCURSOR;
 #line 586 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\f'); }
-#line 2753 "src/ast/lex.cc"
+#line 2734 "src/ast/lex.cc"
 yy453:
        ++YYCURSOR;
 #line 587 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\n'); }
-#line 2758 "src/ast/lex.cc"
+#line 2739 "src/ast/lex.cc"
 yy455:
        ++YYCURSOR;
 #line 588 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\r'); }
-#line 2763 "src/ast/lex.cc"
+#line 2744 "src/ast/lex.cc"
 yy457:
        ++YYCURSOR;
 #line 589 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\t'); }
-#line 2768 "src/ast/lex.cc"
+#line 2749 "src/ast/lex.cc"
 yy459:
        ++YYCURSOR;
 #line 590 "../src/ast/lex.re"
        { return static_cast<uint8_t>('\v'); }
-#line 2773 "src/ast/lex.cc"
+#line 2754 "src/ast/lex.cc"
 yy461:
        yyaccept = 1;
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
@@ -2834,7 +2815,7 @@ yy467:
        ++YYCURSOR;
 #line 583 "../src/ast/lex.re"
        { return unesc_oct(tok, cur); }
-#line 2838 "src/ast/lex.cc"
+#line 2819 "src/ast/lex.cc"
 yy469:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych <= '@') {
@@ -2863,7 +2844,7 @@ yy471:
        ++YYCURSOR;
 #line 582 "../src/ast/lex.re"
        { return unesc_hex(tok, cur); }
-#line 2867 "src/ast/lex.cc"
+#line 2848 "src/ast/lex.cc"
 yy473:
        yych = (YYCTYPE)*++YYCURSOR;
        if (yych <= '@') {
@@ -2907,7 +2888,7 @@ void Scanner::set_sourceline ()
 sourceline:
        tok = cur;
 
-#line 2911 "src/ast/lex.cc"
+#line 2892 "src/ast/lex.cc"
 {
        YYCTYPE yych;
        static const unsigned char yybm[] = {
@@ -2960,7 +2941,7 @@ yy478:
        {
                                        goto sourceline;
                                }
-#line 2964 "src/ast/lex.cc"
+#line 2945 "src/ast/lex.cc"
 yy479:
        ++YYCURSOR;
 #line 628 "../src/ast/lex.re"
@@ -2976,7 +2957,7 @@ yy479:
                                        tok = cur;
                                        return; 
                                }
-#line 2980 "src/ast/lex.cc"
+#line 2961 "src/ast/lex.cc"
 yy481:
        yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
        if (yych == '\n') goto yy478;
@@ -2996,7 +2977,7 @@ yy482:
                                        }
                                        goto sourceline; 
                                }
-#line 3000 "src/ast/lex.cc"
+#line 2981 "src/ast/lex.cc"
 yy485:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
@@ -3018,7 +2999,7 @@ yy488:
                                        escape (in.file_name, std::string (tok + 1, tok_len () - 2)); // -2 to omit quotes
                                        goto sourceline; 
                                }
-#line 3022 "src/ast/lex.cc"
+#line 3003 "src/ast/lex.cc"
 yy490:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
index ab3b85ecad2470ce2abdb77b1e3afad456e45819..6e6887cb46c92e8a4b7116315c051f8c804b84b4 100644 (file)
@@ -43,7 +43,7 @@ sstring = "'"  ((. \ [\\'] ) | "\\" .)* "'" ;
 letter  = [a-zA-Z];
 digit   = [0-9];
 lineno  = [1-9] digit*;
-name    = (letter|digit|"_")+;
+name    = (letter|"_") (letter|digit|"_")*;
 space   = [ \t];
 ws      = (space | [\r\n]);
 eol     = "\r"? "\n";
diff --git a/re2c/test/cond_error_12.c.c b/re2c/test/cond_error_12.c.c
new file mode 100644 (file)
index 0000000..fb3f675
--- /dev/null
@@ -0,0 +1 @@
+re2c: error: line 3, column 3: unexpected character: '0'
diff --git a/re2c/test/cond_error_12.c.re b/re2c/test/cond_error_12.c.re
new file mode 100644 (file)
index 0000000..7f750a6
--- /dev/null
@@ -0,0 +1,6 @@
+/*!re2c
+
+  <0> "a" { return 0; }
+  <>      { return 1; }
+
+*/
diff --git a/re2c/test/error15.c b/re2c/test/error15.c
new file mode 100644 (file)
index 0000000..23acb84
--- /dev/null
@@ -0,0 +1 @@
+re2c: error: line 3, column 2: unexpected character: '1'
diff --git a/re2c/test/error15.re b/re2c/test/error15.re
new file mode 100644 (file)
index 0000000..9e92e37
--- /dev/null
@@ -0,0 +1,7 @@
+/*!re2c
+
+  1 = "a";
+
+  1 {}
+
+*/