#line 2 "glsl_lexer.cpp"

#line 4 "glsl_lexer.cpp"

#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 5
#define YY_FLEX_SUBMINOR_VERSION 35
#if YY_FLEX_SUBMINOR_VERSION > 0
#define FLEX_BETA
#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;
#endif /* ! C99 */

/* 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

#endif /* ! FLEXINT_H */

#ifdef __cplusplus

/* The "const" storage-class-modifier is valid. */
#define YY_USE_CONST

#else	/* ! __cplusplus */

/* C99 requires __STDC__ to be defined as 1. */
#if defined (__STDC__)

#define YY_USE_CONST

#endif	/* defined (__STDC__) */
#endif	/* ! __cplusplus */

#ifdef YY_USE_CONST
#define yyconst const
#else
#define yyconst
#endif

/* Returned upon end-of-file. */
#define YY_NULL 0

/* Promotes a possibly negative, possibly signed char to an unsigned
 * integer for use as an array index.  If the signed char is negative,
 * we want to instead treat it as an 8-bit unsigned char, hence the
 * double cast.
 */
#define YY_SC_TO_UI(c) ((unsigned int) (unsigned 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 _mesa_glsl_restart(yyin ,yyscanner )

#define YY_END_OF_BUFFER_CHAR 0

/* Size of default input buffer. */
#ifndef YY_BUF_SIZE
#define YY_BUF_SIZE 16384
#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

#define EOB_ACT_CONTINUE_SCAN 0
#define EOB_ACT_END_OF_FILE 1
#define EOB_ACT_LAST_MATCH 2

    #define YY_LESS_LINENO(n)
    
/* 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_TYPEDEF_YY_SIZE_T
#define YY_TYPEDEF_YY_SIZE_T
typedef size_t yy_size_t;
#endif

#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.
	 */
	yy_size_t 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 _mesa_glsl_restart()), 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 _mesa_glsl_restart (FILE *input_file ,yyscan_t yyscanner );
void _mesa_glsl__switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
YY_BUFFER_STATE _mesa_glsl__create_buffer (FILE *file,int size ,yyscan_t yyscanner );
void _mesa_glsl__delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
void _mesa_glsl__flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
void _mesa_glsl_push_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
void _mesa_glsl_pop_buffer_state (yyscan_t yyscanner );

static void _mesa_glsl_ensure_buffer_stack (yyscan_t yyscanner );
static void _mesa_glsl__load_buffer_state (yyscan_t yyscanner );
static void _mesa_glsl__init_buffer (YY_BUFFER_STATE b,FILE *file ,yyscan_t yyscanner );

#define YY_FLUSH_BUFFER _mesa_glsl__flush_buffer(YY_CURRENT_BUFFER ,yyscanner)

YY_BUFFER_STATE _mesa_glsl__scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner );
YY_BUFFER_STATE _mesa_glsl__scan_string (yyconst char *yy_str ,yyscan_t yyscanner );
YY_BUFFER_STATE _mesa_glsl__scan_bytes (yyconst char *bytes,int len ,yyscan_t yyscanner );

void *_mesa_glsl_alloc (yy_size_t ,yyscan_t yyscanner );
void *_mesa_glsl_realloc (void *,yy_size_t ,yyscan_t yyscanner );
void _mesa_glsl_free (void * ,yyscan_t yyscanner );

#define yy_new_buffer _mesa_glsl__create_buffer

