#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 )

/* 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 ));
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 99
#define YY_END_OF_BUFFER 100
static yyconst short int yy_acclist[177] =
    {   0,
      100,   98,   99,   97,   98,   99,   97,   99,   98,   99,
       98,   99,   98,   99,   98,   99,   98,   99,   98,   99,
       90,   98,   99,   90,   98,   99,    1,   98,   99,   98,
       99,   98,   99,   98,   99,   98,   99,   98,   99,   98,
       99,   98,   99,   98,   99,   98,   99,   98,   99,   98,
       99,   98,   99,   98,   99,   98,   99,   98,   99,   98,
       99,   98,   99,   98,   99,   98,   99,   98,   99,   98,
       99,   89,   87,   86,   86,   93,   91,   95,   90,    1,
       75,   32,   57,   20,   89,   86,   86,   94,   95,   17,
       95,   96,   51,   56,   30,   33,   54,    3,   42,   53,

       22,   65,   55,   74,   69,   70,   52,   58,   88,   95,
       95,   37,   66,   67,   82,   83,   44,   19,   92,   23,
        4,   49,   43,   36,   11,   95,    2,    5,   46,   48,
       38,   60,   64,   62,   63,   61,   59,   40,   84,   39,
       45,   18,   72,   81,   35,   47,   27,   21,   34,    7,
       77,   29,   80,   50,   68,   76,   24,   25,   78,   41,
       73,   71,    6,   26,    8,   14,    9,   10,   31,   12,
       28,   79,   85,   13,   15,   16
    } ;

static yyconst short int yy_accept[398] =
    {   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,   82,   82,
       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,   85,   85,   85,   85,   85,   85,

       85,   85,   85,   85,   85,   85,   85,   86,   87,   89,
       90,   91,   92,   92,   93,   94,   94,   95,   95,   95,
       96,   96,   96,   96,   97,   97,   97,   97,   97,   98,
       98,   99,   99,   99,   99,   99,   99,   99,   99,   99,
       99,  100,  100,  100,  100,  100,  100,  100,  100,  101,
      102,  102,  102,  103,  103,  104,  105,  105,  105,  105,
      105,  106,  106,  107,  107,  108,  108,  108,  108,  108,
      108,  108,  108,  108,  108,  108,  108,  108,  108,  108,
      108,  108,  108,  108,  108,  108,  109,  109,  110,  111,
      111,  111,  111,  112,  112,  112,  112,  113,  114,  115,

      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
      115,  116,  116,  116,  116,  116,  116,  116,  116,  116,
      117,  118,  118,  119,  119,  119,  120,  120,  120,  120,
      120,  120,  120,  120,  120,  120,  121,  121,  121,  122,
      123,  123,  124,  124,  124,  124,  124,  124,  124,  124,
      124,  124,  125,  125,  126,  126,  127,  127,  127,  128,
      128,  128,  128,  128,  128,  128,  128,  128,  129,  129,
      130,  130,  130,  130,  130,  130,  131,  131,  131,  131,
      131,  131,  132,  132,  133,  134,  135,  136,  137,  138,
      139,  140,  140,  140,  140,  141,  142,  143,  143,  143,

      143,  143,  143,  144,  144,  144,  144,  145,  145,  146,
      146,  146,  146,  147,  148,  149,  149,  150,  150,  151,
      151,  151,  152,  152,  153,  154,  155,  155,  156,  157,
      158,  159,  159,  159,  160,  161,  162,  163,  163,  163,
      163,  163,  164,  165,  165,  165,  165,  165,  165,  165,
      165,  165,  165,  165,  165,  166,  167,  167,  167,  168,
      169,  169,  169,  169,  170,  170,  171,  171,  171,  171,
      171,  171,  171,  171,  171,  171,  171,  171,  171,  171,
      171,  172,  172,  173,  173,  173,  173,  173,  173,  174,
      174,  175,  175,  176,  176,  177,  177

    } ;

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,   11,   11,   11,   11,   12,   13,    1,
        1,    1,    1,    1,   14,   14,   14,   14,   15,   14,
        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
        1,    1,    1,    1,   16,    1,   17,   18,   19,   20,

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

        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    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[42] =
    {   0,
        1,    1,    2,    1,    3,    1,    1,    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[402] =
    {   0,
        0,    0,  834,  835,  835,  835,  829,  820,   34,   36,
       38,   42,   46,   50,    0,   51,   54,   53,   56,   61,
       76,   77,   79,   80,   82,   83,   84,   90,   31,  111,
       94,  140,  113,   55,  110,  116,  827,  835,  818,  835,
        0,  128,  131,  144,  150,  124,  160,  167,  172,    0,
      136,   89,  168,  100,   41,  145,  114,  817,  139,  183,
      184,  185,  173,  186,  187,  189,  191,  133,  188,  193,
      200,  202,  194,  203,  205,  215,  208,  211,  207,  214,
       57,  816,  224,  225,  227,  231,  233,  234,  241,  235,
      236,  239,  247,  815,  251,  244,  245,  248,  254,  266,

      255,  276,  269,  278,  270,  277,  814,    0,  287,  291,
      813,  303,  309,    0,  812,  295,  811,  288,  310,  810,
      296,  299,  315,  809,  316,  317,  318,  319,  808,  240,
      322,  320,  321,  325,  326,  327,  328,  331,  336,  341,
      343,  344,  345,  346,  348,  350,  353,  351,  807,  806,
      355,  357,  805,  359,  804,  803,  380,  361,  363,  391,
      802,  373,  801,  374,  800,  369,  365,  393,  396,  398,
      401,  397,  399,  409,  403,  411,  405,  368,  413,  416,
      417,  418,  367,  419,  423,  799,  425,  835,  431,  437,
      443,  446,  449,  450,  439,  451,  798,  797,  796,  452,

      453,  455,  454,  458,  461,  462,  463,  465,  464,  469,
      795,  470,  472,  478,  475,  479,  480,  482,  483,  794,
      793,  486,  792,  488,  490,    0,  494,  499,  489,  501,
      502,  505,  497,  507,  508,  791,  517,  518,  790,  789,
      519,  788,  521,  527,  522,  529,  523,  530,  531,  536,
      538,  787,  539,  786,  541,  544,  544,  545,  785,  548,
      556,  546,  557,  550,  558,  560,  564,  784,  566,  783,
      568,  569,  570,  571,  576,  782,  572,  578,  590,  582,
      592,  781,  579,  780,  779,  778,  777,  776,  775,  774,
      773,  593,  580,  595,  772,  771,  770,  594,  599,  600,

      596,  598,  769,  607,  610,  611,  768,  612,  767,  614,
      613,  615,  766,  765,  764,  616,  763,  618,  762,  620,
      627,  761,  626,  760,  759,  758,  624,  757,  756,  755,
      754,  635,  638,  753,  752,  749,  739,  636,  639,  640,
      641,  738,  737,  643,  644,  642,  646,  647,  649,  655,
      662,  654,  665,  666,  736,  735,  668,  669,  734,  733,
      670,  672,  673,  732,  676,  731,  674,  675,  678,  681,
      684,  686,  682,  690,  693,  695,  696,  700,  698,  703,
      730,  708,  728,  706,  704,  709,  710,  711,  726,  712,
      722,  714,  574,  720,  491,  835,  753,  755,  280,  759,

      161
    } ;

static yyconst short int yy_def[402] =
    {   0,
      396,    1,  396,  396,  396,  396,  397,  398,  399,  396,
      398,  398,  398,  398,  400,  398,  398,  398,  398,  398,
      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
      398,  398,  398,  398,  398,  398,  397,  396,  398,  396,
      401,  401,  396,  396,  398,  398,  398,  398,  398,  400,
      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,

      398,  398,  398,  398,  398,  398,  396,  401,  401,  396,
      398,  398,  398,   49,  398,  398,  398,  398,  398,  398,
      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
      398,  398,  398,  398,  398,  398,   49,  398,  398,  398,
      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
      398,  398,  398,  398,  398,  398,  398,  396,  396,  396,
      396,  398,  398,  398,  398,  398,  398,  398,  398,  398,

      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
      398,  398,  398,  398,  398,  157,  398,  398,  398,  398,
      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
      398,  398,  398,  398,  398,  396,  398,  398,  398,  398,
      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,

      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
      398,  398,  398,  398,  398,    0,  396,  396,  396,  396,

      396
    } ;

static yyconst short int yy_nxt[877] =
    {   0,
        4,    5,    6,    7,    8,    9,   10,   11,   12,   13,
       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,   44,   44,   45,   45,   40,
       46,   85,   40,   40,   47,   48,   48,   40,   47,   48,
       48,   40,   40,  119,   40,   40,   40,   40,   40,   59,
       51,   60,   40,  152,   55,  104,   62,   52,   56,   53,
       63,   54,   61,   57,   49,   64,   58,   40,   40,   65,
       40,   40,   67,   40,   40,   40,   74,   70,   77,   66,

       40,   40,   68,   71,   75,   40,   72,   73,   69,   76,
       93,   40,   79,   83,   81,  116,   82,   78,   80,   84,
       86,   40,   40,   94,   40,   40,   95,   40,   87,  102,
      118,   88,  111,   96,   89,   40,  106,  109,  109,  105,
       43,   43,  103,  121,   40,   90,   91,   40,   92,   86,
       40,   40,  110,   44,   44,  115,   40,   97,   47,   45,
       45,   40,  136,  108,   98,  122,   99,  120,  100,  112,
      112,   40,  123,  101,  113,   47,   48,   48,   40,   40,
      113,  114,  114,   40,   40,  114,  114,  117,  114,  114,
      114,  114,  114,  114,   40,   40,   40,   40,   40,   40,

       40,  124,   40,  127,   40,   40,  131,  132,  137,  129,
      125,   40,  126,   40,   40,  128,   40,  134,   40,   40,
      143,  130,   40,  133,  135,   40,   40,  138,  141,  139,
      142,  146,  140,  144,  148,   40,   40,  149,   40,  145,
      151,  150,   40,  147,   40,   40,   40,   40,  153,  154,
       40,   40,   40,  165,  155,   40,   40,  204,   40,   40,
      159,  156,   40,  166,  164,   40,   40,  161,  160,  157,
      162,  167,  158,  163,  171,  169,  173,   40,  179,  168,
       40,   40,   41,  174,  172,  175,  170,   40,   40,   40,
      176,  180,  181,  183,  185,  184,  109,  109,  177,   40,

      189,  189,  186,  178,  182,  190,   40,   40,  195,  187,
       40,  190,  112,  112,   40,  191,  192,  113,  193,  193,
       40,   40,  197,  113,  194,  198,   40,   40,   40,   40,
       40,   40,   40,   40,  196,  200,   40,   40,   40,   40,
      206,  207,   40,  210,  202,  203,  205,   40,  211,  199,
      201,  212,   40,  213,   40,   40,   40,   40,  208,   40,
      209,   40,   40,  215,   40,  217,   40,  214,   40,  220,
       40,  218,   40,  216,   40,  221,   40,  222,   40,   40,
       40,  223,  219,  228,   40,   40,  252,  225,  224,  226,
      226,  236,  247,  226,  226,  227,  226,  226,  226,  226,

      226,  226,   40,  235,   40,  233,  234,   40,   40,   40,
       40,  229,   40,  230,   40,  237,   40,  231,  239,  232,
       40,  240,   40,  244,   40,  246,  238,   40,   40,   40,
       40,  241,  249,  242,   40,  253,   40,  243,  251,  245,
      189,  189,  248,  191,  191,  190,  256,  256,  254,  250,
       40,  190,  256,  256,  255,  193,  193,   40,  193,  193,
       40,   40,   40,   40,   40,   40,   40,  258,  257,   40,
      260,  262,   40,   40,   40,   40,   40,  265,  263,  259,
       40,   40,  269,   40,  264,  268,   40,  261,  272,   40,
       40,   40,  266,   40,   40,  267,  271,   40,  273,   40,

       40,   40,   40,  270,  275,   40,  276,  274,   40,  278,
       40,  277,   40,   40,  282,  279,   40,  283,   40,   40,
      284,  285,  287,  280,  281,  289,  292,  291,   40,   40,
       40,  290,   40,   40,   40,  286,  288,  293,   40,  295,
       40,   40,   40,  296,  294,  299,  298,   40,  297,   40,
       40,  300,   40,  256,  256,   40,   40,   40,  303,   40,
      307,   40,  301,  302,  308,  306,  309,   40,   40,   40,
      313,   40,  310,  305,  312,   40,  304,   40,  311,   40,
       40,   40,   40,   40,  317,   40,  314,   40,  318,   40,
       40,   40,  316,   40,  315,  319,  322,  320,  324,  321,

      323,   40,  326,   40,   40,   40,   40,   40,  325,   40,
       40,   40,  327,  328,  330,  331,  329,  333,   40,  334,
      336,   40,   40,   40,   40,   40,   40,   40,  332,   40,
      335,   40,  344,  342,  338,   40,  340,   40,   40,  339,
      346,  337,  341,  347,  348,  345,   40,   40,  343,   40,
       40,   40,   40,   40,   40,   40,  349,   40,   40,  350,
       40,  351,  352,  353,  357,   40,   40,  360,  354,  356,
      358,  362,  359,   40,  364,  355,   40,   40,  363,   40,
       40,   40,  361,   40,   40,   40,   40,   40,  366,   40,
      371,  374,   40,   40,  369,   40,  367,   40,  370,  365,

      372,   40,  378,  368,   40,  376,   40,   40,  373,   40,
      377,   40,  379,  381,   40,   40,  383,   40,  375,   40,
       40,   40,   40,   40,  380,   40,  384,  386,  387,  391,
      388,   40,  385,   40,  394,  382,  389,   40,  390,   40,
      393,   40,   40,   40,   40,   40,   40,   40,   40,   40,
       40,  392,  395,   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,  188,   40,   40,   40,   40,
      107,   40,   38,  396,    3,  396,  396,  396,  396,  396,
      396,  396,  396,  396,  396,  396,  396,  396,  396,  396,
      396,  396,  396,  396,  396,  396,  396,  396,  396,  396,
      396,  396,  396,  396,  396,  396,  396,  396,  396,  396,
      396,  396,  396,  396,  396,  396
    } ;

static yyconst short int yy_chk[877] =
    {   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,    9,   29,    9,    9,   10,   10,   11,   11,   11,
       12,   29,   55,   12,   13,   13,   13,   13,   14,   14,
       14,   14,   16,   55,   18,   17,   34,   19,   81,   18,
       16,   18,   20,   81,   17,   34,   19,   16,   17,   16,
       19,   16,   18,   17,   13,   19,   17,   21,   22,   20,
       23,   24,   21,   25,   26,   27,   24,   22,   25,   20,

       52,   28,   21,   22,   24,   31,   23,   23,   21,   24,
       31,   54,   26,   28,   27,   52,   27,   25,   26,   28,
       30,   35,   30,   31,   33,   57,   31,   36,   30,   33,
       54,   30,   46,   31,   30,   46,   36,   42,   42,   35,
       43,   43,   33,   57,   68,   30,   30,   51,   30,   32,
       59,   32,   44,   44,   44,   51,   56,   32,   45,   45,
       45,   45,   68,  401,   32,   59,   32,   56,   32,   47,
       47,   47,   59,   32,   47,   48,   48,   48,   48,   53,
       47,   49,   49,   49,   63,   49,   49,   53,   49,   49,
       49,   49,   49,   49,   60,   61,   62,   64,   65,   69,

       66,   60,   67,   62,   70,   73,   65,   66,   69,   63,
       61,   71,   61,   72,   74,   62,   75,   67,   79,   77,
       74,   64,   78,   66,   67,   80,   76,   70,   73,   71,
       73,   76,   72,   75,   77,   83,   84,   78,   85,   75,
       80,   79,   86,   76,   87,   88,   90,   91,   83,   84,
       92,  130,   89,   91,   85,   96,   97,  130,   93,   98,
       88,   85,   95,   92,   90,   99,  101,   89,   88,   86,
       89,   93,   87,   89,   96,   95,   98,  100,  101,   93,
      103,  105,  399,   99,   97,  100,   95,  102,  106,  104,
      100,  102,  102,  103,  104,  103,  109,  109,  100,  118,

      110,  110,  105,  100,  102,  110,  116,  121,  118,  106,
      122,  110,  112,  112,  112,  113,  113,  112,  113,  113,
      113,  119,  121,  112,  116,  122,  123,  125,  126,  127,
      128,  132,  133,  131,  119,  125,  134,  135,  136,  137,
      132,  133,  138,  136,  127,  128,  131,  139,  137,  123,
      126,  138,  140,  139,  141,  142,  143,  144,  134,  145,
      135,  146,  148,  141,  147,  143,  151,  140,  152,  146,
      154,  144,  158,  142,  159,  147,  167,  148,  183,  178,
      166,  151,  145,  159,  162,  164,  183,  154,  152,  157,
      157,  167,  178,  157,  157,  158,  157,  157,  157,  157,

      157,  157,  160,  166,  168,  162,  164,  169,  172,  170,
      173,  160,  171,  160,  175,  168,  177,  160,  170,  160,
      174,  171,  176,  175,  179,  177,  169,  180,  181,  182,
      184,  172,  180,  173,  185,  184,  187,  174,  182,  176,
      189,  189,  179,  190,  190,  189,  190,  190,  185,  181,
      195,  189,  191,  191,  187,  192,  192,  192,  193,  193,
      193,  194,  196,  200,  201,  203,  202,  195,  194,  204,
      200,  202,  205,  206,  207,  209,  208,  205,  203,  196,
      210,  212,  209,  213,  204,  208,  215,  201,  213,  214,
      216,  217,  206,  218,  219,  207,  212,  222,  214,  224,

      229,  225,  395,  210,  216,  227,  217,  215,  233,  219,
      228,  218,  230,  231,  227,  222,  232,  228,  234,  235,
      229,  230,  231,  224,  225,  232,  235,  234,  237,  238,
      241,  233,  243,  245,  247,  230,  231,  237,  244,  241,
      246,  248,  249,  243,  238,  246,  245,  250,  244,  251,
      253,  247,  255,  256,  256,  257,  258,  262,  250,  260,
      257,  264,  248,  249,  258,  255,  260,  261,  263,  265,
      264,  266,  261,  253,  263,  267,  251,  269,  262,  271,
      272,  273,  274,  277,  269,  393,  265,  275,  271,  278,
      283,  293,  267,  280,  266,  272,  275,  273,  278,  274,

      277,  279,  280,  281,  292,  298,  294,  301,  279,  302,
      299,  300,  281,  283,  293,  294,  292,  299,  304,  300,
      302,  305,  306,  308,  311,  310,  312,  316,  298,  318,
      301,  320,  316,  311,  305,  327,  308,  323,  321,  306,
      320,  304,  310,  321,  323,  318,  332,  338,  312,  333,
      339,  340,  341,  346,  344,  345,  327,  347,  348,  332,
      349,  333,  338,  339,  345,  352,  350,  348,  340,  344,
      346,  350,  347,  351,  352,  341,  353,  354,  351,  357,
      358,  361,  349,  362,  363,  367,  368,  365,  354,  369,
      363,  368,  370,  373,  361,  371,  357,  372,  362,  353,

      365,  374,  372,  358,  375,  370,  376,  377,  367,  379,
      371,  378,  373,  375,  380,  385,  377,  384,  369,  382,
      386,  387,  388,  390,  374,  392,  378,  380,  382,  387,
      384,  394,  379,  391,  392,  376,  385,  389,  386,  383,
      390,  381,  366,  364,  360,  359,  356,  355,  343,  342,
      337,  388,  394,  397,  397,  397,  397,  398,  398,  400,
      336,  400,  400,  335,  334,  331,  330,  329,  328,  326,
      325,  324,  322,  319,  317,  315,  314,  313,  309,  307,
      303,  297,  296,  295,  291,  290,  289,  288,  287,  286,
      285,  284,  282,  276,  270,  268,  259,  254,  252,  242,

      240,  239,  236,  223,  221,  220,  211,  199,  198,  197,
      186,  165,  163,  161,  156,  155,  153,  150,  149,  129,
      124,  120,  117,  115,  111,  107,   94,   82,   58,   39,
       37,    8,    7,    3,  396,  396,  396,  396,  396,  396,
      396,  396,  396,  396,  396,  396,  396,  396,  396,  396,
      396,  396,  396,  396,  396,  396,  396,  396,  396,  396,
      396,  396,  396,  396,  396,  396,  396,  396,  396,  396,
      396,  396,  396,  396,  396,  396
    } ;

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/build/../llvm/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/build/../llvm/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);
}

#define RET_TOK(type, Enum, sym) \
  llvmAsmlval.type = Instruction::Enum; 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!!!
      ThrowException("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!!!
      ThrowException("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)
        ThrowException("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 879 "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 179 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"


#line 1033 "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 >= 397 )
					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 != 396 );

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 181 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ /* Ignore comments for now */ }
	YY_BREAK
