#line 2 "Lexer.cpp"

#line 4 "Lexer.cpp"

#define  YY_INT_ALIGNED short int

/* A lexical scanner generated by flex */

#define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2
#define YY_FLEX_MINOR_VERSION 5
#define YY_FLEX_SUBMINOR_VERSION 33
#if YY_FLEX_SUBMINOR_VERSION > 0
#define FLEX_BETA
#endif

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

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

/* end standard C headers. */

/* flex integer type definitions */

#ifndef FLEXINT_H
#define FLEXINT_H

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

#if __STDC_VERSION__ >= 199901L

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

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

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

#endif /* ! FLEXINT_H */

#ifdef __cplusplus

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

#else	/* ! __cplusplus */

#if __STDC__

#define YY_USE_CONST

#endif	/* __STDC__ */
#endif	/* ! __cplusplus */

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

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

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

/* 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 (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 (((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 llvmAsmrestart(llvmAsmin  )

#define YY_END_OF_BUFFER_CHAR 0

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

extern int llvmAsmleng;

extern FILE *llvmAsmin, *llvmAsmout;

#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 llvmAsmlex. 
     *       One obvious solution it to make yy_act a global. I tried that, and saw
     *       a 5% performance hit in a non-llvmAsmlineno 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 < llvmAsmleng; ++yyl )\
                    if ( llvmAsmtext[yyl] == '\n' )\
                        --llvmAsmlineno;\
            }while(0)
    
/* Return all but the first "n" matched characters back to the input stream. */
#define yyless(n) \
	do \
		{ \
		/* Undo effects of setting up llvmAsmtext. */ \
        int yyless_macro_arg = (n); \
        YY_LESS_LINENO(yyless_macro_arg);\
		*yy_cp = (yy_hold_char); \
		YY_RESTORE_YY_MORE_OFFSET \
		(yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
		YY_DO_BEFORE_ACTION; /* set up llvmAsmtext again */ \
		} \
	while ( 0 )

#define unput(c) yyunput( c, (yytext_ptr)  )

/* The following is because we cannot portably get our hands on size_t
 * (without autoconf's help, which isn't available because we want
 * flex-generated scanners to compile on their own).
 */

#ifndef YY_TYPEDEF_YY_SIZE_T
#define YY_TYPEDEF_YY_SIZE_T
typedef unsigned int yy_size_t;
#endif

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

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

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

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

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

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

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

    int yy_bs_lineno; /**< The line count. */
    int yy_bs_column; /**< The column count. */
    
	/* Whether to try to fill the input buffer when we reach the
	 * end of it.
	 */
	int yy_fill_buffer;

	int yy_buffer_status;

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

	};
#endif /* !YY_STRUCT_YY_BUFFER_STATE */

/* Stack of input buffers. */
static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */

/* 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 ( (yy_buffer_stack) \
                          ? (yy_buffer_stack)[(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 (yy_buffer_stack)[(yy_buffer_stack_top)]

/* yy_hold_char holds the character lost when llvmAsmtext is formed. */
static char yy_hold_char;
static int yy_n_chars;		/* number of characters read into yy_ch_buf */
int llvmAsmleng;

/* Points to current character in buffer. */
static char *yy_c_buf_p = (char *) 0;
static int yy_init = 0;		/* whether we need to initialize */
static int yy_start = 0;	/* start state number */

/* Flag which is used to allow llvmAsmwrap()'s to do buffer switches
 * instead of setting up a fresh llvmAsmin.  A bit of a hack ...
 */
static int yy_did_buffer_switch_on_eof;

void llvmAsmrestart (FILE *input_file  );
void llvmAsm_switch_to_buffer (YY_BUFFER_STATE new_buffer  );
YY_BUFFER_STATE llvmAsm_create_buffer (FILE *file,int size  );
void llvmAsm_delete_buffer (YY_BUFFER_STATE b  );
void llvmAsm_flush_buffer (YY_BUFFER_STATE b  );
void llvmAsmpush_buffer_state (YY_BUFFER_STATE new_buffer  );
void llvmAsmpop_buffer_state (void );

static void llvmAsmensure_buffer_stack (void );
static void llvmAsm_load_buffer_state (void );
static void llvmAsm_init_buffer (YY_BUFFER_STATE b,FILE *file  );

#define YY_FLUSH_BUFFER llvmAsm_flush_buffer(YY_CURRENT_BUFFER )

YY_BUFFER_STATE llvmAsm_scan_buffer (char *base,yy_size_t size  );
YY_BUFFER_STATE llvmAsm_scan_string (yyconst char *yy_str  );
YY_BUFFER_STATE llvmAsm_scan_bytes (yyconst char *bytes,int len  );

void *llvmAsmalloc (yy_size_t  );
void *llvmAsmrealloc (void *,yy_size_t  );
void llvmAsmfree (void *  );

#define yy_new_buffer llvmAsm_create_buffer

#define yy_set_interactive(is_interactive) \
	{ \
	if ( ! YY_CURRENT_BUFFER ){ \
        llvmAsmensure_buffer_stack (); \
		YY_CURRENT_BUFFER_LVALUE =    \
            llvmAsm_create_buffer(llvmAsmin,YY_BUF_SIZE ); \
	} \
	YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
	}

#define yy_set_bol(at_bol) \
	{ \
	if ( ! YY_CURRENT_BUFFER ){\
        llvmAsmensure_buffer_stack (); \
		YY_CURRENT_BUFFER_LVALUE =    \
            llvmAsm_create_buffer(llvmAsmin,YY_BUF_SIZE ); \
	} \
	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
	}

#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)

/* Begin user sect3 */

#define llvmAsmwrap(n) 1
#define YY_SKIP_YYWRAP

typedef unsigned char YY_CHAR;

FILE *llvmAsmin = (FILE *) 0, *llvmAsmout = (FILE *) 0;

typedef int yy_state_type;

extern int llvmAsmlineno;

int llvmAsmlineno = 1;

extern char *llvmAsmtext;
#define yytext_ptr llvmAsmtext

static yy_state_type yy_get_previous_state (void );
static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
static int yy_get_next_buffer (void );
static void yy_fatal_error (yyconst char msg[]  );

/* Done after the current pattern has been matched and before the
 * corresponding action - sets up llvmAsmtext.
 */
#define YY_DO_BEFORE_ACTION \
	(yytext_ptr) = yy_bp; \
	llvmAsmleng = (size_t) (yy_cp - yy_bp); \
	(yy_hold_char) = *yy_cp; \
	*yy_cp = '\0'; \
	(yy_c_buf_p) = yy_cp;

#define YY_NUM_RULES 138
#define YY_END_OF_BUFFER 139
/* This struct is not used in this scanner,
   but its presence is necessary. */
struct yy_trans_info
	{
	flex_int32_t yy_verify;
	flex_int32_t yy_nxt;
	};
static yyconst flex_int16_t yy_accept[560] =
    {   0,
        0,    0,  139,  137,  136,  136,  137,  137,  137,  137,
      137,  137,  129,  129,    1,  137,  137,  137,  137,  137,
      137,  137,  137,  137,  137,  137,  137,  137,  137,  137,
      137,  137,  137,  137,  137,  137,  137,  137,    0,  127,
        0,  125,  123,  132,    0,  130,    0,  134,  129,    0,
        1,    0,  124,  133,    0,    0,    0,    0,    0,    0,
        0,  109,    0,   38,    0,    0,    0,    0,    0,    0,
       72,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,   54,    0,    0,    0,    0,    0,    0,    0,    0,
        0,   73,    0,    0,    0,    0,    0,    0,    0,   68,

        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,   25,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,  127,  123,  134,   22,  134,    0,  135,
        0,  128,  124,   55,    0,    0,   67,    0,    0,   36,
        0,    0,    0,   39,    0,    0,    0,    0,    0,    0,
        0,    0,    3,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,   57,    0,    0,    0,
       82,   87,   85,   86,   84,   83,    0,   88,   92,    0,

        0,  108,    0,    0,    0,    0,    0,   77,   75,   64,
        0,    0,    0,   76,   74,    0,    0,   56,    0,    0,
        0,    0,    0,    0,    0,    0,   90,   81,   79,    0,
       80,   78,    0,   91,   89,    0,    0,    0,    0,    0,
        0,    0,    0,   69,    0,    0,  126,  134,    0,    0,
        0,  134,    0,    0,    0,    0,   66,    0,    0,   93,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,   71,   60,    0,    0,    0,    0,  116,
       63,    0,    0,    0,   70,    0,    0,    0,    0,    0,
        0,    0,  117,   65,    0,    0,    0,    0,   24,    0,

        0,    0,  131,   59,    0,    0,   96,    0,    0,    0,
       62,   45,    0,    0,   26,    0,    0,    0,    4,    0,
       52,   58,    0,    0,    0,    0,   61,    0,   48,    0,
       12,    0,    0,   95,  134,   34,   32,    0,    0,    2,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    5,    0,   49,   98,    0,    0,    0,    0,
        0,    0,   44,    0,    0,    0,    0,   51,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,  118,    0,    0,    0,    0,   94,    0,   23,    0,
        0,    0,    0,    0,    0,    0,  115,    0,    0,   41,

        0,    0,    0,    7,    0,    0,    0,   50,    0,    0,
       40,  102,  101,    0,    0,    8,   16,    0,    0,    0,
      111,    0,  114,   35,    0,    0,   53,    0,    0,    0,
      106,    0,    0,  100,  110,   27,    0,   28,   99,    0,
      112,  107,    0,    0,    0,    0,    0,  105,    0,    0,
        6,   29,    0,    0,    0,    0,    0,   97,    0,    0,
        0,    0,    0,    0,    0,    0,    0,   33,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    9,    0,    0,
        0,    0,   19,    0,    0,    0,   10,  103,   11,   47,
       46,    0,  104,    0,    0,    0,    0,   31,    0,    0,

        0,   13,    0,   15,   14,    0,    0,    0,    0,   17,
        0,    0,    0,    0,    0,    0,    0,   30,    0,    0,
        0,    0,    0,   37,    0,    0,    0,    0,    0,   18,
        0,    0,    0,    0,    0,  113,    0,    0,    0,    0,
        0,    0,    0,   20,    0,    0,    0,    0,  119,  121,
      122,    0,   42,    0,  120,   43,    0,   21,    0
    } ;

