Skip to content

Latest commit

 

History

History
1359 lines (1332 loc) · 24.5 KB

mojoshader_lexer.c

File metadata and controls

1359 lines (1332 loc) · 24.5 KB
 
1
/* Generated by re2c 0.12.1 */
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/**
* MojoShader; generate shader programs from bytecode of compiled
* Direct3D shaders.
*
* Please see the file LICENSE.txt in the source's root directory.
*
* This file written by Ryan C. Gordon.
*/
// This was originally based on examples/pp-c.re from re2c: http://re2c.org/
// re2c is public domain code.
//
// You build mojoshader_lexer_preprocessor.c from the .re file with re2c...
// re2c -is -o mojoshader_lexer_preprocessor.c mojoshader_lexer_preprocessor.re
//
// Changes to the lexer are done to the .re file, not the C code!
//
// Please note that this isn't a perfect C lexer, since it is used for both
// HLSL and shader assembly language, and follows the quirks of Microsoft's
// tools.
#define __MOJOSHADER_INTERNAL__ 1
#include "mojoshader_internal.h"
typedef unsigned char uchar;
28
#define RET(t) do { update_state(s, cursor, token); return t; } while (0)
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#define YYCTYPE uchar
#define YYCURSOR cursor
#define YYLIMIT limit
#define YYMARKER s->lexer_marker
#define YYFILL(n) { if ((n) == 1) { RET(TOKEN_EOI); } }
static void update_state(IncludeState *s, const uchar *cur, const uchar *tok)
{
s->bytes_left -= (unsigned int) (cur - ((const uchar *) s->source));
s->source = (const char *) cur;
s->token = (const char *) tok;
} // update_state
Token preprocessor_internal_lexer(IncludeState *s)
{
const uchar *cursor = (const uchar *) s->source;
const uchar *token;
47
const uchar *limit = cursor + s->bytes_left;
48
int saw_newline = 0;
49
50
51
52
53
54
55
56
57
58
59
60
61
62
scanner_loop:
token = cursor;
if (YYLIMIT == YYCURSOR)
RET(TOKEN_EOI);
{
YYCTYPE yych;
unsigned int yyaccept = 0;
63
if((YYLIMIT - YYCURSOR) < 8) YYFILL(8);
65
66
67
68
switch(yych) {
case 0x09:
case 0x0B:
case 0x0C:
69
70
71
case ' ': goto yy61;
case 0x0A: goto yy63;
case 0x0D: goto yy65;
72
case '!': goto yy34;
74
75
76
case '#': goto yy36;
case '%': goto yy24;
case '&': goto yy28;
78
79
case '(': goto yy37;
case ')': goto yy39;
80
81
case '*': goto yy22;
case '+': goto yy18;
82
case ',': goto yy45;
83
case '-': goto yy20;
84
85
86
87
88
89
90
91
92
93
94
95
case '.': goto yy11;
case '/': goto yy2;
case '0': goto yy6;
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9': goto yy8;
96
97
case ':': goto yy49;
case ';': goto yy51;
99
case '=': goto yy32;
101
case '?': goto yy57;
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
case 'A':
case 'B':
case 'C':
case 'D':
case 'E':
case 'F':
case 'G':
case 'H':
case 'I':
case 'J':
case 'K':
case 'L':
case 'M':
case 'N':
case 'O':
case 'P':
case 'Q':
case 'R':
case 'S':
case 'T':
case 'U':
case 'V':
case 'W':
case 'X':
case 'Y':
case 'Z':
case '_':
case 'a':
case 'b':
case 'c':
case 'd':
case 'e':
case 'f':
case 'g':
case 'h':
case 'i':
case 'j':
case 'k':
case 'l':
case 'm':
case 'n':
case 'o':
case 'p':
case 'q':
case 'r':
case 's':
case 't':
case 'u':
case 'v':
case 'w':
case 'x':
case 'y':
case 'z': goto yy4;
155
156
157
case '[': goto yy41;
case '\\': goto yy59;
case ']': goto yy43;
158
case '^': goto yy26;
159
case '{': goto yy53;
160
case '|': goto yy30;
161
162
163
case '}': goto yy55;
case '~': goto yy47;
default: goto yy66;
167
if((yych = *YYCURSOR) <= '.') {
168
if(yych == '*') goto yy229;
170
171
if(yych <= '/') goto yy227;
if(yych == '=') goto yy225;
173
174
175
176
{ RET('/'); }
yy4:
++YYCURSOR;
yych = *YYCURSOR;
178
179
180
181
182
yy5:
{ RET(TOKEN_IDENTIFIER); }
yy6:
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
183
184
if(yych <= 'X') {
if(yych <= 'T') {
185
186
if(yych == 'L') goto yy199;
goto yy215;
188
189
190
if(yych <= 'U') goto yy199;
if(yych <= 'W') goto yy215;
goto yy216;
194
195
if(yych == 'l') goto yy199;
goto yy215;
197
198
199
if(yych <= 'u') goto yy199;
if(yych == 'x') goto yy216;
goto yy215;
200
201
202
203
204
205
206
}
}
yy7:
{ RET(TOKEN_INT_LITERAL); }
yy8:
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
208
209
210
yy9:
yyaccept = 1;
yych = *(YYMARKER = ++YYCURSOR);
211
if(yych == 0x0A) goto yy10;
212
if(yych != 0x0D) goto yy187;
216
217
++YYCURSOR;
if((yych = *YYCURSOR) <= '/') goto yy12;
218
if(yych <= '9') goto yy178;
219
220
221
222
223
yy12:
{ RET('.'); }
yy13:
yyaccept = 1;
yych = *(YYMARKER = ++YYCURSOR);
224
if(yych == 0x0A) goto yy10;
225
if(yych == 0x0D) goto yy10;
229
if((yych = *YYCURSOR) <= '<') goto yy15;
230
231
if(yych <= '=') goto yy162;
if(yych <= '>') goto yy164;
232
233
234
235
yy15:
{ RET('>'); }
yy16:
++YYCURSOR;
236
if((yych = *YYCURSOR) <= ';') goto yy17;
237
238
if(yych <= '<') goto yy158;
if(yych <= '=') goto yy156;
239
240
241
242
yy17:
{ RET('<'); }
yy18:
++YYCURSOR;
243
244
if((yych = *YYCURSOR) == '+') goto yy152;
if(yych == '=') goto yy154;
245
{ RET('+'); }
248
249
if((yych = *YYCURSOR) == '-') goto yy148;
if(yych == '=') goto yy150;
250
251
252
{ RET('-'); }
yy22:
++YYCURSOR;
253
if((yych = *YYCURSOR) == '=') goto yy146;
254
255
256
{ RET('*'); }
yy24:
++YYCURSOR;
257
if((yych = *YYCURSOR) == '=') goto yy144;
258
259
260
{ RET('%'); }
yy26:
++YYCURSOR;
261
if((yych = *YYCURSOR) == '=') goto yy142;
262
263
264
{ RET('^'); }
yy28:
++YYCURSOR;
265
266
if((yych = *YYCURSOR) == '&') goto yy138;
if(yych == '=') goto yy140;
267
268
269
{ RET('&'); }
yy30:
++YYCURSOR;
270
271
if((yych = *YYCURSOR) == '=') goto yy136;
if(yych == '|') goto yy134;
275
if((yych = *YYCURSOR) == '=') goto yy132;
279
if((yych = *YYCURSOR) == '=') goto yy130;
283
yych = *(YYMARKER = ++YYCURSOR);
284
285
if(yych <= 'c') {
if(yych <= 0x1F) {
286
287
if(yych == 0x09) goto yy71;
goto yy10;
289
290
291
if(yych <= ' ') goto yy71;
if(yych == '#') goto yy78;
goto yy10;
295
296
297
if(yych <= 'e') goto yy71;
if(yych == 'i') goto yy71;
goto yy10;
299
300
301
if(yych <= 'l') goto yy71;
if(yych == 'u') goto yy71;
goto yy10;
306
{ RET('('); }
309
{ RET(')'); }
312
{ RET('['); }
315
{ RET(']'); }
318
{ RET(','); }
321
{ RET('~'); }
323
324
++YYCURSOR;
{ RET(':'); }
326
327
++YYCURSOR;
{ RET(';'); }
329
330
++YYCURSOR;
{ RET('{'); }
332
333
++YYCURSOR;
{ RET('}'); }
335
336
++YYCURSOR;
{ RET('?'); }
338
339
++YYCURSOR;
{ RET('\\'); }
341
342
++YYCURSOR;
yych = *YYCURSOR;
343
344
goto yy69;
yy62:
349
{ s->line++; RET('\n'); }
350
351
352
353
yy65:
yych = *++YYCURSOR;
if(yych == 0x0A) goto yy67;
goto yy64;
362
if(YYLIMIT == YYCURSOR) YYFILL(1);
366
367
if(yych == 0x09) goto yy68;
goto yy62;
369
370
371
if(yych <= 0x0C) goto yy68;
if(yych == ' ') goto yy68;
goto yy62;
375
if((YYLIMIT - YYCURSOR) < 7) YYFILL(7);
378
379
if(yych <= 'e') {
if(yych <= 0x1F) {
380
if(yych == 0x09) goto yy70;
382
383
384
385
if(yych <= ' ') goto yy70;
if(yych <= 'c') goto yy72;
if(yych <= 'd') goto yy76;
goto yy73;
389
if(yych == 'i') goto yy74;
391
392
if(yych <= 'l') goto yy77;
if(yych == 'u') goto yy75;
397
398
399
if(yyaccept <= 1) {
if(yyaccept <= 0) {
goto yy7;
404
405
if(yyaccept <= 2) {
goto yy97;
413
414
if(yych == 'l') goto yy113;
goto yy72;
416
417
418
if(yych <= 'n') goto yy114;
if(yych == 'r') goto yy115;
goto yy72;
420
421
422
423
424
yy74:
yych = *++YYCURSOR;
if(yych == 'f') goto yy96;
if(yych == 'n') goto yy95;
goto yy72;
427
428
if(yych == 'n') goto yy90;
goto yy72;
431
432
if(yych == 'e') goto yy84;
goto yy72;
435
436
if(yych == 'i') goto yy80;
goto yy72;
437
438
439
yy78:
++YYCURSOR;
{ RET(TOKEN_HASHHASH); }
442
if(yych != 'n') goto yy72;
444
if(yych != 'e') goto yy72;
445
446
++YYCURSOR;
{ RET(TOKEN_PP_LINE); }
449
if(yych != 'f') goto yy72;
451
if(yych != 'i') goto yy72;
453
if(yych != 'n') goto yy72;
455
if(yych != 'e') goto yy72;
456
457
++YYCURSOR;
{ RET(TOKEN_PP_DEFINE); }
460
if(yych != 'd') goto yy72;
462
if(yych != 'e') goto yy72;
464
if(yych != 'f') goto yy72;
465
466
++YYCURSOR;
{ RET(TOKEN_PP_UNDEF); }
469
470
471
472
if(yych == 'c') goto yy107;
goto yy72;
yy96:
yyaccept = 2;
473
yych = *(YYMARKER = ++YYCURSOR);
474
475
476
if(yych == 'd') goto yy99;
if(yych == 'n') goto yy98;
yy97:
480
481
482
if(yych == 'd') goto yy103;
goto yy72;
yy99:
484
if(yych != 'e') goto yy72;
486
if(yych != 'f') goto yy72;
487
488
++YYCURSOR;
{ RET(TOKEN_PP_IFDEF); }
491
if(yych != 'e') goto yy72;
493
if(yych != 'f') goto yy72;
494
495
++YYCURSOR;
{ RET(TOKEN_PP_IFNDEF); }
498
if(yych != 'l') goto yy72;
500
if(yych != 'u') goto yy72;
502
if(yych != 'd') goto yy72;
504
if(yych != 'e') goto yy72;
505
506
++YYCURSOR;
{ RET(TOKEN_PP_INCLUDE); }
507
508
509
510
511
yy113:
yych = *++YYCURSOR;
if(yych == 'i') goto yy124;
if(yych == 's') goto yy125;
goto yy72;
512
513
yy114:
yych = *++YYCURSOR;
514
515
if(yych == 'd') goto yy120;
goto yy72;
516
517
yy115:
yych = *++YYCURSOR;
518
if(yych != 'r') goto yy72;
520
if(yych != 'o') goto yy72;
522
if(yych != 'r') goto yy72;
523
524
++YYCURSOR;
{ RET(TOKEN_PP_ERROR); }
527
if(yych != 'i') goto yy72;
529
if(yych != 'f') goto yy72;
530
531
++YYCURSOR;
{ RET(TOKEN_PP_ENDIF); }
534
535
536
if(yych == 'f') goto yy128;
goto yy72;
yy125:
538
if(yych != 'e') goto yy72;
539
540
++YYCURSOR;
{ RET(TOKEN_PP_ELSE); }
542
543
++YYCURSOR;
{ RET(TOKEN_PP_ELIF); }
545
546
++YYCURSOR;
{ RET(TOKEN_NEQ); }
548
549
++YYCURSOR;
{ RET(TOKEN_EQL); }
551
552
++YYCURSOR;
{ RET(TOKEN_OROR); }
555
{ RET(TOKEN_ORASSIGN); }
558
{ RET(TOKEN_ANDAND); }
561
{ RET(TOKEN_ANDASSIGN); }
564
{ RET(TOKEN_XORASSIGN); }
567
{ RET(TOKEN_MODASSIGN); }
569
570
++YYCURSOR;
{ RET(TOKEN_MULTASSIGN); }
572
573
++YYCURSOR;
{ RET(TOKEN_DECREMENT); }
575
576
++YYCURSOR;
{ RET(TOKEN_SUBASSIGN); }
578
579
++YYCURSOR;
{ RET(TOKEN_INCREMENT); }
581
582
++YYCURSOR;
{ RET(TOKEN_ADDASSIGN); }
584
585
++YYCURSOR;
{ RET(TOKEN_LEQ); }
588
if((yych = *YYCURSOR) == '=') goto yy160;
589
{ RET(TOKEN_LSHIFT); }
591
592
++YYCURSOR;
{ RET(TOKEN_LSHIFTASSIGN); }
594
595
++YYCURSOR;
{ RET(TOKEN_GEQ); }
598
if((yych = *YYCURSOR) == '=') goto yy166;
601
602
++YYCURSOR;
{ RET(TOKEN_RSHIFTASSIGN); }
605
if(YYLIMIT == YYCURSOR) YYFILL(1);
609
610
611
if(yych == 0x0A) goto yy72;
if(yych <= 0x0C) goto yy168;
goto yy72;
614
615
if(yych <= '!') goto yy168;
goto yy171;
617
if(yych != '\\') goto yy168;
622
if(YYLIMIT == YYCURSOR) YYFILL(1);
624
625
626
if(yych <= 'b') {
if(yych <= '7') {
if(yych <= '&') {
627
628
if(yych == '"') goto yy168;
goto yy72;
630
631
632
if(yych <= '\'') goto yy168;
if(yych <= '/') goto yy72;
goto yy174;
636
637
if(yych == '?') goto yy168;
goto yy72;
639
640
641
if(yych <= '\\') goto yy168;
if(yych <= '`') goto yy72;
goto yy168;
645
646
if(yych <= 'r') {
if(yych <= 'm') {
647
648
if(yych == 'f') goto yy168;
goto yy72;
650
651
652
if(yych <= 'n') goto yy168;
if(yych <= 'q') goto yy72;
goto yy168;
656
657
if(yych == 't') goto yy168;
goto yy72;
659
660
661
if(yych <= 'v') goto yy168;
if(yych == 'x') goto yy173;
goto yy72;
666
667
++YYCURSOR;
{ RET(TOKEN_STRING_LITERAL); }
670
if(YYLIMIT == YYCURSOR) YYFILL(1);
673
674
675
if(yych <= '/') goto yy72;
if(yych <= '9') goto yy176;
goto yy72;
677
678
679
680
if(yych <= 'F') goto yy176;
if(yych <= '`') goto yy72;
if(yych <= 'f') goto yy176;
goto yy72;
684
if(YYLIMIT == YYCURSOR) YYFILL(1);
686
687
if(yych <= '!') {
if(yych <= 0x0A) {
688
689
if(yych <= 0x09) goto yy168;
goto yy72;
691
692
if(yych == 0x0D) goto yy72;
goto yy168;
696
697
698
if(yych <= '"') goto yy171;
if(yych <= '/') goto yy168;
goto yy174;
700
701
if(yych == '\\') goto yy170;
goto yy168;
706
if(YYLIMIT == YYCURSOR) YYFILL(1);
708
709
if(yych <= '/') {
if(yych <= 0x0C) {
710
711
if(yych == 0x0A) goto yy72;
goto yy168;
713
714
715
if(yych <= 0x0D) goto yy72;
if(yych == '"') goto yy171;
goto yy168;
719
720
721
722
if(yych <= '9') goto yy176;
if(yych <= '@') goto yy168;
if(yych <= 'F') goto yy176;
goto yy168;
724
725
726
727
if(yych <= '\\') goto yy170;
if(yych <= '`') goto yy168;
if(yych <= 'f') goto yy176;
goto yy168;
730
731
yy178:
yyaccept = 3;
733
if((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
735
736
if(yych <= 'K') {
if(yych <= 'D') {
737
738
if(yych <= '/') goto yy180;
if(yych <= '9') goto yy178;
740
741
if(yych <= 'E') goto yy181;
if(yych <= 'F') goto yy182;
745
746
if(yych <= 'L') goto yy182;
if(yych >= 'e') goto yy181;
748
749
if(yych <= 'f') goto yy182;
if(yych == 'l') goto yy182;
753
{ RET(TOKEN_FLOAT_LITERAL); }
757
758
if(yych == '+') goto yy183;
goto yy72;
760
761
762
763
if(yych <= '-') goto yy183;
if(yych <= '/') goto yy72;
if(yych <= '9') goto yy184;
goto yy72;
765
766
767
yy182:
yych = *++YYCURSOR;
goto yy180;
770
771
if(yych <= '/') goto yy72;
if(yych >= ':') goto yy72;
774
if(YYLIMIT == YYCURSOR) YYFILL(1);
776
777
if(yych <= 'K') {
if(yych <= '9') {
778
779
if(yych <= '/') goto yy180;
goto yy184;
781
782
if(yych == 'F') goto yy182;
goto yy180;
786
787
788
if(yych <= 'L') goto yy182;
if(yych <= 'e') goto yy180;
goto yy182;
790
791
if(yych == 'l') goto yy182;
goto yy180;
796
if(YYLIMIT == YYCURSOR) YYFILL(1);
800
801
802
if(yych == 0x0A) goto yy72;
if(yych <= 0x0C) goto yy186;
goto yy72;
805
806
if(yych <= '&') goto yy186;
goto yy189;
808
if(yych != '\\') goto yy186;
813
if(YYLIMIT == YYCURSOR) YYFILL(1);
815
816
817
if(yych <= 'b') {
if(yych <= '7') {
if(yych <= '&') {
818
819
if(yych == '"') goto yy186;
goto yy72;
821
822
823
if(yych <= '\'') goto yy186;
if(yych <= '/') goto yy72;
goto yy191;
827
828
if(yych == '?') goto yy186;
goto yy72;
830
831
832
if(yych <= '\\') goto yy186;
if(yych <= '`') goto yy72;
goto yy186;
836
837
if(yych <= 'r') {
if(yych <= 'm') {
838
839
if(yych == 'f') goto yy186;
goto yy72;
841
842
843
if(yych <= 'n') goto yy186;
if(yych <= 'q') goto yy72;
goto yy186;
847
848
if(yych == 't') goto yy186;
goto yy72;
850
851
852
if(yych <= 'v') goto yy186;
if(yych == 'x') goto yy190;
goto yy72;
857
858
yych = *++YYCURSOR;
goto yy7;
861
if(YYLIMIT == YYCURSOR) YYFILL(1);
864
865
866
if(yych <= '/') goto yy72;
if(yych <= '9') goto yy193;
goto yy72;
868
869
870
871
if(yych <= 'F') goto yy193;
if(yych <= '`') goto yy72;
if(yych <= 'f') goto yy193;
goto yy72;
875
if(YYLIMIT == YYCURSOR) YYFILL(1);
877
878
if(yych <= '&') {
if(yych <= 0x0A) {
879
880
if(yych <= 0x09) goto yy186;
goto yy72;
882
883
if(yych == 0x0D) goto yy72;
goto yy186;
887
888
889
if(yych <= '\'') goto yy189;
if(yych <= '/') goto yy186;
goto yy191;
891
892
if(yych == '\\') goto yy188;
goto yy186;
897
if(YYLIMIT == YYCURSOR) YYFILL(1);
899
900
if(yych <= '/') {
if(yych <= 0x0C) {
901
902
if(yych == 0x0A) goto yy72;
goto yy186;
904
905
906
if(yych <= 0x0D) goto yy72;
if(yych == '\'') goto yy189;
goto yy186;
910
911
912
913
if(yych <= '9') goto yy193;
if(yych <= '@') goto yy186;
if(yych <= 'F') goto yy193;
goto yy186;
915
916
917
918
if(yych <= '\\') goto yy188;
if(yych <= '`') goto yy186;
if(yych <= 'f') goto yy193;
goto yy186;
921
922
yy195:
yyaccept = 3;
923
yych = *(YYMARKER = ++YYCURSOR);
924
925
926
927
if(yych == 'E') goto yy206;
if(yych == 'e') goto yy206;
goto yy205;
yy196:
928
929
yyaccept = 0;
YYMARKER = ++YYCURSOR;
930
if((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
933
934
if(yych <= 'L') {
if(yych <= '9') {
935
if(yych == '.') goto yy195;
936
if(yych <= '/') goto yy7;
939
if(yych == 'E') goto yy198;
940
if(yych <= 'K') goto yy7;
945
if(yych == 'U') goto yy199;
946
if(yych <= 'd') goto yy7;
948
949
if(yych <= 'l') {
if(yych <= 'k') goto yy7;
952
if(yych == 'u') goto yy199;
960
961
if(yych == '+') goto yy201;
goto yy72;
963
964
965
966
if(yych <= '-') goto yy201;
if(yych <= '/') goto yy72;
if(yych <= '9') goto yy202;
goto yy72;
970
if(YYLIMIT == YYCURSOR) YYFILL(1);
973
if(yych == 'L') goto yy199;
974
if(yych <= 'T') goto yy7;
977
978
if(yych <= 'l') {
if(yych <= 'k') goto yy7;
981
if(yych == 'u') goto yy199;
987
988
989
if(yych <= '/') goto yy72;
if(yych >= ':') goto yy72;
yy202:
991
if(YYLIMIT == YYCURSOR) YYFILL(1);
993
994
if(yych <= 'K') {
if(yych <= '9') {
995
996
if(yych <= '/') goto yy180;
goto yy202;
998
999
if(yych == 'F') goto yy182;
goto yy180;