case 2:
YY_RULE_SETUP
#line 183 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ return BEGINTOK; }
	YY_BREAK
case 3:
YY_RULE_SETUP
#line 184 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ return ENDTOK; }
	YY_BREAK
case 4:
YY_RULE_SETUP
#line 185 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ return TRUETOK;  }
	YY_BREAK
case 5:
YY_RULE_SETUP
#line 186 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ return FALSETOK; }
	YY_BREAK
case 6:
YY_RULE_SETUP
#line 187 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ return DECLARE; }
	YY_BREAK
case 7:
YY_RULE_SETUP
#line 188 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ return GLOBAL; }
	YY_BREAK
case 8:
YY_RULE_SETUP
#line 189 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ return CONSTANT; }
	YY_BREAK
case 9:
YY_RULE_SETUP
#line 190 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ return INTERNAL; }
	YY_BREAK
case 10:
YY_RULE_SETUP
#line 191 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ return LINKONCE; }
	YY_BREAK
case 11:
YY_RULE_SETUP
#line 192 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ return WEAK; }
	YY_BREAK
case 12:
YY_RULE_SETUP
#line 193 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ return APPENDING; }
	YY_BREAK
case 13:
YY_RULE_SETUP
#line 194 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ return EXTERNAL; }    /* Deprecated, turn into external */
	YY_BREAK
