]> granicus.if.org Git - re2c/blob - re2c/bootstrap/src/parse/lex.cc
Release 0.15.3.
[re2c] / re2c / bootstrap / src / parse / lex.cc
1 /* Generated by re2c 0.15.3 on Wed Dec  2 12:10:03 2015 */
2 #line 1 "../src/parse/lex.re"
3 #include "src/util/c99_stdint.h"
4 #include <stddef.h>
5 #include <string.h>
6 #include <algorithm>
7 #include <limits>
8 #include <string>
9
10 #include "src/codegen/output.h"
11 #include "src/conf/opt.h"
12 #include "src/conf/warn.h"
13 #include "src/globals.h"
14 #include "src/ir/regexp/encoding/enc.h"
15 #include "src/ir/regexp/regexp.h"
16 #include "src/ir/regexp/regexp_null.h"
17 #include "src/parse/code.h"
18 #include "src/parse/extop.h"
19 #include "src/parse/input.h"
20 #include "src/parse/scanner.h"
21 #include "src/parse/parser.h" // needed by "y.tab.h"
22 #include "src/parse/unescape.h"
23 #include "src/util/range.h"
24 #include "src/util/s_to_n32_unsafe.h"
25 #include "y.tab.h"
26
27 extern YYSTYPE yylval;
28
29 #define YYCTYPE         unsigned char
30 #define YYCURSOR        cur
31 #define YYLIMIT         lim
32 #define YYMARKER        ptr
33 #define YYCTXMARKER ctx
34 #define YYFILL(n)       { fill (n); }
35
36 namespace re2c
37 {
38
39 // source code is in ASCII: pointers have type 'char *'
40 // but re2c makes an implicit assumption that YYCTYPE is unsigned
41 // when it generates comparisons
42 #line 42 "../src/parse/lex.re"
43
44
45 #line 62 "../src/parse/lex.re"
46
47
48 Scanner::ParseMode Scanner::echo()
49 {
50         bool ignore_eoc = false;
51         int  ignore_cnt = 0;
52
53         if (eof && cur == eof) // Catch EOF
54         {
55                 return Stop;
56         }
57
58         tok = cur;
59 echo:
60
61 #line 62 "src/parse/lex.cc"
62 {
63         YYCTYPE yych;
64         unsigned int yyaccept = 0;
65         static const unsigned char yybm[] = {
66                 128, 128, 128, 128, 128, 128, 128, 128, 
67                 128, 160,   0, 128, 128, 128, 128, 128, 
68                 128, 128, 128, 128, 128, 128, 128, 128, 
69                 128, 128, 128, 128, 128, 128, 128, 128, 
70                 160, 128,   0, 128, 128, 128, 128, 128, 
71                 128, 128, 128, 128, 128, 128, 128, 128, 
72                 192, 192, 192, 192, 192, 192, 192, 192, 
73                 192, 192, 128, 128, 128, 128, 128, 128, 
74                 128, 128, 128, 128, 128, 128, 128, 128, 
75                 128, 128, 128, 128, 128, 128, 128, 128, 
76                 128, 128, 128, 128, 128, 128, 128, 128, 
77                 128, 128, 128, 128,   0, 128, 128, 128, 
78                 128, 128, 128, 128, 128, 128, 128, 128, 
79                 128, 128, 128, 128, 128, 128, 128, 128, 
80                 128, 128, 128, 128, 128, 128, 128, 128, 
81                 128, 128, 128, 128, 128, 128, 128, 128, 
82                 128, 128, 128, 128, 128, 128, 128, 128, 
83                 128, 128, 128, 128, 128, 128, 128, 128, 
84                 128, 128, 128, 128, 128, 128, 128, 128, 
85                 128, 128, 128, 128, 128, 128, 128, 128, 
86                 128, 128, 128, 128, 128, 128, 128, 128, 
87                 128, 128, 128, 128, 128, 128, 128, 128, 
88                 128, 128, 128, 128, 128, 128, 128, 128, 
89                 128, 128, 128, 128, 128, 128, 128, 128, 
90                 128, 128, 128, 128, 128, 128, 128, 128, 
91                 128, 128, 128, 128, 128, 128, 128, 128, 
92                 128, 128, 128, 128, 128, 128, 128, 128, 
93                 128, 128, 128, 128, 128, 128, 128, 128, 
94                 128, 128, 128, 128, 128, 128, 128, 128, 
95                 128, 128, 128, 128, 128, 128, 128, 128, 
96                 128, 128, 128, 128, 128, 128, 128, 128, 
97                 128, 128, 128, 128, 128, 128, 128, 128, 
98         };
99         if ((YYLIMIT - YYCURSOR) < 16) YYFILL(16);
100         yych = (YYCTYPE)*YYCURSOR;
101         if (yych <= '%') {
102                 if (yych <= '\t') {
103                         if (yych >= 0x01) goto yy4;
104                 } else {
105                         if (yych <= '\n') goto yy6;
106                         if (yych <= '$') goto yy4;
107                         goto yy8;
108                 }
109         } else {
110                 if (yych <= '*') {
111                         if (yych <= ')') goto yy4;
112                         goto yy9;
113                 } else {
114                         if (yych == '/') goto yy10;
115                         goto yy4;
116                 }
117         }
118         ++YYCURSOR;
119 #line 202 "../src/parse/lex.re"
120         {
121                                         if (!ignore_eoc && opts->target == opt_t::CODE)
122                                         {
123                                                 out.wraw(tok, tok_len () - 1);
124                                                 // -1 so we don't write out the \0
125                                         }
126                                         if(cur == eof)
127                                         {
128                                                 return Stop;
129                                         }
130                                 }
131 #line 132 "src/parse/lex.cc"
132 yy4:
133         ++YYCURSOR;
134 yy5:
135 #line 213 "../src/parse/lex.re"
136         {
137                                         goto echo;
138                                 }
139 #line 140 "src/parse/lex.cc"
140 yy6:
141         yyaccept = 0;
142         yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
143         if (yybm[0+yych] & 32) {
144                 goto yy89;
145         }
146         if (yych == '#') goto yy91;
147 yy7:
148 #line 189 "../src/parse/lex.re"
149         {
150                                         if (ignore_eoc)
151                                         {
152                                                 ignore_cnt++;
153                                         }
154                                         else if (opts->target == opt_t::CODE)
155                                         {
156                                                 out.wraw(tok, tok_len ());
157                                         }
158                                         tok = pos = cur;
159                                         cline++;
160                                         goto echo;
161                                 }
162 #line 163 "src/parse/lex.cc"
163 yy8:
164         yych = (YYCTYPE)*++YYCURSOR;
165         if (yych == '{') goto yy32;
166         goto yy5;
167 yy9:
168         yych = (YYCTYPE)*++YYCURSOR;
169         if (yych == '/') goto yy84;
170         goto yy5;
171 yy10:
172         yyaccept = 1;
173         yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
174         if (yych != '*') goto yy5;
175         yych = (YYCTYPE)*++YYCURSOR;
176         if (yych == '!') goto yy13;
177 yy12:
178         YYCURSOR = YYMARKER;
179         if (yyaccept <= 1) {
180                 if (yyaccept == 0) {
181                         goto yy7;
182                 } else {
183                         goto yy5;
184                 }
185         } else {
186                 goto yy85;
187         }
188 yy13:
189         yych = (YYCTYPE)*++YYCURSOR;
190         switch (yych) {
191         case 'g':       goto yy16;
192         case 'i':       goto yy15;
193         case 'm':       goto yy17;
194         case 'r':       goto yy19;
195         case 't':       goto yy14;
196         case 'u':       goto yy18;
197         default:        goto yy12;
198         }
199 yy14:
200         yych = (YYCTYPE)*++YYCURSOR;
201         if (yych == 'y') goto yy74;
202         goto yy12;
203 yy15:
204         yych = (YYCTYPE)*++YYCURSOR;
205         if (yych == 'g') goto yy63;
206         goto yy12;
207 yy16:
208         yych = (YYCTYPE)*++YYCURSOR;
209         if (yych == 'e') goto yy50;
210         goto yy12;
211 yy17:
212         yych = (YYCTYPE)*++YYCURSOR;
213         if (yych == 'a') goto yy42;
214         goto yy12;
215 yy18:
216         yych = (YYCTYPE)*++YYCURSOR;
217         if (yych == 's') goto yy34;
218         goto yy12;
219 yy19:
220         yych = (YYCTYPE)*++YYCURSOR;
221         if (yych == 'e') goto yy20;
222         if (yych == 'u') goto yy21;
223         goto yy12;
224 yy20:
225         yych = (YYCTYPE)*++YYCURSOR;
226         if (yych == '2') goto yy31;
227         goto yy12;
228 yy21:
229         yych = (YYCTYPE)*++YYCURSOR;
230         if (yych != 'l') goto yy12;
231         yych = (YYCTYPE)*++YYCURSOR;
232         if (yych != 'e') goto yy12;
233         yych = (YYCTYPE)*++YYCURSOR;
234         if (yych != 's') goto yy12;
235         yych = (YYCTYPE)*++YYCURSOR;
236         if (yych != ':') goto yy12;
237         yych = (YYCTYPE)*++YYCURSOR;
238         if (yych != 'r') goto yy12;
239         yych = (YYCTYPE)*++YYCURSOR;
240         if (yych != 'e') goto yy12;
241         yych = (YYCTYPE)*++YYCURSOR;
242         if (yych != '2') goto yy12;
243         yych = (YYCTYPE)*++YYCURSOR;
244         if (yych != 'c') goto yy12;
245         ++YYCURSOR;
246 #line 93 "../src/parse/lex.re"
247         {
248                                         if (opts->rFlag)
249                                         {
250                                                 opts.reset_mapCodeName ();
251                                         }
252                                         else
253                                         {
254                                                 fatal("found 'rules:re2c' block without -r flag");
255                                         }
256                                         tok = cur;
257                                         return Rules;
258                                 }
259 #line 260 "src/parse/lex.cc"
260 yy31:
261         yych = (YYCTYPE)*++YYCURSOR;
262         if (yych != 'c') goto yy12;
263 yy32:
264         ++YYCURSOR;
265 #line 78 "../src/parse/lex.re"
266         {
267                                         if (opts->rFlag)
268                                         {
269                                                 fatal("found standard 're2c' block while using -r flag");
270                                         }
271                                         if (opts->target == opt_t::CODE)
272                                         {
273                                                 const size_t lexeme_len = cur[-1] == '{'
274                                                         ? sizeof ("%{") - 1
275                                                         : sizeof ("/*!re2c") - 1;
276                                                 out.wraw(tok, tok_len () - lexeme_len);
277                                         }
278                                         tok = cur;
279                                         return Parse;
280                                 }
281 #line 282 "src/parse/lex.cc"
282 yy34:
283         yych = (YYCTYPE)*++YYCURSOR;
284         if (yych != 'e') goto yy12;
285         yych = (YYCTYPE)*++YYCURSOR;
286         if (yych != ':') goto yy12;
287         yych = (YYCTYPE)*++YYCURSOR;
288         if (yych != 'r') goto yy12;
289         yych = (YYCTYPE)*++YYCURSOR;
290         if (yych != 'e') goto yy12;
291         yych = (YYCTYPE)*++YYCURSOR;
292         if (yych != '2') goto yy12;
293         yych = (YYCTYPE)*++YYCURSOR;
294         if (yych != 'c') goto yy12;
295         ++YYCURSOR;
296 #line 105 "../src/parse/lex.re"
297         {
298                                         if (!opts->rFlag)
299                                         {
300                                                 fatal("found 'use:re2c' block without -r flag");
301                                         }
302                                         reuse();
303                                         if (opts->target == opt_t::CODE)
304                                         {
305                                                 const size_t lexeme_len = sizeof ("/*!use:re2c") - 1;
306                                                 out.wraw(tok, tok_len () - lexeme_len);
307                                         }
308                                         tok = cur;
309                                         return Reuse;
310                                 }
311 #line 312 "src/parse/lex.cc"
312 yy42:
313         yych = (YYCTYPE)*++YYCURSOR;
314         if (yych != 'x') goto yy12;
315         yych = (YYCTYPE)*++YYCURSOR;
316         if (yych != ':') goto yy12;
317         yych = (YYCTYPE)*++YYCURSOR;
318         if (yych != 'r') goto yy12;
319         yych = (YYCTYPE)*++YYCURSOR;
320         if (yych != 'e') goto yy12;
321         yych = (YYCTYPE)*++YYCURSOR;
322         if (yych != '2') goto yy12;
323         yych = (YYCTYPE)*++YYCURSOR;
324         if (yych != 'c') goto yy12;
325         ++YYCURSOR;
326 #line 119 "../src/parse/lex.re"
327         {
328                                         if (opts->target != opt_t::DOT)
329                                         {
330                                                 out.wdelay_yymaxfill ();
331                                         }
332                                         tok = pos = cur;
333                                         ignore_eoc = true;
334                                         goto echo;
335                                 }
336 #line 337 "src/parse/lex.cc"
337 yy50:
338         yych = (YYCTYPE)*++YYCURSOR;
339         if (yych != 't') goto yy12;
340         yych = (YYCTYPE)*++YYCURSOR;
341         if (yych != 's') goto yy12;
342         yych = (YYCTYPE)*++YYCURSOR;
343         if (yych != 't') goto yy12;
344         yych = (YYCTYPE)*++YYCURSOR;
345         if (yych != 'a') goto yy12;
346         yych = (YYCTYPE)*++YYCURSOR;
347         if (yych != 't') goto yy12;
348         yych = (YYCTYPE)*++YYCURSOR;
349         if (yych != 'e') goto yy12;
350         yych = (YYCTYPE)*++YYCURSOR;
351         if (yych != ':') goto yy12;
352         yych = (YYCTYPE)*++YYCURSOR;
353         if (yych != 'r') goto yy12;
354         yych = (YYCTYPE)*++YYCURSOR;
355         if (yych != 'e') goto yy12;
356         yych = (YYCTYPE)*++YYCURSOR;
357         if (yych != '2') goto yy12;
358         yych = (YYCTYPE)*++YYCURSOR;
359         if (yych != 'c') goto yy12;
360         ++YYCURSOR;
361 #line 128 "../src/parse/lex.re"
362         {
363                                         tok = pos = cur;
364                                         out.wdelay_state_goto (opts->topIndent);
365                                         ignore_eoc = true;
366                                         goto echo;
367                                 }
368 #line 369 "src/parse/lex.cc"
369 yy63:
370         yych = (YYCTYPE)*++YYCURSOR;
371         if (yych != 'n') goto yy12;
372         yych = (YYCTYPE)*++YYCURSOR;
373         if (yych != 'o') goto yy12;
374         yych = (YYCTYPE)*++YYCURSOR;
375         if (yych != 'r') goto yy12;
376         yych = (YYCTYPE)*++YYCURSOR;
377         if (yych != 'e') goto yy12;
378         yych = (YYCTYPE)*++YYCURSOR;
379         if (yych != ':') goto yy12;
380         yych = (YYCTYPE)*++YYCURSOR;
381         if (yych != 'r') goto yy12;
382         yych = (YYCTYPE)*++YYCURSOR;
383         if (yych != 'e') goto yy12;
384         yych = (YYCTYPE)*++YYCURSOR;
385         if (yych != '2') goto yy12;
386         yych = (YYCTYPE)*++YYCURSOR;
387         if (yych != 'c') goto yy12;
388         ++YYCURSOR;
389 #line 134 "../src/parse/lex.re"
390         {
391                                         tok = pos = cur;
392                                         ignore_eoc = true;
393                                         goto echo;
394                                 }
395 #line 396 "src/parse/lex.cc"
396 yy74:
397         yych = (YYCTYPE)*++YYCURSOR;
398         if (yych != 'p') goto yy12;
399         yych = (YYCTYPE)*++YYCURSOR;
400         if (yych != 'e') goto yy12;
401         yych = (YYCTYPE)*++YYCURSOR;
402         if (yych != 's') goto yy12;
403         yych = (YYCTYPE)*++YYCURSOR;
404         if (yych != ':') goto yy12;
405         yych = (YYCTYPE)*++YYCURSOR;
406         if (yych != 'r') goto yy12;
407         yych = (YYCTYPE)*++YYCURSOR;
408         if (yych != 'e') goto yy12;
409         yych = (YYCTYPE)*++YYCURSOR;
410         if (yych != '2') goto yy12;
411         yych = (YYCTYPE)*++YYCURSOR;
412         if (yych != 'c') goto yy12;
413         ++YYCURSOR;
414 #line 139 "../src/parse/lex.re"
415         {
416                                         tok = pos = cur;
417                                         ignore_eoc = true;
418                                         if (opts->target != opt_t::DOT)
419                                         {
420                                                 out.wdelay_line_info ().ws("\n")
421                                                         .wdelay_types ().ws("\n")
422                                                         .wline_info (cline, get_fname ().c_str ());
423                                         }
424                                         goto echo;
425                                 }
426 #line 427 "src/parse/lex.cc"
427 yy84:
428         yyaccept = 2;
429         yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
430         if (yych == '\n') goto yy87;
431         if (yych == '\r') goto yy86;
432 yy85:
433 #line 168 "../src/parse/lex.re"
434         {
435                                         if (ignore_eoc)
436                                         {
437                                                 if (ignore_cnt)
438                                                 {
439                                                         out.ws("\n").wline_info (cline, get_fname ().c_str ());
440                                                 }
441                                                 ignore_eoc = false;
442                                                 ignore_cnt = 0;
443                                         }
444                                         else if (opts->target == opt_t::CODE)
445                                         {
446                                                 out.wraw(tok, tok_len ());
447                                         }
448                                         tok = pos = cur;
449                                         goto echo;
450                                 }
451 #line 452 "src/parse/lex.cc"
452 yy86:
453         yych = (YYCTYPE)*++YYCURSOR;
454         if (yych != '\n') goto yy12;
455 yy87:
456         ++YYCURSOR;
457 #line 150 "../src/parse/lex.re"
458         {
459                                         cline++;
460                                         if (ignore_eoc)
461                                         {
462                                                 if (ignore_cnt)
463                                                 {
464                                                         out.wline_info (cline, get_fname ().c_str ());
465                                                 }
466                                                 ignore_eoc = false;
467                                                 ignore_cnt = 0;
468                                         }
469                                         else if (opts->target == opt_t::CODE)
470                                         {
471                                                 out.wraw(tok, tok_len ());
472                                         }
473                                         tok = pos = cur;
474                                         goto echo;
475                                 }
476 #line 477 "src/parse/lex.cc"
477 yy89:
478         ++YYCURSOR;
479         if (YYLIMIT <= YYCURSOR) YYFILL(1);
480         yych = (YYCTYPE)*YYCURSOR;
481         if (yybm[0+yych] & 32) {
482                 goto yy89;
483         }
484         if (yych != '#') goto yy12;
485 yy91:
486         ++YYCURSOR;
487         if ((YYLIMIT - YYCURSOR) < 5) YYFILL(5);
488         yych = (YYCTYPE)*YYCURSOR;
489         if (yych <= 0x1F) {
490                 if (yych == '\t') goto yy91;
491                 goto yy12;
492         } else {
493                 if (yych <= ' ') goto yy91;
494                 if (yych != 'l') goto yy12;
495         }
496         yych = (YYCTYPE)*++YYCURSOR;
497         if (yych != 'i') goto yy12;
498         yych = (YYCTYPE)*++YYCURSOR;
499         if (yych != 'n') goto yy12;
500         yych = (YYCTYPE)*++YYCURSOR;
501         if (yych != 'e') goto yy12;
502         yych = (YYCTYPE)*++YYCURSOR;
503         if (yych <= '0') goto yy98;
504         if (yych <= '9') goto yy12;
505         goto yy98;
506 yy97:
507         ++YYCURSOR;
508         if (YYLIMIT <= YYCURSOR) YYFILL(1);
509         yych = (YYCTYPE)*YYCURSOR;
510         YYCTXMARKER = YYCURSOR;
511 yy98:
512         if (yych <= 0x1F) {
513                 if (yych == '\t') goto yy97;
514                 goto yy12;
515         } else {
516                 if (yych <= ' ') goto yy97;
517                 if (yych <= '0') goto yy12;
518                 if (yych >= ':') goto yy12;
519         }
520 yy99:
521         ++YYCURSOR;
522         if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
523         yych = (YYCTYPE)*YYCURSOR;
524         if (yybm[0+yych] & 64) {
525                 goto yy99;
526         }
527         if (yych <= '\f') {
528                 if (yych <= 0x08) goto yy12;
529                 if (yych <= '\t') goto yy101;
530                 if (yych <= '\n') goto yy103;
531                 goto yy12;
532         } else {
533                 if (yych <= '\r') goto yy105;
534                 if (yych != ' ') goto yy12;
535         }
536 yy101:
537         ++YYCURSOR;
538         if (YYLIMIT <= YYCURSOR) YYFILL(1);
539         yych = (YYCTYPE)*YYCURSOR;
540         if (yych <= 0x1F) {
541                 if (yych == '\t') goto yy101;
542                 goto yy12;
543         } else {
544                 if (yych <= ' ') goto yy101;
545                 if (yych == '"') goto yy106;
546                 goto yy12;
547         }
548 yy103:
549         ++YYCURSOR;
550         YYCURSOR = YYCTXMARKER;
551 #line 185 "../src/parse/lex.re"
552         {
553                                         set_sourceline ();
554                                         goto echo;
555                                 }
556 #line 557 "src/parse/lex.cc"
557 yy105:
558         yych = (YYCTYPE)*++YYCURSOR;
559         if (yych == '\n') goto yy103;
560         goto yy12;
561 yy106:
562         ++YYCURSOR;
563         if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
564         yych = (YYCTYPE)*YYCURSOR;
565         if (yybm[0+yych] & 128) {
566                 goto yy106;
567         }
568         if (yych <= '\n') goto yy12;
569         if (yych <= '"') goto yy109;
570         ++YYCURSOR;
571         if (YYLIMIT <= YYCURSOR) YYFILL(1);
572         yych = (YYCTYPE)*YYCURSOR;
573         if (yych == '\n') goto yy12;
574         goto yy106;
575 yy109:
576         ++YYCURSOR;
577         if ((yych = (YYCTYPE)*YYCURSOR) == '\n') goto yy103;
578         if (yych == '\r') goto yy105;
579         goto yy12;
580 }
581 #line 216 "../src/parse/lex.re"
582
583 }
584
585 int Scanner::scan()
586 {
587         uint32_t depth;
588
589 scan:
590         tchar = cur - pos;
591         tline = cline;
592         tok = cur;
593         switch (lexer_state)
594         {
595                 case LEX_NORMAL:    goto start;
596                 case LEX_FLEX_NAME: goto flex_name;
597         }
598
599 start:
600
601 #line 602 "src/parse/lex.cc"
602 {
603         YYCTYPE yych;
604         unsigned int yyaccept = 0;
605         static const unsigned char yybm[] = {
606                 128, 128, 128, 128, 128, 128, 128, 128, 
607                 128, 192,   0, 128, 128, 128, 128, 128, 
608                 128, 128, 128, 128, 128, 128, 128, 128, 
609                 128, 128, 128, 128, 128, 128, 128, 128, 
610                 192, 128,   0, 128, 128, 128, 128, 128, 
611                 128, 128, 128, 128, 128, 128, 128, 128, 
612                 176, 176, 176, 176, 176, 176, 176, 176, 
613                 176, 176, 128, 128, 128, 128, 128, 128, 
614                 128, 160, 160, 160, 160, 160, 160, 160, 
615                 160, 160, 160, 160, 160, 160, 160, 160, 
616                 160, 160, 160, 160, 160, 160, 160, 160, 
617                 160, 160, 160, 128,   0, 128, 128, 160, 
618                 128, 160, 160, 160, 160, 160, 160, 160, 
619                 160, 160, 160, 160, 160, 160, 160, 160, 
620                 160, 160, 160, 160, 160, 160, 160, 160, 
621                 160, 160, 160, 128, 128, 128, 128, 128, 
622                 128, 128, 128, 128, 128, 128, 128, 128, 
623                 128, 128, 128, 128, 128, 128, 128, 128, 
624                 128, 128, 128, 128, 128, 128, 128, 128, 
625                 128, 128, 128, 128, 128, 128, 128, 128, 
626                 128, 128, 128, 128, 128, 128, 128, 128, 
627                 128, 128, 128, 128, 128, 128, 128, 128, 
628                 128, 128, 128, 128, 128, 128, 128, 128, 
629                 128, 128, 128, 128, 128, 128, 128, 128, 
630                 128, 128, 128, 128, 128, 128, 128, 128, 
631                 128, 128, 128, 128, 128, 128, 128, 128, 
632                 128, 128, 128, 128, 128, 128, 128, 128, 
633                 128, 128, 128, 128, 128, 128, 128, 128, 
634                 128, 128, 128, 128, 128, 128, 128, 128, 
635                 128, 128, 128, 128, 128, 128, 128, 128, 
636                 128, 128, 128, 128, 128, 128, 128, 128, 
637                 128, 128, 128, 128, 128, 128, 128, 128, 
638         };
639         if ((YYLIMIT - YYCURSOR) < 6) YYFILL(6);
640         yych = (YYCTYPE)*YYCURSOR;
641         if (yych <= '.') {
642                 if (yych <= '"') {
643                         if (yych <= '\f') {
644                                 if (yych <= 0x08) goto yy112;
645                                 if (yych <= '\t') goto yy114;
646                                 if (yych <= '\n') goto yy116;
647                         } else {
648                                 if (yych <= 0x1F) {
649                                         if (yych <= '\r') goto yy118;
650                                 } else {
651                                         if (yych <= ' ') goto yy114;
652                                         if (yych >= '"') goto yy119;
653                                 }
654                         }
655                 } else {
656                         if (yych <= ')') {
657                                 if (yych <= '%') {
658                                         if (yych >= '%') goto yy121;
659                                 } else {
660                                         if (yych <= '&') goto yy112;
661                                         if (yych <= '\'') goto yy122;
662                                         goto yy124;
663                                 }
664                         } else {
665                                 if (yych <= '+') {
666                                         if (yych <= '*') goto yy126;
667                                         goto yy128;
668                                 } else {
669                                         if (yych <= ',') goto yy124;
670                                         if (yych >= '.') goto yy130;
671                                 }
672                         }
673                 }
674         } else {
675                 if (yych <= '[') {
676                         if (yych <= '<') {
677                                 if (yych <= '9') {
678                                         if (yych <= '/') goto yy132;
679                                         goto yy133;
680                                 } else {
681                                         if (yych <= ':') goto yy134;
682                                         if (yych <= ';') goto yy124;
683                                         goto yy135;
684                                 }
685                         } else {
686                                 if (yych <= '?') {
687                                         if (yych <= '>') goto yy124;
688                                         goto yy128;
689                                 } else {
690                                         if (yych <= '@') goto yy112;
691                                         if (yych <= 'Z') goto yy133;
692                                         goto yy136;
693                                 }
694                         }
695                 } else {
696                         if (yych <= 'q') {
697                                 if (yych <= '^') {
698                                         if (yych <= '\\') goto yy124;
699                                 } else {
700                                         if (yych != '`') goto yy133;
701                                 }
702                         } else {
703                                 if (yych <= 'z') {
704                                         if (yych <= 'r') goto yy138;
705                                         goto yy133;
706                                 } else {
707                                         if (yych <= '{') goto yy139;
708                                         if (yych <= '|') goto yy124;
709                                 }
710                         }
711                 }
712         }
713 yy112:
714         ++YYCURSOR;
715 yy113:
716 #line 388 "../src/parse/lex.re"
717         {
718                                         fatalf("unexpected character: '%c'", *tok);
719                                         goto scan;
720                                 }
721 #line 722 "src/parse/lex.cc"
722 yy114:
723         ++YYCURSOR;
724         yych = (YYCTYPE)*YYCURSOR;
725         goto yy220;
726 yy115:
727 #line 372 "../src/parse/lex.re"
728         {
729                                         goto scan;
730                                 }
731 #line 732 "src/parse/lex.cc"
732 yy116:
733         yyaccept = 0;
734         yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
735         if (yych <= 0x1F) {
736                 if (yych == '\t') goto yy198;
737         } else {
738                 if (yych <= ' ') goto yy198;
739                 if (yych == '#') goto yy200;
740         }
741 yy117:
742 #line 381 "../src/parse/lex.re"
743         {
744                                         if (cur == eof) return 0;
745                                         pos = cur;
746                                         cline++;
747                                         goto scan;
748                                 }
749 #line 750 "src/parse/lex.cc"
750 yy118:
751         yych = (YYCTYPE)*++YYCURSOR;
752         if (yych == '\n') goto yy197;
753         goto yy113;
754 yy119:
755         ++YYCURSOR;
756 #line 265 "../src/parse/lex.re"
757         { yylval.regexp = lex_str('"',  opts->bCaseInsensitive ||  opts->bCaseInverted); return TOKEN_REGEXP; }
758 #line 759 "src/parse/lex.cc"
759 yy121:
760         yych = (YYCTYPE)*++YYCURSOR;
761         if (yych == '}') goto yy195;
762         goto yy113;
763 yy122:
764         ++YYCURSOR;
765 #line 264 "../src/parse/lex.re"
766         { yylval.regexp = lex_str('\'', opts->bCaseInsensitive || !opts->bCaseInverted); return TOKEN_REGEXP; }
767 #line 768 "src/parse/lex.cc"
768 yy124:
769         ++YYCURSOR;
770 yy125:
771 #line 275 "../src/parse/lex.re"
772         {
773                                         return *tok;
774                                 }
775 #line 776 "src/parse/lex.cc"
776 yy126:
777         ++YYCURSOR;
778         if ((yych = (YYCTYPE)*YYCURSOR) == '/') goto yy195;
779 #line 279 "../src/parse/lex.re"
780         {
781                                         yylval.op = *tok;
782                                         return TOKEN_STAR;
783                                 }
784 #line 785 "src/parse/lex.cc"
785 yy128:
786         ++YYCURSOR;
787 #line 283 "../src/parse/lex.re"
788         {
789                                         yylval.op = *tok;
790                                         return TOKEN_CLOSE;
791                                 }
792 #line 793 "src/parse/lex.cc"
793 yy130:
794         ++YYCURSOR;
795 #line 367 "../src/parse/lex.re"
796         {
797                                         yylval.regexp = mkDot();
798                                         return TOKEN_REGEXP;
799                                 }
800 #line 801 "src/parse/lex.cc"
801 yy132:
802         yych = (YYCTYPE)*++YYCURSOR;
803         if (yych == '*') goto yy191;
804         if (yych == '/') goto yy193;
805         goto yy125;
806 yy133:
807         yych = (YYCTYPE)*++YYCURSOR;
808         YYCTXMARKER = YYCURSOR;
809         goto yy165;
810 yy134:
811         yych = (YYCTYPE)*++YYCURSOR;
812         YYCTXMARKER = YYCURSOR;
813         if (yych == '=') goto yy187;
814         goto yy113;
815 yy135:
816         yyaccept = 1;
817         yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
818         if (yych == '!') goto yy178;
819         if (yych == '>') goto yy180;
820         goto yy125;
821 yy136:
822         ++YYCURSOR;
823         if ((yych = (YYCTYPE)*YYCURSOR) == '^') goto yy176;
824 #line 266 "../src/parse/lex.re"
825         { yylval.regexp = lex_cls(false); return TOKEN_REGEXP; }
826 #line 827 "src/parse/lex.cc"
827 yy138:
828         yych = (YYCTYPE)*++YYCURSOR;
829         YYCTXMARKER = YYCURSOR;
830         if (yych == 'e') goto yy166;
831         goto yy165;
832 yy139:
833         yyaccept = 2;
834         yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
835         if (yybm[0+yych] & 16) {
836                 goto yy141;
837         }
838         if (yych <= 'Z') {
839                 if (yych == ',') goto yy146;
840                 if (yych >= 'A') goto yy144;
841         } else {
842                 if (yych <= '_') {
843                         if (yych >= '_') goto yy144;
844                 } else {
845                         if (yych <= '`') goto yy140;
846                         if (yych <= 'z') goto yy144;
847                 }
848         }
849 yy140:
850 #line 235 "../src/parse/lex.re"
851         {
852                                         depth = 1;
853                                         goto code;
854                                 }
855 #line 856 "src/parse/lex.cc"
856 yy141:
857         ++YYCURSOR;
858         if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
859         yych = (YYCTYPE)*YYCURSOR;
860         if (yybm[0+yych] & 16) {
861                 goto yy141;
862         }
863         if (yych <= '^') {
864                 if (yych <= ',') {
865                         if (yych >= ',') goto yy152;
866                 } else {
867                         if (yych <= '@') goto yy143;
868                         if (yych <= 'Z') goto yy144;
869                 }
870         } else {
871                 if (yych <= 'z') {
872                         if (yych != '`') goto yy144;
873                 } else {
874                         if (yych == '}') goto yy150;
875                 }
876         }
877 yy143:
878         YYCURSOR = YYMARKER;
879         if (yyaccept <= 1) {
880                 if (yyaccept == 0) {
881                         goto yy117;
882                 } else {
883                         goto yy125;
884                 }
885         } else {
886                 if (yyaccept == 2) {
887                         goto yy140;
888                 } else {
889                         goto yy147;
890                 }
891         }
892 yy144:
893         ++YYCURSOR;
894         if (YYLIMIT <= YYCURSOR) YYFILL(1);
895         yych = (YYCTYPE)*YYCURSOR;
896         if (yybm[0+yych] & 32) {
897                 goto yy144;
898         }
899         if (yych == '}') goto yy148;
900         goto yy143;
901 yy146:
902         ++YYCURSOR;
903 yy147:
904 #line 319 "../src/parse/lex.re"
905         {
906                                         fatal("illegal closure form, use '{n}', '{n,}', '{n,m}' where n and m are numbers");
907                                 }
908 #line 909 "src/parse/lex.cc"
909 yy148:
910         ++YYCURSOR;
911 #line 323 "../src/parse/lex.re"
912         {
913                                         if (!opts->FFlag) {
914                                                 fatal("curly braces for names only allowed with -F switch");
915                                         }
916                                         yylval.str = new std::string (tok + 1, tok_len () - 2); // -2 to omit braces
917                                         return TOKEN_ID;
918                                 }
919 #line 920 "src/parse/lex.cc"
920 yy150:
921         ++YYCURSOR;
922 #line 288 "../src/parse/lex.re"
923         {
924                                         if (!s_to_u32_unsafe (tok + 1, cur - 1, yylval.extop.min))
925                                         {
926                                                 fatal ("repetition count overflow");
927                                         }
928                                         yylval.extop.max = yylval.extop.min;
929                                         return TOKEN_CLOSESIZE;
930                                 }
931 #line 932 "src/parse/lex.cc"
932 yy152:
933         yyaccept = 3;
934         yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
935         if (yych <= '/') goto yy147;
936         if (yych <= '9') goto yy155;
937         if (yych != '}') goto yy147;
938         ++YYCURSOR;
939 #line 310 "../src/parse/lex.re"
940         {
941                                         if (!s_to_u32_unsafe (tok + 1, cur - 2, yylval.extop.min))
942                                         {
943                                                 fatal ("repetition lower bound overflow");
944                                         }
945                                         yylval.extop.max = std::numeric_limits<uint32_t>::max();
946                                         return TOKEN_CLOSESIZE;
947                                 }
948 #line 949 "src/parse/lex.cc"
949 yy155:
950         ++YYCURSOR;
951         if (YYLIMIT <= YYCURSOR) YYFILL(1);
952         yych = (YYCTYPE)*YYCURSOR;
953         if (yych <= '/') goto yy143;
954         if (yych <= '9') goto yy155;
955         if (yych != '}') goto yy143;
956         ++YYCURSOR;
957 #line 297 "../src/parse/lex.re"
958         {
959                                         const char * p = strchr (tok, ',');
960                                         if (!s_to_u32_unsafe (tok + 1, p, yylval.extop.min))
961                                         {
962                                                 fatal ("repetition lower bound overflow");
963                                         }
964                                         if (!s_to_u32_unsafe (p + 1, cur - 1, yylval.extop.max))
965                                         {
966                                                 fatal ("repetition upper bound overflow");
967                                         }
968                                         return TOKEN_CLOSESIZE;
969                                 }
970 #line 971 "src/parse/lex.cc"
971 yy159:
972         ++YYCURSOR;
973         YYCURSOR = YYCTXMARKER;
974 #line 351 "../src/parse/lex.re"
975         {
976                                         if (!opts->FFlag) {
977                                                 yylval.str = new std::string (tok, tok_len());
978                                                 return TOKEN_ID;
979                                         } else {
980                                                 RegExp *r = NULL;
981                                                 const bool casing = opts->bCaseInsensitive || opts->bCaseInverted;
982                                                 for (char *s = tok; s < cur; ++s) {
983                                                         const uint32_t c = static_cast<uint8_t>(*s);
984                                                         r = doCat(r, casing ? ichr(c) : schr(c));
985                                                 }
986                                                 yylval.regexp = r ? r : new NullOp;
987                                                 return TOKEN_REGEXP;
988                                         }
989                                 }
990 #line 991 "src/parse/lex.cc"
991 yy161:
992         yych = (YYCTYPE)*++YYCURSOR;
993         goto yy174;
994 yy162:
995         ++YYCURSOR;
996 yy163:
997         YYCURSOR = YYCTXMARKER;
998 #line 346 "../src/parse/lex.re"
999         {
1000                                         yylval.str = new std::string (tok, tok_len ());
1001                                         return TOKEN_ID;
1002                                 }
1003 #line 1004 "src/parse/lex.cc"
1004 yy164:
1005         ++YYCURSOR;
1006         if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
1007         yych = (YYCTYPE)*YYCURSOR;
1008         YYCTXMARKER = YYCURSOR;
1009 yy165:
1010         if (yych <= '9') {
1011                 if (yych <= ' ') {
1012                         if (yych == '\t') goto yy161;
1013                         if (yych <= 0x1F) goto yy159;
1014                         goto yy161;
1015                 } else {
1016                         if (yych == ',') goto yy162;
1017                         if (yych <= '/') goto yy159;
1018                         goto yy164;
1019                 }
1020         } else {
1021                 if (yych <= 'Z') {
1022                         if (yych <= '<') goto yy159;
1023                         if (yych <= '>') goto yy162;
1024                         if (yych <= '@') goto yy159;
1025                         goto yy164;
1026                 } else {
1027                         if (yych <= '_') {
1028                                 if (yych <= '^') goto yy159;
1029                                 goto yy164;
1030                         } else {
1031                                 if (yych <= '`') goto yy159;
1032                                 if (yych <= 'z') goto yy164;
1033                                 goto yy159;
1034                         }
1035                 }
1036         }
1037 yy166:
1038         yych = (YYCTYPE)*++YYCURSOR;
1039         YYCTXMARKER = YYCURSOR;
1040         if (yych != '2') goto yy165;
1041         yych = (YYCTYPE)*++YYCURSOR;
1042         YYCTXMARKER = YYCURSOR;
1043         if (yych != 'c') goto yy165;
1044         yych = (YYCTYPE)*++YYCURSOR;
1045         YYCTXMARKER = YYCURSOR;
1046         if (yych != ':') goto yy165;
1047         ++YYCURSOR;
1048 #line 331 "../src/parse/lex.re"
1049         { lex_conf (); return TOKEN_CONF; }
1050 #line 1051 "src/parse/lex.cc"
1051 yy171:
1052         ++YYCURSOR;
1053         YYCURSOR = YYCTXMARKER;
1054 #line 333 "../src/parse/lex.re"
1055         {
1056                                         yylval.str = new std::string (tok, tok_len ());
1057                                         if (opts->FFlag)
1058                                         {
1059                                                 lexer_state = LEX_FLEX_NAME;
1060                                                 return TOKEN_FID;
1061                                         }
1062                                         else
1063                                         {
1064                                                 return TOKEN_ID;
1065                                         }
1066                                 }
1067 #line 1068 "src/parse/lex.cc"
1068 yy173:
1069         ++YYCURSOR;
1070         if (YYLIMIT <= YYCURSOR) YYFILL(1);
1071         yych = (YYCTYPE)*YYCURSOR;
1072 yy174:
1073         if (yybm[0+yych] & 64) {
1074                 goto yy173;
1075         }
1076         if (yych == ',') goto yy175;
1077         if (yych <= '<') goto yy171;
1078         if (yych >= '?') goto yy171;
1079 yy175:
1080         yych = (YYCTYPE)*++YYCURSOR;
1081         goto yy163;
1082 yy176:
1083         ++YYCURSOR;
1084 #line 267 "../src/parse/lex.re"
1085         { yylval.regexp = lex_cls(true);  return TOKEN_REGEXP; }
1086 #line 1087 "src/parse/lex.cc"
1087 yy178:
1088         ++YYCURSOR;
1089 #line 272 "../src/parse/lex.re"
1090         {
1091                                         return TOKEN_SETUP;
1092                                 }
1093 #line 1094 "src/parse/lex.cc"
1094 yy180:
1095         yych = (YYCTYPE)*++YYCURSOR;
1096         YYCTXMARKER = YYCURSOR;
1097         goto yy182;
1098 yy181:
1099         ++YYCURSOR;
1100         if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
1101         yych = (YYCTYPE)*YYCURSOR;
1102 yy182:
1103         if (yych <= '9') {
1104                 if (yych <= '\t') {
1105                         if (yych <= 0x08) goto yy143;
1106                         goto yy181;
1107                 } else {
1108                         if (yych == ' ') goto yy181;
1109                         goto yy143;
1110                 }
1111         } else {
1112                 if (yych <= '=') {
1113                         if (yych <= ':') goto yy186;
1114                         if (yych <= '<') goto yy143;
1115                         goto yy185;
1116                 } else {
1117                         if (yych != '{') goto yy143;
1118                 }
1119         }
1120 yy183:
1121         ++YYCURSOR;
1122         YYCURSOR = YYCTXMARKER;
1123 #line 269 "../src/parse/lex.re"
1124         {
1125                                         return TOKEN_NOCOND;
1126                                 }
1127 #line 1128 "src/parse/lex.cc"
1128 yy185:
1129         yych = (YYCTYPE)*++YYCURSOR;
1130         if (yych == '>') goto yy183;
1131         goto yy143;
1132 yy186:
1133         yych = (YYCTYPE)*++YYCURSOR;
1134         if (yych == '=') goto yy183;
1135         goto yy143;
1136 yy187:
1137         ++YYCURSOR;
1138         if ((yych = (YYCTYPE)*YYCURSOR) == '>') goto yy189;
1139 #line 244 "../src/parse/lex.re"
1140         {
1141                                         tok += 2; /* skip ":=" */
1142                                         depth = 0;
1143                                         goto code;
1144                                 }
1145 #line 1146 "src/parse/lex.cc"
1146 yy189:
1147         ++YYCURSOR;
1148         YYCURSOR = YYCTXMARKER;
1149 #line 240 "../src/parse/lex.re"
1150         {
1151                                         return *tok;
1152                                 }
1153 #line 1154 "src/parse/lex.cc"
1154 yy191:
1155         ++YYCURSOR;
1156 #line 253 "../src/parse/lex.re"
1157         {
1158                                         depth = 1;
1159                                         goto comment;
1160                                 }
1161 #line 1162 "src/parse/lex.cc"
1162 yy193:
1163         ++YYCURSOR;
1164 #line 250 "../src/parse/lex.re"
1165         {
1166                                 goto nextLine;
1167                         }
1168 #line 1169 "src/parse/lex.cc"
1169 yy195:
1170         ++YYCURSOR;
1171 #line 259 "../src/parse/lex.re"
1172         {
1173                                         tok = cur;
1174                                         return 0;
1175                                 }
1176 #line 1177 "src/parse/lex.cc"
1177 yy197:
1178         yyaccept = 0;
1179         yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
1180         if (yych <= 0x1F) {
1181                 if (yych != '\t') goto yy117;
1182         } else {
1183                 if (yych <= ' ') goto yy198;
1184                 if (yych == '#') goto yy200;
1185                 goto yy117;
1186         }
1187 yy198:
1188         ++YYCURSOR;
1189         if (YYLIMIT <= YYCURSOR) YYFILL(1);
1190         yych = (YYCTYPE)*YYCURSOR;
1191         if (yych <= 0x1F) {
1192                 if (yych == '\t') goto yy198;
1193                 goto yy143;
1194         } else {
1195                 if (yych <= ' ') goto yy198;
1196                 if (yych != '#') goto yy143;
1197         }
1198 yy200:
1199         ++YYCURSOR;
1200         if ((YYLIMIT - YYCURSOR) < 5) YYFILL(5);
1201         yych = (YYCTYPE)*YYCURSOR;
1202         if (yych <= 0x1F) {
1203                 if (yych == '\t') goto yy200;
1204                 goto yy143;
1205         } else {
1206                 if (yych <= ' ') goto yy200;
1207                 if (yych != 'l') goto yy143;
1208         }
1209         yych = (YYCTYPE)*++YYCURSOR;
1210         if (yych != 'i') goto yy143;
1211         yych = (YYCTYPE)*++YYCURSOR;
1212         if (yych != 'n') goto yy143;
1213         yych = (YYCTYPE)*++YYCURSOR;
1214         if (yych != 'e') goto yy143;
1215         yych = (YYCTYPE)*++YYCURSOR;
1216         if (yych <= '0') goto yy207;
1217         if (yych <= '9') goto yy143;
1218         goto yy207;
1219 yy206:
1220         ++YYCURSOR;
1221         if (YYLIMIT <= YYCURSOR) YYFILL(1);
1222         yych = (YYCTYPE)*YYCURSOR;
1223         YYCTXMARKER = YYCURSOR;
1224 yy207:
1225         if (yych <= 0x1F) {
1226                 if (yych == '\t') goto yy206;
1227                 goto yy143;
1228         } else {
1229                 if (yych <= ' ') goto yy206;
1230                 if (yych <= '0') goto yy143;
1231                 if (yych >= ':') goto yy143;
1232         }
1233 yy208:
1234         ++YYCURSOR;
1235         if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
1236         yych = (YYCTYPE)*YYCURSOR;
1237         if (yych <= '\r') {
1238                 if (yych <= '\t') {
1239                         if (yych <= 0x08) goto yy143;
1240                 } else {
1241                         if (yych <= '\n') goto yy212;
1242                         if (yych <= '\f') goto yy143;
1243                         goto yy214;
1244                 }
1245         } else {
1246                 if (yych <= ' ') {
1247                         if (yych <= 0x1F) goto yy143;
1248                 } else {
1249                         if (yych <= '/') goto yy143;
1250                         if (yych <= '9') goto yy208;
1251                         goto yy143;
1252                 }
1253         }
1254 yy210:
1255         ++YYCURSOR;
1256         if (YYLIMIT <= YYCURSOR) YYFILL(1);
1257         yych = (YYCTYPE)*YYCURSOR;
1258         if (yych <= 0x1F) {
1259                 if (yych == '\t') goto yy210;
1260                 goto yy143;
1261         } else {
1262                 if (yych <= ' ') goto yy210;
1263                 if (yych == '"') goto yy215;
1264                 goto yy143;
1265         }
1266 yy212:
1267         ++YYCURSOR;
1268         YYCURSOR = YYCTXMARKER;
1269 #line 376 "../src/parse/lex.re"
1270         {
1271                                         set_sourceline ();
1272                                         goto scan;
1273                                 }
1274 #line 1275 "src/parse/lex.cc"
1275 yy214:
1276         yych = (YYCTYPE)*++YYCURSOR;
1277         if (yych == '\n') goto yy212;
1278         goto yy143;
1279 yy215:
1280         ++YYCURSOR;
1281         if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
1282         yych = (YYCTYPE)*YYCURSOR;
1283         if (yybm[0+yych] & 128) {
1284                 goto yy215;
1285         }
1286         if (yych <= '\n') goto yy143;
1287         if (yych <= '"') goto yy218;
1288         ++YYCURSOR;
1289         if (YYLIMIT <= YYCURSOR) YYFILL(1);
1290         yych = (YYCTYPE)*YYCURSOR;
1291         if (yych == '\n') goto yy143;
1292         goto yy215;
1293 yy218:
1294         yych = (YYCTYPE)*++YYCURSOR;
1295         if (yych == '\n') goto yy212;
1296         if (yych == '\r') goto yy214;
1297         goto yy143;
1298 yy219:
1299         ++YYCURSOR;
1300         if (YYLIMIT <= YYCURSOR) YYFILL(1);
1301         yych = (YYCTYPE)*YYCURSOR;
1302 yy220:
1303         if (yych == '\t') goto yy219;
1304         if (yych == ' ') goto yy219;
1305         goto yy115;
1306 }
1307 #line 392 "../src/parse/lex.re"
1308
1309
1310 flex_name:
1311
1312 #line 1313 "src/parse/lex.cc"
1313 {
1314         YYCTYPE yych;
1315         if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
1316         yych = (YYCTYPE)*YYCURSOR;
1317         if (yych == '\n') goto yy225;
1318         if (yych == '\r') goto yy227;
1319         ++YYCURSOR;
1320 yy224:
1321 #line 403 "../src/parse/lex.re"
1322         {
1323                 YYCURSOR = tok;
1324                 goto start;
1325         }
1326 #line 1327 "src/parse/lex.cc"
1327 yy225:
1328         ++YYCURSOR;
1329 yy226:
1330 #line 397 "../src/parse/lex.re"
1331         {
1332                 YYCURSOR = tok;
1333                 lexer_state = LEX_NORMAL;
1334                 return TOKEN_FID_END;
1335         }
1336 #line 1337 "src/parse/lex.cc"
1337 yy227:
1338         yych = (YYCTYPE)*++YYCURSOR;
1339         if (yych != '\n') goto yy224;
1340         ++YYCURSOR;
1341         yych = (YYCTYPE)*YYCURSOR;
1342         goto yy226;
1343 }
1344 #line 407 "../src/parse/lex.re"
1345
1346
1347 code:
1348
1349 #line 1350 "src/parse/lex.cc"
1350 {
1351         YYCTYPE yych;
1352         unsigned int yyaccept = 0;
1353         static const unsigned char yybm[] = {
1354                  48,  48,  48,  48,  48,  48,  48,  48, 
1355                  48, 112,   0,  48,  48,  48,  48,  48, 
1356                  48,  48,  48,  48,  48,  48,  48,  48, 
1357                  48,  48,  48,  48,  48,  48,  48,  48, 
1358                 112,  48,  16,  48,  48,  48,  48,  32, 
1359                  48,  48,  48,  48,  48,  48,  48,  48, 
1360                 176, 176, 176, 176, 176, 176, 176, 176, 
1361                 176, 176,  48,  48,  48,  48,  48,  48, 
1362                  48,  48,  48,  48,  48,  48,  48,  48, 
1363                  48,  48,  48,  48,  48,  48,  48,  48, 
1364                  48,  48,  48,  48,  48,  48,  48,  48, 
1365                  48,  48,  48,  48,   0,  48,  48,  48, 
1366                  48,  48,  48,  48,  48,  48,  48,  48, 
1367                  48,  48,  48,  48,  48,  48,  48,  48, 
1368                  48,  48,  48,  48,  48,  48,  48,  48, 
1369                  48,  48,  48,  48,  48,  48,  48,  48, 
1370                  48,  48,  48,  48,  48,  48,  48,  48, 
1371                  48,  48,  48,  48,  48,  48,  48,  48, 
1372                  48,  48,  48,  48,  48,  48,  48,  48, 
1373                  48,  48,  48,  48,  48,  48,  48,  48, 
1374                  48,  48,  48,  48,  48,  48,  48,  48, 
1375                  48,  48,  48,  48,  48,  48,  48,  48, 
1376                  48,  48,  48,  48,  48,  48,  48,  48, 
1377                  48,  48,  48,  48,  48,  48,  48,  48, 
1378                  48,  48,  48,  48,  48,  48,  48,  48, 
1379                  48,  48,  48,  48,  48,  48,  48,  48, 
1380                  48,  48,  48,  48,  48,  48,  48,  48, 
1381                  48,  48,  48,  48,  48,  48,  48,  48, 
1382                  48,  48,  48,  48,  48,  48,  48,  48, 
1383                  48,  48,  48,  48,  48,  48,  48,  48, 
1384                  48,  48,  48,  48,  48,  48,  48,  48, 
1385                  48,  48,  48,  48,  48,  48,  48,  48, 
1386         };
1387         if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
1388         yych = (YYCTYPE)*YYCURSOR;
1389         if (yych <= '&') {
1390                 if (yych <= '\n') {
1391                         if (yych <= 0x00) goto yy231;
1392                         if (yych <= '\t') goto yy233;
1393                         goto yy235;
1394                 } else {
1395                         if (yych == '"') goto yy237;
1396                         goto yy233;
1397                 }
1398         } else {
1399                 if (yych <= '{') {
1400                         if (yych <= '\'') goto yy238;
1401                         if (yych <= 'z') goto yy233;
1402                         goto yy239;
1403                 } else {
1404                         if (yych == '}') goto yy241;
1405                         goto yy233;
1406                 }
1407         }
1408 yy231:
1409         ++YYCURSOR;
1410 #line 470 "../src/parse/lex.re"
1411         {
1412                                         if (cur == eof)
1413                                         {
1414                                                 if (depth)
1415                                                 {
1416                                                         fatal("missing '}'");
1417                                                 }
1418                                                 return 0;
1419                                         }
1420                                         goto code;
1421                                 }
1422 #line 1423 "src/parse/lex.cc"
1423 yy233:
1424         ++YYCURSOR;
1425 yy234:
1426 #line 484 "../src/parse/lex.re"
1427         {
1428                                         goto code;
1429                                 }
1430 #line 1431 "src/parse/lex.cc"
1431 yy235:
1432         yyaccept = 0;
1433         yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
1434         YYCTXMARKER = YYCURSOR;
1435         if (yych <= '\r') {
1436                 if (yych <= '\t') {
1437                         if (yych >= '\t') goto yy252;
1438                 } else {
1439                         if (yych <= '\n') goto yy254;
1440                         if (yych >= '\r') goto yy254;
1441                 }
1442         } else {
1443                 if (yych <= ' ') {
1444                         if (yych >= ' ') goto yy252;
1445                 } else {
1446                         if (yych == '#') goto yy255;
1447                 }
1448         }
1449 yy236:
1450 #line 451 "../src/parse/lex.re"
1451         {
1452                                         if (depth == 0)
1453                                         {
1454                                                 tok += strspn(tok, " \t\r\n");
1455                                                 while (cur > tok && strchr(" \t\r\n", cur[-1]))
1456                                                 {
1457                                                         --cur;
1458                                                 }
1459                                                 yylval.code = new Code (tok, tok_len (), get_fname (), tline);
1460                                                 return TOKEN_CODE;
1461                                         }
1462                                         else if (cur == eof)
1463                                         {
1464                                                 fatal("missing '}'");
1465                                         }
1466                                         pos = cur;
1467                                         cline++;
1468                                         goto code;
1469                                 }
1470 #line 1471 "src/parse/lex.cc"
1471 yy237:
1472         yyaccept = 1;
1473         yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
1474         if (yych == '\n') goto yy234;
1475         goto yy250;
1476 yy238:
1477         yyaccept = 1;
1478         yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
1479         if (yych == '\n') goto yy234;
1480         goto yy244;
1481 yy239:
1482         ++YYCURSOR;
1483 #line 423 "../src/parse/lex.re"
1484         {
1485                                         if (depth == 0)
1486                                         {
1487                                                 fatal("Curly braces are not allowed after ':='");
1488                                         }
1489                                         else
1490                                         {
1491                                                 ++depth;
1492                                         }
1493                                         goto code;
1494                                 }
1495 #line 1496 "src/parse/lex.cc"
1496 yy241:
1497         ++YYCURSOR;
1498 #line 411 "../src/parse/lex.re"
1499         {
1500                                         if (depth == 0)
1501                                         {
1502                                                 fatal("Curly braces are not allowed after ':='");
1503                                         }
1504                                         else if (--depth == 0)
1505                                         {
1506                                                 yylval.code = new Code (tok, tok_len (), get_fname (), tline);
1507                                                 return TOKEN_CODE;
1508                                         }
1509                                         goto code;
1510                                 }
1511 #line 1512 "src/parse/lex.cc"
1512 yy243:
1513         ++YYCURSOR;
1514         if (YYLIMIT <= YYCURSOR) YYFILL(1);
1515         yych = (YYCTYPE)*YYCURSOR;
1516 yy244:
1517         if (yybm[0+yych] & 16) {
1518                 goto yy243;
1519         }
1520         if (yych <= '\n') goto yy245;
1521         if (yych <= '\'') goto yy247;
1522         goto yy246;
1523 yy245:
1524         YYCURSOR = YYMARKER;
1525         if (yyaccept <= 1) {
1526                 if (yyaccept == 0) {
1527                         goto yy236;
1528                 } else {
1529                         goto yy234;
1530                 }
1531         } else {
1532                 goto yy253;
1533         }
1534 yy246:
1535         ++YYCURSOR;
1536         if (YYLIMIT <= YYCURSOR) YYFILL(1);
1537         yych = (YYCTYPE)*YYCURSOR;
1538         if (yych == '\n') goto yy245;
1539         goto yy243;
1540 yy247:
1541         ++YYCURSOR;
1542 #line 481 "../src/parse/lex.re"
1543         {
1544                                         goto code;
1545                                 }
1546 #line 1547 "src/parse/lex.cc"
1547 yy249:
1548         ++YYCURSOR;
1549         if (YYLIMIT <= YYCURSOR) YYFILL(1);
1550         yych = (YYCTYPE)*YYCURSOR;
1551 yy250:
1552         if (yybm[0+yych] & 32) {
1553                 goto yy249;
1554         }
1555         if (yych <= '\n') goto yy245;
1556         if (yych <= '"') goto yy247;
1557         ++YYCURSOR;
1558         if (YYLIMIT <= YYCURSOR) YYFILL(1);
1559         yych = (YYCTYPE)*YYCURSOR;
1560         if (yych == '\n') goto yy245;
1561         goto yy249;
1562 yy252:
1563         yyaccept = 2;
1564         yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
1565         if (yych <= 0x1F) {
1566                 if (yych == '\t') goto yy274;
1567         } else {
1568                 if (yych <= ' ') goto yy274;
1569                 if (yych == '#') goto yy255;
1570         }
1571 yy253:
1572         YYCURSOR = YYCTXMARKER;
1573 #line 438 "../src/parse/lex.re"
1574         {
1575                                         if (depth == 0)
1576                                         {
1577                                                 goto code;
1578                                         }
1579                                         else if (cur == eof)
1580                                         {
1581                                                 fatal("missing '}'");
1582                                         }
1583                                         pos = cur;
1584                                         cline++;
1585                                         goto code;
1586                                 }
1587 #line 1588 "src/parse/lex.cc"
1588 yy254:
1589         yych = (YYCTYPE)*++YYCURSOR;
1590         goto yy253;
1591 yy255:
1592         ++YYCURSOR;
1593         if ((YYLIMIT - YYCURSOR) < 5) YYFILL(5);
1594         yych = (YYCTYPE)*YYCURSOR;
1595         if (yybm[0+yych] & 64) {
1596                 goto yy255;
1597         }
1598         if (yych != 'l') goto yy245;
1599         yych = (YYCTYPE)*++YYCURSOR;
1600         if (yych != 'i') goto yy245;
1601         yych = (YYCTYPE)*++YYCURSOR;
1602         if (yych != 'n') goto yy245;
1603         yych = (YYCTYPE)*++YYCURSOR;
1604         if (yych != 'e') goto yy245;
1605         yych = (YYCTYPE)*++YYCURSOR;
1606         if (yych <= '0') goto yy262;
1607         if (yych <= '9') goto yy245;
1608         goto yy262;
1609 yy261:
1610         ++YYCURSOR;
1611         if (YYLIMIT <= YYCURSOR) YYFILL(1);
1612         yych = (YYCTYPE)*YYCURSOR;
1613         YYCTXMARKER = YYCURSOR;
1614 yy262:
1615         if (yych <= 0x1F) {
1616                 if (yych == '\t') goto yy261;
1617                 goto yy245;
1618         } else {
1619                 if (yych <= ' ') goto yy261;
1620                 if (yych <= '0') goto yy245;
1621                 if (yych >= ':') goto yy245;
1622         }
1623 yy263:
1624         ++YYCURSOR;
1625         if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
1626         yych = (YYCTYPE)*YYCURSOR;
1627         if (yybm[0+yych] & 128) {
1628                 goto yy263;
1629         }
1630         if (yych <= '\f') {
1631                 if (yych <= 0x08) goto yy245;
1632                 if (yych <= '\t') goto yy265;
1633                 if (yych <= '\n') goto yy267;
1634                 goto yy245;
1635         } else {
1636                 if (yych <= '\r') goto yy269;
1637                 if (yych != ' ') goto yy245;
1638         }
1639 yy265:
1640         ++YYCURSOR;
1641         if (YYLIMIT <= YYCURSOR) YYFILL(1);
1642         yych = (YYCTYPE)*YYCURSOR;
1643         if (yych <= 0x1F) {
1644                 if (yych == '\t') goto yy265;
1645                 goto yy245;
1646         } else {
1647                 if (yych <= ' ') goto yy265;
1648                 if (yych == '"') goto yy270;
1649                 goto yy245;
1650         }
1651 yy267:
1652         ++YYCURSOR;
1653         YYCURSOR = YYCTXMARKER;
1654 #line 434 "../src/parse/lex.re"
1655         {
1656                                         set_sourceline ();
1657                                         goto code;
1658                                 }
1659 #line 1660 "src/parse/lex.cc"
1660 yy269:
1661         yych = (YYCTYPE)*++YYCURSOR;
1662         if (yych == '\n') goto yy267;
1663         goto yy245;
1664 yy270:
1665         ++YYCURSOR;
1666         if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
1667         yych = (YYCTYPE)*YYCURSOR;
1668         if (yych <= '!') {
1669                 if (yych == '\n') goto yy245;
1670                 goto yy270;
1671         } else {
1672                 if (yych <= '"') goto yy273;
1673                 if (yych != '\\') goto yy270;
1674         }
1675         ++YYCURSOR;
1676         if (YYLIMIT <= YYCURSOR) YYFILL(1);
1677         yych = (YYCTYPE)*YYCURSOR;
1678         if (yych == '\n') goto yy245;
1679         goto yy270;
1680 yy273:
1681         yych = (YYCTYPE)*++YYCURSOR;
1682         if (yych == '\n') goto yy267;
1683         if (yych == '\r') goto yy269;
1684         goto yy245;
1685 yy274:
1686         ++YYCURSOR;
1687         if (YYLIMIT <= YYCURSOR) YYFILL(1);
1688         yych = (YYCTYPE)*YYCURSOR;
1689         if (yych <= 0x1F) {
1690                 if (yych == '\t') goto yy274;
1691                 goto yy245;
1692         } else {
1693                 if (yych <= ' ') goto yy274;
1694                 if (yych == '#') goto yy255;
1695                 goto yy245;
1696         }
1697 }
1698 #line 487 "../src/parse/lex.re"
1699
1700
1701 comment:
1702
1703 #line 1704 "src/parse/lex.cc"
1704 {
1705         YYCTYPE yych;
1706         static const unsigned char yybm[] = {
1707                 128, 128, 128, 128, 128, 128, 128, 128, 
1708                 128, 160,   0, 128, 128, 128, 128, 128, 
1709                 128, 128, 128, 128, 128, 128, 128, 128, 
1710                 128, 128, 128, 128, 128, 128, 128, 128, 
1711                 160, 128,   0, 128, 128, 128, 128, 128, 
1712                 128, 128, 128, 128, 128, 128, 128, 128, 
1713                 192, 192, 192, 192, 192, 192, 192, 192, 
1714                 192, 192, 128, 128, 128, 128, 128, 128, 
1715                 128, 128, 128, 128, 128, 128, 128, 128, 
1716                 128, 128, 128, 128, 128, 128, 128, 128, 
1717                 128, 128, 128, 128, 128, 128, 128, 128, 
1718                 128, 128, 128, 128,   0, 128, 128, 128, 
1719                 128, 128, 128, 128, 128, 128, 128, 128, 
1720                 128, 128, 128, 128, 128, 128, 128, 128, 
1721                 128, 128, 128, 128, 128, 128, 128, 128, 
1722                 128, 128, 128, 128, 128, 128, 128, 128, 
1723                 128, 128, 128, 128, 128, 128, 128, 128, 
1724                 128, 128, 128, 128, 128, 128, 128, 128, 
1725                 128, 128, 128, 128, 128, 128, 128, 128, 
1726                 128, 128, 128, 128, 128, 128, 128, 128, 
1727                 128, 128, 128, 128, 128, 128, 128, 128, 
1728                 128, 128, 128, 128, 128, 128, 128, 128, 
1729                 128, 128, 128, 128, 128, 128, 128, 128, 
1730                 128, 128, 128, 128, 128, 128, 128, 128, 
1731                 128, 128, 128, 128, 128, 128, 128, 128, 
1732                 128, 128, 128, 128, 128, 128, 128, 128, 
1733                 128, 128, 128, 128, 128, 128, 128, 128, 
1734                 128, 128, 128, 128, 128, 128, 128, 128, 
1735                 128, 128, 128, 128, 128, 128, 128, 128, 
1736                 128, 128, 128, 128, 128, 128, 128, 128, 
1737                 128, 128, 128, 128, 128, 128, 128, 128, 
1738                 128, 128, 128, 128, 128, 128, 128, 128, 
1739         };
1740         if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
1741         yych = (YYCTYPE)*YYCURSOR;
1742         if (yych <= ')') {
1743                 if (yych == '\n') goto yy280;
1744         } else {
1745                 if (yych <= '*') goto yy282;
1746                 if (yych == '/') goto yy283;
1747         }
1748         ++YYCURSOR;
1749 yy279:
1750 #line 519 "../src/parse/lex.re"
1751         {
1752                                         if (cur == eof)
1753                                         {
1754                                                 return 0;
1755                                         }
1756                                         goto comment;
1757                                 }
1758 #line 1759 "src/parse/lex.cc"
1759 yy280:
1760         yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
1761         if (yybm[0+yych] & 32) {
1762                 goto yy288;
1763         }
1764         if (yych == '#') goto yy291;
1765 yy281:
1766 #line 510 "../src/parse/lex.re"
1767         {
1768                                         if (cur == eof)
1769                                         {
1770                                                 return 0;
1771                                         }
1772                                         tok = pos = cur;
1773                                         cline++;
1774                                         goto comment;
1775                                 }
1776 #line 1777 "src/parse/lex.cc"
1777 yy282:
1778         yych = (YYCTYPE)*++YYCURSOR;
1779         if (yych == '/') goto yy286;
1780         goto yy279;
1781 yy283:
1782         yych = (YYCTYPE)*++YYCURSOR;
1783         if (yych != '*') goto yy279;
1784         ++YYCURSOR;
1785 #line 501 "../src/parse/lex.re"
1786         {
1787                                         ++depth;
1788                                         fatal("ambiguous /* found");
1789                                         goto comment;
1790                                 }
1791 #line 1792 "src/parse/lex.cc"
1792 yy286:
1793         ++YYCURSOR;
1794 #line 491 "../src/parse/lex.re"
1795         {
1796                                         if (--depth == 0)
1797                                         {
1798                                                 goto scan;
1799                                         }
1800                                         else
1801                                         {
1802                                                 goto comment;
1803                                         }
1804                                 }
1805 #line 1806 "src/parse/lex.cc"
1806 yy288:
1807         ++YYCURSOR;
1808         if (YYLIMIT <= YYCURSOR) YYFILL(1);
1809         yych = (YYCTYPE)*YYCURSOR;
1810         if (yybm[0+yych] & 32) {
1811                 goto yy288;
1812         }
1813         if (yych == '#') goto yy291;
1814 yy290:
1815         YYCURSOR = YYMARKER;
1816         goto yy281;
1817 yy291:
1818         ++YYCURSOR;
1819         if ((YYLIMIT - YYCURSOR) < 5) YYFILL(5);
1820         yych = (YYCTYPE)*YYCURSOR;
1821         if (yych <= 0x1F) {
1822                 if (yych == '\t') goto yy291;
1823                 goto yy290;
1824         } else {
1825                 if (yych <= ' ') goto yy291;
1826                 if (yych != 'l') goto yy290;
1827         }
1828         yych = (YYCTYPE)*++YYCURSOR;
1829         if (yych != 'i') goto yy290;
1830         yych = (YYCTYPE)*++YYCURSOR;
1831         if (yych != 'n') goto yy290;
1832         yych = (YYCTYPE)*++YYCURSOR;
1833         if (yych != 'e') goto yy290;
1834         yych = (YYCTYPE)*++YYCURSOR;
1835         if (yych <= '0') goto yy298;
1836         if (yych <= '9') goto yy290;
1837         goto yy298;
1838 yy297:
1839         ++YYCURSOR;
1840         if (YYLIMIT <= YYCURSOR) YYFILL(1);
1841         yych = (YYCTYPE)*YYCURSOR;
1842         YYCTXMARKER = YYCURSOR;
1843 yy298:
1844         if (yych <= 0x1F) {
1845                 if (yych == '\t') goto yy297;
1846                 goto yy290;
1847         } else {
1848                 if (yych <= ' ') goto yy297;
1849                 if (yych <= '0') goto yy290;
1850                 if (yych >= ':') goto yy290;
1851         }
1852 yy299:
1853         ++YYCURSOR;
1854         if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
1855         yych = (YYCTYPE)*YYCURSOR;
1856         if (yybm[0+yych] & 64) {
1857                 goto yy299;
1858         }
1859         if (yych <= '\f') {
1860                 if (yych <= 0x08) goto yy290;
1861                 if (yych <= '\t') goto yy301;
1862                 if (yych <= '\n') goto yy303;
1863                 goto yy290;
1864         } else {
1865                 if (yych <= '\r') goto yy305;
1866                 if (yych != ' ') goto yy290;
1867         }
1868 yy301:
1869         ++YYCURSOR;
1870         if (YYLIMIT <= YYCURSOR) YYFILL(1);
1871         yych = (YYCTYPE)*YYCURSOR;
1872         if (yych <= 0x1F) {
1873                 if (yych == '\t') goto yy301;
1874                 goto yy290;
1875         } else {
1876                 if (yych <= ' ') goto yy301;
1877                 if (yych == '"') goto yy306;
1878                 goto yy290;
1879         }
1880 yy303:
1881         ++YYCURSOR;
1882         YYCURSOR = YYCTXMARKER;
1883 #line 506 "../src/parse/lex.re"
1884         {
1885                                         set_sourceline ();
1886                                         goto comment;
1887                                 }
1888 #line 1889 "src/parse/lex.cc"
1889 yy305:
1890         yych = (YYCTYPE)*++YYCURSOR;
1891         if (yych == '\n') goto yy303;
1892         goto yy290;
1893 yy306:
1894         ++YYCURSOR;
1895         if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
1896         yych = (YYCTYPE)*YYCURSOR;
1897         if (yybm[0+yych] & 128) {
1898                 goto yy306;
1899         }
1900         if (yych <= '\n') goto yy290;
1901         if (yych <= '"') goto yy309;
1902         ++YYCURSOR;
1903         if (YYLIMIT <= YYCURSOR) YYFILL(1);
1904         yych = (YYCTYPE)*YYCURSOR;
1905         if (yych == '\n') goto yy290;
1906         goto yy306;
1907 yy309:
1908         ++YYCURSOR;
1909         if ((yych = (YYCTYPE)*YYCURSOR) == '\n') goto yy303;
1910         if (yych == '\r') goto yy305;
1911         goto yy290;
1912 }
1913 #line 526 "../src/parse/lex.re"
1914
1915
1916 nextLine:
1917
1918 #line 1919 "src/parse/lex.cc"
1919 {
1920         YYCTYPE yych;
1921         if (YYLIMIT <= YYCURSOR) YYFILL(1);
1922         yych = (YYCTYPE)*YYCURSOR;
1923         if (yych == '\n') goto yy314;
1924         ++YYCURSOR;
1925 #line 537 "../src/parse/lex.re"
1926         {  if(cur == eof) {
1927                   return 0;
1928                }
1929                goto nextLine;
1930             }
1931 #line 1932 "src/parse/lex.cc"
1932 yy314:
1933         ++YYCURSOR;
1934 #line 530 "../src/parse/lex.re"
1935         { if(cur == eof) {
1936                   return 0;
1937                }
1938                tok = pos = cur;
1939                cline++;
1940                goto scan;
1941             }
1942 #line 1943 "src/parse/lex.cc"
1943 }
1944 #line 542 "../src/parse/lex.re"
1945
1946 }
1947
1948 static void escape (std::string & dest, const std::string & src)
1949 {
1950         dest = src;
1951         size_t l = dest.length();
1952         for (size_t p = 0; p < l; ++p)
1953         {
1954                 if (dest[p] == '\\')
1955                 {
1956                         dest.insert(++p, "\\");
1957                         ++l;
1958                 }
1959         }
1960 }
1961
1962 RegExp *Scanner::lex_cls(bool neg)
1963 {
1964         Range *r = NULL, *s;
1965         uint32_t u, l;
1966 fst:
1967         
1968 #line 1969 "src/parse/lex.cc"
1969 {
1970         YYCTYPE yych;
1971         if (YYLIMIT <= YYCURSOR) YYFILL(1);
1972         yych = (YYCTYPE)*YYCURSOR;
1973         if (yych == ']') goto yy319;
1974 #line 566 "../src/parse/lex.re"
1975         { l = lex_cls_chr(); goto snd; }
1976 #line 1977 "src/parse/lex.cc"
1977 yy319:
1978         ++YYCURSOR;
1979 #line 565 "../src/parse/lex.re"
1980         { goto end; }
1981 #line 1982 "src/parse/lex.cc"
1982 }
1983 #line 567 "../src/parse/lex.re"
1984
1985 snd:
1986         
1987 #line 1988 "src/parse/lex.cc"
1988 {
1989         YYCTYPE yych;
1990         if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
1991         yych = (YYCTYPE)*(YYMARKER = YYCURSOR);
1992         if (yych == '-') goto yy324;
1993 yy323:
1994 #line 570 "../src/parse/lex.re"
1995         { u = l; goto add; }
1996 #line 1997 "src/parse/lex.cc"
1997 yy324:
1998         yych = (YYCTYPE)*++YYCURSOR;
1999         YYCTXMARKER = YYCURSOR;
2000         if (yych != ']') goto yy326;
2001         YYCURSOR = YYMARKER;
2002         goto yy323;
2003 yy326:
2004         ++YYCURSOR;
2005         YYCURSOR = YYCTXMARKER;
2006 #line 571 "../src/parse/lex.re"
2007         {
2008                         u = lex_cls_chr();
2009                         if (l > u) {
2010                                 warn.swapped_range(get_line(), l, u);
2011                                 std::swap(l, u);
2012                         }
2013                         goto add;
2014                 }
2015 #line 2016 "src/parse/lex.cc"
2016 }
2017 #line 579 "../src/parse/lex.re"
2018
2019 add:
2020         if (!(s = opts->encoding.encodeRange(l, u))) {
2021                 fatalf ("Bad code point range: '0x%X - 0x%X'", l, u);
2022         }
2023         r = Range::add(r, s);
2024         goto fst;
2025 end:
2026         if (neg) {
2027                 r = Range::sub(opts->encoding.fullRange(), r);
2028         }
2029         return cls(r);
2030 }
2031
2032 uint32_t Scanner::lex_cls_chr()
2033 {
2034         tok = cur;
2035         
2036 #line 2037 "src/parse/lex.cc"
2037 {
2038         YYCTYPE yych;
2039         unsigned int yyaccept = 0;
2040         if ((YYLIMIT - YYCURSOR) < 10) YYFILL(10);
2041         yych = (YYCTYPE)*YYCURSOR;
2042         if (yych == '\n') goto yy332;
2043         if (yych == '\\') goto yy334;
2044         ++YYCURSOR;
2045 #line 602 "../src/parse/lex.re"
2046         { return static_cast<uint8_t>(tok[0]); }
2047 #line 2048 "src/parse/lex.cc"
2048 yy332:
2049         ++YYCURSOR;
2050 #line 597 "../src/parse/lex.re"
2051         { fatal ((tok - pos) - tchar, "syntax error"); }
2052 #line 2053 "src/parse/lex.cc"
2053 yy334:
2054         ++YYCURSOR;
2055         if ((yych = (YYCTYPE)*YYCURSOR) <= '`') {
2056                 if (yych <= '7') {
2057                         if (yych <= ',') {
2058                                 if (yych != '\n') goto yy336;
2059                         } else {
2060                                 if (yych <= '-') goto yy338;
2061                                 if (yych <= '/') goto yy336;
2062                                 if (yych <= '3') goto yy340;
2063                                 goto yy342;
2064                         }
2065                 } else {
2066                         if (yych <= 'X') {
2067                                 if (yych == 'U') goto yy343;
2068                                 if (yych <= 'W') goto yy336;
2069                                 goto yy345;
2070                         } else {
2071                                 if (yych <= '[') goto yy336;
2072                                 if (yych <= '\\') goto yy346;
2073                                 if (yych <= ']') goto yy348;
2074                                 goto yy336;
2075                         }
2076                 }
2077         } else {
2078                 if (yych <= 'q') {
2079                         if (yych <= 'e') {
2080                                 if (yych <= 'a') goto yy350;
2081                                 if (yych <= 'b') goto yy352;
2082                                 goto yy336;
2083                         } else {
2084                                 if (yych <= 'f') goto yy354;
2085                                 if (yych == 'n') goto yy356;
2086                                 goto yy336;
2087                         }
2088                 } else {
2089                         if (yych <= 'u') {
2090                                 if (yych <= 'r') goto yy358;
2091                                 if (yych <= 's') goto yy336;
2092                                 if (yych <= 't') goto yy360;
2093                                 goto yy345;
2094                         } else {
2095                                 if (yych <= 'v') goto yy362;
2096                                 if (yych == 'x') goto yy364;
2097                                 goto yy336;
2098                         }
2099                 }
2100         }
2101 #line 600 "../src/parse/lex.re"
2102         { fatal ((tok - pos) - tchar, "syntax error in escape sequence"); }
2103 #line 2104 "src/parse/lex.cc"
2104 yy336:
2105         ++YYCURSOR;
2106 #line 615 "../src/parse/lex.re"
2107         {
2108                         warn.useless_escape(tline, tok - pos, tok[1]);
2109                         return static_cast<uint8_t>(tok[1]);
2110                 }
2111 #line 2112 "src/parse/lex.cc"
2112 yy338:
2113         ++YYCURSOR;
2114 #line 613 "../src/parse/lex.re"
2115         { return static_cast<uint8_t>('-'); }
2116 #line 2117 "src/parse/lex.cc"
2117 yy340:
2118         yyaccept = 0;
2119         yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
2120         if (yych <= '/') goto yy341;
2121         if (yych <= '7') goto yy379;
2122 yy341:
2123 #line 599 "../src/parse/lex.re"
2124         { fatal ((tok - pos) - tchar, "syntax error in octal escape sequence"); }
2125 #line 2126 "src/parse/lex.cc"
2126 yy342:
2127         yych = (YYCTYPE)*++YYCURSOR;
2128         goto yy341;
2129 yy343:
2130         yyaccept = 1;
2131         yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
2132         if (yych <= '@') {
2133                 if (yych <= '/') goto yy344;
2134                 if (yych <= '9') goto yy372;
2135         } else {
2136                 if (yych <= 'F') goto yy372;
2137                 if (yych <= '`') goto yy344;
2138                 if (yych <= 'f') goto yy372;
2139         }
2140 yy344:
2141 #line 598 "../src/parse/lex.re"
2142         { fatal ((tok - pos) - tchar, "syntax error in hexadecimal escape sequence"); }
2143 #line 2144 "src/parse/lex.cc"
2144 yy345:
2145         yyaccept = 1;
2146         yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
2147         if (yych <= '@') {
2148                 if (yych <= '/') goto yy344;
2149                 if (yych <= '9') goto yy369;
2150                 goto yy344;
2151         } else {
2152                 if (yych <= 'F') goto yy369;
2153                 if (yych <= '`') goto yy344;
2154                 if (yych <= 'f') goto yy369;
2155                 goto yy344;
2156         }
2157 yy346:
2158         ++YYCURSOR;
2159 #line 612 "../src/parse/lex.re"
2160         { return static_cast<uint8_t>('\\'); }
2161 #line 2162 "src/parse/lex.cc"
2162 yy348:
2163         ++YYCURSOR;
2164 #line 614 "../src/parse/lex.re"
2165         { return static_cast<uint8_t>(']'); }
2166 #line 2167 "src/parse/lex.cc"
2167 yy350:
2168         ++YYCURSOR;
2169 #line 605 "../src/parse/lex.re"
2170         { return static_cast<uint8_t>('\a'); }
2171 #line 2172 "src/parse/lex.cc"
2172 yy352:
2173         ++YYCURSOR;
2174 #line 606 "../src/parse/lex.re"
2175         { return static_cast<uint8_t>('\b'); }
2176 #line 2177 "src/parse/lex.cc"
2177 yy354:
2178         ++YYCURSOR;
2179 #line 607 "../src/parse/lex.re"
2180         { return static_cast<uint8_t>('\f'); }
2181 #line 2182 "src/parse/lex.cc"
2182 yy356:
2183         ++YYCURSOR;
2184 #line 608 "../src/parse/lex.re"
2185         { return static_cast<uint8_t>('\n'); }
2186 #line 2187 "src/parse/lex.cc"
2187 yy358:
2188         ++YYCURSOR;
2189 #line 609 "../src/parse/lex.re"
2190         { return static_cast<uint8_t>('\r'); }
2191 #line 2192 "src/parse/lex.cc"
2192 yy360:
2193         ++YYCURSOR;
2194 #line 610 "../src/parse/lex.re"
2195         { return static_cast<uint8_t>('\t'); }
2196 #line 2197 "src/parse/lex.cc"
2197 yy362:
2198         ++YYCURSOR;
2199 #line 611 "../src/parse/lex.re"
2200         { return static_cast<uint8_t>('\v'); }
2201 #line 2202 "src/parse/lex.cc"
2202 yy364:
2203         yyaccept = 1;
2204         yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
2205         if (yych <= '@') {
2206                 if (yych <= '/') goto yy344;
2207                 if (yych >= ':') goto yy344;
2208         } else {
2209                 if (yych <= 'F') goto yy365;
2210                 if (yych <= '`') goto yy344;
2211                 if (yych >= 'g') goto yy344;
2212         }
2213 yy365:
2214         yych = (YYCTYPE)*++YYCURSOR;
2215         if (yych <= '@') {
2216                 if (yych <= '/') goto yy366;
2217                 if (yych <= '9') goto yy367;
2218         } else {
2219                 if (yych <= 'F') goto yy367;
2220                 if (yych <= '`') goto yy366;
2221                 if (yych <= 'f') goto yy367;
2222         }
2223 yy366:
2224         YYCURSOR = YYMARKER;
2225         if (yyaccept == 0) {
2226                 goto yy341;
2227         } else {
2228                 goto yy344;
2229         }
2230 yy367:
2231         ++YYCURSOR;
2232 #line 603 "../src/parse/lex.re"
2233         { return unesc_hex(tok, cur); }
2234 #line 2235 "src/parse/lex.cc"
2235 yy369:
2236         yych = (YYCTYPE)*++YYCURSOR;
2237         if (yych <= '@') {
2238                 if (yych <= '/') goto yy366;
2239                 if (yych >= ':') goto yy366;
2240         } else {
2241                 if (yych <= 'F') goto yy370;
2242                 if (yych <= '`') goto yy366;
2243                 if (yych >= 'g') goto yy366;
2244         }
2245 yy370:
2246         yych = (YYCTYPE)*++YYCURSOR;
2247         if (yych <= '@') {
2248                 if (yych <= '/') goto yy366;
2249                 if (yych >= ':') goto yy366;
2250         } else {
2251                 if (yych <= 'F') goto yy371;
2252                 if (yych <= '`') goto yy366;
2253                 if (yych >= 'g') goto yy366;
2254         }
2255 yy371:
2256         yych = (YYCTYPE)*++YYCURSOR;
2257         if (yych <= '@') {
2258                 if (yych <= '/') goto yy366;
2259                 if (yych <= '9') goto yy367;
2260                 goto yy366;
2261         } else {
2262                 if (yych <= 'F') goto yy367;
2263                 if (yych <= '`') goto yy366;
2264                 if (yych <= 'f') goto yy367;
2265                 goto yy366;
2266         }
2267 yy372:
2268         yych = (YYCTYPE)*++YYCURSOR;
2269         if (yych <= '@') {
2270                 if (yych <= '/') goto yy366;
2271                 if (yych >= ':') goto yy366;
2272         } else {
2273                 if (yych <= 'F') goto yy373;
2274                 if (yych <= '`') goto yy366;
2275                 if (yych >= 'g') goto yy366;
2276         }
2277 yy373:
2278         yych = (YYCTYPE)*++YYCURSOR;
2279         if (yych <= '@') {
2280                 if (yych <= '/') goto yy366;
2281                 if (yych >= ':') goto yy366;
2282         } else {
2283                 if (yych <= 'F') goto yy374;
2284                 if (yych <= '`') goto yy366;
2285                 if (yych >= 'g') goto yy366;
2286         }
2287 yy374:
2288         yych = (YYCTYPE)*++YYCURSOR;
2289         if (yych <= '@') {
2290                 if (yych <= '/') goto yy366;
2291                 if (yych >= ':') goto yy366;
2292         } else {
2293                 if (yych <= 'F') goto yy375;
2294                 if (yych <= '`') goto yy366;
2295                 if (yych >= 'g') goto yy366;
2296         }
2297 yy375:
2298         yych = (YYCTYPE)*++YYCURSOR;
2299         if (yych <= '@') {
2300                 if (yych <= '/') goto yy366;
2301                 if (yych >= ':') goto yy366;
2302         } else {
2303                 if (yych <= 'F') goto yy376;
2304                 if (yych <= '`') goto yy366;
2305                 if (yych >= 'g') goto yy366;
2306         }
2307 yy376:
2308         yych = (YYCTYPE)*++YYCURSOR;
2309         if (yych <= '@') {
2310                 if (yych <= '/') goto yy366;
2311                 if (yych >= ':') goto yy366;
2312         } else {
2313                 if (yych <= 'F') goto yy377;
2314                 if (yych <= '`') goto yy366;
2315                 if (yych >= 'g') goto yy366;
2316         }
2317 yy377:
2318         yych = (YYCTYPE)*++YYCURSOR;
2319         if (yych <= '@') {
2320                 if (yych <= '/') goto yy366;
2321                 if (yych >= ':') goto yy366;
2322         } else {
2323                 if (yych <= 'F') goto yy378;
2324                 if (yych <= '`') goto yy366;
2325                 if (yych >= 'g') goto yy366;
2326         }
2327 yy378:
2328         yych = (YYCTYPE)*++YYCURSOR;
2329         if (yych <= '@') {
2330                 if (yych <= '/') goto yy366;
2331                 if (yych <= '9') goto yy367;
2332                 goto yy366;
2333         } else {
2334                 if (yych <= 'F') goto yy367;
2335                 if (yych <= '`') goto yy366;
2336                 if (yych <= 'f') goto yy367;
2337                 goto yy366;
2338         }
2339 yy379:
2340         yych = (YYCTYPE)*++YYCURSOR;
2341         if (yych <= '/') goto yy366;
2342         if (yych >= '8') goto yy366;
2343         ++YYCURSOR;
2344 #line 604 "../src/parse/lex.re"
2345         { return unesc_oct(tok, cur); }
2346 #line 2347 "src/parse/lex.cc"
2347 }
2348 #line 619 "../src/parse/lex.re"
2349
2350 }
2351
2352 uint32_t Scanner::lex_str_chr(char quote, bool &end)
2353 {
2354         end = false;
2355         tok = cur;
2356         
2357 #line 2358 "src/parse/lex.cc"
2358 {
2359         YYCTYPE yych;
2360         unsigned int yyaccept = 0;
2361         if ((YYLIMIT - YYCURSOR) < 10) YYFILL(10);
2362         yych = (YYCTYPE)*YYCURSOR;
2363         if (yych == '\n') goto yy386;
2364         if (yych == '\\') goto yy388;
2365         ++YYCURSOR;
2366 #line 632 "../src/parse/lex.re"
2367         {
2368                         end = tok[0] == quote;
2369                         return static_cast<uint8_t>(tok[0]);
2370                 }
2371 #line 2372 "src/parse/lex.cc"
2372 yy386:
2373         ++YYCURSOR;
2374 #line 627 "../src/parse/lex.re"
2375         { fatal ((tok - pos) - tchar, "syntax error"); }
2376 #line 2377 "src/parse/lex.cc"
2377 yy388:
2378         ++YYCURSOR;
2379         if ((yych = (YYCTYPE)*YYCURSOR) <= 'a') {
2380                 if (yych <= 'T') {
2381                         if (yych <= '/') {
2382                                 if (yych != '\n') goto yy390;
2383                         } else {
2384                                 if (yych <= '3') goto yy392;
2385                                 if (yych <= '7') goto yy394;
2386                                 goto yy390;
2387                         }
2388                 } else {
2389                         if (yych <= 'X') {
2390                                 if (yych <= 'U') goto yy395;
2391                                 if (yych <= 'W') goto yy390;
2392                                 goto yy397;
2393                         } else {
2394                                 if (yych == '\\') goto yy398;
2395                                 if (yych <= '`') goto yy390;
2396                                 goto yy400;
2397                         }
2398                 }
2399         } else {
2400                 if (yych <= 'r') {
2401                         if (yych <= 'f') {
2402                                 if (yych <= 'b') goto yy402;
2403                                 if (yych <= 'e') goto yy390;
2404                                 goto yy404;
2405                         } else {
2406                                 if (yych == 'n') goto yy406;
2407                                 if (yych <= 'q') goto yy390;
2408                                 goto yy408;
2409                         }
2410                 } else {
2411                         if (yych <= 'u') {
2412                                 if (yych <= 's') goto yy390;
2413                                 if (yych <= 't') goto yy410;
2414                                 goto yy397;
2415                         } else {
2416                                 if (yych <= 'v') goto yy412;
2417                                 if (yych == 'x') goto yy414;
2418                                 goto yy390;
2419                         }
2420                 }
2421         }
2422 #line 630 "../src/parse/lex.re"
2423         { fatal ((tok - pos) - tchar, "syntax error in escape sequence"); }
2424 #line 2425 "src/parse/lex.cc"
2425 yy390:
2426         ++YYCURSOR;
2427 #line 646 "../src/parse/lex.re"
2428         {
2429                         if (tok[1] != quote) {
2430                                 warn.useless_escape(tline, tok - pos, tok[1]);
2431                         }
2432                         return static_cast<uint8_t>(tok[1]);
2433                 }
2434 #line 2435 "src/parse/lex.cc"
2435 yy392:
2436         yyaccept = 0;
2437         yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
2438         if (yych <= '/') goto yy393;
2439         if (yych <= '7') goto yy429;
2440 yy393:
2441 #line 629 "../src/parse/lex.re"
2442         { fatal ((tok - pos) - tchar, "syntax error in octal escape sequence"); }
2443 #line 2444 "src/parse/lex.cc"
2444 yy394:
2445         yych = (YYCTYPE)*++YYCURSOR;
2446         goto yy393;
2447 yy395:
2448         yyaccept = 1;
2449         yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
2450         if (yych <= '@') {
2451                 if (yych <= '/') goto yy396;
2452                 if (yych <= '9') goto yy422;
2453         } else {
2454                 if (yych <= 'F') goto yy422;
2455                 if (yych <= '`') goto yy396;
2456                 if (yych <= 'f') goto yy422;
2457         }
2458 yy396:
2459 #line 628 "../src/parse/lex.re"
2460         { fatal ((tok - pos) - tchar, "syntax error in hexadecimal escape sequence"); }
2461 #line 2462 "src/parse/lex.cc"
2462 yy397:
2463         yyaccept = 1;
2464         yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
2465         if (yych <= '@') {
2466                 if (yych <= '/') goto yy396;
2467                 if (yych <= '9') goto yy419;
2468                 goto yy396;
2469         } else {
2470                 if (yych <= 'F') goto yy419;
2471                 if (yych <= '`') goto yy396;
2472                 if (yych <= 'f') goto yy419;
2473                 goto yy396;
2474         }
2475 yy398:
2476         ++YYCURSOR;
2477 #line 645 "../src/parse/lex.re"
2478         { return static_cast<uint8_t>('\\'); }
2479 #line 2480 "src/parse/lex.cc"
2480 yy400:
2481         ++YYCURSOR;
2482 #line 638 "../src/parse/lex.re"
2483         { return static_cast<uint8_t>('\a'); }
2484 #line 2485 "src/parse/lex.cc"
2485 yy402:
2486         ++YYCURSOR;
2487 #line 639 "../src/parse/lex.re"
2488         { return static_cast<uint8_t>('\b'); }
2489 #line 2490 "src/parse/lex.cc"
2490 yy404:
2491         ++YYCURSOR;
2492 #line 640 "../src/parse/lex.re"
2493         { return static_cast<uint8_t>('\f'); }
2494 #line 2495 "src/parse/lex.cc"
2495 yy406:
2496         ++YYCURSOR;
2497 #line 641 "../src/parse/lex.re"
2498         { return static_cast<uint8_t>('\n'); }
2499 #line 2500 "src/parse/lex.cc"
2500 yy408:
2501         ++YYCURSOR;
2502 #line 642 "../src/parse/lex.re"
2503         { return static_cast<uint8_t>('\r'); }
2504 #line 2505 "src/parse/lex.cc"
2505 yy410:
2506         ++YYCURSOR;
2507 #line 643 "../src/parse/lex.re"
2508         { return static_cast<uint8_t>('\t'); }
2509 #line 2510 "src/parse/lex.cc"
2510 yy412:
2511         ++YYCURSOR;
2512 #line 644 "../src/parse/lex.re"
2513         { return static_cast<uint8_t>('\v'); }
2514 #line 2515 "src/parse/lex.cc"
2515 yy414:
2516         yyaccept = 1;
2517         yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
2518         if (yych <= '@') {
2519                 if (yych <= '/') goto yy396;
2520                 if (yych >= ':') goto yy396;
2521         } else {
2522                 if (yych <= 'F') goto yy415;
2523                 if (yych <= '`') goto yy396;
2524                 if (yych >= 'g') goto yy396;
2525         }
2526 yy415:
2527         yych = (YYCTYPE)*++YYCURSOR;
2528         if (yych <= '@') {
2529                 if (yych <= '/') goto yy416;
2530                 if (yych <= '9') goto yy417;
2531         } else {
2532                 if (yych <= 'F') goto yy417;
2533                 if (yych <= '`') goto yy416;
2534                 if (yych <= 'f') goto yy417;
2535         }
2536 yy416:
2537         YYCURSOR = YYMARKER;
2538         if (yyaccept == 0) {
2539                 goto yy393;
2540         } else {
2541                 goto yy396;
2542         }
2543 yy417:
2544         ++YYCURSOR;
2545 #line 636 "../src/parse/lex.re"
2546         { return unesc_hex(tok, cur); }
2547 #line 2548 "src/parse/lex.cc"
2548 yy419:
2549         yych = (YYCTYPE)*++YYCURSOR;
2550         if (yych <= '@') {
2551                 if (yych <= '/') goto yy416;
2552                 if (yych >= ':') goto yy416;
2553         } else {
2554                 if (yych <= 'F') goto yy420;
2555                 if (yych <= '`') goto yy416;
2556                 if (yych >= 'g') goto yy416;
2557         }
2558 yy420:
2559         yych = (YYCTYPE)*++YYCURSOR;
2560         if (yych <= '@') {
2561                 if (yych <= '/') goto yy416;
2562                 if (yych >= ':') goto yy416;
2563         } else {
2564                 if (yych <= 'F') goto yy421;
2565                 if (yych <= '`') goto yy416;
2566                 if (yych >= 'g') goto yy416;
2567         }
2568 yy421:
2569         yych = (YYCTYPE)*++YYCURSOR;
2570         if (yych <= '@') {
2571                 if (yych <= '/') goto yy416;
2572                 if (yych <= '9') goto yy417;
2573                 goto yy416;
2574         } else {
2575                 if (yych <= 'F') goto yy417;
2576                 if (yych <= '`') goto yy416;
2577                 if (yych <= 'f') goto yy417;
2578                 goto yy416;
2579         }
2580 yy422:
2581         yych = (YYCTYPE)*++YYCURSOR;
2582         if (yych <= '@') {
2583                 if (yych <= '/') goto yy416;
2584                 if (yych >= ':') goto yy416;
2585         } else {
2586                 if (yych <= 'F') goto yy423;
2587                 if (yych <= '`') goto yy416;
2588                 if (yych >= 'g') goto yy416;
2589         }
2590 yy423:
2591         yych = (YYCTYPE)*++YYCURSOR;
2592         if (yych <= '@') {
2593                 if (yych <= '/') goto yy416;
2594                 if (yych >= ':') goto yy416;
2595         } else {
2596                 if (yych <= 'F') goto yy424;
2597                 if (yych <= '`') goto yy416;
2598                 if (yych >= 'g') goto yy416;
2599         }
2600 yy424:
2601         yych = (YYCTYPE)*++YYCURSOR;
2602         if (yych <= '@') {
2603                 if (yych <= '/') goto yy416;
2604                 if (yych >= ':') goto yy416;
2605         } else {
2606                 if (yych <= 'F') goto yy425;
2607                 if (yych <= '`') goto yy416;
2608                 if (yych >= 'g') goto yy416;
2609         }
2610 yy425:
2611         yych = (YYCTYPE)*++YYCURSOR;
2612         if (yych <= '@') {
2613                 if (yych <= '/') goto yy416;
2614                 if (yych >= ':') goto yy416;
2615         } else {
2616                 if (yych <= 'F') goto yy426;
2617                 if (yych <= '`') goto yy416;
2618                 if (yych >= 'g') goto yy416;
2619         }
2620 yy426:
2621         yych = (YYCTYPE)*++YYCURSOR;
2622         if (yych <= '@') {
2623                 if (yych <= '/') goto yy416;
2624                 if (yych >= ':') goto yy416;
2625         } else {
2626                 if (yych <= 'F') goto yy427;
2627                 if (yych <= '`') goto yy416;
2628                 if (yych >= 'g') goto yy416;
2629         }
2630 yy427:
2631         yych = (YYCTYPE)*++YYCURSOR;
2632         if (yych <= '@') {
2633                 if (yych <= '/') goto yy416;
2634                 if (yych >= ':') goto yy416;
2635         } else {
2636                 if (yych <= 'F') goto yy428;
2637                 if (yych <= '`') goto yy416;
2638                 if (yych >= 'g') goto yy416;
2639         }
2640 yy428:
2641         yych = (YYCTYPE)*++YYCURSOR;
2642         if (yych <= '@') {
2643                 if (yych <= '/') goto yy416;
2644                 if (yych <= '9') goto yy417;
2645                 goto yy416;
2646         } else {
2647                 if (yych <= 'F') goto yy417;
2648                 if (yych <= '`') goto yy416;
2649                 if (yych <= 'f') goto yy417;
2650                 goto yy416;
2651         }
2652 yy429:
2653         yych = (YYCTYPE)*++YYCURSOR;
2654         if (yych <= '/') goto yy416;
2655         if (yych >= '8') goto yy416;
2656         ++YYCURSOR;
2657 #line 637 "../src/parse/lex.re"
2658         { return unesc_oct(tok, cur); }
2659 #line 2660 "src/parse/lex.cc"
2660 }
2661 #line 652 "../src/parse/lex.re"
2662
2663 }
2664
2665 RegExp *Scanner::lex_str(char quote, bool casing)
2666 {
2667         RegExp *r = NULL;
2668         for (bool end;;) {
2669                 const uint32_t c = lex_str_chr(quote, end);
2670                 if (end) {
2671                         return r ? r : new NullOp;
2672                 }
2673                 r = doCat(r, casing ? ichr(c) : schr(c));
2674         }
2675 }
2676
2677 void Scanner::set_sourceline ()
2678 {
2679 sourceline:
2680         tok = cur;
2681
2682 #line 2683 "src/parse/lex.cc"
2683 {
2684         YYCTYPE yych;
2685         static const unsigned char yybm[] = {
2686                 128, 128, 128, 128, 128, 128, 128, 128, 
2687                 128, 128,   0, 128, 128, 128, 128, 128, 
2688                 128, 128, 128, 128, 128, 128, 128, 128, 
2689                 128, 128, 128, 128, 128, 128, 128, 128, 
2690                 128, 128,   0, 128, 128, 128, 128, 128, 
2691                 128, 128, 128, 128, 128, 128, 128, 128, 
2692                 192, 192, 192, 192, 192, 192, 192, 192, 
2693                 192, 192, 128, 128, 128, 128, 128, 128, 
2694                 128, 128, 128, 128, 128, 128, 128, 128, 
2695                 128, 128, 128, 128, 128, 128, 128, 128, 
2696                 128, 128, 128, 128, 128, 128, 128, 128, 
2697                 128, 128, 128, 128,   0, 128, 128, 128, 
2698                 128, 128, 128, 128, 128, 128, 128, 128, 
2699                 128, 128, 128, 128, 128, 128, 128, 128, 
2700                 128, 128, 128, 128, 128, 128, 128, 128, 
2701                 128, 128, 128, 128, 128, 128, 128, 128, 
2702                 128, 128, 128, 128, 128, 128, 128, 128, 
2703                 128, 128, 128, 128, 128, 128, 128, 128, 
2704                 128, 128, 128, 128, 128, 128, 128, 128, 
2705                 128, 128, 128, 128, 128, 128, 128, 128, 
2706                 128, 128, 128, 128, 128, 128, 128, 128, 
2707                 128, 128, 128, 128, 128, 128, 128, 128, 
2708                 128, 128, 128, 128, 128, 128, 128, 128, 
2709                 128, 128, 128, 128, 128, 128, 128, 128, 
2710                 128, 128, 128, 128, 128, 128, 128, 128, 
2711                 128, 128, 128, 128, 128, 128, 128, 128, 
2712                 128, 128, 128, 128, 128, 128, 128, 128, 
2713                 128, 128, 128, 128, 128, 128, 128, 128, 
2714                 128, 128, 128, 128, 128, 128, 128, 128, 
2715                 128, 128, 128, 128, 128, 128, 128, 128, 
2716                 128, 128, 128, 128, 128, 128, 128, 128, 
2717                 128, 128, 128, 128, 128, 128, 128, 128, 
2718         };
2719         if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
2720         yych = (YYCTYPE)*YYCURSOR;
2721         if (yych <= '!') {
2722                 if (yych == '\n') goto yy436;
2723         } else {
2724                 if (yych <= '"') goto yy438;
2725                 if (yych <= '0') goto yy434;
2726                 if (yych <= '9') goto yy439;
2727         }
2728 yy434:
2729         ++YYCURSOR;
2730 yy435:
2731 #line 695 "../src/parse/lex.re"
2732         {
2733                                         goto sourceline;
2734                                 }
2735 #line 2736 "src/parse/lex.cc"
2736 yy436:
2737         ++YYCURSOR;
2738 #line 683 "../src/parse/lex.re"
2739         {
2740                                         if (cur == eof)
2741                                         {
2742                                                 --cur; 
2743                                         }
2744                                         else
2745                                         {
2746                                                 pos = cur; 
2747                                         }
2748                                         tok = cur;
2749                                         return; 
2750                                 }
2751 #line 2752 "src/parse/lex.cc"
2752 yy438:
2753         yych = (YYCTYPE)*(YYMARKER = ++YYCURSOR);
2754         if (yych == '\n') goto yy435;
2755         goto yy444;
2756 yy439:
2757         ++YYCURSOR;
2758         yych = (YYCTYPE)*YYCURSOR;
2759         goto yy442;
2760 yy440:
2761 #line 672 "../src/parse/lex.re"
2762         {
2763                                         if (!s_to_u32_unsafe (tok, cur, cline))
2764                                         {
2765                                                 fatal ("line number overflow");
2766                                         }
2767                                         goto sourceline; 
2768                                 }
2769 #line 2770 "src/parse/lex.cc"
2770 yy441:
2771         ++YYCURSOR;
2772         if (YYLIMIT <= YYCURSOR) YYFILL(1);
2773         yych = (YYCTYPE)*YYCURSOR;
2774 yy442:
2775         if (yybm[0+yych] & 64) {
2776                 goto yy441;
2777         }
2778         goto yy440;
2779 yy443:
2780         ++YYCURSOR;
2781         if (YYLIMIT <= YYCURSOR) YYFILL(1);
2782         yych = (YYCTYPE)*YYCURSOR;
2783 yy444:
2784         if (yybm[0+yych] & 128) {
2785                 goto yy443;
2786         }
2787         if (yych <= '\n') goto yy445;
2788         if (yych <= '"') goto yy447;
2789         goto yy446;
2790 yy445:
2791         YYCURSOR = YYMARKER;
2792         goto yy435;
2793 yy446:
2794         ++YYCURSOR;
2795         if (YYLIMIT <= YYCURSOR) YYFILL(1);
2796         yych = (YYCTYPE)*YYCURSOR;
2797         if (yych == '\n') goto yy445;
2798         goto yy443;
2799 yy447:
2800         ++YYCURSOR;
2801 #line 679 "../src/parse/lex.re"
2802         {
2803                                         escape (in.file_name, std::string (tok + 1, tok_len () - 2)); // -2 to omit quotes
2804                                         goto sourceline; 
2805                                 }
2806 #line 2807 "src/parse/lex.cc"
2807 }
2808 #line 698 "../src/parse/lex.re"
2809
2810 }
2811
2812 } // end namespace re2c