#line 1 "SqlLexer_gen.cpp"

#line 3 "SqlLexer_gen.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 6
#define YY_FLEX_SUBMINOR_VERSION 4
#if YY_FLEX_SUBMINOR_VERSION > 0
#define FLEX_BETA
#endif

#ifdef yy_create_buffer
#define quickstep_yy_create_buffer_ALREADY_DEFINED
#else
#define yy_create_buffer quickstep_yy_create_buffer
#endif

#ifdef yy_delete_buffer
#define quickstep_yy_delete_buffer_ALREADY_DEFINED
#else
#define yy_delete_buffer quickstep_yy_delete_buffer
#endif

#ifdef yy_scan_buffer
#define quickstep_yy_scan_buffer_ALREADY_DEFINED
#else
#define yy_scan_buffer quickstep_yy_scan_buffer
#endif

#ifdef yy_scan_string
#define quickstep_yy_scan_string_ALREADY_DEFINED
#else
#define yy_scan_string quickstep_yy_scan_string
#endif

#ifdef yy_scan_bytes
#define quickstep_yy_scan_bytes_ALREADY_DEFINED
#else
#define yy_scan_bytes quickstep_yy_scan_bytes
#endif

#ifdef yy_init_buffer
#define quickstep_yy_init_buffer_ALREADY_DEFINED
#else
#define yy_init_buffer quickstep_yy_init_buffer
#endif

#ifdef yy_flush_buffer
#define quickstep_yy_flush_buffer_ALREADY_DEFINED
#else
#define yy_flush_buffer quickstep_yy_flush_buffer
#endif

#ifdef yy_load_buffer_state
#define quickstep_yy_load_buffer_state_ALREADY_DEFINED
#else
#define yy_load_buffer_state quickstep_yy_load_buffer_state
#endif

#ifdef yy_switch_to_buffer
#define quickstep_yy_switch_to_buffer_ALREADY_DEFINED
#else
#define yy_switch_to_buffer quickstep_yy_switch_to_buffer
#endif

#ifdef yypush_buffer_state
#define quickstep_yypush_buffer_state_ALREADY_DEFINED
#else
#define yypush_buffer_state quickstep_yypush_buffer_state
#endif

#ifdef yypop_buffer_state
#define quickstep_yypop_buffer_state_ALREADY_DEFINED
#else
#define yypop_buffer_state quickstep_yypop_buffer_state
#endif

#ifdef yyensure_buffer_stack
#define quickstep_yyensure_buffer_stack_ALREADY_DEFINED
#else
#define yyensure_buffer_stack quickstep_yyensure_buffer_stack
#endif

#ifdef yylex
#define quickstep_yylex_ALREADY_DEFINED
#else
#define yylex quickstep_yylex
#endif

#ifdef yyrestart
#define quickstep_yyrestart_ALREADY_DEFINED
#else
#define yyrestart quickstep_yyrestart
#endif

#ifdef yylex_init
#define quickstep_yylex_init_ALREADY_DEFINED
#else
#define yylex_init quickstep_yylex_init
#endif

#ifdef yylex_init_extra
#define quickstep_yylex_init_extra_ALREADY_DEFINED
#else
#define yylex_init_extra quickstep_yylex_init_extra
#endif

#ifdef yylex_destroy
#define quickstep_yylex_destroy_ALREADY_DEFINED
#else
#define yylex_destroy quickstep_yylex_destroy
#endif

#ifdef yyget_debug
#define quickstep_yyget_debug_ALREADY_DEFINED
#else
#define yyget_debug quickstep_yyget_debug
#endif

#ifdef yyset_debug
#define quickstep_yyset_debug_ALREADY_DEFINED
#else
#define yyset_debug quickstep_yyset_debug
#endif

#ifdef yyget_extra
#define quickstep_yyget_extra_ALREADY_DEFINED
#else
#define yyget_extra quickstep_yyget_extra
#endif

#ifdef yyset_extra
#define quickstep_yyset_extra_ALREADY_DEFINED
#else
#define yyset_extra quickstep_yyset_extra
#endif

#ifdef yyget_in
#define quickstep_yyget_in_ALREADY_DEFINED
#else
#define yyget_in quickstep_yyget_in
#endif

#ifdef yyset_in
#define quickstep_yyset_in_ALREADY_DEFINED
#else
#define yyset_in quickstep_yyset_in
#endif

#ifdef yyget_out
#define quickstep_yyget_out_ALREADY_DEFINED
#else
#define yyget_out quickstep_yyget_out
#endif

#ifdef yyset_out
#define quickstep_yyset_out_ALREADY_DEFINED
#else
#define yyset_out quickstep_yyset_out
#endif

#ifdef yyget_leng
#define quickstep_yyget_leng_ALREADY_DEFINED
#else
#define yyget_leng quickstep_yyget_leng
#endif

#ifdef yyget_text
#define quickstep_yyget_text_ALREADY_DEFINED
#else
#define yyget_text quickstep_yyget_text
#endif

#ifdef yyget_lineno
#define quickstep_yyget_lineno_ALREADY_DEFINED
#else
#define yyget_lineno quickstep_yyget_lineno
#endif

#ifdef yyset_lineno
#define quickstep_yyset_lineno_ALREADY_DEFINED
#else
#define yyset_lineno quickstep_yyset_lineno
#endif

#ifdef yyget_column
#define quickstep_yyget_column_ALREADY_DEFINED
#else
#define yyget_column quickstep_yyget_column
#endif

#ifdef yyset_column
#define quickstep_yyset_column_ALREADY_DEFINED
#else
#define yyset_column quickstep_yyset_column
#endif

#ifdef yywrap
#define quickstep_yywrap_ALREADY_DEFINED
#else
#define yywrap quickstep_yywrap
#endif

#ifdef yyget_lval
#define quickstep_yyget_lval_ALREADY_DEFINED
#else
#define yyget_lval quickstep_yyget_lval
#endif

#ifdef yyset_lval
#define quickstep_yyset_lval_ALREADY_DEFINED
#else
#define yyset_lval quickstep_yyset_lval
#endif

#ifdef yyget_lloc
#define quickstep_yyget_lloc_ALREADY_DEFINED
#else
#define yyget_lloc quickstep_yyget_lloc
#endif

#ifdef yyset_lloc
#define quickstep_yyset_lloc_ALREADY_DEFINED
#else
#define yyset_lloc quickstep_yyset_lloc
#endif

#ifdef yyalloc
#define quickstep_yyalloc_ALREADY_DEFINED
#else
#define yyalloc quickstep_yyalloc
#endif

#ifdef yyrealloc
#define quickstep_yyrealloc_ALREADY_DEFINED
#else
#define yyrealloc quickstep_yyrealloc
#endif

#ifdef yyfree
#define quickstep_yyfree_ALREADY_DEFINED
#else
#define yyfree quickstep_yyfree
#endif

/* First, we deal with  platform-specific or compiler-specific issues. */

/* begin standard C headers. */
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>

/* end standard C headers. */

/* flex integer type definitions */

#ifndef FLEXINT_H
#define FLEXINT_H

/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */

#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L

/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
 * if you want the limit (max/min) macros for int types. 
 */
#ifndef __STDC_LIMIT_MACROS
#define __STDC_LIMIT_MACROS 1
#endif

#include <inttypes.h>
typedef int8_t flex_int8_t;
typedef uint8_t flex_uint8_t;
typedef int16_t flex_int16_t;
typedef uint16_t flex_uint16_t;
typedef int32_t flex_int32_t;
typedef uint32_t flex_uint32_t;
#else
typedef signed char flex_int8_t;
typedef short int flex_int16_t;
typedef int flex_int32_t;
typedef unsigned char flex_uint8_t; 
typedef unsigned short int flex_uint16_t;
typedef unsigned int flex_uint32_t;

/* Limits of integral types. */
#ifndef INT8_MIN
#define INT8_MIN               (-128)
#endif
#ifndef INT16_MIN
#define INT16_MIN              (-32767-1)
#endif
#ifndef INT32_MIN
#define INT32_MIN              (-2147483647-1)
#endif
#ifndef INT8_MAX
#define INT8_MAX               (127)
#endif
#ifndef INT16_MAX
#define INT16_MAX              (32767)
#endif
#ifndef INT32_MAX
#define INT32_MAX              (2147483647)
#endif
#ifndef UINT8_MAX
#define UINT8_MAX              (255U)
#endif
#ifndef UINT16_MAX
#define UINT16_MAX             (65535U)
#endif
#ifndef UINT32_MAX
#define UINT32_MAX             (4294967295U)
#endif

#ifndef SIZE_MAX
#define SIZE_MAX               (~(size_t)0)
#endif

#endif /* ! C99 */

#endif /* ! FLEXINT_H */

/* begin standard C++ headers. */

/* TODO: this is always defined, so inline it */
#define yyconst const

#if defined(__GNUC__) && __GNUC__ >= 3
#define yynoreturn __attribute__((__noreturn__))
#else
#define yynoreturn
#endif

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

/* Promotes a possibly negative, possibly signed char to an
 *   integer in range [0..255] for use as an array index.
 */
#define YY_SC_TO_UI(c) ((YY_CHAR) (c))

/* An opaque pointer. */
#ifndef YY_TYPEDEF_YY_SCANNER_T
#define YY_TYPEDEF_YY_SCANNER_T
typedef void* yyscan_t;
#endif

/* For convenience, these vars (plus the bison vars far below)
   are macros in the reentrant scanner. */
#define yyin yyg->yyin_r
#define yyout yyg->yyout_r
#define yyextra yyg->yyextra_r
#define yyleng yyg->yyleng_r
#define yytext yyg->yytext_r
#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno)
#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column)
#define yy_flex_debug yyg->yy_flex_debug_r

/* Enter a start condition.  This macro really ought to take a parameter,
 * but we do it the disgusting crufty way forced on us by the ()-less
 * definition of BEGIN.
 */
#define BEGIN yyg->yy_start = 1 + 2 *
/* Translate the current start state into a value that can be later handed
 * to BEGIN to return to the state.  The YYSTATE alias is for lex
 * compatibility.
 */
#define YY_START ((yyg->yy_start - 1) / 2)
#define YYSTATE YY_START
/* Action number for EOF rule of a given start state. */
#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
/* Special action meaning "start processing a new file". */
#define YY_NEW_FILE yyrestart( yyin , yyscanner )
#define YY_END_OF_BUFFER_CHAR 0

/* Size of default input buffer. */
#ifndef YY_BUF_SIZE
#ifdef __ia64__
/* On IA-64, the buffer size is 16k, not 8k.
 * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
 * Ditto for the __ia64__ case accordingly.
 */
#define YY_BUF_SIZE 32768
#else
#define YY_BUF_SIZE 16384
#endif /* __ia64__ */
#endif

/* The state buf must be large enough to hold one state per character in the main buffer.
 */
#define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))

#ifndef YY_TYPEDEF_YY_BUFFER_STATE
#define YY_TYPEDEF_YY_BUFFER_STATE
typedef struct yy_buffer_state *YY_BUFFER_STATE;
#endif

#ifndef YY_TYPEDEF_YY_SIZE_T
#define YY_TYPEDEF_YY_SIZE_T
typedef size_t yy_size_t;
#endif

#define EOB_ACT_CONTINUE_SCAN 0
#define EOB_ACT_END_OF_FILE 1
#define EOB_ACT_LAST_MATCH 2
    
    /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires
     *       access to the local variable yy_act. Since yyless() is a macro, it would break
     *       existing scanners that call yyless() from OUTSIDE yylex.
     *       One obvious solution it to make yy_act a global. I tried that, and saw
     *       a 5% performance hit in a non-yylineno scanner, because yy_act is
     *       normally declared as a register variable-- so it is not worth it.
     */
    #define  YY_LESS_LINENO(n) \
            do { \
                int yyl;\
                for ( yyl = n; yyl < yyleng; ++yyl )\
                    if ( yytext[yyl] == '\n' )\
                        --yylineno;\
            }while(0)
    #define YY_LINENO_REWIND_TO(dst) \
            do {\
                const char *p;\
                for ( p = yy_cp-1; p >= (dst); --p)\
                    if ( *p == '\n' )\
                        --yylineno;\
            }while(0)
    
/* Return all but the first "n" matched characters back to the input stream. */
#define yyless(n) \
	do \
		{ \
		/* Undo effects of setting up yytext. */ \
        int yyless_macro_arg = (n); \
        YY_LESS_LINENO(yyless_macro_arg);\
		*yy_cp = yyg->yy_hold_char; \
		YY_RESTORE_YY_MORE_OFFSET \
		yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
		YY_DO_BEFORE_ACTION; /* set up yytext again */ \
		} \
	while ( 0 )
#define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner )

#ifndef YY_STRUCT_YY_BUFFER_STATE
#define YY_STRUCT_YY_BUFFER_STATE
struct yy_buffer_state
	{
	FILE *yy_input_file;

	char *yy_ch_buf;		/* input buffer */
	char *yy_buf_pos;		/* current position in input buffer */

	/* Size of input buffer in bytes, not including room for EOB
	 * characters.
	 */
	int yy_buf_size;

	/* Number of characters read into yy_ch_buf, not including EOB
	 * characters.
	 */
	int yy_n_chars;

	/* Whether we "own" the buffer - i.e., we know we created it,
	 * and can realloc() it to grow it, and should free() it to
	 * delete it.
	 */
	int yy_is_our_buffer;

	/* Whether this is an "interactive" input source; if so, and
	 * if we're using stdio for input, then we want to use getc()
	 * instead of fread(), to make sure we stop fetching input after
	 * each newline.
	 */
	int yy_is_interactive;

	/* Whether we're considered to be at the beginning of a line.
	 * If so, '^' rules will be active on the next match, otherwise
	 * not.
	 */
	int yy_at_bol;

    int yy_bs_lineno; /**< The line count. */
    int yy_bs_column; /**< The column count. */

	/* Whether to try to fill the input buffer when we reach the
	 * end of it.
	 */
	int yy_fill_buffer;

	int yy_buffer_status;

#define YY_BUFFER_NEW 0
#define YY_BUFFER_NORMAL 1
	/* When an EOF's been seen but there's still some text to process
	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
	 * shouldn't try reading from the input source any more.  We might
	 * still have a bunch of tokens to match, though, because of
	 * possible backing-up.
	 *
	 * When we actually see the EOF, we change the status to "new"
	 * (via yyrestart()), so that the user can continue scanning by
	 * just pointing yyin at a new input file.
	 */
#define YY_BUFFER_EOF_PENDING 2

	};
#endif /* !YY_STRUCT_YY_BUFFER_STATE */

/* We provide macros for accessing buffer states in case in the
 * future we want to put the buffer states in a more general
 * "scanner state".
 *
 * Returns the top of the stack, or NULL.
 */
#define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \
                          ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \
                          : NULL)