static yyconst flex_int32_t yy_ec[256] =
    {   0,
        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
        1,    1,    2,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    2,    1,    4,    1,    5,    6,    1,    1,    1,
        1,    1,    7,    1,    8,    9,    1,   10,   11,   11,
       11,   11,   11,   12,   11,   13,   11,   14,   15,    1,
        1,    1,    1,   16,   17,   17,   17,   17,   18,   17,
        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
        1,    1,    1,    1,   19,    1,   20,   21,   22,   23,

       24,   25,   26,   27,   28,    5,   29,   30,   31,   32,
       33,   34,   35,   36,   37,   38,   39,   40,   41,   42,
       43,   44,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,

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

static yyconst flex_int32_t yy_meta[45] =
    {   0,
        1,    1,    2,    3,    4,    1,    1,    4,    4,    4,
        4,    4,    4,    5,    1,    1,    4,    4,    4,    4,
        4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
        4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
        4,    4,    4,    4
    } ;

static yyconst flex_int16_t yy_base[568] =
    {   0,
        0,    0, 1217, 1218, 1218, 1218, 1212, 1201,   35,   39,
       43,   49,   55,   61,    0,   72,   64,   67,   66,   86,
       76,  106,   91,   65,  133,  121,  117,   99,  152,  125,
       78,  179,  137,  211,  139,   90,  154,   93, 1210, 1218,
     1199, 1218,    0,   49,  185,  217,  113,  238,  254,  259,
        0, 1208,    0,  200,  110,  155,  111,   75,  148,  134,
      163, 1197,  160,  177,  208,  178,  264,  194,  205,  200,
     1196,  219,  260,  222,  218,  167,  261,  231,  273,  228,
      277,  282,  274,  287,  288,   98,  240,  289,  290,  292,
      296, 1195,  293,  298,  299,  307,  316,  294,  319,  321,

      308,  305,  323,  303,  300,  329,  333,  332,  334,  338,
      336,  344,  339,  348,  337,  352,  335, 1194,  353,  363,
      365,  364,  370,  368,  371,  377,  372,  384,  391,  369,
      390,  376,  393, 1193,    0,  404, 1192,  426,  444,    0,
     1201, 1218,    0, 1190,  406,  397, 1189,  409,  410, 1188,
      413,  420,  417, 1187,  439,  411,  429,  431,  445,  446,
      450,  449, 1186,  451,  452,  453,  454,  455,  457,  458,
      465,  466,  468,  472,  471,  469,  482,  485,  488,  490,
      491,  493,  494,  496,  497,  499, 1185,  500,  502,  505,
     1184, 1183, 1182, 1181, 1180, 1179,  504, 1178, 1177,  506,

      507, 1176,  536,  511,  514,  516,  517, 1175, 1174, 1173,
      548,  519,  536, 1172, 1171,  549,  528, 1170,  527,  552,
      553,  554,  556,  557,  560,  558, 1169, 1168, 1167,  561,
     1166, 1165,  562, 1164, 1163,  569,  563,  571,  581,  574,
      585,  578,  589, 1162,  582,  586, 1218,  599,  618,  608,
      622,  627,  590,  628,  515,  629, 1161,  630,  602, 1160,
      592,  631,  633,  632,  634,  636,  635,  637,  640,  639,
      645,  643,  657, 1159, 1158,  642,  644,  658,  659, 1157,
     1156,  660,  664,  662, 1155,  667,  669,  671,  673,  674,
      678,  677, 1154, 1153,  680,  682,  685,  675, 1152,  686,

      687,  688,    0, 1151,  690,  695, 1150,  701,  700,  705,
     1149, 1148,  708,  706, 1147,  713,  715,  717, 1146,  719,
     1145, 1144,  720,  724,  722,  725, 1143,  726, 1142,  729,
     1141,  734,  730, 1140,  740, 1139, 1138,  740,  732, 1137,
      742,  747,  750,  752,  749,  751,  759,  754,  760,  762,
      763,  767, 1136,  768, 1135, 1134,  764,  769,  770,  777,
      773,  779, 1133,  782,  784,  785,  786, 1132,  790,  791,
      793,  792,  795,  794,  807,  798,  800,  801,  810,  811,
      813, 1131,  814,  816,  820,  818, 1130,  821, 1129,  823,
      830,  824,  832,  837,  834,  835, 1128,  838,  842, 1127,

      844,  845,  847, 1126,  848,  849,  850, 1125,  854,  851,
     1124, 1123, 1122,  855,  856, 1121, 1120,  867,  864,  861,
     1119,  872, 1118, 1117,  865,  876, 1116,  878,  879,  881,
     1115,  882,  884, 1114, 1113, 1112,  883, 1111, 1110,  890,
     1109, 1108,  889,  886,  891,  893,  896, 1107,  898,  901,
     1106, 1105,  904,  906,  908,  911,  913, 1104,  915,  916,
      917,  912,  919,  918,  921,  931,  924, 1103,  937,  939,
      938,  940,  942,  943,  945,  944,  947, 1102,  950,  955,
      956,  951, 1101,  957,  958,  960, 1090, 1079, 1078, 1077,
     1076,  962, 1074,  964,  969,  965,  978, 1073,  981,  966,

      982, 1072,  983, 1071, 1070,  986,  987,  988,  991, 1069,
      990,  993,  994,  995,  999, 1000, 1003, 1064, 1004, 1001,
     1006, 1010, 1013, 1062, 1015, 1014, 1022, 1023, 1025, 1061,
     1030, 1027, 1028, 1029, 1031,  910, 1033, 1034, 1036, 1035,
     1032, 1043, 1044,  641, 1052, 1055, 1045, 1056,  599,  522,
      470, 1057,  467, 1058,  373,  245, 1059,  244, 1218, 1095,
     1097,  200, 1102, 1105,  167, 1109,   73
    } ;

static yyconst flex_int16_t yy_def[568] =
    {   0,
      559,    1,  559,  559,  559,  559,  560,  561,  562,  559,
      561,  561,  561,  561,  563,  564,  561,  561,  561,  561,
      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
      561,  561,  561,  561,  561,  561,  561,  561,  560,  559,
      561,  559,  565,  559,  559,  561,  561,  561,  561,  561,
      563,  566,  567,  559,  561,  561,  561,  561,  561,  561,
      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,

      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
      561,  561,  561,  559,  565,  559,  561,  561,  561,   50,
      566,  559,  567,  561,  561,  561,  561,  561,  561,  561,
      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,

      561,  561,   50,  561,  561,  561,  561,  561,  561,  561,
      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
      561,  561,  561,  561,  561,  561,  559,  559,  559,  559,
      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,

      561,  561,  203,  561,  561,  561,  561,  561,  561,  561,
      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
      561,  561,  561,  561,  559,  561,  561,  561,  561,  561,
      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,

      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,

      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
      561,  561,  561,  561,  561,  561,  561,  561,    0,  559,
      559,  559,  559,  559,  559,  559,  559
    } ;

static yyconst flex_int16_t yy_nxt[1263] =
    {   0,
        4,    5,    6,    7,    8,    9,   10,   11,   12,   13,
       14,   14,   14,    4,   15,   16,    8,    8,    8,   17,
       18,   19,   20,   21,   22,   23,   24,   25,    8,   26,
       27,   28,   29,   30,    8,   31,   32,   33,   34,   35,
       36,   37,    8,   38,   44,   44,   44,   44,   45,   45,
       45,   45,   46,   46,   46,   46,   42,   47,   44,   44,
       44,   44,   42,   48,   49,   49,   49,   49,   42,   48,
       49,   49,   49,   49,   42,   52,  143,   42,   42,   42,
       42,   54,   54,   54,   54,   63,   55,   64,   42,   42,
       60,   42,   81,   56,   61,   57,   50,   58,   65,   42,

       59,  104,   62,   42,   42,   66,   42,   70,  148,   67,
       71,   42,   42,  130,   79,   68,  133,   72,   69,   42,
       80,  137,   92,   42,   42,   73,   42,   74,   75,  182,
       42,   93,  144,  147,   42,   76,   89,   94,   42,   77,
       85,   78,   82,   82,   82,   82,   42,   42,   86,   90,
       42,  101,   42,   87,   83,   91,  116,   88,  128,  151,
      102,   42,  103,  117,   84,   42,  131,   42,   42,  118,
      135,  129,  119,   42,  149,   95,   42,   96,  150,  120,
       42,   97,  145,   98,  146,   99,  132,  100,  105,  153,
       42,   42,   42,  136,   45,   45,   45,   45,  154,  169,

      152,  106,  107,   43,  108,  109,  110,   42,  111,   54,
       54,   54,   54,   42,  112,  157,  113,  114,   42,  115,
      105,   42,  163,  161,   42,   48,   46,   46,   46,   46,
       42,   42,   42,  121,  122,   42,  123,  155,  124,  156,
      125,   42,  126,  162,   42,  168,  127,  138,  138,  138,
      138,   42,  167,   42,  172,  139,  164,   42,   42,  183,
      174,  139,   48,   49,   49,   49,   49,   42,  140,  140,
      140,  140,   42,   42,   42,  140,  140,   42,  140,  140,
      140,  140,  140,  140,  170,  158,   42,   42,  159,  165,
       42,   82,   82,   82,   82,   42,  166,  160,  171,  175,

       42,   42,   42,   42,  176,   42,   42,   42,  181,   42,
      173,   42,   42,   42,  186,  184,   42,  196,   42,  185,
       42,   42,  177,  178,  179,  187,  180,  190,  188,   42,
      192,  189,   42,  191,   42,  199,   42,  200,  197,  194,
      202,  203,   42,  198,  193,   42,   42,   42,   42,   42,
       42,   42,   42,  195,  205,  208,  204,   42,  201,  214,
      212,   42,  206,  210,  219,   42,   42,  216,  218,  209,
      222,  217,  211,  215,  207,  213,   42,   42,   42,  220,
      223,   42,   42,   42,   42,   42,   42,  221,  242,   42,
       42,  224,  226,  228,  231,  238,  225,   42,  227,  233,

      234,  243,  239,   42,   42,  230,   42,  229,  232,  235,
       42,  244,  236,  248,  248,  248,  248,  237,  240,   42,
      241,  249,   42,   42,   42,  253,   42,  249,  245,  255,
       42,  254,  256,   42,  246,  138,  138,  138,  138,   42,
      258,  259,   42,  139,   42,  257,  260,  262,  263,  139,
      250,  251,   42,  252,  252,  252,  252,   42,   42,   42,
      264,  261,   42,   42,   42,   42,   42,   42,   42,  269,
       42,   42,  265,  267,  270,  266,  276,  268,   42,   42,
       42,   42,   42,   42,   42,   42,  271,  274,  272,  280,
      273,  282,  283,  284,  275,   42,  281,  278,   42,  277,

      279,   42,  285,   42,   42,  286,   42,   42,  287,   42,
       42,  288,   42,   42,  291,   42,  293,   42,   42,   42,
       42,  292,  290,  297,   42,  289,  295,   42,   42,   42,
       42,  294,   42,  298,  299,   42,  338,  296,  300,  306,
       42,   42,  309,  301,  302,  303,  303,  303,  303,   42,
      304,  305,  303,  303,  307,  303,  303,  303,  303,  303,
      303,   42,   42,  313,  314,   42,   42,   42,  310,   42,
       42,   42,  308,   42,   42,   42,   42,  317,  316,  311,
      319,  315,   42,  321,   42,  324,  312,   42,  320,  318,
      326,   42,  325,  323,   42,   42,  329,  322,   42,   42,

      328,  327,   42,   42,  330,   42,  331,  332,  248,  248,
      248,  248,   42,  342,  333,   42,  249,  335,  335,  335,
      335,  341,  249,  334,  250,  250,  336,  335,  335,  335,
      335,  252,  252,  252,  252,   42,  252,  252,  252,  252,
       42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
       42,  345,   42,   42,   42,   42,   42,   42,   42,  337,
      339,  340,  344,  347,  352,  346,  353,  349,  343,  350,
       42,   42,   42,   42,  351,   42,  348,   42,  354,  355,
       42,  356,   42,  361,   42,  362,   42,   42,   42,  360,
       42,   42,  363,   42,  357,   42,  358,  359,   42,   42,

       42,   42,  367,   42,  364,  366,  365,  368,   42,  369,
      375,  371,  370,   42,   42,  373,  378,  377,   42,   42,
      376,   42,  372,  380,  374,  379,   42,  383,   42,  381,
       42,  382,   42,   42,  385,   42,  384,   42,   42,   42,
      387,  390,   42,   42,  388,   42,  386,   42,  389,  335,
      335,  335,  335,   42,  398,   42,  391,  396,  394,  397,
       42,  392,   42,   42,   42,   42,  393,   42,  400,  401,
      395,  402,   42,   42,  404,   42,   42,   42,  399,  405,
       42,   42,   42,   42,  403,  408,   42,  406,  410,  411,
       42,  412,   42,  407,  409,   42,  413,   42,   42,   42,

      415,  414,  416,   42,   42,   42,   42,   42,   42,  421,
      417,   42,  423,   42,   42,  419,  424,  427,  420,  418,
       42,  422,  426,   42,   42,  429,   42,   42,  428,   42,
      425,   42,  430,   42,   42,  433,   42,   42,  431,  432,
      435,  438,  437,   42,  440,   42,  434,   42,   42,  442,
       42,   42,  441,  436,  439,   42,  444,   42,   42,  443,
       42,   42,   42,   42,   42,  447,  446,   42,   42,   42,
      451,  445,  455,  456,   42,  449,  458,   42,   42,  448,
       42,  453,  454,  461,  452,   42,  459,  450,  457,   42,
      460,   42,   42,  463,   42,   42,   42,   42,  462,   42,

      464,  471,   42,   42,   42,  469,   42,  465,  470,   42,
      467,   42,  468,  475,   42,  466,  472,   42,  473,   42,
      476,   42,  474,   42,   42,   42,   42,  477,   42,   42,
       42,   42,   42,  479,   42,  478,  484,   42,  485,  480,
      483,  481,  489,  491,   42,  486,  487,  488,  482,  490,
       42,   42,   42,   42,  492,   42,   42,   42,   42,  497,
       42,  493,  495,   42,   42,  498,  500,  496,   42,   42,
       42,   42,  502,   42,  506,   42,  494,   42,   42,   42,
      499,  501,   42,  509,  510,  516,  507,  511,  503,  508,
      512,   42,  504,  505,   42,   42,   42,  513,  514,   42,

       42,   42,  515,   42,   42,  519,   42,   42,   42,  517,
      520,  523,   42,   42,   42,  525,   42,   42,  527,   42,
      518,  522,  529,   42,  526,  521,   42,   42,   42,  528,
      524,  531,  530,  533,  535,   42,   42,  536,   42,  532,
       42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
      534,  537,  538,  540,  539,  546,   42,   42,   42,  542,
      544,  543,  545,  547,  541,   42,  548,  549,   42,   42,
       42,   42,   42,  552,   42,   42,  553,   42,  556,  551,
      550,  557,   42,   42,   42,   42,   42,   42,  554,   42,
       42,   42,   42,  555,  558,   39,   39,   39,   39,   39,

       41,   41,   51,   42,   51,   51,   51,   53,   53,  141,
      141,  141,  141,  141,   42,   42,   42,   42,   42,   42,
       42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
       42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
       42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
       42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
       42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
       42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
       42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
       42,   42,   42,   42,   42,   42,   42,   42,   42,   42,

       42,   42,   42,   42,  142,   42,  247,   42,   42,   42,
       42,  142,   42,  134,   42,   40,  559,    3,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559
    } ;

static yyconst flex_int16_t yy_chk[1263] =
    {   0,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    9,    9,    9,    9,   10,   10,
       10,   10,   11,   11,   11,   11,   11,   12,   44,   44,
       44,   44,   12,   13,   13,   13,   13,   13,   13,   14,
       14,   14,   14,   14,   14,   16,  567,   17,   24,   19,
       18,   16,   16,   16,   16,   19,   17,   19,   58,   21,
       18,   31,   24,   17,   18,   17,   13,   17,   19,   20,

       17,   31,   18,   36,   23,   20,   38,   21,   58,   20,
       21,   86,   28,   36,   23,   20,   38,   21,   20,   22,
       23,   47,   28,   55,   57,   22,   47,   22,   22,   86,
       27,   28,   55,   57,   26,   22,   27,   28,   30,   22,
       26,   22,   25,   25,   25,   25,   25,   60,   26,   27,
       33,   30,   35,   26,   25,   27,   33,   26,   35,   60,
       30,   59,   30,   33,   25,   29,   37,   37,   56,   33,
      565,   35,   33,   63,   59,   29,   61,   29,   59,   33,
       76,   29,   56,   29,   56,   29,   37,   29,   32,   63,
       64,   66,   32,   45,   45,   45,   45,   45,   64,   76,

       61,   32,   32,  562,   32,   32,   32,   68,   32,   54,
       54,   54,   54,   70,   32,   66,   32,   32,   69,   32,
       34,   65,   70,   68,   34,   46,   46,   46,   46,   46,
       46,   75,   72,   34,   34,   74,   34,   65,   34,   65,
       34,   80,   34,   69,   78,   75,   34,   48,   48,   48,
       48,   48,   74,   87,   78,   48,   72,  558,  556,   87,
       80,   48,   49,   49,   49,   49,   49,   49,   50,   50,
       50,   50,   50,   73,   77,   50,   50,   67,   50,   50,
       50,   50,   50,   50,   77,   67,   79,   83,   67,   73,
       81,   82,   82,   82,   82,   82,   73,   67,   77,   81,

       84,   85,   88,   89,   83,   90,   93,   98,   85,   91,
       79,   94,   95,  105,   90,   88,  104,   98,  102,   89,
       96,  101,   84,   84,   84,   91,   84,   94,   93,   97,
       96,   93,   99,   95,  100,  101,  103,  102,   99,   97,
      104,  105,  106,  100,   96,  108,  107,  109,  117,  111,
      115,  110,  113,   97,  107,  108,  106,  112,  103,  111,
      110,  114,  107,  109,  115,  116,  119,  112,  114,  108,
      117,  113,  109,  111,  107,  110,  120,  122,  121,  116,
      119,  124,  130,  123,  125,  127,  555,  116,  130,  132,
      126,  119,  121,  123,  125,  127,  120,  128,  122,  126,

      126,  131,  128,  131,  129,  124,  133,  123,  125,  126,
      146,  132,  126,  136,  136,  136,  136,  126,  129,  145,
      129,  136,  148,  149,  156,  145,  151,  136,  133,  146,
      153,  145,  148,  152,  133,  138,  138,  138,  138,  138,
      151,  152,  157,  138,  158,  149,  153,  156,  157,  138,
      139,  139,  155,  139,  139,  139,  139,  139,  159,  160,
      158,  155,  162,  161,  164,  165,  166,  167,  168,  162,
      169,  170,  159,  161,  164,  160,  169,  161,  171,  172,
      553,  173,  176,  551,  175,  174,  164,  167,  165,  172,
      166,  173,  174,  175,  168,  177,  172,  171,  178,  170,

      171,  179,  176,  180,  181,  177,  182,  183,  178,  184,
      185,  179,  186,  188,  181,  189,  183,  197,  190,  200,
      201,  182,  180,  188,  204,  179,  185,  205,  255,  206,
      207,  184,  212,  189,  190,  550,  255,  186,  197,  206,
      219,  217,  212,  200,  201,  203,  203,  203,  203,  213,
      204,  205,  203,  203,  207,  203,  203,  203,  203,  203,
      203,  211,  216,  217,  219,  220,  221,  222,  213,  223,
      224,  226,  211,  225,  230,  233,  237,  222,  221,  216,
      224,  220,  236,  225,  238,  233,  216,  240,  224,  223,
      237,  242,  236,  230,  239,  245,  240,  226,  241,  246,

      239,  238,  243,  253,  241,  261,  242,  243,  248,  248,
      248,  248,  549,  261,  245,  259,  248,  250,  250,  250,
      250,  259,  248,  246,  249,  249,  253,  249,  249,  249,
      249,  251,  251,  251,  251,  251,  252,  252,  252,  252,
      252,  254,  256,  258,  262,  264,  263,  265,  267,  266,
      268,  264,  270,  269,  544,  276,  272,  277,  271,  254,
      256,  258,  263,  266,  271,  265,  272,  268,  262,  269,
      273,  278,  279,  282,  270,  284,  267,  283,  273,  276,
      286,  277,  287,  283,  288,  284,  289,  290,  298,  282,
      292,  291,  286,  295,  278,  296,  278,  279,  297,  300,

      301,  302,  290,  305,  287,  289,  288,  291,  306,  292,
      301,  296,  295,  309,  308,  298,  306,  305,  310,  314,
      302,  313,  297,  309,  300,  308,  316,  314,  317,  310,
      318,  313,  320,  323,  317,  325,  316,  324,  326,  328,
      320,  325,  330,  333,  323,  339,  318,  332,  324,  335,
      335,  335,  335,  338,  339,  341,  326,  333,  332,  338,
      342,  328,  345,  343,  346,  344,  330,  348,  342,  343,
      332,  344,  347,  349,  346,  350,  351,  357,  341,  347,
      352,  354,  358,  359,  345,  350,  361,  348,  352,  354,
      360,  357,  362,  349,  351,  364,  358,  365,  366,  367,

      360,  359,  361,  369,  370,  372,  371,  374,  373,  367,
      362,  376,  370,  377,  378,  365,  371,  374,  366,  364,
      375,  369,  373,  379,  380,  376,  381,  383,  375,  384,
      372,  386,  377,  385,  388,  380,  390,  392,  378,  379,
      383,  386,  385,  391,  390,  393,  381,  395,  396,  392,
      394,  398,  391,  384,  388,  399,  394,  401,  402,  393,
      403,  405,  406,  407,  410,  398,  396,  409,  414,  415,
      403,  395,  409,  409,  420,  401,  414,  419,  425,  399,
      418,  406,  407,  419,  405,  422,  415,  402,  410,  426,
      418,  428,  429,  422,  430,  432,  437,  433,  420,  444,

      425,  437,  443,  440,  445,  432,  446,  426,  433,  447,
      429,  449,  430,  445,  450,  428,  440,  453,  443,  454,
      446,  455,  444,  536,  456,  462,  457,  447,  459,  460,
      461,  464,  463,  450,  465,  449,  457,  467,  459,  453,
      456,  454,  463,  465,  466,  460,  461,  462,  455,  464,
      469,  471,  470,  472,  466,  473,  474,  476,  475,  472,
      477,  467,  470,  479,  482,  473,  475,  471,  480,  481,
      484,  485,  477,  486,  482,  492,  469,  494,  496,  500,
      474,  476,  495,  486,  492,  500,  484,  494,  479,  485,
      495,  497,  480,  481,  499,  501,  503,  496,  497,  506,

      507,  508,  499,  511,  509,  506,  512,  513,  514,  501,
      507,  511,  515,  516,  520,  513,  517,  519,  515,  521,
      503,  509,  517,  522,  514,  508,  523,  526,  525,  516,
      512,  520,  519,  522,  525,  527,  528,  526,  529,  521,
      532,  533,  534,  531,  535,  541,  537,  538,  540,  539,
      523,  527,  528,  531,  529,  538,  542,  543,  547,  533,
      535,  534,  537,  539,  532,  545,  540,  541,  546,  548,
      552,  554,  557,  545,  530,  524,  546,  518,  552,  543,
      542,  554,  510,  505,  504,  502,  498,  493,  547,  491,
      490,  489,  488,  548,  557,  560,  560,  560,  560,  560,

      561,  561,  563,  487,  563,  563,  563,  564,  564,  566,
      566,  566,  566,  566,  483,  478,  468,  458,  452,  451,
      448,  442,  441,  439,  438,  436,  435,  434,  431,  427,
      424,  423,  421,  417,  416,  413,  412,  411,  408,  404,
      400,  397,  389,  387,  382,  368,  363,  356,  355,  353,
      340,  337,  336,  334,  331,  329,  327,  322,  321,  319,
      315,  312,  311,  307,  304,  299,  294,  293,  285,  281,
      280,  275,  274,  260,  257,  244,  235,  234,  232,  231,
      229,  228,  227,  218,  215,  214,  210,  209,  208,  202,
      199,  198,  196,  195,  194,  193,  192,  191,  187,  163,

      154,  150,  147,  144,  141,  137,  134,  118,   92,   71,
       62,   52,   41,   39,    8,    7,    3,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559
    } ;

/* Table of booleans, true if rule could match eol. */
static yyconst flex_int32_t yy_rule_can_match_eol[139] =
    {   0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,     };

static yy_state_type yy_last_accepting_state;
static char *yy_last_accepting_cpos;

extern int llvmAsm_flex_debug;
int llvmAsm_flex_debug = 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
char *llvmAsmtext;
#line 1 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
/*===-- Lexer.l - Scanner for llvm assembly files --------------*- C++ -*--===//
//
//                     The LLVM Compiler Infrastructure
//
// This file was developed by the LLVM research group and is distributed under
// the University of Illinois Open Source License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
//  This file implements the flex scanner for LLVM assembly languages files.
//
//===----------------------------------------------------------------------===*/
#line 28 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
#include "ParserInternals.h"
#include "llvm/Module.h"
#include <list>
#include "llvmAsmParser.h"
#include <cctype>
#include <cstdlib>

void set_scan_file(FILE * F){
  llvmAsm_switch_to_buffer(llvmAsm_create_buffer(F,YY_BUF_SIZE ) );
}
void set_scan_string (const char * str) {
  llvmAsm_scan_string (str);
}

// Construct a token value for a non-obsolete token
#define RET_TOK(type, Enum, sym) \
  llvmAsmlval.type = Instruction::Enum; \
  return sym

// Construct a token value for an obsolete token
#define RET_TY(CTYPE, SYM) \
  llvmAsmlval.PrimType = CTYPE;\
  return SYM

namespace llvm {

// TODO: All of the static identifiers are figured out by the lexer,
// these should be hashed to reduce the lexer size


// atoull - Convert an ascii string of decimal digits into the unsigned long
// long representation... this does not have to do input error checking,
// because we know that the input will be matched by a suitable regex...
//
static uint64_t atoull(const char *Buffer) {
  uint64_t Result = 0;
  for (; *Buffer; Buffer++) {
    uint64_t OldRes = Result;
    Result *= 10;
    Result += *Buffer-'0';
    if (Result < OldRes)   // Uh, oh, overflow detected!!!
      GenerateError("constant bigger than 64 bits detected!");
  }
  return Result;
}

static uint64_t HexIntToVal(const char *Buffer) {
  uint64_t Result = 0;
  for (; *Buffer; ++Buffer) {
    uint64_t OldRes = Result;
    Result *= 16;
    char C = *Buffer;
    if (C >= '0' && C <= '9')
      Result += C-'0';
    else if (C >= 'A' && C <= 'F')
      Result += C-'A'+10;
    else if (C >= 'a' && C <= 'f')
      Result += C-'a'+10;

    if (Result < OldRes)   // Uh, oh, overflow detected!!!
      GenerateError("constant bigger than 64 bits detected!");
  }
  return Result;
}


// HexToFP - Convert the ascii string in hexidecimal format to the floating
// point representation of it.
//
static double HexToFP(const char *Buffer) {
  // Behave nicely in the face of C TBAA rules... see:
  // http://www.nullstone.com/htmls/category/aliastyp.htm
  union {
    uint64_t UI;
    double FP;
  } UIntToFP;
  UIntToFP.UI = HexIntToVal(Buffer);

  assert(sizeof(double) == sizeof(uint64_t) &&
         "Data sizes incompatible on this target!");
  return UIntToFP.FP;   // Cast Hex constant to double
}


// UnEscapeLexed - Run through the specified buffer and change \xx codes to the
// appropriate character.  If AllowNull is set to false, a \00 value will cause
// an exception to be thrown.
//
// If AllowNull is set to true, the return value of the function points to the
// last character of the string in memory.
//
char *UnEscapeLexed(char *Buffer, bool AllowNull) {
  char *BOut = Buffer;
  for (char *BIn = Buffer; *BIn; ) {
    if (BIn[0] == '\\' && isxdigit(BIn[1]) && isxdigit(BIn[2])) {
      char Tmp = BIn[3]; BIn[3] = 0;     // Terminate string
      *BOut = (char)strtol(BIn+1, 0, 16);  // Convert to number
      if (!AllowNull && !*BOut)
        GenerateError("String literal cannot accept \\00 escape!");

      BIn[3] = Tmp;                  // Restore character
      BIn += 3;                      // Skip over handled chars
      ++BOut;
    } else {
      *BOut++ = *BIn++;
    }
  }

  return BOut;
}

} // End llvm namespace

using namespace llvm;

#define YY_NEVER_INTERACTIVE 1
/* Comments start with a ; and go till end of line */
/* Local Values and Type identifiers start with a % sign */
/* Global Value identifiers start with an @ sign */
/* Label identifiers end with a colon */
/* Quoted names can contain any character except " and \ */
/* LocalVarID/GlobalVarID: match an unnamed local variable slot ID. */
/* Integer types are specified with i and a bitwidth */
/* E[PN]Integer: match positive and negative literal integer values. */
/* FPConstant - A Floating point constant.
 */
/* HexFPConstant - Floating point constant represented in IEEE format as a
 *  hexadecimal number for when exponential notation is not precise enough.
 */
/* HexIntConstant - Hexadecimal constant generated by the CFE to avoid forcing
 * it to deal with 64 bit numbers.
 */
#line 1088 "Lexer.cpp"

#define INITIAL 0

#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

static int yy_init_globals (void );

/* Macros after this point can all be overridden by user definitions in
 * section 1.
 */

#ifndef YY_SKIP_YYWRAP
#ifdef __cplusplus
extern "C" int llvmAsmwrap (void );
#else
extern int llvmAsmwrap (void );
#endif
#endif

    static inline void yyunput (int c,char *buf_ptr  );
    
#ifndef yytext_ptr
static void yy_flex_strncpy (char *,yyconst char *,int );
#endif

#ifdef YY_NEED_STRLEN
static int yy_flex_strlen (yyconst char * );
#endif

#ifndef YY_NO_INPUT

#ifdef __cplusplus
static int yyinput (void );
#else
static int input (void );
#endif

#endif

/* Amount of stuff to slurp up with each read. */
#ifndef YY_READ_BUF_SIZE
#define YY_READ_BUF_SIZE 8192
#endif

/* Copy whatever the last rule matched to the standard output. */
#ifndef ECHO
/* This used to be an fputs(), but since the string might contain NUL's,
 * we now use fwrite().
 */
#define ECHO (void) fwrite( llvmAsmtext, llvmAsmleng, 1, llvmAsmout )
#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 = '*'; \
		size_t n; \
		for ( n = 0; n < max_size && \
			     (c = getc( llvmAsmin )) != EOF && c != '\n'; ++n ) \
			buf[n] = (char) c; \
		if ( c == '\n' ) \
			buf[n++] = (char) c; \
		if ( c == EOF && ferror( llvmAsmin ) ) \
			YY_FATAL_ERROR( "input in flex scanner failed" ); \
		result = n; \
		} \
	else \
		{ \
		errno=0; \
		while ( (result = fread(buf, 1, max_size, llvmAsmin))==0 && ferror(llvmAsmin)) \
			{ \
			if( errno != EINTR) \
				{ \
				YY_FATAL_ERROR( "input in flex scanner failed" ); \
				break; \
				} \
			errno=0; \
			clearerr(llvmAsmin); \
			} \
		}\