case 14:
YY_RULE_SETUP
#line 195 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ return EXTERNAL; }
	YY_BREAK
case 15:
YY_RULE_SETUP
#line 196 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ return IMPLEMENTATION; }
	YY_BREAK
case 16:
YY_RULE_SETUP
#line 197 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ return ZEROINITIALIZER; }
	YY_BREAK
case 17:
YY_RULE_SETUP
#line 198 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ return DOTDOTDOT; }
	YY_BREAK
case 18:
YY_RULE_SETUP
#line 199 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ return UNDEF; }
	YY_BREAK
case 19:
YY_RULE_SETUP
#line 200 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ return NULL_TOK; }
	YY_BREAK
case 20:
YY_RULE_SETUP
#line 201 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ return TO; }
	YY_BREAK
case 21:
YY_RULE_SETUP
#line 202 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(TermOpVal, Unwind, UNWIND); }
	YY_BREAK
case 22:
YY_RULE_SETUP
#line 203 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ return NOT; }  /* Deprecated, turned into XOR */
	YY_BREAK
case 23:
YY_RULE_SETUP
#line 204 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ return TAIL; }
	YY_BREAK
case 24:
YY_RULE_SETUP
#line 205 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ return TARGET; }
	YY_BREAK
case 25:
YY_RULE_SETUP
#line 206 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ return TRIPLE; }
	YY_BREAK