/* Same as previous macro, but useful when we know that the buffer stack is not
 * NULL or when we need an lvalue. For internal use only.
 */
#define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top]

void yyrestart ( FILE *input_file , yyscan_t yyscanner );
void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner );
YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size , yyscan_t yyscanner );
void yy_delete_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner );
void yy_flush_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner );
void yypush_buffer_state ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner );
void yypop_buffer_state ( yyscan_t yyscanner );

static void yyensure_buffer_stack ( yyscan_t yyscanner );
static void yy_load_buffer_state ( yyscan_t yyscanner );
static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file , yyscan_t yyscanner );
#define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER , yyscanner)

YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size , yyscan_t yyscanner );
YY_BUFFER_STATE yy_scan_string ( const char *yy_str , yyscan_t yyscanner );
YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len , yyscan_t yyscanner );

void *yyalloc ( yy_size_t , yyscan_t yyscanner );
void *yyrealloc ( void *, yy_size_t , yyscan_t yyscanner );
void yyfree ( void * , yyscan_t yyscanner );

#define yy_new_buffer yy_create_buffer
#define yy_set_interactive(is_interactive) \
	{ \
	if ( ! YY_CURRENT_BUFFER ){ \
        yyensure_buffer_stack (yyscanner); \
		YY_CURRENT_BUFFER_LVALUE =    \
            yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); \
	} \
	YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
	}
#define yy_set_bol(at_bol) \
	{ \
	if ( ! YY_CURRENT_BUFFER ){\
        yyensure_buffer_stack (yyscanner); \
		YY_CURRENT_BUFFER_LVALUE =    \
            yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); \
	} \
	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
	}
#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)

/* Begin user sect3 */

#define quickstep_yywrap(yyscanner) (/*CONSTCOND*/1)
#define YY_SKIP_YYWRAP
typedef flex_uint8_t YY_CHAR;

typedef int yy_state_type;

#define yytext_ptr yytext_r

static yy_state_type yy_get_previous_state ( yyscan_t yyscanner );
static yy_state_type yy_try_NUL_trans ( yy_state_type current_state  , yyscan_t yyscanner);
static int yy_get_next_buffer ( yyscan_t yyscanner );
static void yynoreturn yy_fatal_error ( const char* msg , yyscan_t yyscanner );

/* Done after the current pattern has been matched and before the
 * corresponding action - sets up yytext.
 */
#define YY_DO_BEFORE_ACTION \
	yyg->yytext_ptr = yy_bp; \
	yyleng = (int) (yy_cp - yy_bp); \
	yyg->yy_hold_char = *yy_cp; \
	*yy_cp = '\0'; \
	yyg->yy_c_buf_p = yy_cp;
#define YY_NUM_RULES 164
#define YY_END_OF_BUFFER 165
/* This struct is not used in this scanner,
   but its presence is necessary. */
struct yy_trans_info
	{
	flex_int32_t yy_verify;
	flex_int32_t yy_nxt;
	};
static const flex_int16_t yy_accept[589] =
    {   0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,  165,    2,    2,  163,  163,  162,  161,  163,
      140,  136,  139,  136,  136,  159,  132,  129,  133,  158,
      158,  158,  158,  158,  158,  158,  158,  158,  158,  158,
      158,  158,  158,  158,  158,  158,  158,  158,  158,  158,
      158,  158,  158,  158,  137,    4,    5,    5,    3,  155,
      155,  152,  156,  156,  150,  157,  157,  154,    1,  162,
      130,  160,  159,  159,  159,    0,  134,  131,  135,  158,
      158,  158,  158,   10,  158,  158,  158,   22,  158,  158,
      158,  158,  158,  158,  158,  158,  158,  158,  158,  138,

      158,  158,  158,  158,  158,  158,  158,  158,  158,  158,
      158,  158,   58,   67,  158,  158,  158,  158,  158,  158,
      158,  158,  158,  158,  158,   81,   82,  158,  158,  158,
      158,  158,  158,  158,  158,  158,  158,  158,  158,  158,
      158,  158,  158,  158,  113,  158,  158,  158,  158,  158,
      158,  158,  158,  158,    4,    5,    3,  155,  151,  156,
      149,  149,  141,  143,  144,  145,  146,  147,  148,  149,
      157,  153,  160,  159,    0,  159,    6,    7,  158,    9,
       11,  158,  158,   15,  158,  158,  158,  158,  158,  158,
      158,  158,  158,  158,  158,   33,  158,  158,  158,  158,

      158,  158,  158,  158,   43,  158,  158,  158,  158,  158,
      158,   50,  158,  158,  158,  158,  158,  158,  158,  158,
      158,   62,  158,   69,  158,  158,  158,  158,  158,  158,
      158,   77,  158,   80,  158,  158,  158,  158,  158,  158,
      158,  158,  158,  158,  158,  158,  158,   98,  158,  158,
      103,  104,  158,  158,  158,  158,  158,  158,  158,  158,
      158,  158,  158,  158,  158,  158,  158,  158,  158,  141,
      143,  142,  158,  158,  158,  158,  158,  158,  158,   20,
       23,  158,  158,  158,   28,  158,  158,  158,   31,  158,
      158,  158,   37,  158,  158,   41,   42,  158,  158,  158,

      158,  158,  158,  158,   52,   53,  158,   55,  158,   57,
      158,  158,  158,  158,   66,   68,   70,   71,   72,  158,
       74,  158,  158,   78,  158,  158,   85,  158,  158,  158,
      158,  158,   92,  158,   94,  158,  158,  158,  100,  158,
      158,  158,  158,  158,  158,  158,  158,  110,  111,  114,
      158,  158,  158,  158,  158,  158,  158,  158,  123,  158,
      158,  126,  127,  141,  142,    8,  158,  158,  158,  158,
      158,  158,  158,   25,  158,  158,  158,  158,  158,  158,
      158,  158,  158,  158,  158,  158,  158,  158,   46,   47,
       48,  158,  158,   54,  158,   59,   60,  158,  158,  158,

       73,  158,   76,   79,   83,   84,  158,  158,  158,  158,
      158,   93,  158,  158,   97,  158,  158,  158,  158,  158,
      158,  158,  109,  158,  158,  158,  117,  158,  158,  120,
      158,  158,  124,  158,  158,  158,  158,   14,  158,  158,
      158,  158,  158,   26,  158,   29,  158,  158,  158,  158,
      158,   36,  158,  158,   40,   44,  158,  158,  158,   56,
       61,  158,  158,  158,   75,  158,  158,  158,  158,  158,
      158,   96,  158,  101,  102,  158,  106,  107,  158,  158,
      158,  158,  118,  119,  121,  158,  125,  158,  158,   13,
      158,  158,  158,  158,  158,  158,   21,   30,  158,   34,

       35,  158,  158,   45,  158,   51,   63,  158,  158,  158,
       88,  158,   90,  158,  158,  158,  158,  158,  158,  158,
      158,  122,  158,  158,  158,  158,  158,  158,  158,  158,
       32,  158,   39,  158,  158,   65,  158,  158,   91,  158,
      158,  105,  158,  158,  158,  158,  158,   12,  158,  158,
      158,  158,   24,  158,  158,   49,   64,   86,   89,  158,
      158,  108,  112,  158,  116,  128,   16,  158,  158,  158,
       27,   38,   87,   95,  158,  158,  158,   18,   19,  158,
      115,  158,  158,  158,   99,  158,   17,    0
    } ;

static const YY_CHAR 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,    6,    1,    1,    7,    1,    8,    7,
        7,    7,    9,    7,   10,   11,    7,   12,   12,   12,
       12,   12,   12,   12,   12,   13,   13,   14,    7,   15,
       16,   17,    1,    1,   18,   19,   20,   21,   22,   23,
       24,   25,   26,   27,   28,   29,   30,   31,   32,   33,
       34,   35,   36,   37,   38,   39,   40,   41,   42,   43,
       44,   45,   44,    1,   46,    1,   47,   48,   49,   50,

       51,   52,   53,   54,   55,   56,   57,   58,   59,   60,
       61,   62,   63,   64,   65,   66,   67,   68,   69,   70,
       71,   43,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,

        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1
    } ;

static const YY_CHAR yy_meta[72] =
    {   0,
        1,    1,    2,    1,    1,    3,    1,    4,    1,    5,
        5,    6,    6,    5,    1,    1,    1,    7,    7,    7,
        7,    7,    7,    8,    8,    8,    8,    8,    8,    8,
        8,    8,    8,    8,    8,    8,    8,    8,    8,    8,
        8,    8,    8,    1,    9,   10,    7,    7,    7,    7,
        7,    7,    8,    8,    8,    8,    8,    8,    8,    8,
        8,    8,    8,    8,    8,    8,    8,    8,    8,    8,
        8
    } ;

static const flex_int16_t yy_base[604] =
    {   0,
        0,    1,   46,    0,  117,  162,    2,    3,  127,  128,
        6,   10,  147, 1316, 1316,    0, 1316,   13, 1316,  130,
     1316, 1316, 1316,  129,    6,  129,    4, 1316,   28,  124,
      159,  213,  165,  167,  263,   92,  158,  163,   96,  107,
      214,  160,  186,  219,  221,  155,  281,  274,  325,  257,
      186,  209,    0,  219, 1316,   27,    4,   19,    0,    0,
        0,   17,    0,    0,  389,    0,    0,    8,    0,   22,
     1316,    0,  293,  325,  343,   18, 1316, 1316, 1316,    0,
      223,  265,  234,  242,  260,  292,  288,    0,  299,  330,
      337,  324,  334,  324,  325,  380,  325,  331,  346, 1316,

      348,  364,  378,  376,  371,  378,  382,  386,  390,  389,
      386,  385,  435,    0,  402,  389,  400,  435,  433,  431,
      433,  436,  431,  440,  447,    0,  452,  437,  453,  441,
      442,  456,  453,  449,  465,  457,  444,  494,  468,  495,
      500,  501,  499,  492,    0,  486,  492,  507,  506,  502,
      500,  508,  501,  516,    0,   29,    0,    0, 1316,    0,
     1316, 1316,   22,   24, 1316, 1316, 1316, 1316, 1316,    0,
        0, 1316,    0,  524,   26,   28,    0,    0,  517,    0,
      518,  501,  516,  504,  545,  525,  531,  552,  536,  542,
      537,  562,  544,  547,  561,    0,  558,  567,  564,  567,

      551,  570,  557,  569,    0,  556,  558,  560,  561,  580,
      570,  578,  572,  575,  567,  598,  598,  595,  610,  613,
      614,  615,  607,    0,  602,  603,  619,  616,  619,  606,
      608,    0,  617,    0,  626,  627,  615,  614,  634,  635,
      626,  620,  636,  633,  641,  659,  657,  652,  658,  671,
        0,  665,  673,  660,  668,  668,  678,  679,  673,  671,
      672,  689,  677,  671,  692,  683,  692,  690,  681,   30,
      125,    0,  685,  690,  705,  708,  718,  718,  718,    0,
      733,  724,  723,  717,    0,  718,  722,  736,  722,  730,
      723,  725,  741,  738,  736,    0,    0,  729,  749,  748,

      734,  735,  741,  748,    0,    0,  743,    0,  747,    0,
      738,  750,  762,  774,    0,    0,    0,    0,    0,  767,
        0,  769,  785,  775,  777,  778,    0,  789,  794,  795,
      800,  784,    0,  798,    0,  786,  781,  786,    0,  803,
      794,  808,  800,  795,  793,  795,  812,    0,  800,    0,
      815,  805,  824,  818,  825,  840,  845,  843,    0,  847,
      838,    0,  841,  131, 1316,    0,  852,  852,  838,  858,
      844,  855,  859,    0,  850,  847,  861,  864,  856,  862,
      871,  861,  870,  863,  864,  879,  877,  894,    0,    0,
        0,  880,  898,    0,  901,    0,    0,  889,  905,  892,

        0,  907,    0,    0,    0,    0,  895,  902,  913,  900,
      910,    0,  915,  905,    0,  917,  919,  904,  918,  910,
      909,  912,    0,  911,  914,  921,    0,  931,  937,    0,
      935,  954,    0,  938,  948,  957,  953,    0,  946,  951,
      969,  963,  953,    0,  973,    0,  970,  956,  964,  966,
      959,    0,  976,  978,    0,    0,  962,  976,  972,    0,
        0,  969,  983,  988,    0,  982,  973,  985,  975,  992,
      999,    0, 1007,    0,    0, 1007,    0,    0, 1015, 1024,
     1025, 1023,    0,    0,    0, 1010,    0, 1016, 1017,    0,
     1023, 1018, 1021, 1023, 1031, 1028,    0,    0, 1033,    0,

        0, 1030, 1020,    0, 1029,    0,    0, 1041, 1033, 1031,
        0, 1033,    0, 1024, 1048, 1043, 1038, 1056, 1058, 1064,
     1074,    0, 1062, 1076, 1070, 1069, 1070, 1068, 1071, 1076,
        0, 1077,    0, 1085, 1073,    0, 1080, 1088,    0, 1091,
     1084,    0, 1091, 1085, 1086, 1099, 1096,    0, 1098, 1102,
     1097, 1105,    0, 1096, 1121,    0,    0, 1110,    0, 1116,
     1128,    0,    0, 1128,    0,    0,    0, 1123, 1137, 1125,
        0,    0,    0,    0, 1124, 1141, 1127,    0,    0, 1143,
        0, 1140, 1132, 1146,    0, 1133,    0, 1316, 1198, 1208,
     1218, 1228, 1238, 1242, 1245, 1251, 1261, 1271, 1281, 1291,

     1301, 1306, 1308
    } ;

static const flex_int16_t yy_def[604] =
    {   0,
      589,  589,  588,    3,  590,  590,  591,  591,  592,  592,
      593,  593,  588,  588,  588,  594,  588,  588,  588,  588,
      588,  588,  588,  588,  588,  588,  588,  588,  588,  595,
      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
      595,  595,  595,  595,  588,  588,  588,  588,  596,  597,
      597,  588,  598,  598,  599,  600,  600,  588,  594,  588,
      588,  601,  588,  588,  588,  588,  588,  588,  588,  595,
      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
      595,  595,  595,  595,  595,  595,  595,  595,  595,  588,

      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
      595,  595,  595,  595,  588,  588,  596,  597,  588,  598,
      588,  588,  588,  588,  588,  588,  588,  588,  588,  602,
      600,  588,  601,  588,  588,  588,  595,  595,  595,  595,
      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,

      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
      595,  595,  595,  595,  595,  595,  595,  595,  595,  588,
      588,  603,  595,  595,  595,  595,  595,  595,  595,  595,
      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,

      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
      595,  595,  595,  588,  588,  595,  595,  595,  595,  595,
      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,

      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,

      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
      595,  595,  595,  595,  595,  595,  595,    0,  588,  588,
      588,  588,  588,  588,  588,  588,  588,  588,  588,  588,

      588,  588,  588
    } ;

