|  | #line 25 "./glslang.l" | 
|  | // Copyright 2016 The SwiftShader Authors. All Rights Reserved. | 
|  | // | 
|  | // Licensed under the Apache License, Version 2.0 (the "License"); | 
|  | // you may not use this file except in compliance with the License. | 
|  | // You may obtain a copy of the License at | 
|  | // | 
|  | //    http://www.apache.org/licenses/LICENSE-2.0 | 
|  | // | 
|  | // Unless required by applicable law or agreed to in writing, software | 
|  | // distributed under the License is distributed on an "AS IS" BASIS, | 
|  | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | // See the License for the specific language governing permissions and | 
|  | // limitations under the License. | 
|  |  | 
|  | // This file is auto-generated by generate_parser.sh. DO NOT EDIT! | 
|  |  | 
|  | // Ignore errors in auto-generated code. | 
|  | #if defined(__GNUC__) | 
|  | #pragma GCC diagnostic ignored "-Wunused-function" | 
|  | #pragma GCC diagnostic ignored "-Wunused-variable" | 
|  | #pragma GCC diagnostic ignored "-Wswitch-enum" | 
|  | #elif defined(_MSC_VER) | 
|  | #pragma warning(disable: 4065) | 
|  | #pragma warning(disable: 4189) | 
|  | #pragma warning(disable: 4505) | 
|  | #pragma warning(disable: 4701) | 
|  | #endif | 
|  |  | 
|  |  | 
|  |  | 
|  | #define  YY_INT_ALIGNED short int | 
|  |  | 
|  | /* A lexical scanner generated by flex */ | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | #define FLEX_SCANNER | 
|  | #define YY_FLEX_MAJOR_VERSION 2 | 
|  | #define YY_FLEX_MINOR_VERSION 6 | 
|  | #define YY_FLEX_SUBMINOR_VERSION 4 | 
|  | #if YY_FLEX_SUBMINOR_VERSION > 0 | 
|  | #define FLEX_BETA | 
|  | #endif | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | #ifdef yyget_lval | 
|  | #define yyget_lval_ALREADY_DEFINED | 
|  | #else | 
|  | #define yyget_lval yyget_lval | 
|  | #endif | 
|  |  | 
|  |  | 
|  | #ifdef yyset_lval | 
|  | #define yyset_lval_ALREADY_DEFINED | 
|  | #else | 
|  | #define yyset_lval yyset_lval | 
|  | #endif | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | #ifdef yyget_lloc | 
|  | #define yyget_lloc_ALREADY_DEFINED | 
|  | #else | 
|  | #define yyget_lloc yyget_lloc | 
|  | #endif | 
|  |  | 
|  |  | 
|  | #ifdef yyset_lloc | 
|  | #define yyset_lloc_ALREADY_DEFINED | 
|  | #else | 
|  | #define yyset_lloc yyset_lloc | 
|  | #endif | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | /* First, we deal with  platform-specific or compiler-specific issues. */ | 
|  |  | 
|  | /* begin standard C headers. */ | 
|  | #include <stdio.h> | 
|  | #include <string.h> | 
|  | #include <errno.h> | 
|  | #include <stdlib.h> | 
|  |  | 
|  | /* end standard C headers. */ | 
|  |  | 
|  | /* flex integer type definitions */ | 
|  |  | 
|  | #ifndef FLEXINT_H | 
|  | #define FLEXINT_H | 
|  |  | 
|  | /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */ | 
|  |  | 
|  | #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L | 
|  |  | 
|  | /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, | 
|  | * if you want the limit (max/min) macros for int types. | 
|  | */ | 
|  | #ifndef __STDC_LIMIT_MACROS | 
|  | #define __STDC_LIMIT_MACROS 1 | 
|  | #endif | 
|  |  | 
|  | #include <inttypes.h> | 
|  | typedef int8_t flex_int8_t; | 
|  | typedef uint8_t flex_uint8_t; | 
|  | typedef int16_t flex_int16_t; | 
|  | typedef uint16_t flex_uint16_t; | 
|  | typedef int32_t flex_int32_t; | 
|  | typedef uint32_t flex_uint32_t; | 
|  | #else | 
|  | typedef signed char flex_int8_t; | 
|  | typedef short int flex_int16_t; | 
|  | typedef int flex_int32_t; | 
|  | typedef unsigned char flex_uint8_t; | 
|  | typedef unsigned short int flex_uint16_t; | 
|  | typedef unsigned int flex_uint32_t; | 
|  |  | 
|  | /* Limits of integral types. */ | 
|  | #ifndef INT8_MIN | 
|  | #define INT8_MIN               (-128) | 
|  | #endif | 
|  | #ifndef INT16_MIN | 
|  | #define INT16_MIN              (-32767-1) | 
|  | #endif | 
|  | #ifndef INT32_MIN | 
|  | #define INT32_MIN              (-2147483647-1) | 
|  | #endif | 
|  | #ifndef INT8_MAX | 
|  | #define INT8_MAX               (127) | 
|  | #endif | 
|  | #ifndef INT16_MAX | 
|  | #define INT16_MAX              (32767) | 
|  | #endif | 
|  | #ifndef INT32_MAX | 
|  | #define INT32_MAX              (2147483647) | 
|  | #endif | 
|  | #ifndef UINT8_MAX | 
|  | #define UINT8_MAX              (255U) | 
|  | #endif | 
|  | #ifndef UINT16_MAX | 
|  | #define UINT16_MAX             (65535U) | 
|  | #endif | 
|  | #ifndef UINT32_MAX | 
|  | #define UINT32_MAX             (4294967295U) | 
|  | #endif | 
|  |  | 
|  | #ifndef SIZE_MAX | 
|  | #define SIZE_MAX               (~(size_t)0) | 
|  | #endif | 
|  |  | 
|  | #endif /* ! C99 */ | 
|  |  | 
|  | #endif /* ! FLEXINT_H */ | 
|  |  | 
|  |  | 
|  | /* begin standard C++ headers. */ | 
|  |  | 
|  | /* TODO: this is always defined, so inline it */ | 
|  | #define yyconst const | 
|  |  | 
|  | #if defined(__GNUC__) && __GNUC__ >= 3 | 
|  | #define yynoreturn __attribute__((__noreturn__)) | 
|  | #else | 
|  | #define yynoreturn | 
|  | #endif | 
|  |  | 
|  | /* Returned upon end-of-file. */ | 
|  | #define YY_NULL 0 | 
|  |  | 
|  |  | 
|  | /* Promotes a possibly negative, possibly signed char to an | 
|  | *   integer in range [0..255] for use as an array index. | 
|  | */ | 
|  | #define YY_SC_TO_UI(c) ((YY_CHAR) (c)) | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | /* An opaque pointer. */ | 
|  | #ifndef YY_TYPEDEF_YY_SCANNER_T | 
|  | #define YY_TYPEDEF_YY_SCANNER_T | 
|  | typedef void* yyscan_t; | 
|  | #endif | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | /* For convenience, these vars (plus the bison vars far below) | 
|  | are macros in the reentrant scanner. */ | 
|  | #define yyin yyg->yyin_r | 
|  | #define yyout yyg->yyout_r | 
|  | #define yyextra yyg->yyextra_r | 
|  | #define yyleng yyg->yyleng_r | 
|  | #define yytext yyg->yytext_r | 
|  | #define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) | 
|  | #define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) | 
|  | #define yy_flex_debug yyg->yy_flex_debug_r | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | /* Enter a start condition.  This macro really ought to take a parameter, | 
|  | * but we do it the disgusting crufty way forced on us by the ()-less | 
|  | * definition of BEGIN. | 
|  | */ | 
|  | #define BEGIN yyg->yy_start = 1 + 2 * | 
|  | /* Translate the current start state into a value that can be later handed | 
|  | * to BEGIN to return to the state.  The YYSTATE alias is for lex | 
|  | * compatibility. | 
|  | */ | 
|  | #define YY_START ((yyg->yy_start - 1) / 2) | 
|  | #define YYSTATE YY_START | 
|  | /* Action number for EOF rule of a given start state. */ | 
|  | #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) | 
|  | /* Special action meaning "start processing a new file". */ | 
|  | #define YY_NEW_FILE yyrestart( yyin , yyscanner ) | 
|  | #define YY_END_OF_BUFFER_CHAR 0 | 
|  |  | 
|  |  | 
|  | /* Size of default input buffer. */ | 
|  | #ifndef YY_BUF_SIZE | 
|  | #ifdef __ia64__ | 
|  | /* On IA-64, the buffer size is 16k, not 8k. | 
|  | * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. | 
|  | * Ditto for the __ia64__ case accordingly. | 
|  | */ | 
|  | #define YY_BUF_SIZE 32768 | 
|  | #else | 
|  | #define YY_BUF_SIZE 16384 | 
|  | #endif /* __ia64__ */ | 
|  | #endif | 
|  |  | 
|  |  | 
|  | /* The state buf must be large enough to hold one state per character in the main buffer. | 
|  | */ | 
|  | #define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) | 
|  |  | 
|  |  | 
|  |  | 
|  | #ifndef YY_TYPEDEF_YY_BUFFER_STATE | 
|  | #define YY_TYPEDEF_YY_BUFFER_STATE | 
|  | typedef struct yy_buffer_state *YY_BUFFER_STATE; | 
|  | #endif | 
|  |  | 
|  | #ifndef YY_TYPEDEF_YY_SIZE_T | 
|  | #define YY_TYPEDEF_YY_SIZE_T | 
|  | typedef size_t yy_size_t; | 
|  | #endif | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | #define EOB_ACT_CONTINUE_SCAN 0 | 
|  | #define EOB_ACT_END_OF_FILE 1 | 
|  | #define EOB_ACT_LAST_MATCH 2 | 
|  |  | 
|  | /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires | 
|  | *       access to the local variable yy_act. Since yyless() is a macro, it would break | 
|  | *       existing scanners that call yyless() from OUTSIDE yylex. | 
|  | *       One obvious solution it to make yy_act a global. I tried that, and saw | 
|  | *       a 5% performance hit in a non-yylineno scanner, because yy_act is | 
|  | *       normally declared as a register variable-- so it is not worth it. | 
|  | */ | 
|  | #define  YY_LESS_LINENO(n) \ | 
|  | do { \ | 
|  | int yyl;\ | 
|  | for ( yyl = n; yyl < yyleng; ++yyl )\ | 
|  | if ( yytext[yyl] == '\n' )\ | 
|  | --yylineno;\ | 
|  | }while(0) | 
|  | #define YY_LINENO_REWIND_TO(dst) \ | 
|  | do {\ | 
|  | const char *p;\ | 
|  | for ( p = yy_cp-1; p >= (dst); --p)\ | 
|  | if ( *p == '\n' )\ | 
|  | --yylineno;\ | 
|  | }while(0) | 
|  |  | 
|  | /* Return all but the first "n" matched characters back to the input stream. */ | 
|  | #define yyless(n) \ | 
|  | do \ | 
|  | { \ | 
|  | /* Undo effects of setting up yytext. */ \ | 
|  | int yyless_macro_arg = (n); \ | 
|  | YY_LESS_LINENO(yyless_macro_arg);\ | 
|  | *yy_cp = yyg->yy_hold_char; \ | 
|  | YY_RESTORE_YY_MORE_OFFSET \ | 
|  | yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ | 
|  | YY_DO_BEFORE_ACTION; /* set up yytext again */ \ | 
|  | } \ | 
|  | while ( 0 ) | 
|  | #define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner ) | 
|  |  | 
|  |  | 
|  | #ifndef YY_STRUCT_YY_BUFFER_STATE | 
|  | #define YY_STRUCT_YY_BUFFER_STATE | 
|  | struct yy_buffer_state | 
|  | { | 
|  | FILE *yy_input_file; | 
|  |  | 
|  |  | 
|  |  | 
|  | char *yy_ch_buf;		/* input buffer */ | 
|  | char *yy_buf_pos;		/* current position in input buffer */ | 
|  |  | 
|  | /* Size of input buffer in bytes, not including room for EOB | 
|  | * characters. | 
|  | */ | 
|  | int yy_buf_size; | 
|  |  | 
|  | /* Number of characters read into yy_ch_buf, not including EOB | 
|  | * characters. | 
|  | */ | 
|  | int yy_n_chars; | 
|  |  | 
|  | /* Whether we "own" the buffer - i.e., we know we created it, | 
|  | * and can realloc() it to grow it, and should free() it to | 
|  | * delete it. | 
|  | */ | 
|  | int yy_is_our_buffer; | 
|  |  | 
|  | /* Whether this is an "interactive" input source; if so, and | 
|  | * if we're using stdio for input, then we want to use getc() | 
|  | * instead of fread(), to make sure we stop fetching input after | 
|  | * each newline. | 
|  | */ | 
|  | int yy_is_interactive; | 
|  |  | 
|  | /* Whether we're considered to be at the beginning of a line. | 
|  | * If so, '^' rules will be active on the next match, otherwise | 
|  | * not. | 
|  | */ | 
|  | int yy_at_bol; | 
|  |  | 
|  | int yy_bs_lineno; /**< The line count. */ | 
|  | int yy_bs_column; /**< The column count. */ | 
|  |  | 
|  |  | 
|  | /* Whether to try to fill the input buffer when we reach the | 
|  | * end of it. | 
|  | */ | 
|  | int yy_fill_buffer; | 
|  |  | 
|  | int yy_buffer_status; | 
|  |  | 
|  | #define YY_BUFFER_NEW 0 | 
|  | #define YY_BUFFER_NORMAL 1 | 
|  | /* When an EOF's been seen but there's still some text to process | 
|  | * then we mark the buffer as YY_EOF_PENDING, to indicate that we | 
|  | * shouldn't try reading from the input source any more.  We might | 
|  | * still have a bunch of tokens to match, though, because of | 
|  | * possible backing-up. | 
|  | * | 
|  | * When we actually see the EOF, we change the status to "new" | 
|  | * (via yyrestart()), so that the user can continue scanning by | 
|  | * just pointing yyin at a new input file. | 
|  | */ | 
|  | #define YY_BUFFER_EOF_PENDING 2 | 
|  |  | 
|  | }; | 
|  | #endif /* !YY_STRUCT_YY_BUFFER_STATE */ | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | /* We provide macros for accessing buffer states in case in the | 
|  | * future we want to put the buffer states in a more general | 
|  | * "scanner state". | 
|  | * | 
|  | * Returns the top of the stack, or NULL. | 
|  | */ | 
|  | #define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \ | 
|  | ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \ | 
|  | : NULL) | 
|  | /* Same as previous macro, but useful when we know that the buffer stack is not | 
|  | * NULL or when we need an lvalue. For internal use only. | 
|  | */ | 
|  | #define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | void yyrestart ( FILE *input_file , yyscan_t yyscanner ); | 
|  | void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner ); | 
|  | YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size , yyscan_t yyscanner ); | 
|  | void yy_delete_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner ); | 
|  | void yy_flush_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner ); | 
|  | void yypush_buffer_state ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner ); | 
|  | void yypop_buffer_state ( yyscan_t yyscanner ); | 
|  |  | 
|  |  | 
|  | static void yyensure_buffer_stack ( yyscan_t yyscanner ); | 
|  | static void yy_load_buffer_state ( yyscan_t yyscanner ); | 
|  | static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file , yyscan_t yyscanner ); | 
|  | #define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER , yyscanner) | 
|  |  | 
|  |  | 
|  | YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size , yyscan_t yyscanner ); | 
|  | YY_BUFFER_STATE yy_scan_string ( const char *yy_str , yyscan_t yyscanner ); | 
|  | YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len , yyscan_t yyscanner ); | 
|  |  | 
|  |  | 
|  | void *yyalloc ( yy_size_t , yyscan_t yyscanner ); | 
|  | void *yyrealloc ( void *, yy_size_t , yyscan_t yyscanner ); | 
|  | void yyfree ( void * , yyscan_t yyscanner ); | 
|  |  | 
|  |  | 
|  | #define yy_new_buffer yy_create_buffer | 
|  | #define yy_set_interactive(is_interactive) \ | 
|  | { \ | 
|  | if ( ! YY_CURRENT_BUFFER ){ \ | 
|  | yyensure_buffer_stack (yyscanner); \ | 
|  | YY_CURRENT_BUFFER_LVALUE =    \ | 
|  | yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); \ | 
|  | } \ | 
|  | YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ | 
|  | } | 
|  | #define yy_set_bol(at_bol) \ | 
|  | { \ | 
|  | if ( ! YY_CURRENT_BUFFER ){\ | 
|  | yyensure_buffer_stack (yyscanner); \ | 
|  | YY_CURRENT_BUFFER_LVALUE =    \ | 
|  | yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); \ | 
|  | } \ | 
|  | YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ | 
|  | } | 
|  | #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) | 
|  |  | 
|  |  | 
|  | /* Begin user sect3 */ | 
|  |  | 
|  | #define yywrap(yyscanner) (/*CONSTCOND*/1) | 
|  | #define YY_SKIP_YYWRAP | 
|  | typedef flex_uint8_t YY_CHAR; | 
|  |  | 
|  |  | 
|  | typedef int yy_state_type; | 
|  |  | 
|  | #define yytext_ptr yytext_r | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | static yy_state_type yy_get_previous_state ( yyscan_t yyscanner ); | 
|  | static yy_state_type yy_try_NUL_trans ( yy_state_type current_state  , yyscan_t yyscanner); | 
|  | static int yy_get_next_buffer ( yyscan_t yyscanner ); | 
|  | static void yynoreturn yy_fatal_error ( const char* msg , yyscan_t yyscanner ); | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | /* Done after the current pattern has been matched and before the | 
|  | * corresponding action - sets up yytext. | 
|  | */ | 
|  | #define YY_DO_BEFORE_ACTION \ | 
|  | yyg->yytext_ptr = yy_bp; \ | 
|  | yyleng = (int) (yy_cp - yy_bp); \ | 
|  | yyg->yy_hold_char = *yy_cp; \ | 
|  | *yy_cp = '\0'; \ | 
|  | yyg->yy_c_buf_p = yy_cp; | 
|  | #define YY_NUM_RULES 239 | 
|  | #define YY_END_OF_BUFFER 240 | 
|  | /* This struct is not used in this scanner, | 
|  | but its presence is necessary. */ | 
|  | struct yy_trans_info | 
|  | { | 
|  | flex_int32_t yy_verify; | 
|  | flex_int32_t yy_nxt; | 
|  | }; | 
|  | static const flex_int16_t yy_accept[821] = | 
|  | {   0, | 
|  | 0,    0,    0,    0,    0,    0,  240,  238,  237,  237, | 
|  | 222,  228,  233,  217,  218,  226,  225,  214,  223,  221, | 
|  | 227,  180,  180,  215,  211,  229,  216,  230,  234,  177, | 
|  | 219,  220,  232,  177,  177,  177,  177,  177,  177,  177, | 
|  | 177,  177,  177,  177,  177,  177,  177,  177,  177,  177, | 
|  | 177,  177,  177,  212,  231,  213,  224,  239,  236,  235, | 
|  | 208,  194,  213,  202,  197,  192,  200,  190,  201,  191, | 
|  | 186,  193,  185,  179,  180,    0,  183,    0,  220,  212, | 
|  | 219,  209,  205,  207,  206,  210,  177,  198,  204,  177, | 
|  | 177,  177,  177,  177,  177,  177,  177,  177,  177,  177, | 
|  |  | 
|  | 177,   12,  177,  177,  177,  177,  177,  177,  177,  177, | 
|  | 177,  177,  177,  177,  177,   15,  177,  177,   23,  177, | 
|  | 177,  177,  177,  177,  177,  177,  177,  177,  177,  177, | 
|  | 177,  177,  177,  177,  177,  177,  177,  177,  177,  177, | 
|  | 177,  177,  177,  177,  177,  177,  177,  177,  177,  177, | 
|  | 177,  177,  199,  203,  235,    0,  189,  185,    0,  188, | 
|  | 182,    0,  184,  178,  195,  196,  177,  136,  177,  177, | 
|  | 177,  177,  177,  177,  177,  177,  177,  177,  177,  177, | 
|  | 177,  177,  177,  177,  177,  177,  177,  177,  177,  177, | 
|  | 177,   13,  177,  177,  177,  177,  177,  177,  177,  177, | 
|  |  | 
|  | 177,  177,   27,  177,  177,  177,  177,  177,  177,  177, | 
|  | 177,  177,  177,  177,   24,  177,  177,  177,  177,  177, | 
|  | 177,  177,  177,  177,  177,  177,  177,  177,  177,  177, | 
|  | 177,  177,  177,  177,  177,  177,  177,  177,  177,  177, | 
|  | 177,  177,  177,  177,  177,  177,  177,  177,  177,    0, | 
|  | 186,    0,  185,  187,  181,  177,  177,  177,   30,  177, | 
|  | 177,   18,  174,  177,  177,  177,  177,  177,  177,  177, | 
|  | 177,  177,  177,   16,  139,  177,  177,  177,  177,   21, | 
|  | 177,  177,  143,  155,  177,  177,  177,  177,  177,  177, | 
|  | 177,  177,  177,  177,  177,  177,  152,    4,   35,   36, | 
|  |  | 
|  | 37,  177,  177,  177,  177,  177,  177,  177,  177,  177, | 
|  | 177,  177,  177,  177,  177,  177,  177,  177,  177,  177, | 
|  | 177,  177,  177,  177,  177,  142,   31,  177,  177,   28, | 
|  | 177,  177,  177,  177,  177,  177,  177,   47,   48,   49, | 
|  | 29,  177,  177,  177,  177,  177,  177,   10,   56,   57, | 
|  | 58,  177,  137,  177,  177,    7,  177,  177,  177,  177, | 
|  | 164,  165,  166,  177,   32,  177,  156,   26,  167,  168, | 
|  | 169,    2,  161,  162,  163,  177,  177,  177,   25,  159, | 
|  | 177,  177,  177,   50,   51,   52,  177,  177,  177,  177, | 
|  | 177,  177,  177,  177,  177,  177,  177,   86,  177,  177, | 
|  |  | 
|  | 177,  177,  177,  177,  177,  153,  177,  177,  177,  177, | 
|  | 177,  177,  177,  177,  177,  177,  177,  138,  177,  177, | 
|  | 176,   53,   54,   55,  177,  177,   14,  177,   91,  177, | 
|  | 177,  177,  177,   89,  177,  177,  177,  154,  149,   92, | 
|  | 177,  177,  177,  177,  177,  177,  144,  177,  177,  177, | 
|  | 78,   38,   41,   43,   42,   39,   45,   44,   46,   40, | 
|  | 177,  177,  177,  177,  160,  135,  177,  177,  147,  177, | 
|  | 177,  177,   34,   87,  173,   22,  148,   77,  177,  158, | 
|  | 17,  177,  177,  177,  177,  177,  177,  177,  177,  177, | 
|  | 177,  177,  177,  177,  177,   19,   33,  177,  177,  177, | 
|  |  | 
|  | 177,  177,  177,   93,   94,   95,  177,  177,  177,  177, | 
|  | 177,    3,  177,  177,  177,  177,  177,  177,  177,  177, | 
|  | 177,  177,  177,  140,  177,  177,  177,  177,  177,    8, | 
|  | 177,  177,    9,  177,  177,  177,  177,   20,   79,   11, | 
|  | 150,   97,   98,   99,  177,  177,  177,  177,  177,  177, | 
|  | 177,  177,  177,  177,  177,  177,  145,  177,  177,  177, | 
|  | 81,   83,   80,  177,  177,  177,  177,  177,  177,  177, | 
|  | 141,  101,  102,  103,  177,  177,  157,  177,  146,  177, | 
|  | 177,    6,  177,  177,  177,  177,  177,  177,  177,  177, | 
|  | 177,   96,  151,    1,  177,  177,  177,  177,  177,  175, | 
|  |  | 
|  | 177,   90,    5,  170,   59,   63,  177,  177,  177,  177, | 
|  | 177,  177,  177,  177,  177,  177,  177,  177,  177,   82, | 
|  | 177,  177,  177,  177,  100,  177,  177,  177,  177,  177, | 
|  | 120,   66,   67,  177,  177,  177,  177,  177,  177,  177, | 
|  | 177,  177,  177,  177,  177,  177,   88,  177,  177,  177, | 
|  | 104,  122,   70,   71,  177,  177,   84,  177,  177,  177, | 
|  | 177,  177,  177,  177,  115,  177,  177,  177,  177,  177, | 
|  | 177,  177,  177,  177,  177,  129,  177,  177,  177,  177, | 
|  | 60,  177,  177,  177,  177,  177,  177,  177,  177,  177, | 
|  | 177,  177,  177,  116,  105,  177,  106,  177,  177,  177, | 
|  |  | 
|  | 130,  177,  177,   68,  177,  177,  177,  177,  177,  177, | 
|  | 177,  177,  177,  177,  177,  177,  177,  117,  177,  177, | 
|  | 131,  177,  177,   72,  107,  108,  177,  111,  177,  112, | 
|  | 177,  177,  177,  177,  177,   85,  177,  177,  177,  177, | 
|  | 61,  177,   64,  126,  177,  177,  109,  110,  177,  177, | 
|  | 177,  177,  177,  177,  177,  177,  177,  177,  124,  127, | 
|  | 118,  177,   65,  177,  177,  177,  177,  177,  177,  177, | 
|  | 177,  125,  128,  177,  177,  121,   69,  177,  177,  171, | 
|  | 177,  177,  177,   74,  177,  177,  123,   73,  177,  177, | 
|  | 177,  177,  177,  177,  132,  177,  177,  177,  177,  177, | 
|  |  | 
|  | 177,  133,  177,  177,  177,   75,  177,  134,  113,  114, | 
|  | 177,  177,  177,   62,  177,  177,  172,  119,   76,    0 | 
|  | } ; | 
|  |  | 
|  | static const YY_CHAR yy_ec[256] = | 
|  | {   0, | 
|  | 1,    1,    1,    1,    1,    1,    1,    1,    2,    3, | 
|  | 2,    2,    2,    1,    1,    1,    1,    1,    1,    1, | 
|  | 1,    1,    1,    1,    1,    1,    1,    1,    1,    1, | 
|  | 1,    2,    4,    1,    1,    1,    5,    6,    1,    7, | 
|  | 8,    9,   10,   11,   12,   13,   14,   15,   16,   17, | 
|  | 18,   19,   20,   20,   20,   21,   21,   22,   23,   24, | 
|  | 25,   26,   27,    1,   28,   29,   30,   31,   32,   33, | 
|  | 34,   34,   34,   34,   34,   34,   35,   34,   36,   34, | 
|  | 34,   37,   38,   34,   39,   34,   34,   40,   34,   34, | 
|  | 41,    1,   42,   43,   44,    1,   45,   46,   47,   48, | 
|  |  | 
|  | 49,   50,   51,   52,   53,   34,   54,   55,   56,   57, | 
|  | 58,   59,   34,   60,   61,   62,   63,   64,   65,   66, | 
|  | 67,   68,   69,   70,   71,   72,    1,    1,    1,    1, | 
|  | 1,    1,    1,    1,    1,    1,    1,    1,    1,    1, | 
|  | 1,    1,    1,    1,    1,    1,    1,    1,    1,    1, | 
|  | 1,    1,    1,    1,    1,    1,    1,    1,    1,    1, | 
|  | 1,    1,    1,    1,    1,    1,    1,    1,    1,    1, | 
|  | 1,    1,    1,    1,    1,    1,    1,    1,    1,    1, | 
|  | 1,    1,    1,    1,    1,    1,    1,    1,    1,    1, | 
|  | 1,    1,    1,    1,    1,    1,    1,    1,    1,    1, | 
|  |  | 
|  | 1,    1,    1,    1,    1,    1,    1,    1,    1,    1, | 
|  | 1,    1,    1,    1,    1,    1,    1,    1,    1,    1, | 
|  | 1,    1,    1,    1,    1,    1,    1,    1,    1,    1, | 
|  | 1,    1,    1,    1,    1,    1,    1,    1,    1,    1, | 
|  | 1,    1,    1,    1,    1,    1,    1,    1,    1,    1, | 
|  | 1,    1,    1,    1,    1 | 
|  | } ; | 
|  |  | 
|  | static const YY_CHAR yy_meta[73] = | 
|  | {   0, | 
|  | 1,    1,    1,    1,    1,    1,    1,    1,    1,    1, | 
|  | 1,    1,    1,    1,    2,    2,    2,    2,    2,    2, | 
|  | 2,    1,    1,    1,    1,    1,    1,    3,    3,    3, | 
|  | 3,    2,    2,    4,    4,    4,    4,    4,    4,    4, | 
|  | 1,    1,    1,    4,    3,    3,    3,    3,    2,    2, | 
|  | 4,    4,    4,    4,    4,    4,    4,    4,    4,    4, | 
|  | 4,    4,    4,    4,    4,    4,    4,    4,    1,    1, | 
|  | 1,    1 | 
|  | } ; | 
|  |  | 
|  | static const flex_int16_t yy_base[827] = | 
|  | {   0, | 
|  | 0,    0, 1019, 1018,   72,    0, 1020, 1023, 1023, 1023, | 
|  | 994,  120,  141, 1023, 1023,  993,  138, 1023,  137,  135, | 
|  | 992,  154,  208,  990, 1023,  154,  990,  132, 1023,    0, | 
|  | 1023, 1023,  139,  130,  123,  140,  147,  133,  177,  956, | 
|  | 186,  151,  139,  116,  161,  950,  173,  963,  193,  199, | 
|  | 208,  215,  108, 1023,  184, 1023, 1023, 1023, 1023,    0, | 
|  | 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, | 
|  | 230, 1023,  235,  235,    0,  271, 1023,    0, 1023, 1023, | 
|  | 1023,  986, 1023, 1023, 1023,  985,    0, 1023, 1023,  947, | 
|  | 952,  152,  949,  957,  956,  943,  946,  957,  243,  951, | 
|  |  | 
|  | 939,  936,  949,  936,  933,  933,  939,  147,  248,  933, | 
|  | 943,  929,  935,  938,  939,    0,  931,  941,  249,  940, | 
|  | 935,  916,  177,  920,  933,  924,  184,  917,  250,  929, | 
|  | 931,  257,  920,  917,  906,  915,  249,  257,  919,  915, | 
|  | 917,  906,  909,  196,  217,  269,  918,  906,  918,  262, | 
|  | 911,  910, 1023, 1023,    0,  311, 1023,  292,  328, 1023, | 
|  | 1023,  335,  342,  257, 1023, 1023,  909,    0,  905,  900, | 
|  | 904,  913,  910,  315,  894,  894,  905,  897,  215,  907, | 
|  | 904,  904,  902,  899,  891,  897,  884,  882,  894,  880, | 
|  | 896,    0,  893,  881,  888,  885,  889,  890,  883,  880, | 
|  |  | 
|  | 869,  868,  881,  884,  872,  880,  868,  874,  865,  316, | 
|  | 870,  873,  864,  871,  860,  864,  855,  869,  868,  859, | 
|  | 865,  307,  849,  852,  850,  860,  850,  845,  843,  845, | 
|  | 855,  841,  843,  840,  851,  850,  853,  835,  316,  843, | 
|  | 839,  837,  846,  825,  353,  843,  845,  834,  826,  363, | 
|  | 370,  378,  389, 1023, 1023,  823,  833,  832,    0,  830, | 
|  | 383,    0,    0,  823,  821,  821,  822,  817,  825,  814, | 
|  | 831,  820,  394,    0,    0,  814,  824,  823,  823,    0, | 
|  | 808,  397,    0,    0,  810,  400,  817,  818,  809,  803, | 
|  | 802,  803,  802,  802,  406,  797,    0,    0,  793,  792, | 
|  |  | 
|  | 791,  793,  794,  799,  793,  789,  802,  797,  797,  795, | 
|  | 794,  788,  782,  784,  783,  787,  779,  782,  777,  785, | 
|  | 790,  778,  775,  787,  778,    0,    0,  784,  780,    0, | 
|  | 772,  772,  777,  768,  775,  409,  772,    0,    0,    0, | 
|  | 0,  762,  774,  773,  772,  773,  773,    0,    0,    0, | 
|  | 0,  760,    0,  768,  759,    0,  758,  759,  753,  763, | 
|  | 0,    0,    0,  754,    0,  750,    0,    0,    0,    0, | 
|  | 0,    0,    0,    0,    0,  760,  413,  759,    0,    0, | 
|  | 757,  753,  750,    0,    0,    0,  742,  415,  418,  427, | 
|  | 747,  743,  748,  739,  737,  750,  735,    0,  735,  748, | 
|  |  | 
|  | 737,  733,  739,  734,  741,    0,  739,  736,  740,  724, | 
|  | 722,  725,  731,  737,  732,  731,  719,    0,  721,  722, | 
|  | 0,    0,    0,    0,  719,  722,    0,  716,    0,  729, | 
|  | 709,  718,  713,    0,  706,  706,  719,    0,  721,    0, | 
|  | 431,  734,  733,  732,  699,  698,    0,  715,  714,  709, | 
|  | 0,    0,    0,    0,    0,    0,    0,    0,    0,    0, | 
|  | 698,  711,  698,  695,    0,    0,  700,  699,    0,  696, | 
|  | 703,  702,    0,  688,    0,    0,    0,    0,  685,    0, | 
|  | 0,  684,  695,  434,  688,  694,  693,  690,  685,  682, | 
|  | 675,  675,  688,  673,  685,    0,    0,  678,  701,  700, | 
|  |  | 
|  | 699,  666,  665,  427,  428,    0,  677,  680,  678,  667, | 
|  | 663,    0,  675,  672,  671,  661,  660,  650,  667,  653, | 
|  | 441,  661,  664,    0,  681,  680,  679,  646,  645,    0, | 
|  | 659,  646,    0,  656,  649,  650,  653,    0,    0,    0, | 
|  | 0,  673,  672,    0,  649,  652,  637,  644,  635,  642, | 
|  | 643,  643,  642,  628,  451,  640,    0,  641,  630,  629, | 
|  | 0,    0,    0,  654,  653,  652,  619,  618,  614,  622, | 
|  | 0,  650,  649,    0,  626,  629,    0,  458,    0,  607, | 
|  | 616,    0,  612,  611,  620,  620,  608,  622,  606,  620, | 
|  | 615,    0,    0,    0,  632,  631,  630,  597,  596,    0, | 
|  |  | 
|  | 596,    0,    0,  434,  454,  620,  606,  609,  592,  604, | 
|  | 592,  591,  600,  600,  617,  616,  615,  582,  581,    0, | 
|  | 581,  582,  581,  591,    0,  594,  590,  592,  588,  575, | 
|  | 606,  449,    0,  583,  586,  578,  570,  577,  568,  589, | 
|  | 577,  573,  575,  573,  573,  572,    0,  560,  559,  569, | 
|  | 0,  589,  462,    0,  566,  569,    0,  569,  568,  552, | 
|  | 544,  552,  542,  550,    0,  547,  546,  567,  555,  553, | 
|  | 553,  537,  540,  554,  538,  569,  549,  550,  547,  544, | 
|  | 554,  531,  545,  544,  528,  527,  526,  547,  535,  533, | 
|  | 533,  514,  513,    0,  541,  513,  539,  511,  515,  514, | 
|  |  | 
|  | 545,  525,  522,    0,  521,  524,  520,  522,  506,  503, | 
|  | 516,  501,  502,  509,  503,  492,  491,    0,  497,  496, | 
|  | 527,  507,  504,    0,    0,    0,  500,    0,  499,    0, | 
|  | 505,  504,  488,  485,  486,    0,  478,  486,  476,  482, | 
|  | 503,  482,    0,    0,  494,  493,    0,    0,  492,  491, | 
|  | 475,  472,  473,  487,  486,  463,  462,  468,    0,    0, | 
|  | 489,  461,  487,  479,  128,  151,  196,  227,  238,  269, | 
|  | 277,    0,    0,  291,  319,    0,    0,  323,  321,    0, | 
|  | 324,  354,  393,    0,  382,  405,    0,    0,  408,  396, | 
|  | 420,  412,  438,  440,    0,  445,  429,  463,  429,  433, | 
|  |  | 
|  | 435,    0,  453,  454,  445,    0,  466,    0,    0,    0, | 
|  | 447,  448,  442,    0,  443,  444,    0,    0,    0, 1023, | 
|  | 509,  512,  515,  518,  519,  520 | 
|  | } ; | 
|  |  | 
|  | static const flex_int16_t yy_def[827] = | 
|  | {   0, | 
|  | 820,    1,  821,  821,  820,    5,  820,  820,  820,  820, | 
|  | 820,  820,  820,  820,  820,  820,  820,  820,  820,  820, | 
|  | 820,  820,  820,  820,  820,  820,  820,  820,  820,  822, | 
|  | 820,  820,  820,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  820,  820,  820,  820,  820,  820,  823, | 
|  | 820,  820,  820,  820,  820,  820,  820,  820,  820,  820, | 
|  | 824,  820,  825,   22,   23,  820,  820,  826,  820,  820, | 
|  | 820,  820,  820,  820,  820,  820,  822,  820,  820,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  |  | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  820,  820,  823,  820,  820,  825,  820,  820, | 
|  | 820,  820,  820,  826,  820,  820,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  |  | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  820, | 
|  | 820,  820,  820,  820,  820,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  |  | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  |  | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  |  | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  |  | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  |  | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  |  | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,  822, | 
|  | 822,  822,  822,  822,  822,  822,  822,  822,  822,    0, | 
|  | 820,  820,  820,  820,  820,  820 | 
|  | } ; | 
|  |  | 
|  | static const flex_int16_t yy_nxt[1096] = | 
|  | {   0, | 
|  | 8,    9,   10,   11,   12,   13,   14,   15,   16,   17, | 
|  | 18,   19,   20,   21,   22,   23,   23,   23,   23,   23, | 
|  | 23,   24,   25,   26,   27,   28,   29,   30,   30,   30, | 
|  | 30,   30,   30,   30,   30,   30,   30,   30,   30,   30, | 
|  | 31,   32,   33,   30,   34,   35,   36,   37,   38,   39, | 
|  | 40,   41,   42,   30,   43,   44,   45,   46,   47,   48, | 
|  | 49,   50,   51,   52,   53,   30,   30,   30,   54,   55, | 
|  | 56,   57,    8,   59,   58,    8,    8,    8,    8,    8, | 
|  | 8,    8,    8,    8,    8,    8,    8,    8,    8,    8, | 
|  | 8,    8,    8,    8,    8,    8,    8,    8,    8,   60, | 
|  |  | 
|  | 60,   60,   60,   60,   60,   60,   60,   60,   60,   60, | 
|  | 60,   60,    8,    8,    8,   60,   60,   60,   60,   60, | 
|  | 60,   60,   60,   60,   60,   60,   60,   60,   60,   60, | 
|  | 60,   60,   60,   60,   60,   60,   60,   60,   60,   60, | 
|  | 8,    8,    8,    8,   62,   63,   64,   67,   69,   71, | 
|  | 71,   71,   71,   71,   71,   71,   85,   86,   80,  151, | 
|  | 124,   70,   68,   88,  125,   65,   73,  152,   74,   74, | 
|  | 74,   74,   74,   74,   75,   81,   90,   82,   83,  783, | 
|  | 93,   89,   94,  122,   96,   76,   95,  104,   97,  105, | 
|  | 91,   92,   77,   78,   98,  100,  123,   99,  106,  101, | 
|  |  | 
|  | 116,  188,   76,  117,  102,  126,  118,  119,  153,  169, | 
|  | 103,  120,  189,  170,  121,  784,   77,  129,  127,   78, | 
|  | 73,  107,   75,   75,   75,   75,   75,   75,   75,  108, | 
|  | 113,  109,  130,  208,  110,  131,  213,  133,  114,   76, | 
|  | 111,  209,  214,  785,  134,  135,   77,  140,  136,  115, | 
|  | 141,  237,  238,  154,  137,  138,   76,  139,  142,  148, | 
|  | 144,  156,  157,  149,  145,  143,  159,  160,  146,  239, | 
|  | 77,  147,  150,  161,  820,  268,  269,  240,  156,  157, | 
|  | 162,  786,  162,  159,  160,  163,  163,  163,  163,  163, | 
|  | 163,  163,  190,  228,  177,  255,  216,  161,  178,  179, | 
|  |  | 
|  | 820,  221,  230,  200,  787,  191,  201,  202,  229,  217, | 
|  | 203,  218,  204,  241,  246,  231,  247,  222,  223,  255, | 
|  | 250,  242,  250,  159,  160,  251,  251,  251,  251,  251, | 
|  | 251,  251,  299,  300,  301,  788,  789,  252,  790,  252, | 
|  | 159,  160,  253,  253,  253,  253,  253,  253,  253,  163, | 
|  | 163,  163,  163,  163,  163,  163,  163,  163,  163,  163, | 
|  | 163,  163,  163,  262,  313,  331,  791,  792,  314,  338, | 
|  | 339,  340,  793,  332,  254,  794,  263,  251,  251,  251, | 
|  | 251,  251,  251,  251,  251,  251,  251,  251,  251,  251, | 
|  | 251,  254,  253,  253,  253,  253,  253,  253,  253,  349, | 
|  |  | 
|  | 350,  351,  157,  253,  253,  253,  253,  253,  253,  253, | 
|  | 361,  362,  363,  369,  370,  371,  373,  374,  375,  157, | 
|  | 795,  160,  384,  385,  386,  422,  423,  424,  442,  443, | 
|  | 444,  452,  453,  454,  455,  456,  457,  796,  160,  797, | 
|  | 798,  445,  446,  458,  459,  460,  499,  500,  501,  525, | 
|  | 526,  527,  799,  800,  547,  549,  564,  565,  566,  502, | 
|  | 503,  637,  528,  529,  548,  550,  595,  596,  597,  567, | 
|  | 568,  638,  569,  615,  616,  617,  667,  801,  802,  598, | 
|  | 599,  639,  803,  668,  804,  669,  618,  619,  640,  687, | 
|  | 641,  642,  805,  806,  807,  808,  688,  809,  689,  810, | 
|  |  | 
|  | 811,  812,  813,  814,  815,  816,  817,  818,  819,    8, | 
|  | 8,    8,    8,   87,   87,   87,  155,  155,  155,   71, | 
|  | 158,  164,  164,  782,  781,  780,  779,  778,  777,  776, | 
|  | 775,  774,  773,  772,  771,  770,  769,  768,  767,  766, | 
|  | 765,  764,  763,  762,  761,  760,  759,  758,  757,  756, | 
|  | 755,  754,  753,  752,  751,  750,  749,  748,  747,  746, | 
|  | 745,  744,  743,  742,  741,  740,  739,  738,  737,  736, | 
|  | 735,  734,  733,  732,  731,  730,  729,  728,  727,  726, | 
|  | 725,  724,  723,  722,  721,  720,  719,  718,  717,  716, | 
|  | 715,  714,  713,  712,  711,  710,  709,  708,  707,  706, | 
|  |  | 
|  | 705,  704,  703,  702,  701,  700,  699,  698,  697,  696, | 
|  | 695,  694,  693,  692,  691,  690,  686,  685,  684,  683, | 
|  | 682,  681,  680,  679,  678,  677,  676,  675,  674,  673, | 
|  | 672,  671,  670,  666,  665,  664,  663,  662,  661,  660, | 
|  | 659,  658,  657,  656,  655,  654,  653,  652,  651,  650, | 
|  | 649,  648,  647,  646,  645,  644,  643,  636,  635,  634, | 
|  | 633,  632,  631,  630,  629,  628,  627,  626,  625,  624, | 
|  | 623,  622,  621,  620,  614,  613,  612,  611,  610,  609, | 
|  | 608,  607,  606,  605,  604,  603,  602,  601,  600,  594, | 
|  | 593,  592,  591,  590,  589,  588,  587,  586,  585,  584, | 
|  |  | 
|  | 583,  582,  581,  580,  579,  578,  577,  576,  575,  574, | 
|  | 573,  572,  571,  570,  563,  562,  561,  560,  559,  558, | 
|  | 557,  556,  555,  554,  553,  552,  551,  546,  545,  544, | 
|  | 543,  542,  541,  540,  539,  538,  537,  536,  535,  534, | 
|  | 533,  532,  531,  530,  524,  523,  522,  521,  520,  519, | 
|  | 518,  517,  516,  515,  514,  513,  512,  511,  510,  509, | 
|  | 508,  507,  506,  505,  504,  498,  497,  496,  495,  494, | 
|  | 493,  492,  491,  490,  489,  488,  487,  486,  485,  484, | 
|  | 483,  482,  481,  480,  479,  478,  477,  476,  475,  474, | 
|  | 473,  472,  471,  470,  469,  468,  467,  466,  465,  464, | 
|  |  | 
|  | 463,  462,  461,  451,  450,  449,  448,  447,  441,  440, | 
|  | 439,  438,  437,  436,  435,  434,  433,  432,  431,  430, | 
|  | 429,  428,  427,  426,  425,  421,  420,  419,  418,  417, | 
|  | 416,  415,  414,  413,  412,  411,  410,  409,  408,  407, | 
|  | 406,  405,  404,  403,  402,  401,  400,  399,  398,  397, | 
|  | 396,  395,  394,  393,  392,  391,  390,  389,  388,  387, | 
|  | 383,  382,  381,  380,  379,  378,  377,  376,  372,  368, | 
|  | 367,  366,  365,  364,  360,  359,  358,  357,  356,  355, | 
|  | 354,  353,  352,  348,  347,  346,  345,  344,  343,  342, | 
|  | 341,  337,  336,  335,  334,  333,  330,  329,  328,  327, | 
|  |  | 
|  | 326,  325,  324,  323,  322,  321,  320,  319,  318,  317, | 
|  | 316,  315,  312,  311,  310,  309,  308,  307,  306,  305, | 
|  | 304,  303,  302,  298,  297,  296,  295,  294,  293,  292, | 
|  | 291,  290,  289,  288,  287,  286,  285,  284,  283,  282, | 
|  | 281,  280,  279,  278,  277,  276,  275,  274,  273,  272, | 
|  | 271,  270,  267,  266,  265,  264,  261,  260,  259,  258, | 
|  | 257,  256,  249,  248,  245,  244,  243,  236,  235,  234, | 
|  | 233,  232,  227,  226,  225,  224,  220,  219,  215,  212, | 
|  | 211,  210,  207,  206,  205,  199,  198,  197,  196,  195, | 
|  | 194,  193,  192,  187,  186,  185,  184,  183,  182,  181, | 
|  |  | 
|  | 180,  176,  175,  174,  173,  172,  171,  168,  167,  166, | 
|  | 165,  132,  128,  112,   84,   79,   72,   66,   61,  820, | 
|  | 58,   58,    7,  820,  820,  820,  820,  820,  820,  820, | 
|  | 820,  820,  820,  820,  820,  820,  820,  820,  820,  820, | 
|  | 820,  820,  820,  820,  820,  820,  820,  820,  820,  820, | 
|  | 820,  820,  820,  820,  820,  820,  820,  820,  820,  820, | 
|  | 820,  820,  820,  820,  820,  820,  820,  820,  820,  820, | 
|  | 820,  820,  820,  820,  820,  820,  820,  820,  820,  820, | 
|  | 820,  820,  820,  820,  820,  820,  820,  820,  820,  820, | 
|  | 820,  820,  820,  820,  820 | 
|  |  | 
|  | } ; | 
|  |  | 
|  | static const flex_int16_t yy_chk[1096] = | 
|  | {   0, | 
|  | 1,    1,    1,    1,    1,    1,    1,    1,    1,    1, | 
|  | 1,    1,    1,    1,    1,    1,    1,    1,    1,    1, | 
|  | 1,    1,    1,    1,    1,    1,    1,    1,    1,    1, | 
|  | 1,    1,    1,    1,    1,    1,    1,    1,    1,    1, | 
|  | 1,    1,    1,    1,    1,    1,    1,    1,    1,    1, | 
|  | 1,    1,    1,    1,    1,    1,    1,    1,    1,    1, | 
|  | 1,    1,    1,    1,    1,    1,    1,    1,    1,    1, | 
|  | 1,    1,    5,    5,    5,    5,    5,    5,    5,    5, | 
|  | 5,    5,    5,    5,    5,    5,    5,    5,    5,    5, | 
|  | 5,    5,    5,    5,    5,    5,    5,    5,    5,    5, | 
|  |  | 
|  | 5,    5,    5,    5,    5,    5,    5,    5,    5,    5, | 
|  | 5,    5,    5,    5,    5,    5,    5,    5,    5,    5, | 
|  | 5,    5,    5,    5,    5,    5,    5,    5,    5,    5, | 
|  | 5,    5,    5,    5,    5,    5,    5,    5,    5,    5, | 
|  | 5,    5,    5,    5,   12,   12,   13,   17,   19,   20, | 
|  | 20,   20,   20,   20,   20,   20,   28,   28,   26,   53, | 
|  | 44,   19,   17,   33,   44,   13,   22,   53,   22,   22, | 
|  | 22,   22,   22,   22,   22,   26,   34,   26,   26,  765, | 
|  | 35,   33,   35,   43,   36,   22,   35,   38,   36,   38, | 
|  | 34,   34,   22,   22,   36,   37,   43,   36,   38,   37, | 
|  |  | 
|  | 42,  108,   22,   42,   37,   45,   42,   42,   55,   92, | 
|  | 37,   42,  108,   92,   42,  766,   22,   47,   45,   22, | 
|  | 23,   39,   23,   23,   23,   23,   23,   23,   23,   39, | 
|  | 41,   39,   47,  123,   39,   47,  127,   49,   41,   23, | 
|  | 39,  123,  127,  767,   49,   49,   23,   50,   49,   41, | 
|  | 50,  144,  144,   55,   49,   49,   23,   49,   50,   52, | 
|  | 51,   71,   71,   52,   51,   50,   73,   73,   51,  145, | 
|  | 23,   51,   52,   74,   74,  179,  179,  145,   71,   71, | 
|  | 76,  768,   76,   73,   73,   76,   76,   76,   76,   76, | 
|  | 76,   76,  109,  137,   99,  164,  129,   74,   99,   99, | 
|  |  | 
|  | 74,  132,  138,  119,  769,  109,  119,  119,  137,  129, | 
|  | 119,  129,  119,  146,  150,  138,  150,  132,  132,  164, | 
|  | 156,  146,  156,  158,  158,  156,  156,  156,  156,  156, | 
|  | 156,  156,  210,  210,  210,  770,  771,  159,  774,  159, | 
|  | 158,  158,  159,  159,  159,  159,  159,  159,  159,  162, | 
|  | 162,  162,  162,  162,  162,  162,  163,  163,  163,  163, | 
|  | 163,  163,  163,  174,  222,  239,  775,  778,  222,  245, | 
|  | 245,  245,  779,  239,  163,  781,  174,  250,  250,  250, | 
|  | 250,  250,  250,  250,  251,  251,  251,  251,  251,  251, | 
|  | 251,  163,  252,  252,  252,  252,  252,  252,  252,  261, | 
|  |  | 
|  | 261,  261,  251,  253,  253,  253,  253,  253,  253,  253, | 
|  | 273,  273,  273,  282,  282,  282,  286,  286,  286,  251, | 
|  | 782,  253,  295,  295,  295,  336,  336,  336,  377,  377, | 
|  | 377,  388,  388,  388,  389,  389,  389,  783,  253,  785, | 
|  | 786,  377,  377,  390,  390,  390,  441,  441,  441,  484, | 
|  | 484,  484,  789,  790,  504,  505,  521,  521,  521,  441, | 
|  | 441,  604,  484,  484,  504,  505,  555,  555,  555,  521, | 
|  | 521,  604,  521,  578,  578,  578,  632,  791,  792,  555, | 
|  | 555,  605,  793,  632,  794,  632,  578,  578,  605,  653, | 
|  | 605,  605,  796,  797,  798,  799,  653,  800,  653,  801, | 
|  |  | 
|  | 803,  804,  805,  807,  811,  812,  813,  815,  816,  821, | 
|  | 821,  821,  821,  822,  822,  822,  823,  823,  823,  824, | 
|  | 825,  826,  826,  764,  763,  762,  761,  758,  757,  756, | 
|  | 755,  754,  753,  752,  751,  750,  749,  746,  745,  742, | 
|  | 741,  740,  739,  738,  737,  735,  734,  733,  732,  731, | 
|  | 729,  727,  723,  722,  721,  720,  719,  717,  716,  715, | 
|  | 714,  713,  712,  711,  710,  709,  708,  707,  706,  705, | 
|  | 703,  702,  701,  700,  699,  698,  697,  696,  695,  693, | 
|  | 692,  691,  690,  689,  688,  687,  686,  685,  684,  683, | 
|  | 682,  681,  680,  679,  678,  677,  676,  675,  674,  673, | 
|  |  | 
|  | 672,  671,  670,  669,  668,  667,  666,  664,  663,  662, | 
|  | 661,  660,  659,  658,  656,  655,  652,  650,  649,  648, | 
|  | 646,  645,  644,  643,  642,  641,  640,  639,  638,  637, | 
|  | 636,  635,  634,  631,  630,  629,  628,  627,  626,  624, | 
|  | 623,  622,  621,  619,  618,  617,  616,  615,  614,  613, | 
|  | 612,  611,  610,  609,  608,  607,  606,  601,  599,  598, | 
|  | 597,  596,  595,  591,  590,  589,  588,  587,  586,  585, | 
|  | 584,  583,  581,  580,  576,  575,  573,  572,  570,  569, | 
|  | 568,  567,  566,  565,  564,  560,  559,  558,  556,  554, | 
|  | 553,  552,  551,  550,  549,  548,  547,  546,  545,  543, | 
|  |  | 
|  | 542,  537,  536,  535,  534,  532,  531,  529,  528,  527, | 
|  | 526,  525,  523,  522,  520,  519,  518,  517,  516,  515, | 
|  | 514,  513,  511,  510,  509,  508,  507,  503,  502,  501, | 
|  | 500,  499,  498,  495,  494,  493,  492,  491,  490,  489, | 
|  | 488,  487,  486,  485,  483,  482,  479,  474,  472,  471, | 
|  | 470,  468,  467,  464,  463,  462,  461,  450,  449,  448, | 
|  | 446,  445,  444,  443,  442,  439,  437,  436,  435,  433, | 
|  | 432,  431,  430,  428,  426,  425,  420,  419,  417,  416, | 
|  | 415,  414,  413,  412,  411,  410,  409,  408,  407,  405, | 
|  | 404,  403,  402,  401,  400,  399,  397,  396,  395,  394, | 
|  |  | 
|  | 393,  392,  391,  387,  383,  382,  381,  378,  376,  366, | 
|  | 364,  360,  359,  358,  357,  355,  354,  352,  347,  346, | 
|  | 345,  344,  343,  342,  337,  335,  334,  333,  332,  331, | 
|  | 329,  328,  325,  324,  323,  322,  321,  320,  319,  318, | 
|  | 317,  316,  315,  314,  313,  312,  311,  310,  309,  308, | 
|  | 307,  306,  305,  304,  303,  302,  301,  300,  299,  296, | 
|  | 294,  293,  292,  291,  290,  289,  288,  287,  285,  281, | 
|  | 279,  278,  277,  276,  272,  271,  270,  269,  268,  267, | 
|  | 266,  265,  264,  260,  258,  257,  256,  249,  248,  247, | 
|  | 246,  244,  243,  242,  241,  240,  238,  237,  236,  235, | 
|  |  | 
|  | 234,  233,  232,  231,  230,  229,  228,  227,  226,  225, | 
|  | 224,  223,  221,  220,  219,  218,  217,  216,  215,  214, | 
|  | 213,  212,  211,  209,  208,  207,  206,  205,  204,  203, | 
|  | 202,  201,  200,  199,  198,  197,  196,  195,  194,  193, | 
|  | 191,  190,  189,  188,  187,  186,  185,  184,  183,  182, | 
|  | 181,  180,  178,  177,  176,  175,  173,  172,  171,  170, | 
|  | 169,  167,  152,  151,  149,  148,  147,  143,  142,  141, | 
|  | 140,  139,  136,  135,  134,  133,  131,  130,  128,  126, | 
|  | 125,  124,  122,  121,  120,  118,  117,  115,  114,  113, | 
|  | 112,  111,  110,  107,  106,  105,  104,  103,  102,  101, | 
|  |  | 
|  | 100,   98,   97,   96,   95,   94,   93,   91,   90,   86, | 
|  | 82,   48,   46,   40,   27,   24,   21,   16,   11,    7, | 
|  | 4,    3,  820,  820,  820,  820,  820,  820,  820,  820, | 
|  | 820,  820,  820,  820,  820,  820,  820,  820,  820,  820, | 
|  | 820,  820,  820,  820,  820,  820,  820,  820,  820,  820, | 
|  | 820,  820,  820,  820,  820,  820,  820,  820,  820,  820, | 
|  | 820,  820,  820,  820,  820,  820,  820,  820,  820,  820, | 
|  | 820,  820,  820,  820,  820,  820,  820,  820,  820,  820, | 
|  | 820,  820,  820,  820,  820,  820,  820,  820,  820,  820, | 
|  | 820,  820,  820,  820,  820 | 
|  |  | 
|  | } ; | 
|  |  | 
|  |  | 
|  | /* Table of booleans, true if rule could match eol. */ | 
|  | static const flex_int32_t yy_rule_can_match_eol[240] = | 
|  | {   0, | 
|  | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 
|  | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 
|  | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 
|  | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 
|  | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 
|  | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 
|  | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 
|  | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 
|  | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 
|  | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 
|  | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 
|  | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, | 
|  | }; | 
|  |  | 
|  | /* The intent behind this definition is that it'll catch | 
|  | * any uses of REJECT which flex missed. | 
|  | */ | 
|  | #define REJECT reject_used_but_not_detected | 
|  | #define yymore() yymore_used_but_not_detected | 
|  | #define YY_MORE_ADJ 0 | 
|  | #define YY_RESTORE_YY_MORE_OFFSET | 
|  | /* | 
|  | // Copyright 2016 The SwiftShader Authors. All Rights Reserved. | 
|  | // | 
|  | // Licensed under the Apache License, Version 2.0 (the "License"); | 
|  | // you may not use this file except in compliance with the License. | 
|  | // You may obtain a copy of the License at | 
|  | // | 
|  | //    http://www.apache.org/licenses/LICENSE-2.0 | 
|  | // | 
|  | // Unless required by applicable law or agreed to in writing, software | 
|  | // distributed under the License is distributed on an "AS IS" BASIS, | 
|  | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | // See the License for the specific language governing permissions and | 
|  | // limitations under the License. | 
|  |  | 
|  | This file contains the Lex specification for GLSL ES. | 
|  | Based on ANSI C grammar, Lex specification: | 
|  | http://www.lysator.liu.se/c/ANSI-C-grammar-l.html | 
|  |  | 
|  | IF YOU MODIFY THIS FILE YOU ALSO NEED TO RUN generate_parser.sh, | 
|  | WHICH GENERATES THE GLSL ES LEXER (glslang_lex.cpp). | 
|  | */ | 
|  |  | 
|  | #include "glslang.h" | 
|  | #include "ParseHelper.h" | 
|  | #include "preprocessor/Token.h" | 
|  | #include "util.h" | 
|  | #include "glslang_tab.h" | 
|  |  | 
|  | /* windows only pragma */ | 
|  | #ifdef _MSC_VER | 
|  | #pragma warning(disable : 4102) | 
|  | #endif | 
|  |  | 
|  | #define YY_USER_ACTION                                 \ | 
|  | yylloc->first_file = yylloc->last_file = yycolumn; \ | 
|  | yylloc->first_line = yylloc->last_line = yylineno; | 
|  |  | 
|  | #define YY_INPUT(buf, result, max_size) \ | 
|  | result = string_input(buf, max_size, yyscanner); | 
|  |  | 
|  | static yy_size_t string_input(char* buf, yy_size_t max_size, yyscan_t yyscanner); | 
|  | static int check_type(yyscan_t yyscanner); | 
|  | static int reserved_word(yyscan_t yyscanner); | 
|  | static int ES2_reserved_ES3_keyword(TParseContext *context, int token); | 
|  | static int ES2_keyword_ES3_reserved(TParseContext *context, int token); | 
|  | static int ES2_identifier_ES3_keyword(TParseContext *context, int token); | 
|  | static int uint_constant(TParseContext *context); | 
|  | static int int_constant(yyscan_t yyscanner); | 
|  | static int float_constant(yyscan_t yyscanner); | 
|  | static int floatsuffix_check(TParseContext* context); | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | #define INITIAL 0 | 
|  | #define COMMENT 1 | 
|  | #define FIELDS 2 | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | #define YY_EXTRA_TYPE TParseContext* | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | /* Holds the entire state of the reentrant scanner. */ | 
|  | struct yyguts_t | 
|  | { | 
|  |  | 
|  | /* User-defined. Not touched by flex. */ | 
|  | YY_EXTRA_TYPE yyextra_r; | 
|  |  | 
|  | /* The rest are the same as the globals declared in the non-reentrant scanner. */ | 
|  | FILE *yyin_r, *yyout_r; | 
|  | size_t yy_buffer_stack_top; /**< index of top of stack. */ | 
|  | size_t yy_buffer_stack_max; /**< capacity of stack. */ | 
|  | YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */ | 
|  | char yy_hold_char; | 
|  | int yy_n_chars; | 
|  | int yyleng_r; | 
|  | char *yy_c_buf_p; | 
|  | int yy_init; | 
|  | int yy_start; | 
|  | int yy_did_buffer_switch_on_eof; | 
|  | int yy_start_stack_ptr; | 
|  | int yy_start_stack_depth; | 
|  | int *yy_start_stack; | 
|  | yy_state_type yy_last_accepting_state; | 
|  | char* yy_last_accepting_cpos; | 
|  |  | 
|  | int yylineno_r; | 
|  | int yy_flex_debug_r; | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | char *yytext_r; | 
|  | int yy_more_flag; | 
|  | int yy_more_len; | 
|  |  | 
|  |  | 
|  |  | 
|  | YYSTYPE * yylval_r; | 
|  |  | 
|  |  | 
|  |  | 
|  | YYLTYPE * yylloc_r; | 
|  |  | 
|  |  | 
|  | }; /* end struct yyguts_t */ | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | static int yy_init_globals ( yyscan_t yyscanner ); | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | /* This must go here because YYSTYPE and YYLTYPE are included | 
|  | * from bison output in section 1.*/ | 
|  | #    define yylval yyg->yylval_r | 
|  |  | 
|  |  | 
|  |  | 
|  | #    define yylloc yyg->yylloc_r | 
|  |  | 
|  |  | 
|  |  | 
|  | int yylex_init (yyscan_t* scanner); | 
|  |  | 
|  | int yylex_init_extra ( YY_EXTRA_TYPE user_defined, yyscan_t* scanner); | 
|  |  | 
|  |  | 
|  |  | 
|  | /* Accessor methods to globals. | 
|  | These are made visible to non-reentrant scanners for convenience. */ | 
|  |  | 
|  |  | 
|  | int yylex_destroy ( yyscan_t yyscanner ); | 
|  |  | 
|  |  | 
|  |  | 
|  | int yyget_debug ( yyscan_t yyscanner ); | 
|  |  | 
|  |  | 
|  |  | 
|  | void yyset_debug ( int debug_flag , yyscan_t yyscanner ); | 
|  |  | 
|  |  | 
|  |  | 
|  | YY_EXTRA_TYPE yyget_extra ( yyscan_t yyscanner ); | 
|  |  | 
|  |  | 
|  |  | 
|  | void yyset_extra ( YY_EXTRA_TYPE user_defined , yyscan_t yyscanner ); | 
|  |  | 
|  |  | 
|  |  | 
|  | FILE *yyget_in ( yyscan_t yyscanner ); | 
|  |  | 
|  |  | 
|  |  | 
|  | void yyset_in  ( FILE * _in_str , yyscan_t yyscanner ); | 
|  |  | 
|  |  | 
|  |  | 
|  | FILE *yyget_out ( yyscan_t yyscanner ); | 
|  |  | 
|  |  | 
|  |  | 
|  | void yyset_out  ( FILE * _out_str , yyscan_t yyscanner ); | 
|  |  | 
|  |  | 
|  |  | 
|  | int yyget_leng ( yyscan_t yyscanner ); | 
|  |  | 
|  |  | 
|  |  | 
|  | char *yyget_text ( yyscan_t yyscanner ); | 
|  |  | 
|  |  | 
|  |  | 
|  | int yyget_lineno ( yyscan_t yyscanner ); | 
|  |  | 
|  |  | 
|  |  | 
|  | void yyset_lineno ( int _line_number , yyscan_t yyscanner ); | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | int yyget_column  ( yyscan_t yyscanner ); | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | void yyset_column ( int _column_no , yyscan_t yyscanner ); | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | YYSTYPE * yyget_lval ( yyscan_t yyscanner ); | 
|  |  | 
|  |  | 
|  | void yyset_lval ( YYSTYPE * yylval_param , yyscan_t yyscanner ); | 
|  |  | 
|  |  | 
|  |  | 
|  | YYLTYPE *yyget_lloc ( yyscan_t yyscanner ); | 
|  |  | 
|  |  | 
|  |  | 
|  | void yyset_lloc ( YYLTYPE * yylloc_param , yyscan_t yyscanner ); | 
|  |  | 
|  |  | 
|  |  | 
|  | /* Macros after this point can all be overridden by user definitions in | 
|  | * section 1. | 
|  | */ | 
|  |  | 
|  | #ifndef YY_SKIP_YYWRAP | 
|  | #ifdef __cplusplus | 
|  | extern "C" int yywrap ( yyscan_t yyscanner ); | 
|  | #else | 
|  | extern int yywrap ( yyscan_t yyscanner ); | 
|  | #endif | 
|  | #endif | 
|  |  | 
|  | #ifndef YY_NO_UNPUT | 
|  |  | 
|  | #endif | 
|  |  | 
|  |  | 
|  | #ifndef yytext_ptr | 
|  | static void yy_flex_strncpy ( char *, const char *, int , yyscan_t yyscanner); | 
|  | #endif | 
|  |  | 
|  | #ifdef YY_NEED_STRLEN | 
|  | static int yy_flex_strlen ( const char * , yyscan_t yyscanner); | 
|  | #endif | 
|  |  | 
|  | #ifndef YY_NO_INPUT | 
|  | #ifdef __cplusplus | 
|  | static int yyinput ( yyscan_t yyscanner ); | 
|  | #else | 
|  | static int input ( yyscan_t yyscanner ); | 
|  | #endif | 
|  |  | 
|  | #endif | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | /* Amount of stuff to slurp up with each read. */ | 
|  | #ifndef YY_READ_BUF_SIZE | 
|  | #ifdef __ia64__ | 
|  | /* On IA-64, the buffer size is 16k, not 8k */ | 
|  | #define YY_READ_BUF_SIZE 16384 | 
|  | #else | 
|  | #define YY_READ_BUF_SIZE 8192 | 
|  | #endif /* __ia64__ */ | 
|  | #endif | 
|  |  | 
|  |  | 
|  | /* Copy whatever the last rule matched to the standard output. */ | 
|  | #ifndef ECHO | 
|  | /* This used to be an fputs(), but since the string might contain NUL's, | 
|  | * we now use fwrite(). | 
|  | */ | 
|  | #define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0) | 
|  | #endif | 
|  |  | 
|  |  | 
|  |  | 
|  | /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL, | 
|  | * is returned in "result". | 
|  | */ | 
|  | #ifndef YY_INPUT | 
|  | #define YY_INPUT(buf,result,max_size) \ | 
|  | if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ | 
|  | { \ | 
|  | int c = '*'; \ | 
|  | int n; \ | 
|  | for ( n = 0; n < max_size && \ | 
|  | (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ | 
|  | buf[n] = (char) c; \ | 
|  | if ( c == '\n' ) \ | 
|  | buf[n++] = (char) c; \ | 
|  | if ( c == EOF && ferror( yyin ) ) \ | 
|  | YY_FATAL_ERROR( "input in flex scanner failed" ); \ | 
|  | result = n; \ | 
|  | } \ | 
|  | else \ | 
|  | { \ | 
|  | errno=0; \ | 
|  | while ( (result = (int) fread(buf, 1, (yy_size_t) max_size, yyin)) == 0 && ferror(yyin)) \ | 
|  | { \ | 
|  | if( errno != EINTR) \ | 
|  | { \ | 
|  | YY_FATAL_ERROR( "input in flex scanner failed" ); \ | 
|  | break; \ | 
|  | } \ | 
|  | errno=0; \ | 
|  | clearerr(yyin); \ | 
|  | } \ | 
|  | }\ | 
|  | \ | 
|  |  | 
|  | #endif | 
|  |  | 
|  |  | 
|  |  | 
|  | /* No semi-colon after return; correct usage is to write "yyterminate();" - | 
|  | * we don't want an extra ';' after the "return" because that will cause | 
|  | * some compilers to complain about unreachable statements. | 
|  | */ | 
|  | #ifndef yyterminate | 
|  | #define yyterminate() return YY_NULL | 
|  | #endif | 
|  |  | 
|  |  | 
|  | /* Number of entries by which start-condition stack grows. */ | 
|  | #ifndef YY_START_STACK_INCR | 
|  | #define YY_START_STACK_INCR 25 | 
|  | #endif | 
|  |  | 
|  |  | 
|  | /* Report a fatal error. */ | 
|  | #ifndef YY_FATAL_ERROR | 
|  | #define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner) | 
|  | #endif | 
|  |  | 
|  |  | 
|  |  | 
|  | /* end tables serialization structures and prototypes */ | 
|  |  | 
|  |  | 
|  |  | 
|  | /* Default declaration of generated scanner - a define so the user can | 
|  | * easily add parameters. | 
|  | */ | 
|  | #ifndef YY_DECL | 
|  | #define YY_DECL_IS_OURS 1 | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | extern int yylex \ | 
|  | (YYSTYPE * yylval_param, YYLTYPE * yylloc_param , yyscan_t yyscanner); | 
|  |  | 
|  | #define YY_DECL int yylex \ | 
|  | (YYSTYPE * yylval_param, YYLTYPE * yylloc_param , yyscan_t yyscanner) | 
|  | #endif /* !YY_DECL */ | 
|  |  | 
|  |  | 
|  | /* Code executed at the beginning of each rule, after yytext and yyleng | 
|  | * have been set up. | 
|  | */ | 
|  | #ifndef YY_USER_ACTION | 
|  | #define YY_USER_ACTION | 
|  | #endif | 
|  |  | 
|  |  | 
|  |  | 
|  | /* Code executed at the end of each rule. */ | 
|  | #ifndef YY_BREAK | 
|  | #define YY_BREAK /*LINTED*/break; | 
|  | #endif | 
|  |  | 
|  |  | 
|  |  | 
|  | #define YY_RULE_SETUP \ | 
|  | YY_USER_ACTION | 
|  |  | 
|  |  | 
|  | /** The main scanner function which does all the work. | 
|  | */ | 
|  | YY_DECL | 
|  | { | 
|  | yy_state_type yy_current_state; | 
|  | char *yy_cp, *yy_bp; | 
|  | int yy_act; | 
|  | struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | yylval = yylval_param; | 
|  |  | 
|  |  | 
|  |  | 
|  | yylloc = yylloc_param; | 
|  |  | 
|  |  | 
|  | if ( !yyg->yy_init ) | 
|  | { | 
|  | yyg->yy_init = 1; | 
|  |  | 
|  | #ifdef YY_USER_INIT | 
|  | YY_USER_INIT; | 
|  | #endif | 
|  |  | 
|  |  | 
|  |  | 
|  | if ( ! yyg->yy_start ) | 
|  | yyg->yy_start = 1;	/* first start state */ | 
|  |  | 
|  | if ( ! yyin ) | 
|  | yyin = stdin; | 
|  |  | 
|  | if ( ! yyout ) | 
|  | yyout = stdout; | 
|  |  | 
|  | if ( ! YY_CURRENT_BUFFER ) { | 
|  | yyensure_buffer_stack (yyscanner); | 
|  | YY_CURRENT_BUFFER_LVALUE = | 
|  | yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); | 
|  | } | 
|  |  | 
|  | yy_load_buffer_state( yyscanner ); | 
|  | } | 
|  |  | 
|  | { | 
|  |  | 
|  |  | 
|  |  | 
|  | TParseContext* context = yyextra; | 
|  |  | 
|  |  | 
|  |  | 
|  | while ( /*CONSTCOND*/1 )		/* loops until end-of-file is reached */ | 
|  | { | 
|  | yy_cp = yyg->yy_c_buf_p; | 
|  |  | 
|  | /* Support of yytext. */ | 
|  | *yy_cp = yyg->yy_hold_char; | 
|  |  | 
|  | /* yy_bp points to the position in yy_ch_buf of the start of | 
|  | * the current run. | 
|  | */ | 
|  | yy_bp = yy_cp; | 
|  |  | 
|  | yy_current_state = yyg->yy_start; | 
|  | yy_match: | 
|  | do | 
|  | { | 
|  | YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ; | 
|  | if ( yy_accept[yy_current_state] ) | 
|  | { | 
|  | yyg->yy_last_accepting_state = yy_current_state; | 
|  | yyg->yy_last_accepting_cpos = yy_cp; | 
|  | } | 
|  | while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) | 
|  | { | 
|  | yy_current_state = (int) yy_def[yy_current_state]; | 
|  | if ( yy_current_state >= 821 ) | 
|  | yy_c = yy_meta[yy_c]; | 
|  | } | 
|  | yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; | 
|  | ++yy_cp; | 
|  | } | 
|  | while ( yy_current_state != 820 ); | 
|  | yy_cp = yyg->yy_last_accepting_cpos; | 
|  | yy_current_state = yyg->yy_last_accepting_state; | 
|  |  | 
|  | yy_find_action: | 
|  | yy_act = yy_accept[yy_current_state]; | 
|  |  | 
|  | YY_DO_BEFORE_ACTION; | 
|  |  | 
|  |  | 
|  | if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] ) | 
|  | { | 
|  | int yyl; | 
|  | for ( yyl = 0; yyl < yyleng; ++yyl ) | 
|  | if ( yytext[yyl] == '\n' ) | 
|  |  | 
|  | do{ yylineno++; | 
|  | yycolumn=0; | 
|  | }while(0) | 
|  | ; | 
|  | } | 
|  |  | 
|  |  | 
|  | do_action:	/* This label is used only to access EOF actions. */ | 
|  |  | 
|  |  | 
|  | switch ( yy_act ) | 
|  | { /* beginning of action switch */ | 
|  | case 0: /* must back up */ | 
|  | /* undo the effects of YY_DO_BEFORE_ACTION */ | 
|  | *yy_cp = yyg->yy_hold_char; | 
|  | yy_cp = yyg->yy_last_accepting_cpos; | 
|  | yy_current_state = yyg->yy_last_accepting_state; | 
|  | goto yy_find_action; | 
|  |  | 
|  | case 1: | 
|  | YY_RULE_SETUP | 
|  | { return(INVARIANT); } | 
|  | YY_BREAK | 
|  | case 2: | 
|  | YY_RULE_SETUP | 
|  | { return(HIGH_PRECISION); } | 
|  | YY_BREAK | 
|  | case 3: | 
|  | YY_RULE_SETUP | 
|  | { return(MEDIUM_PRECISION); } | 
|  | YY_BREAK | 
|  | case 4: | 
|  | YY_RULE_SETUP | 
|  | { return(LOW_PRECISION); } | 
|  | YY_BREAK | 
|  | case 5: | 
|  | YY_RULE_SETUP | 
|  | { return(PRECISION); } | 
|  | YY_BREAK | 
|  | case 6: | 
|  | YY_RULE_SETUP | 
|  | { return ES2_keyword_ES3_reserved(context, ATTRIBUTE); } | 
|  | YY_BREAK | 
|  | case 7: | 
|  | YY_RULE_SETUP | 
|  | { return(CONST_QUAL); } | 
|  | YY_BREAK | 
|  | case 8: | 
|  | YY_RULE_SETUP | 
|  | { return(UNIFORM); } | 
|  | YY_BREAK | 
|  | case 9: | 
|  | YY_RULE_SETUP | 
|  | { return ES2_keyword_ES3_reserved(context, VARYING); } | 
|  | YY_BREAK | 
|  | case 10: | 
|  | YY_RULE_SETUP | 
|  | { return(BREAK); } | 
|  | YY_BREAK | 
|  | case 11: | 
|  | YY_RULE_SETUP | 
|  | { return(CONTINUE); } | 
|  | YY_BREAK | 
|  | case 12: | 
|  | YY_RULE_SETUP | 
|  | { return(DO); } | 
|  | YY_BREAK | 
|  | case 13: | 
|  | YY_RULE_SETUP | 
|  | { return(FOR); } | 
|  | YY_BREAK | 
|  | case 14: | 
|  | YY_RULE_SETUP | 
|  | { return(WHILE); } | 
|  | YY_BREAK | 
|  | case 15: | 
|  | YY_RULE_SETUP | 
|  | { return(IF); } | 
|  | YY_BREAK | 
|  | case 16: | 
|  | YY_RULE_SETUP | 
|  | { return(ELSE); } | 
|  | YY_BREAK | 
|  | case 17: | 
|  | YY_RULE_SETUP | 
|  | { return ES2_reserved_ES3_keyword(context, SWITCH); } | 
|  | YY_BREAK | 
|  | case 18: | 
|  | YY_RULE_SETUP | 
|  | { return ES2_reserved_ES3_keyword(context, CASE); } | 
|  | YY_BREAK | 
|  | case 19: | 
|  | YY_RULE_SETUP | 
|  | { return ES2_reserved_ES3_keyword(context, DEFAULT); } | 
|  | YY_BREAK | 
|  | case 20: | 
|  | YY_RULE_SETUP | 
|  | { return ES2_reserved_ES3_keyword(context, CENTROID); } | 
|  | YY_BREAK | 
|  | case 21: | 
|  | YY_RULE_SETUP | 
|  | { return ES2_reserved_ES3_keyword(context, FLAT); } | 
|  | YY_BREAK | 
|  | case 22: | 
|  | YY_RULE_SETUP | 
|  | { return ES2_reserved_ES3_keyword(context, SMOOTH); } | 
|  | YY_BREAK | 
|  | case 23: | 
|  | YY_RULE_SETUP | 
|  | { return(IN_QUAL); } | 
|  | YY_BREAK | 
|  | case 24: | 
|  | YY_RULE_SETUP | 
|  | { return(OUT_QUAL); } | 
|  | YY_BREAK | 
|  | case 25: | 
|  | YY_RULE_SETUP | 
|  | { return(INOUT_QUAL); } | 
|  | YY_BREAK | 
|  | case 26: | 
|  | YY_RULE_SETUP | 
|  | { context->lexAfterType = true; return(FLOAT_TYPE); } | 
|  | YY_BREAK | 
|  | case 27: | 
|  | YY_RULE_SETUP | 
|  | { context->lexAfterType = true; return(INT_TYPE); } | 
|  | YY_BREAK | 
|  | case 28: | 
|  | YY_RULE_SETUP | 
|  | { return ES2_identifier_ES3_keyword(context, UINT_TYPE); } | 
|  | YY_BREAK | 
|  | case 29: | 
|  | YY_RULE_SETUP | 
|  | { context->lexAfterType = true; return(VOID_TYPE); } | 
|  | YY_BREAK | 
|  | case 30: | 
|  | YY_RULE_SETUP | 
|  | { context->lexAfterType = true; return(BOOL_TYPE); } | 
|  | YY_BREAK | 
|  | case 31: | 
|  | YY_RULE_SETUP | 
|  | { yylval->lex.b = true;  return(BOOLCONSTANT); } | 
|  | YY_BREAK | 
|  | case 32: | 
|  | YY_RULE_SETUP | 
|  | { yylval->lex.b = false; return(BOOLCONSTANT); } | 
|  | YY_BREAK | 
|  | case 33: | 
|  | YY_RULE_SETUP | 
|  | { return(DISCARD); } | 
|  | YY_BREAK | 
|  | case 34: | 
|  | YY_RULE_SETUP | 
|  | { return(RETURN); } | 
|  | YY_BREAK | 
|  | case 35: | 
|  | YY_RULE_SETUP | 
|  | { context->lexAfterType = true; return(MATRIX2); } | 
|  | YY_BREAK | 
|  | case 36: | 
|  | YY_RULE_SETUP | 
|  | { context->lexAfterType = true; return(MATRIX3); } | 
|  | YY_BREAK | 
|  | case 37: | 
|  | YY_RULE_SETUP | 
|  | { context->lexAfterType = true; return(MATRIX4); } | 
|  | YY_BREAK | 
|  | case 38: | 
|  | YY_RULE_SETUP | 
|  | { return ES2_identifier_ES3_keyword(context, MATRIX2); } | 
|  | YY_BREAK | 
|  | case 39: | 
|  | YY_RULE_SETUP | 
|  | { return ES2_identifier_ES3_keyword(context, MATRIX3); } | 
|  | YY_BREAK | 
|  | case 40: | 
|  | YY_RULE_SETUP | 
|  | { return ES2_identifier_ES3_keyword(context, MATRIX4); } | 
|  | YY_BREAK | 
|  | case 41: | 
|  | YY_RULE_SETUP | 
|  | { return ES2_identifier_ES3_keyword(context, MATRIX2x3); } | 
|  | YY_BREAK | 
|  | case 42: | 
|  | YY_RULE_SETUP | 
|  | { return ES2_identifier_ES3_keyword(context, MATRIX3x2); } | 
|  | YY_BREAK | 
|  | case 43: | 
|  | YY_RULE_SETUP | 
|  | { return ES2_identifier_ES3_keyword(context, MATRIX2x4); } | 
|  | YY_BREAK | 
|  | case 44: | 
|  | YY_RULE_SETUP | 
|  | { return ES2_identifier_ES3_keyword(context, MATRIX4x2); } | 
|  | YY_BREAK | 
|  | case 45: | 
|  | YY_RULE_SETUP | 
|  | { return ES2_identifier_ES3_keyword(context, MATRIX3x4); } | 
|  | YY_BREAK | 
|  | case 46: | 
|  | YY_RULE_SETUP | 
|  | { return ES2_identifier_ES3_keyword(context, MATRIX4x3); } | 
|  | YY_BREAK | 
|  | case 47: | 
|  | YY_RULE_SETUP | 
|  | { context->lexAfterType = true; return (VEC2); } | 
|  | YY_BREAK | 
|  | case 48: | 
|  | YY_RULE_SETUP | 
|  | { context->lexAfterType = true; return (VEC3); } | 
|  | YY_BREAK | 
|  | case 49: | 
|  | YY_RULE_SETUP | 
|  | { context->lexAfterType = true; return (VEC4); } | 
|  | YY_BREAK | 
|  | case 50: | 
|  | YY_RULE_SETUP | 
|  | { context->lexAfterType = true; return (IVEC2); } | 
|  | YY_BREAK | 
|  | case 51: | 
|  | YY_RULE_SETUP | 
|  | { context->lexAfterType = true; return (IVEC3); } | 
|  | YY_BREAK | 
|  | case 52: | 
|  | YY_RULE_SETUP | 
|  | { context->lexAfterType = true; return (IVEC4); } | 
|  | YY_BREAK | 
|  | case 53: | 
|  | YY_RULE_SETUP | 
|  | { return ES2_identifier_ES3_keyword(context, UVEC2); } | 
|  | YY_BREAK | 
|  | case 54: | 
|  | YY_RULE_SETUP | 
|  | { return ES2_identifier_ES3_keyword(context, UVEC3); } | 
|  | YY_BREAK | 
|  | case 55: | 
|  | YY_RULE_SETUP | 
|  | { return ES2_identifier_ES3_keyword(context, UVEC4); } | 
|  | YY_BREAK | 
|  | case 56: | 
|  | YY_RULE_SETUP | 
|  | { context->lexAfterType = true; return (BVEC2); } | 
|  | YY_BREAK | 
|  | case 57: | 
|  | YY_RULE_SETUP | 
|  | { context->lexAfterType = true; return (BVEC3); } | 
|  | YY_BREAK | 
|  | case 58: | 
|  | YY_RULE_SETUP | 
|  | { context->lexAfterType = true; return (BVEC4); } | 
|  | YY_BREAK | 
|  | case 59: | 
|  | YY_RULE_SETUP | 
|  | { context->lexAfterType = true; return SAMPLER2D; } | 
|  | YY_BREAK | 
|  | case 60: | 
|  | YY_RULE_SETUP | 
|  | { context->lexAfterType = true; return SAMPLERCUBE; } | 
|  | YY_BREAK | 
|  | case 61: | 
|  | YY_RULE_SETUP | 
|  | { context->lexAfterType = true; return SAMPLER2DRECT; } | 
|  | YY_BREAK | 
|  | case 62: | 
|  | YY_RULE_SETUP | 
|  | { context->lexAfterType = true; return SAMPLER_EXTERNAL_OES; } | 
|  | YY_BREAK | 
|  | case 63: | 
|  | YY_RULE_SETUP | 
|  | { context->lexAfterType = true; return SAMPLER3D; } | 
|  | YY_BREAK | 
|  | case 64: | 
|  | YY_RULE_SETUP | 
|  | { return ES2_reserved_ES3_keyword(context, SAMPLER3DRECT); } | 
|  | YY_BREAK | 
|  | case 65: | 
|  | YY_RULE_SETUP | 
|  | { return  ES2_identifier_ES3_keyword(context, SAMPLER2DARRAY); } | 
|  | YY_BREAK | 
|  | case 66: | 
|  | YY_RULE_SETUP | 
|  | { return  ES2_identifier_ES3_keyword(context, ISAMPLER2D); } | 
|  | YY_BREAK | 
|  | case 67: | 
|  | YY_RULE_SETUP | 
|  | { return  ES2_identifier_ES3_keyword(context, ISAMPLER3D); } | 
|  | YY_BREAK | 
|  | case 68: | 
|  | YY_RULE_SETUP | 
|  | { return  ES2_identifier_ES3_keyword(context, ISAMPLERCUBE); } | 
|  | YY_BREAK | 
|  | case 69: | 
|  | YY_RULE_SETUP | 
|  | { return  ES2_identifier_ES3_keyword(context, ISAMPLER2DARRAY); } | 
|  | YY_BREAK | 
|  | case 70: | 
|  | YY_RULE_SETUP | 
|  | { return  ES2_identifier_ES3_keyword(context, USAMPLER2D); } | 
|  | YY_BREAK | 
|  | case 71: | 
|  | YY_RULE_SETUP | 
|  | { return  ES2_identifier_ES3_keyword(context, USAMPLER3D); } | 
|  | YY_BREAK | 
|  | case 72: | 
|  | YY_RULE_SETUP | 
|  | { return  ES2_identifier_ES3_keyword(context, USAMPLERCUBE); } | 
|  | YY_BREAK | 
|  | case 73: | 
|  | YY_RULE_SETUP | 
|  | { return  ES2_identifier_ES3_keyword(context, USAMPLER2DARRAY); } | 
|  | YY_BREAK | 
|  | case 74: | 
|  | YY_RULE_SETUP | 
|  | { return ES2_reserved_ES3_keyword(context, SAMPLER2DSHADOW); } | 
|  | YY_BREAK | 
|  | case 75: | 
|  | YY_RULE_SETUP | 
|  | { return  ES2_identifier_ES3_keyword(context, SAMPLERCUBESHADOW); } | 
|  | YY_BREAK | 
|  | case 76: | 
|  | YY_RULE_SETUP | 
|  | { return  ES2_identifier_ES3_keyword(context, SAMPLER2DARRAYSHADOW); } | 
|  | YY_BREAK | 
|  | case 77: | 
|  | YY_RULE_SETUP | 
|  | { context->lexAfterType = true; return(STRUCT); } | 
|  | YY_BREAK | 
|  | case 78: | 
|  | YY_RULE_SETUP | 
|  | { return ES2_identifier_ES3_keyword(context, LAYOUT); } | 
|  | YY_BREAK | 
|  | /* Reserved keywords for GLSL ES 3.00 that are not reserved for GLSL ES 1.00 */ | 
|  | case 79: | 
|  | case 80: | 
|  | case 81: | 
|  | case 82: | 
|  | case 83: | 
|  | case 84: | 
|  | case 85: | 
|  | case 86: | 
|  | case 87: | 
|  | case 88: | 
|  | case 89: | 
|  | case 90: | 
|  | case 91: | 
|  | case 92: | 
|  | case 93: | 
|  | case 94: | 
|  | case 95: | 
|  | case 96: | 
|  | case 97: | 
|  | case 98: | 
|  | case 99: | 
|  | case 100: | 
|  | case 101: | 
|  | case 102: | 
|  | case 103: | 
|  | case 104: | 
|  | case 105: | 
|  | case 106: | 
|  | case 107: | 
|  | case 108: | 
|  | case 109: | 
|  | case 110: | 
|  | case 111: | 
|  | case 112: | 
|  | case 113: | 
|  | case 114: | 
|  | case 115: | 
|  | case 116: | 
|  | case 117: | 
|  | case 118: | 
|  | case 119: | 
|  | case 120: | 
|  | case 121: | 
|  | case 122: | 
|  | case 123: | 
|  | case 124: | 
|  | case 125: | 
|  | case 126: | 
|  | case 127: | 
|  | case 128: | 
|  | case 129: | 
|  | case 130: | 
|  | case 131: | 
|  | case 132: | 
|  | case 133: | 
|  | case 134: | 
|  | YY_RULE_SETUP | 
|  | { | 
|  | if (context->getShaderVersion() < 300) { | 
|  | yylval->lex.string = NewPoolTString(yytext); | 
|  | return check_type(yyscanner); | 
|  | } | 
|  | return reserved_word(yyscanner); | 
|  | } | 
|  | YY_BREAK | 
|  | /* Reserved keywords in GLSL ES 1.00 that are not reserved in GLSL ES 3.00 */ | 
|  | case 135: | 
|  | YY_RULE_SETUP | 
|  | { | 
|  | if (context->getShaderVersion() >= 300) | 
|  | { | 
|  | yylval->lex.string = NewPoolTString(yytext); | 
|  | return check_type(yyscanner); | 
|  | } | 
|  |  | 
|  | return reserved_word(yyscanner); | 
|  | } | 
|  | YY_BREAK | 
|  | /* Reserved keywords */ | 
|  | case 136: | 
|  | case 137: | 
|  | case 138: | 
|  | case 139: | 
|  | case 140: | 
|  | case 141: | 
|  | case 142: | 
|  | case 143: | 
|  | case 144: | 
|  | case 145: | 
|  | case 146: | 
|  | case 147: | 
|  | case 148: | 
|  | case 149: | 
|  | case 150: | 
|  | case 151: | 
|  | case 152: | 
|  | case 153: | 
|  | case 154: | 
|  | case 155: | 
|  | case 156: | 
|  | case 157: | 
|  | case 158: | 
|  | case 159: | 
|  | case 160: | 
|  | case 161: | 
|  | case 162: | 
|  | case 163: | 
|  | case 164: | 
|  | case 165: | 
|  | case 166: | 
|  | case 167: | 
|  | case 168: | 
|  | case 169: | 
|  | case 170: | 
|  | case 171: | 
|  | case 172: | 
|  | case 173: | 
|  | case 174: | 
|  | case 175: | 
|  | case 176: | 
|  | YY_RULE_SETUP | 
|  | { return reserved_word(yyscanner); } | 
|  | YY_BREAK | 
|  | case 177: | 
|  | YY_RULE_SETUP | 
|  | { | 
|  | yylval->lex.string = NewPoolTString(yytext); | 
|  | return check_type(yyscanner); | 
|  | } | 
|  | YY_BREAK | 
|  | case 178: | 
|  | YY_RULE_SETUP | 
|  | { return int_constant(yyscanner); } | 
|  | YY_BREAK | 
|  | case 179: | 
|  | YY_RULE_SETUP | 
|  | { return int_constant(yyscanner); } | 
|  | YY_BREAK | 
|  | case 180: | 
|  | YY_RULE_SETUP | 
|  | { return int_constant(yyscanner); } | 
|  | YY_BREAK | 
|  | case 181: | 
|  | YY_RULE_SETUP | 
|  | { return uint_constant(context); } | 
|  | YY_BREAK | 
|  | case 182: | 
|  | YY_RULE_SETUP | 
|  | { return uint_constant(context); } | 
|  | YY_BREAK | 
|  | case 183: | 
|  | YY_RULE_SETUP | 
|  | { return uint_constant(context); } | 
|  | YY_BREAK | 
|  | case 184: | 
|  | YY_RULE_SETUP | 
|  | { return float_constant(yyscanner); } | 
|  | YY_BREAK | 
|  | case 185: | 
|  | YY_RULE_SETUP | 
|  | { return float_constant(yyscanner); } | 
|  | YY_BREAK | 
|  | case 186: | 
|  | YY_RULE_SETUP | 
|  | { return float_constant(yyscanner); } | 
|  | YY_BREAK | 
|  | case 187: | 
|  | YY_RULE_SETUP | 
|  | { return floatsuffix_check(context); } | 
|  | YY_BREAK | 
|  | case 188: | 
|  | YY_RULE_SETUP | 
|  | { return floatsuffix_check(context); } | 
|  | YY_BREAK | 
|  | case 189: | 
|  | YY_RULE_SETUP | 
|  | { return floatsuffix_check(context); } | 
|  | YY_BREAK | 
|  | case 190: | 
|  | YY_RULE_SETUP | 
|  | {  return(ADD_ASSIGN); } | 
|  | YY_BREAK | 
|  | case 191: | 
|  | YY_RULE_SETUP | 
|  | {  return(SUB_ASSIGN); } | 
|  | YY_BREAK | 
|  | case 192: | 
|  | YY_RULE_SETUP | 
|  | {  return(MUL_ASSIGN); } | 
|  | YY_BREAK | 
|  | case 193: | 
|  | YY_RULE_SETUP | 
|  | {  return(DIV_ASSIGN); } | 
|  | YY_BREAK | 
|  | case 194: | 
|  | YY_RULE_SETUP | 
|  | {  return(MOD_ASSIGN); } | 
|  | YY_BREAK | 
|  | case 195: | 
|  | YY_RULE_SETUP | 
|  | {  return(LEFT_ASSIGN); } | 
|  | YY_BREAK | 
|  | case 196: | 
|  | YY_RULE_SETUP | 
|  | {  return(RIGHT_ASSIGN); } | 
|  | YY_BREAK | 
|  | case 197: | 
|  | YY_RULE_SETUP | 
|  | {  return(AND_ASSIGN); } | 
|  | YY_BREAK | 
|  | case 198: | 
|  | YY_RULE_SETUP | 
|  | {  return(XOR_ASSIGN); } | 
|  | YY_BREAK | 
|  | case 199: | 
|  | YY_RULE_SETUP | 
|  | {  return(OR_ASSIGN); } | 
|  | YY_BREAK | 
|  | case 200: | 
|  | YY_RULE_SETUP | 
|  | {  return(INC_OP); } | 
|  | YY_BREAK | 
|  | case 201: | 
|  | YY_RULE_SETUP | 
|  | {  return(DEC_OP); } | 
|  | YY_BREAK | 
|  | case 202: | 
|  | YY_RULE_SETUP | 
|  | {  return(AND_OP); } | 
|  | YY_BREAK | 
|  | case 203: | 
|  | YY_RULE_SETUP | 
|  | {  return(OR_OP); } | 
|  | YY_BREAK | 
|  | case 204: | 
|  | YY_RULE_SETUP | 
|  | {  return(XOR_OP); } | 
|  | YY_BREAK | 
|  | case 205: | 
|  | YY_RULE_SETUP | 
|  | {  return(LE_OP); } | 
|  | YY_BREAK | 
|  | case 206: | 
|  | YY_RULE_SETUP | 
|  | {  return(GE_OP); } | 
|  | YY_BREAK | 
|  | case 207: | 
|  | YY_RULE_SETUP | 
|  | {  return(EQ_OP); } | 
|  | YY_BREAK | 
|  | case 208: | 
|  | YY_RULE_SETUP | 
|  | {  return(NE_OP); } | 
|  | YY_BREAK | 
|  | case 209: | 
|  | YY_RULE_SETUP | 
|  | {  return(LEFT_OP); } | 
|  | YY_BREAK | 
|  | case 210: | 
|  | YY_RULE_SETUP | 
|  | {  return(RIGHT_OP); } | 
|  | YY_BREAK | 
|  | case 211: | 
|  | YY_RULE_SETUP | 
|  | { context->lexAfterType = false; return(SEMICOLON); } | 
|  | YY_BREAK | 
|  | case 212: | 
|  | YY_RULE_SETUP | 
|  | { context->lexAfterType = false; return(LEFT_BRACE); } | 
|  | YY_BREAK | 
|  | case 213: | 
|  | YY_RULE_SETUP | 
|  | { return(RIGHT_BRACE); } | 
|  | YY_BREAK | 
|  | case 214: | 
|  | YY_RULE_SETUP | 
|  | { if (context->inTypeParen) context->lexAfterType = false; return(COMMA); } | 
|  | YY_BREAK | 
|  | case 215: | 
|  | YY_RULE_SETUP | 
|  | { return(COLON); } | 
|  | YY_BREAK | 
|  | case 216: | 
|  | YY_RULE_SETUP | 
|  | { context->lexAfterType = false; return(EQUAL); } | 
|  | YY_BREAK | 
|  | case 217: | 
|  | YY_RULE_SETUP | 
|  | { context->lexAfterType = false; context->inTypeParen = true; return(LEFT_PAREN); } | 
|  | YY_BREAK | 
|  | case 218: | 
|  | YY_RULE_SETUP | 
|  | { context->inTypeParen = false; return(RIGHT_PAREN); } | 
|  | YY_BREAK | 
|  | case 219: | 
|  | YY_RULE_SETUP | 
|  | { return(LEFT_BRACKET); } | 
|  | YY_BREAK | 
|  | case 220: | 
|  | YY_RULE_SETUP | 
|  | { return(RIGHT_BRACKET); } | 
|  | YY_BREAK | 
|  | case 221: | 
|  | YY_RULE_SETUP | 
|  | { BEGIN(FIELDS);  return(DOT); } | 
|  | YY_BREAK | 
|  | case 222: | 
|  | YY_RULE_SETUP | 
|  | { return(BANG); } | 
|  | YY_BREAK | 
|  | case 223: | 
|  | YY_RULE_SETUP | 
|  | { return(DASH); } | 
|  | YY_BREAK | 
|  | case 224: | 
|  | YY_RULE_SETUP | 
|  | { return(TILDE); } | 
|  | YY_BREAK | 
|  | case 225: | 
|  | YY_RULE_SETUP | 
|  | { return(PLUS); } | 
|  | YY_BREAK | 
|  | case 226: | 
|  | YY_RULE_SETUP | 
|  | { return(STAR); } | 
|  | YY_BREAK | 
|  | case 227: | 
|  | YY_RULE_SETUP | 
|  | { return(SLASH); } | 
|  | YY_BREAK | 
|  | case 228: | 
|  | YY_RULE_SETUP | 
|  | { return(PERCENT); } | 
|  | YY_BREAK | 
|  | case 229: | 
|  | YY_RULE_SETUP | 
|  | { return(LEFT_ANGLE); } | 
|  | YY_BREAK | 
|  | case 230: | 
|  | YY_RULE_SETUP | 
|  | { return(RIGHT_ANGLE); } | 
|  | YY_BREAK | 
|  | case 231: | 
|  | YY_RULE_SETUP | 
|  | { return(VERTICAL_BAR); } | 
|  | YY_BREAK | 
|  | case 232: | 
|  | YY_RULE_SETUP | 
|  | { return(CARET); } | 
|  | YY_BREAK | 
|  | case 233: | 
|  | YY_RULE_SETUP | 
|  | { return(AMPERSAND); } | 
|  | YY_BREAK | 
|  | case 234: | 
|  | YY_RULE_SETUP | 
|  | { return(QUESTION); } | 
|  | YY_BREAK | 
|  | case 235: | 
|  | YY_RULE_SETUP | 
|  | { | 
|  | BEGIN(INITIAL); | 
|  | yylval->lex.string = NewPoolTString(yytext); | 
|  | return FIELD_SELECTION; | 
|  | } | 
|  | YY_BREAK | 
|  | case 236: | 
|  | YY_RULE_SETUP | 
|  | {} | 
|  | YY_BREAK | 
|  | case 237: | 
|  | /* rule 237 can match eol */ | 
|  | YY_RULE_SETUP | 
|  | {  } | 
|  | YY_BREAK | 
|  | case YY_STATE_EOF(INITIAL): | 
|  | case YY_STATE_EOF(COMMENT): | 
|  | case YY_STATE_EOF(FIELDS): | 
|  | { context->AfterEOF = true; yyterminate(); } | 
|  | YY_BREAK | 
|  | case 238: | 
|  | YY_RULE_SETUP | 
|  | { context->warning(*yylloc, "Unknown char", yytext, ""); return 0; } | 
|  | YY_BREAK | 
|  | case 239: | 
|  | YY_RULE_SETUP | 
|  | ECHO; | 
|  | YY_BREAK | 
|  |  | 
|  | case YY_END_OF_BUFFER: | 
|  | { | 
|  | /* Amount of text matched not including the EOB char. */ | 
|  | int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1; | 
|  |  | 
|  | /* Undo the effects of YY_DO_BEFORE_ACTION. */ | 
|  | *yy_cp = yyg->yy_hold_char; | 
|  | YY_RESTORE_YY_MORE_OFFSET | 
|  |  | 
|  | if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) | 
|  | { | 
|  | /* We're scanning a new file or input source.  It's | 
|  | * possible that this happened because the user | 
|  | * just pointed yyin at a new source and called | 
|  | * yylex().  If so, then we have to assure | 
|  | * consistency between YY_CURRENT_BUFFER and our | 
|  | * globals.  Here is the right place to do so, because | 
|  | * this is the first action (other than possibly a | 
|  | * back-up) that will match for the new input source. | 
|  | */ | 
|  | yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; | 
|  | YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; | 
|  | YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; | 
|  | } | 
|  |  | 
|  | /* Note that here we test for yy_c_buf_p "<=" to the position | 
|  | * of the first EOB in the buffer, since yy_c_buf_p will | 
|  | * already have been incremented past the NUL character | 
|  | * (since all states make transitions on EOB to the | 
|  | * end-of-buffer state).  Contrast this with the test | 
|  | * in input(). | 
|  | */ | 
|  | if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) | 
|  | { /* This was really a NUL. */ | 
|  | yy_state_type yy_next_state; | 
|  |  | 
|  | yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text; | 
|  |  | 
|  | yy_current_state = yy_get_previous_state( yyscanner ); | 
|  |  | 
|  | /* Okay, we're now positioned to make the NUL | 
|  | * transition.  We couldn't have | 
|  | * yy_get_previous_state() go ahead and do it | 
|  | * for us because it doesn't know how to deal | 
|  | * with the possibility of jamming (and we don't | 
|  | * want to build jamming into it because then it | 
|  | * will run more slowly). | 
|  | */ | 
|  |  | 
|  | yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner); | 
|  |  | 
|  | yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; | 
|  |  | 
|  | if ( yy_next_state ) | 
|  | { | 
|  | /* Consume the NUL. */ | 
|  | yy_cp = ++yyg->yy_c_buf_p; | 
|  | yy_current_state = yy_next_state; | 
|  | goto yy_match; | 
|  | } | 
|  |  | 
|  | else | 
|  | { | 
|  | yy_cp = yyg->yy_last_accepting_cpos; | 
|  | yy_current_state = yyg->yy_last_accepting_state; | 
|  | goto yy_find_action; | 
|  | } | 
|  | } | 
|  |  | 
|  | else switch ( yy_get_next_buffer( yyscanner ) ) | 
|  | { | 
|  | case EOB_ACT_END_OF_FILE: | 
|  | { | 
|  | yyg->yy_did_buffer_switch_on_eof = 0; | 
|  |  | 
|  | if ( yywrap( yyscanner ) ) | 
|  | { | 
|  | /* Note: because we've taken care in | 
|  | * yy_get_next_buffer() to have set up | 
|  | * yytext, we can now set up | 
|  | * yy_c_buf_p so that if some total | 
|  | * hoser (like flex itself) wants to | 
|  | * call the scanner after we return the | 
|  | * YY_NULL, it'll still work - another | 
|  | * YY_NULL will get returned. | 
|  | */ | 
|  | yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ; | 
|  |  | 
|  | yy_act = YY_STATE_EOF(YY_START); | 
|  | goto do_action; | 
|  | } | 
|  |  | 
|  | else | 
|  | { | 
|  | if ( ! yyg->yy_did_buffer_switch_on_eof ) | 
|  | YY_NEW_FILE; | 
|  | } | 
|  | break; | 
|  | } | 
|  |  | 
|  | case EOB_ACT_CONTINUE_SCAN: | 
|  | yyg->yy_c_buf_p = | 
|  | yyg->yytext_ptr + yy_amount_of_matched_text; | 
|  |  | 
|  | yy_current_state = yy_get_previous_state( yyscanner ); | 
|  |  | 
|  | yy_cp = yyg->yy_c_buf_p; | 
|  | yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; | 
|  | goto yy_match; | 
|  |  | 
|  | case EOB_ACT_LAST_MATCH: | 
|  | yyg->yy_c_buf_p = | 
|  | &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars]; | 
|  |  | 
|  | yy_current_state = yy_get_previous_state( yyscanner ); | 
|  |  | 
|  | yy_cp = yyg->yy_c_buf_p; | 
|  | yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; | 
|  | goto yy_find_action; | 
|  | } | 
|  | break; | 
|  | } | 
|  |  | 
|  | default: | 
|  | YY_FATAL_ERROR( | 
|  | "fatal flex scanner internal error--no action found" ); | 
|  | } /* end of action switch */ | 
|  | } /* end of scanning one token */ | 
|  | } /* end of user's declarations */ | 
|  | } /* end of yylex */ | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | /* yy_get_next_buffer - try to read in a new buffer | 
|  | * | 
|  | * Returns a code representing an action: | 
|  | *	EOB_ACT_LAST_MATCH - | 
|  | *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position | 
|  | *	EOB_ACT_END_OF_FILE - end of file | 
|  | */ | 
|  | static int yy_get_next_buffer (yyscan_t yyscanner) | 
|  | { | 
|  | struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; | 
|  | char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; | 
|  | char *source = yyg->yytext_ptr; | 
|  | int number_to_move, i; | 
|  | int ret_val; | 
|  |  | 
|  | if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] ) | 
|  | YY_FATAL_ERROR( | 
|  | "fatal flex scanner internal error--end of buffer missed" ); | 
|  |  | 
|  | if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) | 
|  | { /* Don't try to fill the buffer, so this is an EOF. */ | 
|  | if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 ) | 
|  | { | 
|  | /* We matched a single character, the EOB, so | 
|  | * treat this as a final EOF. | 
|  | */ | 
|  | return EOB_ACT_END_OF_FILE; | 
|  | } | 
|  |  | 
|  | else | 
|  | { | 
|  | /* We matched some text prior to the EOB, first | 
|  | * process it. | 
|  | */ | 
|  | return EOB_ACT_LAST_MATCH; | 
|  | } | 
|  | } | 
|  |  | 
|  | /* Try to read more data. */ | 
|  |  | 
|  | /* First move last chars to start of buffer. */ | 
|  | number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr - 1); | 
|  |  | 
|  | for ( i = 0; i < number_to_move; ++i ) | 
|  | *(dest++) = *(source++); | 
|  |  | 
|  | if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) | 
|  | /* don't do the read, it's not guaranteed to return an EOF, | 
|  | * just force an EOF | 
|  | */ | 
|  | YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0; | 
|  |  | 
|  | else | 
|  | { | 
|  | int num_to_read = | 
|  | YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; | 
|  |  | 
|  | while ( num_to_read <= 0 ) | 
|  | { /* Not enough room in the buffer - grow it. */ | 
|  |  | 
|  | /* just a shorter name for the current buffer */ | 
|  | YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; | 
|  |  | 
|  | int yy_c_buf_p_offset = | 
|  | (int) (yyg->yy_c_buf_p - b->yy_ch_buf); | 
|  |  | 
|  | if ( b->yy_is_our_buffer ) | 
|  | { | 
|  | int new_size = b->yy_buf_size * 2; | 
|  |  | 
|  | if ( new_size <= 0 ) | 
|  | b->yy_buf_size += b->yy_buf_size / 8; | 
|  | else | 
|  | b->yy_buf_size *= 2; | 
|  |  | 
|  | b->yy_ch_buf = (char *) | 
|  | /* Include room in for 2 EOB chars. */ | 
|  | yyrealloc( (void *) b->yy_ch_buf, | 
|  | (yy_size_t) (b->yy_buf_size + 2) , yyscanner ); | 
|  | } | 
|  | else | 
|  | /* Can't grow it, we don't own it. */ | 
|  | b->yy_ch_buf = NULL; | 
|  |  | 
|  | if ( ! b->yy_ch_buf ) | 
|  | YY_FATAL_ERROR( | 
|  | "fatal error - scanner input buffer overflow" ); | 
|  |  | 
|  | yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset]; | 
|  |  | 
|  | num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - | 
|  | number_to_move - 1; | 
|  |  | 
|  | } | 
|  |  | 
|  | if ( num_to_read > YY_READ_BUF_SIZE ) | 
|  | num_to_read = YY_READ_BUF_SIZE; | 
|  |  | 
|  | /* Read in more data. */ | 
|  | YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), | 
|  | yyg->yy_n_chars, num_to_read ); | 
|  |  | 
|  | YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; | 
|  | } | 
|  |  | 
|  | if ( yyg->yy_n_chars == 0 ) | 
|  | { | 
|  | if ( number_to_move == YY_MORE_ADJ ) | 
|  | { | 
|  | ret_val = EOB_ACT_END_OF_FILE; | 
|  | yyrestart( yyin  , yyscanner); | 
|  | } | 
|  |  | 
|  | else | 
|  | { | 
|  | ret_val = EOB_ACT_LAST_MATCH; | 
|  | YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = | 
|  | YY_BUFFER_EOF_PENDING; | 
|  | } | 
|  | } | 
|  |  | 
|  | else | 
|  | ret_val = EOB_ACT_CONTINUE_SCAN; | 
|  |  | 
|  | if ((yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { | 
|  | /* Extend the array by 50%, plus the number we really need. */ | 
|  | int new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1); | 
|  | YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc( | 
|  | (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size , yyscanner ); | 
|  | if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) | 
|  | YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); | 
|  | /* "- 2" to take care of EOB's */ | 
|  | YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2); | 
|  | } | 
|  |  | 
|  | yyg->yy_n_chars += number_to_move; | 
|  | YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR; | 
|  | YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; | 
|  |  | 
|  | yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; | 
|  |  | 
|  | return ret_val; | 
|  | } | 
|  |  | 
|  |  | 
|  | /* yy_get_previous_state - get the state just before the EOB char was reached */ | 
|  |  | 
|  | static yy_state_type yy_get_previous_state (yyscan_t yyscanner) | 
|  | { | 
|  | yy_state_type yy_current_state; | 
|  | char *yy_cp; | 
|  | struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; | 
|  |  | 
|  | yy_current_state = yyg->yy_start; | 
|  |  | 
|  | for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp ) | 
|  | { | 
|  | YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); | 
|  | if ( yy_accept[yy_current_state] ) | 
|  | { | 
|  | yyg->yy_last_accepting_state = yy_current_state; | 
|  | yyg->yy_last_accepting_cpos = yy_cp; | 
|  | } | 
|  | while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) | 
|  | { | 
|  | yy_current_state = (int) yy_def[yy_current_state]; | 
|  | if ( yy_current_state >= 821 ) | 
|  | yy_c = yy_meta[yy_c]; | 
|  | } | 
|  | yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; | 
|  | } | 
|  |  | 
|  | return yy_current_state; | 
|  | } | 
|  |  | 
|  |  | 
|  | /* yy_try_NUL_trans - try to make a transition on the NUL character | 
|  | * | 
|  | * synopsis | 
|  | *	next_state = yy_try_NUL_trans( current_state ); | 
|  | */ | 
|  | static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state , yyscan_t yyscanner) | 
|  | { | 
|  | int yy_is_jam; | 
|  | struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */ | 
|  | char *yy_cp = yyg->yy_c_buf_p; | 
|  |  | 
|  | YY_CHAR yy_c = 1; | 
|  | if ( yy_accept[yy_current_state] ) | 
|  | { | 
|  | yyg->yy_last_accepting_state = yy_current_state; | 
|  | yyg->yy_last_accepting_cpos = yy_cp; | 
|  | } | 
|  | while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) | 
|  | { | 
|  | yy_current_state = (int) yy_def[yy_current_state]; | 
|  | if ( yy_current_state >= 821 ) | 
|  | yy_c = yy_meta[yy_c]; | 
|  | } | 
|  | yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; | 
|  | yy_is_jam = (yy_current_state == 820); | 
|  |  | 
|  | (void)yyg; | 
|  | return yy_is_jam ? 0 : yy_current_state; | 
|  | } | 
|  |  | 
|  |  | 
|  | #ifndef YY_NO_UNPUT | 
|  |  | 
|  | #endif | 
|  |  | 
|  | #ifndef YY_NO_INPUT | 
|  | #ifdef __cplusplus | 
|  | static int yyinput (yyscan_t yyscanner) | 
|  | #else | 
|  | static int input  (yyscan_t yyscanner) | 
|  | #endif | 
|  |  | 
|  | { | 
|  | int c; | 
|  | struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; | 
|  |  | 
|  | *yyg->yy_c_buf_p = yyg->yy_hold_char; | 
|  |  | 
|  | if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR ) | 
|  | { | 
|  | /* yy_c_buf_p now points to the character we want to return. | 
|  | * If this occurs *before* the EOB characters, then it's a | 
|  | * valid NUL; if not, then we've hit the end of the buffer. | 
|  | */ | 
|  | if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) | 
|  | /* This was really a NUL. */ | 
|  | *yyg->yy_c_buf_p = '\0'; | 
|  |  | 
|  | else | 
|  | { /* need more input */ | 
|  | int offset = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr); | 
|  | ++yyg->yy_c_buf_p; | 
|  |  | 
|  | switch ( yy_get_next_buffer( yyscanner ) ) | 
|  | { | 
|  | case EOB_ACT_LAST_MATCH: | 
|  | /* This happens because yy_g_n_b() | 
|  | * sees that we've accumulated a | 
|  | * token and flags that we need to | 
|  | * try matching the token before | 
|  | * proceeding.  But for input(), | 
|  | * there's no matching to consider. | 
|  | * So convert the EOB_ACT_LAST_MATCH | 
|  | * to EOB_ACT_END_OF_FILE. | 
|  | */ | 
|  |  | 
|  | /* Reset buffer status. */ | 
|  | yyrestart( yyin , yyscanner); | 
|  |  | 
|  | /*FALLTHROUGH*/ | 
|  |  | 
|  | case EOB_ACT_END_OF_FILE: | 
|  | { | 
|  | if ( yywrap( yyscanner ) ) | 
|  | return 0; | 
|  |  | 
|  | if ( ! yyg->yy_did_buffer_switch_on_eof ) | 
|  | YY_NEW_FILE; | 
|  | #ifdef __cplusplus | 
|  | return yyinput(yyscanner); | 
|  | #else | 
|  | return input(yyscanner); | 
|  | #endif | 
|  | } | 
|  |  | 
|  | case EOB_ACT_CONTINUE_SCAN: | 
|  | yyg->yy_c_buf_p = yyg->yytext_ptr + offset; | 
|  | break; | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | c = *(unsigned char *) yyg->yy_c_buf_p;	/* cast for 8-bit char's */ | 
|  | *yyg->yy_c_buf_p = '\0';	/* preserve yytext */ | 
|  | yyg->yy_hold_char = *++yyg->yy_c_buf_p; | 
|  |  | 
|  | if ( c == '\n' ) | 
|  |  | 
|  | do{ yylineno++; | 
|  | yycolumn=0; | 
|  | }while(0) | 
|  | ; | 
|  |  | 
|  | return c; | 
|  | } | 
|  | #endif	/* ifndef YY_NO_INPUT */ | 
|  |  | 
|  | /** Immediately switch to a different input stream. | 
|  | * @param input_file A readable stream. | 
|  | * @param yyscanner The scanner object. | 
|  | * @note This function does not reset the start condition to @c INITIAL . | 
|  | */ | 
|  | void yyrestart  (FILE * input_file , yyscan_t yyscanner) | 
|  | { | 
|  | struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; | 
|  |  | 
|  | if ( ! YY_CURRENT_BUFFER ){ | 
|  | yyensure_buffer_stack (yyscanner); | 
|  | YY_CURRENT_BUFFER_LVALUE = | 
|  | yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); | 
|  | } | 
|  |  | 
|  | yy_init_buffer( YY_CURRENT_BUFFER, input_file , yyscanner); | 
|  | yy_load_buffer_state( yyscanner ); | 
|  | } | 
|  |  | 
|  |  | 
|  | /** Switch to a different input buffer. | 
|  | * @param new_buffer The new input buffer. | 
|  | * @param yyscanner The scanner object. | 
|  | */ | 
|  | void yy_switch_to_buffer  (YY_BUFFER_STATE  new_buffer , yyscan_t yyscanner) | 
|  | { | 
|  | struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; | 
|  |  | 
|  | /* TODO. We should be able to replace this entire function body | 
|  | * with | 
|  | *		yypop_buffer_state(); | 
|  | *		yypush_buffer_state(new_buffer); | 
|  | */ | 
|  | yyensure_buffer_stack (yyscanner); | 
|  | if ( YY_CURRENT_BUFFER == new_buffer ) | 
|  | return; | 
|  |  | 
|  | if ( YY_CURRENT_BUFFER ) | 
|  | { | 
|  | /* Flush out information for old buffer. */ | 
|  | *yyg->yy_c_buf_p = yyg->yy_hold_char; | 
|  | YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; | 
|  | YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; | 
|  | } | 
|  |  | 
|  | YY_CURRENT_BUFFER_LVALUE = new_buffer; | 
|  | yy_load_buffer_state( yyscanner ); | 
|  |  | 
|  | /* We don't actually know whether we did this switch during | 
|  | * EOF (yywrap()) processing, but the only time this flag | 
|  | * is looked at is after yywrap() is called, so it's safe | 
|  | * to go ahead and always set it. | 
|  | */ | 
|  | yyg->yy_did_buffer_switch_on_eof = 1; | 
|  | } | 
|  |  | 
|  |  | 
|  | static void yy_load_buffer_state  (yyscan_t yyscanner) | 
|  | { | 
|  | struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; | 
|  | yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; | 
|  | yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; | 
|  | yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; | 
|  | yyg->yy_hold_char = *yyg->yy_c_buf_p; | 
|  | } | 
|  |  | 
|  | /** Allocate and initialize an input buffer state. | 
|  | * @param file A readable stream. | 
|  | * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. | 
|  | * @param yyscanner The scanner object. | 
|  | * @return the allocated buffer state. | 
|  | */ | 
|  | YY_BUFFER_STATE yy_create_buffer  (FILE * file, int  size , yyscan_t yyscanner) | 
|  | { | 
|  | YY_BUFFER_STATE b; | 
|  |  | 
|  | b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) , yyscanner ); | 
|  | if ( ! b ) | 
|  | YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); | 
|  |  | 
|  | b->yy_buf_size = size; | 
|  |  | 
|  | /* yy_ch_buf has to be 2 characters longer than the size given because | 
|  | * we need to put in 2 end-of-buffer characters. | 
|  | */ | 
|  | b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) , yyscanner ); | 
|  | if ( ! b->yy_ch_buf ) | 
|  | YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); | 
|  |  | 
|  | b->yy_is_our_buffer = 1; | 
|  |  | 
|  | yy_init_buffer( b, file , yyscanner); | 
|  |  | 
|  | return b; | 
|  | } | 
|  |  | 
|  |  | 
|  | /** Destroy the buffer. | 
|  | * @param b a buffer created with yy_create_buffer() | 
|  | * @param yyscanner The scanner object. | 
|  | */ | 
|  | void yy_delete_buffer (YY_BUFFER_STATE  b , yyscan_t yyscanner) | 
|  | { | 
|  | struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; | 
|  |  | 
|  | if ( ! b ) | 
|  | return; | 
|  |  | 
|  | if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ | 
|  | YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; | 
|  |  | 
|  | if ( b->yy_is_our_buffer ) | 
|  | yyfree( (void *) b->yy_ch_buf , yyscanner ); | 
|  |  | 
|  | yyfree( (void *) b , yyscanner ); | 
|  | } | 
|  |  | 
|  |  | 
|  | /* Initializes or reinitializes a buffer. | 
|  | * This function is sometimes called more than once on the same buffer, | 
|  | * such as during a yyrestart() or at EOF. | 
|  | */ | 
|  | static void yy_init_buffer  (YY_BUFFER_STATE  b, FILE * file , yyscan_t yyscanner) | 
|  |  | 
|  | { | 
|  | int oerrno = errno; | 
|  | struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; | 
|  |  | 
|  | yy_flush_buffer( b , yyscanner); | 
|  |  | 
|  | b->yy_input_file = file; | 
|  | b->yy_fill_buffer = 1; | 
|  |  | 
|  | /* If b is the current buffer, then yy_init_buffer was _probably_ | 
|  | * called from yyrestart() or through yy_get_next_buffer. | 
|  | * In that case, we don't want to reset the lineno or column. | 
|  | */ | 
|  | if (b != YY_CURRENT_BUFFER){ | 
|  | b->yy_bs_lineno = 1; | 
|  | b->yy_bs_column = 0; | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | b->yy_is_interactive = 0; | 
|  |  | 
|  |  | 
|  | errno = oerrno; | 
|  | } | 
|  |  | 
|  | /** Discard all buffered characters. On the next scan, YY_INPUT will be called. | 
|  | * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. | 
|  | * @param yyscanner The scanner object. | 
|  | */ | 
|  | void yy_flush_buffer (YY_BUFFER_STATE  b , yyscan_t yyscanner) | 
|  | { | 
|  | struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; | 
|  | if ( ! b ) | 
|  | return; | 
|  |  | 
|  | b->yy_n_chars = 0; | 
|  |  | 
|  | /* We always need two end-of-buffer characters.  The first causes | 
|  | * a transition to the end-of-buffer state.  The second causes | 
|  | * a jam in that state. | 
|  | */ | 
|  | b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; | 
|  | b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; | 
|  |  | 
|  | b->yy_buf_pos = &b->yy_ch_buf[0]; | 
|  |  | 
|  | b->yy_at_bol = 1; | 
|  | b->yy_buffer_status = YY_BUFFER_NEW; | 
|  |  | 
|  | if ( b == YY_CURRENT_BUFFER ) | 
|  | yy_load_buffer_state( yyscanner ); | 
|  | } | 
|  |  | 
|  | /** Pushes the new state onto the stack. The new state becomes | 
|  | *  the current state. This function will allocate the stack | 
|  | *  if necessary. | 
|  | *  @param new_buffer The new state. | 
|  | *  @param yyscanner The scanner object. | 
|  | */ | 
|  | void yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) | 
|  | { | 
|  | struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; | 
|  | if (new_buffer == NULL) | 
|  | return; | 
|  |  | 
|  | yyensure_buffer_stack(yyscanner); | 
|  |  | 
|  | /* This block is copied from yy_switch_to_buffer. */ | 
|  | if ( YY_CURRENT_BUFFER ) | 
|  | { | 
|  | /* Flush out information for old buffer. */ | 
|  | *yyg->yy_c_buf_p = yyg->yy_hold_char; | 
|  | YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; | 
|  | YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; | 
|  | } | 
|  |  | 
|  | /* Only push if top exists. Otherwise, replace top. */ | 
|  | if (YY_CURRENT_BUFFER) | 
|  | yyg->yy_buffer_stack_top++; | 
|  | YY_CURRENT_BUFFER_LVALUE = new_buffer; | 
|  |  | 
|  | /* copied from yy_switch_to_buffer. */ | 
|  | yy_load_buffer_state( yyscanner ); | 
|  | yyg->yy_did_buffer_switch_on_eof = 1; | 
|  | } | 
|  |  | 
|  |  | 
|  | /** Removes and deletes the top of the stack, if present. | 
|  | *  The next element becomes the new top. | 
|  | *  @param yyscanner The scanner object. | 
|  | */ | 
|  | void yypop_buffer_state (yyscan_t yyscanner) | 
|  | { | 
|  | struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; | 
|  | if (!YY_CURRENT_BUFFER) | 
|  | return; | 
|  |  | 
|  | yy_delete_buffer(YY_CURRENT_BUFFER , yyscanner); | 
|  | YY_CURRENT_BUFFER_LVALUE = NULL; | 
|  | if (yyg->yy_buffer_stack_top > 0) | 
|  | --yyg->yy_buffer_stack_top; | 
|  |  | 
|  | if (YY_CURRENT_BUFFER) { | 
|  | yy_load_buffer_state( yyscanner ); | 
|  | yyg->yy_did_buffer_switch_on_eof = 1; | 
|  | } | 
|  | } | 
|  |  | 
|  |  | 
|  | /* Allocates the stack if it does not exist. | 
|  | *  Guarantees space for at least one push. | 
|  | */ | 
|  | static void yyensure_buffer_stack (yyscan_t yyscanner) | 
|  | { | 
|  | yy_size_t num_to_alloc; | 
|  | struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; | 
|  |  | 
|  | if (!yyg->yy_buffer_stack) { | 
|  |  | 
|  | /* First allocation is just for 2 elements, since we don't know if this | 
|  | * scanner will even need a stack. We use 2 instead of 1 to avoid an | 
|  | * immediate realloc on the next call. | 
|  | */ | 
|  | num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */ | 
|  | yyg->yy_buffer_stack = (struct yy_buffer_state**)yyalloc | 
|  | (num_to_alloc * sizeof(struct yy_buffer_state*) | 
|  | , yyscanner); | 
|  | if ( ! yyg->yy_buffer_stack ) | 
|  | YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); | 
|  |  | 
|  |  | 
|  | memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*)); | 
|  |  | 
|  | yyg->yy_buffer_stack_max = num_to_alloc; | 
|  | yyg->yy_buffer_stack_top = 0; | 
|  | return; | 
|  | } | 
|  |  | 
|  | if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){ | 
|  |  | 
|  | /* Increase the buffer to prepare for a possible push. */ | 
|  | yy_size_t grow_size = 8 /* arbitrary grow size */; | 
|  |  | 
|  | num_to_alloc = yyg->yy_buffer_stack_max + grow_size; | 
|  | yyg->yy_buffer_stack = (struct yy_buffer_state**)yyrealloc | 
|  | (yyg->yy_buffer_stack, | 
|  | num_to_alloc * sizeof(struct yy_buffer_state*) | 
|  | , yyscanner); | 
|  | if ( ! yyg->yy_buffer_stack ) | 
|  | YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); | 
|  |  | 
|  | /* zero only the new slots.*/ | 
|  | memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*)); | 
|  | yyg->yy_buffer_stack_max = num_to_alloc; | 
|  | } | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | /** Setup the input buffer state to scan directly from a user-specified character buffer. | 
|  | * @param base the character buffer | 
|  | * @param size the size in bytes of the character buffer | 
|  | * @param yyscanner The scanner object. | 
|  | * @return the newly allocated buffer state object. | 
|  | */ | 
|  | YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size , yyscan_t yyscanner) | 
|  | { | 
|  | YY_BUFFER_STATE b; | 
|  |  | 
|  | if ( size < 2 || | 
|  | base[size-2] != YY_END_OF_BUFFER_CHAR || | 
|  | base[size-1] != YY_END_OF_BUFFER_CHAR ) | 
|  | /* They forgot to leave room for the EOB's. */ | 
|  | return NULL; | 
|  |  | 
|  | b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) , yyscanner ); | 
|  | if ( ! b ) | 
|  | YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); | 
|  |  | 
|  | b->yy_buf_size = (int) (size - 2);	/* "- 2" to take care of EOB's */ | 
|  | b->yy_buf_pos = b->yy_ch_buf = base; | 
|  | b->yy_is_our_buffer = 0; | 
|  | b->yy_input_file = NULL; | 
|  | b->yy_n_chars = b->yy_buf_size; | 
|  | b->yy_is_interactive = 0; | 
|  | b->yy_at_bol = 1; | 
|  | b->yy_fill_buffer = 0; | 
|  | b->yy_buffer_status = YY_BUFFER_NEW; | 
|  |  | 
|  | yy_switch_to_buffer( b , yyscanner ); | 
|  |  | 
|  | return b; | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | /** Setup the input buffer state to scan a string. The next call to yylex() will | 
|  | * scan from a @e copy of @a str. | 
|  | * @param yystr a NUL-terminated string to scan | 
|  | * @param yyscanner The scanner object. | 
|  | * @return the newly allocated buffer state object. | 
|  | * @note If you want to scan bytes that may contain NUL values, then use | 
|  | *       yy_scan_bytes() instead. | 
|  | */ | 
|  | YY_BUFFER_STATE yy_scan_string (const char * yystr , yyscan_t yyscanner) | 
|  | { | 
|  |  | 
|  | return yy_scan_bytes( yystr, (int) strlen(yystr) , yyscanner); | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | /** Setup the input buffer state to scan the given bytes. The next call to yylex() will | 
|  | * scan from a @e copy of @a bytes. | 
|  | * @param yybytes the byte buffer to scan | 
|  | * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. | 
|  | * @param yyscanner The scanner object. | 
|  | * @return the newly allocated buffer state object. | 
|  | */ | 
|  | YY_BUFFER_STATE yy_scan_bytes  (const char * yybytes, int  _yybytes_len , yyscan_t yyscanner) | 
|  | { | 
|  | YY_BUFFER_STATE b; | 
|  | char *buf; | 
|  | yy_size_t n; | 
|  | int i; | 
|  |  | 
|  | /* Get memory for full buffer, including space for trailing EOB's. */ | 
|  | n = (yy_size_t) (_yybytes_len + 2); | 
|  | buf = (char *) yyalloc( n , yyscanner ); | 
|  | if ( ! buf ) | 
|  | YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); | 
|  |  | 
|  | for ( i = 0; i < _yybytes_len; ++i ) | 
|  | buf[i] = yybytes[i]; | 
|  |  | 
|  | buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; | 
|  |  | 
|  | b = yy_scan_buffer( buf, n , yyscanner); | 
|  | if ( ! b ) | 
|  | YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); | 
|  |  | 
|  | /* It's okay to grow etc. this buffer, and we should throw it | 
|  | * away when we're done. | 
|  | */ | 
|  | b->yy_is_our_buffer = 1; | 
|  |  | 
|  | return b; | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | #ifndef YY_EXIT_FAILURE | 
|  | #define YY_EXIT_FAILURE 2 | 
|  | #endif | 
|  |  | 
|  | static void yynoreturn yy_fatal_error (const char* msg , yyscan_t yyscanner) | 
|  | { | 
|  | struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; | 
|  | (void)yyg; | 
|  | fprintf( stderr, "%s\n", msg ); | 
|  | exit( YY_EXIT_FAILURE ); | 
|  | } | 
|  |  | 
|  | /* Redefine yyless() so it works in section 3 code. */ | 
|  |  | 
|  | #undef yyless | 
|  | #define yyless(n) \ | 
|  | do \ | 
|  | { \ | 
|  | /* Undo effects of setting up yytext. */ \ | 
|  | int yyless_macro_arg = (n); \ | 
|  | YY_LESS_LINENO(yyless_macro_arg);\ | 
|  | yytext[yyleng] = yyg->yy_hold_char; \ | 
|  | yyg->yy_c_buf_p = yytext + yyless_macro_arg; \ | 
|  | yyg->yy_hold_char = *yyg->yy_c_buf_p; \ | 
|  | *yyg->yy_c_buf_p = '\0'; \ | 
|  | yyleng = yyless_macro_arg; \ | 
|  | } \ | 
|  | while ( 0 ) | 
|  |  | 
|  |  | 
|  |  | 
|  | /* Accessor  methods (get/set functions) to struct members. */ | 
|  |  | 
|  |  | 
|  | /** Get the user-defined data for this scanner. | 
|  | * @param yyscanner The scanner object. | 
|  | */ | 
|  | YY_EXTRA_TYPE yyget_extra  (yyscan_t yyscanner) | 
|  | { | 
|  | struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; | 
|  | return yyextra; | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | /** Get the current line number. | 
|  | * @param yyscanner The scanner object. | 
|  | */ | 
|  | int yyget_lineno  (yyscan_t yyscanner) | 
|  | { | 
|  | struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; | 
|  |  | 
|  |  | 
|  | if (! YY_CURRENT_BUFFER) | 
|  | return 0; | 
|  |  | 
|  | return yylineno; | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | /** Get the current column number. | 
|  | * @param yyscanner The scanner object. | 
|  | */ | 
|  | int yyget_column  (yyscan_t yyscanner) | 
|  | { | 
|  | struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; | 
|  |  | 
|  |  | 
|  | if (! YY_CURRENT_BUFFER) | 
|  | return 0; | 
|  |  | 
|  | return yycolumn; | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | /** Get the input stream. | 
|  | * @param yyscanner The scanner object. | 
|  | */ | 
|  | FILE *yyget_in  (yyscan_t yyscanner) | 
|  | { | 
|  | struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; | 
|  | return yyin; | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | /** Get the output stream. | 
|  | * @param yyscanner The scanner object. | 
|  | */ | 
|  | FILE *yyget_out  (yyscan_t yyscanner) | 
|  | { | 
|  | struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; | 
|  | return yyout; | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | /** Get the length of the current token. | 
|  | * @param yyscanner The scanner object. | 
|  | */ | 
|  | int yyget_leng  (yyscan_t yyscanner) | 
|  | { | 
|  | struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; | 
|  | return yyleng; | 
|  | } | 
|  |  | 
|  |  | 
|  | /** Get the current token. | 
|  | * @param yyscanner The scanner object. | 
|  | */ | 
|  |  | 
|  | char *yyget_text  (yyscan_t yyscanner) | 
|  | { | 
|  | struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; | 
|  | return yytext; | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | /** Set the user-defined data. This data is never touched by the scanner. | 
|  | * @param user_defined The data to be associated with this scanner. | 
|  | * @param yyscanner The scanner object. | 
|  | */ | 
|  | void yyset_extra (YY_EXTRA_TYPE  user_defined , yyscan_t yyscanner) | 
|  | { | 
|  | struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; | 
|  | yyextra = user_defined ; | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | /** Set the current line number. | 
|  | * @param _line_number line number | 
|  | * @param yyscanner The scanner object. | 
|  | */ | 
|  | void yyset_lineno (int  _line_number , yyscan_t yyscanner) | 
|  | { | 
|  | struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; | 
|  |  | 
|  |  | 
|  | /* lineno is only valid if an input buffer exists. */ | 
|  | if (! YY_CURRENT_BUFFER ) | 
|  | YY_FATAL_ERROR( "yyset_lineno called with no buffer" ); | 
|  |  | 
|  | yylineno = _line_number; | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | /** Set the current column. | 
|  | * @param _column_no column number | 
|  | * @param yyscanner The scanner object. | 
|  | */ | 
|  | void yyset_column (int  _column_no , yyscan_t yyscanner) | 
|  | { | 
|  | struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; | 
|  |  | 
|  |  | 
|  | /* column is only valid if an input buffer exists. */ | 
|  | if (! YY_CURRENT_BUFFER ) | 
|  | YY_FATAL_ERROR( "yyset_column called with no buffer" ); | 
|  |  | 
|  | yycolumn = _column_no; | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | /** Set the input stream. This does not discard the current | 
|  | * input buffer. | 
|  | * @param _in_str A readable stream. | 
|  | * @param yyscanner The scanner object. | 
|  | * @see yy_switch_to_buffer | 
|  | */ | 
|  | void yyset_in (FILE *  _in_str , yyscan_t yyscanner) | 
|  | { | 
|  | struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; | 
|  | yyin = _in_str ; | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | void yyset_out (FILE *  _out_str , yyscan_t yyscanner) | 
|  | { | 
|  | struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; | 
|  | yyout = _out_str ; | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | int yyget_debug  (yyscan_t yyscanner) | 
|  | { | 
|  | struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; | 
|  | return yy_flex_debug; | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | void yyset_debug (int  _bdebug , yyscan_t yyscanner) | 
|  | { | 
|  | struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; | 
|  | yy_flex_debug = _bdebug ; | 
|  | } | 
|  |  | 
|  |  | 
|  | /* Accessor methods for yylval and yylloc */ | 
|  |  | 
|  |  | 
|  | YYSTYPE * yyget_lval  (yyscan_t yyscanner) | 
|  | { | 
|  | struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; | 
|  | return yylval; | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | void yyset_lval (YYSTYPE *  yylval_param , yyscan_t yyscanner) | 
|  | { | 
|  | struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; | 
|  | yylval = yylval_param; | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | YYLTYPE *yyget_lloc  (yyscan_t yyscanner) | 
|  | { | 
|  | struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; | 
|  | return yylloc; | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | void yyset_lloc (YYLTYPE *  yylloc_param , yyscan_t yyscanner) | 
|  | { | 
|  | struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; | 
|  | yylloc = yylloc_param; | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | /* User-visible API */ | 
|  |  | 
|  | /* yylex_init is special because it creates the scanner itself, so it is | 
|  | * the ONLY reentrant function that doesn't take the scanner as the last argument. | 
|  | * That's why we explicitly handle the declaration, instead of using our macros. | 
|  | */ | 
|  | int yylex_init(yyscan_t* ptr_yy_globals) | 
|  | { | 
|  | if (ptr_yy_globals == NULL){ | 
|  | errno = EINVAL; | 
|  | return 1; | 
|  | } | 
|  |  | 
|  | *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), NULL ); | 
|  |  | 
|  | if (*ptr_yy_globals == NULL){ | 
|  | errno = ENOMEM; | 
|  | return 1; | 
|  | } | 
|  |  | 
|  | /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */ | 
|  | memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); | 
|  |  | 
|  | return yy_init_globals ( *ptr_yy_globals ); | 
|  | } | 
|  |  | 
|  |  | 
|  | /* yylex_init_extra has the same functionality as yylex_init, but follows the | 
|  | * convention of taking the scanner as the last argument. Note however, that | 
|  | * this is a *pointer* to a scanner, as it will be allocated by this call (and | 
|  | * is the reason, too, why this function also must handle its own declaration). | 
|  | * The user defined value in the first argument will be available to yyalloc in | 
|  | * the yyextra field. | 
|  | */ | 
|  | int yylex_init_extra( YY_EXTRA_TYPE yy_user_defined, yyscan_t* ptr_yy_globals ) | 
|  | { | 
|  | struct yyguts_t dummy_yyguts; | 
|  |  | 
|  | yyset_extra (yy_user_defined, &dummy_yyguts); | 
|  |  | 
|  | if (ptr_yy_globals == NULL){ | 
|  | errno = EINVAL; | 
|  | return 1; | 
|  | } | 
|  |  | 
|  | *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), &dummy_yyguts ); | 
|  |  | 
|  | if (*ptr_yy_globals == NULL){ | 
|  | errno = ENOMEM; | 
|  | return 1; | 
|  | } | 
|  |  | 
|  | /* By setting to 0xAA, we expose bugs in | 
|  | yy_init_globals. Leave at 0x00 for releases. */ | 
|  | memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); | 
|  |  | 
|  | yyset_extra (yy_user_defined, *ptr_yy_globals); | 
|  |  | 
|  | return yy_init_globals ( *ptr_yy_globals ); | 
|  | } | 
|  |  | 
|  |  | 
|  | static int yy_init_globals (yyscan_t yyscanner) | 
|  | { | 
|  | struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; | 
|  | /* Initialization is the same as for the non-reentrant scanner. | 
|  | * This function is called from yylex_destroy(), so don't allocate here. | 
|  | */ | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | yyg->yy_buffer_stack = NULL; | 
|  | yyg->yy_buffer_stack_top = 0; | 
|  | yyg->yy_buffer_stack_max = 0; | 
|  | yyg->yy_c_buf_p = NULL; | 
|  | yyg->yy_init = 0; | 
|  | yyg->yy_start = 0; | 
|  |  | 
|  |  | 
|  | yyg->yy_start_stack_ptr = 0; | 
|  | yyg->yy_start_stack_depth = 0; | 
|  | yyg->yy_start_stack =  NULL; | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | /* Defined in main.c */ | 
|  | #ifdef YY_STDINIT | 
|  | yyin = stdin; | 
|  | yyout = stdout; | 
|  | #else | 
|  | yyin = NULL; | 
|  | yyout = NULL; | 
|  | #endif | 
|  |  | 
|  | /* For future reference: Set errno on error, since we are called by | 
|  | * yylex_init() | 
|  | */ | 
|  | return 0; | 
|  | } | 
|  |  | 
|  |  | 
|  | /* yylex_destroy is for both reentrant and non-reentrant scanners. */ | 
|  | int yylex_destroy  (yyscan_t yyscanner) | 
|  | { | 
|  | struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; | 
|  |  | 
|  | /* Pop the buffer stack, destroying each element. */ | 
|  | while(YY_CURRENT_BUFFER){ | 
|  | yy_delete_buffer( YY_CURRENT_BUFFER , yyscanner ); | 
|  | YY_CURRENT_BUFFER_LVALUE = NULL; | 
|  | yypop_buffer_state(yyscanner); | 
|  | } | 
|  |  | 
|  | /* Destroy the stack itself. */ | 
|  | yyfree(yyg->yy_buffer_stack , yyscanner); | 
|  | yyg->yy_buffer_stack = NULL; | 
|  |  | 
|  |  | 
|  | /* Destroy the start condition stack. */ | 
|  | yyfree( yyg->yy_start_stack , yyscanner ); | 
|  | yyg->yy_start_stack = NULL; | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | /* Reset the globals. This is important in a non-reentrant scanner so the next time | 
|  | * yylex() is called, initialization will occur. */ | 
|  | yy_init_globals( yyscanner); | 
|  |  | 
|  | /* Destroy the main struct (reentrant only). */ | 
|  | yyfree ( yyscanner , yyscanner ); | 
|  | yyscanner = NULL; | 
|  | return 0; | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | /* | 
|  | * Internal utility routines. | 
|  | */ | 
|  |  | 
|  |  | 
|  |  | 
|  | #ifndef yytext_ptr | 
|  | static void yy_flex_strncpy (char* s1, const char * s2, int n , yyscan_t yyscanner) | 
|  | { | 
|  | struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; | 
|  | (void)yyg; | 
|  |  | 
|  | int i; | 
|  | for ( i = 0; i < n; ++i ) | 
|  | s1[i] = s2[i]; | 
|  | } | 
|  | #endif | 
|  |  | 
|  |  | 
|  |  | 
|  | #ifdef YY_NEED_STRLEN | 
|  | static int yy_flex_strlen (const char * s , yyscan_t yyscanner) | 
|  | { | 
|  | int n; | 
|  | for ( n = 0; s[n]; ++n ) | 
|  | ; | 
|  |  | 
|  | return n; | 
|  | } | 
|  | #endif | 
|  |  | 
|  |  | 
|  |  | 
|  | void *yyalloc (yy_size_t  size , yyscan_t yyscanner) | 
|  | { | 
|  | struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; | 
|  | (void)yyg; | 
|  | return malloc(size); | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | void *yyrealloc  (void * ptr, yy_size_t  size , yyscan_t yyscanner) | 
|  | { | 
|  | struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; | 
|  | (void)yyg; | 
|  |  | 
|  | /* The cast to (char *) in the following accommodates both | 
|  | * implementations that use char* generic pointers, and those | 
|  | * that use void* generic pointers.  It works with the latter | 
|  | * because both ANSI C and C++ allow castless assignment from | 
|  | * any pointer type to void*, and deal with argument conversions | 
|  | * as though doing an assignment. | 
|  | */ | 
|  | return realloc(ptr, size); | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | void yyfree (void * ptr , yyscan_t yyscanner) | 
|  | { | 
|  | struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; | 
|  | (void)yyg; | 
|  | free( (char *) ptr );	/* see yyrealloc() for (char *) cast */ | 
|  | } | 
|  |  | 
|  |  | 
|  | #define YYTABLES_NAME "yytables" | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | yy_size_t string_input(char* buf, yy_size_t max_size, yyscan_t yyscanner) { | 
|  | pp::Token token; | 
|  | yyget_extra(yyscanner)->getPreprocessor().lex(&token); | 
|  | yy_size_t len = token.type == pp::Token::LAST ? 0 : token.text.size(); | 
|  | if (len < max_size) | 
|  | memcpy(buf, token.text.c_str(), len); | 
|  | yyset_column(token.location.file, yyscanner); | 
|  | yyset_lineno(token.location.line, yyscanner); | 
|  |  | 
|  | if (len >= max_size) | 
|  | YY_FATAL_ERROR("Input buffer overflow"); | 
|  | else if (len > 0) | 
|  | buf[len++] = ' '; | 
|  | return len; | 
|  | } | 
|  |  | 
|  | int check_type(yyscan_t yyscanner) { | 
|  | struct yyguts_t* yyg = (struct yyguts_t*) yyscanner; | 
|  |  | 
|  | int token = IDENTIFIER; | 
|  | TSymbol* symbol = yyextra->symbolTable.find(yytext, yyextra->getShaderVersion()); | 
|  | if (yyextra->lexAfterType == false && symbol && symbol->isVariable()) { | 
|  | TVariable* variable = static_cast<TVariable*>(symbol); | 
|  | if (variable->isUserType()) { | 
|  | yyextra->lexAfterType = true; | 
|  | token = TYPE_NAME; | 
|  | } | 
|  | } | 
|  | yylval->lex.symbol = symbol; | 
|  | return token; | 
|  | } | 
|  |  | 
|  | int reserved_word(yyscan_t yyscanner) { | 
|  | struct yyguts_t* yyg = (struct yyguts_t*) yyscanner; | 
|  |  | 
|  | yyextra->error(*yylloc, "Illegal use of reserved word", yytext, ""); | 
|  | yyextra->recover(); | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | int ES2_reserved_ES3_keyword(TParseContext *context, int token) | 
|  | { | 
|  | yyscan_t yyscanner = (yyscan_t) context->getScanner(); | 
|  |  | 
|  | if (context->getShaderVersion() < 300) | 
|  | { | 
|  | return reserved_word(yyscanner); | 
|  | } | 
|  |  | 
|  | return token; | 
|  | } | 
|  |  | 
|  | int ES2_keyword_ES3_reserved(TParseContext *context, int token) | 
|  | { | 
|  | yyscan_t yyscanner = (yyscan_t) context->getScanner(); | 
|  |  | 
|  | if (context->getShaderVersion() >= 300) | 
|  | { | 
|  | return reserved_word(yyscanner); | 
|  | } | 
|  |  | 
|  | return token; | 
|  | } | 
|  |  | 
|  | int ES2_identifier_ES3_keyword(TParseContext *context, int token) | 
|  | { | 
|  | struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner(); | 
|  | yyscan_t yyscanner = (yyscan_t) context->getScanner(); | 
|  |  | 
|  | // not a reserved word in GLSL ES 1.00, so could be used as an identifier/type name | 
|  | if (context->getShaderVersion() < 300) | 
|  | { | 
|  | yylval->lex.string = NewPoolTString(yytext); | 
|  | return check_type(yyscanner); | 
|  | } | 
|  |  | 
|  | return token; | 
|  | } | 
|  |  | 
|  | int uint_constant(TParseContext *context) | 
|  | { | 
|  | struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner(); | 
|  |  | 
|  | if (context->getShaderVersion() < 300) | 
|  | { | 
|  | context->error(*yylloc, "Unsigned integers are unsupported prior to GLSL ES 3.00", yytext, ""); | 
|  | context->recover(); | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | if (!atou_clamp(yytext, &(yylval->lex.u))) | 
|  | yyextra->warning(*yylloc, "Integer overflow", yytext, ""); | 
|  |  | 
|  | return UINTCONSTANT; | 
|  | } | 
|  |  | 
|  | int floatsuffix_check(TParseContext* context) | 
|  | { | 
|  | struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner(); | 
|  |  | 
|  | if (context->getShaderVersion() < 300) | 
|  | { | 
|  | context->error(*yylloc, "Floating-point suffix unsupported prior to GLSL ES 3.00", yytext); | 
|  | context->recover(); | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | if (!atof_clamp(yytext, &(yylval->lex.f))) | 
|  | yyextra->warning(*yylloc, "Float overflow", yytext, ""); | 
|  |  | 
|  | return(FLOATCONSTANT); | 
|  | } | 
|  |  | 
|  | int int_constant(yyscan_t yyscanner) { | 
|  | struct yyguts_t* yyg = (struct yyguts_t*) yyscanner; | 
|  |  | 
|  | if (!atoi_clamp(yytext, &(yylval->lex.i))) | 
|  | yyextra->warning(*yylloc, "Integer overflow", yytext, ""); | 
|  | return INTCONSTANT; | 
|  | } | 
|  |  | 
|  | int float_constant(yyscan_t yyscanner) { | 
|  | struct yyguts_t* yyg = (struct yyguts_t*) yyscanner; | 
|  |  | 
|  | if (!atof_clamp(yytext, &(yylval->lex.f))) | 
|  | yyextra->warning(*yylloc, "Float overflow", yytext, ""); | 
|  | return FLOATCONSTANT; | 
|  | } | 
|  |  | 
|  | void yyerror(YYLTYPE* lloc, TParseContext* context, void* scanner, const char* reason) { | 
|  | struct yyguts_t* yyg = (struct yyguts_t*) scanner; | 
|  |  | 
|  | if (context->AfterEOF) { | 
|  | context->error(*lloc, reason, "unexpected EOF"); | 
|  | } else { | 
|  | context->error(*lloc, reason, yytext); | 
|  | } | 
|  | context->recover(); | 
|  | } | 
|  |  | 
|  | int glslang_initialize(TParseContext* context) { | 
|  | yyscan_t scanner = NULL; | 
|  | if (yylex_init_extra(context, &scanner)) | 
|  | return 1; | 
|  |  | 
|  | context->setScanner(scanner); | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | int glslang_finalize(TParseContext* context) { | 
|  | yyscan_t scanner = context->getScanner(); | 
|  | if (scanner == NULL) return 0; | 
|  |  | 
|  | context->setScanner(NULL); | 
|  | yylex_destroy(scanner); | 
|  |  | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | int glslang_scan(size_t count, const char* const string[], const int length[], | 
|  | TParseContext* context) { | 
|  | yyrestart(NULL, context->getScanner()); | 
|  | yyset_column(0, context->getScanner()); | 
|  | yyset_lineno(1, context->getScanner()); | 
|  | context->AfterEOF = false; | 
|  |  | 
|  | // Initialize preprocessor. | 
|  | if (!context->getPreprocessor().init(count, string, length)) | 
|  | return 1; | 
|  |  | 
|  | // Define extension macros. | 
|  | const TExtensionBehavior& extBehavior = context->extensionBehavior(); | 
|  | for (TExtensionBehavior::const_iterator iter = extBehavior.begin(); | 
|  | iter != extBehavior.end(); ++iter) | 
|  | { | 
|  | context->getPreprocessor().predefineMacro(iter->first.c_str(), 1); | 
|  | } | 
|  |  | 
|  | context->getPreprocessor().predefineMacro("GL_FRAGMENT_PRECISION_HIGH", 1); | 
|  |  | 
|  | return 0; | 
|  | } | 
|  |  | 
|  |  |