1 #line 25 "./glslang.l"
2 // Copyright 2016 The SwiftShader Authors. All Rights Reserved.
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 // http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15
16 // This file is auto-generated by generate_parser.sh. DO NOT EDIT!
17
18 // Ignore errors in auto-generated code.
19 #if defined(__GNUC__)
20 #pragma GCC diagnostic ignored "-Wunused-function"
21 #pragma GCC diagnostic ignored "-Wunused-variable"
22 #pragma GCC diagnostic ignored "-Wswitch-enum"
23 #elif defined(_MSC_VER)
24 #pragma warning(disable: 4065)
25 #pragma warning(disable: 4189)
26 #pragma warning(disable: 4505)
27 #pragma warning(disable: 4701)
28 #endif
29
30
31
32 #define YY_INT_ALIGNED short int
33
34 /* A lexical scanner generated by flex */
35
36
37
38
39
40
41
42
43
44
45 #define FLEX_SCANNER
46 #define YY_FLEX_MAJOR_VERSION 2
47 #define YY_FLEX_MINOR_VERSION 6
48 #define YY_FLEX_SUBMINOR_VERSION 4
49 #if YY_FLEX_SUBMINOR_VERSION > 0
50 #define FLEX_BETA
51 #endif
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70 #ifdef yyget_lval
71 #define yyget_lval_ALREADY_DEFINED
72 #else
73 #define yyget_lval yyget_lval
74 #endif
75
76
77 #ifdef yyset_lval
78 #define yyset_lval_ALREADY_DEFINED
79 #else
80 #define yyset_lval yyset_lval
81 #endif
82
83
84
85
86
87 #ifdef yyget_lloc
88 #define yyget_lloc_ALREADY_DEFINED
89 #else
90 #define yyget_lloc yyget_lloc
91 #endif
92
93
94 #ifdef yyset_lloc
95 #define yyset_lloc_ALREADY_DEFINED
96 #else
97 #define yyset_lloc yyset_lloc
98 #endif
99
100
101
102
103
104
105
106
107
108
109
110 /* First, we deal with platform-specific or compiler-specific issues. */
111
112 /* begin standard C headers. */
113 #include <stdio.h>
114 #include <string.h>
115 #include <errno.h>
116 #include <stdlib.h>
117
118 /* end standard C headers. */
119
120 /* flex integer type definitions */
121
122 #ifndef FLEXINT_H
123 #define FLEXINT_H
124
125 /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
126
127 #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
128
129 /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
130 * if you want the limit (max/min) macros for int types.
131 */
132 #ifndef __STDC_LIMIT_MACROS
133 #define __STDC_LIMIT_MACROS 1
134 #endif
135
136 #include <inttypes.h>
137 typedef int8_t flex_int8_t;
138 typedef uint8_t flex_uint8_t;
139 typedef int16_t flex_int16_t;
140 typedef uint16_t flex_uint16_t;
141 typedef int32_t flex_int32_t;
142 typedef uint32_t flex_uint32_t;
143 #else
144 typedef signed char flex_int8_t;
145 typedef short int flex_int16_t;
146 typedef int flex_int32_t;
147 typedef unsigned char flex_uint8_t;
148 typedef unsigned short int flex_uint16_t;
149 typedef unsigned int flex_uint32_t;
150
151 /* Limits of integral types. */
152 #ifndef INT8_MIN
153 #define INT8_MIN (-128)
154 #endif
155 #ifndef INT16_MIN
156 #define INT16_MIN (-32767-1)
157 #endif
158 #ifndef INT32_MIN
159 #define INT32_MIN (-2147483647-1)
160 #endif
161 #ifndef INT8_MAX
162 #define INT8_MAX (127)
163 #endif
164 #ifndef INT16_MAX
165 #define INT16_MAX (32767)
166 #endif
167 #ifndef INT32_MAX
168 #define INT32_MAX (2147483647)
169 #endif
170 #ifndef UINT8_MAX
171 #define UINT8_MAX (255U)
172 #endif
173 #ifndef UINT16_MAX
174 #define UINT16_MAX (65535U)
175 #endif
176 #ifndef UINT32_MAX
177 #define UINT32_MAX (4294967295U)
178 #endif
179
180 #ifndef SIZE_MAX
181 #define SIZE_MAX (~(size_t)0)
182 #endif
183
184 #endif /* ! C99 */
185
186 #endif /* ! FLEXINT_H */
187
188
189 /* begin standard C++ headers. */
190
191 /* TODO: this is always defined, so inline it */
192 #define yyconst const
193
194 #if defined(__GNUC__) && __GNUC__ >= 3
195 #define yynoreturn __attribute__((__noreturn__))
196 #else
197 #define yynoreturn
198 #endif
199
200 /* Returned upon end-of-file. */
201 #define YY_NULL 0
202
203
204 /* Promotes a possibly negative, possibly signed char to an
205 * integer in range [0..255] for use as an array index.
206 */
207 #define YY_SC_TO_UI(c) ((YY_CHAR) (c))
208
209
210
211
212
213 /* An opaque pointer. */
214 #ifndef YY_TYPEDEF_YY_SCANNER_T
215 #define YY_TYPEDEF_YY_SCANNER_T
216 typedef void* yyscan_t;
217 #endif
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235 /* For convenience, these vars (plus the bison vars far below)
236 are macros in the reentrant scanner. */
237 #define yyin yyg->yyin_r
238 #define yyout yyg->yyout_r
239 #define yyextra yyg->yyextra_r
240 #define yyleng yyg->yyleng_r
241 #define yytext yyg->yytext_r
242 #define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno)
243 #define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column)
244 #define yy_flex_debug yyg->yy_flex_debug_r
245
246
247
248
249
250
251
252
253
254
255
256
257
258 /* Enter a start condition. This macro really ought to take a parameter,
259 * but we do it the disgusting crufty way forced on us by the ()-less
260 * definition of BEGIN.
261 */
262 #define BEGIN yyg->yy_start = 1 + 2 *
263 /* Translate the current start state into a value that can be later handed
264 * to BEGIN to return to the state. The YYSTATE alias is for lex
265 * compatibility.
266 */
267 #define YY_START ((yyg->yy_start - 1) / 2)
268 #define YYSTATE YY_START
269 /* Action number for EOF rule of a given start state. */
270 #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
271 /* Special action meaning "start processing a new file". */
272 #define YY_NEW_FILE yyrestart( yyin , yyscanner )
273 #define YY_END_OF_BUFFER_CHAR 0
274
275
276 /* Size of default input buffer. */
277 #ifndef YY_BUF_SIZE
278 #ifdef __ia64__
279 /* On IA-64, the buffer size is 16k, not 8k.
280 * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
281 * Ditto for the __ia64__ case accordingly.
282 */
283 #define YY_BUF_SIZE 32768
284 #else
285 #define YY_BUF_SIZE 16384
286 #endif /* __ia64__ */
287 #endif
288
289
290 /* The state buf must be large enough to hold one state per character in the main buffer.
291 */
292 #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
293
294
295
296 #ifndef YY_TYPEDEF_YY_BUFFER_STATE
297 #define YY_TYPEDEF_YY_BUFFER_STATE
298 typedef struct yy_buffer_state *YY_BUFFER_STATE;
299 #endif
300
301 #ifndef YY_TYPEDEF_YY_SIZE_T
302 #define YY_TYPEDEF_YY_SIZE_T
303 typedef size_t yy_size_t;
304 #endif
305
306
307
308
309 #define EOB_ACT_CONTINUE_SCAN 0
310 #define EOB_ACT_END_OF_FILE 1
311 #define EOB_ACT_LAST_MATCH 2
312
313 /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires
314 * access to the local variable yy_act. Since yyless() is a macro, it would break
315 * existing scanners that call yyless() from OUTSIDE yylex.
316 * One obvious solution it to make yy_act a global. I tried that, and saw
317 * a 5% performance hit in a non-yylineno scanner, because yy_act is
318 * normally declared as a register variable-- so it is not worth it.
319 */
320 #define YY_LESS_LINENO(n) \
321 do { \
322 int yyl;\
323 for ( yyl = n; yyl < yyleng; ++yyl )\
324 if ( yytext[yyl] == '\n' )\
325 --yylineno;\
326 }while(0)
327 #define YY_LINENO_REWIND_TO(dst) \
328 do {\
329 const char *p;\
330 for ( p = yy_cp-1; p >= (dst); --p)\
331 if ( *p == '\n' )\
332 --yylineno;\
333 }while(0)
334
335 /* Return all but the first "n" matched characters back to the input stream. */
336 #define yyless(n) \
337 do \
338 { \
339 /* Undo effects of setting up yytext. */ \
340 int yyless_macro_arg = (n); \
341 YY_LESS_LINENO(yyless_macro_arg);\
342 *yy_cp = yyg->yy_hold_char; \
343 YY_RESTORE_YY_MORE_OFFSET \
344 yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
345 YY_DO_BEFORE_ACTION; /* set up yytext again */ \
346 } \
347 while ( 0 )
348 #define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner )
349
350
351 #ifndef YY_STRUCT_YY_BUFFER_STATE
352 #define YY_STRUCT_YY_BUFFER_STATE
353 struct yy_buffer_state
354 {
355 FILE *yy_input_file;
356
357
358
359 char *yy_ch_buf; /* input buffer */
360 char *yy_buf_pos; /* current position in input buffer */
361
362 /* Size of input buffer in bytes, not including room for EOB
363 * characters.
364 */
365 int yy_buf_size;
366
367 /* Number of characters read into yy_ch_buf, not including EOB
368 * characters.
369 */
370 int yy_n_chars;
371
372 /* Whether we "own" the buffer - i.e., we know we created it,
373 * and can realloc() it to grow it, and should free() it to
374 * delete it.
375 */
376 int yy_is_our_buffer;
377
378 /* Whether this is an "interactive" input source; if so, and
379 * if we're using stdio for input, then we want to use getc()
380 * instead of fread(), to make sure we stop fetching input after
381 * each newline.
382 */
383 int yy_is_interactive;
384
385 /* Whether we're considered to be at the beginning of a line.
386 * If so, '^' rules will be active on the next match, otherwise
387 * not.
388 */
389 int yy_at_bol;
390
391 int yy_bs_lineno; /**< The line count. */
392 int yy_bs_column; /**< The column count. */
393
394
395 /* Whether to try to fill the input buffer when we reach the
396 * end of it.
397 */
398 int yy_fill_buffer;
399
400 int yy_buffer_status;
401
402 #define YY_BUFFER_NEW 0
403 #define YY_BUFFER_NORMAL 1
404 /* When an EOF's been seen but there's still some text to process
405 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
406 * shouldn't try reading from the input source any more. We might
407 * still have a bunch of tokens to match, though, because of
408 * possible backing-up.
409 *
410 * When we actually see the EOF, we change the status to "new"
411 * (via yyrestart()), so that the user can continue scanning by
412 * just pointing yyin at a new input file.
413 */
414 #define YY_BUFFER_EOF_PENDING 2
415
416 };
417 #endif /* !YY_STRUCT_YY_BUFFER_STATE */
418
419
420
421
422 /* We provide macros for accessing buffer states in case in the
423 * future we want to put the buffer states in a more general
424 * "scanner state".
425 *
426 * Returns the top of the stack, or NULL.
427 */
428 #define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \
429 ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \
430 : NULL)
431 /* Same as previous macro, but useful when we know that the buffer stack is not
432 * NULL or when we need an lvalue. For internal use only.
433 */
434 #define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top]
435
436
437
438
439
440 void yyrestart ( FILE *input_file , yyscan_t yyscanner );
441 void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner );
442 YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size , yyscan_t yyscanner );
443 void yy_delete_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner );
444 void yy_flush_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner );
445 void yypush_buffer_state ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner );
446 void yypop_buffer_state ( yyscan_t yyscanner );
447
448
449 static void yyensure_buffer_stack ( yyscan_t yyscanner );
450 static void yy_load_buffer_state ( yyscan_t yyscanner );
451 static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file , yyscan_t yyscanner );
452 #define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER , yyscanner)
453
454
455 YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size , yyscan_t yyscanner );
456 YY_BUFFER_STATE yy_scan_string ( const char *yy_str , yyscan_t yyscanner );
457 YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len , yyscan_t yyscanner );
458
459
460 void *yyalloc ( yy_size_t , yyscan_t yyscanner );
461 void *yyrealloc ( void *, yy_size_t , yyscan_t yyscanner );
462 void yyfree ( void * , yyscan_t yyscanner );
463
464
465 #define yy_new_buffer yy_create_buffer
466 #define yy_set_interactive(is_interactive) \
467 { \
468 if ( ! YY_CURRENT_BUFFER ){ \
469 yyensure_buffer_stack (yyscanner); \
470 YY_CURRENT_BUFFER_LVALUE = \
471 yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); \
472 } \
473 YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
474 }
475 #define yy_set_bol(at_bol) \
476 { \
477 if ( ! YY_CURRENT_BUFFER ){\
478 yyensure_buffer_stack (yyscanner); \
479 YY_CURRENT_BUFFER_LVALUE = \
480 yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); \
481 } \
482 YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
483 }
484 #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
485
486
487 /* Begin user sect3 */
488
489 #define yywrap(yyscanner) (/*CONSTCOND*/1)
490 #define YY_SKIP_YYWRAP
491 typedef flex_uint8_t YY_CHAR;
492
493
494 typedef int yy_state_type;
495
496 #define yytext_ptr yytext_r
497
498
499
500
501
502
503 static yy_state_type yy_get_previous_state ( yyscan_t yyscanner );
504 static yy_state_type yy_try_NUL_trans ( yy_state_type current_state , yyscan_t yyscanner);
505 static int yy_get_next_buffer ( yyscan_t yyscanner );
506 static void yynoreturn yy_fatal_error ( const char* msg , yyscan_t yyscanner );
507
508
509
510
511 /* Done after the current pattern has been matched and before the
512 * corresponding action - sets up yytext.
513 */
514 #define YY_DO_BEFORE_ACTION \
515 yyg->yytext_ptr = yy_bp; \
516 yyleng = (int) (yy_cp - yy_bp); \
517 yyg->yy_hold_char = *yy_cp; \
518 *yy_cp = '\0'; \
519 yyg->yy_c_buf_p = yy_cp;
520 #define YY_NUM_RULES 239
521 #define YY_END_OF_BUFFER 240
522 /* This struct is not used in this scanner,
523 but its presence is necessary. */
524 struct yy_trans_info
525 {
526 flex_int32_t yy_verify;
527 flex_int32_t yy_nxt;
528 };
529 static const flex_int16_t yy_accept[821] =
530 { 0,
531 0, 0, 0, 0, 0, 0, 240, 238, 237, 237,
532 222, 228, 233, 217, 218, 226, 225, 214, 223, 221,
533 227, 180, 180, 215, 211, 229, 216, 230, 234, 177,
534 219, 220, 232, 177, 177, 177, 177, 177, 177, 177,
535 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
536 177, 177, 177, 212, 231, 213, 224, 239, 236, 235,
537 208, 194, 213, 202, 197, 192, 200, 190, 201, 191,
538 186, 193, 185, 179, 180, 0, 183, 0, 220, 212,
539 219, 209, 205, 207, 206, 210, 177, 198, 204, 177,
540 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
541
542 177, 12, 177, 177, 177, 177, 177, 177, 177, 177,
543 177, 177, 177, 177, 177, 15, 177, 177, 23, 177,
544 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
545 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
546 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
547 177, 177, 199, 203, 235, 0, 189, 185, 0, 188,
548 182, 0, 184, 178, 195, 196, 177, 136, 177, 177,
549 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
550 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
551 177, 13, 177, 177, 177, 177, 177, 177, 177, 177,
552
553 177, 177, 27, 177, 177, 177, 177, 177, 177, 177,
554 177, 177, 177, 177, 24, 177, 177, 177, 177, 177,
555 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
556 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
557 177, 177, 177, 177, 177, 177, 177, 177, 177, 0,
558 186, 0, 185, 187, 181, 177, 177, 177, 30, 177,
559 177, 18, 174, 177, 177, 177, 177, 177, 177, 177,
560 177, 177, 177, 16, 139, 177, 177, 177, 177, 21,
561 177, 177, 143, 155, 177, 177, 177, 177, 177, 177,
562 177, 177, 177, 177, 177, 177, 152, 4, 35, 36,
563
564 37, 177, 177, 177, 177, 177, 177, 177, 177, 177,
565 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
566 177, 177, 177, 177, 177, 142, 31, 177, 177, 28,
567 177, 177, 177, 177, 177, 177, 177, 47, 48, 49,
568 29, 177, 177, 177, 177, 177, 177, 10, 56, 57,
569 58, 177, 137, 177, 177, 7, 177, 177, 177, 177,
570 164, 165, 166, 177, 32, 177, 156, 26, 167, 168,
571 169, 2, 161, 162, 163, 177, 177, 177, 25, 159,
572 177, 177, 177, 50, 51, 52, 177, 177, 177, 177,
573 177, 177, 177, 177, 177, 177, 177, 86, 177, 177,
574
575 177, 177, 177, 177, 177, 153, 177, 177, 177, 177,
576 177, 177, 177, 177, 177, 177, 177, 138, 177, 177,
577 176, 53, 54, 55, 177, 177, 14, 177, 91, 177,
578 177, 177, 177, 89, 177, 177, 177, 154, 149, 92,
579 177, 177, 177, 177, 177, 177, 144, 177, 177, 177,
580 78, 38, 41, 43, 42, 39, 45, 44, 46, 40,
581 177, 177, 177, 177, 160, 135, 177, 177, 147, 177,
582 177, 177, 34, 87, 173, 22, 148, 77, 177, 158,
583 17, 177, 177, 177, 177, 177, 177, 177, 177, 177,
584 177, 177, 177, 177, 177, 19, 33, 177, 177, 177,
585
586 177, 177, 177, 93, 94, 95, 177, 177, 177, 177,
587 177, 3, 177, 177, 177, 177, 177, 177, 177, 177,
588 177, 177, 177, 140, 177, 177, 177, 177, 177, 8,
589 177, 177, 9, 177, 177, 177, 177, 20, 79, 11,
590 150, 97, 98, 99, 177, 177, 177, 177, 177, 177,
591 177, 177, 177, 177, 177, 177, 145, 177, 177, 177,
592 81, 83, 80, 177, 177, 177, 177, 177, 177, 177,
593 141, 101, 102, 103, 177, 177, 157, 177, 146, 177,
594 177, 6, 177, 177, 177, 177, 177, 177, 177, 177,
595 177, 96, 151, 1, 177, 177, 177, 177, 177, 175,
596
597 177, 90, 5, 170, 59, 63, 177, 177, 177, 177,
598 177, 177, 177, 177, 177, 177, 177, 177, 177, 82,
599 177, 177, 177, 177, 100, 177, 177, 177, 177, 177,
600 120, 66, 67, 177, 177, 177, 177, 177, 177, 177,
601 177, 177, 177, 177, 177, 177, 88, 177, 177, 177,
602 104, 122, 70, 71, 177, 177, 84, 177, 177, 177,
603 177, 177, 177, 177, 115, 177, 177, 177, 177, 177,
604 177, 177, 177, 177, 177, 129, 177, 177, 177, 177,
605 60, 177, 177, 177, 177, 177, 177, 177, 177, 177,
606 177, 177, 177, 116, 105, 177, 106, 177, 177, 177,
607
608 130, 177, 177, 68, 177, 177, 177, 177, 177, 177,
609 177, 177, 177, 177, 177, 177, 177, 117, 177, 177,
610 131, 177, 177, 72, 107, 108, 177, 111, 177, 112,
611 177, 177, 177, 177, 177, 85, 177, 177, 177, 177,
612 61, 177, 64, 126, 177, 177, 109, 110, 177, 177,
613 177, 177, 177, 177, 177, 177, 177, 177, 124, 127,
614 118, 177, 65, 177, 177, 177, 177, 177, 177, 177,
615 177, 125, 128, 177, 177, 121, 69, 177, 177, 171,
616 177, 177, 177, 74, 177, 177, 123, 73, 177, 177,
617 177, 177, 177, 177, 132, 177, 177, 177, 177, 177,
618
619 177, 133, 177, 177, 177, 75, 177, 134, 113, 114,
620 177, 177, 177, 62, 177, 177, 172, 119, 76, 0
621 } ;
622
623 static const YY_CHAR yy_ec[256] =
624 { 0,
625 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
626 2, 2, 2, 1, 1, 1, 1, 1, 1, 1,
627 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
628 1, 2, 4, 1, 1, 1, 5, 6, 1, 7,
629 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
630 18, 19, 20, 20, 20, 21, 21, 22, 23, 24,
631 25, 26, 27, 1, 28, 29, 30, 31, 32, 33,
632 34, 34, 34, 34, 34, 34, 35, 34, 36, 34,
633 34, 37, 38, 34, 39, 34, 34, 40, 34, 34,
634 41, 1, 42, 43, 44, 1, 45, 46, 47, 48,
635
636 49, 50, 51, 52, 53, 34, 54, 55, 56, 57,
637 58, 59, 34, 60, 61, 62, 63, 64, 65, 66,
638 67, 68, 69, 70, 71, 72, 1, 1, 1, 1,
639 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
640 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
641 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
642 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
643 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
644 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
645 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
646
647 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
648 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
649 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
650 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
651 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
652 1, 1, 1, 1, 1
653 } ;
654
655 static const YY_CHAR yy_meta[73] =
656 { 0,
657 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
658 1, 1, 1, 1, 2, 2, 2, 2, 2, 2,
659 2, 1, 1, 1, 1, 1, 1, 3, 3, 3,
660 3, 2, 2, 4, 4, 4, 4, 4, 4, 4,
661 1, 1, 1, 4, 3, 3, 3, 3, 2, 2,
662 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
663 4, 4, 4, 4, 4, 4, 4, 4, 1, 1,
664 1, 1
665 } ;
666
667 static const flex_int16_t yy_base[827] =
668 { 0,
669 0, 0, 1019, 1018, 72, 0, 1020, 1023, 1023, 1023,
670 994, 120, 141, 1023, 1023, 993, 138, 1023, 137, 135,
671 992, 154, 208, 990, 1023, 154, 990, 132, 1023, 0,
672 1023, 1023, 139, 130, 123, 140, 147, 133, 177, 956,
673 186, 151, 139, 116, 161, 950, 173, 963, 193, 199,
674 208, 215, 108, 1023, 184, 1023, 1023, 1023, 1023, 0,
675 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
676 230, 1023, 235, 235, 0, 271, 1023, 0, 1023, 1023,
677 1023, 986, 1023, 1023, 1023, 985, 0, 1023, 1023, 947,
678 952, 152, 949, 957, 956, 943, 946, 957, 243, 951,
679
680 939, 936, 949, 936, 933, 933, 939, 147, 248, 933,
681 943, 929, 935, 938, 939, 0, 931, 941, 249, 940,
682 935, 916, 177, 920, 933, 924, 184, 917, 250, 929,
683 931, 257, 920, 917, 906, 915, 249, 257, 919, 915,
684 917, 906, 909, 196, 217, 269, 918, 906, 918, 262,
685 911, 910, 1023, 1023, 0, 311, 1023, 292, 328, 1023,
686 1023, 335, 342, 257, 1023, 1023, 909, 0, 905, 900,
687 904, 913, 910, 315, 894, 894, 905, 897, 215, 907,
688 904, 904, 902, 899, 891, 897, 884, 882, 894, 880,
689 896, 0, 893, 881, 888, 885, 889, 890, 883, 880,
690
691 869, 868, 881, 884, 872, 880, 868, 874, 865, 316,
692 870, 873, 864, 871, 860, 864, 855, 869, 868, 859,
693 865, 307, 849, 852, 850, 860, 850, 845, 843, 845,
694 855, 841, 843, 840, 851, 850, 853, 835, 316, 843,
695 839, 837, 846, 825, 353, 843, 845, 834, 826, 363,
696 370, 378, 389, 1023, 1023, 823, 833, 832, 0, 830,
697 383, 0, 0, 823, 821, 821, 822, 817, 825, 814,
698 831, 820, 394, 0, 0, 814, 824, 823, 823, 0,
699 808, 397, 0, 0, 810, 400, 817, 818, 809, 803,
700 802, 803, 802, 802, 406, 797, 0, 0, 793, 792,
701
702 791, 793, 794, 799, 793, 789, 802, 797, 797, 795,
703 794, 788, 782, 784, 783, 787, 779, 782, 777, 785,
704 790, 778, 775, 787, 778, 0, 0, 784, 780, 0,
705 772, 772, 777, 768, 775, 409, 772, 0, 0, 0,
706 0, 762, 774, 773, 772, 773, 773, 0, 0, 0,
707 0, 760, 0, 768, 759, 0, 758, 759, 753, 763,
708 0, 0, 0, 754, 0, 750, 0, 0, 0, 0,
709 0, 0, 0, 0, 0, 760, 413, 759, 0, 0,
710 757, 753, 750, 0, 0, 0, 742, 415, 418, 427,
711 747, 743, 748, 739, 737, 750, 735, 0, 735, 748,
712
713 737, 733, 739, 734, 741, 0, 739, 736, 740, 724,
714 722, 725, 731, 737, 732, 731, 719, 0, 721, 722,
715 0, 0, 0, 0, 719, 722, 0, 716, 0, 729,
716 709, 718, 713, 0, 706, 706, 719, 0, 721, 0,
717 431, 734, 733, 732, 699, 698, 0, 715, 714, 709,
718 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
719 698, 711, 698, 695, 0, 0, 700, 699, 0, 696,
720 703, 702, 0, 688, 0, 0, 0, 0, 685, 0,
721 0, 684, 695, 434, 688, 694, 693, 690, 685, 682,
722 675, 675, 688, 673, 685, 0, 0, 678, 701, 700,
723
724 699, 666, 665, 427, 428, 0, 677, 680, 678, 667,
725 663, 0, 675, 672, 671, 661, 660, 650, 667, 653,
726 441, 661, 664, 0, 681, 680, 679, 646, 645, 0,
727 659, 646, 0, 656, 649, 650, 653, 0, 0, 0,
728 0, 673, 672, 0, 649, 652, 637, 644, 635, 642,
729 643, 643, 642, 628, 451, 640, 0, 641, 630, 629,
730 0, 0, 0, 654, 653, 652, 619, 618, 614, 622,
731 0, 650, 649, 0, 626, 629, 0, 458, 0, 607,
732 616, 0, 612, 611, 620, 620, 608, 622, 606, 620,
733 615, 0, 0, 0, 632, 631, 630, 597, 596, 0,
734
735 596, 0, 0, 434, 454, 620, 606, 609, 592, 604,
736 592, 591, 600, 600, 617, 616, 615, 582, 581, 0,
737 581, 582, 581, 591, 0, 594, 590, 592, 588, 575,
738 606, 449, 0, 583, 586, 578, 570, 577, 568, 589,
739 577, 573, 575, 573, 573, 572, 0, 560, 559, 569,
740 0, 589, 462, 0, 566, 569, 0, 569, 568, 552,
741 544, 552, 542, 550, 0, 547, 546, 567, 555, 553,
742 553, 537, 540, 554, 538, 569, 549, 550, 547, 544,
743 554, 531, 545, 544, 528, 527, 526, 547, 535, 533,
744 533, 514, 513, 0, 541, 513, 539, 511, 515, 514,
745
746 545, 525, 522, 0, 521, 524, 520, 522, 506, 503,
747 516, 501, 502, 509, 503, 492, 491, 0, 497, 496,
748 527, 507, 504, 0, 0, 0, 500, 0, 499, 0,
749 505, 504, 488, 485, 486, 0, 478, 486, 476, 482,
750 503, 482, 0, 0, 494, 493, 0, 0, 492, 491,
751 475, 472, 473, 487, 486, 463, 462, 468, 0, 0,
752 489, 461, 487, 479, 128, 151, 196, 227, 238, 269,
753 277, 0, 0, 291, 319, 0, 0, 323, 321, 0,
754 324, 354, 393, 0, 382, 405, 0, 0, 408, 396,
755 420, 412, 438, 440, 0, 445, 429, 463, 429, 433,
756
757 435, 0, 453, 454, 445, 0, 466, 0, 0, 0,
758 447, 448, 442, 0, 443, 444, 0, 0, 0, 1023,
759 509, 512, 515, 518, 519, 520
760 } ;
761
762 static const flex_int16_t yy_def[827] =
763 { 0,
764 820, 1, 821, 821, 820, 5, 820, 820, 820, 820,
765 820, 820, 820, 820, 820, 820, 820, 820, 820, 820,
766 820, 820, 820, 820, 820, 820, 820, 820, 820, 822,
767 820, 820, 820, 822, 822, 822, 822, 822, 822, 822,
768 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
769 822, 822, 822, 820, 820, 820, 820, 820, 820, 823,
770 820, 820, 820, 820, 820, 820, 820, 820, 820, 820,
771 824, 820, 825, 22, 23, 820, 820, 826, 820, 820,
772 820, 820, 820, 820, 820, 820, 822, 820, 820, 822,
773 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
774
775 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
776 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
777 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
778 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
779 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
780 822, 822, 820, 820, 823, 820, 820, 825, 820, 820,
781 820, 820, 820, 826, 820, 820, 822, 822, 822, 822,
782 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
783 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
784 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
785
786 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
787 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
788 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
789 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
790 822, 822, 822, 822, 822, 822, 822, 822, 822, 820,
791 820, 820, 820, 820, 820, 822, 822, 822, 822, 822,
792 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
793 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
794 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
795 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
796
797 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
798 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
799 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
800 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
801 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
802 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
803 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
804 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
805 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
806 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
807
808 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
809 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
810 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
811 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
812 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
813 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
814 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
815 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
816 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
817 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
818
819 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
820 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
821 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
822 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
823 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
824 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
825 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
826 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
827 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
828 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
829
830 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
831 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
832 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
833 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
834 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
835 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
836 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
837 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
838 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
839 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
840
841 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
842 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
843 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
844 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
845 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
846 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
847 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
848 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
849 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
850 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
851
852 822, 822, 822, 822, 822, 822, 822, 822, 822, 822,
853 822, 822, 822, 822, 822, 822, 822, 822, 822, 0,
854 820, 820, 820, 820, 820, 820
855 } ;
856
857 static const flex_int16_t yy_nxt[1096] =
858 { 0,
859 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
860 18, 19, 20, 21, 22, 23, 23, 23, 23, 23,
861 23, 24, 25, 26, 27, 28, 29, 30, 30, 30,
862 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
863 31, 32, 33, 30, 34, 35, 36, 37, 38, 39,
864 40, 41, 42, 30, 43, 44, 45, 46, 47, 48,
865 49, 50, 51, 52, 53, 30, 30, 30, 54, 55,
866 56, 57, 8, 59, 58, 8, 8, 8, 8, 8,
867 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
868 8, 8, 8, 8, 8, 8, 8, 8, 8, 60,
869
870 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
871 60, 60, 8, 8, 8, 60, 60, 60, 60, 60,
872 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
873 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
874 8, 8, 8, 8, 62, 63, 64, 67, 69, 71,
875 71, 71, 71, 71, 71, 71, 85, 86, 80, 151,
876 124, 70, 68, 88, 125, 65, 73, 152, 74, 74,
877 74, 74, 74, 74, 75, 81, 90, 82, 83, 783,
878 93, 89, 94, 122, 96, 76, 95, 104, 97, 105,
879 91, 92, 77, 78, 98, 100, 123, 99, 106, 101,
880
881 116, 188, 76, 117, 102, 126, 118, 119, 153, 169,
882 103, 120, 189, 170, 121, 784, 77, 129, 127, 78,
883 73, 107, 75, 75, 75, 75, 75, 75, 75, 108,
884 113, 109, 130, 208, 110, 131, 213, 133, 114, 76,
885 111, 209, 214, 785, 134, 135, 77, 140, 136, 115,
886 141, 237, 238, 154, 137, 138, 76, 139, 142, 148,
887 144, 156, 157, 149, 145, 143, 159, 160, 146, 239,
888 77, 147, 150, 161, 820, 268, 269, 240, 156, 157,
889 162, 786, 162, 159, 160, 163, 163, 163, 163, 163,
890 163, 163, 190, 228, 177, 255, 216, 161, 178, 179,
891
892 820, 221, 230, 200, 787, 191, 201, 202, 229, 217,
893 203, 218, 204, 241, 246, 231, 247, 222, 223, 255,
894 250, 242, 250, 159, 160, 251, 251, 251, 251, 251,
895 251, 251, 299, 300, 301, 788, 789, 252, 790, 252,
896 159, 160, 253, 253, 253, 253, 253, 253, 253, 163,
897 163, 163, 163, 163, 163, 163, 163, 163, 163, 163,
898 163, 163, 163, 262, 313, 331, 791, 792, 314, 338,
899 339, 340, 793, 332, 254, 794, 263, 251, 251, 251,
900 251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
901 251, 254, 253, 253, 253, 253, 253, 253, 253, 349,
902
903 350, 351, 157, 253, 253, 253, 253, 253, 253, 253,
904 361, 362, 363, 369, 370, 371, 373, 374, 375, 157,
905 795, 160, 384, 385, 386, 422, 423, 424, 442, 443,
906 444, 452, 453, 454, 455, 456, 457, 796, 160, 797,
907 798, 445, 446, 458, 459, 460, 499, 500, 501, 525,
908 526, 527, 799, 800, 547, 549, 564, 565, 566, 502,
909 503, 637, 528, 529, 548, 550, 595, 596, 597, 567,
910 568, 638, 569, 615, 616, 617, 667, 801, 802, 598,
911 599, 639, 803, 668, 804, 669, 618, 619, 640, 687,
912 641, 642, 805, 806, 807, 808, 688, 809, 689, 810,
913
914 811, 812, 813, 814, 815, 816, 817, 818, 819, 8,
915 8, 8, 8, 87, 87, 87, 155, 155, 155, 71,
916 158, 164, 164, 782, 781, 780, 779, 778, 777, 776,
917 775, 774, 773, 772, 771, 770, 769, 768, 767, 766,
918 765, 764, 763, 762, 761, 760, 759, 758, 757, 756,
919 755, 754, 753, 752, 751, 750, 749, 748, 747, 746,
920 745, 744, 743, 742, 741, 740, 739, 738, 737, 736,
921 735, 734, 733, 732, 731, 730, 729, 728, 727, 726,
922 725, 724, 723, 722, 721, 720, 719, 718, 717, 716,
923 715, 714, 713, 712, 711, 710, 709, 708, 707, 706,
924
925 705, 704, 703, 702, 701, 700, 699, 698, 697, 696,
926 695, 694, 693, 692, 691, 690, 686, 685, 684, 683,
927 682, 681, 680, 679, 678, 677, 676, 675, 674, 673,
928 672, 671, 670, 666, 665, 664, 663, 662, 661, 660,
929 659, 658, 657, 656, 655, 654, 653, 652, 651, 650,
930 649, 648, 647, 646, 645, 644, 643, 636, 635, 634,
931 633, 632, 631, 630, 629, 628, 627, 626, 625, 624,
932 623, 622, 621, 620, 614, 613, 612, 611, 610, 609,
933 608, 607, 606, 605, 604, 603, 602, 601, 600, 594,
934 593, 592, 591, 590, 589, 588, 587, 586, 585, 584,
935
936 583, 582, 581, 580, 579, 578, 577, 576, 575, 574,
937 573, 572, 571, 570, 563, 562, 561, 560, 559, 558,
938 557, 556, 555, 554, 553, 552, 551, 546, 545, 544,
939 543, 542, 541, 540, 539, 538, 537, 536, 535, 534,
940 533, 532, 531, 530, 524, 523, 522, 521, 520, 519,
941 518, 517, 516, 515, 514, 513, 512, 511, 510, 509,
942 508, 507, 506, 505, 504, 498, 497, 496, 495, 494,
943 493, 492, 491, 490, 489, 488, 487, 486, 485, 484,
944 483, 482, 481, 480, 479, 478, 477, 476, 475, 474,
945 473, 472, 471, 470, 469, 468, 467, 466, 465, 464,
946
947 463, 462, 461, 451, 450, 449, 448, 447, 441, 440,
948 439, 438, 437, 436, 435, 434, 433, 432, 431, 430,
949 429, 428, 427, 426, 425, 421, 420, 419, 418, 417,
950 416, 415, 414, 413, 412, 411, 410, 409, 408, 407,
951 406, 405, 404, 403, 402, 401, 400, 399, 398, 397,
952 396, 395, 394, 393, 392, 391, 390, 389, 388, 387,
953 383, 382, 381, 380, 379, 378, 377, 376, 372, 368,
954 367, 366, 365, 364, 360, 359, 358, 357, 356, 355,
955 354, 353, 352, 348, 347, 346, 345, 344, 343, 342,
956 341, 337, 336, 335, 334, 333, 330, 329, 328, 327,
957
958 326, 325, 324, 323, 322, 321, 320, 319, 318, 317,
959 316, 315, 312, 311, 310, 309, 308, 307, 306, 305,
960 304, 303, 302, 298, 297, 296, 295, 294, 293, 292,
961 291, 290, 289, 288, 287, 286, 285, 284, 283, 282,
962 281, 280, 279, 278, 277, 276, 275, 274, 273, 272,
963 271, 270, 267, 266, 265, 264, 261, 260, 259, 258,
964 257, 256, 249, 248, 245, 244, 243, 236, 235, 234,
965 233, 232, 227, 226, 225, 224, 220, 219, 215, 212,
966 211, 210, 207, 206, 205, 199, 198, 197, 196, 195,
967 194, 193, 192, 187, 186, 185, 184, 183, 182, 181,
968
969 180, 176, 175, 174, 173, 172, 171, 168, 167, 166,
970 165, 132, 128, 112, 84, 79, 72, 66, 61, 820,
971 58, 58, 7, 820, 820, 820, 820, 820, 820, 820,
972 820, 820, 820, 820, 820, 820, 820, 820, 820, 820,
973 820, 820, 820, 820, 820, 820, 820, 820, 820, 820,
974 820, 820, 820, 820, 820, 820, 820, 820, 820, 820,
975 820, 820, 820, 820, 820, 820, 820, 820, 820, 820,
976 820, 820, 820, 820, 820, 820, 820, 820, 820, 820,
977 820, 820, 820, 820, 820, 820, 820, 820, 820, 820,
978 820, 820, 820, 820, 820
979
980 } ;
981
982 static const flex_int16_t yy_chk[1096] =
983 { 0,
984 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
985 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
986 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
987 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
988 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
989 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
990 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
991 1, 1, 5, 5, 5, 5, 5, 5, 5, 5,
992 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
993 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
994
995 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
996 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
997 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
998 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
999 5, 5, 5, 5, 12, 12, 13, 17, 19, 20,
1000 20, 20, 20, 20, 20, 20, 28, 28, 26, 53,
1001 44, 19, 17, 33, 44, 13, 22, 53, 22, 22,
1002 22, 22, 22, 22, 22, 26, 34, 26, 26, 765,
1003 35, 33, 35, 43, 36, 22, 35, 38, 36, 38,
1004 34, 34, 22, 22, 36, 37, 43, 36, 38, 37,
1005
1006 42, 108, 22, 42, 37, 45, 42, 42, 55, 92,
1007 37, 42, 108, 92, 42, 766, 22, 47, 45, 22,
1008 23, 39, 23, 23, 23, 23, 23, 23, 23, 39,
1009 41, 39, 47, 123, 39, 47, 127, 49, 41, 23,
1010 39, 123, 127, 767, 49, 49, 23, 50, 49, 41,
1011 50, 144, 144, 55, 49, 49, 23, 49, 50, 52,
1012 51, 71, 71, 52, 51, 50, 73, 73, 51, 145,
1013 23, 51, 52, 74, 74, 179, 179, 145, 71, 71,
1014 76, 768, 76, 73, 73, 76, 76, 76, 76, 76,
1015 76, 76, 109, 137, 99, 164, 129, 74, 99, 99,
1016
1017 74, 132, 138, 119, 769, 109, 119, 119, 137, 129,
1018 119, 129, 119, 146, 150, 138, 150, 132, 132, 164,
1019 156, 146, 156, 158, 158, 156, 156, 156, 156, 156,
1020 156, 156, 210, 210, 210, 770, 771, 159, 774, 159,
1021 158, 158, 159, 159, 159, 159, 159, 159, 159, 162,
1022 162, 162, 162, 162, 162, 162, 163, 163, 163, 163,
1023 163, 163, 163, 174, 222, 239, 775, 778, 222, 245,
1024 245, 245, 779, 239, 163, 781, 174, 250, 250, 250,
1025 250, 250, 250, 250, 251, 251, 251, 251, 251, 251,
1026 251, 163, 252, 252, 252, 252, 252, 252, 252, 261,
1027
1028 261, 261, 251, 253, 253, 253, 253, 253, 253, 253,
1029 273, 273, 273, 282, 282, 282, 286, 286, 286, 251,
1030 782, 253, 295, 295, 295, 336, 336, 336, 377, 377,
1031 377, 388, 388, 388, 389, 389, 389, 783, 253, 785,
1032 786, 377, 377, 390, 390, 390, 441, 441, 441, 484,
1033 484, 484, 789, 790, 504, 505, 521, 521, 521, 441,
1034 441, 604, 484, 484, 504, 505, 555, 555, 555, 521,
1035 521, 604, 521, 578, 578, 578, 632, 791, 792, 555,
1036 555, 605, 793, 632, 794, 632, 578, 578, 605, 653,
1037 605, 605, 796, 797, 798, 799, 653, 800, 653, 801,
1038
1039 803, 804, 805, 807, 811, 812, 813, 815, 816, 821,
1040 821, 821, 821, 822, 822, 822, 823, 823, 823, 824,
1041 825, 826, 826, 764, 763, 762, 761, 758, 757, 756,
1042 755, 754, 753, 752, 751, 750, 749, 746, 745, 742,
1043 741, 740, 739, 738, 737, 735, 734, 733, 732, 731,
1044 729, 727, 723, 722, 721, 720, 719, 717, 716, 715,
1045 714, 713, 712, 711, 710, 709, 708, 707, 706, 705,
1046 703, 702, 701, 700, 699, 698, 697, 696, 695, 693,
1047 692, 691, 690, 689, 688, 687, 686, 685, 684, 683,
1048 682, 681, 680, 679, 678, 677, 676, 675, 674, 673,
1049
1050 672, 671, 670, 669, 668, 667, 666, 664, 663, 662,
1051 661, 660, 659, 658, 656, 655, 652, 650, 649, 648,
1052 646, 645, 644, 643, 642, 641, 640, 639, 638, 637,
1053 636, 635, 634, 631, 630, 629, 628, 627, 626, 624,
1054 623, 622, 621, 619, 618, 617, 616, 615, 614, 613,
1055 612, 611, 610, 609, 608, 607, 606, 601, 599, 598,
1056 597, 596, 595, 591, 590, 589, 588, 587, 586, 585,
1057 584, 583, 581, 580, 576, 575, 573, 572, 570, 569,
1058 568, 567, 566, 565, 564, 560, 559, 558, 556, 554,
1059 553, 552, 551, 550, 549, 548, 547, 546, 545, 543,
1060
1061 542, 537, 536, 535, 534, 532, 531, 529, 528, 527,
1062 526, 525, 523, 522, 520, 519, 518, 517, 516, 515,
1063 514, 513, 511, 510, 509, 508, 507, 503, 502, 501,
1064 500, 499, 498, 495, 494, 493, 492, 491, 490, 489,
1065 488, 487, 486, 485, 483, 482, 479, 474, 472, 471,
1066 470, 468, 467, 464, 463, 462, 461, 450, 449, 448,
1067 446, 445, 444, 443, 442, 439, 437, 436, 435, 433,
1068 432, 431, 430, 428, 426, 425, 420, 419, 417, 416,
1069 415, 414, 413, 412, 411, 410, 409, 408, 407, 405,
1070 404, 403, 402, 401, 400, 399, 397, 396, 395, 394,
1071
1072 393, 392, 391, 387, 383, 382, 381, 378, 376, 366,
1073 364, 360, 359, 358, 357, 355, 354, 352, 347, 346,
1074 345, 344, 343, 342, 337, 335, 334, 333, 332, 331,
1075 329, 328, 325, 324, 323, 322, 321, 320, 319, 318,
1076 317, 316, 315, 314, 313, 312, 311, 310, 309, 308,
1077 307, 306, 305, 304, 303, 302, 301, 300, 299, 296,
1078 294, 293, 292, 291, 290, 289, 288, 287, 285, 281,
1079 279, 278, 277, 276, 272, 271, 270, 269, 268, 267,
1080 266, 265, 264, 260, 258, 257, 256, 249, 248, 247,
1081 246, 244, 243, 242, 241, 240, 238, 237, 236, 235,
1082
1083 234, 233, 232, 231, 230, 229, 228, 227, 226, 225,
1084 224, 223, 221, 220, 219, 218, 217, 216, 215, 214,
1085 213, 212, 211, 209, 208, 207, 206, 205, 204, 203,
1086 202, 201, 200, 199, 198, 197, 196, 195, 194, 193,
1087 191, 190, 189, 188, 187, 186, 185, 184, 183, 182,
1088 181, 180, 178, 177, 176, 175, 173, 172, 171, 170,
1089 169, 167, 152, 151, 149, 148, 147, 143, 142, 141,
1090 140, 139, 136, 135, 134, 133, 131, 130, 128, 126,
1091 125, 124, 122, 121, 120, 118, 117, 115, 114, 113,
1092 112, 111, 110, 107, 106, 105, 104, 103, 102, 101,
1093
1094 100, 98, 97, 96, 95, 94, 93, 91, 90, 86,
1095 82, 48, 46, 40, 27, 24, 21, 16, 11, 7,
1096 4, 3, 820, 820, 820, 820, 820, 820, 820, 820,
1097 820, 820, 820, 820, 820, 820, 820, 820, 820, 820,
1098 820, 820, 820, 820, 820, 820, 820, 820, 820, 820,
1099 820, 820, 820, 820, 820, 820, 820, 820, 820, 820,
1100 820, 820, 820, 820, 820, 820, 820, 820, 820, 820,
1101 820, 820, 820, 820, 820, 820, 820, 820, 820, 820,
1102 820, 820, 820, 820, 820, 820, 820, 820, 820, 820,
1103 820, 820, 820, 820, 820
1104
1105 } ;
1106
1107
1108 /* Table of booleans, true if rule could match eol. */
1109 static const flex_int32_t yy_rule_can_match_eol[240] =
1110 { 0,
1111 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1112 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1113 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1114 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1115 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1116 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1117 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1118 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1119 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1120 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1121 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1122 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
1123 };
1124
1125 /* The intent behind this definition is that it'll catch
1126 * any uses of REJECT which flex missed.
1127 */
1128 #define REJECT reject_used_but_not_detected
1129 #define yymore() yymore_used_but_not_detected
1130 #define YY_MORE_ADJ 0
1131 #define YY_RESTORE_YY_MORE_OFFSET
1132 /*
1133 // Copyright 2016 The SwiftShader Authors. All Rights Reserved.
1134 //
1135 // Licensed under the Apache License, Version 2.0 (the "License");
1136 // you may not use this file except in compliance with the License.
1137 // You may obtain a copy of the License at
1138 //
1139 // http://www.apache.org/licenses/LICENSE-2.0
1140 //
1141 // Unless required by applicable law or agreed to in writing, software
1142 // distributed under the License is distributed on an "AS IS" BASIS,
1143 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1144 // See the License for the specific language governing permissions and
1145 // limitations under the License.
1146
1147 This file contains the Lex specification for GLSL ES.
1148 Based on ANSI C grammar, Lex specification:
1149 http://www.lysator.liu.se/c/ANSI-C-grammar-l.html
1150
1151 IF YOU MODIFY THIS FILE YOU ALSO NEED TO RUN generate_parser.sh,
1152 WHICH GENERATES THE GLSL ES LEXER (glslang_lex.cpp).
1153 */
1154
1155 #include "glslang.h"
1156 #include "ParseHelper.h"
1157 #include "preprocessor/Token.h"
1158 #include "util.h"
1159 #include "glslang_tab.h"
1160
1161 /* windows only pragma */
1162 #ifdef _MSC_VER
1163 #pragma warning(disable : 4102)
1164 #endif
1165
1166 #define YY_USER_ACTION \
1167 yylloc->first_file = yylloc->last_file = yycolumn; \
1168 yylloc->first_line = yylloc->last_line = yylineno;
1169
1170 #define YY_INPUT(buf, result, max_size) \
1171 result = string_input(buf, max_size, yyscanner);
1172
1173 static yy_size_t string_input(char* buf, yy_size_t max_size, yyscan_t yyscanner);
1174 static int check_type(yyscan_t yyscanner);
1175 static int reserved_word(yyscan_t yyscanner);
1176 static int ES2_reserved_ES3_keyword(TParseContext *context, int token);
1177 static int ES2_keyword_ES3_reserved(TParseContext *context, int token);
1178 static int ES2_identifier_ES3_keyword(TParseContext *context, int token);
1179 static int uint_constant(TParseContext *context);
1180 static int int_constant(yyscan_t yyscanner);
1181 static int float_constant(yyscan_t yyscanner);
1182 static int floatsuffix_check(TParseContext* context);
1183
1184
1185
1186
1187 #define INITIAL 0
1188 #define COMMENT 1
1189 #define FIELDS 2
1190
1191
1192
1193
1194
1195
1196 #define YY_EXTRA_TYPE TParseContext*
1197
1198
1199
1200
1201 /* Holds the entire state of the reentrant scanner. */
1202 struct yyguts_t
1203 {
1204
1205 /* User-defined. Not touched by flex. */
1206 YY_EXTRA_TYPE yyextra_r;
1207
1208 /* The rest are the same as the globals declared in the non-reentrant scanner. */
1209 FILE *yyin_r, *yyout_r;
1210 size_t yy_buffer_stack_top; /**< index of top of stack. */
1211 size_t yy_buffer_stack_max; /**< capacity of stack. */
1212 YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */
1213 char yy_hold_char;
1214 int yy_n_chars;
1215 int yyleng_r;
1216 char *yy_c_buf_p;
1217 int yy_init;
1218 int yy_start;
1219 int yy_did_buffer_switch_on_eof;
1220 int yy_start_stack_ptr;
1221 int yy_start_stack_depth;
1222 int *yy_start_stack;
1223 yy_state_type yy_last_accepting_state;
1224 char* yy_last_accepting_cpos;
1225
1226 int yylineno_r;
1227 int yy_flex_debug_r;
1228
1229
1230
1231
1232 char *yytext_r;
1233 int yy_more_flag;
1234 int yy_more_len;
1235
1236
1237
1238 YYSTYPE * yylval_r;
1239
1240
1241
1242 YYLTYPE * yylloc_r;
1243
1244
1245 }; /* end struct yyguts_t */
1246
1247
1248
1249
1250 static int yy_init_globals ( yyscan_t yyscanner );
1251
1252
1253
1254
1255
1256 /* This must go here because YYSTYPE and YYLTYPE are included
1257 * from bison output in section 1.*/
1258 # define yylval yyg->yylval_r
1259
1260
1261
1262 # define yylloc yyg->yylloc_r
1263
1264
1265
1266 int yylex_init (yyscan_t* scanner);
1267
1268 int yylex_init_extra ( YY_EXTRA_TYPE user_defined, yyscan_t* scanner);
1269
1270
1271
1272 /* Accessor methods to globals.
1273 These are made visible to non-reentrant scanners for convenience. */
1274
1275
1276 int yylex_destroy ( yyscan_t yyscanner );
1277
1278
1279
1280 int yyget_debug ( yyscan_t yyscanner );
1281
1282
1283
1284 void yyset_debug ( int debug_flag , yyscan_t yyscanner );
1285
1286
1287
1288 YY_EXTRA_TYPE yyget_extra ( yyscan_t yyscanner );
1289
1290
1291
1292 void yyset_extra ( YY_EXTRA_TYPE user_defined , yyscan_t yyscanner );
1293
1294
1295
1296 FILE *yyget_in ( yyscan_t yyscanner );
1297
1298
1299
1300 void yyset_in ( FILE * _in_str , yyscan_t yyscanner );
1301
1302
1303
1304 FILE *yyget_out ( yyscan_t yyscanner );
1305
1306
1307
1308 void yyset_out ( FILE * _out_str , yyscan_t yyscanner );
1309
1310
1311
1312 int yyget_leng ( yyscan_t yyscanner );
1313
1314
1315
1316 char *yyget_text ( yyscan_t yyscanner );
1317
1318
1319
1320 int yyget_lineno ( yyscan_t yyscanner );
1321
1322
1323
1324 void yyset_lineno ( int _line_number , yyscan_t yyscanner );
1325
1326
1327
1328
1329 int yyget_column ( yyscan_t yyscanner );
1330
1331
1332
1333
1334
1335 void yyset_column ( int _column_no , yyscan_t yyscanner );
1336
1337
1338
1339
1340 YYSTYPE * yyget_lval ( yyscan_t yyscanner );
1341
1342
1343 void yyset_lval ( YYSTYPE * yylval_param , yyscan_t yyscanner );
1344
1345
1346
1347 YYLTYPE *yyget_lloc ( yyscan_t yyscanner );
1348
1349
1350
1351 void yyset_lloc ( YYLTYPE * yylloc_param , yyscan_t yyscanner );
1352
1353
1354
1355 /* Macros after this point can all be overridden by user definitions in
1356 * section 1.
1357 */
1358
1359 #ifndef YY_SKIP_YYWRAP
1360 #ifdef __cplusplus
1361 extern "C" int yywrap ( yyscan_t yyscanner );
1362 #else
1363 extern int yywrap ( yyscan_t yyscanner );
1364 #endif
1365 #endif
1366
1367 #ifndef YY_NO_UNPUT
1368
1369 #endif
1370
1371
1372 #ifndef yytext_ptr
1373 static void yy_flex_strncpy ( char *, const char *, int , yyscan_t yyscanner);
1374 #endif
1375
1376 #ifdef YY_NEED_STRLEN
1377 static int yy_flex_strlen ( const char * , yyscan_t yyscanner);
1378 #endif
1379
1380 #ifndef YY_NO_INPUT
1381 #ifdef __cplusplus
1382 static int yyinput ( yyscan_t yyscanner );
1383 #else
1384 static int input ( yyscan_t yyscanner );
1385 #endif
1386
1387 #endif
1388
1389
1390
1391
1392
1393
1394
1395
1396 /* Amount of stuff to slurp up with each read. */
1397 #ifndef YY_READ_BUF_SIZE
1398 #ifdef __ia64__
1399 /* On IA-64, the buffer size is 16k, not 8k */
1400 #define YY_READ_BUF_SIZE 16384
1401 #else
1402 #define YY_READ_BUF_SIZE 8192
1403 #endif /* __ia64__ */
1404 #endif
1405
1406
1407 /* Copy whatever the last rule matched to the standard output. */
1408 #ifndef ECHO
1409 /* This used to be an fputs(), but since the string might contain NUL's,
1410 * we now use fwrite().
1411 */
1412 #define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0)
1413 #endif
1414
1415
1416
1417 /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
1418 * is returned in "result".
1419 */
1420 #ifndef YY_INPUT
1421 #define YY_INPUT(buf,result,max_size) \
1422 if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
1423 { \
1424 int c = '*'; \
1425 int n; \
1426 for ( n = 0; n < max_size && \
1427 (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
1428 buf[n] = (char) c; \
1429 if ( c == '\n' ) \
1430 buf[n++] = (char) c; \
1431 if ( c == EOF && ferror( yyin ) ) \
1432 YY_FATAL_ERROR( "input in flex scanner failed" ); \
1433 result = n; \
1434 } \
1435 else \
1436 { \
1437 errno=0; \
1438 while ( (result = (int) fread(buf, 1, (yy_size_t) max_size, yyin)) == 0 && ferror(yyin)) \
1439 { \
1440 if( errno != EINTR) \
1441 { \
1442 YY_FATAL_ERROR( "input in flex scanner failed" ); \
1443 break; \
1444 } \
1445 errno=0; \
1446 clearerr(yyin); \
1447 } \
1448 }\
1449 \
1450
1451 #endif
1452
1453
1454
1455 /* No semi-colon after return; correct usage is to write "yyterminate();" -
1456 * we don't want an extra ';' after the "return" because that will cause
1457 * some compilers to complain about unreachable statements.
1458 */
1459 #ifndef yyterminate
1460 #define yyterminate() return YY_NULL
1461 #endif
1462
1463
1464 /* Number of entries by which start-condition stack grows. */
1465 #ifndef YY_START_STACK_INCR
1466 #define YY_START_STACK_INCR 25
1467 #endif
1468
1469
1470 /* Report a fatal error. */
1471 #ifndef YY_FATAL_ERROR
1472 #define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner)
1473 #endif
1474
1475
1476
1477 /* end tables serialization structures and prototypes */
1478
1479
1480
1481 /* Default declaration of generated scanner - a define so the user can
1482 * easily add parameters.
1483 */
1484 #ifndef YY_DECL
1485 #define YY_DECL_IS_OURS 1
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503 extern int yylex \
1504 (YYSTYPE * yylval_param, YYLTYPE * yylloc_param , yyscan_t yyscanner);
1505
1506 #define YY_DECL int yylex \
1507 (YYSTYPE * yylval_param, YYLTYPE * yylloc_param , yyscan_t yyscanner)
1508 #endif /* !YY_DECL */
1509
1510
1511 /* Code executed at the beginning of each rule, after yytext and yyleng
1512 * have been set up.
1513 */
1514 #ifndef YY_USER_ACTION
1515 #define YY_USER_ACTION
1516 #endif
1517
1518
1519
1520 /* Code executed at the end of each rule. */
1521 #ifndef YY_BREAK
1522 #define YY_BREAK /*LINTED*/break;
1523 #endif
1524
1525
1526
1527 #define YY_RULE_SETUP \
1528 YY_USER_ACTION
1529
1530
1531 /** The main scanner function which does all the work.
1532 */
1533 YY_DECL
1534 {
1535 yy_state_type yy_current_state;
1536 char *yy_cp, *yy_bp;
1537 int yy_act;
1538 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
1539
1540
1541
1542
1543 yylval = yylval_param;
1544
1545
1546
1547 yylloc = yylloc_param;
1548
1549
1550 if ( !yyg->yy_init )
1551 {
1552 yyg->yy_init = 1;
1553
1554 #ifdef YY_USER_INIT
1555 YY_USER_INIT;
1556 #endif
1557
1558
1559
1560 if ( ! yyg->yy_start )
1561 yyg->yy_start = 1; /* first start state */
1562
1563 if ( ! yyin )
1564 yyin = stdin;
1565
1566 if ( ! yyout )
1567 yyout = stdout;
1568
1569 if ( ! YY_CURRENT_BUFFER ) {
1570 yyensure_buffer_stack (yyscanner);
1571 YY_CURRENT_BUFFER_LVALUE =
1572 yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner);
1573 }
1574
1575 yy_load_buffer_state( yyscanner );
1576 }
1577
1578 {
1579
1580
1581
1582 TParseContext* context = yyextra;
1583
1584
1585
1586 while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */
1587 {
1588 yy_cp = yyg->yy_c_buf_p;
1589
1590 /* Support of yytext. */
1591 *yy_cp = yyg->yy_hold_char;
1592
1593 /* yy_bp points to the position in yy_ch_buf of the start of
1594 * the current run.
1595 */
1596 yy_bp = yy_cp;
1597
1598 yy_current_state = yyg->yy_start;
1599 yy_match:
1600 do
1601 {
1602 YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
1603 if ( yy_accept[yy_current_state] )
1604 {
1605 yyg->yy_last_accepting_state = yy_current_state;
1606 yyg->yy_last_accepting_cpos = yy_cp;
1607 }
1608 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
1609 {
1610 yy_current_state = (int) yy_def[yy_current_state];
1611 if ( yy_current_state >= 821 )
1612 yy_c = yy_meta[yy_c];
1613 }
1614 yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
1615 ++yy_cp;
1616 }
1617 while ( yy_current_state != 820 );
1618 yy_cp = yyg->yy_last_accepting_cpos;
1619 yy_current_state = yyg->yy_last_accepting_state;
1620
1621 yy_find_action:
1622 yy_act = yy_accept[yy_current_state];
1623
1624 YY_DO_BEFORE_ACTION;
1625
1626
1627 if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] )
1628 {
1629 int yyl;
1630 for ( yyl = 0; yyl < yyleng; ++yyl )
1631 if ( yytext[yyl] == '\n' )
1632
1633 do{ yylineno++;
1634 yycolumn=0;
1635 }while(0)
1636 ;
1637 }
1638
1639
1640 do_action: /* This label is used only to access EOF actions. */
1641
1642
1643 switch ( yy_act )
1644 { /* beginning of action switch */
1645 case 0: /* must back up */
1646 /* undo the effects of YY_DO_BEFORE_ACTION */
1647 *yy_cp = yyg->yy_hold_char;
1648 yy_cp = yyg->yy_last_accepting_cpos;
1649 yy_current_state = yyg->yy_last_accepting_state;
1650 goto yy_find_action;
1651
1652 case 1:
1653 YY_RULE_SETUP
1654 { return(INVARIANT); }
1655 YY_BREAK
1656 case 2:
1657 YY_RULE_SETUP
1658 { return(HIGH_PRECISION); }
1659 YY_BREAK
1660 case 3:
1661 YY_RULE_SETUP
1662 { return(MEDIUM_PRECISION); }
1663 YY_BREAK
1664 case 4:
1665 YY_RULE_SETUP
1666 { return(LOW_PRECISION); }
1667 YY_BREAK
1668 case 5:
1669 YY_RULE_SETUP
1670 { return(PRECISION); }
1671 YY_BREAK
1672 case 6:
1673 YY_RULE_SETUP
1674 { return ES2_keyword_ES3_reserved(context, ATTRIBUTE); }
1675 YY_BREAK
1676 case 7:
1677 YY_RULE_SETUP
1678 { return(CONST_QUAL); }
1679 YY_BREAK
1680 case 8:
1681 YY_RULE_SETUP
1682 { return(UNIFORM); }
1683 YY_BREAK
1684 case 9:
1685 YY_RULE_SETUP
1686 { return ES2_keyword_ES3_reserved(context, VARYING); }
1687 YY_BREAK
1688 case 10:
1689 YY_RULE_SETUP
1690 { return(BREAK); }
1691 YY_BREAK
1692 case 11:
1693 YY_RULE_SETUP
1694 { return(CONTINUE); }
1695 YY_BREAK
1696 case 12:
1697 YY_RULE_SETUP
1698 { return(DO); }
1699 YY_BREAK
1700 case 13:
1701 YY_RULE_SETUP
1702 { return(FOR); }
1703 YY_BREAK
1704 case 14:
1705 YY_RULE_SETUP
1706 { return(WHILE); }
1707 YY_BREAK
1708 case 15:
1709 YY_RULE_SETUP
1710 { return(IF); }
1711 YY_BREAK
1712 case 16:
1713 YY_RULE_SETUP
1714 { return(ELSE); }
1715 YY_BREAK
1716 case 17:
1717 YY_RULE_SETUP
1718 { return ES2_reserved_ES3_keyword(context, SWITCH); }
1719 YY_BREAK
1720 case 18:
1721 YY_RULE_SETUP
1722 { return ES2_reserved_ES3_keyword(context, CASE); }
1723 YY_BREAK
1724 case 19:
1725 YY_RULE_SETUP
1726 { return ES2_reserved_ES3_keyword(context, DEFAULT); }
1727 YY_BREAK
1728 case 20:
1729 YY_RULE_SETUP
1730 { return ES2_reserved_ES3_keyword(context, CENTROID); }
1731 YY_BREAK
1732 case 21:
1733 YY_RULE_SETUP
1734 { return ES2_reserved_ES3_keyword(context, FLAT); }
1735 YY_BREAK
1736 case 22:
1737 YY_RULE_SETUP
1738 { return ES2_reserved_ES3_keyword(context, SMOOTH); }
1739 YY_BREAK
1740 case 23:
1741 YY_RULE_SETUP
1742 { return(IN_QUAL); }
1743 YY_BREAK
1744 case 24:
1745 YY_RULE_SETUP
1746 { return(OUT_QUAL); }
1747 YY_BREAK
1748 case 25:
1749 YY_RULE_SETUP
1750 { return(INOUT_QUAL); }
1751 YY_BREAK
1752 case 26:
1753 YY_RULE_SETUP
1754 { context->lexAfterType = true; return(FLOAT_TYPE); }
1755 YY_BREAK
1756 case 27:
1757 YY_RULE_SETUP
1758 { context->lexAfterType = true; return(INT_TYPE); }
1759 YY_BREAK
1760 case 28:
1761 YY_RULE_SETUP
1762 { return ES2_identifier_ES3_keyword(context, UINT_TYPE); }
1763 YY_BREAK
1764 case 29:
1765 YY_RULE_SETUP
1766 { context->lexAfterType = true; return(VOID_TYPE); }
1767 YY_BREAK
1768 case 30:
1769 YY_RULE_SETUP
1770 { context->lexAfterType = true; return(BOOL_TYPE); }
1771 YY_BREAK
1772 case 31:
1773 YY_RULE_SETUP
1774 { yylval->lex.b = true; return(BOOLCONSTANT); }
1775 YY_BREAK
1776 case 32:
1777 YY_RULE_SETUP
1778 { yylval->lex.b = false; return(BOOLCONSTANT); }
1779 YY_BREAK
1780 case 33:
1781 YY_RULE_SETUP
1782 { return(DISCARD); }
1783 YY_BREAK
1784 case 34:
1785 YY_RULE_SETUP
1786 { return(RETURN); }
1787 YY_BREAK
1788 case 35:
1789 YY_RULE_SETUP
1790 { context->lexAfterType = true; return(MATRIX2); }
1791 YY_BREAK
1792 case 36:
1793 YY_RULE_SETUP
1794 { context->lexAfterType = true; return(MATRIX3); }
1795 YY_BREAK
1796 case 37:
1797 YY_RULE_SETUP
1798 { context->lexAfterType = true; return(MATRIX4); }
1799 YY_BREAK
1800 case 38:
1801 YY_RULE_SETUP
1802 { return ES2_identifier_ES3_keyword(context, MATRIX2); }
1803 YY_BREAK
1804 case 39:
1805 YY_RULE_SETUP
1806 { return ES2_identifier_ES3_keyword(context, MATRIX3); }
1807 YY_BREAK
1808 case 40:
1809 YY_RULE_SETUP
1810 { return ES2_identifier_ES3_keyword(context, MATRIX4); }
1811 YY_BREAK
1812 case 41:
1813 YY_RULE_SETUP
1814 { return ES2_identifier_ES3_keyword(context, MATRIX2x3); }
1815 YY_BREAK
1816 case 42:
1817 YY_RULE_SETUP
1818 { return ES2_identifier_ES3_keyword(context, MATRIX3x2); }
1819 YY_BREAK
1820 case 43:
1821 YY_RULE_SETUP
1822 { return ES2_identifier_ES3_keyword(context, MATRIX2x4); }
1823 YY_BREAK
1824 case 44:
1825 YY_RULE_SETUP
1826 { return ES2_identifier_ES3_keyword(context, MATRIX4x2); }
1827 YY_BREAK
1828 case 45:
1829 YY_RULE_SETUP
1830 { return ES2_identifier_ES3_keyword(context, MATRIX3x4); }
1831 YY_BREAK
1832 case 46:
1833 YY_RULE_SETUP
1834 { return ES2_identifier_ES3_keyword(context, MATRIX4x3); }
1835 YY_BREAK
1836 case 47:
1837 YY_RULE_SETUP
1838 { context->lexAfterType = true; return (VEC2); }
1839 YY_BREAK
1840 case 48:
1841 YY_RULE_SETUP
1842 { context->lexAfterType = true; return (VEC3); }
1843 YY_BREAK
1844 case 49:
1845 YY_RULE_SETUP
1846 { context->lexAfterType = true; return (VEC4); }
1847 YY_BREAK
1848 case 50:
1849 YY_RULE_SETUP
1850 { context->lexAfterType = true; return (IVEC2); }
1851 YY_BREAK
1852 case 51:
1853 YY_RULE_SETUP
1854 { context->lexAfterType = true; return (IVEC3); }
1855 YY_BREAK
1856 case 52:
1857 YY_RULE_SETUP
1858 { context->lexAfterType = true; return (IVEC4); }
1859 YY_BREAK
1860 case 53:
1861 YY_RULE_SETUP
1862 { return ES2_identifier_ES3_keyword(context, UVEC2); }
1863 YY_BREAK
1864 case 54:
1865 YY_RULE_SETUP
1866 { return ES2_identifier_ES3_keyword(context, UVEC3); }
1867 YY_BREAK
1868 case 55:
1869 YY_RULE_SETUP
1870 { return ES2_identifier_ES3_keyword(context, UVEC4); }
1871 YY_BREAK
1872 case 56:
1873 YY_RULE_SETUP
1874 { context->lexAfterType = true; return (BVEC2); }
1875 YY_BREAK
1876 case 57:
1877 YY_RULE_SETUP
1878 { context->lexAfterType = true; return (BVEC3); }
1879 YY_BREAK
1880 case 58:
1881 YY_RULE_SETUP
1882 { context->lexAfterType = true; return (BVEC4); }
1883 YY_BREAK
1884 case 59:
1885 YY_RULE_SETUP
1886 { context->lexAfterType = true; return SAMPLER2D; }
1887 YY_BREAK
1888 case 60:
1889 YY_RULE_SETUP
1890 { context->lexAfterType = true; return SAMPLERCUBE; }
1891 YY_BREAK
1892 case 61:
1893 YY_RULE_SETUP
1894 { context->lexAfterType = true; return SAMPLER2DRECT; }
1895 YY_BREAK
1896 case 62:
1897 YY_RULE_SETUP
1898 { context->lexAfterType = true; return SAMPLER_EXTERNAL_OES; }
1899 YY_BREAK
1900 case 63:
1901 YY_RULE_SETUP
1902 { context->lexAfterType = true; return SAMPLER3D; }
1903 YY_BREAK
1904 case 64:
1905 YY_RULE_SETUP
1906 { return ES2_reserved_ES3_keyword(context, SAMPLER3DRECT); }
1907 YY_BREAK
1908 case 65:
1909 YY_RULE_SETUP
1910 { return ES2_identifier_ES3_keyword(context, SAMPLER2DARRAY); }
1911 YY_BREAK
1912 case 66:
1913 YY_RULE_SETUP
1914 { return ES2_identifier_ES3_keyword(context, ISAMPLER2D); }
1915 YY_BREAK
1916 case 67:
1917 YY_RULE_SETUP
1918 { return ES2_identifier_ES3_keyword(context, ISAMPLER3D); }
1919 YY_BREAK
1920 case 68:
1921 YY_RULE_SETUP
1922 { return ES2_identifier_ES3_keyword(context, ISAMPLERCUBE); }
1923 YY_BREAK
1924 case 69:
1925 YY_RULE_SETUP
1926 { return ES2_identifier_ES3_keyword(context, ISAMPLER2DARRAY); }
1927 YY_BREAK
1928 case 70:
1929 YY_RULE_SETUP
1930 { return ES2_identifier_ES3_keyword(context, USAMPLER2D); }
1931 YY_BREAK
1932 case 71:
1933 YY_RULE_SETUP
1934 { return ES2_identifier_ES3_keyword(context, USAMPLER3D); }
1935 YY_BREAK
1936 case 72:
1937 YY_RULE_SETUP
1938 { return ES2_identifier_ES3_keyword(context, USAMPLERCUBE); }
1939 YY_BREAK
1940 case 73:
1941 YY_RULE_SETUP
1942 { return ES2_identifier_ES3_keyword(context, USAMPLER2DARRAY); }
1943 YY_BREAK
1944 case 74:
1945 YY_RULE_SETUP
1946 { return ES2_reserved_ES3_keyword(context, SAMPLER2DSHADOW); }
1947 YY_BREAK
1948 case 75:
1949 YY_RULE_SETUP
1950 { return ES2_identifier_ES3_keyword(context, SAMPLERCUBESHADOW); }
1951 YY_BREAK
1952 case 76:
1953 YY_RULE_SETUP
1954 { return ES2_identifier_ES3_keyword(context, SAMPLER2DARRAYSHADOW); }
1955 YY_BREAK
1956 case 77:
1957 YY_RULE_SETUP
1958 { context->lexAfterType = true; return(STRUCT); }
1959 YY_BREAK
1960 case 78:
1961 YY_RULE_SETUP
1962 { return ES2_identifier_ES3_keyword(context, LAYOUT); }
1963 YY_BREAK
1964 /* Reserved keywords for GLSL ES 3.00 that are not reserved for GLSL ES 1.00 */
1965 case 79:
1966 case 80:
1967 case 81:
1968 case 82:
1969 case 83:
1970 case 84:
1971 case 85:
1972 case 86:
1973 case 87:
1974 case 88:
1975 case 89:
1976 case 90:
1977 case 91:
1978 case 92:
1979 case 93:
1980 case 94:
1981 case 95:
1982 case 96:
1983 case 97:
1984 case 98:
1985 case 99:
1986 case 100:
1987 case 101:
1988 case 102:
1989 case 103:
1990 case 104:
1991 case 105:
1992 case 106:
1993 case 107:
1994 case 108:
1995 case 109:
1996 case 110:
1997 case 111:
1998 case 112:
1999 case 113:
2000 case 114:
2001 case 115:
2002 case 116:
2003 case 117:
2004 case 118:
2005 case 119:
2006 case 120:
2007 case 121:
2008 case 122:
2009 case 123:
2010 case 124:
2011 case 125:
2012 case 126:
2013 case 127:
2014 case 128:
2015 case 129:
2016 case 130:
2017 case 131:
2018 case 132:
2019 case 133:
2020 case 134:
2021 YY_RULE_SETUP
2022 {
2023 if (context->getShaderVersion() < 300) {
2024 yylval->lex.string = NewPoolTString(yytext);
2025 return check_type(yyscanner);
2026 }
2027 return reserved_word(yyscanner);
2028 }
2029 YY_BREAK
2030 /* Reserved keywords in GLSL ES 1.00 that are not reserved in GLSL ES 3.00 */
2031 case 135:
2032 YY_RULE_SETUP
2033 {
2034 if (context->getShaderVersion() >= 300)
2035 {
2036 yylval->lex.string = NewPoolTString(yytext);
2037 return check_type(yyscanner);
2038 }
2039
2040 return reserved_word(yyscanner);
2041 }
2042 YY_BREAK
2043 /* Reserved keywords */
2044 case 136:
2045 case 137:
2046 case 138:
2047 case 139:
2048 case 140:
2049 case 141:
2050 case 142:
2051 case 143:
2052 case 144:
2053 case 145:
2054 case 146:
2055 case 147:
2056 case 148:
2057 case 149:
2058 case 150:
2059 case 151:
2060 case 152:
2061 case 153:
2062 case 154:
2063 case 155:
2064 case 156:
2065 case 157:
2066 case 158:
2067 case 159:
2068 case 160:
2069 case 161:
2070 case 162:
2071 case 163:
2072 case 164:
2073 case 165:
2074 case 166:
2075 case 167:
2076 case 168:
2077 case 169:
2078 case 170:
2079 case 171:
2080 case 172:
2081 case 173:
2082 case 174:
2083 case 175:
2084 case 176:
2085 YY_RULE_SETUP
2086 { return reserved_word(yyscanner); }
2087 YY_BREAK
2088 case 177:
2089 YY_RULE_SETUP
2090 {
2091 yylval->lex.string = NewPoolTString(yytext);
2092 return check_type(yyscanner);
2093 }
2094 YY_BREAK
2095 case 178:
2096 YY_RULE_SETUP
2097 { return int_constant(yyscanner); }
2098 YY_BREAK
2099 case 179:
2100 YY_RULE_SETUP
2101 { return int_constant(yyscanner); }
2102 YY_BREAK
2103 case 180:
2104 YY_RULE_SETUP
2105 { return int_constant(yyscanner); }
2106 YY_BREAK
2107 case 181:
2108 YY_RULE_SETUP
2109 { return uint_constant(context); }
2110 YY_BREAK
2111 case 182:
2112 YY_RULE_SETUP
2113 { return uint_constant(context); }
2114 YY_BREAK
2115 case 183:
2116 YY_RULE_SETUP
2117 { return uint_constant(context); }
2118 YY_BREAK
2119 case 184:
2120 YY_RULE_SETUP
2121 { return float_constant(yyscanner); }
2122 YY_BREAK
2123 case 185:
2124 YY_RULE_SETUP
2125 { return float_constant(yyscanner); }
2126 YY_BREAK
2127 case 186:
2128 YY_RULE_SETUP
2129 { return float_constant(yyscanner); }
2130 YY_BREAK
2131 case 187:
2132 YY_RULE_SETUP
2133 { return floatsuffix_check(context); }
2134 YY_BREAK
2135 case 188:
2136 YY_RULE_SETUP
2137 { return floatsuffix_check(context); }
2138 YY_BREAK
2139 case 189:
2140 YY_RULE_SETUP
2141 { return floatsuffix_check(context); }
2142 YY_BREAK
2143 case 190:
2144 YY_RULE_SETUP
2145 { return(ADD_ASSIGN); }
2146 YY_BREAK
2147 case 191:
2148 YY_RULE_SETUP
2149 { return(SUB_ASSIGN); }
2150 YY_BREAK
2151 case 192:
2152 YY_RULE_SETUP
2153 { return(MUL_ASSIGN); }
2154 YY_BREAK
2155 case 193:
2156 YY_RULE_SETUP
2157 { return(DIV_ASSIGN); }
2158 YY_BREAK
2159 case 194:
2160 YY_RULE_SETUP
2161 { return(MOD_ASSIGN); }
2162 YY_BREAK
2163 case 195:
2164 YY_RULE_SETUP
2165 { return(LEFT_ASSIGN); }
2166 YY_BREAK
2167 case 196:
2168 YY_RULE_SETUP
2169 { return(RIGHT_ASSIGN); }
2170 YY_BREAK
2171 case 197:
2172 YY_RULE_SETUP
2173 { return(AND_ASSIGN); }
2174 YY_BREAK
2175 case 198:
2176 YY_RULE_SETUP
2177 { return(XOR_ASSIGN); }
2178 YY_BREAK
2179 case 199:
2180 YY_RULE_SETUP
2181 { return(OR_ASSIGN); }
2182 YY_BREAK
2183 case 200:
2184 YY_RULE_SETUP
2185 { return(INC_OP); }
2186 YY_BREAK
2187 case 201:
2188 YY_RULE_SETUP
2189 { return(DEC_OP); }
2190 YY_BREAK
2191 case 202:
2192 YY_RULE_SETUP
2193 { return(AND_OP); }
2194 YY_BREAK
2195 case 203:
2196 YY_RULE_SETUP
2197 { return(OR_OP); }
2198 YY_BREAK
2199 case 204:
2200 YY_RULE_SETUP
2201 { return(XOR_OP); }
2202 YY_BREAK
2203 case 205:
2204 YY_RULE_SETUP
2205 { return(LE_OP); }
2206 YY_BREAK
2207 case 206:
2208 YY_RULE_SETUP
2209 { return(GE_OP); }
2210 YY_BREAK
2211 case 207:
2212 YY_RULE_SETUP
2213 { return(EQ_OP); }
2214 YY_BREAK
2215 case 208:
2216 YY_RULE_SETUP
2217 { return(NE_OP); }
2218 YY_BREAK
2219 case 209:
2220 YY_RULE_SETUP
2221 { return(LEFT_OP); }
2222 YY_BREAK
2223 case 210:
2224 YY_RULE_SETUP
2225 { return(RIGHT_OP); }
2226 YY_BREAK
2227 case 211:
2228 YY_RULE_SETUP
2229 { context->lexAfterType = false; return(SEMICOLON); }
2230 YY_BREAK
2231 case 212:
2232 YY_RULE_SETUP
2233 { context->lexAfterType = false; return(LEFT_BRACE); }
2234 YY_BREAK
2235 case 213:
2236 YY_RULE_SETUP
2237 { return(RIGHT_BRACE); }
2238 YY_BREAK
2239 case 214:
2240 YY_RULE_SETUP
2241 { if (context->inTypeParen) context->lexAfterType = false; return(COMMA); }
2242 YY_BREAK
2243 case 215:
2244 YY_RULE_SETUP
2245 { return(COLON); }
2246 YY_BREAK
2247 case 216:
2248 YY_RULE_SETUP
2249 { context->lexAfterType = false; return(EQUAL); }
2250 YY_BREAK
2251 case 217:
2252 YY_RULE_SETUP
2253 { context->lexAfterType = false; context->inTypeParen = true; return(LEFT_PAREN); }
2254 YY_BREAK
2255 case 218:
2256 YY_RULE_SETUP
2257 { context->inTypeParen = false; return(RIGHT_PAREN); }
2258 YY_BREAK
2259 case 219:
2260 YY_RULE_SETUP
2261 { return(LEFT_BRACKET); }
2262 YY_BREAK
2263 case 220:
2264 YY_RULE_SETUP
2265 { return(RIGHT_BRACKET); }
2266 YY_BREAK
2267 case 221:
2268 YY_RULE_SETUP
2269 { BEGIN(FIELDS); return(DOT); }
2270 YY_BREAK
2271 case 222:
2272 YY_RULE_SETUP
2273 { return(BANG); }
2274 YY_BREAK
2275 case 223:
2276 YY_RULE_SETUP
2277 { return(DASH); }
2278 YY_BREAK
2279 case 224:
2280 YY_RULE_SETUP
2281 { return(TILDE); }
2282 YY_BREAK
2283 case 225:
2284 YY_RULE_SETUP
2285 { return(PLUS); }
2286 YY_BREAK
2287 case 226:
2288 YY_RULE_SETUP
2289 { return(STAR); }
2290 YY_BREAK
2291 case 227:
2292 YY_RULE_SETUP
2293 { return(SLASH); }
2294 YY_BREAK
2295 case 228:
2296 YY_RULE_SETUP
2297 { return(PERCENT); }
2298 YY_BREAK
2299 case 229:
2300 YY_RULE_SETUP
2301 { return(LEFT_ANGLE); }
2302 YY_BREAK
2303 case 230:
2304 YY_RULE_SETUP
2305 { return(RIGHT_ANGLE); }
2306 YY_BREAK
2307 case 231:
2308 YY_RULE_SETUP
2309 { return(VERTICAL_BAR); }
2310 YY_BREAK
2311 case 232:
2312 YY_RULE_SETUP
2313 { return(CARET); }
2314 YY_BREAK
2315 case 233:
2316 YY_RULE_SETUP
2317 { return(AMPERSAND); }
2318 YY_BREAK
2319 case 234:
2320 YY_RULE_SETUP
2321 { return(QUESTION); }
2322 YY_BREAK
2323 case 235:
2324 YY_RULE_SETUP
2325 {
2326 BEGIN(INITIAL);
2327 yylval->lex.string = NewPoolTString(yytext);
2328 return FIELD_SELECTION;
2329 }
2330 YY_BREAK
2331 case 236:
2332 YY_RULE_SETUP
2333 {}
2334 YY_BREAK
2335 case 237:
2336 /* rule 237 can match eol */
2337 YY_RULE_SETUP
2338 { }
2339 YY_BREAK
2340 case YY_STATE_EOF(INITIAL):
2341 case YY_STATE_EOF(COMMENT):
2342 case YY_STATE_EOF(FIELDS):
2343 { context->AfterEOF = true; yyterminate(); }
2344 YY_BREAK
2345 case 238:
2346 YY_RULE_SETUP
2347 { context->warning(*yylloc, "Unknown char", yytext, ""); return 0; }
2348 YY_BREAK
2349 case 239:
2350 YY_RULE_SETUP
2351 ECHO;
2352 YY_BREAK
2353
2354 case YY_END_OF_BUFFER:
2355 {
2356 /* Amount of text matched not including the EOB char. */
2357 int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1;
2358
2359 /* Undo the effects of YY_DO_BEFORE_ACTION. */
2360 *yy_cp = yyg->yy_hold_char;
2361 YY_RESTORE_YY_MORE_OFFSET
2362
2363 if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
2364 {
2365 /* We're scanning a new file or input source. It's
2366 * possible that this happened because the user
2367 * just pointed yyin at a new source and called
2368 * yylex(). If so, then we have to assure
2369 * consistency between YY_CURRENT_BUFFER and our
2370 * globals. Here is the right place to do so, because
2371 * this is the first action (other than possibly a
2372 * back-up) that will match for the new input source.
2373 */
2374 yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
2375 YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
2376 YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
2377 }
2378
2379 /* Note that here we test for yy_c_buf_p "<=" to the position
2380 * of the first EOB in the buffer, since yy_c_buf_p will
2381 * already have been incremented past the NUL character
2382 * (since all states make transitions on EOB to the
2383 * end-of-buffer state). Contrast this with the test
2384 * in input().
2385 */
2386 if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] )
2387 { /* This was really a NUL. */
2388 yy_state_type yy_next_state;
2389
2390 yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text;
2391
2392 yy_current_state = yy_get_previous_state( yyscanner );
2393
2394 /* Okay, we're now positioned to make the NUL
2395 * transition. We couldn't have
2396 * yy_get_previous_state() go ahead and do it
2397 * for us because it doesn't know how to deal
2398 * with the possibility of jamming (and we don't
2399 * want to build jamming into it because then it
2400 * will run more slowly).
2401 */
2402
2403 yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner);
2404
2405 yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
2406
2407 if ( yy_next_state )
2408 {
2409 /* Consume the NUL. */
2410 yy_cp = ++yyg->yy_c_buf_p;
2411 yy_current_state = yy_next_state;
2412 goto yy_match;
2413 }
2414
2415 else
2416 {
2417 yy_cp = yyg->yy_last_accepting_cpos;
2418 yy_current_state = yyg->yy_last_accepting_state;
2419 goto yy_find_action;
2420 }
2421 }
2422
2423 else switch ( yy_get_next_buffer( yyscanner ) )
2424 {
2425 case EOB_ACT_END_OF_FILE:
2426 {
2427 yyg->yy_did_buffer_switch_on_eof = 0;
2428
2429 if ( yywrap( yyscanner ) )
2430 {
2431 /* Note: because we've taken care in
2432 * yy_get_next_buffer() to have set up
2433 * yytext, we can now set up
2434 * yy_c_buf_p so that if some total
2435 * hoser (like flex itself) wants to
2436 * call the scanner after we return the
2437 * YY_NULL, it'll still work - another
2438 * YY_NULL will get returned.
2439 */
2440 yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ;
2441
2442 yy_act = YY_STATE_EOF(YY_START);
2443 goto do_action;
2444 }
2445
2446 else
2447 {
2448 if ( ! yyg->yy_did_buffer_switch_on_eof )
2449 YY_NEW_FILE;
2450 }
2451 break;
2452 }
2453
2454 case EOB_ACT_CONTINUE_SCAN:
2455 yyg->yy_c_buf_p =
2456 yyg->yytext_ptr + yy_amount_of_matched_text;
2457
2458 yy_current_state = yy_get_previous_state( yyscanner );
2459
2460 yy_cp = yyg->yy_c_buf_p;
2461 yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
2462 goto yy_match;
2463
2464 case EOB_ACT_LAST_MATCH:
2465 yyg->yy_c_buf_p =
2466 &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars];
2467
2468 yy_current_state = yy_get_previous_state( yyscanner );
2469
2470 yy_cp = yyg->yy_c_buf_p;
2471 yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
2472 goto yy_find_action;
2473 }
2474 break;
2475 }
2476
2477 default:
2478 YY_FATAL_ERROR(
2479 "fatal flex scanner internal error--no action found" );
2480 } /* end of action switch */
2481 } /* end of scanning one token */
2482 } /* end of user's declarations */
2483 } /* end of yylex */
2484
2485
2486
2487
2488
2489 /* yy_get_next_buffer - try to read in a new buffer
2490 *
2491 * Returns a code representing an action:
2492 * EOB_ACT_LAST_MATCH -
2493 * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
2494 * EOB_ACT_END_OF_FILE - end of file
2495 */
2496 static int yy_get_next_buffer (yyscan_t yyscanner)
2497 {
2498 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2499 char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
2500 char *source = yyg->yytext_ptr;
2501 int number_to_move, i;
2502 int ret_val;
2503
2504 if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] )
2505 YY_FATAL_ERROR(
2506 "fatal flex scanner internal error--end of buffer missed" );
2507
2508 if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
2509 { /* Don't try to fill the buffer, so this is an EOF. */
2510 if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 )
2511 {
2512 /* We matched a single character, the EOB, so
2513 * treat this as a final EOF.
2514 */
2515 return EOB_ACT_END_OF_FILE;
2516 }
2517
2518 else
2519 {
2520 /* We matched some text prior to the EOB, first
2521 * process it.
2522 */
2523 return EOB_ACT_LAST_MATCH;
2524 }
2525 }
2526
2527 /* Try to read more data. */
2528
2529 /* First move last chars to start of buffer. */
2530 number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr - 1);
2531
2532 for ( i = 0; i < number_to_move; ++i )
2533 *(dest++) = *(source++);
2534
2535 if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
2536 /* don't do the read, it's not guaranteed to return an EOF,
2537 * just force an EOF
2538 */
2539 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0;
2540
2541 else
2542 {
2543 int num_to_read =
2544 YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
2545
2546 while ( num_to_read <= 0 )
2547 { /* Not enough room in the buffer - grow it. */
2548
2549 /* just a shorter name for the current buffer */
2550 YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE;
2551
2552 int yy_c_buf_p_offset =
2553 (int) (yyg->yy_c_buf_p - b->yy_ch_buf);
2554
2555 if ( b->yy_is_our_buffer )
2556 {
2557 int new_size = b->yy_buf_size * 2;
2558
2559 if ( new_size <= 0 )
2560 b->yy_buf_size += b->yy_buf_size / 8;
2561 else
2562 b->yy_buf_size *= 2;
2563
2564 b->yy_ch_buf = (char *)
2565 /* Include room in for 2 EOB chars. */
2566 yyrealloc( (void *) b->yy_ch_buf,
2567 (yy_size_t) (b->yy_buf_size + 2) , yyscanner );
2568 }
2569 else
2570 /* Can't grow it, we don't own it. */
2571 b->yy_ch_buf = NULL;
2572
2573 if ( ! b->yy_ch_buf )
2574 YY_FATAL_ERROR(
2575 "fatal error - scanner input buffer overflow" );
2576
2577 yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
2578
2579 num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
2580 number_to_move - 1;
2581
2582 }
2583
2584 if ( num_to_read > YY_READ_BUF_SIZE )
2585 num_to_read = YY_READ_BUF_SIZE;
2586
2587 /* Read in more data. */
2588 YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
2589 yyg->yy_n_chars, num_to_read );
2590
2591 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
2592 }
2593
2594 if ( yyg->yy_n_chars == 0 )
2595 {
2596 if ( number_to_move == YY_MORE_ADJ )
2597 {
2598 ret_val = EOB_ACT_END_OF_FILE;
2599 yyrestart( yyin , yyscanner);
2600 }
2601
2602 else
2603 {
2604 ret_val = EOB_ACT_LAST_MATCH;
2605 YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
2606 YY_BUFFER_EOF_PENDING;
2607 }
2608 }
2609
2610 else
2611 ret_val = EOB_ACT_CONTINUE_SCAN;
2612
2613 if ((yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
2614 /* Extend the array by 50%, plus the number we really need. */
2615 int new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1);
2616 YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc(
2617 (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size , yyscanner );
2618 if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
2619 YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
2620 /* "- 2" to take care of EOB's */
2621 YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2);
2622 }
2623
2624 yyg->yy_n_chars += number_to_move;
2625 YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR;
2626 YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
2627
2628 yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
2629
2630 return ret_val;
2631 }
2632
2633
2634 /* yy_get_previous_state - get the state just before the EOB char was reached */
2635
yy_get_previous_state(yyscan_t yyscanner)2636 static yy_state_type yy_get_previous_state (yyscan_t yyscanner)
2637 {
2638 yy_state_type yy_current_state;
2639 char *yy_cp;
2640 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2641
2642 yy_current_state = yyg->yy_start;
2643
2644 for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp )
2645 {
2646 YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
2647 if ( yy_accept[yy_current_state] )
2648 {
2649 yyg->yy_last_accepting_state = yy_current_state;
2650 yyg->yy_last_accepting_cpos = yy_cp;
2651 }
2652 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
2653 {
2654 yy_current_state = (int) yy_def[yy_current_state];
2655 if ( yy_current_state >= 821 )
2656 yy_c = yy_meta[yy_c];
2657 }
2658 yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
2659 }
2660
2661 return yy_current_state;
2662 }
2663
2664
2665 /* yy_try_NUL_trans - try to make a transition on the NUL character
2666 *
2667 * synopsis
2668 * next_state = yy_try_NUL_trans( current_state );
2669 */
yy_try_NUL_trans(yy_state_type yy_current_state,yyscan_t yyscanner)2670 static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state , yyscan_t yyscanner)
2671 {
2672 int yy_is_jam;
2673 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */
2674 char *yy_cp = yyg->yy_c_buf_p;
2675
2676 YY_CHAR yy_c = 1;
2677 if ( yy_accept[yy_current_state] )
2678 {
2679 yyg->yy_last_accepting_state = yy_current_state;
2680 yyg->yy_last_accepting_cpos = yy_cp;
2681 }
2682 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
2683 {
2684 yy_current_state = (int) yy_def[yy_current_state];
2685 if ( yy_current_state >= 821 )
2686 yy_c = yy_meta[yy_c];
2687 }
2688 yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
2689 yy_is_jam = (yy_current_state == 820);
2690
2691 (void)yyg;
2692 return yy_is_jam ? 0 : yy_current_state;
2693 }
2694
2695
2696 #ifndef YY_NO_UNPUT
2697
2698 #endif
2699
2700 #ifndef YY_NO_INPUT
2701 #ifdef __cplusplus
yyinput(yyscan_t yyscanner)2702 static int yyinput (yyscan_t yyscanner)
2703 #else
2704 static int input (yyscan_t yyscanner)
2705 #endif
2706
2707 {
2708 int c;
2709 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2710
2711 *yyg->yy_c_buf_p = yyg->yy_hold_char;
2712
2713 if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
2714 {
2715 /* yy_c_buf_p now points to the character we want to return.
2716 * If this occurs *before* the EOB characters, then it's a
2717 * valid NUL; if not, then we've hit the end of the buffer.
2718 */
2719 if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] )
2720 /* This was really a NUL. */
2721 *yyg->yy_c_buf_p = '\0';
2722
2723 else
2724 { /* need more input */
2725 int offset = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr);
2726 ++yyg->yy_c_buf_p;
2727
2728 switch ( yy_get_next_buffer( yyscanner ) )
2729 {
2730 case EOB_ACT_LAST_MATCH:
2731 /* This happens because yy_g_n_b()
2732 * sees that we've accumulated a
2733 * token and flags that we need to
2734 * try matching the token before
2735 * proceeding. But for input(),
2736 * there's no matching to consider.
2737 * So convert the EOB_ACT_LAST_MATCH
2738 * to EOB_ACT_END_OF_FILE.
2739 */
2740
2741 /* Reset buffer status. */
2742 yyrestart( yyin , yyscanner);
2743
2744 /*FALLTHROUGH*/
2745
2746 case EOB_ACT_END_OF_FILE:
2747 {
2748 if ( yywrap( yyscanner ) )
2749 return 0;
2750
2751 if ( ! yyg->yy_did_buffer_switch_on_eof )
2752 YY_NEW_FILE;
2753 #ifdef __cplusplus
2754 return yyinput(yyscanner);
2755 #else
2756 return input(yyscanner);
2757 #endif
2758 }
2759
2760 case EOB_ACT_CONTINUE_SCAN:
2761 yyg->yy_c_buf_p = yyg->yytext_ptr + offset;
2762 break;
2763 }
2764 }
2765 }
2766
2767 c = *(unsigned char *) yyg->yy_c_buf_p; /* cast for 8-bit char's */
2768 *yyg->yy_c_buf_p = '\0'; /* preserve yytext */
2769 yyg->yy_hold_char = *++yyg->yy_c_buf_p;
2770
2771 if ( c == '\n' )
2772
2773 do{ yylineno++;
2774 yycolumn=0;
2775 }while(0)
2776 ;
2777
2778 return c;
2779 }
2780 #endif /* ifndef YY_NO_INPUT */
2781
2782 /** Immediately switch to a different input stream.
2783 * @param input_file A readable stream.
2784 * @param yyscanner The scanner object.
2785 * @note This function does not reset the start condition to @c INITIAL .
2786 */
yyrestart(FILE * input_file,yyscan_t yyscanner)2787 void yyrestart (FILE * input_file , yyscan_t yyscanner)
2788 {
2789 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2790
2791 if ( ! YY_CURRENT_BUFFER ){
2792 yyensure_buffer_stack (yyscanner);
2793 YY_CURRENT_BUFFER_LVALUE =
2794 yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner);
2795 }
2796
2797 yy_init_buffer( YY_CURRENT_BUFFER, input_file , yyscanner);
2798 yy_load_buffer_state( yyscanner );
2799 }
2800
2801
2802 /** Switch to a different input buffer.
2803 * @param new_buffer The new input buffer.
2804 * @param yyscanner The scanner object.
2805 */
yy_switch_to_buffer(YY_BUFFER_STATE new_buffer,yyscan_t yyscanner)2806 void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner)
2807 {
2808 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2809
2810 /* TODO. We should be able to replace this entire function body
2811 * with
2812 * yypop_buffer_state();
2813 * yypush_buffer_state(new_buffer);
2814 */
2815 yyensure_buffer_stack (yyscanner);
2816 if ( YY_CURRENT_BUFFER == new_buffer )
2817 return;
2818
2819 if ( YY_CURRENT_BUFFER )
2820 {
2821 /* Flush out information for old buffer. */
2822 *yyg->yy_c_buf_p = yyg->yy_hold_char;
2823 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p;
2824 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
2825 }
2826
2827 YY_CURRENT_BUFFER_LVALUE = new_buffer;
2828 yy_load_buffer_state( yyscanner );
2829
2830 /* We don't actually know whether we did this switch during
2831 * EOF (yywrap()) processing, but the only time this flag
2832 * is looked at is after yywrap() is called, so it's safe
2833 * to go ahead and always set it.
2834 */
2835 yyg->yy_did_buffer_switch_on_eof = 1;
2836 }
2837
2838
yy_load_buffer_state(yyscan_t yyscanner)2839 static void yy_load_buffer_state (yyscan_t yyscanner)
2840 {
2841 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2842 yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
2843 yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
2844 yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
2845 yyg->yy_hold_char = *yyg->yy_c_buf_p;
2846 }
2847
2848 /** Allocate and initialize an input buffer state.
2849 * @param file A readable stream.
2850 * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
2851 * @param yyscanner The scanner object.
2852 * @return the allocated buffer state.
2853 */
yy_create_buffer(FILE * file,int size,yyscan_t yyscanner)2854 YY_BUFFER_STATE yy_create_buffer (FILE * file, int size , yyscan_t yyscanner)
2855 {
2856 YY_BUFFER_STATE b;
2857
2858 b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) , yyscanner );
2859 if ( ! b )
2860 YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
2861
2862 b->yy_buf_size = size;
2863
2864 /* yy_ch_buf has to be 2 characters longer than the size given because
2865 * we need to put in 2 end-of-buffer characters.
2866 */
2867 b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) , yyscanner );
2868 if ( ! b->yy_ch_buf )
2869 YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
2870
2871 b->yy_is_our_buffer = 1;
2872
2873 yy_init_buffer( b, file , yyscanner);
2874
2875 return b;
2876 }
2877
2878
2879 /** Destroy the buffer.
2880 * @param b a buffer created with yy_create_buffer()
2881 * @param yyscanner The scanner object.
2882 */
yy_delete_buffer(YY_BUFFER_STATE b,yyscan_t yyscanner)2883 void yy_delete_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner)
2884 {
2885 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2886
2887 if ( ! b )
2888 return;
2889
2890 if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
2891 YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
2892
2893 if ( b->yy_is_our_buffer )
2894 yyfree( (void *) b->yy_ch_buf , yyscanner );
2895
2896 yyfree( (void *) b , yyscanner );
2897 }
2898
2899
2900 /* Initializes or reinitializes a buffer.
2901 * This function is sometimes called more than once on the same buffer,
2902 * such as during a yyrestart() or at EOF.
2903 */
yy_init_buffer(YY_BUFFER_STATE b,FILE * file,yyscan_t yyscanner)2904 static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file , yyscan_t yyscanner)
2905
2906 {
2907 int oerrno = errno;
2908 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2909
2910 yy_flush_buffer( b , yyscanner);
2911
2912 b->yy_input_file = file;
2913 b->yy_fill_buffer = 1;
2914
2915 /* If b is the current buffer, then yy_init_buffer was _probably_
2916 * called from yyrestart() or through yy_get_next_buffer.
2917 * In that case, we don't want to reset the lineno or column.
2918 */
2919 if (b != YY_CURRENT_BUFFER){
2920 b->yy_bs_lineno = 1;
2921 b->yy_bs_column = 0;
2922 }
2923
2924
2925
2926 b->yy_is_interactive = 0;
2927
2928
2929 errno = oerrno;
2930 }
2931
2932 /** Discard all buffered characters. On the next scan, YY_INPUT will be called.
2933 * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
2934 * @param yyscanner The scanner object.
2935 */
yy_flush_buffer(YY_BUFFER_STATE b,yyscan_t yyscanner)2936 void yy_flush_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner)
2937 {
2938 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2939 if ( ! b )
2940 return;
2941
2942 b->yy_n_chars = 0;
2943
2944 /* We always need two end-of-buffer characters. The first causes
2945 * a transition to the end-of-buffer state. The second causes
2946 * a jam in that state.
2947 */
2948 b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
2949 b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
2950
2951 b->yy_buf_pos = &b->yy_ch_buf[0];
2952
2953 b->yy_at_bol = 1;
2954 b->yy_buffer_status = YY_BUFFER_NEW;
2955
2956 if ( b == YY_CURRENT_BUFFER )
2957 yy_load_buffer_state( yyscanner );
2958 }
2959
2960 /** Pushes the new state onto the stack. The new state becomes
2961 * the current state. This function will allocate the stack
2962 * if necessary.
2963 * @param new_buffer The new state.
2964 * @param yyscanner The scanner object.
2965 */
yypush_buffer_state(YY_BUFFER_STATE new_buffer,yyscan_t yyscanner)2966 void yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner)
2967 {
2968 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2969 if (new_buffer == NULL)
2970 return;
2971
2972 yyensure_buffer_stack(yyscanner);
2973
2974 /* This block is copied from yy_switch_to_buffer. */
2975 if ( YY_CURRENT_BUFFER )
2976 {
2977 /* Flush out information for old buffer. */
2978 *yyg->yy_c_buf_p = yyg->yy_hold_char;
2979 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p;
2980 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
2981 }
2982
2983 /* Only push if top exists. Otherwise, replace top. */
2984 if (YY_CURRENT_BUFFER)
2985 yyg->yy_buffer_stack_top++;
2986 YY_CURRENT_BUFFER_LVALUE = new_buffer;
2987
2988 /* copied from yy_switch_to_buffer. */
2989 yy_load_buffer_state( yyscanner );
2990 yyg->yy_did_buffer_switch_on_eof = 1;
2991 }
2992
2993
2994 /** Removes and deletes the top of the stack, if present.
2995 * The next element becomes the new top.
2996 * @param yyscanner The scanner object.
2997 */
yypop_buffer_state(yyscan_t yyscanner)2998 void yypop_buffer_state (yyscan_t yyscanner)
2999 {
3000 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3001 if (!YY_CURRENT_BUFFER)
3002 return;
3003
3004 yy_delete_buffer(YY_CURRENT_BUFFER , yyscanner);
3005 YY_CURRENT_BUFFER_LVALUE = NULL;
3006 if (yyg->yy_buffer_stack_top > 0)
3007 --yyg->yy_buffer_stack_top;
3008
3009 if (YY_CURRENT_BUFFER) {
3010 yy_load_buffer_state( yyscanner );
3011 yyg->yy_did_buffer_switch_on_eof = 1;
3012 }
3013 }
3014
3015
3016 /* Allocates the stack if it does not exist.
3017 * Guarantees space for at least one push.
3018 */
yyensure_buffer_stack(yyscan_t yyscanner)3019 static void yyensure_buffer_stack (yyscan_t yyscanner)
3020 {
3021 yy_size_t num_to_alloc;
3022 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3023
3024 if (!yyg->yy_buffer_stack) {
3025
3026 /* First allocation is just for 2 elements, since we don't know if this
3027 * scanner will even need a stack. We use 2 instead of 1 to avoid an
3028 * immediate realloc on the next call.
3029 */
3030 num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */
3031 yyg->yy_buffer_stack = (struct yy_buffer_state**)yyalloc
3032 (num_to_alloc * sizeof(struct yy_buffer_state*)
3033 , yyscanner);
3034 if ( ! yyg->yy_buffer_stack )
3035 YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
3036
3037
3038 memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*));
3039
3040 yyg->yy_buffer_stack_max = num_to_alloc;
3041 yyg->yy_buffer_stack_top = 0;
3042 return;
3043 }
3044
3045 if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){
3046
3047 /* Increase the buffer to prepare for a possible push. */
3048 yy_size_t grow_size = 8 /* arbitrary grow size */;
3049
3050 num_to_alloc = yyg->yy_buffer_stack_max + grow_size;
3051 yyg->yy_buffer_stack = (struct yy_buffer_state**)yyrealloc
3052 (yyg->yy_buffer_stack,
3053 num_to_alloc * sizeof(struct yy_buffer_state*)
3054 , yyscanner);
3055 if ( ! yyg->yy_buffer_stack )
3056 YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
3057
3058 /* zero only the new slots.*/
3059 memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*));
3060 yyg->yy_buffer_stack_max = num_to_alloc;
3061 }
3062 }
3063
3064
3065
3066
3067
3068 /** Setup the input buffer state to scan directly from a user-specified character buffer.
3069 * @param base the character buffer
3070 * @param size the size in bytes of the character buffer
3071 * @param yyscanner The scanner object.
3072 * @return the newly allocated buffer state object.
3073 */
yy_scan_buffer(char * base,yy_size_t size,yyscan_t yyscanner)3074 YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size , yyscan_t yyscanner)
3075 {
3076 YY_BUFFER_STATE b;
3077
3078 if ( size < 2 ||
3079 base[size-2] != YY_END_OF_BUFFER_CHAR ||
3080 base[size-1] != YY_END_OF_BUFFER_CHAR )
3081 /* They forgot to leave room for the EOB's. */
3082 return NULL;
3083
3084 b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) , yyscanner );
3085 if ( ! b )
3086 YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
3087
3088 b->yy_buf_size = (int) (size - 2); /* "- 2" to take care of EOB's */
3089 b->yy_buf_pos = b->yy_ch_buf = base;
3090 b->yy_is_our_buffer = 0;
3091 b->yy_input_file = NULL;
3092 b->yy_n_chars = b->yy_buf_size;
3093 b->yy_is_interactive = 0;
3094 b->yy_at_bol = 1;
3095 b->yy_fill_buffer = 0;
3096 b->yy_buffer_status = YY_BUFFER_NEW;
3097
3098 yy_switch_to_buffer( b , yyscanner );
3099
3100 return b;
3101 }
3102
3103
3104
3105
3106 /** Setup the input buffer state to scan a string. The next call to yylex() will
3107 * scan from a @e copy of @a str.
3108 * @param yystr a NUL-terminated string to scan
3109 * @param yyscanner The scanner object.
3110 * @return the newly allocated buffer state object.
3111 * @note If you want to scan bytes that may contain NUL values, then use
3112 * yy_scan_bytes() instead.
3113 */
yy_scan_string(const char * yystr,yyscan_t yyscanner)3114 YY_BUFFER_STATE yy_scan_string (const char * yystr , yyscan_t yyscanner)
3115 {
3116
3117 return yy_scan_bytes( yystr, (int) strlen(yystr) , yyscanner);
3118 }
3119
3120
3121
3122
3123 /** Setup the input buffer state to scan the given bytes. The next call to yylex() will
3124 * scan from a @e copy of @a bytes.
3125 * @param yybytes the byte buffer to scan
3126 * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
3127 * @param yyscanner The scanner object.
3128 * @return the newly allocated buffer state object.
3129 */
yy_scan_bytes(const char * yybytes,int _yybytes_len,yyscan_t yyscanner)3130 YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, int _yybytes_len , yyscan_t yyscanner)
3131 {
3132 YY_BUFFER_STATE b;
3133 char *buf;
3134 yy_size_t n;
3135 int i;
3136
3137 /* Get memory for full buffer, including space for trailing EOB's. */
3138 n = (yy_size_t) (_yybytes_len + 2);
3139 buf = (char *) yyalloc( n , yyscanner );
3140 if ( ! buf )
3141 YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
3142
3143 for ( i = 0; i < _yybytes_len; ++i )
3144 buf[i] = yybytes[i];
3145
3146 buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
3147
3148 b = yy_scan_buffer( buf, n , yyscanner);
3149 if ( ! b )
3150 YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
3151
3152 /* It's okay to grow etc. this buffer, and we should throw it
3153 * away when we're done.
3154 */
3155 b->yy_is_our_buffer = 1;
3156
3157 return b;
3158 }
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170 #ifndef YY_EXIT_FAILURE
3171 #define YY_EXIT_FAILURE 2
3172 #endif
3173
yy_fatal_error(const char * msg,yyscan_t yyscanner)3174 static void yynoreturn yy_fatal_error (const char* msg , yyscan_t yyscanner)
3175 {
3176 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3177 (void)yyg;
3178 fprintf( stderr, "%s\n", msg );
3179 exit( YY_EXIT_FAILURE );
3180 }
3181
3182 /* Redefine yyless() so it works in section 3 code. */
3183
3184 #undef yyless
3185 #define yyless(n) \
3186 do \
3187 { \
3188 /* Undo effects of setting up yytext. */ \
3189 int yyless_macro_arg = (n); \
3190 YY_LESS_LINENO(yyless_macro_arg);\
3191 yytext[yyleng] = yyg->yy_hold_char; \
3192 yyg->yy_c_buf_p = yytext + yyless_macro_arg; \
3193 yyg->yy_hold_char = *yyg->yy_c_buf_p; \
3194 *yyg->yy_c_buf_p = '\0'; \
3195 yyleng = yyless_macro_arg; \
3196 } \
3197 while ( 0 )
3198
3199
3200
3201 /* Accessor methods (get/set functions) to struct members. */
3202
3203
3204 /** Get the user-defined data for this scanner.
3205 * @param yyscanner The scanner object.
3206 */
yyget_extra(yyscan_t yyscanner)3207 YY_EXTRA_TYPE yyget_extra (yyscan_t yyscanner)
3208 {
3209 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3210 return yyextra;
3211 }
3212
3213
3214
3215 /** Get the current line number.
3216 * @param yyscanner The scanner object.
3217 */
yyget_lineno(yyscan_t yyscanner)3218 int yyget_lineno (yyscan_t yyscanner)
3219 {
3220 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3221
3222
3223 if (! YY_CURRENT_BUFFER)
3224 return 0;
3225
3226 return yylineno;
3227 }
3228
3229
3230
3231
3232 /** Get the current column number.
3233 * @param yyscanner The scanner object.
3234 */
yyget_column(yyscan_t yyscanner)3235 int yyget_column (yyscan_t yyscanner)
3236 {
3237 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3238
3239
3240 if (! YY_CURRENT_BUFFER)
3241 return 0;
3242
3243 return yycolumn;
3244 }
3245
3246
3247
3248
3249 /** Get the input stream.
3250 * @param yyscanner The scanner object.
3251 */
yyget_in(yyscan_t yyscanner)3252 FILE *yyget_in (yyscan_t yyscanner)
3253 {
3254 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3255 return yyin;
3256 }
3257
3258
3259
3260 /** Get the output stream.
3261 * @param yyscanner The scanner object.
3262 */
yyget_out(yyscan_t yyscanner)3263 FILE *yyget_out (yyscan_t yyscanner)
3264 {
3265 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3266 return yyout;
3267 }
3268
3269
3270
3271 /** Get the length of the current token.
3272 * @param yyscanner The scanner object.
3273 */
yyget_leng(yyscan_t yyscanner)3274 int yyget_leng (yyscan_t yyscanner)
3275 {
3276 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3277 return yyleng;
3278 }
3279
3280
3281 /** Get the current token.
3282 * @param yyscanner The scanner object.
3283 */
3284
yyget_text(yyscan_t yyscanner)3285 char *yyget_text (yyscan_t yyscanner)
3286 {
3287 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3288 return yytext;
3289 }
3290
3291
3292
3293 /** Set the user-defined data. This data is never touched by the scanner.
3294 * @param user_defined The data to be associated with this scanner.
3295 * @param yyscanner The scanner object.
3296 */
yyset_extra(YY_EXTRA_TYPE user_defined,yyscan_t yyscanner)3297 void yyset_extra (YY_EXTRA_TYPE user_defined , yyscan_t yyscanner)
3298 {
3299 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3300 yyextra = user_defined ;
3301 }
3302
3303
3304
3305 /** Set the current line number.
3306 * @param _line_number line number
3307 * @param yyscanner The scanner object.
3308 */
yyset_lineno(int _line_number,yyscan_t yyscanner)3309 void yyset_lineno (int _line_number , yyscan_t yyscanner)
3310 {
3311 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3312
3313
3314 /* lineno is only valid if an input buffer exists. */
3315 if (! YY_CURRENT_BUFFER )
3316 YY_FATAL_ERROR( "yyset_lineno called with no buffer" );
3317
3318 yylineno = _line_number;
3319 }
3320
3321
3322
3323
3324 /** Set the current column.
3325 * @param _column_no column number
3326 * @param yyscanner The scanner object.
3327 */
yyset_column(int _column_no,yyscan_t yyscanner)3328 void yyset_column (int _column_no , yyscan_t yyscanner)
3329 {
3330 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3331
3332
3333 /* column is only valid if an input buffer exists. */
3334 if (! YY_CURRENT_BUFFER )
3335 YY_FATAL_ERROR( "yyset_column called with no buffer" );
3336
3337 yycolumn = _column_no;
3338 }
3339
3340
3341
3342
3343
3344 /** Set the input stream. This does not discard the current
3345 * input buffer.
3346 * @param _in_str A readable stream.
3347 * @param yyscanner The scanner object.
3348 * @see yy_switch_to_buffer
3349 */
yyset_in(FILE * _in_str,yyscan_t yyscanner)3350 void yyset_in (FILE * _in_str , yyscan_t yyscanner)
3351 {
3352 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3353 yyin = _in_str ;
3354 }
3355
3356
3357
yyset_out(FILE * _out_str,yyscan_t yyscanner)3358 void yyset_out (FILE * _out_str , yyscan_t yyscanner)
3359 {
3360 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3361 yyout = _out_str ;
3362 }
3363
3364
3365
3366
yyget_debug(yyscan_t yyscanner)3367 int yyget_debug (yyscan_t yyscanner)
3368 {
3369 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3370 return yy_flex_debug;
3371 }
3372
3373
3374
yyset_debug(int _bdebug,yyscan_t yyscanner)3375 void yyset_debug (int _bdebug , yyscan_t yyscanner)
3376 {
3377 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3378 yy_flex_debug = _bdebug ;
3379 }
3380
3381
3382 /* Accessor methods for yylval and yylloc */
3383
3384
yyget_lval(yyscan_t yyscanner)3385 YYSTYPE * yyget_lval (yyscan_t yyscanner)
3386 {
3387 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3388 return yylval;
3389 }
3390
3391
3392
yyset_lval(YYSTYPE * yylval_param,yyscan_t yyscanner)3393 void yyset_lval (YYSTYPE * yylval_param , yyscan_t yyscanner)
3394 {
3395 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3396 yylval = yylval_param;
3397 }
3398
3399
3400
3401
yyget_lloc(yyscan_t yyscanner)3402 YYLTYPE *yyget_lloc (yyscan_t yyscanner)
3403 {
3404 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3405 return yylloc;
3406 }
3407
3408
3409
yyset_lloc(YYLTYPE * yylloc_param,yyscan_t yyscanner)3410 void yyset_lloc (YYLTYPE * yylloc_param , yyscan_t yyscanner)
3411 {
3412 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3413 yylloc = yylloc_param;
3414 }
3415
3416
3417
3418
3419
3420 /* User-visible API */
3421
3422 /* yylex_init is special because it creates the scanner itself, so it is
3423 * the ONLY reentrant function that doesn't take the scanner as the last argument.
3424 * That's why we explicitly handle the declaration, instead of using our macros.
3425 */
yylex_init(yyscan_t * ptr_yy_globals)3426 int yylex_init(yyscan_t* ptr_yy_globals)
3427 {
3428 if (ptr_yy_globals == NULL){
3429 errno = EINVAL;
3430 return 1;
3431 }
3432
3433 *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), NULL );
3434
3435 if (*ptr_yy_globals == NULL){
3436 errno = ENOMEM;
3437 return 1;
3438 }
3439
3440 /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */
3441 memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));
3442
3443 return yy_init_globals ( *ptr_yy_globals );
3444 }
3445
3446
3447 /* yylex_init_extra has the same functionality as yylex_init, but follows the
3448 * convention of taking the scanner as the last argument. Note however, that
3449 * this is a *pointer* to a scanner, as it will be allocated by this call (and
3450 * is the reason, too, why this function also must handle its own declaration).
3451 * The user defined value in the first argument will be available to yyalloc in
3452 * the yyextra field.
3453 */
yylex_init_extra(YY_EXTRA_TYPE yy_user_defined,yyscan_t * ptr_yy_globals)3454 int yylex_init_extra( YY_EXTRA_TYPE yy_user_defined, yyscan_t* ptr_yy_globals )
3455 {
3456 struct yyguts_t dummy_yyguts;
3457
3458 yyset_extra (yy_user_defined, &dummy_yyguts);
3459
3460 if (ptr_yy_globals == NULL){
3461 errno = EINVAL;
3462 return 1;
3463 }
3464
3465 *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), &dummy_yyguts );
3466
3467 if (*ptr_yy_globals == NULL){
3468 errno = ENOMEM;
3469 return 1;
3470 }
3471
3472 /* By setting to 0xAA, we expose bugs in
3473 yy_init_globals. Leave at 0x00 for releases. */
3474 memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));
3475
3476 yyset_extra (yy_user_defined, *ptr_yy_globals);
3477
3478 return yy_init_globals ( *ptr_yy_globals );
3479 }
3480
3481
yy_init_globals(yyscan_t yyscanner)3482 static int yy_init_globals (yyscan_t yyscanner)
3483 {
3484 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3485 /* Initialization is the same as for the non-reentrant scanner.
3486 * This function is called from yylex_destroy(), so don't allocate here.
3487 */
3488
3489
3490
3491
3492 yyg->yy_buffer_stack = NULL;
3493 yyg->yy_buffer_stack_top = 0;
3494 yyg->yy_buffer_stack_max = 0;
3495 yyg->yy_c_buf_p = NULL;
3496 yyg->yy_init = 0;
3497 yyg->yy_start = 0;
3498
3499
3500 yyg->yy_start_stack_ptr = 0;
3501 yyg->yy_start_stack_depth = 0;
3502 yyg->yy_start_stack = NULL;
3503
3504
3505
3506
3507
3508
3509 /* Defined in main.c */
3510 #ifdef YY_STDINIT
3511 yyin = stdin;
3512 yyout = stdout;
3513 #else
3514 yyin = NULL;
3515 yyout = NULL;
3516 #endif
3517
3518 /* For future reference: Set errno on error, since we are called by
3519 * yylex_init()
3520 */
3521 return 0;
3522 }
3523
3524
3525 /* yylex_destroy is for both reentrant and non-reentrant scanners. */
yylex_destroy(yyscan_t yyscanner)3526 int yylex_destroy (yyscan_t yyscanner)
3527 {
3528 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3529
3530 /* Pop the buffer stack, destroying each element. */
3531 while(YY_CURRENT_BUFFER){
3532 yy_delete_buffer( YY_CURRENT_BUFFER , yyscanner );
3533 YY_CURRENT_BUFFER_LVALUE = NULL;
3534 yypop_buffer_state(yyscanner);
3535 }
3536
3537 /* Destroy the stack itself. */
3538 yyfree(yyg->yy_buffer_stack , yyscanner);
3539 yyg->yy_buffer_stack = NULL;
3540
3541
3542 /* Destroy the start condition stack. */
3543 yyfree( yyg->yy_start_stack , yyscanner );
3544 yyg->yy_start_stack = NULL;
3545
3546
3547
3548
3549 /* Reset the globals. This is important in a non-reentrant scanner so the next time
3550 * yylex() is called, initialization will occur. */
3551 yy_init_globals( yyscanner);
3552
3553 /* Destroy the main struct (reentrant only). */
3554 yyfree ( yyscanner , yyscanner );
3555 yyscanner = NULL;
3556 return 0;
3557 }
3558
3559
3560
3561 /*
3562 * Internal utility routines.
3563 */
3564
3565
3566
3567 #ifndef yytext_ptr
yy_flex_strncpy(char * s1,const char * s2,int n,yyscan_t yyscanner)3568 static void yy_flex_strncpy (char* s1, const char * s2, int n , yyscan_t yyscanner)
3569 {
3570 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3571 (void)yyg;
3572
3573 int i;
3574 for ( i = 0; i < n; ++i )
3575 s1[i] = s2[i];
3576 }
3577 #endif
3578
3579
3580
3581 #ifdef YY_NEED_STRLEN
yy_flex_strlen(const char * s,yyscan_t yyscanner)3582 static int yy_flex_strlen (const char * s , yyscan_t yyscanner)
3583 {
3584 int n;
3585 for ( n = 0; s[n]; ++n )
3586 ;
3587
3588 return n;
3589 }
3590 #endif
3591
3592
3593
yyalloc(yy_size_t size,yyscan_t yyscanner)3594 void *yyalloc (yy_size_t size , yyscan_t yyscanner)
3595 {
3596 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3597 (void)yyg;
3598 return malloc(size);
3599 }
3600
3601
3602
yyrealloc(void * ptr,yy_size_t size,yyscan_t yyscanner)3603 void *yyrealloc (void * ptr, yy_size_t size , yyscan_t yyscanner)
3604 {
3605 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3606 (void)yyg;
3607
3608 /* The cast to (char *) in the following accommodates both
3609 * implementations that use char* generic pointers, and those
3610 * that use void* generic pointers. It works with the latter
3611 * because both ANSI C and C++ allow castless assignment from
3612 * any pointer type to void*, and deal with argument conversions
3613 * as though doing an assignment.
3614 */
3615 return realloc(ptr, size);
3616 }
3617
3618
3619
yyfree(void * ptr,yyscan_t yyscanner)3620 void yyfree (void * ptr , yyscan_t yyscanner)
3621 {
3622 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3623 (void)yyg;
3624 free( (char *) ptr ); /* see yyrealloc() for (char *) cast */
3625 }
3626
3627
3628 #define YYTABLES_NAME "yytables"
3629
3630
3631
3632
3633
3634
3635
3636
string_input(char * buf,yy_size_t max_size,yyscan_t yyscanner)3637 yy_size_t string_input(char* buf, yy_size_t max_size, yyscan_t yyscanner) {
3638 pp::Token token;
3639 yyget_extra(yyscanner)->getPreprocessor().lex(&token);
3640 yy_size_t len = token.type == pp::Token::LAST ? 0 : token.text.size();
3641 if (len < max_size)
3642 memcpy(buf, token.text.c_str(), len);
3643 yyset_column(token.location.file, yyscanner);
3644 yyset_lineno(token.location.line, yyscanner);
3645
3646 if (len >= max_size)
3647 YY_FATAL_ERROR("Input buffer overflow");
3648 else if (len > 0)
3649 buf[len++] = ' ';
3650 return len;
3651 }
3652
check_type(yyscan_t yyscanner)3653 int check_type(yyscan_t yyscanner) {
3654 struct yyguts_t* yyg = (struct yyguts_t*) yyscanner;
3655
3656 int token = IDENTIFIER;
3657 TSymbol* symbol = yyextra->symbolTable.find(yytext, yyextra->getShaderVersion());
3658 if (yyextra->lexAfterType == false && symbol && symbol->isVariable()) {
3659 TVariable* variable = static_cast<TVariable*>(symbol);
3660 if (variable->isUserType()) {
3661 yyextra->lexAfterType = true;
3662 token = TYPE_NAME;
3663 }
3664 }
3665 yylval->lex.symbol = symbol;
3666 return token;
3667 }
3668
reserved_word(yyscan_t yyscanner)3669 int reserved_word(yyscan_t yyscanner) {
3670 struct yyguts_t* yyg = (struct yyguts_t*) yyscanner;
3671
3672 yyextra->error(*yylloc, "Illegal use of reserved word", yytext, "");
3673 yyextra->recover();
3674 return 0;
3675 }
3676
ES2_reserved_ES3_keyword(TParseContext * context,int token)3677 int ES2_reserved_ES3_keyword(TParseContext *context, int token)
3678 {
3679 yyscan_t yyscanner = (yyscan_t) context->getScanner();
3680
3681 if (context->getShaderVersion() < 300)
3682 {
3683 return reserved_word(yyscanner);
3684 }
3685
3686 return token;
3687 }
3688
ES2_keyword_ES3_reserved(TParseContext * context,int token)3689 int ES2_keyword_ES3_reserved(TParseContext *context, int token)
3690 {
3691 yyscan_t yyscanner = (yyscan_t) context->getScanner();
3692
3693 if (context->getShaderVersion() >= 300)
3694 {
3695 return reserved_word(yyscanner);
3696 }
3697
3698 return token;
3699 }
3700
ES2_identifier_ES3_keyword(TParseContext * context,int token)3701 int ES2_identifier_ES3_keyword(TParseContext *context, int token)
3702 {
3703 struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner();
3704 yyscan_t yyscanner = (yyscan_t) context->getScanner();
3705
3706 // not a reserved word in GLSL ES 1.00, so could be used as an identifier/type name
3707 if (context->getShaderVersion() < 300)
3708 {
3709 yylval->lex.string = NewPoolTString(yytext);
3710 return check_type(yyscanner);
3711 }
3712
3713 return token;
3714 }
3715
uint_constant(TParseContext * context)3716 int uint_constant(TParseContext *context)
3717 {
3718 struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner();
3719
3720 if (context->getShaderVersion() < 300)
3721 {
3722 context->error(*yylloc, "Unsigned integers are unsupported prior to GLSL ES 3.00", yytext, "");
3723 context->recover();
3724 return 0;
3725 }
3726
3727 if (!atou_clamp(yytext, &(yylval->lex.u)))
3728 yyextra->warning(*yylloc, "Integer overflow", yytext, "");
3729
3730 return UINTCONSTANT;
3731 }
3732
floatsuffix_check(TParseContext * context)3733 int floatsuffix_check(TParseContext* context)
3734 {
3735 struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner();
3736
3737 if (context->getShaderVersion() < 300)
3738 {
3739 context->error(*yylloc, "Floating-point suffix unsupported prior to GLSL ES 3.00", yytext);
3740 context->recover();
3741 return 0;
3742 }
3743
3744 if (!atof_clamp(yytext, &(yylval->lex.f)))
3745 yyextra->warning(*yylloc, "Float overflow", yytext, "");
3746
3747 return(FLOATCONSTANT);
3748 }
3749
int_constant(yyscan_t yyscanner)3750 int int_constant(yyscan_t yyscanner) {
3751 struct yyguts_t* yyg = (struct yyguts_t*) yyscanner;
3752
3753 if (!atoi_clamp(yytext, &(yylval->lex.i)))
3754 yyextra->warning(*yylloc, "Integer overflow", yytext, "");
3755 return INTCONSTANT;
3756 }
3757
float_constant(yyscan_t yyscanner)3758 int float_constant(yyscan_t yyscanner) {
3759 struct yyguts_t* yyg = (struct yyguts_t*) yyscanner;
3760
3761 if (!atof_clamp(yytext, &(yylval->lex.f)))
3762 yyextra->warning(*yylloc, "Float overflow", yytext, "");
3763 return FLOATCONSTANT;
3764 }
3765
yyerror(YYLTYPE * lloc,TParseContext * context,void * scanner,const char * reason)3766 void yyerror(YYLTYPE* lloc, TParseContext* context, void* scanner, const char* reason) {
3767 struct yyguts_t* yyg = (struct yyguts_t*) scanner;
3768
3769 if (context->AfterEOF) {
3770 context->error(*lloc, reason, "unexpected EOF");
3771 } else {
3772 context->error(*lloc, reason, yytext);
3773 }
3774 context->recover();
3775 }
3776
glslang_initialize(TParseContext * context)3777 int glslang_initialize(TParseContext* context) {
3778 yyscan_t scanner = NULL;
3779 if (yylex_init_extra(context, &scanner))
3780 return 1;
3781
3782 context->setScanner(scanner);
3783 return 0;
3784 }
3785
glslang_finalize(TParseContext * context)3786 int glslang_finalize(TParseContext* context) {
3787 yyscan_t scanner = context->getScanner();
3788 if (scanner == NULL) return 0;
3789
3790 context->setScanner(NULL);
3791 yylex_destroy(scanner);
3792
3793 return 0;
3794 }
3795
glslang_scan(size_t count,const char * const string[],const int length[],TParseContext * context)3796 int glslang_scan(size_t count, const char* const string[], const int length[],
3797 TParseContext* context) {
3798 yyrestart(NULL, context->getScanner());
3799 yyset_column(0, context->getScanner());
3800 yyset_lineno(1, context->getScanner());
3801 context->AfterEOF = false;
3802
3803 // Initialize preprocessor.
3804 if (!context->getPreprocessor().init(count, string, length))
3805 return 1;
3806
3807 // Define extension macros.
3808 const TExtensionBehavior& extBehavior = context->extensionBehavior();
3809 for (TExtensionBehavior::const_iterator iter = extBehavior.begin();
3810 iter != extBehavior.end(); ++iter)
3811 {
3812 context->getPreprocessor().predefineMacro(iter->first.c_str(), 1);
3813 }
3814
3815 context->getPreprocessor().predefineMacro("GL_FRAGMENT_PRECISION_HIGH", 1);
3816
3817 return 0;
3818 }
3819
3820
3821