static const flex_int16_t yy_nxt[1388] =
    {   0,
      588,  155,   15,   15,   61,   61,  156,  156,   67,   62,
       62,   68,   67,  172,   70,   68,   70,   73,   73,   77,
       78,  156,  156,   70,  159,   70,  175,  175,  155,  176,
      176,  156,  156,  270,  271,  271,  271,  176,  176,  176,
      176,  364,  271,   79,   16,   16,   17,   18,   19,   18,
       20,   21,   22,   23,   22,   24,   25,   26,   26,   17,
       27,   28,   29,   30,   31,   32,   33,   34,   35,   36,
       37,   38,   39,   40,   41,   42,   43,   44,   45,   46,
       47,   48,   49,   50,   51,   52,   53,   54,   53,   55,
       17,   17,   30,   31,   32,   33,   34,   35,   36,   37,

       38,   39,   40,   41,   42,   43,   44,   45,   46,   47,
       48,   49,   50,   51,   52,   53,   54,   17,   56,   57,
       58,   17,   17,   17,   17,   17,  110,  115,  116,   64,
       64,   17,   17,   17,   62,   62,  271,  271,   72,   74,
       75,   75,  271,  271,   81,   71,  588,  588,  588,  588,
       76,  588,   82,  588,   83,  110,  115,  116,  588,   84,
       17,   17,   17,   56,   57,   58,   17,   17,   17,   17,
       17,   65,   65,   81,  100,  111,   17,   17,   17,   76,
       85,   82,   95,   83,   86,  121,   96,   87,   84,  112,
       97,  122,  133,  113,  588,  101,   98,  102,  114,   99,

       88,  588,  588,  151,  111,   17,   17,  103,  588,   85,
      588,   95,  588,   86,  121,   96,   87,  123,  112,   97,
      122,  133,  113,  124,  101,   98,  102,  114,   99,   88,
       89,  117,  151,  152,  153,  118,  103,   90,  130,  119,
      154,  125,  131,  177,   91,  120,  123,   92,   93,  126,
       94,  588,  124,  127,  180,  132,  128,  129,  588,   89,
      117,  181,  152,  153,  118,  588,   90,  130,  119,  154,
      125,  131,  177,   91,  120,  588,   92,   93,  126,   94,
      104,  588,  127,  180,  132,  128,  129,  148,  105,  149,
      181,  106,  150,  178,  107,  138,  182,  108,  134,  588,

      109,  179,  135,  139,   73,   73,  136,  588,  588,  104,
      140,  141,  137,  588,   76,  183,  148,  105,  149,  185,
      106,  150,  178,  107,  138,  182,  108,  134,  184,  109,
      179,  135,  139,  588,  186,  136,  174,  174,  588,  140,
      141,  137,  142,   76,  183,  192,   76,  187,  185,  143,
      144,  188,  193,   74,   75,   75,  145,  184,  194,  146,
      201,  195,  147,  186,   76,  189,  196,  190,  202,  191,
      588,  142,  588,  588,  192,   76,  187,  203,  143,  144,
      188,  193,  588,  204,  205,  145,  588,  194,  146,  201,
      195,  147,  162,   76,  189,  196,  190,  202,  191,  197,

      163,  164,  198,  206,  208,  209,  203,  165,  199,  210,
      211,  166,  204,  205,  207,  200,  212,  213,  214,  167,
      215,  216,  218,  168,  217,  169,  588,  223,  197,  170,
      224,  198,  206,  208,  209,  225,  165,  199,  210,  211,
      166,  588,  588,  207,  200,  212,  213,  214,  167,  215,
      216,  218,  168,  217,  169,  219,  223,  226,  170,  224,
      227,  229,  228,  230,  225,  220,  231,  232,  233,  234,
      221,  222,  235,  236,  237,  238,  239,  240,  242,  243,
      247,  241,  244,  248,  219,  252,  226,  245,  246,  227,
      229,  228,  230,  588,  220,  231,  232,  233,  234,  221,

      222,  235,  236,  237,  238,  239,  240,  242,  243,  247,
      241,  244,  248,  249,  252,  253,  245,  246,  254,  255,
      256,  257,  250,  258,  259,  260,  262,  263,  264,  266,
      251,  267,  261,  269,  265,  174,  174,  268,  273,  274,
      275,  276,  249,  277,  253,   76,  280,  254,  255,  256,
      257,  250,  258,  259,  260,  262,  263,  264,  266,  251,
      267,  261,  269,  265,  278,  281,  268,  273,  274,  275,
      276,  282,  277,  283,   76,  280,  279,  284,  285,  286,
      287,  288,  289,  290,  291,  292,  293,  294,  295,  296,
      297,  298,  299,  278,  281,  300,  301,  302,  303,  304,

      282,  305,  283,  306,  307,  279,  284,  285,  286,  287,
      288,  289,  290,  291,  292,  293,  294,  295,  296,  297,
      298,  299,  308,  309,  300,  301,  302,  303,  304,  310,
      305,  311,  306,  307,  312,  313,  314,  316,  317,  318,
      319,  320,  321,  322,  323,  324,  315,  325,  326,  327,
      328,  308,  309,  329,  330,  331,  333,  332,  310,  334,
      311,  335,  336,  312,  313,  314,  316,  317,  318,  319,
      320,  321,  322,  323,  324,  315,  325,  326,  327,  328,
      337,  338,  329,  330,  331,  333,  332,  339,  334,  341,
      335,  336,  342,  343,  344,  346,  347,  340,  348,  349,

      350,  351,  352,  353,  345,  354,  355,  356,  357,  337,
      338,  358,  361,  359,  362,  363,  339,  360,  341,  366,
      367,  342,  343,  344,  346,  347,  368,  348,  349,  350,
      351,  352,  353,  345,  354,  355,  356,  357,  369,  370,
      358,  361,  359,  362,  363,  371,  360,  372,  366,  367,
      373,  374,  375,  376,  377,  368,  378,  379,  380,  381,
      382,  383,  384,  385,  386,  387,  388,  369,  370,  389,
      390,  391,  392,  393,  371,  394,  372,  395,  396,  373,
      374,  375,  376,  377,  397,  378,  379,  380,  381,  382,
      383,  384,  385,  386,  387,  388,  398,  399,  389,  390,

      391,  392,  393,  401,  394,  402,  395,  396,  400,  403,
      404,  405,  406,  397,  407,  408,  409,  410,  411,  412,
      413,  414,  415,  416,  417,  398,  399,  418,  419,  420,
      421,  422,  401,  423,  402,  424,  425,  400,  403,  404,
      405,  406,  426,  407,  408,  409,  410,  411,  412,  413,
      414,  415,  416,  417,  427,  428,  418,  419,  420,  421,
      422,  429,  423,  430,  424,  425,  431,  432,  433,  434,
      435,  426,  436,  437,  438,  439,  440,  442,  443,  441,
      444,  445,  446,  427,  428,  447,  448,  449,  450,  451,
      429,  452,  430,  453,  454,  431,  432,  433,  434,  435,

      455,  436,  437,  438,  439,  440,  442,  443,  441,  444,
      445,  446,  456,  457,  447,  448,  449,  450,  451,  458,
      452,  459,  453,  454,  460,  461,  462,  463,  465,  455,
      464,  466,  467,  468,  469,  470,  471,  472,  473,  474,
      475,  456,  457,  476,  477,  478,  479,  480,  458,  481,
      459,  482,  483,  460,  461,  462,  463,  465,  484,  464,
      466,  467,  468,  469,  470,  471,  472,  473,  474,  475,
      485,  486,  476,  477,  478,  479,  480,  487,  481,  488,
      482,  483,  489,  490,  491,  492,  493,  484,  494,  495,
      496,  497,  498,  499,  500,  501,  502,  503,  504,  485,

      486,  505,  506,  507,  508,  509,  487,  510,  488,  511,
      512,  489,  490,  491,  492,  493,  513,  494,  495,  496,
      497,  498,  499,  500,  501,  502,  503,  504,  514,  515,
      505,  506,  507,  508,  509,  516,  510,  517,  511,  512,
      518,  519,  520,  521,  522,  513,  523,  524,  525,  526,
      527,  528,  529,  530,  531,  532,  533,  514,  515,  534,
      535,  536,  537,  538,  516,  539,  517,  540,  541,  518,
      519,  520,  521,  522,  542,  523,  524,  525,  526,  527,
      528,  529,  530,  531,  532,  533,  543,  544,  534,  535,
      536,  537,  538,  545,  539,  546,  540,  541,  547,  548,

      549,  550,  551,  542,  552,  553,  554,  555,  556,  557,
      558,  559,  560,  561,  562,  543,  544,  563,  564,  565,
      566,  567,  545,  568,  546,  569,  570,  547,  548,  549,
      550,  551,  571,  552,  553,  554,  555,  556,  557,  558,
      559,  560,  561,  562,  572,  573,  563,  564,  565,  566,
      567,  574,  568,  575,  569,  570,  576,  577,  578,  579,
      580,  571,  581,  582,  583,  584,  585,  586,  587,  588,
      588,  588,  588,  572,  573,  588,  588,  588,  588,  588,
      574,  588,  575,  588,  588,  576,  577,  578,  579,  580,
      588,  581,  582,  583,  584,  585,  586,  587,   14,   14,

       14,   14,   14,   14,   14,   14,   14,   14,   59,   59,
       59,   59,   59,   59,   59,   59,   59,   59,   60,   60,
       60,   60,   60,   60,   60,   60,   60,   60,   63,   63,
       63,   63,   63,   63,   63,   63,   63,   63,   66,   66,
       66,   66,   66,   66,   66,   66,   66,   66,   69,   69,
       80,   80,   80,  588,   80,  157,  157,  157,  157,  588,
      157,  158,  158,  158,  588,  158,  158,  158,  158,  158,
      158,  160,  160,  160,  588,  160,  160,  160,  160,  588,
      160,  161,  161,  161,  161,  161,  161,  161,  161,  161,
      161,  171,  171,  588,  171,  171,  171,  171,  171,  171,

      171,  173,  588,  173,  173,  173,  173,  173,  173,  173,
      173,  272,  272,  365,  365,   13,  588,  588,  588,  588,
      588,  588,  588,  588,  588,  588,  588,  588,  588,  588,
      588,  588,  588,  588,  588,  588,  588,  588,  588,  588,
      588,  588,  588,  588,  588,  588,  588,  588,  588,  588,
      588,  588,  588,  588,  588,  588,  588,  588,  588,  588,
      588,  588,  588,  588,  588,  588,  588,  588,  588,  588,
      588,  588,  588,  588,  588,  588,  588,  588,  588,  588,
      588,  588,  588,  588,  588,  588,  588
    } ;