case 26:
YY_RULE_SETUP
#line 207 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ return DEPLIBS; }
	YY_BREAK
case 27:
YY_RULE_SETUP
#line 208 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ return ENDIAN; }
	YY_BREAK
case 28:
YY_RULE_SETUP
#line 209 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ return POINTERSIZE; }
	YY_BREAK
case 29:
YY_RULE_SETUP
#line 210 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ return LITTLE; }
	YY_BREAK
case 30:
YY_RULE_SETUP
#line 211 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ return BIG; }
	YY_BREAK
case 31:
YY_RULE_SETUP
#line 212 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ return VOLATILE; }
	YY_BREAK
case 32:
YY_RULE_SETUP
#line 214 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ return CC_TOK; }
	YY_BREAK
case 33:
YY_RULE_SETUP
#line 215 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ return CCC_TOK; }
	YY_BREAK
case 34:
YY_RULE_SETUP
#line 216 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ return FASTCC_TOK; }
	YY_BREAK
case 35:
YY_RULE_SETUP
#line 217 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ return COLDCC_TOK; }
	YY_BREAK
case 36:
YY_RULE_SETUP
#line 219 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ llvmAsmlval.PrimType = Type::VoidTy  ; return VOID;   }
	YY_BREAK
case 37:
YY_RULE_SETUP
#line 220 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ llvmAsmlval.PrimType = Type::BoolTy  ; return BOOL;   }
	YY_BREAK