\

#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 )
#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 llvmAsmlex (void);

#define YY_DECL int llvmAsmlex (void)
#endif /* !YY_DECL */

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

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

#define YY_RULE_SETUP \
	YY_USER_ACTION

/** The main scanner function which does all the work.
 */
YY_DECL
{
	register yy_state_type yy_current_state;
	register char *yy_cp, *yy_bp;
	register int yy_act;
    
#line 190 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"


#line 1244 "Lexer.cpp"

	if ( !(yy_init) )
		{
		(yy_init) = 1;

#ifdef YY_USER_INIT
		YY_USER_INIT;
#endif

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

		if ( ! llvmAsmin )
			llvmAsmin = stdin;

		if ( ! llvmAsmout )
			llvmAsmout = stdout;

		if ( ! YY_CURRENT_BUFFER ) {
			llvmAsmensure_buffer_stack ();
			YY_CURRENT_BUFFER_LVALUE =
				llvmAsm_create_buffer(llvmAsmin,YY_BUF_SIZE );
		}

		llvmAsm_load_buffer_state( );
		}

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

		/* Support of llvmAsmtext. */
		*yy_cp = (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 = (yy_start);
yy_match:
		do
			{
			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
			if ( yy_accept[yy_current_state] )
				{
				(yy_last_accepting_state) = yy_current_state;
				(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 >= 560 )
					yy_c = yy_meta[(unsigned int) yy_c];
				}
			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
			++yy_cp;
			}
		while ( yy_current_state != 559 );
		yy_cp = (yy_last_accepting_cpos);
		yy_current_state = (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 < llvmAsmleng; ++yyl )
				if ( llvmAsmtext[yyl] == '\n' )
					   
    llvmAsmlineno++;
;
			}

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 = (yy_hold_char);
			yy_cp = (yy_last_accepting_cpos);
			yy_current_state = (yy_last_accepting_state);
			goto yy_find_action;

case 1:
YY_RULE_SETUP
#line 192 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ /* Ignore comments for now */ }
	YY_BREAK
case 2:
YY_RULE_SETUP
#line 194 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return BEGINTOK; }
	YY_BREAK
case 3:
YY_RULE_SETUP
#line 195 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return ENDTOK; }
	YY_BREAK
case 4:
YY_RULE_SETUP
#line 196 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return TRUETOK;  }
	YY_BREAK
case 5:
YY_RULE_SETUP
#line 197 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return FALSETOK; }
	YY_BREAK
case 6:
YY_RULE_SETUP
#line 198 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return DECLARE; }
	YY_BREAK
case 7:
YY_RULE_SETUP
#line 199 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return DEFINE; }
	YY_BREAK
case 8:
YY_RULE_SETUP
#line 200 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return GLOBAL; }
	YY_BREAK
case 9:
YY_RULE_SETUP
#line 201 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return CONSTANT; }
	YY_BREAK
case 10:
YY_RULE_SETUP
#line 202 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return INTERNAL; }
	YY_BREAK
case 11:
YY_RULE_SETUP
#line 203 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return LINKONCE; }
	YY_BREAK
case 12:
YY_RULE_SETUP
#line 204 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return WEAK; }
	YY_BREAK
case 13:
YY_RULE_SETUP
#line 205 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return APPENDING; }
	YY_BREAK
case 14:
YY_RULE_SETUP
#line 206 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return DLLIMPORT; }
	YY_BREAK
case 15:
YY_RULE_SETUP
#line 207 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return DLLEXPORT; }
	YY_BREAK
case 16:
YY_RULE_SETUP
#line 208 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return HIDDEN; }
	YY_BREAK
case 17:
YY_RULE_SETUP
#line 209 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return PROTECTED; }
	YY_BREAK
case 18:
YY_RULE_SETUP
#line 210 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return EXTERN_WEAK; }
	YY_BREAK
case 19:
YY_RULE_SETUP
#line 211 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return EXTERNAL; }
	YY_BREAK
case 20:
YY_RULE_SETUP
#line 212 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return THREAD_LOCAL; }
	YY_BREAK
case 21:
YY_RULE_SETUP
#line 213 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return ZEROINITIALIZER; }
	YY_BREAK
case 22:
YY_RULE_SETUP
#line 214 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return DOTDOTDOT; }
	YY_BREAK
case 23:
YY_RULE_SETUP
#line 215 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return UNDEF; }
	YY_BREAK
case 24:
YY_RULE_SETUP
#line 216 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return NULL_TOK; }
	YY_BREAK
case 25:
YY_RULE_SETUP
#line 217 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return TO; }
	YY_BREAK
case 26:
YY_RULE_SETUP
#line 218 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return TAIL; }
	YY_BREAK
case 27:
YY_RULE_SETUP
#line 219 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return TARGET; }
	YY_BREAK
case 28:
YY_RULE_SETUP
#line 220 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return TRIPLE; }
	YY_BREAK
case 29:
YY_RULE_SETUP
#line 221 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return DEPLIBS; }
	YY_BREAK
case 30:
YY_RULE_SETUP
#line 222 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return DATALAYOUT; }
	YY_BREAK
case 31:
YY_RULE_SETUP
#line 223 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return VOLATILE; }
	YY_BREAK
case 32:
YY_RULE_SETUP
#line 224 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return ALIGN;  }
	YY_BREAK
case 33:
YY_RULE_SETUP
#line 225 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return SECTION; }
	YY_BREAK
case 34:
YY_RULE_SETUP
#line 226 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return ALIAS; }
	YY_BREAK
case 35:
YY_RULE_SETUP
#line 227 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return MODULE; }
	YY_BREAK
case 36:
YY_RULE_SETUP
#line 228 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return ASM_TOK; }
	YY_BREAK
case 37:
YY_RULE_SETUP
#line 229 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return SIDEEFFECT; }
	YY_BREAK
case 38:
YY_RULE_SETUP
#line 231 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return CC_TOK; }
	YY_BREAK
case 39:
YY_RULE_SETUP
#line 232 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return CCC_TOK; }
	YY_BREAK
case 40:
YY_RULE_SETUP
#line 233 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return FASTCC_TOK; }
	YY_BREAK
case 41:
YY_RULE_SETUP
#line 234 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return COLDCC_TOK; }
	YY_BREAK
case 42:
YY_RULE_SETUP
#line 235 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return X86_STDCALLCC_TOK; }
	YY_BREAK
case 43:
YY_RULE_SETUP
#line 236 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return X86_FASTCALLCC_TOK; }
	YY_BREAK
case 44:
YY_RULE_SETUP
#line 238 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return INREG; }
	YY_BREAK
case 45:
YY_RULE_SETUP
#line 239 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return SRET;  }
	YY_BREAK
case 46:
YY_RULE_SETUP
#line 240 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return NOUNWIND; }
	YY_BREAK
case 47:
YY_RULE_SETUP
#line 241 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return NORETURN; }
	YY_BREAK
case 48:
YY_RULE_SETUP
#line 243 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TY(Type::VoidTy,  VOID);  }
	YY_BREAK
case 49:
YY_RULE_SETUP
#line 244 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TY(Type::FloatTy, FLOAT); }
	YY_BREAK
case 50:
YY_RULE_SETUP
#line 245 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TY(Type::DoubleTy,DOUBLE);}
	YY_BREAK
case 51:
YY_RULE_SETUP
#line 246 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TY(Type::LabelTy, LABEL); }
	YY_BREAK
case 52:
YY_RULE_SETUP
#line 247 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return TYPE;   }
	YY_BREAK
case 53:
YY_RULE_SETUP
#line 248 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return OPAQUE; }
	YY_BREAK
case 54:
YY_RULE_SETUP
#line 249 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ uint64_t NumBits = atoull(llvmAsmtext+1);
                  if (NumBits < IntegerType::MIN_INT_BITS || 
                      NumBits > IntegerType::MAX_INT_BITS)
                    GenerateError("Bitwidth for integer type out of range!");
                  const Type* Ty = IntegerType::get(NumBits);
                  RET_TY(Ty, INTTYPE);
                }
	YY_BREAK