static const flex_int16_t yy_chk[1388] =
    {   0,
        0,  155,    1,    2,    7,    8,   57,   57,   11,    7,
        8,   11,   12,   68,   18,   12,   18,   25,   25,   27,
       27,   58,   58,   70,   62,   70,   76,   76,   56,   76,
       76,  156,  156,  163,  163,  164,  164,  175,  175,  176,
      176,  270,  270,   29,    1,    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,    3,    3,    3,    3,    3,    3,    5,    5,    5,
        5,    5,    5,    5,    5,    5,   36,   39,   40,    9,
       10,    5,    5,    5,    9,   10,  271,  271,   24,   26,
       26,   26,  364,  364,   30,   20,   13,    0,    0,    0,
       26,    0,   30,    0,   30,   36,   39,   40,    0,   30,
        5,    5,    6,    6,    6,    6,    6,    6,    6,    6,
        6,    9,   10,   30,   34,   37,    6,    6,    6,   26,
       31,   30,   33,   30,   31,   42,   33,   31,   30,   37,
       33,   42,   46,   38,    0,   34,   33,   34,   38,   33,

       31,    0,    0,   51,   37,    6,    6,   34,    0,   31,
        0,   33,    0,   31,   42,   33,   31,   43,   37,   33,
       42,   46,   38,   43,   34,   33,   34,   38,   33,   31,
       32,   41,   51,   52,   52,   41,   34,   32,   45,   41,
       54,   44,   45,   81,   32,   41,   43,   32,   32,   44,
       32,    0,   43,   44,   83,   45,   44,   44,    0,   32,
       41,   84,   52,   52,   41,    0,   32,   45,   41,   54,
       44,   45,   81,   32,   41,    0,   32,   32,   44,   32,
       35,    0,   44,   83,   45,   44,   44,   50,   35,   50,
       84,   35,   50,   82,   35,   48,   85,   35,   47,    0,

       35,   82,   47,   48,   73,   73,   47,    0,    0,   35,
       48,   48,   47,    0,   73,   86,   50,   35,   50,   87,
       35,   50,   82,   35,   48,   85,   35,   47,   86,   35,
       82,   47,   48,    0,   89,   47,   74,   74,    0,   48,
       48,   47,   49,   73,   86,   92,   74,   90,   87,   49,
       49,   90,   93,   75,   75,   75,   49,   86,   94,   49,
       97,   95,   49,   89,   75,   91,   95,   91,   98,   91,
        0,   49,    0,    0,   92,   74,   90,   99,   49,   49,
       90,   93,    0,  101,  102,   49,    0,   94,   49,   97,
       95,   49,   65,   75,   91,   95,   91,   98,   91,   96,

       65,   65,   96,  103,  104,  105,   99,   65,   96,  106,
      107,   65,  101,  102,  103,   96,  107,  108,  109,   65,
      110,  111,  112,   65,  111,   65,    0,  115,   96,   65,
      116,   96,  103,  104,  105,  117,   65,   96,  106,  107,
       65,    0,    0,  103,   96,  107,  108,  109,   65,  110,
      111,  112,   65,  111,   65,  113,  115,  118,   65,  116,
      119,  120,  119,  121,  117,  113,  122,  123,  124,  125,
      113,  113,  127,  128,  129,  130,  131,  132,  133,  134,
      136,  132,  135,  137,  113,  139,  118,  135,  135,  119,
      120,  119,  121,    0,  113,  122,  123,  124,  125,  113,

      113,  127,  128,  129,  130,  131,  132,  133,  134,  136,
      132,  135,  137,  138,  139,  140,  135,  135,  141,  142,
      143,  144,  138,  146,  147,  148,  149,  150,  151,  152,
      138,  153,  148,  154,  151,  174,  174,  153,  179,  181,
      182,  183,  138,  184,  140,  174,  186,  141,  142,  143,
      144,  138,  146,  147,  148,  149,  150,  151,  152,  138,
      153,  148,  154,  151,  185,  187,  153,  179,  181,  182,
      183,  188,  184,  189,  174,  186,  185,  190,  191,  192,
      193,  194,  195,  197,  198,  199,  200,  201,  202,  203,
      204,  206,  207,  185,  187,  208,  209,  210,  211,  212,

      188,  213,  189,  214,  215,  185,  190,  191,  192,  193,
      194,  195,  197,  198,  199,  200,  201,  202,  203,  204,
      206,  207,  216,  217,  208,  209,  210,  211,  212,  218,
      213,  219,  214,  215,  220,  221,  222,  223,  225,  226,
      227,  228,  229,  230,  231,  233,  222,  235,  236,  237,
      238,  216,  217,  239,  240,  241,  242,  241,  218,  243,
      219,  244,  245,  220,  221,  222,  223,  225,  226,  227,
      228,  229,  230,  231,  233,  222,  235,  236,  237,  238,
      246,  247,  239,  240,  241,  242,  241,  248,  243,  249,
      244,  245,  250,  252,  253,  254,  255,  248,  256,  257,

      258,  259,  260,  261,  253,  261,  262,  263,  264,  246,
      247,  265,  267,  266,  268,  269,  248,  266,  249,  273,
      274,  250,  252,  253,  254,  255,  275,  256,  257,  258,
      259,  260,  261,  253,  261,  262,  263,  264,  276,  277,
      265,  267,  266,  268,  269,  278,  266,  279,  273,  274,
      281,  282,  283,  284,  286,  275,  287,  288,  289,  290,
      291,  292,  293,  294,  295,  298,  299,  276,  277,  300,
      301,  302,  303,  304,  278,  307,  279,  309,  311,  281,
      282,  283,  284,  286,  312,  287,  288,  289,  290,  291,
      292,  293,  294,  295,  298,  299,  313,  314,  300,  301,

      302,  303,  304,  320,  307,  322,  309,  311,  314,  323,
      324,  325,  326,  312,  328,  329,  330,  331,  332,  334,
      336,  337,  338,  340,  341,  313,  314,  342,  343,  344,
      345,  346,  320,  347,  322,  349,  351,  314,  323,  324,
      325,  326,  352,  328,  329,  330,  331,  332,  334,  336,
      337,  338,  340,  341,  353,  354,  342,  343,  344,  345,
      346,  355,  347,  356,  349,  351,  357,  358,  360,  361,
      363,  352,  367,  368,  369,  370,  371,  372,  373,  371,
      375,  376,  377,  353,  354,  378,  379,  380,  381,  382,
      355,  383,  356,  384,  385,  357,  358,  360,  361,  363,

      386,  367,  368,  369,  370,  371,  372,  373,  371,  375,
      376,  377,  387,  388,  378,  379,  380,  381,  382,  392,
      383,  393,  384,  385,  395,  398,  399,  400,  402,  386,
      400,  407,  408,  409,  410,  411,  413,  414,  416,  417,
      418,  387,  388,  419,  420,  421,  422,  424,  392,  425,
      393,  426,  428,  395,  398,  399,  400,  402,  429,  400,
      407,  408,  409,  410,  411,  413,  414,  416,  417,  418,
      431,  432,  419,  420,  421,  422,  424,  434,  425,  435,
      426,  428,  436,  437,  439,  440,  441,  429,  442,  443,
      445,  447,  448,  449,  450,  451,  453,  454,  457,  431,

      432,  458,  459,  462,  463,  464,  434,  466,  435,  467,
      468,  436,  437,  439,  440,  441,  469,  442,  443,  445,
      447,  448,  449,  450,  451,  453,  454,  457,  470,  471,
      458,  459,  462,  463,  464,  473,  466,  476,  467,  468,
      479,  480,  481,  482,  486,  469,  488,  489,  491,  492,
      493,  494,  495,  496,  499,  502,  503,  470,  471,  505,
      508,  509,  510,  512,  473,  514,  476,  515,  516,  479,
      480,  481,  482,  486,  517,  488,  489,  491,  492,  493,
      494,  495,  496,  499,  502,  503,  518,  519,  505,  508,
      509,  510,  512,  520,  514,  521,  515,  516,  523,  524,

      525,  526,  527,  517,  528,  529,  530,  532,  534,  535,
      537,  538,  540,  541,  543,  518,  519,  544,  545,  546,
      547,  549,  520,  550,  521,  551,  552,  523,  524,  525,
      526,  527,  554,  528,  529,  530,  532,  534,  535,  537,
      538,  540,  541,  543,  555,  558,  544,  545,  546,  547,
      549,  560,  550,  561,  551,  552,  564,  568,  569,  570,
      575,  554,  576,  577,  580,  582,  583,  584,  586,    0,
        0,    0,    0,  555,  558,    0,    0,    0,    0,    0,
      560,    0,  561,    0,    0,  564,  568,  569,  570,  575,
        0,  576,  577,  580,  582,  583,  584,  586,  589,  589,

      589,  589,  589,  589,  589,  589,  589,  589,  590,  590,
      590,  590,  590,  590,  590,  590,  590,  590,  591,  591,
      591,  591,  591,  591,  591,  591,  591,  591,  592,  592,
      592,  592,  592,  592,  592,  592,  592,  592,  593,  593,
      593,  593,  593,  593,  593,  593,  593,  593,  594,  594,
      595,  595,  595,    0,  595,  596,  596,  596,  596,    0,
      596,  597,  597,  597,    0,  597,  597,  597,  597,  597,
      597,  598,  598,  598,    0,  598,  598,  598,  598,    0,
      598,  599,  599,  599,  599,  599,  599,  599,  599,  599,
      599,  600,  600,    0,  600,  600,  600,  600,  600,  600,

      600,  601,    0,  601,  601,  601,  601,  601,  601,  601,
      601,  602,  602,  603,  603,  588,  588,  588,  588,  588,
      588,  588,  588,  588,  588,  588,  588,  588,  588,  588,
      588,  588,  588,  588,  588,  588,  588,  588,  588,  588,
      588,  588,  588,  588,  588,  588,  588,  588,  588,  588,
      588,  588,  588,  588,  588,  588,  588,  588,  588,  588,
      588,  588,  588,  588,  588,  588,  588,  588,  588,  588,
      588,  588,  588,  588,  588,  588,  588,  588,  588,  588,
      588,  588,  588,  588,  588,  588,  588
    } ;

/* Table of booleans, true if rule could match eol. */
static const flex_int32_t yy_rule_can_match_eol[165] =
    {   0,
0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 
    0, 1, 0, 0, 0,     };

/* The intent behind this definition is that it'll catch
 * any uses of REJECT which flex missed.
 */
#define REJECT reject_used_but_not_detected
#define yymore() yymore_used_but_not_detected
#define YY_MORE_ADJ 0
#define YY_RESTORE_YY_MORE_OFFSET
#line 1 "../SqlLexer.lpp"
/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 **/
#define YY_NO_INPUT 1
#define YY_NO_UNISTD_H 1
#line 29 "../SqlLexer.lpp"
#include <cstdio>
#include <string>
#include <vector>

#include "parser/ParseJoinedTableReference.hpp"
#include "parser/ParseLiteralValue.hpp"
#include "utility/PtrList.hpp"
#include "utility/PtrVector.hpp"

namespace quickstep {

class BinaryOperation;
class Comparison;
class ParseAssignment;
class ParseAttribute;
class ParseAttributeDefinition;
class ParseBlockProperties;
class ParseColumnConstraint;
class ParseCommand;
class ParseDataType;
class ParseExpression;
struct ParseFrameInfo;
class ParseFunctionCall;
class ParseGroupBy;
class ParseHaving;
class ParseKeyBoolValue;
class ParseKeyIntegerValue;
class ParseKeyStringValue;
class ParseKeyStringList;
class ParseKeyValue;
class ParseLimit;
class ParseOrderBy;
class ParseOrderByItem;
class ParsePartitionClause;
class ParsePredicate;
class ParsePriority;
class ParseSample;
class ParseScalarLiteral;
class ParseSearchedWhenClause;
class ParseSelect;
class ParseSelectionClause;
class ParseSelectionItem;
class ParseSelectionItemScalar;
class ParseSelectionList;
class ParseSetOperation;
class ParseSimpleTableReference;
class ParseSimpleWhenClause;
class ParseStringKeyLiteralValues;
class ParseStatement;
class ParseStatementCopy;
class ParseStatementCreateTable;
class ParseStatementDelete;
class ParseStatementDropTable;
class ParseStatementInsert;
class ParseStatementInsertTuple;
class ParseStatementInsertSelection;
class ParseStatementSetOperation;
class ParseStatementQuit;
class ParseStatementUpdate;
class ParseSubqueryExpression;
class ParseSubqueryTableReference;
class ParseTableReference;
class ParseTableReferenceSignature;
class ParseWindow;
class Type;
class UnaryOperation;

}  // namespace quickstep

#include "parser/ParseString.hpp"
#include "parser/SqlParser_gen.hpp"
#include "parser/ParserUtil.hpp"

#define YY_USER_ACTION                                    \
  {                                                       \
    yylloc->first_line = yylineno;                        \
    yylloc->first_column = yycolumn;                      \
    yycolumn += yyleng;                                   \
  }

#line 1292 "SqlLexer_gen.cpp"
/* FIXME(chasseur, qzeng): Add support for hexadecimal literals. */
/**
 * These patterns are based on the SQL-2011 standard for syntax of numeric
 * literals (Part 2, Section 5.3 of the standard).
 **/

#line 1299 "SqlLexer_gen.cpp"

#define INITIAL 0
#define CONDITION_SQL 1
#define CONDITION_COMMAND 2
#define CONDITION_STRING_SINGLE_QUOTED 3
#define CONDITION_STRING_SINGLE_QUOTED_ESCAPED 4
#define CONDITION_STRING_DOUBLE_QUOTED 5

#ifndef YY_NO_UNISTD_H
/* Special case for "unistd.h", since it is non-ANSI. We include it way
 * down here because we want the user's section 1 to have been scanned first.
 * The user has a chance to override it with an option.
 */
#include <unistd.h>
#endif

#ifndef YY_EXTRA_TYPE
#define YY_EXTRA_TYPE void *
#endif

/* Holds the entire state of the reentrant scanner. */
struct yyguts_t
    {

    /* User-defined. Not touched by flex. */
    YY_EXTRA_TYPE yyextra_r;

    /* The rest are the same as the globals declared in the non-reentrant scanner. */
    FILE *yyin_r, *yyout_r;
    size_t yy_buffer_stack_top; /**< index of top of stack. */
    size_t yy_buffer_stack_max; /**< capacity of stack. */
    YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */
    char yy_hold_char;
    int yy_n_chars;
    int yyleng_r;
    char *yy_c_buf_p;
    int yy_init;
    int yy_start;
    int yy_did_buffer_switch_on_eof;
    int yy_start_stack_ptr;
    int yy_start_stack_depth;
    int *yy_start_stack;
    yy_state_type yy_last_accepting_state;
    char* yy_last_accepting_cpos;

    int yylineno_r;
    int yy_flex_debug_r;

    char *yytext_r;
    int yy_more_flag;
    int yy_more_len;

    YYSTYPE * yylval_r;

    YYLTYPE * yylloc_r;

    }; /* end struct yyguts_t */

static int yy_init_globals ( yyscan_t yyscanner );

    /* This must go here because YYSTYPE and YYLTYPE are included
     * from bison output in section 1.*/
    #    define yylval yyg->yylval_r
    
    #    define yylloc yyg->yylloc_r
    
int yylex_init (yyscan_t* scanner);

int yylex_init_extra ( YY_EXTRA_TYPE user_defined, yyscan_t* scanner);

/* Accessor methods to globals.
   These are made visible to non-reentrant scanners for convenience. */

int yylex_destroy ( yyscan_t yyscanner );

int yyget_debug ( yyscan_t yyscanner );

void yyset_debug ( int debug_flag , yyscan_t yyscanner );

YY_EXTRA_TYPE yyget_extra ( yyscan_t yyscanner );

void yyset_extra ( YY_EXTRA_TYPE user_defined , yyscan_t yyscanner );

FILE *yyget_in ( yyscan_t yyscanner );

void yyset_in  ( FILE * _in_str , yyscan_t yyscanner );

FILE *yyget_out ( yyscan_t yyscanner );

void yyset_out  ( FILE * _out_str , yyscan_t yyscanner );

			int yyget_leng ( yyscan_t yyscanner );

char *yyget_text ( yyscan_t yyscanner );

int yyget_lineno ( yyscan_t yyscanner );

void yyset_lineno ( int _line_number , yyscan_t yyscanner );

int yyget_column  ( yyscan_t yyscanner );

void yyset_column ( int _column_no , yyscan_t yyscanner );

YYSTYPE * yyget_lval ( yyscan_t yyscanner );

void yyset_lval ( YYSTYPE * yylval_param , yyscan_t yyscanner );

       YYLTYPE *yyget_lloc ( yyscan_t yyscanner );
    
        void yyset_lloc ( YYLTYPE * yylloc_param , yyscan_t yyscanner );
    
/* Macros after this point can all be overridden by user definitions in
 * section 1.
 */

#ifndef YY_SKIP_YYWRAP
#ifdef __cplusplus
extern "C" int yywrap ( yyscan_t yyscanner );
#else
extern int yywrap ( yyscan_t yyscanner );
#endif
#endif

#ifndef YY_NO_UNPUT
    
#endif

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

#ifdef YY_NEED_STRLEN
static int yy_flex_strlen ( const char * , yyscan_t yyscanner);
#endif

#ifndef YY_NO_INPUT
#ifdef __cplusplus
static int yyinput ( yyscan_t yyscanner );
#else
static int input ( yyscan_t yyscanner );
#endif

#endif

/* Amount of stuff to slurp up with each read. */
#ifndef YY_READ_BUF_SIZE
#ifdef __ia64__
/* On IA-64, the buffer size is 16k, not 8k */
#define YY_READ_BUF_SIZE 16384
#else
#define YY_READ_BUF_SIZE 8192
#endif /* __ia64__ */
#endif

/* Copy whatever the last rule matched to the standard output. */
#ifndef ECHO
/* This used to be an fputs(), but since the string might contain NUL's,
 * we now use fwrite().
 */
#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0)
#endif

/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
 * is returned in "result".
 */
