#define yy_create_buffer llvmAsm_create_buffer
#define yy_delete_buffer llvmAsm_delete_buffer
#define yy_scan_buffer llvmAsm_scan_buffer
#define yy_scan_string llvmAsm_scan_string
#define yy_scan_bytes llvmAsm_scan_bytes
#define yy_flex_debug llvmAsm_flex_debug
#define yy_init_buffer llvmAsm_init_buffer
#define yy_flush_buffer llvmAsm_flush_buffer
#define yy_load_buffer_state llvmAsm_load_buffer_state
#define yy_switch_to_buffer llvmAsm_switch_to_buffer
#define yyin llvmAsmin
#define yyleng llvmAsmleng
#define yylex llvmAsmlex
#define yyout llvmAsmout
#define yyrestart llvmAsmrestart
#define yytext llvmAsmtext
#define yylineno llvmAsmlineno

#line 20 "Lexer.cpp"
/* A lexical scanner generated by flex*/

/* Scanner skeleton version:
 * $Header$
 */

#define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2
#define YY_FLEX_MINOR_VERSION 5

#include <stdio.h>
#include <unistd.h>


/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
#ifdef c_plusplus
#ifndef __cplusplus
#define __cplusplus
#endif
#endif


#ifdef __cplusplus

#include <stdlib.h>

/* Use prototypes in function declarations. */
#define YY_USE_PROTOS

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

#else	/* ! __cplusplus */

#if __STDC__

#define YY_USE_PROTOS
#define YY_USE_CONST

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

#ifdef __TURBOC__
 #pragma warn -rch
 #pragma warn -use
#include <io.h>
#include <stdlib.h>
#define YY_USE_CONST
#define YY_USE_PROTOS
#endif

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


#ifdef YY_USE_PROTOS
#define YY_PROTO(proto) proto
#else
#define YY_PROTO(proto) ()
#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 yyrestart( yyin )

#define YY_END_OF_BUFFER_CHAR 0

/* Size of default input buffer. */
#define YY_BUF_SIZE (16384*64)

typedef struct yy_buffer_state *YY_BUFFER_STATE;

extern int yyleng;
extern FILE *yyin, *yyout;

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

/* The funky do-while in the following #define is used to turn the definition
 * int a single C statement (which needs a semi-colon terminator).  This
 * avoids problems with code like:
 *
 * 	if ( condition_holds )
 *		yyless( 5 );
 *	else
 *		do_something_else();
 *
 * Prior to using the do-while the compiler would get upset at the
 * "else" because it interpreted the "if" statement as being all
 * done when it reached the ';' after the yyless() call.
 */

/* Return all but the first 'n' matched characters back to the input stream. */

#define yyless(n) \
	do \
		{ \
		/* Undo effects of setting up yytext. */ \
		*yy_cp = yy_hold_char; \
		YY_RESTORE_YY_MORE_OFFSET \
		yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
		YY_DO_BEFORE_ACTION; /* set up yytext again */ \
		} \
	while ( 0 )

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

/* Some routines like yy_flex_realloc() are emitted as static but are
   not called by all lexers. This generates warnings in some compilers,
   notably GCC. Arrange to suppress these. */
#ifdef __GNUC__
#define YY_MAY_BE_UNUSED __attribute__((unused))
#else
#define YY_MAY_BE_UNUSED
#endif

/* 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).
 */
typedef unsigned int yy_size_t;


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;

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

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

static YY_BUFFER_STATE yy_current_buffer = 0;

/* 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".
 */
#define YY_CURRENT_BUFFER yy_current_buffer


/* yy_hold_char holds the character lost when yytext is formed. */
static char yy_hold_char;

static int yy_n_chars;		/* number of characters read into yy_ch_buf */


int yyleng;

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

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

void yyrestart YY_PROTO(( FILE *input_file ));

void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
void yy_load_buffer_state YY_PROTO(( void ));
YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
#define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )

YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));

static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
static inline void *yy_flex_realloc YY_PROTO(( void *, yy_size_t )) YY_MAY_BE_UNUSED;
static void yy_flex_free YY_PROTO(( void * ));

#define yy_new_buffer yy_create_buffer

#define yy_set_interactive(is_interactive) \
	{ \
	if ( ! yy_current_buffer ) \
		yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
	yy_current_buffer->yy_is_interactive = is_interactive; \
	}

#define yy_set_bol(at_bol) \
	{ \
	if ( ! yy_current_buffer ) \
		yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
	yy_current_buffer->yy_at_bol = at_bol; \
	}

#define YY_AT_BOL() (yy_current_buffer->yy_at_bol)


#define YY_USES_REJECT

#define yywrap() 1
#define YY_SKIP_YYWRAP
typedef unsigned char YY_CHAR;
FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
typedef int yy_state_type;
extern int yylineno;
int yylineno = 1;
extern char *yytext;
#define yytext_ptr yytext

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

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

#define YY_NUM_RULES 134
#define YY_END_OF_BUFFER 135
static yyconst short int yy_acclist[212] =
    {   0,
      135,  133,  134,  132,  133,  134,  132,  134,  133,  134,
      133,  134,  133,  134,  133,  134,  133,  134,  133,  134,
      125,  133,  134,  125,  133,  134,    1,  133,  134,  133,
      134,  133,  134,  133,  134,  133,  134,  133,  134,  133,
      134,  133,  134,  133,  134,  133,  134,  133,  134,  133,
      134,  133,  134,  133,  134,  133,  134,  133,  134,  133,
      134,  133,  134,  133,  134,  133,  134,  133,  134,  133,
      134,  124,  122,  121,  121,  128,  126,  130,  125,    1,
      107,   41,   75,   23,  124,  121,  121,  129,  130,   20,
      130,  131,   63,   74,   39,   34,   42,   66,    3,   54,

       65,   25,   83,   70,  106,   99,  100,   64,   76,  123,
      130,  130,  102,   49,   84,   85,   69,  114,   73,  115,
       56,  101,   22,  127,   68,   88,   72,   26,    4,   61,
       67,   55,   71,   48,   11,   87,  130,   36,    2,    5,
       58,   90,   60,   50,   78,   82,   80,   81,   79,   77,
       52,  116,   86,   51,   57,   21,  104,  113,   45,   59,
       30,   24,   44,   94,   93,    7,  109,   33,  112,   38,
       62,   98,   92,  108,   27,   28,   91,  110,   53,  105,
      103,   97,   43,    6,   29,   89,   37,    8,   17,    9,
       95,   10,   96,   35,   12,   14,   13,   32,   40,   15,

       31,  111,  117,  119,  120,   16,   46,  118,   18,   47,
       19
    } ;