case 55:
YY_RULE_SETUP
#line 257 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, Add, ADD); }
	YY_BREAK
case 56:
YY_RULE_SETUP
#line 258 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, Sub, SUB); }
	YY_BREAK
case 57:
YY_RULE_SETUP
#line 259 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, Mul, MUL); }
	YY_BREAK
case 58:
YY_RULE_SETUP
#line 260 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, UDiv, UDIV); }
	YY_BREAK
case 59:
YY_RULE_SETUP
#line 261 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, SDiv, SDIV); }
	YY_BREAK
case 60:
YY_RULE_SETUP
#line 262 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, FDiv, FDIV); }
	YY_BREAK
case 61:
YY_RULE_SETUP
#line 263 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, URem, UREM); }
	YY_BREAK
case 62:
YY_RULE_SETUP
#line 264 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, SRem, SREM); }
	YY_BREAK
case 63:
YY_RULE_SETUP
#line 265 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, FRem, FREM); }
	YY_BREAK
case 64:
YY_RULE_SETUP
#line 266 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, Shl, SHL); }
	YY_BREAK
case 65:
YY_RULE_SETUP
#line 267 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, LShr, LSHR); }
	YY_BREAK
case 66:
YY_RULE_SETUP
#line 268 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, AShr, ASHR); }
	YY_BREAK