#ifndef YY_INPUT
#define YY_INPUT(buf,result,max_size) \
	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
		{ \
		int c = '*'; \
		int n; \
		for ( n = 0; n < max_size && \
			     (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
			buf[n] = (char) c; \
		if ( c == '\n' ) \
			buf[n++] = (char) c; \
		if ( c == EOF && ferror( yyin ) ) \
			YY_FATAL_ERROR( "input in flex scanner failed" ); \
		result = n; \
		} \
	else \
		{ \
		errno=0; \
		while ( (result = (int) fread(buf, 1, (yy_size_t) max_size, yyin)) == 0 && ferror(yyin)) \
			{ \
			if( errno != EINTR) \
				{ \
				YY_FATAL_ERROR( "input in flex scanner failed" ); \
				break; \
				} \
			errno=0; \
			clearerr(yyin); \
			} \
		}\
\

#endif

/* No semi-colon after return; correct usage is to write "yyterminate();" -
 * we don't want an extra ';' after the "return" because that will cause
 * some compilers to complain about unreachable statements.
 */
#ifndef yyterminate
#define yyterminate() return YY_NULL
#endif

/* Number of entries by which start-condition stack grows. */
#ifndef YY_START_STACK_INCR
#define YY_START_STACK_INCR 25
#endif

/* Report a fatal error. */
#ifndef YY_FATAL_ERROR
#define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner)
#endif

/* end tables serialization structures and prototypes */

/* Default declaration of generated scanner - a define so the user can
 * easily add parameters.
 */
#ifndef YY_DECL
#define YY_DECL_IS_OURS 1

extern int yylex \
               (YYSTYPE * yylval_param, YYLTYPE * yylloc_param , yyscan_t yyscanner);

#define YY_DECL int yylex \
               (YYSTYPE * yylval_param, YYLTYPE * yylloc_param , yyscan_t yyscanner)
#endif /* !YY_DECL */

/* Code executed at the beginning of each rule, after yytext and yyleng
 * have been set up.
 */
#ifndef YY_USER_ACTION
#define YY_USER_ACTION
#endif

/* Code executed at the end of each rule. */
#ifndef YY_BREAK
#define YY_BREAK /*LINTED*/break;
#endif

#define YY_RULE_SETUP \
	YY_USER_ACTION

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

    yylval = yylval_param;

    yylloc = yylloc_param;

	if ( !yyg->yy_init )
		{
		yyg->yy_init = 1;

#ifdef YY_USER_INIT
		YY_USER_INIT;
#endif

		if ( ! yyg->yy_start )
			yyg->yy_start = 1;	/* first start state */

		if ( ! yyin )
			yyin = stdin;

		if ( ! yyout )
			yyout = stdout;

		if ( ! YY_CURRENT_BUFFER ) {
			yyensure_buffer_stack (yyscanner);
			YY_CURRENT_BUFFER_LVALUE =
				yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner);
		}

		yy_load_buffer_state( yyscanner );
		}

	{
#line 132 "../SqlLexer.lpp"


#line 1589 "SqlLexer_gen.cpp"

	while ( /*CONSTCOND*/1 )		/* loops until end-of-file is reached */
		{
		yy_cp = yyg->yy_c_buf_p;

		/* Support of yytext. */
		*yy_cp = yyg->yy_hold_char;

		/* yy_bp points to the position in yy_ch_buf of the start of
		 * the current run.
		 */
		yy_bp = yy_cp;

		yy_current_state = yyg->yy_start;
yy_match:
		do
			{
			YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
			if ( yy_accept[yy_current_state] )
				{
				yyg->yy_last_accepting_state = yy_current_state;
				yyg->yy_last_accepting_cpos = yy_cp;
				}
			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
				{
				yy_current_state = (int) yy_def[yy_current_state];
				if ( yy_current_state >= 589 )
					yy_c = yy_meta[yy_c];
				}
			yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
			++yy_cp;
			}
		while ( yy_current_state != 588 );
		yy_cp = yyg->yy_last_accepting_cpos;
		yy_current_state = yyg->yy_last_accepting_state;

yy_find_action:
		yy_act = yy_accept[yy_current_state];

		YY_DO_BEFORE_ACTION;

		if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] )
			{
			int yyl;
			for ( yyl = 0; yyl < yyleng; ++yyl )
				if ( yytext[yyl] == '\n' )
					
    do{ yylineno++;
        yycolumn=0;
    }while(0)
;
			}

do_action:	/* This label is used only to access EOF actions. */

		switch ( yy_act )
	{ /* beginning of action switch */
			case 0: /* must back up */
			/* undo the effects of YY_DO_BEFORE_ACTION */
			*yy_cp = yyg->yy_hold_char;
			yy_cp = yyg->yy_last_accepting_cpos;
			yy_current_state = yyg->yy_last_accepting_state;
			goto yy_find_action;

case 1:
YY_RULE_SETUP
#line 135 "../SqlLexer.lpp"
{
    /* A forward slash character represents a system command. */
    BEGIN(CONDITION_COMMAND);
    yylval->string_value_ = new quickstep::ParseString(
        yylloc->first_line, yylloc->first_column, std::string(yytext, yyleng));
    return TOKEN_COMMAND;
  }
	YY_BREAK
case 2:
/* rule 2 can match eol */
YY_RULE_SETUP
#line 143 "../SqlLexer.lpp"
{
    /* This is a SQL command. Place the char back and process normally. */
    yyless(0);
    yycolumn--;
    BEGIN(CONDITION_SQL);
  }
	YY_BREAK


case 3:
YY_RULE_SETUP
#line 152 "../SqlLexer.lpp"
{
    /* This is a command argument. */
    yylval->string_value_ = new quickstep::ParseString(
        yylloc->first_line, yylloc->first_column, std::string(yytext, yyleng));
    return TOKEN_COMMAND;
  }
	YY_BREAK
case 4:
YY_RULE_SETUP
#line 159 "../SqlLexer.lpp"
{
    /* Ignore whitespace. */
  }
	YY_BREAK
case 5:
/* rule 5 can match eol */
YY_RULE_SETUP
#line 163 "../SqlLexer.lpp"
{
    /* Newline reverts the lexer to the initial state. */
    yycolumn = 0;
    BEGIN(INITIAL);
    return '\n';
  }
	YY_BREAK


case 6:
YY_RULE_SETUP
#line 172 "../SqlLexer.lpp"
return TOKEN_ADD;
	YY_BREAK
case 7:
YY_RULE_SETUP
#line 173 "../SqlLexer.lpp"
return TOKEN_ALL;
	YY_BREAK
case 8:
YY_RULE_SETUP
#line 174 "../SqlLexer.lpp"
return TOKEN_ALTER;
	YY_BREAK
case 9:
YY_RULE_SETUP
#line 175 "../SqlLexer.lpp"
return TOKEN_AND;
	YY_BREAK
case 10:
YY_RULE_SETUP
#line 176 "../SqlLexer.lpp"
return TOKEN_AS;
	YY_BREAK
case 11:
YY_RULE_SETUP
#line 177 "../SqlLexer.lpp"
return TOKEN_ASC;
	YY_BREAK
case 12:
YY_RULE_SETUP
#line 178 "../SqlLexer.lpp"
return TOKEN_ASC;
	YY_BREAK
case 13:
YY_RULE_SETUP
#line 179 "../SqlLexer.lpp"
return TOKEN_BETWEEN;
	YY_BREAK
case 14:
YY_RULE_SETUP
#line 180 "../SqlLexer.lpp"
return TOKEN_BIGINT;
	YY_BREAK
case 15:
YY_RULE_SETUP
#line 181 "../SqlLexer.lpp"
return TOKEN_BIT;
	YY_BREAK
case 16:
YY_RULE_SETUP
#line 182 "../SqlLexer.lpp"
return TOKEN_BITWEAVING;
	YY_BREAK
case 17:
YY_RULE_SETUP
#line 183 "../SqlLexer.lpp"
return TOKEN_BLOCKPROPERTIES;
	YY_BREAK
case 18:
YY_RULE_SETUP
#line 184 "../SqlLexer.lpp"
return TOKEN_BLOCKSAMPLE;
	YY_BREAK
case 19:
YY_RULE_SETUP
#line 185 "../SqlLexer.lpp"
return TOKEN_BLOOM_FILTER;
	YY_BREAK
case 20:
YY_RULE_SETUP
#line 186 "../SqlLexer.lpp"
return TOKEN_CASE;
	YY_BREAK
case 21:
YY_RULE_SETUP
#line 187 "../SqlLexer.lpp"
return TOKEN_CSB_TREE;
	YY_BREAK
case 22:
YY_RULE_SETUP
#line 188 "../SqlLexer.lpp"
return TOKEN_BY;
	YY_BREAK
case 23:
YY_RULE_SETUP
#line 189 "../SqlLexer.lpp"
return TOKEN_CHARACTER;
	YY_BREAK
case 24:
YY_RULE_SETUP
#line 190 "../SqlLexer.lpp"
return TOKEN_CHARACTER;
	YY_BREAK
case 25:
YY_RULE_SETUP
#line 191 "../SqlLexer.lpp"
return TOKEN_CHECK;
	YY_BREAK
case 26:
YY_RULE_SETUP
#line 192 "../SqlLexer.lpp"
return TOKEN_COLUMN;
	YY_BREAK
case 27:
YY_RULE_SETUP
#line 193 "../SqlLexer.lpp"
return TOKEN_CONSTRAINT;
	YY_BREAK
case 28:
YY_RULE_SETUP
#line 194 "../SqlLexer.lpp"
return TOKEN_COPY;
	YY_BREAK
case 29:
YY_RULE_SETUP
#line 195 "../SqlLexer.lpp"
return TOKEN_CREATE;
	YY_BREAK
case 30:
YY_RULE_SETUP
#line 196 "../SqlLexer.lpp"
return TOKEN_CURRENT;
	YY_BREAK
case 31:
YY_RULE_SETUP
#line 197 "../SqlLexer.lpp"
return TOKEN_DATE;
	YY_BREAK
case 32:
YY_RULE_SETUP
#line 198 "../SqlLexer.lpp"
return TOKEN_DATETIME;
	YY_BREAK
case 33:
YY_RULE_SETUP
#line 199 "../SqlLexer.lpp"
return TOKEN_DAY;
	YY_BREAK
case 34:
YY_RULE_SETUP
#line 200 "../SqlLexer.lpp"
return TOKEN_DECIMAL;
	YY_BREAK
case 35:
YY_RULE_SETUP
#line 201 "../SqlLexer.lpp"
return TOKEN_DEFAULT;
	YY_BREAK
case 36:
YY_RULE_SETUP
#line 202 "../SqlLexer.lpp"
return TOKEN_DELETE;
	YY_BREAK
case 37:
YY_RULE_SETUP
#line 203 "../SqlLexer.lpp"
return TOKEN_DESC;
	YY_BREAK
case 38:
YY_RULE_SETUP
#line 204 "../SqlLexer.lpp"
return TOKEN_DESC;
	YY_BREAK
case 39:
YY_RULE_SETUP
#line 205 "../SqlLexer.lpp"
return TOKEN_DISTINCT;
	YY_BREAK
case 40:
YY_RULE_SETUP
#line 206 "../SqlLexer.lpp"
return TOKEN_DOUBLE;
	YY_BREAK
case 41:
YY_RULE_SETUP
#line 207 "../SqlLexer.lpp"
return TOKEN_DROP;
	YY_BREAK
case 42:
YY_RULE_SETUP
#line 208 "../SqlLexer.lpp"
return TOKEN_ELSE;
	YY_BREAK
case 43:
YY_RULE_SETUP
#line 209 "../SqlLexer.lpp"
return TOKEN_END;
	YY_BREAK
case 44:
YY_RULE_SETUP
#line 210 "../SqlLexer.lpp"
return TOKEN_EXISTS;
	YY_BREAK
case 45:
YY_RULE_SETUP
#line 211 "../SqlLexer.lpp"
return TOKEN_EXTRACT;
	YY_BREAK
case 46:
YY_RULE_SETUP
#line 212 "../SqlLexer.lpp"
return TOKEN_FALSE;
	YY_BREAK
case 47:
YY_RULE_SETUP
#line 213 "../SqlLexer.lpp"
return TOKEN_FIRST;
	YY_BREAK
case 48:
YY_RULE_SETUP
#line 214 "../SqlLexer.lpp"
return TOKEN_FLOAT;
	YY_BREAK
case 49:
YY_RULE_SETUP
#line 215 "../SqlLexer.lpp"
return TOKEN_FOLLOWING;
	YY_BREAK
case 50:
YY_RULE_SETUP
#line 216 "../SqlLexer.lpp"
return TOKEN_FOR;
	YY_BREAK
case 51:
YY_RULE_SETUP
#line 217 "../SqlLexer.lpp"
return TOKEN_FOREIGN;
	YY_BREAK
case 52:
YY_RULE_SETUP
#line 218 "../SqlLexer.lpp"
return TOKEN_FROM;
	YY_BREAK
case 53:
YY_RULE_SETUP
#line 219 "../SqlLexer.lpp"
return TOKEN_FULL;
	YY_BREAK
case 54:
YY_RULE_SETUP
#line 220 "../SqlLexer.lpp"
return TOKEN_GROUP;
	YY_BREAK
case 55:
YY_RULE_SETUP
#line 221 "../SqlLexer.lpp"
return TOKEN_HASH;
	YY_BREAK
case 56:
YY_RULE_SETUP
#line 222 "../SqlLexer.lpp"
return TOKEN_HAVING;
	YY_BREAK
case 57:
YY_RULE_SETUP
#line 223 "../SqlLexer.lpp"
return TOKEN_HOUR;
	YY_BREAK
case 58:
YY_RULE_SETUP
#line 224 "../SqlLexer.lpp"
return TOKEN_IN;
	YY_BREAK
case 59:
YY_RULE_SETUP
#line 225 "../SqlLexer.lpp"
return TOKEN_INDEX;
	YY_BREAK
case 60:
YY_RULE_SETUP
#line 226 "../SqlLexer.lpp"
return TOKEN_INNER;
	YY_BREAK
case 61:
YY_RULE_SETUP
#line 227 "../SqlLexer.lpp"
return TOKEN_INSERT;
	YY_BREAK
case 62:
YY_RULE_SETUP
#line 228 "../SqlLexer.lpp"
return TOKEN_INTEGER;
	YY_BREAK
case 63:
YY_RULE_SETUP
#line 229 "../SqlLexer.lpp"
return TOKEN_INTEGER;
	YY_BREAK
case 64:
YY_RULE_SETUP
#line 230 "../SqlLexer.lpp"
return TOKEN_INTERSECT;
	YY_BREAK
case 65:
YY_RULE_SETUP
#line 231 "../SqlLexer.lpp"
return TOKEN_INTERVAL;
	YY_BREAK
case 66:
YY_RULE_SETUP
#line 232 "../SqlLexer.lpp"
return TOKEN_INTO;
	YY_BREAK
case 67:
YY_RULE_SETUP
#line 233 "../SqlLexer.lpp"
return TOKEN_IS;
	YY_BREAK
case 68:
YY_RULE_SETUP
#line 234 "../SqlLexer.lpp"
return TOKEN_JOIN;
	YY_BREAK
case 69:
YY_RULE_SETUP
#line 235 "../SqlLexer.lpp"
return TOKEN_KEY;
	YY_BREAK
case 70:
YY_RULE_SETUP
#line 236 "../SqlLexer.lpp"
return TOKEN_LAST;
	YY_BREAK
case 71:
YY_RULE_SETUP
#line 237 "../SqlLexer.lpp"
return TOKEN_LEFT;
	YY_BREAK
case 72:
YY_RULE_SETUP
#line 238 "../SqlLexer.lpp"
return TOKEN_LIKE;
	YY_BREAK
case 73:
YY_RULE_SETUP
#line 239 "../SqlLexer.lpp"
return TOKEN_LIMIT;
	YY_BREAK
case 74:
YY_RULE_SETUP
#line 240 "../SqlLexer.lpp"
return TOKEN_LONG;
	YY_BREAK
case 75:
YY_RULE_SETUP
#line 241 "../SqlLexer.lpp"
return TOKEN_MINUTE;
	YY_BREAK
case 76:
YY_RULE_SETUP
#line 242 "../SqlLexer.lpp"
return TOKEN_MONTH;
	YY_BREAK
case 77:
YY_RULE_SETUP
#line 243 "../SqlLexer.lpp"
return TOKEN_NOT;
	YY_BREAK
case 78:
YY_RULE_SETUP
#line 244 "../SqlLexer.lpp"
return TOKEN_NULL;
	YY_BREAK
case 79:
YY_RULE_SETUP
#line 245 "../SqlLexer.lpp"
return TOKEN_NULLS;
	YY_BREAK
case 80:
YY_RULE_SETUP
#line 246 "../SqlLexer.lpp"
return TOKEN_OFF;
	YY_BREAK
case 81:
YY_RULE_SETUP
#line 247 "../SqlLexer.lpp"
return TOKEN_ON;
	YY_BREAK
case 82:
YY_RULE_SETUP
#line 248 "../SqlLexer.lpp"
return TOKEN_OR;
	YY_BREAK
case 83:
YY_RULE_SETUP
#line 249 "../SqlLexer.lpp"
return TOKEN_ORDER;
	YY_BREAK
case 84:
YY_RULE_SETUP
#line 250 "../SqlLexer.lpp"
return TOKEN_OUTER;
	YY_BREAK
case 85:
YY_RULE_SETUP
#line 251 "../SqlLexer.lpp"
return TOKEN_OVER;
	YY_BREAK
case 86:
YY_RULE_SETUP
#line 252 "../SqlLexer.lpp"
return TOKEN_PARTITION;
	YY_BREAK
case 87:
YY_RULE_SETUP
#line 253 "../SqlLexer.lpp"
return TOKEN_PARTITIONS;
	YY_BREAK
case 88:
YY_RULE_SETUP
#line 254 "../SqlLexer.lpp"
return TOKEN_PERCENT;
	YY_BREAK
case 89:
YY_RULE_SETUP
#line 255 "../SqlLexer.lpp"
return TOKEN_PRECEDING;
	YY_BREAK
case 90:
YY_RULE_SETUP
#line 256 "../SqlLexer.lpp"
return TOKEN_PRIMARY;
	YY_BREAK
case 91:
YY_RULE_SETUP
#line 257 "../SqlLexer.lpp"
return TOKEN_PRIORITY;
	YY_BREAK
case 92:
YY_RULE_SETUP
#line 258 "../SqlLexer.lpp"
return TOKEN_QUIT;
	YY_BREAK
case 93:
YY_RULE_SETUP
#line 259 "../SqlLexer.lpp"
return TOKEN_RANGE;
	YY_BREAK
case 94:
YY_RULE_SETUP
#line 260 "../SqlLexer.lpp"
return TOKEN_REAL;
	YY_BREAK
case 95:
YY_RULE_SETUP
#line 261 "../SqlLexer.lpp"
return TOKEN_REFERENCES;
	YY_BREAK
case 96:
YY_RULE_SETUP
#line 262 "../SqlLexer.lpp"
return TOKEN_REGEXP;
	YY_BREAK
case 97:
YY_RULE_SETUP
#line 263 "../SqlLexer.lpp"
return TOKEN_RIGHT;
	YY_BREAK
case 98:
YY_RULE_SETUP
#line 264 "../SqlLexer.lpp"
return TOKEN_ROW;
	YY_BREAK
case 99:
YY_RULE_SETUP
#line 265 "../SqlLexer.lpp"
return TOKEN_ROW_DELIMITER;
	YY_BREAK
case 100:
YY_RULE_SETUP
#line 266 "../SqlLexer.lpp"
return TOKEN_ROWS;
	YY_BREAK
case 101:
YY_RULE_SETUP
#line 267 "../SqlLexer.lpp"
return TOKEN_SECOND;
	YY_BREAK
case 102:
YY_RULE_SETUP
#line 268 "../SqlLexer.lpp"
return TOKEN_SELECT;
	YY_BREAK
case 103:
YY_RULE_SETUP
#line 269 "../SqlLexer.lpp"
return TOKEN_SET;
	YY_BREAK
case 104:
YY_RULE_SETUP
#line 270 "../SqlLexer.lpp"
return TOKEN_SMA;
	YY_BREAK
case 105:
YY_RULE_SETUP
#line 271 "../SqlLexer.lpp"
return TOKEN_SMALLINT;
	YY_BREAK
case 106:
YY_RULE_SETUP
#line 272 "../SqlLexer.lpp"
return TOKEN_STDERR;
	YY_BREAK
case 107:
YY_RULE_SETUP
#line 273 "../SqlLexer.lpp"
return TOKEN_STDOUT;
	YY_BREAK
case 108:
YY_RULE_SETUP
#line 274 "../SqlLexer.lpp"
return TOKEN_SUBSTRING;
	YY_BREAK
case 109:
YY_RULE_SETUP
#line 275 "../SqlLexer.lpp"
return TOKEN_TABLE;
	YY_BREAK
case 110:
YY_RULE_SETUP
#line 276 "../SqlLexer.lpp"
return TOKEN_THEN;
	YY_BREAK
case 111:
YY_RULE_SETUP
#line 277 "../SqlLexer.lpp"
return TOKEN_TIME;
	YY_BREAK
case 112:
YY_RULE_SETUP
#line 278 "../SqlLexer.lpp"
return TOKEN_TIMESTAMP;
	YY_BREAK
case 113:
YY_RULE_SETUP
#line 279 "../SqlLexer.lpp"
return TOKEN_TO;
	YY_BREAK
case 114:
YY_RULE_SETUP
#line 280 "../SqlLexer.lpp"
return TOKEN_TRUE;
	YY_BREAK
case 115:
YY_RULE_SETUP
#line 281 "../SqlLexer.lpp"
return TOKEN_TUPLESAMPLE;
	YY_BREAK
case 116:
YY_RULE_SETUP
#line 282 "../SqlLexer.lpp"
return TOKEN_UNBOUNDED;
	YY_BREAK
case 117:
YY_RULE_SETUP
#line 283 "../SqlLexer.lpp"
return TOKEN_UNION;
	YY_BREAK
case 118:
YY_RULE_SETUP
#line 284 "../SqlLexer.lpp"
return TOKEN_UNIQUE;
	YY_BREAK
case 119:
YY_RULE_SETUP
#line 285 "../SqlLexer.lpp"
return TOKEN_UPDATE;
	YY_BREAK
case 120:
YY_RULE_SETUP
#line 286 "../SqlLexer.lpp"
return TOKEN_USING;
	YY_BREAK
case 121:
YY_RULE_SETUP
#line 287 "../SqlLexer.lpp"
return TOKEN_VALUES;
	YY_BREAK
case 122:
YY_RULE_SETUP
#line 288 "../SqlLexer.lpp"
return TOKEN_VARCHAR;
	YY_BREAK
case 123:
YY_RULE_SETUP
#line 289 "../SqlLexer.lpp"
return TOKEN_WHEN;
	YY_BREAK
case 124:
YY_RULE_SETUP
#line 290 "../SqlLexer.lpp"
return TOKEN_WHERE;
	YY_BREAK
case 125:
YY_RULE_SETUP
#line 291 "../SqlLexer.lpp"
return TOKEN_WINDOW;
	YY_BREAK
case 126:
YY_RULE_SETUP
#line 292 "../SqlLexer.lpp"
return TOKEN_WITH;
	YY_BREAK
case 127:
YY_RULE_SETUP
#line 293 "../SqlLexer.lpp"
return TOKEN_YEAR;
	YY_BREAK
case 128:
YY_RULE_SETUP
#line 294 "../SqlLexer.lpp"
return TOKEN_YEARMONTH;
	YY_BREAK
case 129:
YY_RULE_SETUP
#line 296 "../SqlLexer.lpp"
return TOKEN_EQ;
	YY_BREAK
case 130:
YY_RULE_SETUP
#line 297 "../SqlLexer.lpp"
return TOKEN_NEQ;
	YY_BREAK
case 131:
YY_RULE_SETUP
#line 298 "../SqlLexer.lpp"
return TOKEN_NEQ;
	YY_BREAK
case 132:
YY_RULE_SETUP
#line 299 "../SqlLexer.lpp"
return TOKEN_LT;
	YY_BREAK
case 133:
YY_RULE_SETUP
#line 300 "../SqlLexer.lpp"
return TOKEN_GT;
	YY_BREAK
case 134:
YY_RULE_SETUP
#line 301 "../SqlLexer.lpp"
return TOKEN_LEQ;
	YY_BREAK
case 135:
YY_RULE_SETUP
#line 302 "../SqlLexer.lpp"
return TOKEN_GEQ;
	YY_BREAK
case 136:
YY_RULE_SETUP
#line 304 "../SqlLexer.lpp"
return yytext[0];
	YY_BREAK
case 137:
YY_RULE_SETUP
#line 305 "../SqlLexer.lpp"
return yytext[0];
	YY_BREAK
/**
    * Quoted strings. Prefacing a string with an 'e' or 'E' causes escape
    * sequences to be processed (as in PostgreSQL).
    **/
case 138:
YY_RULE_SETUP
#line 311 "../SqlLexer.lpp"
{
    yylval->string_value_ = new quickstep::ParseString(yylloc->first_line, yylloc->first_column);
    BEGIN(CONDITION_STRING_SINGLE_QUOTED_ESCAPED);
  }
	YY_BREAK
case 139:
YY_RULE_SETUP
#line 316 "../SqlLexer.lpp"
{
    yylval->string_value_ = new quickstep::ParseString(yylloc->first_line, yylloc->first_column);
    BEGIN(CONDITION_STRING_SINGLE_QUOTED);
  }
	YY_BREAK
case 140:
YY_RULE_SETUP
#line 321 "../SqlLexer.lpp"
{
    yylval->string_value_ = new quickstep::ParseString(yylloc->first_line, yylloc->first_column);
    BEGIN(CONDITION_STRING_DOUBLE_QUOTED);
  }
	YY_BREAK
/* CONDITION_SQL */
/* Catch an unterminated string. */

case YY_STATE_EOF(CONDITION_STRING_SINGLE_QUOTED):
case YY_STATE_EOF(CONDITION_STRING_SINGLE_QUOTED_ESCAPED):
case YY_STATE_EOF(CONDITION_STRING_DOUBLE_QUOTED):
#line 330 "../SqlLexer.lpp"
{
    delete yylval->string_value_;
    BEGIN(INITIAL);
    quickstep_yyerror(NULL, yyscanner, NULL, "unterminated string");
    return TOKEN_LEX_ERROR;
  }
	YY_BREAK

/* Process escape sequences. */

case 141:
YY_RULE_SETUP
#line 340 "../SqlLexer.lpp"
{
    /* Octal code */
    unsigned int code;
    std::sscanf(yytext + 1, "%o", &code);
    if (code > 0xff) {
      delete yylval->string_value_;
      BEGIN(INITIAL);
      quickstep_yyerror(NULL, yyscanner, NULL, "octal escape sequence out of 1-byte range");
      return TOKEN_LEX_ERROR;
    }
    yylval->string_value_->push_back(code);
  }
	YY_BREAK
case 142:
YY_RULE_SETUP
#line 352 "../SqlLexer.lpp"
{
    /* Hexadecimal code */
    unsigned int code;
    std::sscanf(yytext + 2, "%x", &code);
    yylval->string_value_->push_back(code);
  }
	YY_BREAK
case 143:
YY_RULE_SETUP
#line 358 "../SqlLexer.lpp"
{
    /* A numeric escape sequence that isn't correctly specified. */
    delete yylval->string_value_;
    BEGIN(INITIAL);
    quickstep_yyerror(NULL, yyscanner, NULL, "bad numeric escape sequence (must be octal or hex)");
    return TOKEN_LEX_ERROR;
  }
	YY_BREAK
case 144:
YY_RULE_SETUP
#line 365 "../SqlLexer.lpp"
{
    /* Backspace */
    yylval->string_value_->push_back('\b');
  }
	YY_BREAK
case 145:
YY_RULE_SETUP
#line 369 "../SqlLexer.lpp"
{
    /* Form-feed */
    yylval->string_value_->push_back('\f');
  }
	YY_BREAK
case 146:
YY_RULE_SETUP
#line 373 "../SqlLexer.lpp"
{
    /* Newline */
    yylval->string_value_->push_back('\n');
  }
	YY_BREAK
case 147:
YY_RULE_SETUP
#line 377 "../SqlLexer.lpp"
{
    /* Carriage-return */
    yylval->string_value_->push_back('\r');
  }
	YY_BREAK
case 148:
YY_RULE_SETUP
#line 381 "../SqlLexer.lpp"
{
    /* Horizontal Tab */
    yylval->string_value_->push_back('\t');
  }
	YY_BREAK
case 149:
/* rule 149 can match eol */
YY_RULE_SETUP
#line 385 "../SqlLexer.lpp"
{
    /* Any other character (including actual newline or carriage return) */
    yylval->string_value_->push_back(yytext[1]);
  }
	YY_BREAK
case 150:
YY_RULE_SETUP
#line 389 "../SqlLexer.lpp"
{
    /* This should only be encountered right before an EOF. */
    delete yylval->string_value_;
    BEGIN(INITIAL);
    quickstep_yyerror(NULL, yyscanner, NULL, "unfinished escape sequence");
    return TOKEN_LEX_ERROR;
  }
	YY_BREAK


case 151:
YY_RULE_SETUP
#line 399 "../SqlLexer.lpp"
{
    /* Two quotes in a row become a single quote (this is specified by the SQL standard). */
    yylval->string_value_->push_back('\'');
  }
	YY_BREAK
case 152:
YY_RULE_SETUP
#line 403 "../SqlLexer.lpp"
{
    /* End string */
    BEGIN(CONDITION_SQL);
    return TOKEN_STRING_SINGLE_QUOTED;
  }
	YY_BREAK


case 153:
YY_RULE_SETUP
#line 411 "../SqlLexer.lpp"
{
    /* Two quotes in a row become a single quote (this is specified by the SQL standard). */
    yylval->string_value_->push_back('"');
  }
	YY_BREAK
case 154:
YY_RULE_SETUP
#line 415 "../SqlLexer.lpp"
{
    /* End string */
    BEGIN(CONDITION_SQL);
    return TOKEN_STRING_DOUBLE_QUOTED;
  }
	YY_BREAK

case 155:
/* rule 155 can match eol */
YY_RULE_SETUP
#line 422 "../SqlLexer.lpp"
{
  /* Scan up to a quote. */
  yylval->string_value_->append(yytext, yyleng);
}
	YY_BREAK
case 156:
/* rule 156 can match eol */
YY_RULE_SETUP
#line 427 "../SqlLexer.lpp"
{
  /* Scan up to a quote or escape sequence. */
  yylval->string_value_->append(yytext, yyleng);
}
	YY_BREAK
case 157:
/* rule 157 can match eol */
YY_RULE_SETUP
#line 432 "../SqlLexer.lpp"
{
  /* Scan up to a quote. */
  yylval->string_value_->append(yytext, yyleng);
}
	YY_BREAK

case 158:
YY_RULE_SETUP
#line 438 "../SqlLexer.lpp"
{
    yylval->string_value_ = new quickstep::ParseString(
        yylloc->first_line, yylloc->first_column, std::string(yytext, yyleng));
    return TOKEN_NAME;
  }
	YY_BREAK
case 159:
YY_RULE_SETUP
#line 444 "../SqlLexer.lpp"
{
    yylval->numeric_literal_value_ = new quickstep::NumericParseLiteralValue(
        yylloc->first_line, yylloc->first_column, yytext);
    return TOKEN_UNSIGNED_NUMVAL;
  }
	YY_BREAK
case 160:
YY_RULE_SETUP
#line 450 "../SqlLexer.lpp"
/* comment */
	YY_BREAK
case 161:
/* rule 161 can match eol */
YY_RULE_SETUP
#line 452 "../SqlLexer.lpp"
{ yycolumn = 0; }
	YY_BREAK
case 162:
YY_RULE_SETUP
#line 454 "../SqlLexer.lpp"
; /* ignore white space */
	YY_BREAK
/* CONDITION_SQL */
case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(CONDITION_COMMAND):
case YY_STATE_EOF(CONDITION_SQL):
#line 458 "../SqlLexer.lpp"
{
  /* All conditions except for mutli-state string extracting conditions. */
  BEGIN(INITIAL);
  return TOKEN_EOF;
}
	YY_BREAK
case 163:
YY_RULE_SETUP
#line 464 "../SqlLexer.lpp"
{
  BEGIN(INITIAL);
  quickstep_yyerror(NULL, yyscanner, NULL, "illegal character");
  return TOKEN_LEX_ERROR;
}
	YY_BREAK
case 164:
YY_RULE_SETUP
#line 470 "../SqlLexer.lpp"
YY_FATAL_ERROR( "flex scanner jammed" );
	YY_BREAK
#line 2636 "SqlLexer_gen.cpp"

	case YY_END_OF_BUFFER:
		{
		/* Amount of text matched not including the EOB char. */
		int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1;

		/* Undo the effects of YY_DO_BEFORE_ACTION. */
		*yy_cp = yyg->yy_hold_char;
		YY_RESTORE_YY_MORE_OFFSET

		if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
			{
			/* We're scanning a new file or input source.  It's
			 * possible that this happened because the user
			 * just pointed yyin at a new source and called
			 * yylex().  If so, then we have to assure
			 * consistency between YY_CURRENT_BUFFER and our
			 * globals.  Here is the right place to do so, because
			 * this is the first action (other than possibly a
			 * back-up) that will match for the new input source.
			 */
			yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
			YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
			}

		/* Note that here we test for yy_c_buf_p "<=" to the position
		 * of the first EOB in the buffer, since yy_c_buf_p will
		 * already have been incremented past the NUL character
		 * (since all states make transitions on EOB to the
		 * end-of-buffer state).  Contrast this with the test
		 * in input().
		 */
		if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] )
			{ /* This was really a NUL. */
			yy_state_type yy_next_state;

			yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text;

			yy_current_state = yy_get_previous_state( yyscanner );

			/* Okay, we're now positioned to make the NUL
			 * transition.  We couldn't have
			 * yy_get_previous_state() go ahead and do it
			 * for us because it doesn't know how to deal
			 * with the possibility of jamming (and we don't
			 * want to build jamming into it because then it
			 * will run more slowly).
			 */

			yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner);

			yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;

			if ( yy_next_state )
				{
				/* Consume the NUL. */
				yy_cp = ++yyg->yy_c_buf_p;
				yy_current_state = yy_next_state;
				goto yy_match;
				}

			else
				{
				yy_cp = yyg->yy_last_accepting_cpos;
				yy_current_state = yyg->yy_last_accepting_state;
				goto yy_find_action;
				}
			}

		else switch ( yy_get_next_buffer( yyscanner ) )
			{
			case EOB_ACT_END_OF_FILE:
				{
				yyg->yy_did_buffer_switch_on_eof = 0;

				if ( yywrap( yyscanner ) )
					{
					/* Note: because we've taken care in
					 * yy_get_next_buffer() to have set up
					 * yytext, we can now set up
					 * yy_c_buf_p so that if some total
					 * hoser (like flex itself) wants to
					 * call the scanner after we return the
					 * YY_NULL, it'll still work - another
					 * YY_NULL will get returned.
					 */
					yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ;

					yy_act = YY_STATE_EOF(YY_START);
					goto do_action;
					}

				else
					{
					if ( ! yyg->yy_did_buffer_switch_on_eof )
						YY_NEW_FILE;
					}
				break;
				}

			case EOB_ACT_CONTINUE_SCAN:
				yyg->yy_c_buf_p =
					yyg->yytext_ptr + yy_amount_of_matched_text;

				yy_current_state = yy_get_previous_state( yyscanner );

				yy_cp = yyg->yy_c_buf_p;
				yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
				goto yy_match;

			case EOB_ACT_LAST_MATCH:
				yyg->yy_c_buf_p =
				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars];

				yy_current_state = yy_get_previous_state( yyscanner );

				yy_cp = yyg->yy_c_buf_p;
				yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
				goto yy_find_action;
			}
		break;
		}

	default:
		YY_FATAL_ERROR(
			"fatal flex scanner internal error--no action found" );
	} /* end of action switch */
		} /* end of scanning one token */
	} /* end of user's declarations */
} /* end of yylex */