case 38:
YY_RULE_SETUP
#line 221 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ llvmAsmlval.PrimType = Type::SByteTy ; return SBYTE;  }
	YY_BREAK
case 39:
YY_RULE_SETUP
#line 222 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ llvmAsmlval.PrimType = Type::UByteTy ; return UBYTE;  }
	YY_BREAK
case 40:
YY_RULE_SETUP
#line 223 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ llvmAsmlval.PrimType = Type::ShortTy ; return SHORT;  }
	YY_BREAK
case 41:
YY_RULE_SETUP
#line 224 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ llvmAsmlval.PrimType = Type::UShortTy; return USHORT; }
	YY_BREAK
case 42:
YY_RULE_SETUP
#line 225 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ llvmAsmlval.PrimType = Type::IntTy   ; return INT;    }
	YY_BREAK
case 43:
YY_RULE_SETUP
#line 226 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ llvmAsmlval.PrimType = Type::UIntTy  ; return UINT;   }
	YY_BREAK
case 44:
YY_RULE_SETUP
#line 227 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ llvmAsmlval.PrimType = Type::LongTy  ; return LONG;   }
	YY_BREAK
case 45:
YY_RULE_SETUP
#line 228 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ llvmAsmlval.PrimType = Type::ULongTy ; return ULONG;  }
	YY_BREAK