case 67:
YY_RULE_SETUP
#line 269 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, And, AND); }
	YY_BREAK
case 68:
YY_RULE_SETUP
#line 270 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, Or , OR ); }
	YY_BREAK
case 69:
YY_RULE_SETUP
#line 271 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, Xor, XOR); }
	YY_BREAK
case 70:
YY_RULE_SETUP
#line 272 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(OtherOpVal,  ICmp,  ICMP); }
	YY_BREAK
case 71:
YY_RULE_SETUP
#line 273 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(OtherOpVal,  FCmp,  FCMP); }
	YY_BREAK
case 72:
YY_RULE_SETUP
#line 275 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return EQ;  }
	YY_BREAK
case 73:
YY_RULE_SETUP
#line 276 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return NE;  }
	YY_BREAK
case 74:
YY_RULE_SETUP
#line 277 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return SLT; }
	YY_BREAK
case 75:
YY_RULE_SETUP
#line 278 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return SGT; }
	YY_BREAK
case 76:
YY_RULE_SETUP
#line 279 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return SLE; }
	YY_BREAK
case 77:
YY_RULE_SETUP
#line 280 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return SGE; }
	YY_BREAK
case 78:
YY_RULE_SETUP
#line 281 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return ULT; }
	YY_BREAK
case 79:
YY_RULE_SETUP
#line 282 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return UGT; }
	YY_BREAK