static yyconst short int yy_accept[577] =
    {   0,
        1,    1,    1,    2,    4,    7,    9,   11,   13,   15,
       17,   19,   21,   24,   27,   30,   32,   34,   36,   38,
       40,   42,   44,   46,   48,   50,   52,   54,   56,   58,
       60,   62,   64,   66,   68,   70,   72,   72,   73,   73,
       74,   75,   76,   77,   77,   78,   78,   79,   80,   80,
       81,   81,   81,   81,   81,   81,   81,   81,   81,   82,
       82,   83,   83,   83,   83,   83,   83,   83,   83,   83,
       83,   83,   83,   83,   83,   83,   83,   83,   83,   83,
       83,   83,   83,   83,   83,   83,   83,   83,   83,   83,
       84,   84,   84,   84,   84,   84,   84,   84,   84,   84,

       84,   84,   84,   84,   84,   84,   85,   85,   85,   85,
       85,   85,   85,   85,   85,   85,   85,   85,   85,   85,
       85,   85,   86,   87,   89,   90,   91,   92,   92,   93,
       94,   94,   94,   95,   95,   95,   96,   96,   97,   97,
       97,   97,   97,   98,   98,   98,   98,   98,   98,   98,
       99,   99,   99,  100,  100,  100,  100,  100,  100,  100,
      100,  100,  100,  100,  100,  100,  100,  101,  101,  101,
      101,  101,  101,  101,  101,  101,  101,  102,  103,  103,
      103,  104,  104,  104,  105,  106,  106,  106,  106,  106,
      106,  106,  106,  107,  107,  108,  108,  108,  108,  108,

      108,  109,  109,  109,  109,  109,  109,  109,  109,  109,
      109,  109,  109,  109,  109,  109,  109,  109,  109,  109,
      109,  109,  109,  109,  109,  109,  110,  110,  110,  111,
      112,  112,  112,  112,  113,  113,  113,  113,  114,  114,
      114,  115,  116,  117,  117,  117,  117,  117,  117,  117,
      117,  117,  117,  117,  117,  117,  117,  117,  117,  118,
      118,  118,  118,  118,  119,  120,  120,  120,  120,  120,
      120,  120,  120,  120,  120,  120,  121,  122,  123,  123,
      123,  124,  124,  124,  124,  125,  125,  126,  126,  126,
      126,  126,  126,  126,  127,  127,  127,  127,  127,  128,

      128,  128,  129,  129,  129,  130,  130,  131,  131,  132,
      133,  133,  133,  133,  133,  133,  133,  134,  134,  134,
      134,  134,  135,  135,  136,  136,  136,  137,  138,  139,
      139,  139,  140,  140,  140,  140,  140,  140,  140,  140,
      140,  140,  140,  140,  140,  140,  140,  141,  141,  142,
      143,  143,  143,  143,  143,  143,  143,  143,  143,  143,
      143,  144,  144,  144,  144,  144,  144,  144,  144,  145,
      145,  145,  146,  147,  148,  149,  150,  151,  152,  152,
      152,  152,  153,  153,  153,  153,  154,  155,  155,  156,
      157,  157,  157,  157,  157,  157,  158,  158,  158,  158,

      158,  158,  159,  159,  159,  160,  160,  160,  160,  160,
      160,  160,  160,  161,  162,  163,  163,  163,  164,  165,
      166,  166,  166,  167,  167,  167,  167,  167,  168,  168,
      169,  170,  171,  172,  172,  172,  172,  173,  173,  173,
      174,  175,  176,  177,  178,  178,  178,  179,  180,  181,
      182,  182,  182,  182,  182,  182,  183,  183,  184,  184,
      185,  186,  186,  186,  186,  186,  186,  187,  187,  187,
      187,  187,  187,  187,  187,  187,  188,  188,  188,  188,
      188,  188,  188,  188,  188,  188,  189,  189,  189,  189,
      189,  190,  190,  190,  190,  190,  191,  192,  193,  193,

      194,  194,  194,  194,  194,  195,  195,  195,  195,  196,
      196,  197,  198,  198,  198,  198,  198,  198,  198,  198,
      198,  198,  198,  198,  198,  198,  199,  199,  199,  199,
      199,  199,  199,  199,  200,  200,  200,  200,  200,  200,
      201,  201,  201,  201,  201,  202,  202,  202,  203,  203,
      203,  203,  203,  203,  203,  203,  203,  203,  203,  203,
      203,  203,  204,  204,  205,  206,  207,  207,  208,  208,
      209,  210,  211,  211,  212,  212
    } ;

static yyconst int 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,    1,   16,   16,   16,   16,   17,   16,
        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
        1,    1,    1,    1,   18,    1,   19,   20,   21,   22,

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

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

static yyconst int yy_meta[44] =
    {   0,
        1,    1,    2,    1,    3,    1,    1,    3,    3,    3,
        3,    3,    3,    4,    1,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3
    } ;

static yyconst short int yy_base[581] =
    {   0,
        0,    0, 1240, 1241, 1241, 1241, 1235, 1224,   36,   40,
       44,   50,   56,   62,    0,   63,   66,   81,   89,   47,
      100,   97,   76,   96,  111,   49,  113,  110,   68,  140,
      126,  171,  120,  130,  124,  141, 1233, 1241, 1222, 1241,
        0,  159,  176,  199,  204,   70,  209,  224,  229,    0,
      137,  165,  143,   72,  169,  159,  230,  215, 1221,  168,
      182,   31,   69,  187,  240,  191,  242,  243,  244,  248,
      246,  245,  251,  254,  256,  249,  260,  262,  264,  211,
      273,  274,  270,  280,  275,  284,  285,  288,  292, 1220,
      293,  294,  298,  300,  301,  276,  302,  310,  311,  313,

      305,  309,  312,  330,  331, 1219,  334,  320,  322,  338,
      340,  324,  341,  346,  348,  361,  356,  359,  162,  353,
      368, 1218,    0,  383,  387, 1217,  401,  418,    0, 1216,
      376,  370, 1215,  393,  373, 1214,  392, 1213,  406,  407,
      408,  403, 1212,  419,   95,  420,  372,  409,  421, 1211,
      425,  431,  428,  430,  433,  435,  432,  440,  443,  444,
      445,  451,  447,  446,  449,  450,  453,  461,  468,  458,
      469,  470,  473,  474,  475,  480, 1210, 1209,  481,  482,
     1208,  483,  485, 1207, 1206,  513,  491,  488,  494,  489,
      524,  503, 1205,  486, 1204,  487,  525,  527,  250,  528,

     1203,  506,  531,  532,  536,  542,  538,  530,  537,  540,
      548,  544,  556,  550,  560,  557,  375,  554,  568,  558,
      571,  493,  576,  564,  582, 1202,  574,  552, 1241,  591,
      605,  609,  613,  618,  619,  577,  620, 1201,  621,  591,
     1200, 1199, 1198,  622,  623,  624,  625,  626,  628,  627,
      632,  630,  634,  633,  635,  644,  642,  643, 1197,  653,
      655,  657,  658, 1196, 1195,  659,  660,  661,  662,  663,
      667,  583,  671,  669,  673, 1194, 1193, 1192,  672,  677,
     1191,  675,  666,  680,    0,  691, 1190,  693,  694,  695,
      696,  702,  703, 1189,  697,  585,  704,  707, 1188,  709,

      714, 1187,  722,  708, 1186,  726, 1185,  727, 1184, 1183,
      724,  728,  730,  716,  732,  735, 1182,  738,  741,  742,
      743, 1181,  744, 1180,  746,  745, 1179,  751, 1178,  755,
      757, 1177,  751,  754,  764,  771,  772,  763,  499,  766,
      774,  779,  775,  776,  780,  782, 1176,  783, 1175, 1174,
      781,  787,  786,  795,  791,  796,  798,  801,  805,  802,
     1173,  808,  807,  810,  813,  814,  819,  820, 1172,  809,
      815, 1171, 1170, 1169, 1168, 1167, 1166, 1165,  826,  829,
      830, 1164,  831,  832,  835, 1163, 1162,  834, 1161, 1160,
      836,  840,  837,  842,  846, 1159,  848,  850,  851,  852,

      860, 1158,  854,  858, 1157,  861,  862,  864,  870,  866,
      868,  872, 1156, 1155, 1154,  880,  873, 1153, 1152, 1151,
      876,  882, 1150,  891,  893,  889,  874, 1149,  899, 1148,
     1147, 1146, 1145,  887,  895,  901, 1144,  904,  905, 1143,
     1142, 1141, 1140, 1139,  903,  907, 1138, 1137, 1136, 1135,
      909,  910,  914,  917,  911, 1134,  920, 1133,  921, 1132,
     1131,  923,  925,  926,  927,  929, 1130,  931,  933,  934,
      936,  935,  945,  937,  941, 1129,  947,  948,  953,  955,
      961,  962,  966,  963,  965, 1128,  967,  969,  971,  968,
     1127,  974,  978,  975,  979, 1126, 1123, 1113,  980, 1112,

      981,  996,  982,  999, 1111, 1000, 1001, 1002, 1109,  987,
     1108, 1107, 1004, 1008, 1011, 1013, 1012, 1014, 1016, 1019,
     1020, 1021, 1022, 1024, 1025, 1104, 1026, 1029, 1031, 1032,
     1035, 1037, 1038, 1101, 1041, 1047, 1048, 1049, 1051, 1100,
     1053, 1052, 1054, 1057, 1098, 1058, 1059, 1096, 1065, 1071,
     1060, 1069, 1072, 1077, 1079, 1082, 1081, 1083, 1084, 1085,
     1087,  984, 1088,  983,  710,  668, 1092,  664, 1097,  593,
      345,  214, 1094,  213, 1241, 1129, 1131,  187, 1135,  138
    } ;

static yyconst short int yy_def[581] =
    {   0,
      575,    1,  575,  575,  575,  575,  576,  577,  578,  575,
      577,  577,  577,  577,  579,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  577,  577,  576,  575,  577,  575,
      580,  580,  575,  575,  577,  577,  577,  577,  577,  579,
      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,

      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  575,  580,  580,  575,  577,  577,  577,   49,  577,
      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  577,   49,  577,  577,  577,  577,
      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,

      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  577,  577,  577,  577,  575,  575,
      575,  575,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  186,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,

      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  577,  577,  577,  575,  577,  577,
      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,

      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,

      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  577,  577,  577,    0,  575,  575,  575,  575,  575
    } ;

