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>
137typedef int8_t flex_int8_t;
138typedef uint8_t flex_uint8_t;
139typedef int16_t flex_int16_t;
140typedef uint16_t flex_uint16_t;
141typedef int32_t flex_int32_t;
142typedef uint32_t flex_uint32_t;
143#else
144typedef signed char flex_int8_t;
145typedef short int flex_int16_t;
146typedef int flex_int32_t;
147typedef unsigned char flex_uint8_t;
148typedef unsigned short int flex_uint16_t;
149typedef 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
216typedef 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
298typedef struct yy_buffer_state *YY_BUFFER_STATE;
299#endif
300
301#ifndef YY_TYPEDEF_YY_SIZE_T
302#define YY_TYPEDEF_YY_SIZE_T
303typedef 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
353struct 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
440void yyrestart ( FILE *input_file , yyscan_t yyscanner );
441void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner );
442YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size , yyscan_t yyscanner );
443void yy_delete_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner );
444void yy_flush_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner );
445void yypush_buffer_state ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner );
446void yypop_buffer_state ( yyscan_t yyscanner );
447
448
449static void yyensure_buffer_stack ( yyscan_t yyscanner );
450static void yy_load_buffer_state ( yyscan_t yyscanner );
451static 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
455YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size , yyscan_t yyscanner );
456YY_BUFFER_STATE yy_scan_string ( const char *yy_str , yyscan_t yyscanner );
457YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len , yyscan_t yyscanner );
458
459
460void *yyalloc ( yy_size_t , yyscan_t yyscanner );
461void *yyrealloc ( void *, yy_size_t , yyscan_t yyscanner );
462void 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
491typedef flex_uint8_t YY_CHAR;
492
493
494typedef int yy_state_type;
495
496#define yytext_ptr yytext_r
497
498
499
500
501
502
503static yy_state_type yy_get_previous_state ( yyscan_t yyscanner );
504static yy_state_type yy_try_NUL_trans ( yy_state_type current_state  , yyscan_t yyscanner);
505static int yy_get_next_buffer ( yyscan_t yyscanner );
506static 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. */
524struct yy_trans_info
525	{
526	flex_int32_t yy_verify;
527	flex_int32_t yy_nxt;
528	};
529static 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
623static 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
655static 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
667static 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
762static 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
857static 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
982static 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. */
1109static const flex_int32_t yy_rule_can_match_eol[240] =
1110    {   0,
11110, 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
1147This file contains the Lex specification for GLSL ES.
1148Based on ANSI C grammar, Lex specification:
1149http://www.lysator.liu.se/c/ANSI-C-grammar-l.html
1150
1151IF YOU MODIFY THIS FILE YOU ALSO NEED TO RUN generate_parser.sh,
1152WHICH 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
1173static yy_size_t string_input(char* buf, yy_size_t max_size, yyscan_t yyscanner);
1174static int check_type(yyscan_t yyscanner);
1175static int reserved_word(yyscan_t yyscanner);
1176static int ES2_reserved_ES3_keyword(TParseContext *context, int token);
1177static int ES2_keyword_ES3_reserved(TParseContext *context, int token);
1178static int ES2_identifier_ES3_keyword(TParseContext *context, int token);
1179static int uint_constant(TParseContext *context);
1180static int int_constant(yyscan_t yyscanner);
1181static int float_constant(yyscan_t yyscanner);
1182static 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. */
1202struct 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
1250static 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
1266int yylex_init (yyscan_t* scanner);
1267
1268int 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
1276int yylex_destroy ( yyscan_t yyscanner );
1277
1278
1279
1280int yyget_debug ( yyscan_t yyscanner );
1281
1282
1283
1284void yyset_debug ( int debug_flag , yyscan_t yyscanner );
1285
1286
1287
1288YY_EXTRA_TYPE yyget_extra ( yyscan_t yyscanner );
1289
1290
1291
1292void yyset_extra ( YY_EXTRA_TYPE user_defined , yyscan_t yyscanner );
1293
1294
1295
1296FILE *yyget_in ( yyscan_t yyscanner );
1297
1298
1299
1300void yyset_in  ( FILE * _in_str , yyscan_t yyscanner );
1301
1302
1303
1304FILE *yyget_out ( yyscan_t yyscanner );
1305
1306
1307
1308void yyset_out  ( FILE * _out_str , yyscan_t yyscanner );
1309
1310
1311
1312			int yyget_leng ( yyscan_t yyscanner );
1313
1314
1315
1316char *yyget_text ( yyscan_t yyscanner );
1317
1318
1319
1320int yyget_lineno ( yyscan_t yyscanner );
1321
1322
1323
1324void yyset_lineno ( int _line_number , yyscan_t yyscanner );
1325
1326
1327
1328
1329int yyget_column  ( yyscan_t yyscanner );
1330
1331
1332
1333
1334
1335void yyset_column ( int _column_no , yyscan_t yyscanner );
1336
1337
1338
1339
1340YYSTYPE * yyget_lval ( yyscan_t yyscanner );
1341
1342
1343void 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
1361extern "C" int yywrap ( yyscan_t yyscanner );
1362#else
1363extern int yywrap ( yyscan_t yyscanner );
1364#endif
1365#endif
1366
1367#ifndef YY_NO_UNPUT
1368
1369#endif
1370
1371
1372#ifndef yytext_ptr
1373static void yy_flex_strncpy ( char *, const char *, int , yyscan_t yyscanner);
1374#endif
1375
1376#ifdef YY_NEED_STRLEN
1377static int yy_flex_strlen ( const char * , yyscan_t yyscanner);
1378#endif
1379
1380#ifndef YY_NO_INPUT
1381#ifdef __cplusplus
1382static int yyinput ( yyscan_t yyscanner );
1383#else
1384static 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
1503extern 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 */
1533YY_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;
1599yy_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
1621yy_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
1640do_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
1652case 1:
1653YY_RULE_SETUP
1654{ return(INVARIANT); }
1655	YY_BREAK
1656case 2:
1657YY_RULE_SETUP
1658{ return(HIGH_PRECISION); }
1659	YY_BREAK
1660case 3:
1661YY_RULE_SETUP
1662{ return(MEDIUM_PRECISION); }
1663	YY_BREAK
1664case 4:
1665YY_RULE_SETUP
1666{ return(LOW_PRECISION); }
1667	YY_BREAK
1668case 5:
1669YY_RULE_SETUP
1670{ return(PRECISION); }
1671	YY_BREAK
1672case 6:
1673YY_RULE_SETUP
1674{ return ES2_keyword_ES3_reserved(context, ATTRIBUTE); }
1675	YY_BREAK
1676case 7:
1677YY_RULE_SETUP
1678{ return(CONST_QUAL); }
1679	YY_BREAK
1680case 8:
1681YY_RULE_SETUP
1682{ return(UNIFORM); }
1683	YY_BREAK
1684case 9:
1685YY_RULE_SETUP
1686{ return ES2_keyword_ES3_reserved(context, VARYING); }
1687	YY_BREAK
1688case 10:
1689YY_RULE_SETUP
1690{ return(BREAK); }
1691	YY_BREAK
1692case 11:
1693YY_RULE_SETUP
1694{ return(CONTINUE); }
1695	YY_BREAK
1696case 12:
1697YY_RULE_SETUP
1698{ return(DO); }
1699	YY_BREAK
1700case 13:
1701YY_RULE_SETUP
1702{ return(FOR); }
1703	YY_BREAK
1704case 14:
1705YY_RULE_SETUP
1706{ return(WHILE); }
1707	YY_BREAK
1708case 15:
1709YY_RULE_SETUP
1710{ return(IF); }
1711	YY_BREAK
1712case 16:
1713YY_RULE_SETUP
1714{ return(ELSE); }
1715	YY_BREAK
1716case 17:
1717YY_RULE_SETUP
1718{ return ES2_reserved_ES3_keyword(context, SWITCH); }
1719	YY_BREAK
1720case 18:
1721YY_RULE_SETUP
1722{ return ES2_reserved_ES3_keyword(context, CASE); }
1723	YY_BREAK
1724case 19:
1725YY_RULE_SETUP
1726{ return ES2_reserved_ES3_keyword(context, DEFAULT); }
1727	YY_BREAK
1728case 20:
1729YY_RULE_SETUP
1730{ return ES2_reserved_ES3_keyword(context, CENTROID); }
1731	YY_BREAK
1732case 21:
1733YY_RULE_SETUP
1734{ return ES2_reserved_ES3_keyword(context, FLAT); }
1735	YY_BREAK
1736case 22:
1737YY_RULE_SETUP
1738{ return ES2_reserved_ES3_keyword(context, SMOOTH); }
1739	YY_BREAK
1740case 23:
1741YY_RULE_SETUP
1742{ return(IN_QUAL); }
1743	YY_BREAK
1744case 24:
1745YY_RULE_SETUP
1746{ return(OUT_QUAL); }
1747	YY_BREAK
1748case 25:
1749YY_RULE_SETUP
1750{ return(INOUT_QUAL); }
1751	YY_BREAK
1752case 26:
1753YY_RULE_SETUP
1754{ context->lexAfterType = true; return(FLOAT_TYPE); }
1755	YY_BREAK
1756case 27:
1757YY_RULE_SETUP
1758{ context->lexAfterType = true; return(INT_TYPE); }
1759	YY_BREAK
1760case 28:
1761YY_RULE_SETUP
1762{ return ES2_identifier_ES3_keyword(context, UINT_TYPE); }
1763	YY_BREAK
1764case 29:
1765YY_RULE_SETUP
1766{ context->lexAfterType = true; return(VOID_TYPE); }
1767	YY_BREAK
1768case 30:
1769YY_RULE_SETUP
1770{ context->lexAfterType = true; return(BOOL_TYPE); }
1771	YY_BREAK
1772case 31:
1773YY_RULE_SETUP
1774{ yylval->lex.b = true;  return(BOOLCONSTANT); }
1775	YY_BREAK
1776case 32:
1777YY_RULE_SETUP
1778{ yylval->lex.b = false; return(BOOLCONSTANT); }
1779	YY_BREAK
1780case 33:
1781YY_RULE_SETUP
1782{ return(DISCARD); }
1783	YY_BREAK
1784case 34:
1785YY_RULE_SETUP
1786{ return(RETURN); }
1787	YY_BREAK
1788case 35:
1789YY_RULE_SETUP
1790{ context->lexAfterType = true; return(MATRIX2); }
1791	YY_BREAK
1792case 36:
1793YY_RULE_SETUP
1794{ context->lexAfterType = true; return(MATRIX3); }
1795	YY_BREAK
1796case 37:
1797YY_RULE_SETUP
1798{ context->lexAfterType = true; return(MATRIX4); }
1799	YY_BREAK
1800case 38:
1801YY_RULE_SETUP
1802{ return ES2_identifier_ES3_keyword(context, MATRIX2); }
1803	YY_BREAK
1804case 39:
1805YY_RULE_SETUP
1806{ return ES2_identifier_ES3_keyword(context, MATRIX3); }
1807	YY_BREAK
1808case 40:
1809YY_RULE_SETUP
1810{ return ES2_identifier_ES3_keyword(context, MATRIX4); }
1811	YY_BREAK
1812case 41:
1813YY_RULE_SETUP
1814{ return ES2_identifier_ES3_keyword(context, MATRIX2x3); }
1815	YY_BREAK
1816case 42:
1817YY_RULE_SETUP
1818{ return ES2_identifier_ES3_keyword(context, MATRIX3x2); }
1819	YY_BREAK
1820case 43:
1821YY_RULE_SETUP
1822{ return ES2_identifier_ES3_keyword(context, MATRIX2x4); }
1823	YY_BREAK
1824case 44:
1825YY_RULE_SETUP
1826{ return ES2_identifier_ES3_keyword(context, MATRIX4x2); }
1827	YY_BREAK
1828case 45:
1829YY_RULE_SETUP
1830{ return ES2_identifier_ES3_keyword(context, MATRIX3x4); }
1831	YY_BREAK
1832case 46:
1833YY_RULE_SETUP
1834{ return ES2_identifier_ES3_keyword(context, MATRIX4x3); }
1835	YY_BREAK
1836case 47:
1837YY_RULE_SETUP
1838{ context->lexAfterType = true; return (VEC2); }
1839	YY_BREAK
1840case 48:
1841YY_RULE_SETUP
1842{ context->lexAfterType = true; return (VEC3); }
1843	YY_BREAK
1844case 49:
1845YY_RULE_SETUP
1846{ context->lexAfterType = true; return (VEC4); }
1847	YY_BREAK
1848case 50:
1849YY_RULE_SETUP
1850{ context->lexAfterType = true; return (IVEC2); }
1851	YY_BREAK
1852case 51:
1853YY_RULE_SETUP
1854{ context->lexAfterType = true; return (IVEC3); }
1855	YY_BREAK
1856case 52:
1857YY_RULE_SETUP
1858{ context->lexAfterType = true; return (IVEC4); }
1859	YY_BREAK
1860case 53:
1861YY_RULE_SETUP
1862{ return ES2_identifier_ES3_keyword(context, UVEC2); }
1863	YY_BREAK
1864case 54:
1865YY_RULE_SETUP
1866{ return ES2_identifier_ES3_keyword(context, UVEC3); }
1867	YY_BREAK
1868case 55:
1869YY_RULE_SETUP
1870{ return ES2_identifier_ES3_keyword(context, UVEC4); }
1871	YY_BREAK
1872case 56:
1873YY_RULE_SETUP
1874{ context->lexAfterType = true; return (BVEC2); }
1875	YY_BREAK
1876case 57:
1877YY_RULE_SETUP
1878{ context->lexAfterType = true; return (BVEC3); }
1879	YY_BREAK
1880case 58:
1881YY_RULE_SETUP
1882{ context->lexAfterType = true; return (BVEC4); }
1883	YY_BREAK
1884case 59:
1885YY_RULE_SETUP
1886{ context->lexAfterType = true; return SAMPLER2D; }
1887	YY_BREAK
1888case 60:
1889YY_RULE_SETUP
1890{ context->lexAfterType = true; return SAMPLERCUBE; }
1891	YY_BREAK
1892case 61:
1893YY_RULE_SETUP
1894{ context->lexAfterType = true; return SAMPLER2DRECT; }
1895	YY_BREAK
1896case 62:
1897YY_RULE_SETUP
1898{ context->lexAfterType = true; return SAMPLER_EXTERNAL_OES; }
1899	YY_BREAK
1900case 63:
1901YY_RULE_SETUP
1902{ context->lexAfterType = true; return SAMPLER3D; }
1903	YY_BREAK
1904case 64:
1905YY_RULE_SETUP
1906{ return ES2_reserved_ES3_keyword(context, SAMPLER3DRECT); }
1907	YY_BREAK
1908case 65:
1909YY_RULE_SETUP
1910{ return  ES2_identifier_ES3_keyword(context, SAMPLER2DARRAY); }
1911	YY_BREAK
1912case 66:
1913YY_RULE_SETUP
1914{ return  ES2_identifier_ES3_keyword(context, ISAMPLER2D); }
1915	YY_BREAK
1916case 67:
1917YY_RULE_SETUP
1918{ return  ES2_identifier_ES3_keyword(context, ISAMPLER3D); }
1919	YY_BREAK
1920case 68:
1921YY_RULE_SETUP
1922{ return  ES2_identifier_ES3_keyword(context, ISAMPLERCUBE); }
1923	YY_BREAK
1924case 69:
1925YY_RULE_SETUP
1926{ return  ES2_identifier_ES3_keyword(context, ISAMPLER2DARRAY); }
1927	YY_BREAK
1928case 70:
1929YY_RULE_SETUP
1930{ return  ES2_identifier_ES3_keyword(context, USAMPLER2D); }
1931	YY_BREAK
1932case 71:
1933YY_RULE_SETUP
1934{ return  ES2_identifier_ES3_keyword(context, USAMPLER3D); }
1935	YY_BREAK
1936case 72:
1937YY_RULE_SETUP
1938{ return  ES2_identifier_ES3_keyword(context, USAMPLERCUBE); }
1939	YY_BREAK
1940case 73:
1941YY_RULE_SETUP
1942{ return  ES2_identifier_ES3_keyword(context, USAMPLER2DARRAY); }
1943	YY_BREAK
1944case 74:
1945YY_RULE_SETUP
1946{ return ES2_reserved_ES3_keyword(context, SAMPLER2DSHADOW); }
1947	YY_BREAK
1948case 75:
1949YY_RULE_SETUP
1950{ return  ES2_identifier_ES3_keyword(context, SAMPLERCUBESHADOW); }
1951	YY_BREAK
1952case 76:
1953YY_RULE_SETUP
1954{ return  ES2_identifier_ES3_keyword(context, SAMPLER2DARRAYSHADOW); }
1955	YY_BREAK
1956case 77:
1957YY_RULE_SETUP
1958{ context->lexAfterType = true; return(STRUCT); }
1959	YY_BREAK
1960case 78:
1961YY_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 */
1965case 79:
1966case 80:
1967case 81:
1968case 82:
1969case 83:
1970case 84:
1971case 85:
1972case 86:
1973case 87:
1974case 88:
1975case 89:
1976case 90:
1977case 91:
1978case 92:
1979case 93:
1980case 94:
1981case 95:
1982case 96:
1983case 97:
1984case 98:
1985case 99:
1986case 100:
1987case 101:
1988case 102:
1989case 103:
1990case 104:
1991case 105:
1992case 106:
1993case 107:
1994case 108:
1995case 109:
1996case 110:
1997case 111:
1998case 112:
1999case 113:
2000case 114:
2001case 115:
2002case 116:
2003case 117:
2004case 118:
2005case 119:
2006case 120:
2007case 121:
2008case 122:
2009case 123:
2010case 124:
2011case 125:
2012case 126:
2013case 127:
2014case 128:
2015case 129:
2016case 130:
2017case 131:
2018case 132:
2019case 133:
2020case 134:
2021YY_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 */
2031case 135:
2032YY_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 */
2044case 136:
2045case 137:
2046case 138:
2047case 139:
2048case 140:
2049case 141:
2050case 142:
2051case 143:
2052case 144:
2053case 145:
2054case 146:
2055case 147:
2056case 148:
2057case 149:
2058case 150:
2059case 151:
2060case 152:
2061case 153:
2062case 154:
2063case 155:
2064case 156:
2065case 157:
2066case 158:
2067case 159:
2068case 160:
2069case 161:
2070case 162:
2071case 163:
2072case 164:
2073case 165:
2074case 166:
2075case 167:
2076case 168:
2077case 169:
2078case 170:
2079case 171:
2080case 172:
2081case 173:
2082case 174:
2083case 175:
2084case 176:
2085YY_RULE_SETUP
2086{ return reserved_word(yyscanner); }
2087	YY_BREAK
2088case 177:
2089YY_RULE_SETUP
2090{
2091   yylval->lex.string = NewPoolTString(yytext);
2092   return check_type(yyscanner);
2093}
2094	YY_BREAK
2095case 178:
2096YY_RULE_SETUP
2097{ return int_constant(yyscanner); }
2098	YY_BREAK
2099case 179:
2100YY_RULE_SETUP
2101{ return int_constant(yyscanner); }
2102	YY_BREAK
2103case 180:
2104YY_RULE_SETUP
2105{ return int_constant(yyscanner); }
2106	YY_BREAK
2107case 181:
2108YY_RULE_SETUP
2109{ return uint_constant(context); }
2110	YY_BREAK
2111case 182:
2112YY_RULE_SETUP
2113{ return uint_constant(context); }
2114	YY_BREAK
2115case 183:
2116YY_RULE_SETUP
2117{ return uint_constant(context); }
2118	YY_BREAK
2119case 184:
2120YY_RULE_SETUP
2121{ return float_constant(yyscanner); }
2122	YY_BREAK
2123case 185:
2124YY_RULE_SETUP
2125{ return float_constant(yyscanner); }
2126	YY_BREAK
2127case 186:
2128YY_RULE_SETUP
2129{ return float_constant(yyscanner); }
2130	YY_BREAK
2131case 187:
2132YY_RULE_SETUP
2133{ return floatsuffix_check(context); }
2134	YY_BREAK
2135case 188:
2136YY_RULE_SETUP
2137{ return floatsuffix_check(context); }
2138	YY_BREAK
2139case 189:
2140YY_RULE_SETUP
2141{ return floatsuffix_check(context); }
2142	YY_BREAK
2143case 190:
2144YY_RULE_SETUP
2145{  return(ADD_ASSIGN); }
2146	YY_BREAK
2147case 191:
2148YY_RULE_SETUP
2149{  return(SUB_ASSIGN); }
2150	YY_BREAK
2151case 192:
2152YY_RULE_SETUP
2153{  return(MUL_ASSIGN); }
2154	YY_BREAK
2155case 193:
2156YY_RULE_SETUP
2157{  return(DIV_ASSIGN); }
2158	YY_BREAK
2159case 194:
2160YY_RULE_SETUP
2161{  return(MOD_ASSIGN); }
2162	YY_BREAK
2163case 195:
2164YY_RULE_SETUP
2165{  return(LEFT_ASSIGN); }
2166	YY_BREAK
2167case 196:
2168YY_RULE_SETUP
2169{  return(RIGHT_ASSIGN); }
2170	YY_BREAK
2171case 197:
2172YY_RULE_SETUP
2173{  return(AND_ASSIGN); }
2174	YY_BREAK
2175case 198:
2176YY_RULE_SETUP
2177{  return(XOR_ASSIGN); }
2178	YY_BREAK
2179case 199:
2180YY_RULE_SETUP
2181{  return(OR_ASSIGN); }
2182	YY_BREAK
2183case 200:
2184YY_RULE_SETUP
2185{  return(INC_OP); }
2186	YY_BREAK
2187case 201:
2188YY_RULE_SETUP
2189{  return(DEC_OP); }
2190	YY_BREAK
2191case 202:
2192YY_RULE_SETUP
2193{  return(AND_OP); }
2194	YY_BREAK
2195case 203:
2196YY_RULE_SETUP
2197{  return(OR_OP); }
2198	YY_BREAK
2199case 204:
2200YY_RULE_SETUP
2201{  return(XOR_OP); }
2202	YY_BREAK
2203case 205:
2204YY_RULE_SETUP
2205{  return(LE_OP); }
2206	YY_BREAK
2207case 206:
2208YY_RULE_SETUP
2209{  return(GE_OP); }
2210	YY_BREAK
2211case 207:
2212YY_RULE_SETUP
2213{  return(EQ_OP); }
2214	YY_BREAK
2215case 208:
2216YY_RULE_SETUP
2217{  return(NE_OP); }
2218	YY_BREAK
2219case 209:
2220YY_RULE_SETUP
2221{  return(LEFT_OP); }
2222	YY_BREAK
2223case 210:
2224YY_RULE_SETUP
2225{  return(RIGHT_OP); }
2226	YY_BREAK
2227case 211:
2228YY_RULE_SETUP
2229{ context->lexAfterType = false; return(SEMICOLON); }
2230	YY_BREAK
2231case 212:
2232YY_RULE_SETUP
2233{ context->lexAfterType = false; return(LEFT_BRACE); }
2234	YY_BREAK
2235case 213:
2236YY_RULE_SETUP
2237{ return(RIGHT_BRACE); }
2238	YY_BREAK
2239case 214:
2240YY_RULE_SETUP
2241{ if (context->inTypeParen) context->lexAfterType = false; return(COMMA); }
2242	YY_BREAK
2243case 215:
2244YY_RULE_SETUP
2245{ return(COLON); }
2246	YY_BREAK
2247case 216:
2248YY_RULE_SETUP
2249{ context->lexAfterType = false; return(EQUAL); }
2250	YY_BREAK
2251case 217:
2252YY_RULE_SETUP
2253{ context->lexAfterType = false; context->inTypeParen = true; return(LEFT_PAREN); }
2254	YY_BREAK
2255case 218:
2256YY_RULE_SETUP
2257{ context->inTypeParen = false; return(RIGHT_PAREN); }
2258	YY_BREAK
2259case 219:
2260YY_RULE_SETUP
2261{ return(LEFT_BRACKET); }
2262	YY_BREAK
2263case 220:
2264YY_RULE_SETUP
2265{ return(RIGHT_BRACKET); }
2266	YY_BREAK
2267case 221:
2268YY_RULE_SETUP
2269{ BEGIN(FIELDS);  return(DOT); }
2270	YY_BREAK
2271case 222:
2272YY_RULE_SETUP
2273{ return(BANG); }
2274	YY_BREAK
2275case 223:
2276YY_RULE_SETUP
2277{ return(DASH); }
2278	YY_BREAK
2279case 224:
2280YY_RULE_SETUP
2281{ return(TILDE); }
2282	YY_BREAK
2283case 225:
2284YY_RULE_SETUP
2285{ return(PLUS); }
2286	YY_BREAK
2287case 226:
2288YY_RULE_SETUP
2289{ return(STAR); }
2290	YY_BREAK
2291case 227:
2292YY_RULE_SETUP
2293{ return(SLASH); }
2294	YY_BREAK
2295case 228:
2296YY_RULE_SETUP
2297{ return(PERCENT); }
2298	YY_BREAK
2299case 229:
2300YY_RULE_SETUP
2301{ return(LEFT_ANGLE); }
2302	YY_BREAK
2303case 230:
2304YY_RULE_SETUP
2305{ return(RIGHT_ANGLE); }
2306	YY_BREAK
2307case 231:
2308YY_RULE_SETUP
2309{ return(VERTICAL_BAR); }
2310	YY_BREAK
2311case 232:
2312YY_RULE_SETUP
2313{ return(CARET); }
2314	YY_BREAK
2315case 233:
2316YY_RULE_SETUP
2317{ return(AMPERSAND); }
2318	YY_BREAK
2319case 234:
2320YY_RULE_SETUP
2321{ return(QUESTION); }
2322	YY_BREAK
2323case 235:
2324YY_RULE_SETUP
2325{
2326    BEGIN(INITIAL);
2327    yylval->lex.string = NewPoolTString(yytext);
2328    return FIELD_SELECTION;
2329}
2330	YY_BREAK
2331case 236:
2332YY_RULE_SETUP
2333{}
2334	YY_BREAK
2335case 237:
2336/* rule 237 can match eol */
2337YY_RULE_SETUP
2338{  }
2339	YY_BREAK
2340case YY_STATE_EOF(INITIAL):
2341case YY_STATE_EOF(COMMENT):
2342case YY_STATE_EOF(FIELDS):
2343{ context->AfterEOF = true; yyterminate(); }
2344	YY_BREAK
2345case 238:
2346YY_RULE_SETUP
2347{ context->warning(*yylloc, "Unknown char", yytext, ""); return 0; }
2348	YY_BREAK
2349case 239:
2350YY_RULE_SETUP
2351ECHO;
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 */
2496static 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
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 */
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
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 */
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 */
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
2839static 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 */
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 */
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 */
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 */
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 */
2966void 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 */
2998void 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 */
3019static 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 */
3074YY_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 */
3114YY_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 */
3130YY_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
3174static 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 */
3207YY_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 */
3218int 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 */
3235int 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 */
3252FILE *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 */
3263FILE *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 */
3274int 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
3285char *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 */
3297void 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 */
3309void 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 */
3328void 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 */
3350void 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
3358void 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
3367int yyget_debug  (yyscan_t yyscanner)
3368{
3369    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3370    return yy_flex_debug;
3371}
3372
3373
3374
3375void 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
3385YYSTYPE * yyget_lval  (yyscan_t yyscanner)
3386{
3387    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3388    return yylval;
3389}
3390
3391
3392
3393void 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
3402YYLTYPE *yyget_lloc  (yyscan_t yyscanner)
3403{
3404    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3405    return yylloc;
3406}
3407
3408
3409
3410void 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 */
3426int 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 */
3454int 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
3482static 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. */
3526int 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
3568static 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
3582static 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
3594void *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
3603void *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
3620void 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
3637yy_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
3653int 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
3669int 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
3677int 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
3689int 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
3701int 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
3716int 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
3733int 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
3750int 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
3758int 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
3766void 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
3777int 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
3786int 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
3796int 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