/* yy_get_next_buffer - try to read in a new buffer
 *
 * Returns a code representing an action:
 *	EOB_ACT_LAST_MATCH -
 *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
 *	EOB_ACT_END_OF_FILE - end of file
 */
static int yy_get_next_buffer (yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
	char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
	char *source = yyg->yytext_ptr;
	int number_to_move, i;
	int ret_val;

	if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] )
		YY_FATAL_ERROR(
		"fatal flex scanner internal error--end of buffer missed" );

	if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
		{ /* Don't try to fill the buffer, so this is an EOF. */
		if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 )
			{
			/* We matched a single character, the EOB, so
			 * treat this as a final EOF.
			 */
			return EOB_ACT_END_OF_FILE;
			}

		else
			{
			/* We matched some text prior to the EOB, first
			 * process it.
			 */
			return EOB_ACT_LAST_MATCH;
			}
		}

	/* Try to read more data. */

	/* First move last chars to start of buffer. */
	number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr - 1);

	for ( i = 0; i < number_to_move; ++i )
		*(dest++) = *(source++);

	if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
		/* don't do the read, it's not guaranteed to return an EOF,
		 * just force an EOF
		 */
		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0;

	else
		{
			int num_to_read =
			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;

		while ( num_to_read <= 0 )
			{ /* Not enough room in the buffer - grow it. */

			/* just a shorter name for the current buffer */
			YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE;

			int yy_c_buf_p_offset =
				(int) (yyg->yy_c_buf_p - b->yy_ch_buf);

			if ( b->yy_is_our_buffer )
				{
				int new_size = b->yy_buf_size * 2;

				if ( new_size <= 0 )
					b->yy_buf_size += b->yy_buf_size / 8;
				else
					b->yy_buf_size *= 2;

				b->yy_ch_buf = (char *)
					/* Include room in for 2 EOB chars. */
					yyrealloc( (void *) b->yy_ch_buf,
							 (yy_size_t) (b->yy_buf_size + 2) , yyscanner );
				}
			else
				/* Can't grow it, we don't own it. */
				b->yy_ch_buf = NULL;

			if ( ! b->yy_ch_buf )
				YY_FATAL_ERROR(
				"fatal error - scanner input buffer overflow" );

			yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];

			num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
						number_to_move - 1;

			}

		if ( num_to_read > YY_READ_BUF_SIZE )
			num_to_read = YY_READ_BUF_SIZE;

		/* Read in more data. */
		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
			yyg->yy_n_chars, num_to_read );

		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
		}

	if ( yyg->yy_n_chars == 0 )
		{
		if ( number_to_move == YY_MORE_ADJ )
			{
			ret_val = EOB_ACT_END_OF_FILE;
			yyrestart( yyin  , yyscanner);
			}

		else
			{
			ret_val = EOB_ACT_LAST_MATCH;
			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
				YY_BUFFER_EOF_PENDING;
			}
		}

	else
		ret_val = EOB_ACT_CONTINUE_SCAN;

	if ((yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
		/* Extend the array by 50%, plus the number we really need. */
		int new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1);
		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc(
			(void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size , yyscanner );
		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
		/* "- 2" to take care of EOB's */
		YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2);
	}

	yyg->yy_n_chars += number_to_move;
	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR;
	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;

	yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];

	return ret_val;
}