static yyconst short int yy_nxt[1285] =
    {   0,
        4,    5,    6,    7,    8,    9,   10,   11,   12,   13,
       14,   14,   14,    4,   15,    8,    8,    8,   16,   17,
       18,   19,   20,   21,   22,    8,   23,    8,   24,   25,
       26,   27,   28,    8,   29,   30,   31,   32,   33,   34,
       35,    8,   36,   42,   40,   43,   43,   43,   43,   44,
       44,   44,   44,   45,   45,   45,   45,   40,   46,  144,
       40,  145,   40,   40,   47,   48,   48,   48,   48,   40,
       47,   48,   48,   48,   48,   40,   40,   69,  126,   40,
       87,   40,   40,   40,   51,   40,   88,   70,   56,   40,
       94,   52,   57,   53,   40,   54,   49,   58,   55,   60,

       59,   61,   40,  146,  134,   78,   79,   64,   40,   40,
       40,   65,   62,   40,   80,   66,   63,   67,   71,   76,
       68,   72,   81,   40,   40,   77,   40,   82,   73,   84,
      245,   83,   74,   40,   75,   91,  119,   40,  116,   40,
      123,   92,   85,   40,  105,   89,   93,   90,   86,   95,
       40,  117,  118,   40,   40,  120,   40,  106,  130,   96,
      107,   97,   98,  121,  133,   99,  100,  108,  124,  124,
      124,  124,   40,  225,  101,   40,  102,  103,   40,  104,
       95,   40,   40,  137,   40,   43,   43,   43,   43,   41,
      109,  131,  110,  132,  135,   40,  141,  111,  136,  112,

       40,  113,  143,  142,   40,  114,  115,  125,   44,   44,
       44,   44,   47,   45,   45,   45,   45,   40,  127,  127,
      127,  127,   40,  147,   40,  128,   40,   40,   40,  150,
      169,  128,   47,   48,   48,   48,   48,   40,  129,  129,
      129,  129,   40,   40,  129,  129,  140,  129,  129,  129,
      129,  129,  129,   40,  138,   40,   40,   40,   40,   40,
      148,   40,   40,   40,   40,  153,  139,   40,  154,   40,
      151,  158,  149,   40,  156,   40,  160,   40,  162,  299,
      152,  157,  159,   40,  155,  163,   40,   40,   40,   40,
      161,  164,  172,   40,  165,  174,  176,   40,   40,  166,

      167,   40,  168,  170,  173,   40,   40,   40,  175,  171,
      180,   40,  177,   40,   40,   40,  179,  187,   40,  181,
      182,  178,   40,   40,   40,   40,   40,  199,  188,  184,
      189,  201,  183,   40,  197,   40,  185,   40,  190,  193,
      200,  186,  194,   40,   40,  195,  191,   40,  196,  198,
      192,   40,  207,   40,   40,  212,  202,  203,   40,   40,
      205,   40,  213,  208,  209,  204,   40,  214,  217,   40,
      210,  206,   40,  218,   40,  215,  211,  224,  219,  220,
      216,   40,  222,   40,  223,   40,   40,  226,   40,   40,
      247,  221,  124,  124,  124,  124,  230,  230,  230,  230,

      235,  236,  227,  231,  317,   40,   40,  238,  228,  231,
      127,  127,  127,  127,   40,  237,   40,  128,  239,   40,
       40,   40,   40,  128,  232,  233,  240,  234,  234,  234,
      234,   40,   40,   40,   40,  241,  242,  248,   40,  243,
      244,   40,  246,   40,   40,   40,   40,  250,   40,  249,
      252,  251,  254,   40,  253,  255,   40,   40,   40,   40,
       40,  260,   40,   40,   40,  267,   40,  256,  258,  266,
      257,   40,  269,  264,   40,  270,  262,  268,  259,  263,
      265,   40,   40,   40,  261,  274,   40,   40,   40,  271,
      273,  276,  272,   40,   40,   40,   40,  277,   40,   40,

       40,   40,   40,  279,   40,  275,   40,   40,  278,  281,
      296,  289,   40,  283,  322,  282,   40,  280,  410,   40,
      295,  284,  285,  285,  285,  285,  287,  286,  285,  285,
      288,  285,  285,  285,  285,  285,  285,   40,   40,  294,
       40,   40,  301,   40,   40,   40,  290,  297,  291,   40,
       40,   40,  292,   40,  293,   40,  303,   40,  298,  302,
      307,   40,  300,   40,  305,   40,  308,   40,  304,   40,
       40,   40,  306,   40,  312,  309,  310,   40,  313,  311,
      314,   40,  315,  316,   40,  318,  319,   40,  327,   40,
       40,  324,  320,  321,  323,   40,   40,  330,   40,  325,

      230,  230,  230,  230,   40,  326,   40,  231,  379,  333,
      360,  232,  232,  231,  328,  328,  328,  328,  328,  328,
      328,  328,  234,  234,  234,  234,   40,  234,  234,  234,
      234,   40,   40,   40,   40,   40,   40,   40,   40,   40,
       40,   40,  334,   40,  338,   40,   40,   40,   40,  329,
      331,  332,  343,  337,  339,   40,   40,   40,  342,  335,
      336,  341,  346,  348,  347,  344,   40,  340,   40,  345,
       40,   40,   40,   40,   40,   40,   40,   40,  355,   40,
       40,   40,   40,  356,   40,   40,   40,  354,   40,  349,
       40,  350,  351,   40,  352,  353,  357,  358,  359,  361,

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

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

       40,  461,   40,  463,   40,  459,   40,  471,   40,  466,
      472,  468,   40,  469,   40,  470,   40,   40,   40,  473,
       40,  474,   40,   40,   40,  475,  477,   40,  478,  479,
       40,  476,  480,   40,   40,  483,   40,  481,   40,   40,
       40,  485,   40,  484,   40,  482,   40,   40,   40,   40,
       40,  492,  487,  493,   40,  491,  486,  488,   40,  489,
       40,   40,  495,  494,  496,  490,   40,  498,   40,  497,
      502,  503,  499,  504,   40,   40,   40,  500,   40,   40,
       40,   40,   40,  505,   40,  501,  507,   40,   40,  509,
      513,   40,   40,   40,   40,   40,   40,   40,  506,  508,

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

       40,   40,  566,  567,  568,   40,  562,   40,  563,   40,
       40,   40,  572,   40,   40,  564,  565,   40,  571,  573,
       40,   40,   40,  570,   40,   40,   40,  569,  574,   37,
       37,   37,   37,   39,   39,   50,   40,   50,   50,   40,
       40,   40,   40,   40,   40,   40,   40,   40,   40,   40,
       40,   40,   40,   40,   40,   40,   40,   40,   40,   40,
       40,   40,   40,   40,   40,   40,   40,   40,   40,   40,
       40,   40,   40,   40,   40,   40,   40,   40,   40,   40,
       40,   40,   40,   40,   40,   40,   40,   40,   40,   40,
       40,   40,   40,   40,   40,   40,   40,   40,   40,   40,

       40,   40,   40,   40,   40,   40,   40,   40,   40,   40,
       40,   40,   40,   40,   40,   40,   40,   40,   40,   40,
       40,   40,   40,   40,   40,   40,   40,   40,   40,   40,
       40,  229,   40,   40,   40,   40,  122,   40,   38,  575,
        3,  575,  575,  575,  575,  575,  575,  575,  575,  575,
      575,  575,  575,  575,  575,  575,  575,  575,  575,  575,
      575,  575,  575,  575,  575,  575,  575,  575,  575,  575,
      575,  575,  575,  575,  575,  575,  575,  575,  575,  575,
      575,  575,  575,  575
    } ;

