1 /* Generated by re2c */
2 #line 1 "bug1454253.re"
3 // re2c $INPUT -o $OUTPUT
4 #include <stdlib.h>
5 #include <stdio.h>
6 #include <string.h>
7
8 #define RET(n) return n
9
scan(const char * s,int l,char * r)10 size_t scan(const char *s, int l, char *r)
11 {
12 const char *p = s;
13 const char *q;
14 #define YYCTYPE char
15 #define YYCURSOR p
16 #define YYLIMIT (s+l)
17 #define YYMARKER q
18 #define YYFILL(n)
19
20 while(1)
21 {
22
23 #line 24 "bug1454253.c"
24 {
25 YYCTYPE yych;
26 if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
27 yych = *(YYMARKER = YYCURSOR);
28 switch (yych) {
29 case 0x00: goto yy3;
30 case '?': goto yy7;
31 default: goto yy5;
32 }
33 yy2:
34 #line 41 "bug1454253.re"
35 {
36 *r++ = '0';
37 *r++ = '\0';
38 return p - s;
39 }
40 #line 41 "bug1454253.c"
41 yy3:
42 ++YYCURSOR;
43 #line 35 "bug1454253.re"
44 {
45 *r++ = '3';
46 *r++ = '\0';
47 return p - s;
48 }
49 #line 50 "bug1454253.c"
50 yy5:
51 ++YYCURSOR;
52 if (YYLIMIT <= YYCURSOR) YYFILL(1);
53 yych = *YYCURSOR;
54 switch (yych) {
55 case 0x00:
56 case '?': goto yy2;
57 default: goto yy5;
58 }
59 yy7:
60 yych = *++YYCURSOR;
61 switch (yych) {
62 case '!': goto yy9;
63 case '0':
64 case '1':
65 case '2':
66 case '3':
67 case '4':
68 case '5':
69 case '6':
70 case '7':
71 case '8':
72 case '9':
73 case 'A':
74 case 'B':
75 case 'C':
76 case 'D':
77 case 'E':
78 case 'F':
79 case 'G':
80 case 'H':
81 case 'I':
82 case 'J':
83 case 'K':
84 case 'L':
85 case 'M':
86 case 'N':
87 case 'O':
88 case 'P':
89 case 'Q':
90 case 'R':
91 case 'S':
92 case 'T':
93 case 'U':
94 case 'V':
95 case 'W':
96 case 'X':
97 case 'Y':
98 case 'Z':
99 case 'a':
100 case 'b':
101 case 'c':
102 case 'd':
103 case 'e':
104 case 'f':
105 case 'g':
106 case 'h':
107 case 'i':
108 case 'j':
109 case 'k':
110 case 'l':
111 case 'm':
112 case 'n':
113 case 'o':
114 case 'p':
115 case 'q':
116 case 'r':
117 case 's':
118 case 't':
119 case 'u':
120 case 'v':
121 case 'w':
122 case 'x':
123 case 'y':
124 case 'z': goto yy12;
125 default: goto yy8;
126 }
127 yy8:
128 YYCURSOR = YYMARKER;
129 goto yy2;
130 yy9:
131 ++YYCURSOR;
132 if (YYLIMIT <= YYCURSOR) YYFILL(1);
133 yych = *YYCURSOR;
134 switch (yych) {
135 case '0':
136 case '1':
137 case '2':
138 case '3':
139 case '4':
140 case '5':
141 case '6':
142 case '7':
143 case '8':
144 case '9':
145 case 'A':
146 case 'B':
147 case 'C':
148 case 'D':
149 case 'E':
150 case 'F':
151 case 'G':
152 case 'H':
153 case 'I':
154 case 'J':
155 case 'K':
156 case 'L':
157 case 'M':
158 case 'N':
159 case 'O':
160 case 'P':
161 case 'Q':
162 case 'R':
163 case 'S':
164 case 'T':
165 case 'U':
166 case 'V':
167 case 'W':
168 case 'X':
169 case 'Y':
170 case 'Z':
171 case 'a':
172 case 'b':
173 case 'c':
174 case 'd':
175 case 'e':
176 case 'f':
177 case 'g':
178 case 'h':
179 case 'i':
180 case 'j':
181 case 'k':
182 case 'l':
183 case 'm':
184 case 'n':
185 case 'o':
186 case 'p':
187 case 'q':
188 case 'r':
189 case 's':
190 case 't':
191 case 'u':
192 case 'v':
193 case 'w':
194 case 'x':
195 case 'y':
196 case 'z': goto yy9;
197 default: goto yy11;
198 }
199 yy11:
200 #line 25 "bug1454253.re"
201 {
202 *r++ = '1';
203 continue;
204 }
205 #line 206 "bug1454253.c"
206 yy12:
207 ++YYCURSOR;
208 if (YYLIMIT <= YYCURSOR) YYFILL(1);
209 yych = *YYCURSOR;
210 switch (yych) {
211 case '0':
212 case '1':
213 case '2':
214 case '3':
215 case '4':
216 case '5':
217 case '6':
218 case '7':
219 case '8':
220 case '9':
221 case 'A':
222 case 'B':
223 case 'C':
224 case 'D':
225 case 'E':
226 case 'F':
227 case 'G':
228 case 'H':
229 case 'I':
230 case 'J':
231 case 'K':
232 case 'L':
233 case 'M':
234 case 'N':
235 case 'O':
236 case 'P':
237 case 'Q':
238 case 'R':
239 case 'S':
240 case 'T':
241 case 'U':
242 case 'V':
243 case 'W':
244 case 'X':
245 case 'Y':
246 case 'Z':
247 case 'a':
248 case 'b':
249 case 'c':
250 case 'd':
251 case 'e':
252 case 'f':
253 case 'g':
254 case 'h':
255 case 'i':
256 case 'j':
257 case 'k':
258 case 'l':
259 case 'm':
260 case 'n':
261 case 'o':
262 case 'p':
263 case 'q':
264 case 'r':
265 case 's':
266 case 't':
267 case 'u':
268 case 'v':
269 case 'w':
270 case 'x':
271 case 'y':
272 case 'z': goto yy12;
273 default: goto yy14;
274 }
275 yy14:
276 #line 30 "bug1454253.re"
277 {
278 *r++ = '2';
279 continue;
280 }
281 #line 282 "bug1454253.c"
282 }
283 #line 46 "bug1454253.re"
284
285 }
286 }
287
_do_scan(const char * str,size_t str_len,size_t scn_len,const char * exp,size_t exp_len)288 void _do_scan(const char * str, size_t str_len, size_t scn_len, const char * exp, size_t exp_len)
289 {
290 char res[32], sp[32];
291 size_t res_len, inp_len;
292
293 inp_len = scan(str, str_len, res);
294 res_len = strlen(res);
295
296 memset(sp, ' ', sizeof(sp));
297 sp[15 - str_len] = '\0';
298
299 printf("[%s](%2d/%2d)%s: %8s(%d) %s %8s(%d)\n", str, inp_len, scn_len, sp,
300 res, res_len,
301 inp_len != scn_len || exp_len != res_len || strncmp(exp, res, exp_len) ? "!=" : "==",
302 exp, exp_len);
303 }
304
305 #define do_scan(str, scn_len, exp) _do_scan(str, sizeof(str) - 1, scn_len, exp, sizeof(exp) - 1)
306
main()307 main()
308 {
309 do_scan("?1??", 2, "20");
310 do_scan("#", 1, "0");
311 do_scan("##", 2, "0");
312 do_scan("##?", 2, "0");
313 do_scan("##|", 3, "0");
314 do_scan("?!|", 3, "10");
315 do_scan("?!?1|", 5, "120");
316 do_scan("?!?a+", 5, "120");
317 do_scan("?2!1?2??", 4, "20");
318 do_scan("?1?2!1?2??", 6, "220");
319 do_scan("?1?2?!1?2??", 9, "22120");
320 do_scan("?1?2?!1?2?!", 12, "221213");
321 do_scan("?1?123?45??", 9, "2220");
322 do_scan("?1?123?45?!", 12, "22213");
323 }
324 bug1454253.re:41:6: warning: rule matches empty string [-Wmatch-empty-string]
325