#define yy_set_interactive(is_interactive) \
	{ \
	if ( ! YY_CURRENT_BUFFER ){ \
        _mesa_glsl_ensure_buffer_stack (yyscanner); \
		YY_CURRENT_BUFFER_LVALUE =    \
            _mesa_glsl__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 ){\
        _mesa_glsl_ensure_buffer_stack (yyscanner); \
		YY_CURRENT_BUFFER_LVALUE =    \
            _mesa_glsl__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 _mesa_glsl_wrap(n) 1
#define YY_SKIP_YYWRAP

typedef unsigned char 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 yy_fatal_error (yyconst 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 = (size_t) (yy_cp - yy_bp); \
	yyg->yy_hold_char = *yy_cp; \
	*yy_cp = '\0'; \
	yyg->yy_c_buf_p = yy_cp;

#define YY_NUM_RULES 209
#define YY_END_OF_BUFFER 210
/* 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 yyconst flex_int16_t yy_accept[813] =
    {   0,
        0,    0,   15,   15,    0,    0,  210,  208,    1,   20,
      208,  208,  208,  208,  208,  208,  208,  208,  119,  117,
      208,  208,  208,  207,  208,  207,  207,  207,  207,  207,
      207,  207,  207,  207,  207,  207,  207,  207,  207,  207,
      207,  207,  207,  207,  207,  208,    1,  208,  209,   15,
       19,  209,   18,   16,   17,   13,   12,    1,  101,  110,
      102,  113,  107,   96,  109,   97,  116,  121,  108,  122,
      119,    0,    0,  124,  119,    0,  117,  117,  105,   98,
      100,   99,  106,  207,  114,  104,  207,  207,  207,  207,
      207,  207,  207,  207,  207,  207,  207,  207,   29,  207,

      207,  207,  207,  207,  207,  207,  207,  207,  207,  207,
      207,  207,   33,  207,  207,   60,  207,  207,  207,  207,
      207,  207,  207,  207,  207,  207,  207,  207,  207,  207,
      207,  207,  207,  207,  207,  207,  207,  207,  207,  207,
      207,  207,  207,  207,  207,  207,  207,  207,  207,  115,
      103,    1,    0,    0,    2,    0,    0,    0,    0,   15,
       14,   18,   17,    0,  121,  120,    0,  122,    0,  123,
      118,  111,  112,  207,  127,  207,  207,  207,  207,  207,
      207,  207,  207,  207,  207,  207,  207,  207,  207,  207,
      207,  207,  207,  207,  207,  207,   32,  207,  207,  207,

      207,  207,  207,  207,  207,  207,  207,   25,  207,  207,
      207,  207,  207,  207,  207,  207,  207,  207,  207,   61,
      207,  207,  207,  207,  207,  207,  207,  207,  207,  207,
      207,  207,  207,  207,  207,  207,  207,  207,  207,  207,
      207,  207,  207,  207,  207,  207,  207,  207,  207,  207,
        0,    0,    0,    0,   14,    0,  121,    0,  120,    0,
      122,  123,  118,  207,  207,   23,  207,  207,  174,  167,
      207,  207,  207,  207,  207,  207,  207,  207,  207,   31,
      130,  207,  207,  207,  207,   67,  207,  207,  135,  149,
      207,  207,  207,  207,  207,  207,  207,  207,  207,  207,

      207,  207,  146,  170,   48,   49,   50,  207,  207,  207,
      207,  207,  207,  207,  207,  207,  207,  207,  207,  207,
      207,  207,  207,  207,  207,  207,  207,  133,  125,  207,
      207,   26,  207,  207,  207,  207,  207,  207,  207,   45,
       46,   47,   94,  207,  207,    0,    0,    0,    0,    0,
      120,  207,  207,   27,   36,   37,   38,  207,  128,  207,
       22,  207,  207,  207,  207,  157,  158,  159,  207,  126,
      207,  150,   24,  160,  161,  162,  172,  154,  155,  156,
      207,  207,  207,   62,  152,  207,  207,  207,   39,   40,
       41,  207,  207,  207,  207,  207,  207,  207,  207,  207,

      207,  207,  207,  207,  207,  207,  207,  147,  207,  207,
      207,  207,  207,  207,  207,  207,  207,  207,  129,  207,
      207,  169,   42,   43,   44,  207,  207,   30,    0,    0,
        0,    0,  177,  207,  207,  175,  207,  207,  207,  148,
      143,  180,  207,  207,  207,  207,  207,  207,  138,  207,
      207,  207,   95,   51,   52,   53,   54,   55,   56,   57,
       58,   59,  207,  207,  207,  207,  153,  134,  207,  207,
      141,   35,  207,  207,  166,   68,  142,   93,  178,  136,
      207,  207,  207,  207,  207,  207,  207,  207,    0,    0,
        0,    0,  207,  207,  207,  137,   34,  207,  207,  207,

      207,  207,  207,  181,  182,  183,  207,  207,  207,  207,
      207,  171,  207,  207,  207,  207,  207,  207,  207,  207,
      131,  207,  207,  207,  207,  207,   63,  207,  207,   64,
      207,    0,    0,    0,    0,    0,  207,   65,   28,  144,
      185,  186,  187,  207,  207,  207,  207,  207,  207,  207,
      207,  207,  207,  207,  207,  139,  207,  207,  207,  207,
      207,  207,  207,  207,  207,  132,  189,  190,  191,  207,
      207,  151,  207,  140,    0,    0,    6,    0,    0,    0,
       11,    3,   21,  207,  207,  207,  207,  207,  207,  207,
      207,  207,  184,  145,   66,  207,  207,  207,  207,  168,

      207,  176,  173,  206,   70,   71,   72,  207,  207,  207,
      207,  207,  207,  207,  207,  207,  207,    0,    0,    0,
        0,    0,    0,  207,  207,  207,  188,  207,  207,  207,
      207,  207,   81,   82,   83,  207,  207,  207,  207,  207,
      207,  207,  207,  207,  207,  207,  207,  207,  192,   87,
       88,   89,  207,    4,    0,    5,    0,    0,    0,    0,
        0,  207,  207,  207,  207,  207,  207,  207,  203,  207,
      207,  207,  207,  207,  207,  207,  207,  207,  207,  207,
       73,  207,  207,  207,  207,  207,  207,    0,    0,    0,
      207,  207,  204,  193,  207,  194,  207,  207,  207,   84,

      207,  207,  207,  207,  207,  207,  207,  207,  207,  207,
      207,  205,  207,  207,   90,    0,    0,  195,  196,  207,
      199,  207,  200,  207,  207,   69,  207,  207,  207,  163,
      207,  164,  179,  207,  197,  198,  207,  207,    0,    0,
      207,  207,  207,  207,   74,  207,   75,  207,  207,  207,
      207,  207,    0,    0,    0,  207,  207,   85,   86,  207,
       76,  207,  207,   77,  207,   91,   92,    0,    0,    0,
      207,  207,  207,  207,  207,  207,    0,    0,    0,  207,
      207,  207,  207,  207,   78,    0,    0,    7,    0,    0,
      201,  202,  207,  207,  207,    0,    8,    0,    0,  207,

      207,  165,    0,    0,   79,   80,    0,    0,    9,    0,
       10,    0
    } ;

static yyconst flex_int32_t yy_ec[256] =
    {   0,
        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
        1,    1,    4,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    2,    5,    1,    6,    1,    7,    8,    1,    9,
       10,   11,   12,    1,   13,   14,   15,   16,   17,   18,
       19,   20,   21,   21,   21,   22,   22,   23,    1,   24,
       25,   26,    1,    1,   27,   28,   29,   30,   31,   32,
       33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
       33,   34,   35,   33,   36,   33,   33,   37,   33,   33,
        1,    1,    1,   38,   39,    1,   40,   41,   42,   43,

       44,   45,   46,   47,   48,   49,   50,   51,   52,   53,
       54,   55,   33,   56,   57,   58,   59,   60,   61,   62,
       63,   64,    1,   65,    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,    1,    1
    } ;

static yyconst flex_int32_t yy_meta[66] =
    {   0,
        1,    2,    3,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    4,    4,    4,    4,    4,
        4,    5,    1,    1,    1,    1,    6,    6,    6,    6,
        5,    5,    7,    7,    7,    7,    8,    1,    7,    6,
        6,    6,    6,    5,    5,    7,    7,    7,    7,    7,
        7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
        7,    8,    7,    7,    1
    } ;

static yyconst flex_int16_t yy_base[824] =
    {   0,
        0,   64,   70,    0, 1185, 1184, 1186, 1189,   65, 1189,
     1160, 1159,  128, 1158,  125,  126,  124, 1157,  140,  189,
      123, 1156,  138,    0,  127,  124,  113,  135,  144,  161,
      176, 1126,  130,  187,  140,  143,  161, 1120,  182,  174,
      202,  199,  211,  212, 1131,  130,  263,  255, 1189,  189,
     1189, 1162,  256, 1189,    0, 1189, 1189,  215, 1189, 1189,
     1189, 1189, 1189, 1189, 1189, 1189, 1189,  248, 1189,  250,
      112,  302,  319, 1189, 1189,    0,    0, 1189, 1151, 1189,
     1189, 1189, 1150,    0, 1189, 1189, 1116, 1121, 1114, 1117,
     1126, 1125, 1111, 1114, 1126,  144, 1120, 1107, 1104, 1118,

     1104, 1101, 1101, 1107,  175,  191, 1101, 1112, 1097, 1103,
     1107, 1108,    0, 1099, 1110,  247, 1109, 1104, 1084,  230,
     1088, 1102, 1092,  241, 1085,  228, 1098, 1100, 1082, 1078,
     1086, 1083, 1072, 1081,  173, 1079, 1085, 1080, 1083, 1071,
     1074,  233,  240,  260, 1084, 1071, 1084,  239, 1077, 1189,
     1189,  307,  301,  323, 1189, 1062, 1075, 1066, 1077,  249,
        0,  368,    0,  379, 1189,  298,  390, 1189,  397,  404,
      291, 1189, 1189, 1072,    0, 1063, 1067, 1077, 1074,  270,
     1057, 1057, 1061,  291, 1072, 1069, 1069, 1067, 1064, 1055,
     1062, 1048, 1046, 1059, 1044, 1061,    0, 1058, 1045, 1053,

     1050, 1054, 1055, 1048, 1045, 1033, 1032, 1046, 1049, 1036,
     1045, 1032, 1039, 1029,  335, 1035, 1038, 1028, 1036, 1024,
     1028, 1019, 1034, 1024, 1015, 1034, 1017, 1015, 1026, 1015,
     1010, 1008, 1022, 1007, 1009, 1006, 1018, 1017, 1020, 1001,
      306, 1010, 1005, 1003, 1013,  991,  339, 1010, 1012, 1000,
      992,  996, 1008,  991,    0,  411,  421,  438, 1189,  451,
      458, 1189, 1189,  986,  997,    0,  994,  344,    0,    0,
      987,  985,  987,  982,  991,  979,  997,  985,  350,    0,
        0,  979,  990,  989,  989,    0,  973,  353,    0,    0,
      975,  357,  983,  984,  974,  968,  967,  968,  967,  967,

      361,  962,    0,    0,  958,  957,  956,  958,  959,  964,
      958,  954,  968,  963,  962,  961,  952,  955,  955,  947,
      950,  945,  954,  959,  944,  957,  947,    0,    0,  954,
      950,    0,  941,  941,  947,  937,  945,  426,  942,    0,
        0,    0,    0,  931,  944,  943,  942,  939,  927,  465,
      475,  939,  941,    0,    0,    0,    0,  927,    0,  927,
        0,  926,  927,  921,  932,    0,    0,    0,  922,    0,
      918,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      929,  481,  928,    0,    0,  926,  922,  918,    0,    0,
        0,  910,  443,  486,  493,  915,  911,  917,  907,  905,

      919,  903,  903,  917,  905,  917,  912,    0,  910,  907,
      911,  894,  896,  903,  909,  904,  903,  890,    0,  892,
      893,    0,    0,    0,    0,  890,  894,    0,  888,  938,
      887,  890,    0,  878,  888,    0,  876,  876,  890,    0,
      892,    0,  497,  901,  900,  899,  869,  868,    0,  886,
      885,  880,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,  868,  882,  868,  865,    0,    0,  871,  870,
        0,    0,  868,  860,    0,    0,    0,    0,    0,    0,
      857,  869,  500,  861,  868,  867,  864,  858,  851,  519,
      867,  852,  847,  861,  859,    0,    0,  851,  871,  870,

      869,  839,  838,  495,  496,    0,  851,  854,  852,  840,
      836,    0,  849,  846,  845,  834,  833,  832,  515,  841,
        0,  854,  853,  852,  822,  821,    0,  836,  822,    0,
      833,  828,  543,  545,  873,  821,  829,    0,    0,    0,
      845,  844,    0,  825,  828,  812,  820,  810,  818,  819,
      819,  818,  803,  539,  816,    0,  817,  805,  804,  800,
      825,  824,  823,  793,  792,    0,  823,  822,    0,  803,
      806,    0,  552,    0,  792,  557, 1189,  580,    0,  590,
      499, 1189,    0,  789,  788,  798,  798,  785,  800,  783,
      798,  793,    0,    0,    0,  806,  805,  804,  774,    0,

      774,    0,    0,    0,  559,  568,  797,  785,  788,  772,
      771,  781,  781,  794,  793,  792,  762,  767,  552,  613,
      363,  775,  763,  761,  760,  771,    0,  774,  770,  772,
      768,  754,  782,  781,    0,  766,  758,  749,  757,  747,
      758,  754,  756,  754,  754,  741,  740,  751,    0,  767,
      766,    0,  751, 1189,  391, 1189,  620,    0,  640,  750,
      732,  749,  748,  731,  723,  731,  721,  729,    0,  726,
      725,  736,  719,  722,  737,  720,  733,  734,  731,  728,
      736,  730,  729,  712,  711,  710,  721,  402,  705,  715,
      699,  698,    0,  725,  698,  723,  696,  700,  699,    0,

      710,  713,  709,  711,  688,  702,  686,  680,  688,  671,
      662,    0,  640,  639,    0,  648,  641,    0,    0,  645,
        0,  644,    0,  650,  649,    0,  625,  633,  623,  650,
      630,    0,    0,  643,    0,    0,  642,  641,  582,  632,
      639,  638,  614,  613,  635,  608,  633,  607,  590,  607,
      586,  585,  611,  380,  526,  545,  544,    0,    0,  538,
        0,  504,  510,    0,  495,    0,    0,  550,  572,  483,
      470,  454,  462,  449,  445,  404,  419,  616,  619,  391,
      387,  404,  392,  290,    0,  617,  642, 1189,  644,  570,
        0,    0,  263,  258,  139,  645, 1189,  643,  618,  107,

       77,    0,   23,  662,    0,    0,  663,  664, 1189,  665,
     1189, 1189,  697,  702,  707,  712,  714,  716,  722,  729,
      734,  739,  744
    } ;

static yyconst flex_int16_t yy_def[824] =
    {   0,
      812,    1,  812,    3,  813,  813,  812,  812,  812,  812,
      812,  812,  812,  812,  812,  812,  812,  812,  812,  812,
      812,  812,  812,  814,  812,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  812,  812,  812,  812,  812,
      812,  812,  812,  812,  815,  812,  812,  812,  812,  812,
      812,  812,  812,  812,  812,  812,  812,  816,  812,  817,
       19,  812,  812,  812,  812,  818,   20,  812,  812,  812,
      812,  812,  812,  814,  812,  812,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,

      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  814,  812,
      812,  812,  812,  812,  812,  812,  812,  812,  812,  812,
      819,  812,  815,  812,  812,  817,  812,  812,  812,  812,
      818,  812,  812,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,

      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      812,  812,  812,  812,  819,  812,  812,  812,  812,  812,
      812,  812,  812,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,

      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  812,  812,  812,  812,  812,
      812,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,

      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  812,  812,
      812,  812,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  812,  812,
      812,  812,  814,  814,  814,  814,  814,  814,  814,  814,

      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  812,  820,  812,  812,  812,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  812,  812,  812,  812,  821,  812,
      812,  812,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,

      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  812,  822,  812,
      821,  812,  812,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  812,  812,  812,  812,  823,  812,  812,
      812,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  823,  812,  812,
      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,

      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  812,  812,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  812,  812,
      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  812,  812,  812,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  812,  812,  812,
      814,  814,  814,  814,  814,  814,  812,  812,  812,  814,
      814,  814,  814,  814,  814,  812,  812,  812,  812,  812,
      814,  814,  814,  814,  814,  812,  812,  812,  812,  814,

      814,  814,  812,  812,  814,  814,  812,  812,  812,  812,
      812,    0,  812,  812,  812,  812,  812,  812,  812,  812,
      812,  812,  812
    } ;

static yyconst flex_int16_t yy_nxt[1255] =
    {   0,
        8,    9,   10,    9,   11,    8,   12,   13,    8,    8,
       14,   15,   16,   17,   18,   19,   20,   20,   20,   20,
       20,   20,    8,   21,   22,   23,   24,   24,   24,   24,
       24,   24,   24,   24,   24,   24,   24,   25,   24,   26,
       27,   28,   29,   30,   31,   32,   33,   34,   24,   24,
       35,   36,   37,   38,   39,   40,   41,   42,   43,   44,
       45,   24,   24,   24,   46,   47,   58,  807,   58,   48,
       49,   50,   51,   50,   49,   49,   49,   49,   49,   49,
       49,   49,   49,   49,   52,   49,   53,   53,   53,   53,
       53,   53,   54,   49,   49,   49,   55,   55,   55,   55,

       55,   55,   55,   55,   55,   55,   55,   49,   55,   55,
       55,   55,   55,   55,   55,   55,   55,   55,   55,   55,
       55,   55,   55,   55,   55,   55,   55,   55,   55,   55,
       55,   55,   55,   55,   49,   61,   64,  806,   66,   68,
       68,   68,   68,   68,   68,   68,   79,   80,  812,   65,
       67,   85,   62,   70,  150,   71,   71,   71,   71,   71,
       71,   72,   82,   83,   86,   87,   90,  805,   91,  110,
       73,   74,   92,  812,   93,   75,   76,  111,   94,  119,
       88,   89,  121,   73,   74,   95,  122,   97,   96,  112,
      160,   98,  160,  120,  151,  183,  184,   99,   75,  802,

      123,   76,   70,  100,   77,   77,   77,   77,   77,   77,
       77,  101,  231,  102,  124,  104,   58,  129,   58,   73,
       74,  126,  103,  105,   78,  193,  106,  130,  232,  107,
      195,  113,   73,   74,  114,  108,  194,  127,  115,  116,
      128,  131,  138,  117,  196,  139,  118,   78,  132,  133,
      160,  146,  160,  134,  140,  147,  154,  155,  142,  135,
      136,  141,  137,  143,  152,  148,   58,  144,  153,  221,
      145,  162,  162,  162,  162,  162,  162,  162,  164,  165,
      167,  168,  213,  222,  239,  240,  248,  241,  218,  249,
      214,  164,  165,  167,  168,  219,  242,  205,  156,  243,

      206,  207,  154,  155,  208,  157,  209,  244,  152,  158,
       58,  801,  153,  269,  159,   70,  800,   72,   72,   72,
       72,   72,   72,   72,  154,  155,  263,  270,  258,  259,
      169,  169,   73,   74,  170,  170,  170,  170,  170,  170,
      170,  258,  259,  795,  156,   73,   74,  274,  275,  263,
      333,  157,  305,  306,  307,  158,  340,  341,  342,  334,
      159,  355,  356,  357,  576,  577,  156,  366,  367,  368,
      374,  375,  376,  157,  378,  379,  380,  158,  389,  390,
      391,  768,  159,  162,  162,  162,  162,  162,  162,  162,
      256,  256,  655,  656,  257,  257,  257,  257,  257,  257,

      257,  260,  260,  655,  656,  261,  261,  261,  261,  261,
      261,  261,  170,  170,  170,  170,  170,  170,  170,  170,
      170,  170,  170,  170,  170,  170,  257,  257,  257,  257,
      257,  257,  257,  769,  794,  262,  257,  257,  257,  257,
      257,  257,  257,  423,  424,  425,  793,  792,  262,  350,
      350,  791,  165,  351,  351,  351,  351,  351,  351,  351,
      454,  455,  456,  786,  785,  165,  261,  261,  261,  261,
      261,  261,  261,  261,  261,  261,  261,  261,  261,  261,
      351,  351,  351,  351,  351,  351,  351,  784,  783,  168,
      351,  351,  351,  351,  351,  351,  351,  444,  445,  446,

      581,  782,  168,  457,  458,  459,  259,  781,  447,  448,
      460,  461,  462,  499,  500,  501,  522,  523,  524,  259,
      490,  546,  548,  780,  502,  503,  779,  525,  526,  547,
      549,  561,  562,  563,  533,  534,  534,  534,  534,  534,
      534,  622,  564,  565,  576,  577,  576,  577,  776,  775,
      774,  768,  623,  655,  656,  596,  597,  598,  576,  577,
      580,  580,  580,  580,  580,  580,  580,  599,  614,  615,
      616,  798,  619,  620,  620,  620,  620,  620,  620,  579,
      617,  576,  577,  753,  773,  638,  772,  771,  658,  770,
      754,  576,  577,  639,  640,  578,  578,  578,  578,  578,

      578,  641,  642,  769,  579,  580,  580,  580,  580,  580,
      580,  580,  753,  658,  655,  656,  777,  787,  796,  754,
      789,  655,  656,  799,  778,  788,  797,  790,  659,  659,
      659,  659,  659,  659,  659,  657,  657,  657,  657,  657,
      657,  655,  656,  787,  798,  789,  796,  767,  766,  765,
      764,  788,  790,  763,  797,  659,  659,  659,  659,  659,
      659,  659,  803,  808,  810,  808,  810,  762,  761,  760,
      804,  809,  811,  809,  811,  759,  758,  757,  756,  755,
      752,  751,  750,  749,  748,  747,  746,  745,  744,  743,
      742,  741,  740,  739,  738,  737,  799,   56,   56,   56,

       56,   56,   56,   56,   56,   84,   84,   84,   84,   84,
      163,  163,  163,  163,  163,   68,   68,  166,  166,  171,
      171,  171,  255,  255,  736,  255,  255,  255,  255,  255,
      578,  578,  578,  735,  734,  733,  578,  621,  621,  621,
      657,  657,  657,  732,  731,  730,  657,  688,  688,  688,
      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,
      689,  687,  686,  685,  684,  683,  682,  681,  680,  679,

      678,  677,  676,  675,  674,  673,  672,  671,  670,  669,
      668,  667,  666,  665,  664,  663,  662,  661,  660,  654,
      653,  652,  651,  650,  649,  648,  647,  646,  645,  644,
      643,  637,  636,  635,  634,  633,  632,  631,  630,  629,
      628,  627,  626,  625,  624,  618,  613,  612,  611,  610,
      609,  608,  607,  606,  605,  604,  603,  602,  601,  600,
      595,  594,  593,  592,  591,  590,  589,  588,  587,  586,
      585,  584,  583,  582,  581,  575,  574,  573,  572,  571,
      570,  569,  568,  567,  566,  560,  559,  558,  557,  556,
      555,  554,  553,  552,  551,  550,  545,  544,  543,  542,

      541,  540,  539,  538,  537,  536,  535,  532,  531,  530,
      529,  528,  527,  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,  453,  452,  451,
      450,  449,  443,  442,  441,  440,  439,  438,  437,  436,
      435,  434,  433,  432,  431,  430,  429,  428,  427,  426,
      422,  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,  388,  387,  386,  385,  384,  383,  382,  381,  377,
      373,  372,  371,  370,  369,  365,  364,  363,  362,  361,
      360,  359,  358,  354,  353,  352,  349,  348,  347,  346,
      345,  344,  343,  339,  338,  337,  336,  335,  332,  331,
      330,  329,  328,  327,  326,  325,  324,  323,  322,  321,
      320,  319,  318,  317,  316,  315,  314,  313,  312,  311,
      310,  309,  308,  304,  303,  302,  301,  300,  299,  298,
      297,  296,  295,  294,  293,  292,  291,  290,  289,  288,

      287,  286,  285,  284,  283,  282,  281,  280,  279,  278,
      277,  276,  273,  272,  271,  268,  267,  266,  265,  264,
      254,  253,  252,  251,  250,  247,  246,  245,  238,  237,
      236,  235,  234,  233,  230,  229,  228,  227,  226,  225,
      224,  223,  220,  217,  216,  215,  212,  211,  210,  204,
      203,  202,  201,  200,  199,  198,  197,  192,  191,  190,
      189,  188,  187,  186,  185,  182,  181,  180,  179,  178,
      177,  176,  175,  174,  173,  172,  161,  149,  125,  109,
       81,   69,   63,   60,   59,  812,   57,   57,    7,  812,
      812,  812,  812,  812,  812,  812,  812,  812,  812,  812,

      812,  812,  812,  812,  812,  812,  812,  812,  812,  812,
      812,  812,  812,  812,  812,  812,  812,  812,  812,  812,
      812,  812,  812,  812,  812,  812,  812,  812,  812,  812,
      812,  812,  812,  812,  812,  812,  812,  812,  812,  812,
      812,  812,  812,  812,  812,  812,  812,  812,  812,  812,
      812,  812,  812,  812
    } ;

static yyconst flex_int16_t yy_chk[1255] =
    {   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,    2,    9,  803,    9,    2,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,

        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,   13,   15,  801,   16,   17,
       17,   17,   17,   17,   17,   17,   21,   21,   71,   15,
       16,   25,   13,   19,   46,   19,   19,   19,   19,   19,
       19,   19,   23,   23,   25,   26,   27,  800,   27,   33,
       19,   19,   27,   71,   28,   19,   19,   33,   28,   35,
       26,   26,   36,   19,   19,   28,   36,   29,   28,   33,
       50,   29,   50,   35,   46,   96,   96,   29,   19,  795,

       37,   19,   20,   29,   20,   20,   20,   20,   20,   20,
       20,   30,  135,   30,   37,   31,   58,   40,   58,   20,
       20,   39,   30,   31,   20,  105,   31,   40,  135,   31,
      106,   34,   20,   20,   34,   31,  105,   39,   34,   34,
       39,   41,   42,   34,  106,   42,   34,   20,   41,   41,
      160,   44,  160,   41,   42,   44,   48,   48,   43,   41,
       41,   42,   41,   43,   47,   44,   47,   43,   47,  126,
       43,   53,   53,   53,   53,   53,   53,   53,   68,   68,
       70,   70,  120,  126,  142,  142,  148,  143,  124,  148,
      120,   68,   68,   70,   70,  124,  143,  116,   48,  144,

      116,  116,  153,  153,  116,   48,  116,  144,  152,   48,
      152,  794,  152,  180,   48,   72,  793,   72,   72,   72,
       72,   72,   72,   72,  154,  154,  171,  180,  166,  166,
       73,   73,   72,   72,   73,   73,   73,   73,   73,   73,
       73,  166,  166,  784,  153,   72,   72,  184,  184,  171,
      241,  153,  215,  215,  215,  153,  247,  247,  247,  241,
      153,  268,  268,  268,  621,  621,  154,  279,  279,  279,
      288,  288,  288,  154,  292,  292,  292,  154,  301,  301,
      301,  754,  154,  162,  162,  162,  162,  162,  162,  162,
      164,  164,  655,  655,  164,  164,  164,  164,  164,  164,

      164,  167,  167,  688,  688,  167,  167,  167,  167,  167,
      167,  167,  169,  169,  169,  169,  169,  169,  169,  170,
      170,  170,  170,  170,  170,  170,  256,  256,  256,  256,
      256,  256,  256,  754,  783,  170,  257,  257,  257,  257,
      257,  257,  257,  338,  338,  338,  782,  781,  170,  258,
      258,  780,  257,  258,  258,  258,  258,  258,  258,  258,
      393,  393,  393,  777,  776,  257,  260,  260,  260,  260,
      260,  260,  260,  261,  261,  261,  261,  261,  261,  261,
      350,  350,  350,  350,  350,  350,  350,  775,  774,  261,
      351,  351,  351,  351,  351,  351,  351,  382,  382,  382,

      581,  773,  261,  394,  394,  394,  351,  772,  382,  382,
      395,  395,  395,  443,  443,  443,  483,  483,  483,  351,
      490,  504,  505,  771,  443,  443,  770,  483,  483,  504,
      505,  519,  519,  519,  490,  490,  490,  490,  490,  490,
      490,  581,  519,  519,  533,  533,  534,  534,  765,  763,
      762,  768,  581,  619,  619,  554,  554,  554,  576,  576,
      534,  534,  534,  534,  534,  534,  534,  554,  573,  573,
      573,  790,  576,  576,  576,  576,  576,  576,  576,  533,
      573,  578,  578,  739,  760,  605,  757,  756,  619,  755,
      739,  580,  580,  605,  606,  578,  578,  578,  578,  578,

      578,  606,  606,  768,  533,  580,  580,  580,  580,  580,
      580,  580,  753,  619,  620,  620,  769,  778,  786,  753,
      779,  657,  657,  790,  769,  778,  786,  779,  620,  620,
      620,  620,  620,  620,  620,  657,  657,  657,  657,  657,
      657,  659,  659,  787,  798,  789,  796,  752,  751,  750,
      749,  787,  789,  748,  796,  659,  659,  659,  659,  659,
      659,  659,  799,  804,  807,  808,  810,  747,  746,  745,
      799,  804,  807,  808,  810,  744,  743,  742,  741,  740,
      738,  737,  734,  731,  730,  729,  728,  727,  725,  724,
      722,  720,  717,  716,  714,  713,  798,  813,  813,  813,

      813,  813,  813,  813,  813,  814,  814,  814,  814,  814,
      815,  815,  815,  815,  815,  816,  816,  817,  817,  818,
      818,  818,  819,  819,  711,  819,  819,  819,  819,  819,
      820,  820,  820,  710,  709,  708,  820,  821,  821,  821,
      822,  822,  822,  707,  706,  705,  822,  823,  823,  823,
      704,  703,  702,  701,  699,  698,  697,  696,  695,  694,
      692,  691,  690,  689,  687,  686,  685,  684,  683,  682,
      681,  680,  679,  678,  677,  676,  675,  674,  673,  672,
      671,  670,  668,  667,  666,  665,  664,  663,  662,  661,
      660,  653,  651,  650,  648,  647,  646,  645,  644,  643,

      642,  641,  640,  639,  638,  637,  636,  634,  633,  632,
      631,  630,  629,  628,  626,  625,  624,  623,  622,  618,
      617,  616,  615,  614,  613,  612,  611,  610,  609,  608,
      607,  601,  599,  598,  597,  596,  592,  591,  590,  589,
      588,  587,  586,  585,  584,  575,  571,  570,  568,  567,
      565,  564,  563,  562,  561,  560,  559,  558,  557,  555,
      553,  552,  551,  550,  549,  548,  547,  546,  545,  544,
      542,  541,  537,  536,  535,  532,  531,  529,  528,  526,
      525,  524,  523,  522,  520,  518,  517,  516,  515,  514,
      513,  511,  510,  509,  508,  507,  503,  502,  501,  500,

      499,  498,  495,  494,  493,  492,  491,  489,  488,  487,
      486,  485,  484,  482,  481,  474,  473,  470,  469,  466,
      465,  464,  463,  452,  451,  450,  448,  447,  446,  445,
      444,  441,  439,  438,  437,  435,  434,  432,  431,  430,
      429,  427,  426,  421,  420,  418,  417,  416,  415,  414,
      413,  412,  411,  410,  409,  407,  406,  405,  404,  403,
      402,  401,  400,  399,  398,  397,  396,  392,  388,  387,
      386,  383,  381,  371,  369,  365,  364,  363,  362,  360,
      358,  353,  352,  349,  348,  347,  346,  345,  344,  339,
      337,  336,  335,  334,  333,  331,  330,  327,  326,  325,

      324,  323,  322,  321,  320,  319,  318,  317,  316,  315,
      314,  313,  312,  311,  310,  309,  308,  307,  306,  305,
      302,  300,  299,  298,  297,  296,  295,  294,  293,  291,
      287,  285,  284,  283,  282,  278,  277,  276,  275,  274,
      273,  272,  271,  267,  265,  264,  254,  253,  252,  251,
      250,  249,  248,  246,  245,  244,  243,  242,  240,  239,
      238,  237,  236,  235,  234,  233,  232,  231,  230,  229,
      228,  227,  226,  225,  224,  223,  222,  221,  220,  219,
      218,  217,  216,  214,  213,  212,  211,  210,  209,  208,
      207,  206,  205,  204,  203,  202,  201,  200,  199,  198,

      196,  195,  194,  193,  192,  191,  190,  189,  188,  187,
      186,  185,  183,  182,  181,  179,  178,  177,  176,  174,
      159,  158,  157,  156,  149,  147,  146,  145,  141,  140,
      139,  138,  137,  136,  134,  133,  132,  131,  130,  129,
      128,  127,  125,  123,  122,  121,  119,  118,  117,  115,
      114,  112,  111,  110,  109,  108,  107,  104,  103,  102,
      101,  100,   99,   98,   97,   95,   94,   93,   92,   91,
       90,   89,   88,   87,   83,   79,   52,   45,   38,   32,
       22,   18,   14,   12,   11,    7,    6,    5,  812,  812,
      812,  812,  812,  812,  812,  812,  812,  812,  812,  812,

      812,  812,  812,  812,  812,  812,  812,  812,  812,  812,
      812,  812,  812,  812,  812,  812,  812,  812,  812,  812,
      812,  812,  812,  812,  812,  812,  812,  812,  812,  812,
      812,  812,  812,  812,  812,  812,  812,  812,  812,  812,
      812,  812,  812,  812,  812,  812,  812,  812,  812,  812,
      812,  812,  812,  812
    } ;

/* 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
#line 1 "glsl_lexer.lpp"
#line 2 "glsl_lexer.lpp"
/*
 * Copyright © 2008, 2009 Intel Corporation
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice (including the next
 * paragraph) shall be included in all copies or substantial portions of the
 * Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 * DEALINGS IN THE SOFTWARE.
 */
#include <ctype.h>
#include "strtod.h"
#include "ast.h"
#include "glsl_parser_extras.h"
#include "glsl_parser.h"

#define YY_USER_ACTION						\
   do {								\
      yylloc->source = 0;					\
      yylloc->first_column = yycolumn + 1;			\
      yylloc->first_line = yylineno + 1;			\
      yycolumn += yyleng;					\
   } while(0);

#define YY_USER_INIT yylineno = 0; yycolumn = 0;

#define IS_UINT (yytext[yyleng - 1] == 'u' || yytext[yyleng - 1] == 'U')

/* A macro for handling reserved words and keywords across language versions.
 *
 * Certain words start out as identifiers, become reserved words in
 * later language revisions, and finally become language keywords.
 *
 * For example, consider the following lexer rule:
 * samplerBuffer       KEYWORD(130, 140, SAMPLERBUFFER)
 *
 * This means that "samplerBuffer" will be treated as:
 * - a keyword (SAMPLERBUFFER token)         ...in GLSL >= 1.40
 * - a reserved word - error                 ...in GLSL >= 1.30
 * - an identifier                           ...in GLSL <  1.30
 */
#define KEYWORD(reserved_version, allowed_version, token)		\
   do {									\
      if (yyextra->language_version >= allowed_version) {		\
	 return token;							\
      } else if (yyextra->language_version >= reserved_version) {	\
	 _mesa_glsl_error(yylloc, yyextra,				\
			  "Illegal use of reserved word `%s'", yytext);	\
	 return ERROR_TOK;						\
      } else {								\
	 yylval->identifier = strdup(yytext);				\
	 return IDENTIFIER;						\
      }									\
   } while (0)

/* The ES macro can be used in KEYWORD checks:
 *
 *    word      KEYWORD(110 || ES, 400, TOKEN)
 * ...means the word is reserved in GLSL ES 1.00, while
 *
 *    word      KEYWORD(110, 130 || ES, TOKEN)
 * ...means the word is a legal keyword in GLSL ES 1.00.
 */
#define ES yyextra->es_shader

#line 1059 "glsl_lexer.cpp"

#define INITIAL 0
#define PP 1
#define PRAGMA 2

#define YY_EXTRA_TYPE struct _mesa_glsl_parse_state *

/* 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 _mesa_glsl_lex_init (yyscan_t* scanner);

int _mesa_glsl_lex_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 _mesa_glsl_lex_destroy (yyscan_t yyscanner );

int _mesa_glsl_get_debug (yyscan_t yyscanner );

void _mesa_glsl_set_debug (int debug_flag ,yyscan_t yyscanner );

YY_EXTRA_TYPE _mesa_glsl_get_extra (yyscan_t yyscanner );

void _mesa_glsl_set_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner );

FILE *_mesa_glsl_get_in (yyscan_t yyscanner );

void _mesa_glsl_set_in  (FILE * in_str ,yyscan_t yyscanner );

FILE *_mesa_glsl_get_out (yyscan_t yyscanner );

void _mesa_glsl_set_out  (FILE * out_str ,yyscan_t yyscanner );

int _mesa_glsl_get_leng (yyscan_t yyscanner );

char *_mesa_glsl_get_text (yyscan_t yyscanner );

int _mesa_glsl_get_lineno (yyscan_t yyscanner );

void _mesa_glsl_set_lineno (int line_number ,yyscan_t yyscanner );

YYSTYPE * _mesa_glsl_get_lval (yyscan_t yyscanner );

void _mesa_glsl_set_lval (YYSTYPE * yylval_param ,yyscan_t yyscanner );

       YYLTYPE *_mesa_glsl_get_lloc (yyscan_t yyscanner );
    
        void _mesa_glsl_set_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 _mesa_glsl_wrap (yyscan_t yyscanner );
#else
extern int _mesa_glsl_wrap (yyscan_t yyscanner );
#endif
#endif

#ifndef yytext_ptr
static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner);
#endif

#ifdef YY_NEED_STRLEN
static int yy_flex_strlen (yyconst 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
#define YY_READ_BUF_SIZE 8192
#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, 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 = '*'; \
		unsigned 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 = fread(buf, 1, 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 _mesa_glsl_lex \
               (YYSTYPE * yylval_param,YYLTYPE * yylloc_param ,yyscan_t yyscanner);

#define YY_DECL int _mesa_glsl_lex \
               (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 break;
#endif

#define YY_RULE_SETUP \
	if ( yyleng > 0 ) \
		YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \
				(yytext[yyleng - 1] == '\n'); \
	YY_USER_ACTION

/** The main scanner function which does all the work.
 */
YY_DECL
{
	register yy_state_type yy_current_state;
	register char *yy_cp, *yy_bp;
	register int yy_act;
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;

#line 95 "glsl_lexer.lpp"


#line 1296 "glsl_lexer.cpp"

    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 ) {
			_mesa_glsl_ensure_buffer_stack (yyscanner);
			YY_CURRENT_BUFFER_LVALUE =
				_mesa_glsl__create_buffer(yyin,YY_BUF_SIZE ,yyscanner);
		}

		_mesa_glsl__load_buffer_state(yyscanner );
		}

	while ( 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_current_state += YY_AT_BOL();
yy_match:
		do
			{
			register 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 >= 813 )
					yy_c = yy_meta[(unsigned int) yy_c];
				}
			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
			++yy_cp;
			}
		while ( yy_current_state != 812 );
		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;

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
#line 97 "glsl_lexer.lpp"
;
	YY_BREAK
/* Preprocessor tokens. */ 
case 2:
*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
yyg->yy_c_buf_p = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
#line 100 "glsl_lexer.lpp"
;
	YY_BREAK
case 3:
YY_RULE_SETUP
#line 101 "glsl_lexer.lpp"
{ BEGIN PP; return VERSION; }
	YY_BREAK
case 4:
YY_RULE_SETUP
#line 102 "glsl_lexer.lpp"
{ BEGIN PP; return EXTENSION; }
	YY_BREAK
case 5:
*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
yyg->yy_c_buf_p = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
#line 103 "glsl_lexer.lpp"
{
				   /* Eat characters until the first digit is
				    * encountered
				    */
				   char *ptr = yytext;
				   while (!isdigit(*ptr))
				      ptr++;

				   /* Subtract one from the line number because
				    * yylineno is zero-based instead of
				    * one-based.
				    */
				   yylineno = strtol(ptr, &ptr, 0) - 1;
				   yylloc->source = strtol(ptr, NULL, 0);
				}
	YY_BREAK
case 6:
*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
yyg->yy_c_buf_p = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
#line 118 "glsl_lexer.lpp"
{
				   /* Eat characters until the first digit is
				    * encountered
				    */
				   char *ptr = yytext;
				   while (!isdigit(*ptr))
				      ptr++;

				   /* Subtract one from the line number because
				    * yylineno is zero-based instead of
				    * one-based.
				    */
				   yylineno = strtol(ptr, &ptr, 0) - 1;
				}
	YY_BREAK
case 7:
YY_RULE_SETUP
#line 132 "glsl_lexer.lpp"
{
				  BEGIN PP;
				  return PRAGMA_DEBUG_ON;
				}
	YY_BREAK
case 8:
YY_RULE_SETUP
#line 136 "glsl_lexer.lpp"
{
				  BEGIN PP;
				  return PRAGMA_DEBUG_OFF;
				}
	YY_BREAK
case 9:
YY_RULE_SETUP
#line 140 "glsl_lexer.lpp"
{
				  BEGIN PP;
				  return PRAGMA_OPTIMIZE_ON;
				}
	YY_BREAK
case 10:
YY_RULE_SETUP
#line 144 "glsl_lexer.lpp"
{
				  BEGIN PP;
				  return PRAGMA_OPTIMIZE_OFF;
				}
	YY_BREAK
case 11:
YY_RULE_SETUP
#line 148 "glsl_lexer.lpp"
{ BEGIN PRAGMA; }
	YY_BREAK
case 12:
/* rule 12 can match eol */
YY_RULE_SETUP
#line 150 "glsl_lexer.lpp"
{ BEGIN 0; yylineno++; yycolumn = 0; }
	YY_BREAK
case 13:
YY_RULE_SETUP
#line 151 "glsl_lexer.lpp"
{ }
	YY_BREAK
case 14:
YY_RULE_SETUP
#line 153 "glsl_lexer.lpp"
{ }
	YY_BREAK
case 15:
YY_RULE_SETUP
#line 154 "glsl_lexer.lpp"
{ }
	YY_BREAK
case 16:
YY_RULE_SETUP
#line 155 "glsl_lexer.lpp"
return COLON;
	YY_BREAK
case 17:
YY_RULE_SETUP
#line 156 "glsl_lexer.lpp"
{
				   yylval->identifier = strdup(yytext);
				   return IDENTIFIER;
				}
	YY_BREAK
case 18:
YY_RULE_SETUP
#line 160 "glsl_lexer.lpp"
{
				    yylval->n = strtol(yytext, NULL, 10);
				    return INTCONSTANT;
				}
	YY_BREAK
case 19:
/* rule 19 can match eol */
YY_RULE_SETUP
#line 164 "glsl_lexer.lpp"
{ BEGIN 0; yylineno++; yycolumn = 0; return EOL; }
	YY_BREAK
case 20:
/* rule 20 can match eol */
YY_RULE_SETUP
#line 166 "glsl_lexer.lpp"
{ yylineno++; yycolumn = 0; }
	YY_BREAK
case 21:
YY_RULE_SETUP
#line 168 "glsl_lexer.lpp"
return ATTRIBUTE;
	YY_BREAK
case 22:
YY_RULE_SETUP
#line 169 "glsl_lexer.lpp"
return CONST_TOK;
	YY_BREAK
case 23:
YY_RULE_SETUP
#line 170 "glsl_lexer.lpp"
return BOOL_TOK;
	YY_BREAK
case 24:
YY_RULE_SETUP
#line 171 "glsl_lexer.lpp"
return FLOAT_TOK;
	YY_BREAK
case 25:
YY_RULE_SETUP
#line 172 "glsl_lexer.lpp"
return INT_TOK;
	YY_BREAK
case 26:
YY_RULE_SETUP
#line 173 "glsl_lexer.lpp"
KEYWORD(130, 130, UINT_TOK);
	YY_BREAK
case 27:
YY_RULE_SETUP
#line 175 "glsl_lexer.lpp"
return BREAK;
	YY_BREAK
case 28:
YY_RULE_SETUP
#line 176 "glsl_lexer.lpp"
return CONTINUE;
	YY_BREAK
case 29:
YY_RULE_SETUP
#line 177 "glsl_lexer.lpp"
return DO;
	YY_BREAK
case 30:
YY_RULE_SETUP
#line 178 "glsl_lexer.lpp"
return WHILE;
	YY_BREAK
case 31:
YY_RULE_SETUP
#line 179 "glsl_lexer.lpp"
return ELSE;
	YY_BREAK
case 32:
YY_RULE_SETUP
#line 180 "glsl_lexer.lpp"
return FOR;
	YY_BREAK
case 33:
YY_RULE_SETUP
#line 181 "glsl_lexer.lpp"
return IF;
	YY_BREAK
case 34:
YY_RULE_SETUP
#line 182 "glsl_lexer.lpp"
return DISCARD;
	YY_BREAK
case 35:
YY_RULE_SETUP
#line 183 "glsl_lexer.lpp"
return RETURN;
	YY_BREAK
case 36:
YY_RULE_SETUP
#line 185 "glsl_lexer.lpp"
return BVEC2;
	YY_BREAK
case 37:
YY_RULE_SETUP
#line 186 "glsl_lexer.lpp"
return BVEC3;
	YY_BREAK
case 38:
YY_RULE_SETUP
#line 187 "glsl_lexer.lpp"
return BVEC4;
	YY_BREAK
case 39:
YY_RULE_SETUP
#line 188 "glsl_lexer.lpp"
return IVEC2;
	YY_BREAK
case 40:
YY_RULE_SETUP
#line 189 "glsl_lexer.lpp"
return IVEC3;
	YY_BREAK
case 41:
YY_RULE_SETUP
#line 190 "glsl_lexer.lpp"
return IVEC4;
	YY_BREAK
case 42:
YY_RULE_SETUP
#line 191 "glsl_lexer.lpp"
KEYWORD(130, 130, UVEC2);
	YY_BREAK
case 43:
YY_RULE_SETUP
#line 192 "glsl_lexer.lpp"
KEYWORD(130, 130, UVEC3);
	YY_BREAK
case 44:
YY_RULE_SETUP
#line 193 "glsl_lexer.lpp"
KEYWORD(130, 130, UVEC4);
	YY_BREAK
case 45:
YY_RULE_SETUP
#line 194 "glsl_lexer.lpp"
return VEC2;
	YY_BREAK
case 46:
YY_RULE_SETUP
#line 195 "glsl_lexer.lpp"
return VEC3;
	YY_BREAK
case 47:
YY_RULE_SETUP
#line 196 "glsl_lexer.lpp"
return VEC4;
	YY_BREAK
case 48:
YY_RULE_SETUP
#line 197 "glsl_lexer.lpp"
return MAT2X2;
	YY_BREAK
case 49:
YY_RULE_SETUP
#line 198 "glsl_lexer.lpp"
return MAT3X3;
	YY_BREAK
case 50:
YY_RULE_SETUP
#line 199 "glsl_lexer.lpp"
return MAT4X4;
	YY_BREAK
case 51:
YY_RULE_SETUP
#line 200 "glsl_lexer.lpp"
KEYWORD(120, 120, MAT2X2);
	YY_BREAK
case 52:
YY_RULE_SETUP
#line 201 "glsl_lexer.lpp"
KEYWORD(120, 120, MAT2X3);
	YY_BREAK
case 53:
YY_RULE_SETUP
#line 202 "glsl_lexer.lpp"
KEYWORD(120, 120, MAT2X4);
	YY_BREAK
case 54:
YY_RULE_SETUP
#line 203 "glsl_lexer.lpp"
KEYWORD(120, 120, MAT3X2);
	YY_BREAK
case 55:
YY_RULE_SETUP
#line 204 "glsl_lexer.lpp"
KEYWORD(120, 120, MAT3X3);
	YY_BREAK
case 56:
YY_RULE_SETUP
#line 205 "glsl_lexer.lpp"
KEYWORD(120, 120, MAT3X4);
	YY_BREAK
case 57:
YY_RULE_SETUP
#line 206 "glsl_lexer.lpp"
KEYWORD(120, 120, MAT4X2);
	YY_BREAK
case 58:
YY_RULE_SETUP
#line 207 "glsl_lexer.lpp"
KEYWORD(120, 120, MAT4X3);
	YY_BREAK
case 59:
YY_RULE_SETUP
#line 208 "glsl_lexer.lpp"
KEYWORD(120, 120, MAT4X4);
	YY_BREAK
case 60:
YY_RULE_SETUP
#line 210 "glsl_lexer.lpp"
return IN_TOK;
	YY_BREAK
case 61:
YY_RULE_SETUP
#line 211 "glsl_lexer.lpp"
return OUT_TOK;
	YY_BREAK
case 62:
YY_RULE_SETUP
#line 212 "glsl_lexer.lpp"
return INOUT_TOK;
	YY_BREAK
case 63:
YY_RULE_SETUP
#line 213 "glsl_lexer.lpp"
return UNIFORM;
	YY_BREAK
case 64:
YY_RULE_SETUP
#line 214 "glsl_lexer.lpp"
return VARYING;
	YY_BREAK
case 65:
YY_RULE_SETUP
#line 215 "glsl_lexer.lpp"
KEYWORD(120, 120, CENTROID);
	YY_BREAK
case 66:
YY_RULE_SETUP
#line 216 "glsl_lexer.lpp"
KEYWORD(120 || ES, 120 || ES, INVARIANT);
	YY_BREAK
case 67:
YY_RULE_SETUP
#line 217 "glsl_lexer.lpp"
KEYWORD(130 || ES, 130, FLAT);
	YY_BREAK
case 68:
YY_RULE_SETUP
#line 218 "glsl_lexer.lpp"
KEYWORD(130, 130, SMOOTH);
	YY_BREAK
case 69:
YY_RULE_SETUP
#line 219 "glsl_lexer.lpp"
KEYWORD(130, 130, NOPERSPECTIVE);
	YY_BREAK
case 70:
YY_RULE_SETUP
#line 221 "glsl_lexer.lpp"
return SAMPLER1D;
	YY_BREAK
case 71:
YY_RULE_SETUP
#line 222 "glsl_lexer.lpp"
return SAMPLER2D;
	YY_BREAK
case 72:
YY_RULE_SETUP
#line 223 "glsl_lexer.lpp"
return SAMPLER3D;
	YY_BREAK
case 73:
YY_RULE_SETUP
#line 224 "glsl_lexer.lpp"
return SAMPLERCUBE;
	YY_BREAK
case 74:
YY_RULE_SETUP
#line 225 "glsl_lexer.lpp"
KEYWORD(130, 130, SAMPLER1DARRAY);
	YY_BREAK
case 75:
YY_RULE_SETUP
#line 226 "glsl_lexer.lpp"
KEYWORD(130, 130, SAMPLER2DARRAY);
	YY_BREAK
case 76:
YY_RULE_SETUP
#line 227 "glsl_lexer.lpp"
return SAMPLER1DSHADOW;
	YY_BREAK
case 77:
YY_RULE_SETUP
#line 228 "glsl_lexer.lpp"
return SAMPLER2DSHADOW;
	YY_BREAK
case 78:
YY_RULE_SETUP
#line 229 "glsl_lexer.lpp"
KEYWORD(130, 130, SAMPLERCUBESHADOW);
	YY_BREAK
case 79:
YY_RULE_SETUP
#line 230 "glsl_lexer.lpp"
KEYWORD(130, 130, SAMPLER1DARRAYSHADOW);
	YY_BREAK
case 80:
YY_RULE_SETUP
#line 231 "glsl_lexer.lpp"
KEYWORD(130, 130, SAMPLER2DARRAYSHADOW);
	YY_BREAK
case 81:
YY_RULE_SETUP
#line 232 "glsl_lexer.lpp"
KEYWORD(130, 130, ISAMPLER1D);
	YY_BREAK
case 82:
YY_RULE_SETUP
#line 233 "glsl_lexer.lpp"
KEYWORD(130, 130, ISAMPLER2D);
	YY_BREAK
case 83:
YY_RULE_SETUP
#line 234 "glsl_lexer.lpp"
KEYWORD(130, 130, ISAMPLER3D);
	YY_BREAK
case 84:
YY_RULE_SETUP
#line 235 "glsl_lexer.lpp"
KEYWORD(130, 130, ISAMPLERCUBE);
	YY_BREAK
case 85:
YY_RULE_SETUP
#line 236 "glsl_lexer.lpp"
KEYWORD(130, 130, ISAMPLER1DARRAY);
	YY_BREAK
case 86:
YY_RULE_SETUP
#line 237 "glsl_lexer.lpp"
KEYWORD(130, 130, ISAMPLER2DARRAY);
	YY_BREAK
case 87:
YY_RULE_SETUP
#line 238 "glsl_lexer.lpp"
KEYWORD(130, 130, USAMPLER1D);
	YY_BREAK
case 88:
YY_RULE_SETUP
#line 239 "glsl_lexer.lpp"
KEYWORD(130, 130, USAMPLER2D);
	YY_BREAK
case 89:
YY_RULE_SETUP
#line 240 "glsl_lexer.lpp"
KEYWORD(130, 130, USAMPLER3D);
	YY_BREAK
case 90:
YY_RULE_SETUP
#line 241 "glsl_lexer.lpp"
KEYWORD(130, 130, USAMPLERCUBE);
	YY_BREAK
case 91:
YY_RULE_SETUP
#line 242 "glsl_lexer.lpp"
KEYWORD(130, 130, USAMPLER1DARRAY);
	YY_BREAK
case 92:
YY_RULE_SETUP
#line 243 "glsl_lexer.lpp"
KEYWORD(130, 130, USAMPLER2DARRAY);
	YY_BREAK
case 93:
YY_RULE_SETUP
#line 246 "glsl_lexer.lpp"
return STRUCT;
	YY_BREAK
case 94:
YY_RULE_SETUP
#line 247 "glsl_lexer.lpp"
return VOID_TOK;
	YY_BREAK
case 95:
YY_RULE_SETUP
#line 249 "glsl_lexer.lpp"
{
		  if ((yyextra->language_version >= 140)
		      || yyextra->ARB_explicit_attrib_location_enable
		      || (yyextra->ARB_fragment_coord_conventions_enable)){
		      return LAYOUT_TOK;
		   } else {
		      yylval->identifier = strdup(yytext);
		      return IDENTIFIER;
		   }
		}
	YY_BREAK
case 96:
YY_RULE_SETUP
#line 260 "glsl_lexer.lpp"
return INC_OP;
	YY_BREAK
case 97:
YY_RULE_SETUP
#line 261 "glsl_lexer.lpp"
return DEC_OP;
	YY_BREAK
case 98:
YY_RULE_SETUP
#line 262 "glsl_lexer.lpp"
return LE_OP;
	YY_BREAK
case 99:
YY_RULE_SETUP
#line 263 "glsl_lexer.lpp"
return GE_OP;
	YY_BREAK
case 100:
YY_RULE_SETUP
#line 264 "glsl_lexer.lpp"
return EQ_OP;
	YY_BREAK
case 101:
YY_RULE_SETUP
#line 265 "glsl_lexer.lpp"
return NE_OP;
	YY_BREAK
case 102:
YY_RULE_SETUP
#line 266 "glsl_lexer.lpp"
return AND_OP;
	YY_BREAK
case 103:
YY_RULE_SETUP
#line 267 "glsl_lexer.lpp"
return OR_OP;
	YY_BREAK
case 104:
YY_RULE_SETUP
#line 268 "glsl_lexer.lpp"
return XOR_OP;
	YY_BREAK
case 105:
YY_RULE_SETUP
#line 269 "glsl_lexer.lpp"
return LEFT_OP;
	YY_BREAK
case 106:
YY_RULE_SETUP
#line 270 "glsl_lexer.lpp"
return RIGHT_OP;
	YY_BREAK
case 107:
YY_RULE_SETUP
#line 272 "glsl_lexer.lpp"
return MUL_ASSIGN;
	YY_BREAK
case 108:
YY_RULE_SETUP
#line 273 "glsl_lexer.lpp"
return DIV_ASSIGN;
	YY_BREAK
case 109:
YY_RULE_SETUP
#line 274 "glsl_lexer.lpp"
return ADD_ASSIGN;
	YY_BREAK
case 110:
YY_RULE_SETUP
#line 275 "glsl_lexer.lpp"
return MOD_ASSIGN;
	YY_BREAK
case 111:
YY_RULE_SETUP
#line 276 "glsl_lexer.lpp"
return LEFT_ASSIGN;
	YY_BREAK
case 112:
YY_RULE_SETUP
#line 277 "glsl_lexer.lpp"
return RIGHT_ASSIGN;
	YY_BREAK
case 113:
YY_RULE_SETUP
#line 278 "glsl_lexer.lpp"
return AND_ASSIGN;
	YY_BREAK
case 114:
YY_RULE_SETUP
#line 279 "glsl_lexer.lpp"
return XOR_ASSIGN;
	YY_BREAK
case 115:
YY_RULE_SETUP
#line 280 "glsl_lexer.lpp"
return OR_ASSIGN;
	YY_BREAK
case 116:
YY_RULE_SETUP
#line 281 "glsl_lexer.lpp"
return SUB_ASSIGN;
	YY_BREAK
case 117:
YY_RULE_SETUP
#line 283 "glsl_lexer.lpp"
{
			    yylval->n = strtol(yytext, NULL, 10);
			    return IS_UINT ? UINTCONSTANT : INTCONSTANT;
			}
	YY_BREAK
case 118:
YY_RULE_SETUP
#line 287 "glsl_lexer.lpp"
{
			    yylval->n = strtol(yytext + 2, NULL, 16);
			    return IS_UINT ? UINTCONSTANT : INTCONSTANT;
			}
	YY_BREAK
case 119:
YY_RULE_SETUP
#line 291 "glsl_lexer.lpp"
{
			    yylval->n = strtol(yytext, NULL, 8);
			    return IS_UINT ? UINTCONSTANT : INTCONSTANT;
			}
	YY_BREAK
case 120:
YY_RULE_SETUP
#line 296 "glsl_lexer.lpp"
{
			    yylval->real = glsl_strtod(yytext, NULL);
			    return FLOATCONSTANT;
			}
	YY_BREAK
case 121:
YY_RULE_SETUP
#line 300 "glsl_lexer.lpp"
{
			    yylval->real = glsl_strtod(yytext, NULL);
			    return FLOATCONSTANT;
			}
	YY_BREAK
case 122:
YY_RULE_SETUP
#line 304 "glsl_lexer.lpp"
{
			    yylval->real = glsl_strtod(yytext, NULL);
			    return FLOATCONSTANT;
			}
	YY_BREAK
case 123:
YY_RULE_SETUP
#line 308 "glsl_lexer.lpp"
{
			    yylval->real = glsl_strtod(yytext, NULL);
			    return FLOATCONSTANT;
			}
	YY_BREAK
case 124:
YY_RULE_SETUP
#line 312 "glsl_lexer.lpp"
{
			    yylval->real = glsl_strtod(yytext, NULL);
			    return FLOATCONSTANT;
			}
	YY_BREAK
case 125:
YY_RULE_SETUP
#line 317 "glsl_lexer.lpp"
{
			    yylval->n = 1;
			    return BOOLCONSTANT;
			}
	YY_BREAK
case 126:
YY_RULE_SETUP
#line 321 "glsl_lexer.lpp"
{
			    yylval->n = 0;
			    return BOOLCONSTANT;
			}
	YY_BREAK
/* Reserved words in GLSL 1.10. */
case 127:
YY_RULE_SETUP
#line 328 "glsl_lexer.lpp"
KEYWORD(110 || ES, 999, ASM);
	YY_BREAK
case 128:
YY_RULE_SETUP
#line 329 "glsl_lexer.lpp"
KEYWORD(110 || ES, 999, CLASS);
	YY_BREAK
case 129:
YY_RULE_SETUP
#line 330 "glsl_lexer.lpp"
KEYWORD(110 || ES, 999, UNION);
	YY_BREAK
case 130:
YY_RULE_SETUP
#line 331 "glsl_lexer.lpp"
KEYWORD(110 || ES, 999, ENUM);
	YY_BREAK
case 131:
YY_RULE_SETUP
#line 332 "glsl_lexer.lpp"
KEYWORD(110 || ES, 999, TYPEDEF);
	YY_BREAK
case 132:
YY_RULE_SETUP
#line 333 "glsl_lexer.lpp"
KEYWORD(110 || ES, 999, TEMPLATE);
	YY_BREAK
case 133:
YY_RULE_SETUP
#line 334 "glsl_lexer.lpp"
KEYWORD(110 || ES, 999, THIS);
	YY_BREAK
case 134:
YY_RULE_SETUP
#line 335 "glsl_lexer.lpp"
KEYWORD(110 || ES, 999, PACKED_TOK);
	YY_BREAK
case 135:
YY_RULE_SETUP
#line 336 "glsl_lexer.lpp"
KEYWORD(110 || ES, 999, GOTO);
	YY_BREAK
case 136:
YY_RULE_SETUP
#line 337 "glsl_lexer.lpp"
KEYWORD(110 || ES, 130, SWITCH);
	YY_BREAK
case 137:
YY_RULE_SETUP
#line 338 "glsl_lexer.lpp"
KEYWORD(110 || ES, 130, DEFAULT);
	YY_BREAK
case 138:
YY_RULE_SETUP
#line 339 "glsl_lexer.lpp"
KEYWORD(110 || ES, 999, INLINE_TOK);
	YY_BREAK
case 139:
YY_RULE_SETUP
#line 340 "glsl_lexer.lpp"
KEYWORD(110 || ES, 999, NOINLINE);
	YY_BREAK
case 140:
YY_RULE_SETUP
#line 341 "glsl_lexer.lpp"
KEYWORD(110 || ES, 999, VOLATILE);
	YY_BREAK
case 141:
YY_RULE_SETUP
#line 342 "glsl_lexer.lpp"
KEYWORD(110 || ES, 999, PUBLIC_TOK);
	YY_BREAK
case 142:
YY_RULE_SETUP
#line 343 "glsl_lexer.lpp"
KEYWORD(110 || ES, 999, STATIC);
	YY_BREAK
case 143:
YY_RULE_SETUP
#line 344 "glsl_lexer.lpp"
KEYWORD(110 || ES, 999, EXTERN);
	YY_BREAK
case 144:
YY_RULE_SETUP
#line 345 "glsl_lexer.lpp"
KEYWORD(110 || ES, 999, EXTERNAL);
	YY_BREAK
case 145:
YY_RULE_SETUP
#line 346 "glsl_lexer.lpp"
KEYWORD(110 || ES, 999, INTERFACE);
	YY_BREAK
case 146:
YY_RULE_SETUP
#line 347 "glsl_lexer.lpp"
KEYWORD(110 || ES, 999, LONG_TOK);
	YY_BREAK
case 147:
YY_RULE_SETUP
#line 348 "glsl_lexer.lpp"
KEYWORD(110 || ES, 999, SHORT_TOK);
	YY_BREAK
case 148:
YY_RULE_SETUP
#line 349 "glsl_lexer.lpp"
KEYWORD(110 || ES, 400, DOUBLE_TOK);
	YY_BREAK
case 149:
YY_RULE_SETUP
#line 350 "glsl_lexer.lpp"
KEYWORD(110 || ES, 999, HALF);
	YY_BREAK
case 150:
YY_RULE_SETUP
#line 351 "glsl_lexer.lpp"
KEYWORD(110 || ES, 999, FIXED_TOK);
	YY_BREAK
case 151:
YY_RULE_SETUP
#line 352 "glsl_lexer.lpp"
KEYWORD(110 || ES, 999, UNSIGNED);
	YY_BREAK
case 152:
YY_RULE_SETUP
#line 353 "glsl_lexer.lpp"
KEYWORD(110 || ES, 999, INPUT_TOK);
	YY_BREAK
case 153:
YY_RULE_SETUP
#line 354 "glsl_lexer.lpp"
KEYWORD(110 || ES, 999, OUTPUT);
	YY_BREAK
case 154:
YY_RULE_SETUP
#line 355 "glsl_lexer.lpp"
KEYWORD(110 || ES, 999, HVEC2);
	YY_BREAK
case 155:
YY_RULE_SETUP
#line 356 "glsl_lexer.lpp"
KEYWORD(110 || ES, 999, HVEC3);
	YY_BREAK
case 156:
YY_RULE_SETUP
#line 357 "glsl_lexer.lpp"
KEYWORD(110 || ES, 999, HVEC4);
	YY_BREAK
case 157:
YY_RULE_SETUP
#line 358 "glsl_lexer.lpp"
KEYWORD(110 || ES, 400, DVEC2);
	YY_BREAK
case 158:
YY_RULE_SETUP
#line 359 "glsl_lexer.lpp"
KEYWORD(110 || ES, 400, DVEC3);
	YY_BREAK
case 159:
YY_RULE_SETUP
#line 360 "glsl_lexer.lpp"
KEYWORD(110 || ES, 400, DVEC4);
	YY_BREAK
case 160:
YY_RULE_SETUP
#line 361 "glsl_lexer.lpp"
KEYWORD(110 || ES, 999, FVEC2);
	YY_BREAK
case 161:
YY_RULE_SETUP
#line 362 "glsl_lexer.lpp"
KEYWORD(110 || ES, 999, FVEC3);
	YY_BREAK
case 162:
YY_RULE_SETUP
#line 363 "glsl_lexer.lpp"
KEYWORD(110 || ES, 999, FVEC4);
	YY_BREAK
case 163:
YY_RULE_SETUP
#line 364 "glsl_lexer.lpp"
return SAMPLER2DRECT;
	YY_BREAK
case 164:
YY_RULE_SETUP
#line 365 "glsl_lexer.lpp"
KEYWORD(110 || ES, 999, SAMPLER3DRECT);
	YY_BREAK
case 165:
YY_RULE_SETUP
#line 366 "glsl_lexer.lpp"
return SAMPLER2DRECTSHADOW;
	YY_BREAK
case 166:
YY_RULE_SETUP
#line 367 "glsl_lexer.lpp"
KEYWORD(110 || ES, 999, SIZEOF);
	YY_BREAK
case 167:
YY_RULE_SETUP
#line 368 "glsl_lexer.lpp"
KEYWORD(110 || ES, 999, CAST);
	YY_BREAK
case 168:
YY_RULE_SETUP
#line 369 "glsl_lexer.lpp"
KEYWORD(110 || ES, 999, NAMESPACE);
	YY_BREAK
case 169:
YY_RULE_SETUP
#line 370 "glsl_lexer.lpp"
KEYWORD(110 || ES, 999, USING);
	YY_BREAK
/* Additional reserved words in GLSL 1.20. */
case 170:
YY_RULE_SETUP
#line 373 "glsl_lexer.lpp"
KEYWORD(120, 130 || ES, LOWP);
	YY_BREAK
case 171:
YY_RULE_SETUP
#line 374 "glsl_lexer.lpp"
KEYWORD(120, 130 || ES, MEDIUMP);
	YY_BREAK
case 172:
YY_RULE_SETUP
#line 375 "glsl_lexer.lpp"
KEYWORD(120, 130 || ES, HIGHP);
	YY_BREAK
case 173:
YY_RULE_SETUP
#line 376 "glsl_lexer.lpp"
KEYWORD(120, 130 || ES, PRECISION);
	YY_BREAK
/* Additional reserved words in GLSL 1.30. */
case 174:
YY_RULE_SETUP
#line 379 "glsl_lexer.lpp"
KEYWORD(130, 130, CASE);
	YY_BREAK
case 175:
YY_RULE_SETUP
#line 380 "glsl_lexer.lpp"
KEYWORD(130, 999, COMMON);
	YY_BREAK
case 176:
YY_RULE_SETUP
#line 381 "glsl_lexer.lpp"
KEYWORD(130, 999, PARTITION);
	YY_BREAK
case 177:
YY_RULE_SETUP
#line 382 "glsl_lexer.lpp"
KEYWORD(130, 999, ACTIVE);
	YY_BREAK
case 178:
YY_RULE_SETUP
#line 383 "glsl_lexer.lpp"
KEYWORD(130 || ES, 999, SUPERP);
	YY_BREAK
case 179:
YY_RULE_SETUP
#line 384 "glsl_lexer.lpp"
KEYWORD(130, 140, SAMPLERBUFFER);
	YY_BREAK
case 180:
YY_RULE_SETUP
#line 385 "glsl_lexer.lpp"
KEYWORD(130, 999, FILTER);
	YY_BREAK
case 181:
YY_RULE_SETUP
#line 386 "glsl_lexer.lpp"
KEYWORD(130, 999, IMAGE1D);
	YY_BREAK
case 182:
YY_RULE_SETUP
#line 387 "glsl_lexer.lpp"
KEYWORD(130, 999, IMAGE2D);
	YY_BREAK
case 183:
YY_RULE_SETUP
#line 388 "glsl_lexer.lpp"
KEYWORD(130, 999, IMAGE3D);
	YY_BREAK
case 184:
YY_RULE_SETUP
#line 389 "glsl_lexer.lpp"
KEYWORD(130, 999, IMAGECUBE);
	YY_BREAK
case 185:
YY_RULE_SETUP
#line 390 "glsl_lexer.lpp"
KEYWORD(130, 999, IIMAGE1D);
	YY_BREAK
case 186:
YY_RULE_SETUP
#line 391 "glsl_lexer.lpp"
KEYWORD(130, 999, IIMAGE2D);
	YY_BREAK
case 187:
YY_RULE_SETUP
#line 392 "glsl_lexer.lpp"
KEYWORD(130, 999, IIMAGE3D);
	YY_BREAK
case 188:
YY_RULE_SETUP
#line 393 "glsl_lexer.lpp"
KEYWORD(130, 999, IIMAGECUBE);
	YY_BREAK
case 189:
YY_RULE_SETUP
#line 394 "glsl_lexer.lpp"
KEYWORD(130, 999, UIMAGE1D);
	YY_BREAK
case 190:
YY_RULE_SETUP
#line 395 "glsl_lexer.lpp"
KEYWORD(130, 999, UIMAGE2D);
	YY_BREAK
case 191:
YY_RULE_SETUP
#line 396 "glsl_lexer.lpp"
KEYWORD(130, 999, UIMAGE3D);
	YY_BREAK
case 192:
YY_RULE_SETUP
#line 397 "glsl_lexer.lpp"
KEYWORD(130, 999, UIMAGECUBE);
	YY_BREAK
case 193:
YY_RULE_SETUP
#line 398 "glsl_lexer.lpp"
KEYWORD(130, 999, IMAGE1DARRAY);
	YY_BREAK
case 194:
YY_RULE_SETUP
#line 399 "glsl_lexer.lpp"
KEYWORD(130, 999, IMAGE2DARRAY);
	YY_BREAK
case 195:
YY_RULE_SETUP
#line 400 "glsl_lexer.lpp"
KEYWORD(130, 999, IIMAGE1DARRAY);
	YY_BREAK
case 196:
YY_RULE_SETUP
#line 401 "glsl_lexer.lpp"
KEYWORD(130, 999, IIMAGE2DARRAY);
	YY_BREAK
case 197:
YY_RULE_SETUP
#line 402 "glsl_lexer.lpp"
KEYWORD(130, 999, UIMAGE1DARRAY);
	YY_BREAK
case 198:
YY_RULE_SETUP
#line 403 "glsl_lexer.lpp"
KEYWORD(130, 999, UIMAGE2DARRAY);
	YY_BREAK
case 199:
YY_RULE_SETUP
#line 404 "glsl_lexer.lpp"
KEYWORD(130, 999, IMAGE1DSHADOW);
	YY_BREAK
case 200:
YY_RULE_SETUP
#line 405 "glsl_lexer.lpp"
KEYWORD(130, 999, IMAGE2DSHADOW);
	YY_BREAK
case 201:
YY_RULE_SETUP
#line 406 "glsl_lexer.lpp"
KEYWORD(130, 999, IMAGE1DARRAYSHADOW);
	YY_BREAK
case 202:
YY_RULE_SETUP
#line 407 "glsl_lexer.lpp"
KEYWORD(130, 999, IMAGE2DARRAYSHADOW);
	YY_BREAK
case 203:
YY_RULE_SETUP
#line 408 "glsl_lexer.lpp"
KEYWORD(130, 999, IMAGEBUFFER);
	YY_BREAK
case 204:
YY_RULE_SETUP
#line 409 "glsl_lexer.lpp"
KEYWORD(130, 999, IIMAGEBUFFER);
	YY_BREAK
case 205:
YY_RULE_SETUP
#line 410 "glsl_lexer.lpp"
KEYWORD(130, 999, UIMAGEBUFFER);
	YY_BREAK
case 206:
YY_RULE_SETUP
#line 411 "glsl_lexer.lpp"
KEYWORD(130, 999, ROW_MAJOR);
	YY_BREAK
case 207:
YY_RULE_SETUP
#line 413 "glsl_lexer.lpp"
{
			    struct _mesa_glsl_parse_state *state = yyextra;
			    void *ctx = state;	
			    yylval->identifier = hieralloc_strdup(ctx, yytext);
			    return IDENTIFIER;
			}
	YY_BREAK
case 208:
YY_RULE_SETUP
#line 420 "glsl_lexer.lpp"
{ return yytext[0]; }
	YY_BREAK
case 209:
YY_RULE_SETUP
#line 422 "glsl_lexer.lpp"
ECHO;
	YY_BREAK
#line 2530 "glsl_lexer.cpp"
case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(PP):
case YY_STATE_EOF(PRAGMA):
	yyterminate();

	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
			 * _mesa_glsl_lex().  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 ( _mesa_glsl_wrap(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 _mesa_glsl_lex */

/* 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;
	register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
	register char *source = yyg->yytext_ptr;
	register 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;

			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. */
					_mesa_glsl_realloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ,yyscanner );
				}
			else
				/* Can't grow it, we don't own it. */
				b->yy_ch_buf = 0;

			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, (size_t) 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;
			_mesa_glsl_restart(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 ((yy_size_t) (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. */
		yy_size_t new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1);
		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) _mesa_glsl_realloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ,yyscanner );
		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
	}

	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)
{
	register yy_state_type yy_current_state;
	register char *yy_cp;
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;

	yy_current_state = yyg->yy_start;
	yy_current_state += YY_AT_BOL();

	for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp )
		{
		register 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 >= 813 )
				yy_c = yy_meta[(unsigned int) yy_c];
			}
		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) 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)
{
	register int yy_is_jam;
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */
	register char *yy_cp = yyg->yy_c_buf_p;

	register 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 >= 813 )
			yy_c = yy_meta[(unsigned int) yy_c];
		}
	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
	yy_is_jam = (yy_current_state == 812);

	return yy_is_jam ? 0 : yy_current_state;
}