static yyconst short int yy_chk[1285] =
    {   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,    9,   62,    9,    9,    9,    9,   10,
       10,   10,   10,   11,   11,   11,   11,   11,   12,   62,
       20,   62,   26,   12,   13,   13,   13,   13,   13,   13,
       14,   14,   14,   14,   14,   14,   16,   20,   46,   17,
       26,   29,   63,   46,   16,   54,   26,   20,   17,   23,
       29,   16,   17,   16,   18,   16,   13,   17,   16,   18,

       17,   18,   19,   63,   54,   23,   23,   19,  145,   24,
       22,   19,   18,   21,   24,   19,   18,   19,   21,   22,
       19,   21,   24,   28,   25,   22,   27,   24,   21,   25,
      145,   24,   21,   33,   21,   28,   35,   35,   33,   31,
      580,   28,   25,   34,   31,   27,   28,   27,   25,   30,
       51,   33,   34,   30,   36,   35,   53,   31,   51,   30,
       31,   30,   30,   36,   53,   30,   30,   31,   42,   42,
       42,   42,   56,  119,   30,  119,   30,   30,   52,   30,
       32,   60,   55,   56,   32,   43,   43,   43,   43,  578,
       32,   52,   32,   52,   55,   61,   60,   32,   55,   32,

       64,   32,   61,   60,   66,   32,   32,   44,   44,   44,
       44,   44,   45,   45,   45,   45,   45,   45,   47,   47,
       47,   47,   47,   64,   80,   47,  574,  572,   58,   66,
       80,   47,   48,   48,   48,   48,   48,   48,   49,   49,
       49,   49,   49,   57,   49,   49,   58,   49,   49,   49,
       49,   49,   49,   65,   57,   67,   68,   69,   72,   71,
       65,   70,   76,  199,   73,   69,   57,   74,   70,   75,
       67,   72,   65,   77,   71,   78,   74,   79,   75,  199,
       68,   71,   73,   83,   70,   76,   81,   82,   85,   96,
       74,   77,   82,   84,   78,   83,   85,   86,   87,   79,

       79,   88,   79,   81,   82,   89,   91,   92,   84,   81,
       89,   93,   86,   94,   95,   97,   88,   96,  101,   91,
       92,   87,  102,   98,   99,  103,  100,  101,   97,   94,
       98,  103,   93,  108,  100,  109,   94,  112,   98,   99,
      102,   95,   99,  104,  105,   99,   98,  107,   99,  100,
       98,  110,  108,  111,  113,  112,  104,  105,  571,  114,
      107,  115,  113,  109,  110,  105,  120,  113,  114,  117,
      111,  107,  118,  115,  116,  113,  111,  118,  116,  116,
      113,  121,  117,  132,  117,  147,  135,  120,  217,  131,
      147,  116,  124,  124,  124,  124,  125,  125,  125,  125,

      131,  132,  121,  125,  217,  137,  134,  135,  121,  125,
      127,  127,  127,  127,  127,  134,  142,  127,  137,  139,
      140,  141,  148,  127,  128,  128,  139,  128,  128,  128,
      128,  128,  144,  146,  149,  140,  141,  148,  151,  142,
      144,  153,  146,  154,  152,  157,  155,  151,  156,  149,
      152,  151,  154,  158,  153,  155,  159,  160,  161,  164,
      163,  159,  165,  166,  162,  164,  167,  155,  157,  163,
      156,  170,  166,  162,  168,  167,  161,  165,  158,  161,
      162,  169,  171,  172,  160,  170,  173,  174,  175,  167,
      169,  172,  168,  176,  179,  180,  182,  173,  183,  194,

      196,  188,  190,  175,  187,  171,  222,  189,  174,  179,
      196,  190,  339,  182,  222,  180,  192,  176,  339,  202,
      194,  183,  186,  186,  186,  186,  188,  187,  186,  186,
      189,  186,  186,  186,  186,  186,  186,  191,  197,  192,
      198,  200,  202,  208,  203,  204,  191,  197,  191,  205,
      209,  207,  191,  210,  191,  206,  204,  212,  198,  203,
      207,  211,  200,  214,  206,  228,  208,  218,  205,  213,
      216,  220,  206,  215,  212,  209,  210,  224,  213,  211,
      214,  219,  215,  216,  221,  218,  219,  227,  228,  223,
      236,  224,  220,  221,  223,  225,  272,  236,  296,  225,

      230,  230,  230,  230,  240,  227,  570,  230,  296,  240,
      272,  231,  231,  230,  231,  231,  231,  231,  232,  232,
      232,  232,  233,  233,  233,  233,  233,  234,  234,  234,
      234,  234,  235,  237,  239,  244,  245,  246,  247,  248,
      250,  249,  244,  252,  248,  251,  254,  253,  255,  235,
      237,  239,  253,  247,  249,  257,  258,  256,  252,  245,
      246,  251,  256,  258,  257,  254,  260,  250,  261,  255,
      262,  263,  266,  267,  268,  269,  270,  568,  267,  283,
      271,  566,  274,  268,  273,  279,  275,  266,  282,  260,
      280,  261,  262,  284,  262,  263,  269,  270,  271,  273,

      274,  275,  283,  279,  286,  280,  288,  289,  290,  291,
      295,  284,  282,  286,  289,  292,  293,  297,  291,  288,
      298,  304,  300,  565,  292,  293,  297,  301,  290,  314,
      298,  300,  291,  295,  301,  303,  304,  311,  292,  306,
      308,  312,  314,  313,  303,  315,  306,  311,  316,  308,
      315,  318,  312,  313,  319,  320,  321,  323,  326,  325,
      328,  328,  328,  328,  333,  316,  320,  334,  330,  325,
      331,  326,  318,  330,  334,  319,  338,  335,  331,  340,
      323,  325,  335,  321,  336,  337,  333,  341,  343,  344,
      337,  336,  342,  345,  351,  346,  348,  338,  340,  353,

      352,  342,  346,  348,  355,  343,  341,  351,  354,  356,
      345,  357,  344,  352,  358,  360,  353,  354,  359,  355,
      363,  362,  370,  364,  360,  356,  365,  366,  371,  363,
      364,  358,  367,  368,  357,  365,  366,  359,  362,  379,
      370,  367,  380,  381,  383,  384,  368,  388,  385,  391,
      393,  371,  380,  392,  379,  394,  383,  385,  393,  395,
      392,  397,  381,  398,  399,  400,  388,  403,  384,  399,
      395,  404,  391,  401,  406,  407,  398,  408,  394,  410,
      403,  411,  407,  409,  397,  412,  417,  427,  400,  421,
      401,  406,  409,  416,  404,  422,  421,  416,  416,  411,

      434,  410,  426,  412,  424,  408,  425,  426,  435,  417,
      427,  422,  429,  424,  436,  425,  445,  438,  439,  429,
      446,  434,  451,  452,  455,  435,  438,  453,  439,  445,
      454,  436,  446,  457,  459,  453,  462,  451,  463,  464,
      465,  455,  466,  454,  468,  452,  469,  470,  472,  471,
      474,  466,  459,  468,  475,  465,  457,  462,  473,  463,
      477,  478,  470,  469,  471,  464,  479,  473,  480,  472,
      478,  479,  474,  480,  481,  482,  484,  475,  485,  483,
      487,  490,  488,  481,  489,  477,  483,  492,  494,  485,
      490,  493,  495,  499,  501,  503,  564,  562,  482,  484,

      510,  495,  492,  501,  487,  488,  499,  489,  493,  502,
      503,  494,  504,  506,  507,  508,  502,  513,  504,  507,
      506,  514,  513,  510,  515,  517,  516,  518,  508,  519,
      514,  516,  520,  521,  522,  523,  519,  524,  525,  527,
      523,  517,  528,  525,  529,  530,  521,  515,  531,  522,
      532,  533,  524,  527,  535,  520,  518,  531,  528,  532,
      536,  537,  538,  529,  539,  542,  541,  543,  530,  536,
      544,  546,  547,  551,  533,  541,  537,  538,  549,  539,
      543,  547,  552,  535,  550,  553,  551,  544,  542,  546,
      554,  550,  555,  549,  557,  556,  558,  559,  560,  552,

      561,  563,  557,  558,  559,  567,  553,  573,  554,  548,
      569,  545,  567,  540,  534,  555,  556,  526,  563,  569,
      512,  511,  509,  561,  505,  500,  498,  560,  573,  576,
      576,  576,  576,  577,  577,  579,  497,  579,  579,  496,
      491,  486,  476,  467,  461,  460,  458,  456,  450,  449,
      448,  447,  444,  443,  442,  441,  440,  437,  433,  432,
      431,  430,  428,  423,  420,  419,  418,  415,  414,  413,
      405,  402,  396,  390,  389,  387,  386,  382,  378,  377,
      376,  375,  374,  373,  372,  369,  361,  350,  349,  347,
      332,  329,  327,  324,  322,  317,  310,  309,  307,  305,

      302,  299,  294,  287,  281,  278,  277,  276,  265,  264,
      259,  243,  242,  241,  238,  226,  201,  195,  193,  185,
      184,  181,  178,  177,  150,  143,  138,  136,  133,  130,
      126,  122,  106,   90,   59,   39,   37,    8,    7,    3,
      575,  575,  575,  575,  575,  575,  575,  575,  575,  575,
      575,  575,  575,  575,  575,  575,  575,  575,  575,  575,
      575,  575,  575,  575,  575,  575,  575,  575,  575,  575,
      575,  575,  575,  575,  575,  575,  575,  575,  575,  575,
      575,  575,  575,  575
    } ;