case 46:
YY_RULE_SETUP
#line 229 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ llvmAsmlval.PrimType = Type::FloatTy ; return FLOAT;  }
	YY_BREAK
case 47:
YY_RULE_SETUP
#line 230 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ llvmAsmlval.PrimType = Type::DoubleTy; return DOUBLE; }
	YY_BREAK
case 48:
YY_RULE_SETUP
#line 231 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ llvmAsmlval.PrimType = Type::LabelTy ; return LABEL;  }
	YY_BREAK
case 49:
YY_RULE_SETUP
#line 232 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ return TYPE;   }
	YY_BREAK
case 50:
YY_RULE_SETUP
#line 233 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ return OPAQUE; }
	YY_BREAK
case 51:
YY_RULE_SETUP
#line 235 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, Add, ADD); }
	YY_BREAK
case 52:
YY_RULE_SETUP
#line 236 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, Sub, SUB); }
	YY_BREAK
case 53:
YY_RULE_SETUP
#line 237 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, Mul, MUL); }
	YY_BREAK
case 54:
YY_RULE_SETUP
#line 238 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, Div, DIV); }
	YY_BREAK
case 55:
YY_RULE_SETUP
#line 239 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, Rem, REM); }
	YY_BREAK
case 56:
YY_RULE_SETUP
#line 240 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, And, AND); }
	YY_BREAK
