1 /* Generated by re2c 0.13.6 on Tue Apr 26 22:58:08 2016 */
2 // 1 "scanner.re"
3
4 /*
5 +------------------------------------------------------------------------+
6 | Phalcon Framework |
7 +------------------------------------------------------------------------+
8 | Copyright (c) 2011-2016 Phalcon Team (http://www.phalconphp.com) |
9 +------------------------------------------------------------------------+
10 | This source file is subject to the New BSD License that is bundled |
11 | with this package in the file docs/LICENSE.txt. |
12 | |
13 | If you did not receive a copy of the license and are unable to |
14 | obtain it through the world-wide-web, please send an email |
15 | to license@phalconphp.com so we can send you a copy immediately. |
16 +------------------------------------------------------------------------+
17 | Authors: Andres Gutierrez <andres@phalconphp.com> |
18 | Eduar Carvajal <eduar@phalconphp.com> |
19 +------------------------------------------------------------------------+
20 */
21
22 #include "php_phalcon.h"
23
24 #include "scanner.h"
25
26 #define AACTYPE unsigned char
27 #define AACURSOR (s->start)
28 #define AALIMIT (s->end)
29 #define AAMARKER q
30
phannot_get_token(phannot_scanner_state * s,phannot_scanner_token * token)31 int phannot_get_token(phannot_scanner_state *s, phannot_scanner_token *token) {
32
33 char next, *q = AACURSOR, *start = AACURSOR;
34 int status = PHANNOT_SCANNER_RETCODE_IMPOSSIBLE;
35
36 while (PHANNOT_SCANNER_RETCODE_IMPOSSIBLE == status) {
37
38 if (s->mode == PHANNOT_MODE_RAW) {
39
40 if (*AACURSOR == '\n') {
41 s->active_line++;
42 }
43
44 next = *(AACURSOR+1);
45
46 if (*AACURSOR == '\0' || *AACURSOR == '@') {
47 if ((next >= 'A' && next <= 'Z') || (next >= 'a' && next <= 'z')) {
48 s->mode = PHANNOT_MODE_ANNOTATION;
49 continue;
50 }
51 }
52
53 ++AACURSOR;
54 token->opcode = PHANNOT_T_IGNORE;
55 return 0;
56
57 } else {
58
59
60 // 61 "scanner.c"
61 {
62 AACTYPE aach;
63 unsigned int aaaccept = 0;
64
65 aach = *AACURSOR;
66 switch (aach) {
67 case 0x00: goto aa38;
68 case '\t':
69 case '\r':
70 case ' ': goto aa34;
71 case '\n': goto aa36;
72 case '"': goto aa10;
73 case '\'': goto aa11;
74 case '(': goto aa14;
75 case ')': goto aa16;
76 case ',': goto aa32;
77 case '-': goto aa2;
78 case '0':
79 case '1':
80 case '2':
81 case '3':
82 case '4':
83 case '5':
84 case '6':
85 case '7':
86 case '8':
87 case '9': goto aa4;
88 case ':': goto aa30;
89 case '=': goto aa28;
90 case '@': goto aa26;
91 case 'A':
92 case 'B':
93 case 'C':
94 case 'D':
95 case 'E':
96 case 'G':
97 case 'H':
98 case 'I':
99 case 'J':
100 case 'K':
101 case 'L':
102 case 'M':
103 case 'O':
104 case 'P':
105 case 'Q':
106 case 'R':
107 case 'S':
108 case 'U':
109 case 'V':
110 case 'W':
111 case 'X':
112 case 'Y':
113 case 'Z':
114 case '_':
115 case 'a':
116 case 'b':
117 case 'c':
118 case 'd':
119 case 'e':
120 case 'g':
121 case 'h':
122 case 'i':
123 case 'j':
124 case 'k':
125 case 'l':
126 case 'm':
127 case 'o':
128 case 'p':
129 case 'q':
130 case 'r':
131 case 's':
132 case 'u':
133 case 'v':
134 case 'w':
135 case 'x':
136 case 'y':
137 case 'z': goto aa13;
138 case 'F':
139 case 'f': goto aa8;
140 case 'N':
141 case 'n': goto aa6;
142 case 'T':
143 case 't': goto aa9;
144 case '[': goto aa22;
145 case '\\': goto aa12;
146 case ']': goto aa24;
147 case '{': goto aa18;
148 case '}': goto aa20;
149 default: goto aa40;
150 }
151 aa2:
152 ++AACURSOR;
153 switch ((aach = *AACURSOR)) {
154 case '0':
155 case '1':
156 case '2':
157 case '3':
158 case '4':
159 case '5':
160 case '6':
161 case '7':
162 case '8':
163 case '9': goto aa71;
164 default: goto aa3;
165 }
166 aa3:
167 // 178 "scanner.re"
168 {
169 status = PHANNOT_SCANNER_RETCODE_ERR;
170 break;
171 }
172 // 173 "scanner.c"
173 aa4:
174 aaaccept = 0;
175 aach = *(AAMARKER = ++AACURSOR);
176 goto aa72;
177 aa5:
178 // 62 "scanner.re"
179 {
180 token->opcode = PHANNOT_T_INTEGER;
181 token->value = estrndup(start, AACURSOR - start);
182 token->len = AACURSOR - start;
183 q = AACURSOR;
184 return 0;
185 }
186 // 187 "scanner.c"
187 aa6:
188 aaaccept = 1;
189 aach = *(AAMARKER = ++AACURSOR);
190 switch (aach) {
191 case 'U':
192 case 'u': goto aa66;
193 default: goto aa44;
194 }
195 aa7:
196 // 104 "scanner.re"
197 {
198 token->opcode = PHANNOT_T_IDENTIFIER;
199 token->value = estrndup(start, AACURSOR - start);
200 token->len = AACURSOR - start;
201 q = AACURSOR;
202 return 0;
203 }
204 // 205 "scanner.c"
205 aa8:
206 aaaccept = 1;
207 aach = *(AAMARKER = ++AACURSOR);
208 switch (aach) {
209 case 'A':
210 case 'a': goto aa61;
211 default: goto aa44;
212 }
213 aa9:
214 aaaccept = 1;
215 aach = *(AAMARKER = ++AACURSOR);
216 switch (aach) {
217 case 'R':
218 case 'r': goto aa57;
219 default: goto aa44;
220 }
221 aa10:
222 aaaccept = 2;
223 aach = *(AAMARKER = ++AACURSOR);
224 if (aach <= 0x00) goto aa3;
225 goto aa55;
226 aa11:
227 aaaccept = 2;
228 aach = *(AAMARKER = ++AACURSOR);
229 if (aach <= 0x00) goto aa3;
230 goto aa50;
231 aa12:
232 aach = *++AACURSOR;
233 switch (aach) {
234 case 'A':
235 case 'B':
236 case 'C':
237 case 'D':
238 case 'E':
239 case 'F':
240 case 'G':
241 case 'H':
242 case 'I':
243 case 'J':
244 case 'K':
245 case 'L':
246 case 'M':
247 case 'N':
248 case 'O':
249 case 'P':
250 case 'Q':
251 case 'R':
252 case 'S':
253 case 'T':
254 case 'U':
255 case 'V':
256 case 'W':
257 case 'X':
258 case 'Y':
259 case 'Z':
260 case '_':
261 case 'a':
262 case 'b':
263 case 'c':
264 case 'd':
265 case 'e':
266 case 'f':
267 case 'g':
268 case 'h':
269 case 'i':
270 case 'j':
271 case 'k':
272 case 'l':
273 case 'm':
274 case 'n':
275 case 'o':
276 case 'p':
277 case 'q':
278 case 'r':
279 case 's':
280 case 't':
281 case 'u':
282 case 'v':
283 case 'w':
284 case 'x':
285 case 'y':
286 case 'z': goto aa43;
287 default: goto aa3;
288 }
289 aa13:
290 aaaccept = 1;
291 aach = *(AAMARKER = ++AACURSOR);
292 goto aa44;
293 aa14:
294 ++AACURSOR;
295 // 112 "scanner.re"
296 {
297 token->opcode = PHANNOT_T_PARENTHESES_OPEN;
298 return 0;
299 }
300 // 301 "scanner.c"
301 aa16:
302 ++AACURSOR;
303 // 117 "scanner.re"
304 {
305 token->opcode = PHANNOT_T_PARENTHESES_CLOSE;
306 return 0;
307 }
308 // 309 "scanner.c"
309 aa18:
310 ++AACURSOR;
311 // 122 "scanner.re"
312 {
313 token->opcode = PHANNOT_T_BRACKET_OPEN;
314 return 0;
315 }
316 // 317 "scanner.c"
317 aa20:
318 ++AACURSOR;
319 // 127 "scanner.re"
320 {
321 token->opcode = PHANNOT_T_BRACKET_CLOSE;
322 return 0;
323 }
324 // 325 "scanner.c"
325 aa22:
326 ++AACURSOR;
327 // 132 "scanner.re"
328 {
329 token->opcode = PHANNOT_T_SBRACKET_OPEN;
330 return 0;
331 }
332 // 333 "scanner.c"
333 aa24:
334 ++AACURSOR;
335 // 137 "scanner.re"
336 {
337 token->opcode = PHANNOT_T_SBRACKET_CLOSE;
338 return 0;
339 }
340 // 341 "scanner.c"
341 aa26:
342 ++AACURSOR;
343 // 142 "scanner.re"
344 {
345 token->opcode = PHANNOT_T_AT;
346 return 0;
347 }
348 // 349 "scanner.c"
349 aa28:
350 ++AACURSOR;
351 // 147 "scanner.re"
352 {
353 token->opcode = PHANNOT_T_EQUALS;
354 return 0;
355 }
356 // 357 "scanner.c"
357 aa30:
358 ++AACURSOR;
359 // 152 "scanner.re"
360 {
361 token->opcode = PHANNOT_T_COLON;
362 return 0;
363 }
364 // 365 "scanner.c"
365 aa32:
366 ++AACURSOR;
367 // 157 "scanner.re"
368 {
369 token->opcode = PHANNOT_T_COMMA;
370 return 0;
371 }
372 // 373 "scanner.c"
373 aa34:
374 ++AACURSOR;
375 aach = *AACURSOR;
376 goto aa42;
377 aa35:
378 // 162 "scanner.re"
379 {
380 token->opcode = PHANNOT_T_IGNORE;
381 return 0;
382 }
383 // 384 "scanner.c"
384 aa36:
385 ++AACURSOR;
386 // 167 "scanner.re"
387 {
388 s->active_line++;
389 token->opcode = PHANNOT_T_IGNORE;
390 return 0;
391 }
392 // 393 "scanner.c"
393 aa38:
394 ++AACURSOR;
395 // 173 "scanner.re"
396 {
397 status = PHANNOT_SCANNER_RETCODE_EOF;
398 break;
399 }
400 // 401 "scanner.c"
401 aa40:
402 aach = *++AACURSOR;
403 goto aa3;
404 aa41:
405 ++AACURSOR;
406 aach = *AACURSOR;
407 aa42:
408 switch (aach) {
409 case '\t':
410 case '\r':
411 case ' ': goto aa41;
412 default: goto aa35;
413 }
414 aa43:
415 aaaccept = 1;
416 AAMARKER = ++AACURSOR;
417 aach = *AACURSOR;
418 aa44:
419 switch (aach) {
420 case '0':
421 case '1':
422 case '2':
423 case '3':
424 case '4':
425 case '5':
426 case '6':
427 case '7':
428 case '8':
429 case '9':
430 case 'A':
431 case 'B':
432 case 'C':
433 case 'D':
434 case 'E':
435 case 'F':
436 case 'G':
437 case 'H':
438 case 'I':
439 case 'J':
440 case 'K':
441 case 'L':
442 case 'M':
443 case 'N':
444 case 'O':
445 case 'P':
446 case 'Q':
447 case 'R':
448 case 'S':
449 case 'T':
450 case 'U':
451 case 'V':
452 case 'W':
453 case 'X':
454 case 'Y':
455 case 'Z':
456 case '_':
457 case 'a':
458 case 'b':
459 case 'c':
460 case 'd':
461 case 'e':
462 case 'f':
463 case 'g':
464 case 'h':
465 case 'i':
466 case 'j':
467 case 'k':
468 case 'l':
469 case 'm':
470 case 'n':
471 case 'o':
472 case 'p':
473 case 'q':
474 case 'r':
475 case 's':
476 case 't':
477 case 'u':
478 case 'v':
479 case 'w':
480 case 'x':
481 case 'y':
482 case 'z': goto aa43;
483 case '\\': goto aa45;
484 default: goto aa7;
485 }
486 aa45:
487 ++AACURSOR;
488 aach = *AACURSOR;
489 switch (aach) {
490 case 'A':
491 case 'B':
492 case 'C':
493 case 'D':
494 case 'E':
495 case 'F':
496 case 'G':
497 case 'H':
498 case 'I':
499 case 'J':
500 case 'K':
501 case 'L':
502 case 'M':
503 case 'N':
504 case 'O':
505 case 'P':
506 case 'Q':
507 case 'R':
508 case 'S':
509 case 'T':
510 case 'U':
511 case 'V':
512 case 'W':
513 case 'X':
514 case 'Y':
515 case 'Z':
516 case '_':
517 case 'a':
518 case 'b':
519 case 'c':
520 case 'd':
521 case 'e':
522 case 'f':
523 case 'g':
524 case 'h':
525 case 'i':
526 case 'j':
527 case 'k':
528 case 'l':
529 case 'm':
530 case 'n':
531 case 'o':
532 case 'p':
533 case 'q':
534 case 'r':
535 case 's':
536 case 't':
537 case 'u':
538 case 'v':
539 case 'w':
540 case 'x':
541 case 'y':
542 case 'z': goto aa47;
543 default: goto aa46;
544 }
545 aa46:
546 AACURSOR = AAMARKER;
547 switch (aaaccept) {
548 case 0: goto aa5;
549 case 1: goto aa7;
550 case 2: goto aa3;
551 case 3: goto aa60;
552 case 4: goto aa65;
553 default: goto aa69;
554 }
555 aa47:
556 aaaccept = 1;
557 AAMARKER = ++AACURSOR;
558 aach = *AACURSOR;
559 switch (aach) {
560 case '0':
561 case '1':
562 case '2':
563 case '3':
564 case '4':
565 case '5':
566 case '6':
567 case '7':
568 case '8':
569 case '9':
570 case 'A':
571 case 'B':
572 case 'C':
573 case 'D':
574 case 'E':
575 case 'F':
576 case 'G':
577 case 'H':
578 case 'I':
579 case 'J':
580 case 'K':
581 case 'L':
582 case 'M':
583 case 'N':
584 case 'O':
585 case 'P':
586 case 'Q':
587 case 'R':
588 case 'S':
589 case 'T':
590 case 'U':
591 case 'V':
592 case 'W':
593 case 'X':
594 case 'Y':
595 case 'Z':
596 case '_':
597 case 'a':
598 case 'b':
599 case 'c':
600 case 'd':
601 case 'e':
602 case 'f':
603 case 'g':
604 case 'h':
605 case 'i':
606 case 'j':
607 case 'k':
608 case 'l':
609 case 'm':
610 case 'n':
611 case 'o':
612 case 'p':
613 case 'q':
614 case 'r':
615 case 's':
616 case 't':
617 case 'u':
618 case 'v':
619 case 'w':
620 case 'x':
621 case 'y':
622 case 'z': goto aa47;
623 case '\\': goto aa45;
624 default: goto aa7;
625 }
626 aa49:
627 ++AACURSOR;
628 aach = *AACURSOR;
629 aa50:
630 switch (aach) {
631 case 0x00: goto aa46;
632 case '\'': goto aa52;
633 case '\\': goto aa51;
634 default: goto aa49;
635 }
636 aa51:
637 ++AACURSOR;
638 aach = *AACURSOR;
639 switch (aach) {
640 case '\n': goto aa46;
641 default: goto aa49;
642 }
643 aa52:
644 ++AACURSOR;
645 // 95 "scanner.re"
646 {
647 token->opcode = PHANNOT_T_STRING;
648 token->value = estrndup(q, AACURSOR - q - 1);
649 token->len = AACURSOR - q - 1;
650 q = AACURSOR;
651 return 0;
652 }
653 // 654 "scanner.c"
654 aa54:
655 ++AACURSOR;
656 aach = *AACURSOR;
657 aa55:
658 switch (aach) {
659 case 0x00: goto aa46;
660 case '"': goto aa52;
661 case '\\': goto aa56;
662 default: goto aa54;
663 }
664 aa56:
665 ++AACURSOR;
666 aach = *AACURSOR;
667 switch (aach) {
668 case '\n': goto aa46;
669 default: goto aa54;
670 }
671 aa57:
672 aaaccept = 1;
673 aach = *(AAMARKER = ++AACURSOR);
674 switch (aach) {
675 case 'U':
676 case 'u': goto aa58;
677 default: goto aa44;
678 }
679 aa58:
680 aaaccept = 1;
681 aach = *(AAMARKER = ++AACURSOR);
682 switch (aach) {
683 case 'E':
684 case 'e': goto aa59;
685 default: goto aa44;
686 }
687 aa59:
688 aaaccept = 3;
689 aach = *(AAMARKER = ++AACURSOR);
690 switch (aach) {
691 case '0':
692 case '1':
693 case '2':
694 case '3':
695 case '4':
696 case '5':
697 case '6':
698 case '7':
699 case '8':
700 case '9':
701 case 'A':
702 case 'B':
703 case 'C':
704 case 'D':
705 case 'E':
706 case 'F':
707 case 'G':
708 case 'H':
709 case 'I':
710 case 'J':
711 case 'K':
712 case 'L':
713 case 'M':
714 case 'N':
715 case 'O':
716 case 'P':
717 case 'Q':
718 case 'R':
719 case 'S':
720 case 'T':
721 case 'U':
722 case 'V':
723 case 'W':
724 case 'X':
725 case 'Y':
726 case 'Z':
727 case '_':
728 case 'a':
729 case 'b':
730 case 'c':
731 case 'd':
732 case 'e':
733 case 'f':
734 case 'g':
735 case 'h':
736 case 'i':
737 case 'j':
738 case 'k':
739 case 'l':
740 case 'm':
741 case 'n':
742 case 'o':
743 case 'p':
744 case 'q':
745 case 'r':
746 case 's':
747 case 't':
748 case 'u':
749 case 'v':
750 case 'w':
751 case 'x':
752 case 'y':
753 case 'z': goto aa43;
754 case '\\': goto aa45;
755 default: goto aa60;
756 }
757 aa60:
758 // 89 "scanner.re"
759 {
760 token->opcode = PHANNOT_T_TRUE;
761 return 0;
762 }
763 // 764 "scanner.c"
764 aa61:
765 aaaccept = 1;
766 aach = *(AAMARKER = ++AACURSOR);
767 switch (aach) {
768 case 'L':
769 case 'l': goto aa62;
770 default: goto aa44;
771 }
772 aa62:
773 aaaccept = 1;
774 aach = *(AAMARKER = ++AACURSOR);
775 switch (aach) {
776 case 'S':
777 case 's': goto aa63;
778 default: goto aa44;
779 }
780 aa63:
781 aaaccept = 1;
782 aach = *(AAMARKER = ++AACURSOR);
783 switch (aach) {
784 case 'E':
785 case 'e': goto aa64;
786 default: goto aa44;
787 }
788 aa64:
789 aaaccept = 4;
790 aach = *(AAMARKER = ++AACURSOR);
791 switch (aach) {
792 case '0':
793 case '1':
794 case '2':
795 case '3':
796 case '4':
797 case '5':
798 case '6':
799 case '7':
800 case '8':
801 case '9':
802 case 'A':
803 case 'B':
804 case 'C':
805 case 'D':
806 case 'E':
807 case 'F':
808 case 'G':
809 case 'H':
810 case 'I':
811 case 'J':
812 case 'K':
813 case 'L':
814 case 'M':
815 case 'N':
816 case 'O':
817 case 'P':
818 case 'Q':
819 case 'R':
820 case 'S':
821 case 'T':
822 case 'U':
823 case 'V':
824 case 'W':
825 case 'X':
826 case 'Y':
827 case 'Z':
828 case '_':
829 case 'a':
830 case 'b':
831 case 'c':
832 case 'd':
833 case 'e':
834 case 'f':
835 case 'g':
836 case 'h':
837 case 'i':
838 case 'j':
839 case 'k':
840 case 'l':
841 case 'm':
842 case 'n':
843 case 'o':
844 case 'p':
845 case 'q':
846 case 'r':
847 case 's':
848 case 't':
849 case 'u':
850 case 'v':
851 case 'w':
852 case 'x':
853 case 'y':
854 case 'z': goto aa43;
855 case '\\': goto aa45;
856 default: goto aa65;
857 }
858 aa65:
859 // 84 "scanner.re"
860 {
861 token->opcode = PHANNOT_T_FALSE;
862 return 0;
863 }
864 // 865 "scanner.c"
865 aa66:
866 aaaccept = 1;
867 aach = *(AAMARKER = ++AACURSOR);
868 switch (aach) {
869 case 'L':
870 case 'l': goto aa67;
871 default: goto aa44;
872 }
873 aa67:
874 aaaccept = 1;
875 aach = *(AAMARKER = ++AACURSOR);
876 switch (aach) {
877 case 'L':
878 case 'l': goto aa68;
879 default: goto aa44;
880 }
881 aa68:
882 aaaccept = 5;
883 aach = *(AAMARKER = ++AACURSOR);
884 switch (aach) {
885 case '0':
886 case '1':
887 case '2':
888 case '3':
889 case '4':
890 case '5':
891 case '6':
892 case '7':
893 case '8':
894 case '9':
895 case 'A':
896 case 'B':
897 case 'C':
898 case 'D':
899 case 'E':
900 case 'F':
901 case 'G':
902 case 'H':
903 case 'I':
904 case 'J':
905 case 'K':
906 case 'L':
907 case 'M':
908 case 'N':
909 case 'O':
910 case 'P':
911 case 'Q':
912 case 'R':
913 case 'S':
914 case 'T':
915 case 'U':
916 case 'V':
917 case 'W':
918 case 'X':
919 case 'Y':
920 case 'Z':
921 case '_':
922 case 'a':
923 case 'b':
924 case 'c':
925 case 'd':
926 case 'e':
927 case 'f':
928 case 'g':
929 case 'h':
930 case 'i':
931 case 'j':
932 case 'k':
933 case 'l':
934 case 'm':
935 case 'n':
936 case 'o':
937 case 'p':
938 case 'q':
939 case 'r':
940 case 's':
941 case 't':
942 case 'u':
943 case 'v':
944 case 'w':
945 case 'x':
946 case 'y':
947 case 'z': goto aa43;
948 case '\\': goto aa45;
949 default: goto aa69;
950 }
951 aa69:
952 // 79 "scanner.re"
953 {
954 token->opcode = PHANNOT_T_NULL;
955 return 0;
956 }
957 // 958 "scanner.c"
958 aa70:
959 aach = *++AACURSOR;
960 switch (aach) {
961 case '0':
962 case '1':
963 case '2':
964 case '3':
965 case '4':
966 case '5':
967 case '6':
968 case '7':
969 case '8':
970 case '9': goto aa73;
971 default: goto aa46;
972 }
973 aa71:
974 aaaccept = 0;
975 AAMARKER = ++AACURSOR;
976 aach = *AACURSOR;
977 aa72:
978 switch (aach) {
979 case '.': goto aa70;
980 case '0':
981 case '1':
982 case '2':
983 case '3':
984 case '4':
985 case '5':
986 case '6':
987 case '7':
988 case '8':
989 case '9': goto aa71;
990 default: goto aa5;
991 }
992 aa73:
993 ++AACURSOR;
994 aach = *AACURSOR;
995 switch (aach) {
996 case '0':
997 case '1':
998 case '2':
999 case '3':
1000 case '4':
1001 case '5':
1002 case '6':
1003 case '7':
1004 case '8':
1005 case '9': goto aa73;
1006 default: goto aa75;
1007 }
1008 aa75:
1009 // 71 "scanner.re"
1010 {
1011 token->opcode = PHANNOT_T_DOUBLE;
1012 token->value = estrndup(start, AACURSOR - start);
1013 token->len = AACURSOR - start;
1014 q = AACURSOR;
1015 return 0;
1016 }
1017 // 1018 "scanner.c"
1018 }
1019 // 183 "scanner.re"
1020
1021
1022 }
1023 }
1024
1025 return status;
1026 }