static yy_state_type yy_state_buf[YY_BUF_SIZE + 2], *yy_state_ptr;
static char *yy_full_match;
static int yy_lp;
#define REJECT \
{ \
*yy_cp = yy_hold_char; /* undo effects of setting up yytext */ \
yy_cp = yy_full_match; /* restore poss. backed-over text */ \
++yy_lp; \
goto find_rule; \
}
#define yymore() yymore_used_but_not_detected
#define YY_MORE_ADJ 0
#define YY_RESTORE_YY_MORE_OFFSET
char *yytext;
#line 1 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
#define INITIAL 0
/*===-- 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.
//
//===----------------------------------------------------------------------===*/
#define YY_NEVER_INTERACTIVE 1
#line 28 "/proj/llvm/llvm-1/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){
  yy_switch_to_buffer(yy_create_buffer( F, YY_BUF_SIZE ) );
}
void set_scan_string (const char * str) {
  yy_scan_string (str);
}

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

// Construct a token value for an obsolete token
#define RET_TOK_OBSOLETE(type, Enum, sym) \
  llvmAsmlval.type.opcode = Instruction::Enum; \
  llvmAsmlval.type.obsolete = true; \
  return sym

// Construct a token value for a non-obsolete type
#define RET_TY(CType, sym) \
  llvmAsmlval.TypeVal.type = new PATypeHolder(CType); \
  llvmAsmlval.TypeVal.signedness = isSignless; \
  return sym

// Construct a token value for an obsolete token
#define RET_TY_OBSOLETE(CType, sign, sym) \
  llvmAsmlval.TypeVal.type = new PATypeHolder(CType); \
  llvmAsmlval.TypeVal.signedness = sign; \
  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 */
/* Variable(Value) identifiers start with a % sign */
/* Label identifiers end with a colon */
/* Quoted names can contain any character except " and \ */
/* [PN]Integer: match positive and negative literal integer values that
 * are preceeded by a '%' character.  These represent unnamed variable slots.
 */
/* 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 1059 "Lexer.cpp"

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

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

#ifndef YY_NO_UNPUT
static inline void yyunput YY_PROTO(( int c, char *buf_ptr ));
#endif

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

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

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

#if YY_STACK_USED
static int yy_start_stack_ptr = 0;
static int yy_start_stack_depth = 0;
static int *yy_start_stack = 0;
#ifndef YY_NO_PUSH_STATE
static void yy_push_state YY_PROTO(( int new_state ));
#endif
#ifndef YY_NO_POP_STATE
static void yy_pop_state YY_PROTO(( void ));
#endif
#ifndef YY_NO_TOP_STATE
static int yy_top_state YY_PROTO(( void ));
#endif

#else
#define YY_NO_PUSH_STATE 1
#define YY_NO_POP_STATE 1
#define YY_NO_TOP_STATE 1
#endif

#ifdef YY_MALLOC_DECL
YY_MALLOC_DECL
#else
#if __STDC__
#ifndef __cplusplus
#include <stdlib.h>
#endif
#else
/* Just try to get by without declaring the routines.  This will fail
 * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
 * or sizeof(void*) != sizeof(int).
 */
#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( yytext, yyleng, 1, yyout )
#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->yy_is_interactive ) \
		{ \
		int c = '*', n; \
		for ( n = 0; n < max_size && \
			     (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
			buf[n] = (char) c; \
		if ( c == '\n' ) \
			buf[n++] = (char) c; \
		if ( c == EOF && ferror( yyin ) ) \
			YY_FATAL_ERROR( "input in flex scanner failed" ); \
		result = n; \
		} \
	else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \
		  && ferror( yyin ) ) \
		YY_FATAL_ERROR( "input in flex scanner failed" );
#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

/* Default declaration of generated scanner - a define so the user can
 * easily add parameters.
 */
#ifndef YY_DECL
#define YY_DECL int yylex YY_PROTO(( void ))
#endif

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

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

#define YY_RULE_SETUP \
	YY_USER_ACTION

YY_DECL
	{
	register yy_state_type yy_current_state;
	register char *yy_cp = NULL, *yy_bp = NULL;
	register int yy_act;

#line 200 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"


#line 1213 "Lexer.cpp"

	if ( yy_init )
		{
		yy_init = 0;

#ifdef YY_USER_INIT
		YY_USER_INIT;
#endif

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

		if ( ! yyin )
			yyin = stdin;

		if ( ! yyout )
			yyout = stdout;

		if ( ! yy_current_buffer )
			yy_current_buffer =
				yy_create_buffer( yyin, YY_BUF_SIZE );

		yy_load_buffer_state();
		}

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

		/* Support of yytext. */
		*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_state_ptr = yy_state_buf;
		*yy_state_ptr++ = yy_current_state;
yy_match:
		do
			{
			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*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 >= 576 )
					yy_c = yy_meta[(unsigned int) yy_c];
				}
			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
			*yy_state_ptr++ = yy_current_state;
			++yy_cp;
			}
		while ( yy_current_state != 575 );

yy_find_action:
		yy_current_state = *--yy_state_ptr;
		yy_lp = yy_accept[yy_current_state];