case 57:
YY_RULE_SETUP
#line 241 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, Or , OR ); }
	YY_BREAK
case 58:
YY_RULE_SETUP
#line 242 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, Xor, XOR); }
	YY_BREAK
case 59:
YY_RULE_SETUP
#line 243 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, SetNE, SETNE); }
	YY_BREAK
case 60:
YY_RULE_SETUP
#line 244 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, SetEQ, SETEQ); }
	YY_BREAK
case 61:
YY_RULE_SETUP
#line 245 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, SetLT, SETLT); }
	YY_BREAK
case 62:
YY_RULE_SETUP
#line 246 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, SetGT, SETGT); }
	YY_BREAK
case 63:
YY_RULE_SETUP
#line 247 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, SetLE, SETLE); }
	YY_BREAK
case 64:
YY_RULE_SETUP
#line 248 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(BinaryOpVal, SetGE, SETGE); }
	YY_BREAK
case 65:
YY_RULE_SETUP
#line 250 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(OtherOpVal, PHI, PHI_TOK); }
	YY_BREAK
case 66:
YY_RULE_SETUP
#line 251 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(OtherOpVal, Call, CALL); }
	YY_BREAK
case 67:
YY_RULE_SETUP
#line 252 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(OtherOpVal, Cast, CAST); }
	YY_BREAK
case 68:
YY_RULE_SETUP
#line 253 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(OtherOpVal, Select, SELECT); }
	YY_BREAK
case 69:
YY_RULE_SETUP
#line 254 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(OtherOpVal, Shl, SHL); }
	YY_BREAK
case 70:
YY_RULE_SETUP
#line 255 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(OtherOpVal, Shr, SHR); }
	YY_BREAK
case 71:
YY_RULE_SETUP
#line 256 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ return VANEXT_old; }
	YY_BREAK
case 72:
YY_RULE_SETUP
#line 257 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ return VAARG_old; }
	YY_BREAK
case 73:
YY_RULE_SETUP
#line 258 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(OtherOpVal, VAArg , VAARG); }
	YY_BREAK
case 74:
YY_RULE_SETUP
#line 259 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(TermOpVal, Ret, RET); }
	YY_BREAK
case 75:
YY_RULE_SETUP
#line 260 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(TermOpVal, Br, BR); }
	YY_BREAK
case 76:
YY_RULE_SETUP
#line 261 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(TermOpVal, Switch, SWITCH); }
	YY_BREAK