/* yy_get_previous_state - get the state just before the EOB char was reached */

    static yy_state_type yy_get_previous_state (yyscan_t yyscanner)
{
	yy_state_type yy_current_state;
	char *yy_cp;
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;

	yy_current_state = yyg->yy_start;

	for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp )
		{
		YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
		if ( yy_accept[yy_current_state] )
			{
			yyg->yy_last_accepting_state = yy_current_state;
			yyg->yy_last_accepting_cpos = yy_cp;
			}
		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
			{
			yy_current_state = (int) yy_def[yy_current_state];
			if ( yy_current_state >= 589 )
				yy_c = yy_meta[yy_c];
			}
		yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
		}

	return yy_current_state;
}

/* yy_try_NUL_trans - try to make a transition on the NUL character
 *
 * synopsis
 *	next_state = yy_try_NUL_trans( current_state );
 */
    static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state , yyscan_t yyscanner)
{
	int yy_is_jam;
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */
	char *yy_cp = yyg->yy_c_buf_p;

	YY_CHAR yy_c = 1;
	if ( yy_accept[yy_current_state] )
		{
		yyg->yy_last_accepting_state = yy_current_state;
		yyg->yy_last_accepting_cpos = yy_cp;
		}
	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
		{
		yy_current_state = (int) yy_def[yy_current_state];
		if ( yy_current_state >= 589 )
			yy_c = yy_meta[yy_c];
		}
	yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
	yy_is_jam = (yy_current_state == 588);

	(void)yyg;
	return yy_is_jam ? 0 : yy_current_state;
}

#ifndef YY_NO_UNPUT

#endif

#ifndef YY_NO_INPUT
#ifdef __cplusplus
    static int yyinput (yyscan_t yyscanner)
#else
    static int input  (yyscan_t yyscanner)
#endif

{
	int c;
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;

	*yyg->yy_c_buf_p = yyg->yy_hold_char;

	if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
		{
		/* yy_c_buf_p now points to the character we want to return.
		 * If this occurs *before* the EOB characters, then it's a
		 * valid NUL; if not, then we've hit the end of the buffer.
		 */
		if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] )
			/* This was really a NUL. */
			*yyg->yy_c_buf_p = '\0';

		else
			{ /* need more input */
			int offset = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr);
			++yyg->yy_c_buf_p;

			switch ( yy_get_next_buffer( yyscanner ) )
				{
				case EOB_ACT_LAST_MATCH:
					/* This happens because yy_g_n_b()
					 * sees that we've accumulated a
					 * token and flags that we need to
					 * try matching the token before
					 * proceeding.  But for input(),
					 * there's no matching to consider.
					 * So convert the EOB_ACT_LAST_MATCH
					 * to EOB_ACT_END_OF_FILE.
					 */

					/* Reset buffer status. */
					yyrestart( yyin , yyscanner);

					/*FALLTHROUGH*/

				case EOB_ACT_END_OF_FILE:
					{
					if ( yywrap( yyscanner ) )
						return 0;

					if ( ! yyg->yy_did_buffer_switch_on_eof )
						YY_NEW_FILE;
#ifdef __cplusplus
					return yyinput(yyscanner);
#else
					return input(yyscanner);
#endif
					}

				case EOB_ACT_CONTINUE_SCAN:
					yyg->yy_c_buf_p = yyg->yytext_ptr + offset;
					break;
				}
			}
		}

	c = *(unsigned char *) yyg->yy_c_buf_p;	/* cast for 8-bit char's */
	*yyg->yy_c_buf_p = '\0';	/* preserve yytext */
	yyg->yy_hold_char = *++yyg->yy_c_buf_p;

	if ( c == '\n' )
		
    do{ yylineno++;
        yycolumn=0;
    }while(0)
;

	return c;
}
#endif	/* ifndef YY_NO_INPUT */

/** Immediately switch to a different input stream.
 * @param input_file A readable stream.
 * @param yyscanner The scanner object.
 * @note This function does not reset the start condition to @c INITIAL .
 */
    void yyrestart  (FILE * input_file , yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;

	if ( ! YY_CURRENT_BUFFER ){
        yyensure_buffer_stack (yyscanner);
		YY_CURRENT_BUFFER_LVALUE =
            yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner);
	}

	yy_init_buffer( YY_CURRENT_BUFFER, input_file , yyscanner);
	yy_load_buffer_state( yyscanner );
}

/** Switch to a different input buffer.
 * @param new_buffer The new input buffer.
 * @param yyscanner The scanner object.
 */
    void yy_switch_to_buffer  (YY_BUFFER_STATE  new_buffer , yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;

	/* TODO. We should be able to replace this entire function body
	 * with
	 *		yypop_buffer_state();
	 *		yypush_buffer_state(new_buffer);
     */
	yyensure_buffer_stack (yyscanner);
	if ( YY_CURRENT_BUFFER == new_buffer )
		return;

	if ( YY_CURRENT_BUFFER )
		{
		/* Flush out information for old buffer. */
		*yyg->yy_c_buf_p = yyg->yy_hold_char;
		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p;
		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
		}

	YY_CURRENT_BUFFER_LVALUE = new_buffer;
	yy_load_buffer_state( yyscanner );

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

static void yy_load_buffer_state  (yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
	yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
	yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
	yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
	yyg->yy_hold_char = *yyg->yy_c_buf_p;
}

/** Allocate and initialize an input buffer state.
 * @param file A readable stream.
 * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
 * @param yyscanner The scanner object.
 * @return the allocated buffer state.
 */
    YY_BUFFER_STATE yy_create_buffer  (FILE * file, int  size , yyscan_t yyscanner)
{
	YY_BUFFER_STATE b;
    
	b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) , yyscanner );
	if ( ! b )
		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );

	b->yy_buf_size = size;

	/* yy_ch_buf has to be 2 characters longer than the size given because
	 * we need to put in 2 end-of-buffer characters.
	 */
	b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) , yyscanner );
	if ( ! b->yy_ch_buf )
		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );

	b->yy_is_our_buffer = 1;

	yy_init_buffer( b, file , yyscanner);

	return b;
}