find_rule: /* we branch to this label when backing up */
		for ( ; ; ) /* until we find what rule we matched */
			{
			if ( yy_lp && yy_lp < yy_accept[yy_current_state + 1] )
				{
				yy_act = yy_acclist[yy_lp];
					{
					yy_full_match = yy_cp;
					break;
					}
				}
			--yy_cp;
			yy_current_state = *--yy_state_ptr;
			yy_lp = yy_accept[yy_current_state];
			}

		YY_DO_BEFORE_ACTION;

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

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


		switch ( yy_act )
	{ /* beginning of action switch */
case 1:
YY_RULE_SETUP
#line 202 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ /* Ignore comments for now */ }
	YY_BREAK
case 2:
YY_RULE_SETUP
#line 204 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return BEGINTOK; }
	YY_BREAK
case 3:
YY_RULE_SETUP
#line 205 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return ENDTOK; }
	YY_BREAK
case 4:
YY_RULE_SETUP
#line 206 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return TRUETOK;  }
	YY_BREAK
case 5:
YY_RULE_SETUP
#line 207 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return FALSETOK; }
	YY_BREAK
case 6:
YY_RULE_SETUP
#line 208 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return DECLARE; }
	YY_BREAK
case 7:
YY_RULE_SETUP
#line 209 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return GLOBAL; }
	YY_BREAK
case 8:
YY_RULE_SETUP
#line 210 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return CONSTANT; }
	YY_BREAK
case 9:
YY_RULE_SETUP
#line 211 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return INTERNAL; }
	YY_BREAK
case 10:
YY_RULE_SETUP
#line 212 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return LINKONCE; }
	YY_BREAK
case 11:
YY_RULE_SETUP
#line 213 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return WEAK; }
	YY_BREAK
case 12:
YY_RULE_SETUP
#line 214 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return APPENDING; }
	YY_BREAK
case 13:
YY_RULE_SETUP
#line 215 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return DLLIMPORT; }
	YY_BREAK
case 14:
YY_RULE_SETUP
#line 216 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return DLLEXPORT; }
	YY_BREAK
case 15:
YY_RULE_SETUP
#line 217 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return EXTERN_WEAK; }
	YY_BREAK
case 16:
YY_RULE_SETUP
#line 218 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return EXTERNAL; }    /* Deprecated, turn into external */
	YY_BREAK
case 17:
YY_RULE_SETUP
#line 219 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return EXTERNAL; }
	YY_BREAK
case 18:
YY_RULE_SETUP
#line 220 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return IMPLEMENTATION; }
	YY_BREAK
case 19:
YY_RULE_SETUP
#line 221 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return ZEROINITIALIZER; }
	YY_BREAK
case 20:
YY_RULE_SETUP
#line 222 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return DOTDOTDOT; }
	YY_BREAK
case 21:
YY_RULE_SETUP
#line 223 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return UNDEF; }
	YY_BREAK
case 22:
YY_RULE_SETUP
#line 224 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return NULL_TOK; }
	YY_BREAK
case 23:
YY_RULE_SETUP
#line 225 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return TO; }
	YY_BREAK
case 24:
YY_RULE_SETUP
#line 226 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(TermOpVal, Unwind, UNWIND); }
	YY_BREAK
case 25:
YY_RULE_SETUP
#line 227 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return NOT; }  /* Deprecated, turned into XOR */
	YY_BREAK
case 26:
YY_RULE_SETUP
#line 228 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return TAIL; }
	YY_BREAK
case 27:
YY_RULE_SETUP
#line 229 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return TARGET; }
	YY_BREAK
case 28:
YY_RULE_SETUP
#line 230 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return TRIPLE; }
	YY_BREAK
case 29:
YY_RULE_SETUP
#line 231 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return DEPLIBS; }
	YY_BREAK
case 30:
YY_RULE_SETUP
#line 232 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return ENDIAN; }
	YY_BREAK
case 31:
YY_RULE_SETUP
#line 233 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return POINTERSIZE; }
	YY_BREAK
case 32:
YY_RULE_SETUP
#line 234 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return DATALAYOUT; }
	YY_BREAK
case 33:
YY_RULE_SETUP
#line 235 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return LITTLE; }
	YY_BREAK
case 34:
YY_RULE_SETUP
#line 236 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return BIG; }
	YY_BREAK
case 35:
YY_RULE_SETUP
#line 237 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return VOLATILE; }
	YY_BREAK
case 36:
YY_RULE_SETUP
#line 238 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return ALIGN;  }
	YY_BREAK
case 37:
YY_RULE_SETUP
#line 239 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return SECTION; }
	YY_BREAK
case 38:
YY_RULE_SETUP
#line 240 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return MODULE; }
	YY_BREAK
case 39:
YY_RULE_SETUP
#line 241 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return ASM_TOK; }
	YY_BREAK
case 40:
YY_RULE_SETUP
#line 242 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return SIDEEFFECT; }
	YY_BREAK
case 41:
YY_RULE_SETUP
#line 244 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return CC_TOK; }
	YY_BREAK
case 42:
YY_RULE_SETUP
#line 245 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return CCC_TOK; }
	YY_BREAK
case 43:
YY_RULE_SETUP
#line 246 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return CSRETCC_TOK; }
	YY_BREAK
case 44:
YY_RULE_SETUP
#line 247 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return FASTCC_TOK; }
	YY_BREAK
case 45:
YY_RULE_SETUP
#line 248 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return COLDCC_TOK; }
	YY_BREAK
case 46:
YY_RULE_SETUP
#line 249 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return X86_STDCALLCC_TOK; }
	YY_BREAK
case 47:
YY_RULE_SETUP
#line 250 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return X86_FASTCALLCC_TOK; }
	YY_BREAK
case 48:
YY_RULE_SETUP
#line 252 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TY(Type::VoidTy, VOID);  }
	YY_BREAK
case 49:
YY_RULE_SETUP
#line 253 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TY(Type::BoolTy, BOOL);  }
	YY_BREAK
case 50:
YY_RULE_SETUP
#line 254 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TY_OBSOLETE(Type::SByteTy, isSigned,   SBYTE); }
	YY_BREAK
case 51:
YY_RULE_SETUP
#line 255 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TY_OBSOLETE(Type::UByteTy, isUnsigned, UBYTE); }
	YY_BREAK
case 52:
YY_RULE_SETUP
#line 256 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TY_OBSOLETE(Type::ShortTy, isSigned,   SHORT); }
	YY_BREAK
case 53:
YY_RULE_SETUP
#line 257 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TY_OBSOLETE(Type::UShortTy,isUnsigned, USHORT); }
	YY_BREAK
case 54:
YY_RULE_SETUP
#line 258 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TY_OBSOLETE(Type::IntTy,   isSigned,   INT);    }
	YY_BREAK
case 55:
YY_RULE_SETUP
#line 259 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TY_OBSOLETE(Type::UIntTy,  isUnsigned, UINT);   }
	YY_BREAK
case 56:
YY_RULE_SETUP
#line 260 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TY_OBSOLETE(Type::LongTy,  isSigned,   LONG);   }
	YY_BREAK
case 57:
YY_RULE_SETUP
#line 261 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TY_OBSOLETE(Type::ULongTy, isUnsigned, ULONG);  }
	YY_BREAK
case 58:
YY_RULE_SETUP
#line 262 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TY(Type::FloatTy, FLOAT);  }
	YY_BREAK
case 59:
YY_RULE_SETUP
#line 263 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TY(Type::DoubleTy, DOUBLE); }
	YY_BREAK
case 60:
YY_RULE_SETUP
#line 264 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TY(Type::LabelTy,  LABEL);  }
	YY_BREAK
case 61:
YY_RULE_SETUP
#line 265 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return TYPE;   }
	YY_BREAK
case 62:
YY_RULE_SETUP
#line 266 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return OPAQUE; }
	YY_BREAK
case 63:
YY_RULE_SETUP
#line 268 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, Add, ADD); }
	YY_BREAK
case 64:
YY_RULE_SETUP
#line 269 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, Sub, SUB); }
	YY_BREAK
case 65:
YY_RULE_SETUP
#line 270 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, Mul, MUL); }
	YY_BREAK
case 66:
YY_RULE_SETUP
#line 271 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK_OBSOLETE(BinaryOpVal, UDiv, UDIV); }
	YY_BREAK
case 67:
YY_RULE_SETUP
#line 272 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, UDiv, UDIV); }
	YY_BREAK
case 68:
YY_RULE_SETUP
#line 273 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, SDiv, SDIV); }
	YY_BREAK
case 69:
YY_RULE_SETUP
#line 274 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, FDiv, FDIV); }
	YY_BREAK
case 70:
YY_RULE_SETUP
#line 275 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK_OBSOLETE(BinaryOpVal, URem, UREM); }
	YY_BREAK
case 71:
YY_RULE_SETUP
#line 276 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, URem, UREM); }
	YY_BREAK
case 72:
YY_RULE_SETUP
#line 277 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, SRem, SREM); }
	YY_BREAK
case 73:
YY_RULE_SETUP
#line 278 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, FRem, FREM); }
	YY_BREAK
case 74:
YY_RULE_SETUP
#line 279 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, And, AND); }
	YY_BREAK
case 75:
YY_RULE_SETUP
#line 280 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, Or , OR ); }
	YY_BREAK
case 76:
YY_RULE_SETUP
#line 281 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, Xor, XOR); }
	YY_BREAK
case 77:
YY_RULE_SETUP
#line 282 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, SetNE, SETNE); }
	YY_BREAK
case 78:
YY_RULE_SETUP
#line 283 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, SetEQ, SETEQ); }
	YY_BREAK
case 79:
YY_RULE_SETUP
#line 284 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, SetLT, SETLT); }
	YY_BREAK
case 80:
YY_RULE_SETUP
#line 285 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, SetGT, SETGT); }
	YY_BREAK
case 81:
YY_RULE_SETUP
#line 286 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, SetLE, SETLE); }
	YY_BREAK
case 82:
YY_RULE_SETUP
#line 287 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, SetGE, SETGE); }
	YY_BREAK
case 83:
YY_RULE_SETUP
#line 289 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(OtherOpVal, PHI, PHI_TOK); }
	YY_BREAK
case 84:
YY_RULE_SETUP
#line 290 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(OtherOpVal, Call, CALL); }
	YY_BREAK
case 85:
YY_RULE_SETUP
#line 291 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK_OBSOLETE(CastOpVal, Trunc, TRUNC); }
	YY_BREAK
case 86:
YY_RULE_SETUP
#line 292 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(CastOpVal, Trunc, TRUNC); }
	YY_BREAK
case 87:
YY_RULE_SETUP
#line 293 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(CastOpVal, ZExt, ZEXT); }
	YY_BREAK
case 88:
YY_RULE_SETUP
#line 294 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(CastOpVal, SExt, SEXT); }
	YY_BREAK
case 89:
YY_RULE_SETUP
#line 295 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(CastOpVal, FPTrunc, FPTRUNC); }
	YY_BREAK
case 90:
YY_RULE_SETUP
#line 296 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(CastOpVal, FPExt, FPEXT); }
	YY_BREAK
case 91:
YY_RULE_SETUP
#line 297 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(CastOpVal, UIToFP, UITOFP); }
	YY_BREAK
case 92:
YY_RULE_SETUP
#line 298 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(CastOpVal, SIToFP, SITOFP); }
	YY_BREAK
case 93:
YY_RULE_SETUP
#line 299 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(CastOpVal, FPToUI, FPTOUI); }
	YY_BREAK
case 94:
YY_RULE_SETUP
#line 300 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(CastOpVal, FPToSI, FPTOSI); }
	YY_BREAK
case 95:
YY_RULE_SETUP
#line 301 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(CastOpVal, IntToPtr, INTTOPTR); }
	YY_BREAK
case 96:
YY_RULE_SETUP
#line 302 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(CastOpVal, PtrToInt, PTRTOINT); }
	YY_BREAK
case 97:
YY_RULE_SETUP
#line 303 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(CastOpVal, BitCast, BITCAST); }
	YY_BREAK
case 98:
YY_RULE_SETUP
#line 304 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(OtherOpVal, Select, SELECT); }
	YY_BREAK
case 99:
YY_RULE_SETUP
#line 305 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(OtherOpVal, Shl, SHL); }
	YY_BREAK
case 100:
YY_RULE_SETUP
#line 306 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK_OBSOLETE(OtherOpVal, LShr, LSHR); }
	YY_BREAK
case 101:
YY_RULE_SETUP
#line 307 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(OtherOpVal, LShr, LSHR); }
	YY_BREAK
case 102:
YY_RULE_SETUP
#line 308 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(OtherOpVal, AShr, ASHR); }
	YY_BREAK
case 103:
YY_RULE_SETUP
#line 309 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return VANEXT_old; }
	YY_BREAK
case 104:
YY_RULE_SETUP
#line 310 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return VAARG_old; }
	YY_BREAK
case 105:
YY_RULE_SETUP
#line 311 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(OtherOpVal, VAArg , VAARG); }
	YY_BREAK
case 106:
YY_RULE_SETUP
#line 312 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(TermOpVal, Ret, RET); }
	YY_BREAK
case 107:
YY_RULE_SETUP
#line 313 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(TermOpVal, Br, BR); }
	YY_BREAK
case 108:
YY_RULE_SETUP
#line 314 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(TermOpVal, Switch, SWITCH); }
	YY_BREAK
case 109:
YY_RULE_SETUP
#line 315 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(TermOpVal, Invoke, INVOKE); }
	YY_BREAK
case 110:
YY_RULE_SETUP
#line 316 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(TermOpVal, Unwind, UNWIND); }
	YY_BREAK
case 111:
YY_RULE_SETUP
#line 317 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(TermOpVal, Unreachable, UNREACHABLE); }
	YY_BREAK
case 112:
YY_RULE_SETUP
#line 319 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(MemOpVal, Malloc, MALLOC); }
	YY_BREAK
case 113:
YY_RULE_SETUP
#line 320 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(MemOpVal, Alloca, ALLOCA); }
	YY_BREAK
case 114:
YY_RULE_SETUP
#line 321 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(MemOpVal, Free, FREE); }
	YY_BREAK
case 115:
YY_RULE_SETUP
#line 322 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(MemOpVal, Load, LOAD); }
	YY_BREAK
case 116:
YY_RULE_SETUP
#line 323 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(MemOpVal, Store, STORE); }
	YY_BREAK
case 117:
YY_RULE_SETUP
#line 324 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(MemOpVal, GetElementPtr, GETELEMENTPTR); }
	YY_BREAK
case 118:
YY_RULE_SETUP
#line 326 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(OtherOpVal, ExtractElement, EXTRACTELEMENT); }
	YY_BREAK
case 119:
YY_RULE_SETUP
#line 327 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(OtherOpVal, InsertElement, INSERTELEMENT); }
	YY_BREAK
case 120:
YY_RULE_SETUP
#line 328 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ RET_TOK(OtherOpVal, ShuffleVector, SHUFFLEVECTOR); }
	YY_BREAK
case 121:
YY_RULE_SETUP
#line 331 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{
                  UnEscapeLexed(yytext+1);
                  llvmAsmlval.StrVal = strdup(yytext+1);             // Skip %
                  return VAR_ID;
                }
	YY_BREAK