case 80:
YY_RULE_SETUP
#line 283 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return ULE; }
	YY_BREAK
case 81:
YY_RULE_SETUP
#line 284 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return UGE; }
	YY_BREAK
case 82:
YY_RULE_SETUP
#line 285 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return OEQ; }
	YY_BREAK
case 83:
YY_RULE_SETUP
#line 286 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return ONE; }
	YY_BREAK
case 84:
YY_RULE_SETUP
#line 287 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return OLT; }
	YY_BREAK
case 85:
YY_RULE_SETUP
#line 288 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return OGT; }
	YY_BREAK
case 86:
YY_RULE_SETUP
#line 289 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return OLE; }
	YY_BREAK
case 87:
YY_RULE_SETUP
#line 290 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return OGE; }
	YY_BREAK
case 88:
YY_RULE_SETUP
#line 291 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return ORD; }
	YY_BREAK
case 89:
YY_RULE_SETUP
#line 292 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return UNO; }
	YY_BREAK
case 90:
YY_RULE_SETUP
#line 293 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return UEQ; }
	YY_BREAK
case 91:
YY_RULE_SETUP
#line 294 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return UNE; }
	YY_BREAK
case 92:
YY_RULE_SETUP
#line 296 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(OtherOpVal, PHI, PHI_TOK); }
	YY_BREAK
case 93:
YY_RULE_SETUP
#line 297 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(OtherOpVal, Call, CALL); }
	YY_BREAK
case 94:
YY_RULE_SETUP
#line 298 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(CastOpVal, Trunc, TRUNC); }
	YY_BREAK
case 95:
YY_RULE_SETUP
#line 299 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(CastOpVal, ZExt, ZEXT); }
	YY_BREAK
case 96:
YY_RULE_SETUP
#line 300 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(CastOpVal, SExt, SEXT); }
	YY_BREAK
case 97:
YY_RULE_SETUP
#line 301 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(CastOpVal, FPTrunc, FPTRUNC); }
	YY_BREAK
case 98:
YY_RULE_SETUP
#line 302 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(CastOpVal, FPExt, FPEXT); }
	YY_BREAK
case 99:
YY_RULE_SETUP
#line 303 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(CastOpVal, UIToFP, UITOFP); }
	YY_BREAK
case 100:
YY_RULE_SETUP
#line 304 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(CastOpVal, SIToFP, SITOFP); }
	YY_BREAK
case 101:
YY_RULE_SETUP
#line 305 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(CastOpVal, FPToUI, FPTOUI); }
	YY_BREAK
case 102:
YY_RULE_SETUP
#line 306 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(CastOpVal, FPToSI, FPTOSI); }
	YY_BREAK
case 103:
YY_RULE_SETUP
#line 307 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(CastOpVal, IntToPtr, INTTOPTR); }
	YY_BREAK
case 104:
YY_RULE_SETUP
#line 308 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(CastOpVal, PtrToInt, PTRTOINT); }
	YY_BREAK
case 105:
YY_RULE_SETUP
#line 309 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(CastOpVal, BitCast, BITCAST); }
	YY_BREAK
case 106:
YY_RULE_SETUP
#line 310 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(OtherOpVal, Select, SELECT); }
	YY_BREAK
case 107:
YY_RULE_SETUP
#line 311 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(OtherOpVal, VAArg , VAARG); }
	YY_BREAK
case 108:
YY_RULE_SETUP
#line 312 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(TermOpVal, Ret, RET); }
	YY_BREAK
case 109:
YY_RULE_SETUP
#line 313 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(TermOpVal, Br, BR); }
	YY_BREAK
case 110:
YY_RULE_SETUP
#line 314 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(TermOpVal, Switch, SWITCH); }
	YY_BREAK
case 111:
YY_RULE_SETUP
#line 315 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(TermOpVal, Invoke, INVOKE); }
	YY_BREAK
case 112:
YY_RULE_SETUP
#line 316 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(TermOpVal, Unwind, UNWIND); }
	YY_BREAK
case 113:
YY_RULE_SETUP
#line 317 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(TermOpVal, Unreachable, UNREACHABLE); }
	YY_BREAK
case 114:
YY_RULE_SETUP
#line 319 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(MemOpVal, Malloc, MALLOC); }
	YY_BREAK
case 115:
YY_RULE_SETUP
#line 320 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(MemOpVal, Alloca, ALLOCA); }
	YY_BREAK
case 116:
YY_RULE_SETUP
#line 321 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(MemOpVal, Free, FREE); }
	YY_BREAK
case 117:
YY_RULE_SETUP
#line 322 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(MemOpVal, Load, LOAD); }
	YY_BREAK
case 118:
YY_RULE_SETUP
#line 323 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(MemOpVal, Store, STORE); }
	YY_BREAK
case 119:
YY_RULE_SETUP
#line 324 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(MemOpVal, GetElementPtr, GETELEMENTPTR); }
	YY_BREAK
case 120:
YY_RULE_SETUP
#line 326 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(OtherOpVal, ExtractElement, EXTRACTELEMENT); }
	YY_BREAK
case 121:
YY_RULE_SETUP
#line 327 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(OtherOpVal, InsertElement, INSERTELEMENT); }
	YY_BREAK
case 122:
YY_RULE_SETUP
#line 328 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ RET_TOK(OtherOpVal, ShuffleVector, SHUFFLEVECTOR); }
	YY_BREAK
case 123:
YY_RULE_SETUP
#line 331 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{
                  UnEscapeLexed(llvmAsmtext+1);
                  llvmAsmlval.StrVal = strdup(llvmAsmtext+1);             // Skip %
                  return LOCALVAR;
                }
	YY_BREAK
case 124:
YY_RULE_SETUP
#line 336 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{
                  UnEscapeLexed(llvmAsmtext+1);
                  llvmAsmlval.StrVal = strdup(llvmAsmtext+1);             // Skip @
                  return GLOBALVAR;
                }
	YY_BREAK
case 125:
YY_RULE_SETUP
#line 341 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{
                  llvmAsmtext[strlen(llvmAsmtext)-1] = 0;  // nuke colon
                  UnEscapeLexed(llvmAsmtext);
                  llvmAsmlval.StrVal = strdup(llvmAsmtext);
                  return LABELSTR;
                }
	YY_BREAK
case 126:
/* rule 126 can match eol */
YY_RULE_SETUP
#line 347 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{
                  llvmAsmtext[strlen(llvmAsmtext)-2] = 0;  // nuke colon, end quote
                  UnEscapeLexed(llvmAsmtext+1);
                  llvmAsmlval.StrVal = strdup(llvmAsmtext+1);
                  return LABELSTR;
                }
	YY_BREAK