/** Destroy the buffer.
 * @param b a buffer created with yy_create_buffer()
 * @param yyscanner The scanner object.
 */
    void yy_delete_buffer (YY_BUFFER_STATE  b , yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;

	if ( ! b )
		return;

	if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
		YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;

	if ( b->yy_is_our_buffer )
		yyfree( (void *) b->yy_ch_buf , yyscanner );

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

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

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

	yy_flush_buffer( b , yyscanner);

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

    /* If b is the current buffer, then yy_init_buffer was _probably_
     * called from yyrestart() or through yy_get_next_buffer.
     * In that case, we don't want to reset the lineno or column.
     */
    if (b != YY_CURRENT_BUFFER){
        b->yy_bs_lineno = 1;
        b->yy_bs_column = 0;
    }

        b->yy_is_interactive = 0;
    
	errno = oerrno;
}

/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
 * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
 * @param yyscanner The scanner object.
 */
    void yy_flush_buffer (YY_BUFFER_STATE  b , yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
	if ( ! b )
		return;

	b->yy_n_chars = 0;

	/* We always need two end-of-buffer characters.  The first causes
	 * a transition to the end-of-buffer state.  The second causes
	 * a jam in that state.
	 */
	b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;

	b->yy_buf_pos = &b->yy_ch_buf[0];

	b->yy_at_bol = 1;
	b->yy_buffer_status = YY_BUFFER_NEW;

	if ( b == YY_CURRENT_BUFFER )
		yy_load_buffer_state( yyscanner );
}

/** Pushes the new state onto the stack. The new state becomes
 *  the current state. This function will allocate the stack
 *  if necessary.
 *  @param new_buffer The new state.
 *  @param yyscanner The scanner object.
 */
void yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
	if (new_buffer == NULL)
		return;

	yyensure_buffer_stack(yyscanner);

	/* This block is copied from yy_switch_to_buffer. */
	if ( YY_CURRENT_BUFFER )
		{
		/* Flush out information for old buffer. */
		*yyg->yy_c_buf_p = yyg->yy_hold_char;
		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p;
		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
		}

	/* Only push if top exists. Otherwise, replace top. */
	if (YY_CURRENT_BUFFER)
		yyg->yy_buffer_stack_top++;
	YY_CURRENT_BUFFER_LVALUE = new_buffer;

	/* copied from yy_switch_to_buffer. */
	yy_load_buffer_state( yyscanner );
	yyg->yy_did_buffer_switch_on_eof = 1;
}

/** Removes and deletes the top of the stack, if present.
 *  The next element becomes the new top.
 *  @param yyscanner The scanner object.
 */
void yypop_buffer_state (yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
	if (!YY_CURRENT_BUFFER)
		return;

	yy_delete_buffer(YY_CURRENT_BUFFER , yyscanner);
	YY_CURRENT_BUFFER_LVALUE = NULL;
	if (yyg->yy_buffer_stack_top > 0)
		--yyg->yy_buffer_stack_top;

	if (YY_CURRENT_BUFFER) {
		yy_load_buffer_state( yyscanner );
		yyg->yy_did_buffer_switch_on_eof = 1;
	}
}

/* Allocates the stack if it does not exist.
 *  Guarantees space for at least one push.
 */
static void yyensure_buffer_stack (yyscan_t yyscanner)
{
	yy_size_t num_to_alloc;
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;

	if (!yyg->yy_buffer_stack) {

		/* First allocation is just for 2 elements, since we don't know if this
		 * scanner will even need a stack. We use 2 instead of 1 to avoid an
		 * immediate realloc on the next call.
         */
      num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */
		yyg->yy_buffer_stack = (struct yy_buffer_state**)yyalloc
								(num_to_alloc * sizeof(struct yy_buffer_state*)
								, yyscanner);
		if ( ! yyg->yy_buffer_stack )
			YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );

		memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*));

		yyg->yy_buffer_stack_max = num_to_alloc;
		yyg->yy_buffer_stack_top = 0;
		return;
	}

	if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){

		/* Increase the buffer to prepare for a possible push. */
		yy_size_t grow_size = 8 /* arbitrary grow size */;

		num_to_alloc = yyg->yy_buffer_stack_max + grow_size;
		yyg->yy_buffer_stack = (struct yy_buffer_state**)yyrealloc
								(yyg->yy_buffer_stack,
								num_to_alloc * sizeof(struct yy_buffer_state*)
								, yyscanner);
		if ( ! yyg->yy_buffer_stack )
			YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );

		/* zero only the new slots.*/
		memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*));
		yyg->yy_buffer_stack_max = num_to_alloc;
	}
}

/** Setup the input buffer state to scan directly from a user-specified character buffer.
 * @param base the character buffer
 * @param size the size in bytes of the character buffer
 * @param yyscanner The scanner object.
 * @return the newly allocated buffer state object.
 */
YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size , yyscan_t yyscanner)
{
	YY_BUFFER_STATE b;
    
	if ( size < 2 ||
	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
	     base[size-1] != YY_END_OF_BUFFER_CHAR )
		/* They forgot to leave room for the EOB's. */
		return NULL;

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

	b->yy_buf_size = (int) (size - 2);	/* "- 2" to take care of EOB's */
	b->yy_buf_pos = b->yy_ch_buf = base;
	b->yy_is_our_buffer = 0;
	b->yy_input_file = NULL;
	b->yy_n_chars = b->yy_buf_size;
	b->yy_is_interactive = 0;
	b->yy_at_bol = 1;
	b->yy_fill_buffer = 0;
	b->yy_buffer_status = YY_BUFFER_NEW;

	yy_switch_to_buffer( b , yyscanner );

	return b;
}

/** Setup the input buffer state to scan a string. The next call to yylex() will
 * scan from a @e copy of @a str.
 * @param yystr a NUL-terminated string to scan
 * @param yyscanner The scanner object.
 * @return the newly allocated buffer state object.
 * @note If you want to scan bytes that may contain NUL values, then use
 *       yy_scan_bytes() instead.
 */
YY_BUFFER_STATE yy_scan_string (const char * yystr , yyscan_t yyscanner)
{
    
	return yy_scan_bytes( yystr, (int) strlen(yystr) , yyscanner);
}

/** Setup the input buffer state to scan the given bytes. The next call to yylex() will
 * scan from a @e copy of @a bytes.
 * @param yybytes the byte buffer to scan
 * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
 * @param yyscanner The scanner object.
 * @return the newly allocated buffer state object.
 */
YY_BUFFER_STATE yy_scan_bytes  (const char * yybytes, int  _yybytes_len , yyscan_t yyscanner)
{
	YY_BUFFER_STATE b;
	char *buf;
	yy_size_t n;
	int i;
    
	/* Get memory for full buffer, including space for trailing EOB's. */
	n = (yy_size_t) (_yybytes_len + 2);
	buf = (char *) yyalloc( n , yyscanner );
	if ( ! buf )
		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );

	for ( i = 0; i < _yybytes_len; ++i )
		buf[i] = yybytes[i];

	buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;

	b = yy_scan_buffer( buf, n , yyscanner);
	if ( ! b )
		YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );

	/* It's okay to grow etc. this buffer, and we should throw it
	 * away when we're done.
	 */
	b->yy_is_our_buffer = 1;

	return b;
}

#ifndef YY_EXIT_FAILURE
#define YY_EXIT_FAILURE 2
#endif

static void yynoreturn yy_fatal_error (const char* msg , yyscan_t yyscanner)
{
	struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
	(void)yyg;
	fprintf( stderr, "%s\n", msg );
	exit( YY_EXIT_FAILURE );
}

/* Redefine yyless() so it works in section 3 code. */

#undef yyless
#define yyless(n) \
	do \
		{ \
		/* Undo effects of setting up yytext. */ \
        int yyless_macro_arg = (n); \
        YY_LESS_LINENO(yyless_macro_arg);\
		yytext[yyleng] = yyg->yy_hold_char; \
		yyg->yy_c_buf_p = yytext + yyless_macro_arg; \
		yyg->yy_hold_char = *yyg->yy_c_buf_p; \
		*yyg->yy_c_buf_p = '\0'; \
		yyleng = yyless_macro_arg; \
		} \
	while ( 0 )

/* Accessor  methods (get/set functions) to struct members. */

/** Get the user-defined data for this scanner.
 * @param yyscanner The scanner object.
 */
YY_EXTRA_TYPE yyget_extra  (yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
    return yyextra;
}

/** Get the current line number.
 * @param yyscanner The scanner object.
 */
int yyget_lineno  (yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;

        if (! YY_CURRENT_BUFFER)
            return 0;
    
    return yylineno;
}

/** Get the current column number.
 * @param yyscanner The scanner object.
 */
int yyget_column  (yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;

        if (! YY_CURRENT_BUFFER)
            return 0;
    
    return yycolumn;
}

/** Get the input stream.
 * @param yyscanner The scanner object.
 */
FILE *yyget_in  (yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
    return yyin;
}

/** Get the output stream.
 * @param yyscanner The scanner object.
 */
FILE *yyget_out  (yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
    return yyout;
}

/** Get the length of the current token.
 * @param yyscanner The scanner object.
 */
int yyget_leng  (yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
    return yyleng;
}

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

char *yyget_text  (yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
    return yytext;
}

/** Set the user-defined data. This data is never touched by the scanner.
 * @param user_defined The data to be associated with this scanner.
 * @param yyscanner The scanner object.
 */
void yyset_extra (YY_EXTRA_TYPE  user_defined , yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
    yyextra = user_defined ;
}

/** Set the current line number.
 * @param _line_number line number
 * @param yyscanner The scanner object.
 */
void yyset_lineno (int  _line_number , yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;

        /* lineno is only valid if an input buffer exists. */
        if (! YY_CURRENT_BUFFER )
           YY_FATAL_ERROR( "yyset_lineno called with no buffer" );
    
    yylineno = _line_number;
}

/** Set the current column.
 * @param _column_no column number
 * @param yyscanner The scanner object.
 */
void yyset_column (int  _column_no , yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;

        /* column is only valid if an input buffer exists. */
        if (! YY_CURRENT_BUFFER )
           YY_FATAL_ERROR( "yyset_column called with no buffer" );
    
    yycolumn = _column_no;
}

/** Set the input stream. This does not discard the current
 * input buffer.
 * @param _in_str A readable stream.
 * @param yyscanner The scanner object.
 * @see yy_switch_to_buffer
 */
void yyset_in (FILE *  _in_str , yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
    yyin = _in_str ;
}

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

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

void yyset_debug (int  _bdebug , yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
    yy_flex_debug = _bdebug ;
}

/* Accessor methods for yylval and yylloc */

YYSTYPE * yyget_lval  (yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
    return yylval;
}

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

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

/* yylex_init is special because it creates the scanner itself, so it is
 * the ONLY reentrant function that doesn't take the scanner as the last argument.
 * That's why we explicitly handle the declaration, instead of using our macros.
 */
int yylex_init(yyscan_t* ptr_yy_globals)
{
    if (ptr_yy_globals == NULL){
        errno = EINVAL;
        return 1;
    }

    *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), NULL );

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

    /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */
    memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));

    return yy_init_globals ( *ptr_yy_globals );
}

/* yylex_init_extra has the same functionality as yylex_init, but follows the
 * convention of taking the scanner as the last argument. Note however, that
 * this is a *pointer* to a scanner, as it will be allocated by this call (and
 * is the reason, too, why this function also must handle its own declaration).
 * The user defined value in the first argument will be available to yyalloc in
 * the yyextra field.
 */
int yylex_init_extra( YY_EXTRA_TYPE yy_user_defined, yyscan_t* ptr_yy_globals )
{
    struct yyguts_t dummy_yyguts;

    yyset_extra (yy_user_defined, &dummy_yyguts);

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

    *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), &dummy_yyguts );

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

    /* By setting to 0xAA, we expose bugs in
    yy_init_globals. Leave at 0x00 for releases. */
    memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));

    yyset_extra (yy_user_defined, *ptr_yy_globals);

    return yy_init_globals ( *ptr_yy_globals );
}

static int yy_init_globals (yyscan_t yyscanner)
{
    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
    /* Initialization is the same as for the non-reentrant scanner.
     * This function is called from yylex_destroy(), so don't allocate here.
     */

    yyg->yy_buffer_stack = NULL;
    yyg->yy_buffer_stack_top = 0;
    yyg->yy_buffer_stack_max = 0;
    yyg->yy_c_buf_p = NULL;
    yyg->yy_init = 0;
    yyg->yy_start = 0;

    yyg->yy_start_stack_ptr = 0;
    yyg->yy_start_stack_depth = 0;
    yyg->yy_start_stack =  NULL;

/* Defined in main.c */
#ifdef YY_STDINIT
    yyin = stdin;
    yyout = stdout;
#else
    yyin = NULL;
    yyout = NULL;
#endif

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

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

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

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

    /* Destroy the start condition stack. */
        yyfree( yyg->yy_start_stack , yyscanner );
        yyg->yy_start_stack = NULL;

    /* Reset the globals. This is important in a non-reentrant scanner so the next time
     * yylex() is called, initialization will occur. */
    yy_init_globals( yyscanner);

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

/*
 * Internal utility routines.
 */

#ifndef yytext_ptr
static void yy_flex_strncpy (char* s1, const char * s2, int n , yyscan_t yyscanner)
{
	struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
	(void)yyg;

	int i;
	for ( i = 0; i < n; ++i )
		s1[i] = s2[i];
}
#endif

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

	return n;
}
#endif

void *yyalloc (yy_size_t  size , yyscan_t yyscanner)
{
	struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
	(void)yyg;
	return malloc(size);
}

void *yyrealloc  (void * ptr, yy_size_t  size , yyscan_t yyscanner)
{
	struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
	(void)yyg;

	/* The cast to (char *) in the following accommodates both
	 * implementations that use char* generic pointers, and those
	 * that use void* generic pointers.  It works with the latter
	 * because both ANSI C and C++ allow castless assignment from
	 * any pointer type to void*, and deal with argument conversions
	 * as though doing an assignment.
	 */
	return realloc(ptr, size);
}

void yyfree (void * ptr , yyscan_t yyscanner)
{
	struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
	(void)yyg;
	free( (char *) ptr );	/* see yyrealloc() for (char *) cast */
}

#define YYTABLES_NAME "yytables"

#line 470 "../SqlLexer.lpp"