case 122:
YY_RULE_SETUP
#line 336 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{
                  yytext[strlen(yytext)-1] = 0;  // nuke colon
                  UnEscapeLexed(yytext);
                  llvmAsmlval.StrVal = strdup(yytext);
                  return LABELSTR;
                }
	YY_BREAK
case 123:
YY_RULE_SETUP
#line 342 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{
                  yytext[strlen(yytext)-2] = 0;  // nuke colon, end quote
                  UnEscapeLexed(yytext+1);
                  llvmAsmlval.StrVal = strdup(yytext+1);
                  return LABELSTR;
                }
	YY_BREAK
case 124:
YY_RULE_SETUP
#line 349 "/proj/llvm/llvm-1/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.
                   //
                   yytext[strlen(yytext)-1] = 0;           // nuke end quote
                   llvmAsmlval.StrVal = strdup(yytext+1);  // Nuke start quote
                   return STRINGCONSTANT;
                 }
	YY_BREAK
case 125:
YY_RULE_SETUP
#line 360 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ llvmAsmlval.UInt64Val = atoull(yytext); return EUINT64VAL; }
	YY_BREAK
case 126:
YY_RULE_SETUP
#line 361 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{
                  uint64_t Val = atoull(yytext+1);
                  // +1:  we have bigger negative range
                  if (Val > (uint64_t)INT64_MAX+1)
                    GenerateError("Constant too large for signed 64 bits!");
                  llvmAsmlval.SInt64Val = -Val;
                  return ESINT64VAL;
                }
	YY_BREAK
case 127:
YY_RULE_SETUP
#line 369 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{
                   llvmAsmlval.UInt64Val = HexIntToVal(yytext+3);
                   return yytext[0] == 's' ? ESINT64VAL : EUINT64VAL;
                 }
	YY_BREAK
case 128:
YY_RULE_SETUP
#line 374 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{
                  uint64_t Val = atoull(yytext+1);
                  if ((unsigned)Val != Val)
                    GenerateError("Invalid value number (too large)!");
                  llvmAsmlval.UIntVal = unsigned(Val);
                  return UINTVAL;
                }
	YY_BREAK
case 129:
YY_RULE_SETUP
#line 381 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{
                  uint64_t Val = atoull(yytext+2);
                  // +1:  we have bigger negative range
                  if (Val > (uint64_t)INT32_MAX+1)
                    GenerateError("Constant too large for signed 32 bits!");
                  llvmAsmlval.SIntVal = (int)-Val;
                  return SINTVAL;
                }
	YY_BREAK
case 130:
YY_RULE_SETUP
#line 390 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ llvmAsmlval.FPVal = atof(yytext); return FPVAL; }
	YY_BREAK
case 131:
YY_RULE_SETUP
#line 391 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ llvmAsmlval.FPVal = HexToFP(yytext); return FPVAL; }
	YY_BREAK
case YY_STATE_EOF(INITIAL):
#line 393 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{
                  /* Make sure to free the internal buffers for flex when we are
                   * done reading our input!
                   */
                  yy_delete_buffer(YY_CURRENT_BUFFER);
                  return EOF;
                }
	YY_BREAK
case 132:
YY_RULE_SETUP
#line 401 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ /* Ignore whitespace */ }
	YY_BREAK
case 133:
YY_RULE_SETUP
#line 402 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
{ return yytext[0]; }
	YY_BREAK
case 134:
YY_RULE_SETUP
#line 404 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
YY_FATAL_ERROR( "flex scanner jammed" );
	YY_BREAK
#line 2029 "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->yy_buffer_status == YY_BUFFER_NEW )
			{
			/* We're scanning a new file or input source.  It's
			 * possible that this happened because the user
			 * just pointed yyin at a new source and called
			 * yylex().  If so, then we have to assure
			 * consistency between yy_current_buffer and our
			 * globals.  Here is the right place to do so, because
			 * this is the first action (other than possibly a
			 * back-up) that will match for the new input source.
			 */
			yy_n_chars = yy_current_buffer->yy_n_chars;
			yy_current_buffer->yy_input_file = yyin;
			yy_current_buffer->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->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_c_buf_p;
				goto yy_find_action;
				}
			}

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

				if ( yywrap() )
					{
					/* Note: because we've taken care in
					 * yy_get_next_buffer() to have set up
					 * yytext, we can now set up
					 * yy_c_buf_p so that if some total
					 * hoser (like flex itself) wants to
					 * call the scanner after we return the
					 * YY_NULL, it'll still work - another
					 * YY_NULL will get returned.
					 */
					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->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 yylex */


/* yy_get_next_buffer - try to read in a new buffer
 *
 * Returns a code representing an action:
 *	EOB_ACT_LAST_MATCH -
 *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
 *	EOB_ACT_END_OF_FILE - end of file
 */

static int yy_get_next_buffer()
	{
	register char *dest = yy_current_buffer->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->yy_ch_buf[yy_n_chars + 1] )
		YY_FATAL_ERROR(
		"fatal flex scanner internal error--end of buffer missed" );

	if ( yy_current_buffer->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->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->yy_n_chars = yy_n_chars = 0;

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

		while ( num_to_read <= 0 )
			{ /* Not enough room in the buffer - grow it. */
#ifdef YY_USES_REJECT
			YY_FATAL_ERROR(
"input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
#else

			/* 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. */
					yy_flex_realloc( (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->yy_buf_size -
						number_to_move - 1;
#endif
			}

		if ( num_to_read > YY_READ_BUF_SIZE )
			num_to_read = YY_READ_BUF_SIZE;

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

		yy_current_buffer->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;
			yyrestart( yyin );
			}

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

	else
		ret_val = EOB_ACT_CONTINUE_SCAN;

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

	yytext_ptr = &yy_current_buffer->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()
	{
	register yy_state_type yy_current_state;
	register char *yy_cp;

	yy_current_state = yy_start;
	yy_state_ptr = yy_state_buf;
	*yy_state_ptr++ = yy_current_state;

	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);
		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 >= 576 )
				yy_c = yy_meta[(unsigned int) yy_c];
			}
		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
		*yy_state_ptr++ = yy_current_state;
		}

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

#ifdef YY_USE_PROTOS
static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
#else
static yy_state_type yy_try_NUL_trans( yy_current_state )
yy_state_type yy_current_state;
#endif
	{
	register int yy_is_jam;

	register YY_CHAR yy_c = 1;
	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 >= 576 )
			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 == 575);
	if ( ! yy_is_jam )
		*yy_state_ptr++ = yy_current_state;

	return yy_is_jam ? 0 : yy_current_state;
	}