#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 = 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. */
					_mesa_glsl_restart(yyin ,yyscanner);

					/*FALLTHROUGH*/

				case EOB_ACT_END_OF_FILE:
					{
					if ( _mesa_glsl_wrap(yyscanner ) )
						return EOF;

					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;

	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n');

	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 _mesa_glsl_restart  (FILE * input_file , yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;

	if ( ! YY_CURRENT_BUFFER ){
        _mesa_glsl_ensure_buffer_stack (yyscanner);
		YY_CURRENT_BUFFER_LVALUE =
            _mesa_glsl__create_buffer(yyin,YY_BUF_SIZE ,yyscanner);
	}

	_mesa_glsl__init_buffer(YY_CURRENT_BUFFER,input_file ,yyscanner);
	_mesa_glsl__load_buffer_state(yyscanner );
}

/** Switch to a different input buffer.
 * @param new_buffer The new input buffer.
 * @param yyscanner The scanner object.
 */
    void _mesa_glsl__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
	 *		_mesa_glsl_pop_buffer_state();
	 *		_mesa_glsl_push_buffer_state(new_buffer);
     */
	_mesa_glsl_ensure_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;
	_mesa_glsl__load_buffer_state(yyscanner );

	/* We don't actually know whether we did this switch during
	 * EOF (_mesa_glsl_wrap()) processing, but the only time this flag
	 * is looked at is after _mesa_glsl_wrap() is called, so it's safe
	 * to go ahead and always set it.
	 */
	yyg->yy_did_buffer_switch_on_eof = 1;
}