case 77:
YY_RULE_SETUP
#line 262 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(TermOpVal, Invoke, INVOKE); }
	YY_BREAK
case 78:
YY_RULE_SETUP
#line 263 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(TermOpVal, Unwind, UNWIND); }
	YY_BREAK
case 79:
YY_RULE_SETUP
#line 264 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(TermOpVal, Unreachable, UNREACHABLE); }
	YY_BREAK
case 80:
YY_RULE_SETUP
#line 266 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(MemOpVal, Malloc, MALLOC); }
	YY_BREAK
case 81:
YY_RULE_SETUP
#line 267 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(MemOpVal, Alloca, ALLOCA); }
	YY_BREAK
case 82:
YY_RULE_SETUP
#line 268 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(MemOpVal, Free, FREE); }
	YY_BREAK
case 83:
YY_RULE_SETUP
#line 269 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(MemOpVal, Load, LOAD); }
	YY_BREAK
case 84:
YY_RULE_SETUP
#line 270 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(MemOpVal, Store, STORE); }
	YY_BREAK
case 85:
YY_RULE_SETUP
#line 271 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ RET_TOK(MemOpVal, GetElementPtr, GETELEMENTPTR); }
	YY_BREAK
case 86:
YY_RULE_SETUP
#line 274 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{
                  UnEscapeLexed(yytext+1);
                  llvmAsmlval.StrVal = strdup(yytext+1);             // Skip %
                  return VAR_ID;
                }
	YY_BREAK
case 87:
YY_RULE_SETUP
#line 279 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{
                  yytext[strlen(yytext)-1] = 0;  // nuke colon
                  UnEscapeLexed(yytext);
                  llvmAsmlval.StrVal = strdup(yytext);
                  return LABELSTR;
                }
	YY_BREAK
case 88:
YY_RULE_SETUP
#line 285 "/proj/llvm/build/../llvm/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 89:
YY_RULE_SETUP
#line 292 "/proj/llvm/build/../llvm/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 90:
YY_RULE_SETUP
#line 303 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ llvmAsmlval.UInt64Val = atoull(yytext); return EUINT64VAL; }
	YY_BREAK
case 91:
YY_RULE_SETUP
#line 304 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{
                  uint64_t Val = atoull(yytext+1);
                  // +1:  we have bigger negative range
                  if (Val > (uint64_t)INT64_MAX+1)
                    ThrowException("Constant too large for signed 64 bits!");
                  llvmAsmlval.SInt64Val = -Val;
                  return ESINT64VAL;
                }
	YY_BREAK
case 92:
YY_RULE_SETUP
#line 312 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{
                   llvmAsmlval.UInt64Val = HexIntToVal(yytext+3);
                   return yytext[0] == 's' ? ESINT64VAL : EUINT64VAL;
                 }
	YY_BREAK
case 93:
YY_RULE_SETUP
#line 317 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{
                  uint64_t Val = atoull(yytext+1);
                  if ((unsigned)Val != Val)
                    ThrowException("Invalid value number (too large)!");
                  llvmAsmlval.UIntVal = unsigned(Val);
                  return UINTVAL;
                }
	YY_BREAK
case 94:
YY_RULE_SETUP
#line 324 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{
                  uint64_t Val = atoull(yytext+2);
                  // +1:  we have bigger negative range
                  if (Val > (uint64_t)INT32_MAX+1)
                    ThrowException("Constant too large for signed 32 bits!");
                  llvmAsmlval.SIntVal = (int)-Val;
                  return SINTVAL;
                }
	YY_BREAK
case 95:
YY_RULE_SETUP
#line 333 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ llvmAsmlval.FPVal = atof(yytext); return FPVAL; }
	YY_BREAK
case 96:
YY_RULE_SETUP
#line 334 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ llvmAsmlval.FPVal = HexToFP(yytext); return FPVAL; }
	YY_BREAK
case YY_STATE_EOF(INITIAL):
#line 336 "/proj/llvm/build/../llvm/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 97:
YY_RULE_SETUP
#line 344 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ /* Ignore whitespace */ }
	YY_BREAK
case 98:
YY_RULE_SETUP
#line 345 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
{ return yytext[0]; }
	YY_BREAK
case 99:
YY_RULE_SETUP
#line 347 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
YY_FATAL_ERROR( "flex scanner jammed" );
	YY_BREAK
#line 1674 "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 >= 397 )
				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 >= 397 )
			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 == 396);
	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 347 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"