#ifndef YY_NO_UNPUT
#ifdef YY_USE_PROTOS
static inline void yyunput( int c, register char *yy_bp )
#else
static inline void yyunput( c, yy_bp )
int c;
register char *yy_bp;
#endif
	{
	register char *yy_cp = yy_c_buf_p;

	/* undo effects of setting up yytext */
	*yy_cp = yy_hold_char;

	if ( yy_cp < yy_current_buffer->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->yy_ch_buf[
					yy_current_buffer->yy_buf_size + 2];
		register char *source =
				&yy_current_buffer->yy_ch_buf[number_to_move];

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

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

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

	*--yy_cp = (char) c;

	if ( c == '\n' )
		--yylineno;

	yytext_ptr = yy_bp;
	yy_hold_char = *yy_cp;
	yy_c_buf_p = yy_cp;
	}
#endif	/* ifndef YY_NO_UNPUT */


#ifndef YY_NO_INPUT
#ifdef __cplusplus
static int yyinput()
#else
static int input()
#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->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. */
					yyrestart( yyin );

					/* fall through */

				case EOB_ACT_END_OF_FILE:
					{
					if ( yywrap() )
						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 yytext */
	yy_hold_char = *++yy_c_buf_p;

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

	return c;
	}
#endif /* YY_NO_INPUT */

#ifdef YY_USE_PROTOS
void yyrestart( FILE *input_file )
#else
void yyrestart( input_file )
FILE *input_file;
#endif
	{
	if ( ! yy_current_buffer )
		yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );

	yy_init_buffer( yy_current_buffer, input_file );
	yy_load_buffer_state();
	}


#ifdef YY_USE_PROTOS
void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
#else
void yy_switch_to_buffer( new_buffer )
YY_BUFFER_STATE new_buffer;
#endif
	{
	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->yy_buf_pos = yy_c_buf_p;
		yy_current_buffer->yy_n_chars = yy_n_chars;
		}

	yy_current_buffer = new_buffer;
	yy_load_buffer_state();

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


#ifdef YY_USE_PROTOS
void yy_load_buffer_state( void )
#else
void yy_load_buffer_state()
#endif
	{
	yy_n_chars = yy_current_buffer->yy_n_chars;
	yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
	yyin = yy_current_buffer->yy_input_file;
	yy_hold_char = *yy_c_buf_p;
	}


#ifdef YY_USE_PROTOS
YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
#else
YY_BUFFER_STATE yy_create_buffer( file, size )
FILE *file;
int size;
#endif
	{
	YY_BUFFER_STATE b;

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

	b->yy_buf_size = size;

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

	b->yy_is_our_buffer = 1;

	yy_init_buffer( b, file );

	return b;
	}


#ifdef YY_USE_PROTOS
void yy_delete_buffer( YY_BUFFER_STATE b )
#else
void yy_delete_buffer( b )
YY_BUFFER_STATE b;
#endif
	{
	if ( ! b )
		return;

	if ( b == yy_current_buffer )
		yy_current_buffer = (YY_BUFFER_STATE) 0;

	if ( b->yy_is_our_buffer )
		yy_flex_free( (void *) b->yy_ch_buf );

	yy_flex_free( (void *) b );
	}



#ifdef YY_USE_PROTOS
void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
#else
void yy_init_buffer( b, file )
YY_BUFFER_STATE b;
FILE *file;
#endif


	{
	yy_flush_buffer( b );

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

#if YY_ALWAYS_INTERACTIVE
	b->yy_is_interactive = 1;
#else
#if YY_NEVER_INTERACTIVE
	b->yy_is_interactive = 0;
#else
	b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
#endif
#endif
	}


#ifdef YY_USE_PROTOS
void yy_flush_buffer( YY_BUFFER_STATE b )
#else
void yy_flush_buffer( b )
YY_BUFFER_STATE b;
#endif

	{
	if ( ! b )
		return;

	b->yy_n_chars = 0;

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

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

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

	if ( b == yy_current_buffer )
		yy_load_buffer_state();
	}


#ifndef YY_NO_SCAN_BUFFER
#ifdef YY_USE_PROTOS
YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
#else
YY_BUFFER_STATE yy_scan_buffer( base, size )
char *base;
yy_size_t size;
#endif
	{
	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) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
	if ( ! b )
		YY_FATAL_ERROR( "out of dynamic memory in yy_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;

	yy_switch_to_buffer( b );

	return b;
	}
#endif


#ifndef YY_NO_SCAN_STRING
#ifdef YY_USE_PROTOS
YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
#else
YY_BUFFER_STATE yy_scan_string( yy_str )
yyconst char *yy_str;
#endif
	{
	int len;
	for ( len = 0; yy_str[len]; ++len )
		;

	return yy_scan_bytes( yy_str, len );
	}
#endif


#ifndef YY_NO_SCAN_BYTES
#ifdef YY_USE_PROTOS
YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len )
#else
YY_BUFFER_STATE yy_scan_bytes( bytes, len )
yyconst char *bytes;
int len;
#endif
	{
	YY_BUFFER_STATE b;
	char *buf;
	yy_size_t n;
	int i;

	/* Get memory for full buffer, including space for trailing EOB's. */
	n = len + 2;
	buf = (char *) yy_flex_alloc( n );
	if ( ! buf )
		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );

	for ( i = 0; i < len; ++i )
		buf[i] = bytes[i];

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

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

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

	return b;
	}
#endif


#ifndef YY_NO_PUSH_STATE
#ifdef YY_USE_PROTOS
static void yy_push_state( int new_state )
#else
static void yy_push_state( new_state )
int new_state;
#endif
	{
	if ( yy_start_stack_ptr >= yy_start_stack_depth )
		{
		yy_size_t new_size;

		yy_start_stack_depth += YY_START_STACK_INCR;
		new_size = yy_start_stack_depth * sizeof( int );

		if ( ! yy_start_stack )
			yy_start_stack = (int *) yy_flex_alloc( new_size );

		else
			yy_start_stack = (int *) yy_flex_realloc(
					(void *) yy_start_stack, new_size );

		if ( ! yy_start_stack )
			YY_FATAL_ERROR(
			"out of memory expanding start-condition stack" );
		}

	yy_start_stack[yy_start_stack_ptr++] = YY_START;

	BEGIN(new_state);
	}
#endif


#ifndef YY_NO_POP_STATE
static void yy_pop_state()
	{
	if ( --yy_start_stack_ptr < 0 )
		YY_FATAL_ERROR( "start-condition stack underflow" );

	BEGIN(yy_start_stack[yy_start_stack_ptr]);
	}
#endif


#ifndef YY_NO_TOP_STATE
static int yy_top_state()
	{
	return yy_start_stack[yy_start_stack_ptr - 1];
	}
#endif

#ifndef YY_EXIT_FAILURE
#define YY_EXIT_FAILURE 2
#endif

#ifdef YY_USE_PROTOS
static void yy_fatal_error( yyconst char msg[] )
#else
static void yy_fatal_error( msg )
char msg[];
#endif
	{
	(void) fprintf( stderr, "%s\n", msg );
	exit( YY_EXIT_FAILURE );
	}



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

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


/* Internal utility routines. */

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

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

	return n;
	}
#endif


#ifdef YY_USE_PROTOS
static void *yy_flex_alloc( yy_size_t size )
#else
static void *yy_flex_alloc( size )
yy_size_t size;
#endif
	{
	return (void *) malloc( size );
	}

#ifdef YY_USE_PROTOS
static inline void *yy_flex_realloc( void *ptr, yy_size_t size )
#else
static inline void *yy_flex_realloc( ptr, size )
void *ptr;
yy_size_t size;
#endif
	{
	/* 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 );
	}

#ifdef YY_USE_PROTOS
static void yy_flex_free( void *ptr )
#else
static void yy_flex_free( ptr )
void *ptr;
#endif
	{
	free( ptr );
	}

#if YY_MAIN
int main()
	{
	yylex();
	return 0;
	}
#endif
#line 404 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"

