1 /* Generated by re2c */ 2 #line 1 "bug57.re" 3 // re2c $INPUT -o $OUTPUT 4 #include <stdio.h> 5 scan(const char * p)6int scan(const char *p) 7 { 8 #define YYCTYPE char 9 const char *YYCURSOR = p; 10 const char *YYMARKER; 11 12 13 #line 14 "bug57.c" 14 { 15 YYCTYPE yych; 16 unsigned int yyaccept = 0; 17 yych = *YYCURSOR; 18 switch (yych) { 19 case '\n': goto yy2; 20 case '<': goto yy5; 21 case '\\': goto yy6; 22 case 'a': goto yy7; 23 default: goto yy3; 24 } 25 yy2: 26 #line 16 "bug57.re" 27 { return YYCURSOR - p; } 28 #line 29 "bug57.c" 29 yy3: 30 ++YYCURSOR; 31 yy4: 32 #line 17 "bug57.re" 33 { return 0; } 34 #line 35 "bug57.c" 35 yy5: 36 yyaccept = 0; 37 yych = *(YYMARKER = ++YYCURSOR); 38 switch (yych) { 39 case '>': goto yy9; 40 case '\\': goto yy11; 41 case 'x': 42 case 'y': goto yy13; 43 default: goto yy4; 44 } 45 yy6: 46 yych = *++YYCURSOR; 47 switch (yych) { 48 case 'b': goto yy7; 49 default: goto yy4; 50 } 51 yy7: 52 yyaccept = 1; 53 yych = *(YYMARKER = ++YYCURSOR); 54 switch (yych) { 55 case '\\': goto yy15; 56 case 'a': goto yy7; 57 default: goto yy2; 58 } 59 yy9: 60 ++YYCURSOR; 61 #line 15 "bug57.re" 62 { return YYCURSOR - p; } 63 #line 64 "bug57.c" 64 yy11: 65 yych = *++YYCURSOR; 66 switch (yych) { 67 case 'b': goto yy13; 68 default: goto yy12; 69 } 70 yy12: 71 YYCURSOR = YYMARKER; 72 if (yyaccept == 0) { 73 goto yy4; 74 } else { 75 goto yy2; 76 } 77 yy13: 78 yych = *++YYCURSOR; 79 switch (yych) { 80 case '>': goto yy9; 81 case '\\': goto yy11; 82 case 'x': 83 case 'y': goto yy13; 84 default: goto yy12; 85 } 86 yy15: 87 yych = *++YYCURSOR; 88 switch (yych) { 89 case 'b': goto yy7; 90 default: goto yy12; 91 } 92 } 93 #line 18 "bug57.re" 94 95 } 96 main()97int main() 98 { 99 const char *str = "aaa\\baaa"; 100 int res = scan(str); 101 printf("%d: %s\n", res, str + res); 102 return 0; 103 } 104 105 bug57.re:16:26: warning: rule matches empty string [-Wmatch-empty-string] 106