static void _mesa_glsl__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 _mesa_glsl__create_buffer  (FILE * file, int  size , yyscan_t yyscanner)
{
	YY_BUFFER_STATE b;
    
	b = (YY_BUFFER_STATE) _mesa_glsl_alloc(sizeof( struct yy_buffer_state ) ,yyscanner );
	if ( ! b )
		YY_FATAL_ERROR( "out of dynamic memory in _mesa_glsl__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 *) _mesa_glsl_alloc(b->yy_buf_size + 2 ,yyscanner );
	if ( ! b->yy_ch_buf )
		YY_FATAL_ERROR( "out of dynamic memory in _mesa_glsl__create_buffer()" );

	b->yy_is_our_buffer = 1;

	_mesa_glsl__init_buffer(b,file ,yyscanner);

	return b;
}

/** Destroy the buffer.
 * @param b a buffer created with _mesa_glsl__create_buffer()
 * @param yyscanner The scanner object.
 */
    void _mesa_glsl__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 )
		_mesa_glsl_free((void *) b->yy_ch_buf ,yyscanner );

	_mesa_glsl_free((void *) b ,yyscanner );
}

/* Initializes or reinitializes a buffer.
 * This function is sometimes called more than once on the same buffer,
 * such as during a _mesa_glsl_restart() or at EOF.
 */
    static void _mesa_glsl__init_buffer  (YY_BUFFER_STATE  b, FILE * file , yyscan_t yyscanner)