case 127:
/* rule 127 can match eol */
YY_RULE_SETUP
#line 354 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ // Note that we cannot unescape a string constant here!  The
                   // string constant might contain a \00 which would not be
                   // understood by the string stuff.  It is valid to make a
                   // [sbyte] c"Hello World\00" constant, for example.
                   //
                   llvmAsmtext[strlen(llvmAsmtext)-1] = 0;           // nuke end quote
                   llvmAsmlval.StrVal = strdup(llvmAsmtext+1);  // Nuke start quote
                   return STRINGCONSTANT;
                 }
	YY_BREAK
case 128:
/* rule 128 can match eol */
YY_RULE_SETUP
#line 363 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{
                     llvmAsmtext[strlen(llvmAsmtext)-1] = 0;           // nuke end quote
                     llvmAsmlval.StrVal = strdup(llvmAsmtext+2);  // Nuke @, quote
                     return ATSTRINGCONSTANT;
                   }
	YY_BREAK
case 129:
YY_RULE_SETUP
#line 369 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ int len = strlen(llvmAsmtext); 
                  uint32_t numBits = ((len * 64) / 19) + 1;
                  APInt Tmp(numBits, llvmAsmtext, len, 10);
                  uint32_t activeBits = Tmp.getActiveBits();
                  if (activeBits > 0 && activeBits < numBits)
                    Tmp.trunc(activeBits);
                  if (Tmp.getBitWidth() > 64) {
                    llvmAsmlval.APIntVal = new APInt(Tmp);
                    return EUAPINTVAL; 
                  } else {
                    llvmAsmlval.UInt64Val = Tmp.getZExtValue();
                    return EUINT64VAL;
                  }
                }
	YY_BREAK
case 130:
YY_RULE_SETUP
#line 383 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ int len = strlen(llvmAsmtext); 
                  uint32_t numBits = (((len-1) * 64) / 19) + 2;
                  APInt Tmp(numBits, llvmAsmtext, len, 10);
                  uint32_t minBits = Tmp.getMinSignedBits();
                  if (minBits > 0 && minBits < numBits)
                    Tmp.trunc(minBits);
                  if (Tmp.getBitWidth() > 64) {
                    llvmAsmlval.APIntVal = new APInt(Tmp);
                    return ESAPINTVAL;
                  } else {
                    llvmAsmlval.SInt64Val = Tmp.getSExtValue();
                    return ESINT64VAL;
                  }
                }
	YY_BREAK
case 131:
YY_RULE_SETUP
#line 398 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ int len = strlen(llvmAsmtext+3) - 3;
                   uint32_t bits = len * 4;
                   APInt Tmp(bits, llvmAsmtext+3, len, 16);
                   uint32_t activeBits = Tmp.getActiveBits();
                   if (activeBits > 0 && activeBits < bits)
                     Tmp.trunc(activeBits);
                   if (Tmp.getBitWidth() > 64) {
                     llvmAsmlval.APIntVal = new APInt(Tmp);
                     return llvmAsmtext[0] == 's' ? ESAPINTVAL : EUAPINTVAL;
                   } else if (llvmAsmtext[0] == 's') {
                     llvmAsmlval.SInt64Val = Tmp.getSExtValue();
                     return ESINT64VAL;
                   } else {
                     llvmAsmlval.UInt64Val = Tmp.getZExtValue();
                     return EUINT64VAL;
                   }
                 }
	YY_BREAK
case 132:
YY_RULE_SETUP
#line 416 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{
                  uint64_t Val = atoull(llvmAsmtext+1);
                  if ((unsigned)Val != Val)
                    GenerateError("Invalid value number (too large)!");
                  llvmAsmlval.UIntVal = unsigned(Val);
                  return LOCALVAL_ID;
                }
	YY_BREAK
case 133:
YY_RULE_SETUP
#line 423 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{
                  uint64_t Val = atoull(llvmAsmtext+1);
                  if ((unsigned)Val != Val)
                    GenerateError("Invalid value number (too large)!");
                  llvmAsmlval.UIntVal = unsigned(Val);
                  return GLOBALVAL_ID;
                }
	YY_BREAK
case 134:
YY_RULE_SETUP
#line 431 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ llvmAsmlval.FPVal = atof(llvmAsmtext); return FPVAL; }
	YY_BREAK
case 135:
YY_RULE_SETUP
#line 432 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ llvmAsmlval.FPVal = HexToFP(llvmAsmtext); return FPVAL; }
	YY_BREAK
case YY_STATE_EOF(INITIAL):
#line 434 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{
                  /* Make sure to free the internal buffers for flex when we are
                   * done reading our input!
                   */
                  llvmAsm_delete_buffer(YY_CURRENT_BUFFER);
                  return EOF;
                }
	YY_BREAK
case 136:
/* rule 136 can match eol */
YY_RULE_SETUP
#line 442 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ /* Ignore whitespace */ }
	YY_BREAK
case 137:
YY_RULE_SETUP
#line 443 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
{ return llvmAsmtext[0]; }
	YY_BREAK
case 138:
YY_RULE_SETUP
#line 445 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
YY_FATAL_ERROR( "flex scanner jammed" );
	YY_BREAK