{
	int oerrno = errno;
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;

	_mesa_glsl__flush_buffer(b ,yyscanner);

	b->yy_input_file = file;
	b->yy_fill_buffer = 1;

    /* If b is the current buffer, then _mesa_glsl__init_buffer was _probably_
     * called from _mesa_glsl_restart() 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 _mesa_glsl__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 )
		_mesa_glsl__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 _mesa_glsl_push_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
	if (new_buffer == NULL)
		return;

	_mesa_glsl_ensure_buffer_stack(yyscanner);

	/* This block is copied from _mesa_glsl__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 _mesa_glsl__switch_to_buffer. */
	_mesa_glsl__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 _mesa_glsl_pop_buffer_state (yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
	if (!YY_CURRENT_BUFFER)
		return;

	_mesa_glsl__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) {
		_mesa_glsl__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 _mesa_glsl_ensure_buffer_stack (yyscan_t yyscanner)
{
	int 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;
		yyg->yy_buffer_stack = (struct yy_buffer_state**)_mesa_glsl_alloc
								(num_to_alloc * sizeof(struct yy_buffer_state*)
								, yyscanner);
		if ( ! yyg->yy_buffer_stack )
			YY_FATAL_ERROR( "out of dynamic memory in _mesa_glsl_ensure_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. */
		int grow_size = 8 /* arbitrary grow size */;

		num_to_alloc = yyg->yy_buffer_stack_max + grow_size;
		yyg->yy_buffer_stack = (struct yy_buffer_state**)_mesa_glsl_realloc
								(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 _mesa_glsl_ensure_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 _mesa_glsl__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 0;

	b = (YY_BUFFER_STATE) _mesa_glsl_alloc(sizeof( struct yy_buffer_state ) ,yyscanner );
	if ( ! b )
		YY_FATAL_ERROR( "out of dynamic memory in _mesa_glsl__scan_buffer()" );

	b->yy_buf_size = 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 = 0;
	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;

	_mesa_glsl__switch_to_buffer(b ,yyscanner );

	return b;
}

/** Setup the input buffer state to scan a string. The next call to _mesa_glsl_lex() 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
 *       _mesa_glsl__scan_bytes() instead.
 */
YY_BUFFER_STATE _mesa_glsl__scan_string (yyconst char * yystr , yyscan_t yyscanner)
{
    
	return _mesa_glsl__scan_bytes(yystr,strlen(yystr) ,yyscanner);
}

/** Setup the input buffer state to scan the given bytes. The next call to _mesa_glsl_lex() will
 * scan from a @e copy of @a bytes.
 * @param bytes the byte buffer to scan
 * @param 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 _mesa_glsl__scan_bytes  (yyconst 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 = _yybytes_len + 2;
	buf = (char *) _mesa_glsl_alloc(n ,yyscanner );
	if ( ! buf )
		YY_FATAL_ERROR( "out of dynamic memory in _mesa_glsl__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 = _mesa_glsl__scan_buffer(buf,n ,yyscanner);
	if ( ! b )
		YY_FATAL_ERROR( "bad buffer in _mesa_glsl__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 yy_fatal_error (yyconst char* msg , yyscan_t yyscanner)
{
    	(void) 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 _mesa_glsl_get_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 _mesa_glsl_get_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 _mesa_glsl_get_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 *_mesa_glsl_get_in  (yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
    return yyin;
}

/** Get the output stream.
 * @param yyscanner The scanner object.
 */
FILE *_mesa_glsl_get_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 _mesa_glsl_get_leng  (yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
    return yyleng;
}

/** Get the current token.
 * @param yyscanner The scanner object.
 */

char *_mesa_glsl_get_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 _mesa_glsl_set_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
 * @param yyscanner The scanner object.
 */
void _mesa_glsl_set_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( "_mesa_glsl_set_lineno called with no buffer" , yyscanner); 
    
    yylineno = line_number;
}

/** Set the current column.
 * @param line_number
 * @param yyscanner The scanner object.
 */
void _mesa_glsl_set_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( "_mesa_glsl_set_column called with no buffer" , yyscanner); 
    
    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 _mesa_glsl__switch_to_buffer
 */
void _mesa_glsl_set_in (FILE *  in_str , yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
    yyin = in_str ;
}

void _mesa_glsl_set_out (FILE *  out_str , yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
    yyout = out_str ;
}

int _mesa_glsl_get_debug  (yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
    return yy_flex_debug;
}

void _mesa_glsl_set_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 * _mesa_glsl_get_lval  (yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
    return yylval;
}

void _mesa_glsl_set_lval (YYSTYPE *  yylval_param , yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
    yylval = yylval_param;
}

YYLTYPE *_mesa_glsl_get_lloc  (yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
    return yylloc;
}
    
void _mesa_glsl_set_lloc (YYLTYPE *  yylloc_param , yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
    yylloc = yylloc_param;
}
    
/* User-visible API */

/* _mesa_glsl_lex_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 _mesa_glsl_lex_init(yyscan_t* ptr_yy_globals)

{
    if (ptr_yy_globals == NULL){
        errno = EINVAL;
        return 1;
    }

    *ptr_yy_globals = (yyscan_t) _mesa_glsl_alloc ( 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 );
}

/* _mesa_glsl_lex_init_extra has the same functionality as _mesa_glsl_lex_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 _mesa_glsl_alloc in
 * the yyextra field.
 */

int _mesa_glsl_lex_init_extra(YY_EXTRA_TYPE yy_user_defined,yyscan_t* ptr_yy_globals )

{
    struct yyguts_t dummy_yyguts;

    _mesa_glsl_set_extra (yy_user_defined, &dummy_yyguts);

    if (ptr_yy_globals == NULL){
        errno = EINVAL;
        return 1;
    }
	
    *ptr_yy_globals = (yyscan_t) _mesa_glsl_alloc ( 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));
    
    _mesa_glsl_set_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 _mesa_glsl_lex_destroy(), so don't allocate here.
     */

    yyg->yy_buffer_stack = 0;
    yyg->yy_buffer_stack_top = 0;
    yyg->yy_buffer_stack_max = 0;
    yyg->yy_c_buf_p = (char *) 0;
    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 = (FILE *) 0;
    yyout = (FILE *) 0;
#endif

    /* For future reference: Set errno on error, since we are called by
     * _mesa_glsl_lex_init()
     */
    return 0;
}

/* _mesa_glsl_lex_destroy is for both reentrant and non-reentrant scanners. */
int _mesa_glsl_lex_destroy  (yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;

    /* Pop the buffer stack, destroying each element. */
	while(YY_CURRENT_BUFFER){
		_mesa_glsl__delete_buffer(YY_CURRENT_BUFFER ,yyscanner );
		YY_CURRENT_BUFFER_LVALUE = NULL;
		_mesa_glsl_pop_buffer_state(yyscanner);
	}

	/* Destroy the stack itself. */
	_mesa_glsl_free(yyg->yy_buffer_stack ,yyscanner);
	yyg->yy_buffer_stack = NULL;

    /* Destroy the start condition stack. */
        _mesa_glsl_free(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
     * _mesa_glsl_lex() is called, initialization will occur. */
    yy_init_globals( yyscanner);

    /* Destroy the main struct (reentrant only). */
    _mesa_glsl_free ( yyscanner , yyscanner );
    yyscanner = NULL;
    return 0;
}

/*
 * Internal utility routines.
 */

#ifndef yytext_ptr
static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yyscanner)
{
	register int i;
	for ( i = 0; i < n; ++i )
		s1[i] = s2[i];
}
#endif

#ifdef YY_NEED_STRLEN
static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner)
{
	register int n;
	for ( n = 0; s[n]; ++n )
		;

	return n;
}
#endif

void *_mesa_glsl_alloc (yy_size_t  size , yyscan_t yyscanner)
{
	return (void *) malloc( size );
}

void *_mesa_glsl_realloc  (void * ptr, yy_size_t  size , yyscan_t yyscanner)
{
	/* 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 (void *) realloc( (char *) ptr, size );
}

void _mesa_glsl_free (void * ptr , yyscan_t yyscanner)
{
	free( (char *) ptr );	/* see _mesa_glsl_realloc() for (char *) cast */
}

#define YYTABLES_NAME "yytables"

#line 422 "glsl_lexer.lpp"



void
_mesa_glsl_lexer_ctor(struct _mesa_glsl_parse_state *state, const char *string)
{
   _mesa_glsl_lex_init_extra(state,& state->scanner);
   _mesa_glsl__scan_string(string,state->scanner);
}

void
_mesa_glsl_lexer_dtor(struct _mesa_glsl_parse_state *state)
{
   _mesa_glsl_lex_destroy(state->scanner);
}