#line 2127 "Lexer.cpp"

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

		/* Undo the effects of YY_DO_BEFORE_ACTION. */
		*yy_cp = (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 llvmAsmin at a new source and called
			 * llvmAsmlex().  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.
			 */
			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
			YY_CURRENT_BUFFER_LVALUE->yy_input_file = llvmAsmin;
			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 ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
			{ /* This was really a NUL. */
			yy_state_type yy_next_state;

			(yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;

			yy_current_state = yy_get_previous_state(  );

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

			yy_bp = (yytext_ptr) + YY_MORE_ADJ;

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

			else
				{
				yy_cp = (yy_last_accepting_cpos);
				yy_current_state = (yy_last_accepting_state);
				goto yy_find_action;
				}
			}

		else switch ( yy_get_next_buffer(  ) )
			{
			case EOB_ACT_END_OF_FILE:
				{
				(yy_did_buffer_switch_on_eof) = 0;

				if ( llvmAsmwrap( ) )
					{
					/* Note: because we've taken care in
					 * yy_get_next_buffer() to have set up
					 * llvmAsmtext, 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.
					 */
					(yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;

					yy_act = YY_STATE_EOF(YY_START);
					goto do_action;
					}

				else
					{
					if ( ! (yy_did_buffer_switch_on_eof) )
						YY_NEW_FILE;
					}
				break;
				}

			case EOB_ACT_CONTINUE_SCAN:
				(yy_c_buf_p) =
					(yytext_ptr) + yy_amount_of_matched_text;

				yy_current_state = yy_get_previous_state(  );

				yy_cp = (yy_c_buf_p);
				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
				goto yy_match;

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

				yy_current_state = yy_get_previous_state(  );

				yy_cp = (yy_c_buf_p);
				yy_bp = (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 llvmAsmlex */

/* 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 (void)
{
    	register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
	register char *source = (yytext_ptr);
	register int number_to_move, i;
	int ret_val;

	if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(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 ( (yy_c_buf_p) - (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) ((yy_c_buf_p) - (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 = (yy_n_chars) = 0;

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

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

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

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

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

			(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]),
			(yy_n_chars), num_to_read );

		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
		}

	if ( (yy_n_chars) == 0 )
		{
		if ( number_to_move == YY_MORE_ADJ )
			{
			ret_val = EOB_ACT_END_OF_FILE;
			llvmAsmrestart(llvmAsmin  );
			}

		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;

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

	(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 (void)
{
	register yy_state_type yy_current_state;
	register char *yy_cp;
    
	yy_current_state = (yy_start);

	for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
		{
		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
		if ( yy_accept[yy_current_state] )
			{
			(yy_last_accepting_state) = yy_current_state;
			(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 >= 560 )
				yy_c = yy_meta[(unsigned int) yy_c];
			}
		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
		}

	return yy_current_state;
}

/* yy_try_NUL_trans - try to make a transition on the NUL character
 *
 * synopsis
 *	next_state = yy_try_NUL_trans( current_state );
 */
    static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
{
	register int yy_is_jam;
    	register char *yy_cp = (yy_c_buf_p);

	register YY_CHAR yy_c = 1;
	if ( yy_accept[yy_current_state] )
		{
		(yy_last_accepting_state) = yy_current_state;
		(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 >= 560 )
			yy_c = yy_meta[(unsigned int) yy_c];
		}
	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
	yy_is_jam = (yy_current_state == 559);

	return yy_is_jam ? 0 : yy_current_state;
}

    static inline void yyunput (int c, register char * yy_bp )
{
	register char *yy_cp;
    
    yy_cp = (yy_c_buf_p);

	/* undo effects of setting up llvmAsmtext */
	*yy_cp = (yy_hold_char);

	if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
		{ /* need to shift things up to make room */
		/* +2 for EOB chars. */
		register int number_to_move = (yy_n_chars) + 2;
		register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
					YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
		register char *source =
				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];

		while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
			*--dest = *--source;

		yy_cp += (int) (dest - source);
		yy_bp += (int) (dest - source);
		YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;

		if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
			YY_FATAL_ERROR( "flex scanner push-back overflow" );
		}

	*--yy_cp = (char) c;

    if ( c == '\n' ){
        --llvmAsmlineno;
    }

	(yytext_ptr) = yy_bp;
	(yy_hold_char) = *yy_cp;
	(yy_c_buf_p) = yy_cp;
}

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

{
	int c;
    
	*(yy_c_buf_p) = (yy_hold_char);

	if ( *(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 ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
			/* This was really a NUL. */
			*(yy_c_buf_p) = '\0';

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

			switch ( yy_get_next_buffer(  ) )
				{
				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. */
					llvmAsmrestart(llvmAsmin );

					/*FALLTHROUGH*/

				case EOB_ACT_END_OF_FILE:
					{
					if ( llvmAsmwrap( ) )
						return EOF;

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

				case EOB_ACT_CONTINUE_SCAN:
					(yy_c_buf_p) = (yytext_ptr) + offset;
					break;
				}
			}
		}

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

	if ( c == '\n' )
		   
    llvmAsmlineno++;
;

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

/** Immediately switch to a different input stream.
 * @param input_file A readable stream.
 * 
 * @note This function does not reset the start condition to @c INITIAL .
 */
    void llvmAsmrestart  (FILE * input_file )
{
    
	if ( ! YY_CURRENT_BUFFER ){
        llvmAsmensure_buffer_stack ();
		YY_CURRENT_BUFFER_LVALUE =
            llvmAsm_create_buffer(llvmAsmin,YY_BUF_SIZE );
	}

	llvmAsm_init_buffer(YY_CURRENT_BUFFER,input_file );
	llvmAsm_load_buffer_state( );
}

/** Switch to a different input buffer.
 * @param new_buffer The new input buffer.
 * 
 */
    void llvmAsm_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
{
    
	/* TODO. We should be able to replace this entire function body
	 * with
	 *		llvmAsmpop_buffer_state();
	 *		llvmAsmpush_buffer_state(new_buffer);
     */
	llvmAsmensure_buffer_stack ();
	if ( YY_CURRENT_BUFFER == new_buffer )
		return;

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

	YY_CURRENT_BUFFER_LVALUE = new_buffer;
	llvmAsm_load_buffer_state( );

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

static void llvmAsm_load_buffer_state  (void)
{
    	(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
	(yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
	llvmAsmin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
	(yy_hold_char) = *(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.
 * 
 * @return the allocated buffer state.
 */
    YY_BUFFER_STATE llvmAsm_create_buffer  (FILE * file, int  size )
{
	YY_BUFFER_STATE b;
    
	b = (YY_BUFFER_STATE) llvmAsmalloc(sizeof( struct yy_buffer_state )  );
	if ( ! b )
		YY_FATAL_ERROR( "out of dynamic memory in llvmAsm_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 *) llvmAsmalloc(b->yy_buf_size + 2  );
	if ( ! b->yy_ch_buf )
		YY_FATAL_ERROR( "out of dynamic memory in llvmAsm_create_buffer()" );

	b->yy_is_our_buffer = 1;

	llvmAsm_init_buffer(b,file );

	return b;
}

/** Destroy the buffer.
 * @param b a buffer created with llvmAsm_create_buffer()
 * 
 */
    void llvmAsm_delete_buffer (YY_BUFFER_STATE  b )
{
    
	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 )
		llvmAsmfree((void *) b->yy_ch_buf  );

	llvmAsmfree((void *) b  );
}

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

{
	int oerrno = errno;
    
	llvmAsm_flush_buffer(b );

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

    /* If b is the current buffer, then llvmAsm_init_buffer was _probably_
     * called from llvmAsmrestart() 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.
 * 
 */
    void llvmAsm_flush_buffer (YY_BUFFER_STATE  b )
{
    	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 )
		llvmAsm_load_buffer_state( );
}

/** 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.
 *  
 */
void llvmAsmpush_buffer_state (YY_BUFFER_STATE new_buffer )
{
    	if (new_buffer == NULL)
		return;

	llvmAsmensure_buffer_stack();

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

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

	/* copied from llvmAsm_switch_to_buffer. */
	llvmAsm_load_buffer_state( );
	(yy_did_buffer_switch_on_eof) = 1;
}

/** Removes and deletes the top of the stack, if present.
 *  The next element becomes the new top.
 *  
 */
void llvmAsmpop_buffer_state (void)
{
    	if (!YY_CURRENT_BUFFER)
		return;

	llvmAsm_delete_buffer(YY_CURRENT_BUFFER );
	YY_CURRENT_BUFFER_LVALUE = NULL;
	if ((yy_buffer_stack_top) > 0)
		--(yy_buffer_stack_top);

	if (YY_CURRENT_BUFFER) {
		llvmAsm_load_buffer_state( );
		(yy_did_buffer_switch_on_eof) = 1;
	}
}

/* Allocates the stack if it does not exist.
 *  Guarantees space for at least one push.
 */
static void llvmAsmensure_buffer_stack (void)
{
	int num_to_alloc;
    
	if (!(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;
		(yy_buffer_stack) = (struct yy_buffer_state**)llvmAsmalloc
								(num_to_alloc * sizeof(struct yy_buffer_state*)
								);
		
		memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
				
		(yy_buffer_stack_max) = num_to_alloc;
		(yy_buffer_stack_top) = 0;
		return;
	}

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

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

		num_to_alloc = (yy_buffer_stack_max) + grow_size;
		(yy_buffer_stack) = (struct yy_buffer_state**)llvmAsmrealloc
								((yy_buffer_stack),
								num_to_alloc * sizeof(struct yy_buffer_state*)
								);

		/* zero only the new slots.*/
		memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
		(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
 * 
 * @return the newly allocated buffer state object. 
 */
YY_BUFFER_STATE llvmAsm_scan_buffer  (char * base, yy_size_t  size )
{
	YY_BUFFER_STATE b;
    
	if ( size < 2 ||
	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
	     base[size-1] != YY_END_OF_BUFFER_CHAR )
		/* They forgot to leave room for the EOB's. */
		return 0;

	b = (YY_BUFFER_STATE) llvmAsmalloc(sizeof( struct yy_buffer_state )  );
	if ( ! b )
		YY_FATAL_ERROR( "out of dynamic memory in llvmAsm_scan_buffer()" );

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

	llvmAsm_switch_to_buffer(b  );

	return b;
}

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

/** Setup the input buffer state to scan the given bytes. The next call to llvmAsmlex() will
 * scan from a @e copy of @a bytes.
 * @param bytes the byte buffer to scan
 * @param len the number of bytes in the buffer pointed to by @a bytes.
 * 
 * @return the newly allocated buffer state object.
 */
YY_BUFFER_STATE llvmAsm_scan_bytes  (yyconst char * yybytes, int  _yybytes_len )
{
	YY_BUFFER_STATE b;
	char *buf;
	yy_size_t n;
	int i;
    
	/* Get memory for full buffer, including space for trailing EOB's. */
	n = _yybytes_len + 2;
	buf = (char *) llvmAsmalloc(n  );
	if ( ! buf )
		YY_FATAL_ERROR( "out of dynamic memory in llvmAsm_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 = llvmAsm_scan_buffer(buf,n );
	if ( ! b )
		YY_FATAL_ERROR( "bad buffer in llvmAsm_scan_bytes()" );

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

	return b;
}

#ifndef YY_EXIT_FAILURE
#define YY_EXIT_FAILURE 2
#endif

static void yy_fatal_error (yyconst char* msg )
{
    	(void) fprintf( stderr, "%s\n", msg );
	exit( YY_EXIT_FAILURE );
}

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

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

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

/** Get the current line number.
 * 
 */
int llvmAsmget_lineno  (void)
{
        
    return llvmAsmlineno;
}

/** Get the input stream.
 * 
 */
FILE *llvmAsmget_in  (void)
{
        return llvmAsmin;
}

/** Get the output stream.
 * 
 */
FILE *llvmAsmget_out  (void)
{
        return llvmAsmout;
}

/** Get the length of the current token.
 * 
 */
int llvmAsmget_leng  (void)
{
        return llvmAsmleng;
}

/** Get the current token.
 * 
 */

char *llvmAsmget_text  (void)
{
        return llvmAsmtext;
}

/** Set the current line number.
 * @param line_number
 * 
 */
void llvmAsmset_lineno (int  line_number )
{
    
    llvmAsmlineno = line_number;
}

/** Set the input stream. This does not discard the current
 * input buffer.
 * @param in_str A readable stream.
 * 
 * @see llvmAsm_switch_to_buffer
 */
void llvmAsmset_in (FILE *  in_str )
{
        llvmAsmin = in_str ;
}

void llvmAsmset_out (FILE *  out_str )
{
        llvmAsmout = out_str ;
}

int llvmAsmget_debug  (void)
{
        return llvmAsm_flex_debug;
}

void llvmAsmset_debug (int  bdebug )
{
        llvmAsm_flex_debug = bdebug ;
}

static int yy_init_globals (void)
{
        /* Initialization is the same as for the non-reentrant scanner.
     * This function is called from llvmAsmlex_destroy(), so don't allocate here.
     */

    /* We do not touch llvmAsmlineno unless the option is enabled. */
    llvmAsmlineno =  1;
    
    (yy_buffer_stack) = 0;
    (yy_buffer_stack_top) = 0;
    (yy_buffer_stack_max) = 0;
    (yy_c_buf_p) = (char *) 0;
    (yy_init) = 0;
    (yy_start) = 0;

/* Defined in main.c */
#ifdef YY_STDINIT
    llvmAsmin = stdin;
    llvmAsmout = stdout;
#else
    llvmAsmin = (FILE *) 0;
    llvmAsmout = (FILE *) 0;
#endif

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

/* llvmAsmlex_destroy is for both reentrant and non-reentrant scanners. */
int llvmAsmlex_destroy  (void)
{
    
    /* Pop the buffer stack, destroying each element. */
	while(YY_CURRENT_BUFFER){
		llvmAsm_delete_buffer(YY_CURRENT_BUFFER  );
		YY_CURRENT_BUFFER_LVALUE = NULL;
		llvmAsmpop_buffer_state();
	}

	/* Destroy the stack itself. */
	llvmAsmfree((yy_buffer_stack) );
	(yy_buffer_stack) = NULL;

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

    return 0;
}

/*
 * Internal utility routines.
 */

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

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

	return n;
}
#endif

void *llvmAsmalloc (yy_size_t  size )
{
	return (void *) malloc( size );
}

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

void llvmAsmfree (void * ptr )
{
	free( (char *) ptr );	/* see llvmAsmrealloc() for (char *) cast */
}

#define YYTABLES_NAME "yytables"

#line 445 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"



