#define yy_create_buffer Upgrade_create_buffer
#define yy_delete_buffer Upgrade_delete_buffer
#define yy_scan_buffer Upgrade_scan_buffer
#define yy_scan_string Upgrade_scan_string
#define yy_scan_bytes Upgrade_scan_bytes
#define yy_flex_debug Upgrade_flex_debug
#define yy_init_buffer Upgrade_init_buffer
#define yy_flush_buffer Upgrade_flush_buffer
#define yy_load_buffer_state Upgrade_load_buffer_state
#define yy_switch_to_buffer Upgrade_switch_to_buffer
#define yyin Upgradein
#define yyleng Upgradeleng
#define yylex Upgradelex
#define yyout Upgradeout
#define yyrestart Upgraderestart
#define yytext Upgradetext
#define yylineno Upgradelineno

#line 20 "UpgradeLexer.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 161
#define YY_END_OF_BUFFER 162
static yyconst short int yy_acclist[241] =
    {   0,
      162,  160,  161,  159,  160,  161,  159,  161,  160,  161,
      160,  161,  160,  161,  160,  161,  160,  161,  160,  161,
      152,  160,  161,  152,  160,  161,    1,  160,  161,  160,
      161,  160,  161,  160,  161,  160,  161,  160,  161,  160,
      161,  160,  161,  160,  161,  160,  161,  160,  161,  160,
      161,  160,  161,  160,  161,  160,  161,  160,  161,  160,
      161,  160,  161,  160,  161,  160,  161,  160,  161,  160,
      161,  160,  161,  151,  149,  148,  148,  155,  153,  157,
      152,    1,  134,   41,   94,   62,   50,   95,   80,   23,
      151,  148,  148,  156,  157,   20,  157,  158,   68,   79,

       39,   34,   42,   71,    3,   53,   56,   59,   54,   70,
       25,  104,  109,  107,  108,  106,  105,  110,  114,   75,
      133,   99,   97,   88,   89,   98,   96,   69,  112,  103,
      101,  102,  100,  113,  111,   81,  150,  157,  157,   91,
       61,  115,  116,   93,   74,  141,   78,   92,  142,   57,
       90,   22,  154,   73,  119,   77,   26,    4,   66,   72,
       55,   76,   60,   11,  118,  157,   36,    2,    5,   63,
      121,   65,   48,   83,   87,   85,   86,   84,   82,   51,
      143,  117,   49,   58,   21,  131,  140,   45,   64,   30,
       24,   44,  123,  122,    7,  136,   33,  139,   38,   67,

      129,  125,  135,   27,   28,  124,  137,   52,  132,  130,
      128,   43,    6,   29,  120,   37,    8,   17,    9,  127,
       10,  126,   35,   12,   14,   13,   32,   40,   15,   31,
      138,  144,  146,  147,   16,   46,  145,   18,   47,   19
    } ;

static yyconst short int yy_accept[621] =
    {   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,   74,   74,   75,
       75,   76,   77,   78,   79,   79,   80,   80,   81,   82,
       82,   83,   83,   83,   83,   83,   83,   83,   83,   83,
       83,   84,   84,   85,   85,   85,   85,   85,   85,   85,
       85,   85,   86,   86,   86,   86,   86,   86,   86,   86,
       86,   86,   87,   87,   87,   88,   88,   88,   88,   88,
       88,   88,   88,   88,   88,   88,   89,   89,   89,   89,

       89,   89,   89,   89,   90,   90,   90,   90,   90,   90,
       90,   90,   90,   90,   90,   90,   90,   90,   90,   90,
       90,   90,   91,   91,   91,   91,   91,   91,   91,   91,
       91,   91,   91,   91,   91,   91,   91,   91,   91,   91,
       92,   93,   95,   96,   97,   98,   98,   99,   99,  100,
      100,  100,  101,  101,  101,  102,  102,  103,  103,  103,
      103,  103,  104,  104,  104,  104,  104,  104,  104,  105,
      105,  105,  106,  106,  106,  106,  106,  106,  106,  106,
      106,  106,  106,  106,  106,  107,  108,  109,  109,  109,
      109,  110,  110,  110,  110,  110,  110,  110,  110,  110,

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

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

      172,  172,  172,  172,  172,  173,  173,  173,  173,  173,
      173,  173,  173,  174,  174,  174,  175,  176,  177,  178,
      179,  180,  181,  181,  181,  181,  182,  182,  182,  182,
      183,  184,  184,  185,  186,  186,  186,  186,  186,  186,
      187,  187,  187,  187,  187,  187,  188,  188,  188,  189,
      189,  189,  189,  189,  189,  189,  189,  190,  191,  192,
      192,  192,  193,  194,  195,  195,  195,  196,  196,  196,
      196,  196,  197,  197,  198,  199,  200,  201,  201,  201,
      201,  202,  202,  202,  203,  204,  205,  206,  207,  207,
      207,  208,  209,  210,  211,  211,  211,  211,  211,  211,

      212,  212,  213,  213,  214,  215,  215,  215,  215,  215,
      215,  216,  216,  216,  216,  216,  216,  216,  216,  216,
      217,  217,  217,  217,  217,  217,  217,  217,  217,  217,
      218,  218,  218,  218,  218,  219,  219,  219,  219,  219,
      220,  221,  222,  222,  223,  223,  223,  223,  223,  224,
      224,  224,  224,  225,  225,  226,  227,  227,  227,  227,
      227,  227,  227,  227,  227,  227,  227,  227,  227,  227,
      228,  228,  228,  228,  228,  228,  228,  228,  229,  229,
      229,  229,  229,  229,  230,  230,  230,  230,  230,  231,
      231,  231,  232,  232,  232,  232,  232,  232,  232,  232,

      232,  232,  232,  232,  232,  232,  233,  233,  234,  235,
      236,  236,  237,  237,  238,  239,  240,  240,  241,  241
    } ;

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,   12,
       13,   14,   15,   16,   15,   17,   15,   18,   19,    1,
        1,    1,    1,   20,   21,   21,   21,   21,   22,   21,
        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
        1,    1,    1,    1,   23,    1,   24,   25,   26,   27,

       28,   29,   30,   31,   32,    5,   33,   34,   35,   36,
       37,   38,   39,   40,   41,   42,   43,   44,   45,   46,
       47,   48,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,

        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    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[49] =
    {   0,
        1,    1,    2,    1,    3,    1,    4,    5,    3,    6,
        6,    6,    6,    6,    6,    6,    6,    7,    1,    1,
        3,    8,    3,    3,    3,    3,    3,    8,    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[630] =
    {   0,
        0,    0, 1336, 1337, 1337, 1337, 1331, 1316,   41,    0,
       49,   59,   69, 1287,    0,  112,   69,   72,   93,  113,
       52,  122,   74,  152,  120,   77,  136,  156,  135,   71,
      187,  186,  224,  118,  115,   56,  153, 1328, 1337, 1313,
     1337,    0,  256,    0, 1321, 1320,   88,  264, 1282,  283,
        0, 1323,  140,  157,  158,  121,  164,  183,  198,   32,
     1308,  190,   95,  175,   54,  165,  217,  162,  117,  182,
      218, 1307,  220,  272,  185,  100,  204,  219,  235,  241,
      264,  232,  273,   57, 1306,  284,  285,  296,  297,  299,
      300,  226,  298,  302,  308, 1305,  303,  309,  307,  316,

      321,  329,  330,  332,  333,  334,  313,  337,  310,  315,
      342,  343,  350,  353,  346,  352,  358,  363,  357,  365,
      366, 1304,  373,  377,  381,  385,  383,  384,  389,  390,
      402,  386,  392,  417,  418,  395,  271,  393,  403, 1303,
        0,    0,  416, 1302,    0,  447,    0, 1315, 1300,  438,
      428, 1299,  448,  427, 1298,  419, 1297,  451,  452,  453,
      406, 1296,  454,  455,  456,  461,  457,  460, 1295,  465,
      464,  470,  462,  477,  474,  480,  481,  482,  483,  485,
      488,  486,  490,  491, 1294, 1293, 1292,  492,  493,  495,
      506,  502,  514,  511,  494,  519,  515,  517,  520,  522,

     1291, 1290,  525, 1289, 1288, 1287, 1286, 1285, 1284,  523,
     1283, 1282,  531,  529, 1281, 1280,  562,  538,  537,  540,
      532,  567,  550, 1279, 1278, 1277,  575, 1276,  534,  533,
      576, 1275, 1274,  535,  578, 1273,  580,  582,  581,  586,
      584,  589,  587,  588, 1272, 1271, 1270,  591,  590, 1269,
      592, 1268,  603, 1267,  601, 1266,  607,  608,  612,  605,
      620,  596,  621,  616,  627,  623,  546, 1265,  628,  630,
     1337,  630,  646,  652,  654,  656,  632,  648,  637, 1264,
      639,  652, 1263, 1262, 1261,  651,  649,  653,  660,  661,
      664,  662,  663,  665,  666,  668,  669,  679,  674,  675,

     1260, 1259,  670,  671,  682,  686, 1258, 1257,  687,  692,
     1256,  689,  693,  696,  697,  702,  704,  700,  706, 1255,
     1254, 1253,  708,  709, 1252,  701,  710,  712,    0,  713,
     1251,  714,  721,  724,  730,  732,  733, 1250,  735,  736,
      738,  739, 1249,  741,  744, 1248,  753,  746, 1247,  749,
     1246,  755, 1245, 1244,  758,  760,  764,  766,  761,  768,
     1243,  770,  771,  773,  774, 1242,  776, 1241,  778,  777,
     1240,    0, 1239,  781,  779, 1238,  782,  790,  797,  796,
      806,  794,  807,  795,  799,  808,  809,  810,  811,  813,
     1237,  817, 1236, 1235,  822,  823,  820,  830,  826,  824,

      828,  831,  833,  835, 1234,  832,  844,  839,  846,  848,
      851,  843, 1233,  855,  859, 1232, 1231, 1230, 1229, 1228,
     1227, 1226,  860,  862,  864, 1225,  865,  863,  867, 1224,
     1223,  866, 1222, 1221,  868,  871,  872,  869,  870, 1220,
      875,  880,  885,  888,  889, 1219,  890,  895, 1218,  896,
      897,  898,  900,  901,  902,  903, 1217, 1216, 1215,  911,
      906, 1214, 1213, 1212,  915,  908, 1211,  918,  926,  929,
      909, 1210,  931, 1209, 1208, 1207, 1206,  920,  932,  934,
     1205,  937,  938, 1204, 1203, 1202, 1201, 1200,  940,  943,
     1199, 1198, 1197, 1192,  941,  944,  946,  945,  948, 1181,

      951, 1178,  953, 1170, 1167,  958,  960,  961,  962,  963,
     1164,  964,  965,  968,  969,  970,  971,  976,  977, 1158,
      979,  986,  987,  989,  990,  991,  994,  997,  998, 1146,
     1003, 1006, 1007, 1004, 1145, 1008, 1009, 1011, 1012, 1144,
     1142, 1141, 1018, 1140, 1013, 1017, 1020, 1019, 1139, 1029,
     1033, 1034, 1137, 1016, 1136, 1133, 1038, 1041, 1042, 1043,
     1045, 1046, 1047, 1050, 1053, 1052, 1054, 1056, 1057, 1131,
     1058, 1061, 1059, 1064, 1065, 1070, 1069, 1128, 1071, 1077,
     1081, 1082, 1083,  913, 1084, 1085, 1086, 1089,  784, 1091,
     1092,  783, 1090, 1095, 1104, 1096, 1105, 1111, 1108, 1112,

     1113, 1115, 1116, 1117, 1119,  737, 1120,  548,  391,  349,
     1121,  312, 1125,  270,  266,  221, 1126,  184, 1337, 1166,
     1172, 1178,  192, 1186, 1192,   70, 1200, 1203, 1208
    } ;

static yyconst short int yy_def[630] =
    {   0,
      619,    1,  619,  619,  619,  619,  620,  621,  622,  623,
      621,  621,   11,   13,  624,  622,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  620,  619,  621,
      619,  625,  625,  626,  623,   11,  621,   11,   13,   11,
      624,  627,  621,  621,  621,  621,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,

      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  619,
      625,   43,  628,  621,   48,   11,   50,  627,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,

      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,   50,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
      619,  628,  629,  629,  146,  146,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,

      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  217,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
      621,  274,  621,  621,  621,  621,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,

      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,

      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,

      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
      621,  621,  621,  621,  621,  621,  621,  621,    0,  619,
      619,  619,  619,  619,  619,  619,  619,  619,  619
    } ;

static yyconst short int yy_nxt[1386] =
    {   0,
        4,    5,    6,    7,    8,    9,   10,   11,   12,   13,
       14,   14,   14,   14,   14,   14,   14,    4,   15,   16,
        8,    8,    8,   17,   18,   19,   20,   21,   22,   23,
        8,   24,    8,   25,   26,   27,   28,   29,    8,   30,
       31,   32,   33,   34,   35,   36,    8,   37,   43,   41,
       44,   44,   44,   44,   44,   44,   44,   44,   46,   46,
       46,   46,   46,   46,   46,   46,   41,   47,  159,   41,
      187,   41,  137,   41,   41,   44,   41,   48,   49,   49,
       49,   49,   49,   49,   49,   49,   41,   71,   41,   41,
       72,   41,  138,  165,   41,   53,  144,   73,  108,   58,

       93,   80,   54,   59,   55,   41,   56,   81,   60,   57,
       41,   61,   41,   94,   50,   52,   62,   41,   63,   95,
      162,  619,  619,  619,  619,  619,  619,  619,  619,   64,
       41,  178,   41,   65,   41,   41,   66,   41,   41,   41,
       67,  134,  136,   89,   68,   74,   69,   75,   76,   70,
      170,   90,   41,   41,  135,   77,   91,   41,  153,   78,
       92,   79,   82,   96,   83,  105,  149,   84,   85,   41,
       41,  106,   97,   41,   41,   41,  107,   86,   98,   41,
      139,   41,   41,   99,  152,  100,   87,   88,  150,  101,
      151,  102,   41,  103,  154,  104,  109,   45,  155,   41,

       41,   41,   41,   41,   41,  169,  166,   41,  163,  121,
      164,  110,  156,  111,  112,   41,  113,  114,  115,  177,
      116,   41,  122,  160,  171,  123,  117,  157,  118,  119,
      161,  120,  124,  109,   41,   41,   41,   41,   41,  158,
      179,   41,  167,   41,  172,  173,  180,  185,  125,   41,
      126,  127,   41,  128,  168,  129,  198,  130,   41,  131,
      181,  174,  182,  132,  133,  142,  142,  142,  142,  142,
      142,  142,  142,  145,  145,  145,  145,  145,  145,  145,
      145,   41,  183,   41,  186,  146,  267,   41,   41,   41,
       41,  146,  147,  147,  147,  147,  147,  147,  147,  147,

      184,   41,   41,  147,  147,  175,  147,  147,  147,  147,
      147,  147,  176,   41,   41,   41,   41,   41,  188,   41,
       41,  193,  189,  196,   41,   41,   41,   41,  200,   41,
       41,  199,   41,   41,  194,  197,  190,  191,   41,  192,
      195,  201,  203,  205,  202,  204,   41,   41,  207,   41,
       41,   41,  214,  210,   41,  217,  209,  206,  211,   41,
       41,  218,  208,   41,  212,  213,   41,   41,  220,   41,
       41,  215,  230,  219,   41,   41,  221,  224,  216,  232,
       41,  236,   41,   41,  222,  234,  226,  231,  223,  227,
       41,  225,  228,  233,   41,  229,  237,  238,   41,  235,

       41,   41,   41,   41,  240,  239,   41,   41,   41,   41,
       41,  246,   41,  259,  242,  241,  244,  250,  266,   41,
       41,  245,  260,   41,  248,  247,  251,  243,  253,  254,
      249,  252,  268,  255,   41,   41,   41,  273,  256,  261,
      262,  257,  269,  273,   41,   41,  258,  285,  270,  264,
      281,  265,  263,  274,  275,   41,  276,  276,  276,  276,
      276,  276,  276,  276,  278,   41,  280,  277,   41,   41,
       41,   41,   41,   41,   41,  279,  282,   41,   41,   41,
      286,   41,   41,  288,  289,  283,  284,   41,  294,  296,
      290,   41,  292,  291,   41,  287,  293,   41,   41,   41,

       41,  295,   41,   41,  297,   41,  303,   41,   41,   41,
       41,   41,   41,  307,  299,  310,  298,  309,  301,   41,
      308,  300,  313,   41,  305,  302,  312,  306,   41,  311,
      304,   41,   41,  314,   41,  319,   41,   41,  316,   41,
       41,  317,   41,  318,  321,  320,   41,  315,   41,   41,
       41,   41,   41,  323,   41,   41,  322,   41,  325,  333,
      341,  326,  340,   41,  324,   41,  327,   41,  369,  343,
      328,  329,  329,  329,  329,  329,  329,  329,  329,  330,
      331,  332,  329,  329,   41,  329,  329,  329,  329,  329,
      329,  338,   41,   41,  334,   41,  335,   41,   41,   41,

      336,   41,  337,   41,   41,   41,   41,   41,   41,   41,
      347,  349,  342,   41,  339,  346,  351,  344,   41,  350,
       41,  345,   41,  348,   41,   41,  355,  356,  352,   41,
      357,  353,  354,   41,  359,  364,  358,   41,   41,  360,
       41,  362,  366,  363,   41,   41,  361,   41,  365,   41,
      367,  273,  274,  274,   41,  368,   41,  273,  619,  619,
      619,   40,  619,   40,  370,   41,   41,  373,   41,   41,
       41,  371,  375,  374,  376,  377,  378,   41,   41,   41,
       41,   41,   41,   41,  382,   41,   41,   41,   41,  387,
      379,   41,   41,  381,  380,  383,   41,  385,  386,   41,

      392,  391,  390,   41,   41,  388,   41,  384,  389,   41,
       41,  393,  394,   41,   41,  399,  400,   41,   41,   41,
      398,   41,  395,   41,  396,   41,   41,   41,  397,   41,
       41,   41,  401,  403,  404,  402,  406,  405,   41,  407,
      413,   41,  409,  410,  408,  414,  415,   41,  412,   41,
       41,  411,   41,   41,   41,   41,   41,  417,   41,  419,
      421,   41,  416,   41,  423,  424,   41,  425,  426,  427,
       41,  418,   41,  420,  430,   41,  422,   41,   41,  429,
      428,   41,  431,   41,  436,   41,  432,   41,   41,  433,
       41,   41,  434,   41,   41,   41,   41,  435,   41,   41,

       41,   41,  440,  437,  446,  447,  443,   41,  445,  438,
      439,   41,   41,   41,   41,  449,   41,  442,  444,  441,
      450,  451,  448,   41,   41,   41,   41,   41,   41,  452,
       41,  454,  455,  453,   41,  457,  456,   41,  461,   41,
       41,   41,  462,   41,  458,   41,  460,   41,   41,   41,
       41,  459,   41,  463,  464,  465,   41,  466,  468,  467,
       41,   41,  472,   41,  475,   41,  470,  473,   41,  469,
      471,  474,   41,  476,  479,  477,   41,   41,  478,   41,
       41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
      483,  480,   41,  482,  487,  485,  490,   41,  491,  493,

      481,  484,   41,  488,  486,   41,   41,   41,  496,  489,
      492,  495,   41,   41,   41,   41,  494,   41,   41,   41,
       41,  499,  502,   41,  498,   41,   41,  504,   41,  497,
       41,  501,   41,  508,  509,   41,  500,   41,  506,  507,
      511,  505,  512,   41,  503,  513,   41,  510,   41,   41,
      516,   41,  515,  514,   41,   41,  517,   41,   41,  518,
       41,   41,   41,   41,  521,   41,  522,  519,   41,  520,
       41,  523,  527,  524,  525,   41,  528,   41,   41,   41,
       41,   41,   41,  529,  526,   41,   41,   41,   41,  531,
      536,  537,  530,   41,   41,  535,   41,  532,  542,  533,

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

       41,   41,   41,   41,  592,  587,   41,   41,   41,   41,
      590,  596,   41,   41,  593,  594,  595,  598,  591,  601,
      603,   41,   41,  602,  599,   41,  597,  600,   41,   41,
       41,  605,   41,   41,   41,  604,   41,   41,   41,  610,
      611,  612,   41,   41,  606,   41,  616,  607,   41,  608,
       41,  609,  617,   41,   41,  615,   41,   41,   41,   41,
      614,   41,   41,   41,  613,  618,   38,   38,   38,   38,
       38,   38,   38,   38,   40,   41,   40,   40,   40,   40,
       42,   41,   42,   42,   41,   42,   51,   41,   51,   51,
       51,   51,   51,   51,  141,   41,  141,  141,   41,  141,

      148,  148,  148,  148,  148,  148,  148,  148,  272,   41,
      272,  372,  372,  372,   41,   41,   41,   41,   41,   41,
       41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
       41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
       41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
       41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
       41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
       41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
       41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
       41,   41,   41,   41,   41,   41,   41,   41,   41,   41,

       41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
       41,   41,   41,   41,   41,   41,   41,   41,   39,   41,
      271,   41,   41,   41,   41,   41,   39,   40,   48,  143,
       41,  140,   40,   41,   39,  619,    3,  619,  619,  619,
      619,  619,  619,  619,  619,  619,  619,  619,  619,  619,
      619,  619,  619,  619,  619,  619,  619,  619,  619,  619,
      619,  619,  619,  619,  619,  619,  619,  619,  619,  619,
      619,  619,  619,  619,  619,  619,  619,  619,  619,  619,
      619,  619,  619,  619,  619
    } ;

static yyconst short int yy_chk[1386] =
    {   0,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    9,   60,
        9,    9,    9,    9,    9,    9,    9,    9,   11,   11,
       11,   11,   11,   11,   11,   11,   11,   12,   60,   21,
       84,   65,   36,   36,   84,  626,   12,   13,   13,   13,
       13,   13,   13,   13,   13,   13,   17,   21,   30,   18,
       21,   23,   36,   65,   26,   17,   47,   21,   30,   18,

       26,   23,   17,   18,   17,   47,   17,   23,   18,   17,
       19,   18,   63,   26,   13,   16,   19,   76,   19,   26,
       63,   16,   16,   16,   16,   16,   16,   16,   16,   19,
       20,   76,   35,   19,   69,   34,   20,   25,   56,   22,
       20,   34,   35,   25,   20,   22,   20,   22,   22,   20,
       69,   25,   29,   27,   34,   22,   25,   53,   56,   22,
       25,   22,   24,   27,   24,   29,   53,   24,   24,   24,
       37,   29,   27,   28,   54,   55,   29,   24,   27,   68,
       37,   57,   66,   28,   55,   28,   24,   24,   54,   28,
       54,   28,   64,   28,   57,   28,   31,  623,   57,   70,

       58,  618,   75,   32,   31,   68,   66,   62,   64,   32,
       64,   31,   58,   31,   31,   59,   31,   31,   31,   75,
       31,   77,   32,   62,   70,   32,   31,   59,   31,   31,
       62,   31,   32,   33,   67,   71,   78,   73,  616,   59,
       77,   33,   67,   92,   71,   73,   78,   82,   33,   82,
       33,   33,   79,   33,   67,   33,   92,   33,   80,   33,
       78,   73,   79,   33,   33,   43,   43,   43,   43,   43,
       43,   43,   43,   48,   48,   48,   48,   48,   48,   48,
       48,   81,   80,  615,   83,   48,  137,  614,  137,   74,
       83,   48,   50,   50,   50,   50,   50,   50,   50,   50,

       81,   86,   87,   50,   50,   74,   50,   50,   50,   50,
       50,   50,   74,   88,   89,   93,   90,   91,   86,   94,
       97,   89,   87,   91,   99,   95,   98,  109,   94,  612,
      107,   93,  110,  100,   90,   91,   88,   88,  101,   88,
       90,   95,   98,  100,   97,   99,  102,  103,  101,  104,
      105,  106,  107,  103,  108,  109,  102,  100,  104,  111,
      112,  110,  101,  115,  105,  106,  610,  113,  112,  116,
      114,  108,  115,  111,  119,  117,  112,  113,  108,  116,
      118,  119,  120,  121,  112,  117,  114,  115,  112,  114,
      123,  113,  114,  116,  124,  114,  120,  121,  125,  118,

      127,  128,  126,  132,  123,  121,  129,  130,  609,  133,
      138,  128,  136,  132,  124,  123,  126,  130,  136,  131,
      139,  127,  133,  161,  129,  128,  130,  125,  131,  131,
      129,  130,  138,  131,  134,  135,  156,  143,  131,  134,
      134,  131,  139,  143,  154,  151,  131,  161,  139,  135,
      156,  135,  134,  146,  146,  150,  146,  146,  146,  146,
      146,  146,  146,  146,  151,  153,  154,  150,  158,  159,
      160,  163,  164,  165,  167,  153,  158,  168,  166,  173,
      163,  171,  170,  165,  166,  159,  160,  172,  171,  173,
      167,  175,  170,  168,  174,  164,  170,  176,  177,  178,

      179,  172,  180,  182,  174,  181,  179,  183,  184,  188,
      189,  195,  190,  182,  175,  184,  174,  183,  177,  192,
      182,  176,  190,  191,  181,  178,  189,  181,  194,  188,
      180,  193,  197,  191,  198,  195,  196,  199,  192,  200,
      210,  193,  203,  194,  197,  196,  214,  191,  213,  221,
      230,  229,  234,  199,  219,  218,  198,  220,  203,  221,
      230,  210,  229,  267,  200,  608,  213,  223,  267,  234,
      214,  217,  217,  217,  217,  217,  217,  217,  217,  218,
      219,  220,  217,  217,  222,  217,  217,  217,  217,  217,
      217,  223,  227,  231,  222,  235,  222,  237,  239,  238,

      222,  241,  222,  240,  243,  244,  242,  249,  248,  251,
      239,  241,  231,  262,  227,  238,  242,  235,  255,  241,
      253,  237,  260,  240,  257,  258,  249,  251,  243,  259,
      253,  244,  248,  264,  257,  262,  255,  261,  263,  258,
      266,  260,  264,  261,  265,  269,  259,  270,  263,  277,
      265,  272,  273,  273,  279,  266,  281,  272,  274,  274,
      275,  275,  276,  276,  269,  278,  287,  277,  286,  282,
      288,  270,  279,  278,  281,  282,  286,  289,  290,  292,
      293,  291,  294,  295,  290,  296,  297,  303,  304,  295,
      287,  299,  300,  289,  288,  291,  298,  293,  294,  305,

      300,  299,  298,  306,  309,  296,  312,  292,  297,  310,
      313,  303,  304,  314,  315,  310,  312,  318,  326,  316,
      309,  317,  305,  319,  305,  323,  324,  327,  306,  328,
      330,  332,  313,  315,  316,  314,  318,  317,  333,  319,
      330,  334,  324,  326,  323,  332,  333,  335,  328,  336,
      337,  327,  339,  340,  606,  341,  342,  335,  344,  336,
      337,  345,  334,  348,  340,  341,  350,  342,  344,  345,
      347,  335,  352,  336,  350,  355,  339,  356,  359,  348,
      347,  357,  352,  358,  359,  360,  355,  362,  363,  356,
      364,  365,  357,  367,  370,  369,  375,  358,  374,  377,

      592,  589,  364,  360,  374,  375,  369,  378,  370,  362,
      363,  382,  384,  380,  379,  378,  385,  367,  369,  365,
      379,  380,  377,  381,  383,  386,  387,  388,  389,  381,
      390,  383,  384,  382,  392,  386,  385,  397,  390,  395,
      396,  400,  392,  399,  387,  401,  389,  398,  402,  406,
      403,  388,  404,  395,  396,  397,  408,  398,  400,  399,
      412,  407,  404,  409,  408,  410,  402,  406,  411,  401,
      403,  407,  414,  409,  412,  410,  415,  423,  411,  424,
      428,  425,  427,  432,  429,  435,  438,  439,  436,  437,
      424,  414,  441,  423,  429,  427,  436,  442,  437,  439,

      415,  425,  443,  432,  428,  444,  445,  447,  443,  435,
      438,  442,  448,  450,  451,  452,  441,  453,  454,  455,
      456,  447,  451,  461,  445,  466,  471,  453,  460,  444,
      584,  450,  465,  460,  460,  468,  448,  478,  455,  456,
      465,  454,  466,  469,  452,  468,  470,  461,  473,  479,
      471,  480,  470,  469,  482,  483,  473,  489,  495,  478,
      490,  496,  498,  497,  482,  499,  483,  479,  501,  480,
      503,  489,  497,  490,  495,  506,  498,  507,  508,  509,
      510,  512,  513,  499,  496,  514,  515,  516,  517,  503,
      510,  512,  501,  518,  519,  509,  521,  506,  517,  507,

      513,  514,  515,  522,  523,  508,  524,  525,  526,  516,
      523,  527,  524,  522,  528,  529,  518,  525,  519,  527,
      531,  534,  521,  532,  533,  536,  537,  529,  538,  539,
      545,  534,  526,  554,  546,  543,  548,  547,  528,  539,
      545,  536,  546,  548,  537,  531,  550,  532,  533,  543,
      551,  552,  538,  547,  550,  557,  551,  554,  558,  559,
      560,  557,  561,  562,  563,  552,  560,  564,  558,  566,
      565,  567,  563,  568,  569,  571,  573,  567,  572,  561,
      569,  574,  575,  559,  565,  566,  577,  576,  579,  568,
      571,  564,  575,  562,  580,  572,  573,  576,  581,  582,

      583,  585,  586,  587,  580,  574,  588,  593,  590,  591,
      577,  585,  594,  596,  581,  582,  583,  587,  579,  591,
      594,  595,  597,  593,  588,  599,  586,  590,  598,  600,
      601,  596,  602,  603,  604,  595,  605,  607,  611,  601,
      602,  603,  613,  617,  597,  578,  611,  598,  570,  599,
      556,  600,  613,  555,  553,  607,  549,  544,  542,  541,
      605,  540,  535,  530,  604,  617,  620,  620,  620,  620,
      620,  620,  620,  620,  621,  520,  621,  621,  621,  621,
      622,  511,  622,  622,  505,  622,  624,  504,  624,  624,
      624,  624,  624,  624,  625,  502,  625,  625,  500,  625,

      627,  627,  627,  627,  627,  627,  627,  627,  628,  494,
      628,  629,  629,  629,  493,  492,  491,  488,  487,  486,
      485,  484,  481,  477,  476,  475,  474,  472,  467,  464,
      463,  462,  459,  458,  457,  449,  446,  440,  434,  433,
      431,  430,  426,  422,  421,  420,  419,  418,  417,  416,
      413,  405,  394,  393,  391,  376,  373,  371,  368,  366,
      361,  354,  353,  351,  349,  346,  343,  338,  331,  325,
      322,  321,  320,  311,  308,  307,  302,  301,  285,  284,
      283,  280,  268,  256,  254,  252,  250,  247,  246,  245,
      236,  233,  232,  228,  226,  225,  224,  216,  215,  212,

      211,  209,  208,  207,  206,  205,  204,  202,  201,  187,
      186,  185,  169,  162,  157,  155,  152,  149,  148,  144,
      140,  122,   96,   85,   72,   61,   52,   49,   46,   45,
       40,   38,   14,    8,    7,    3,  619,  619,  619,  619,
      619,  619,  619,  619,  619,  619,  619,  619,  619,  619,
      619,  619,  619,  619,  619,  619,  619,  619,  619,  619,
      619,  619,  619,  619,  619,  619,  619,  619,  619,  619,
      619,  619,  619,  619,  619,  619,  619,  619,  619,  619,
      619,  619,  619,  619,  619
    } ;

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-20/tools/llvm-upgrade/UpgradeLexer.l"
#define INITIAL 0
/*===-- UpgradeLexer.l - Scanner for 1.9 assembly files --------*- C++ -*--===//
//
//                     The LLVM Compiler Infrastructure
//
// This file was developed by Reid Spencer and is distributed under the 
// University of Illinois Open Source License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
//  This file implements the flex scanner for LLVM 1.9 assembly languages files.
//
//===----------------------------------------------------------------------===*/
#define YY_NEVER_INTERACTIVE 1
#line 28 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
#include "UpgradeInternals.h"
#include "llvm/Module.h"
#include <list>
#include "UpgradeParser.h"
#include <cctype>
#include <cstdlib>

#define YY_INPUT(buf,result,max_size) \
{ \
  if (LexInput->good() && !LexInput->eof()) { \
    LexInput->read(buf,max_size); \
    result = LexInput->gcount(); \
  } else {\
    result = YY_NULL; \
  } \
}

#define YY_NEVER_INTERACTIVE 1

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

#define RET_TY(sym,NewTY,sign) \
  Upgradelval.PrimType.T = NewTY; \
  switch (sign) { \
    case 0: Upgradelval.PrimType.S.makeSignless(); break; \
    case 1: Upgradelval.PrimType.S.makeUnsigned(); break; \
    case 2: Upgradelval.PrimType.S.makeSigned(); break; \
    default: assert(0 && "Invalid sign kind"); break; \
  }\
  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

// 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)
        error("String literal cannot accept \\00 escape!");

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

  return BOut;
}

// 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!!!
      error("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!!!
      error("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
}


} // End llvm namespace

using namespace llvm;

/* 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 1094 "UpgradeLexer.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 194 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"


#line 1248 "UpgradeLexer.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 >= 620 )
					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 != 619 );

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 196 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ /* Ignore comments for now */ }
	YY_BREAK
case 2:
YY_RULE_SETUP
#line 198 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return BEGINTOK; }
	YY_BREAK
case 3:
YY_RULE_SETUP
#line 199 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return ENDTOK; }
	YY_BREAK
case 4:
YY_RULE_SETUP
#line 200 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return TRUETOK;  }
	YY_BREAK
case 5:
YY_RULE_SETUP
#line 201 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return FALSETOK; }
	YY_BREAK
case 6:
YY_RULE_SETUP
#line 202 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return DECLARE; }
	YY_BREAK
case 7:
YY_RULE_SETUP
#line 203 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return GLOBAL; }
	YY_BREAK
case 8:
YY_RULE_SETUP
#line 204 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return CONSTANT; }
	YY_BREAK
case 9:
YY_RULE_SETUP
#line 205 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return INTERNAL; }
	YY_BREAK
case 10:
YY_RULE_SETUP
#line 206 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return LINKONCE; }
	YY_BREAK
case 11:
YY_RULE_SETUP
#line 207 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return WEAK; }
	YY_BREAK
case 12:
YY_RULE_SETUP
#line 208 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return APPENDING; }
	YY_BREAK
case 13:
YY_RULE_SETUP
#line 209 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return DLLIMPORT; }
	YY_BREAK
case 14:
YY_RULE_SETUP
#line 210 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return DLLEXPORT; }
	YY_BREAK
case 15:
YY_RULE_SETUP
#line 211 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return EXTERN_WEAK; }
	YY_BREAK
case 16:
YY_RULE_SETUP
#line 212 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return EXTERNAL; }    /* Deprecated, turn into external */
	YY_BREAK
case 17:
YY_RULE_SETUP
#line 213 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return EXTERNAL; }
	YY_BREAK
case 18:
YY_RULE_SETUP
#line 214 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return IMPLEMENTATION; }
	YY_BREAK
case 19:
YY_RULE_SETUP
#line 215 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return ZEROINITIALIZER; }
	YY_BREAK
case 20:
YY_RULE_SETUP
#line 216 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return DOTDOTDOT; }
	YY_BREAK
case 21:
YY_RULE_SETUP
#line 217 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return UNDEF; }
	YY_BREAK
case 22:
YY_RULE_SETUP
#line 218 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return NULL_TOK; }
	YY_BREAK
case 23:
YY_RULE_SETUP
#line 219 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return TO; }
	YY_BREAK
case 24:
YY_RULE_SETUP
#line 220 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return EXCEPT; }
	YY_BREAK
case 25:
YY_RULE_SETUP
#line 221 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return NOT; }  /* Deprecated, turned into XOR */
	YY_BREAK
case 26:
YY_RULE_SETUP
#line 222 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return TAIL; }
	YY_BREAK
case 27:
YY_RULE_SETUP
#line 223 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return TARGET; }
	YY_BREAK
case 28:
YY_RULE_SETUP
#line 224 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return TRIPLE; }
	YY_BREAK
case 29:
YY_RULE_SETUP
#line 225 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return DEPLIBS; }
	YY_BREAK
case 30:
YY_RULE_SETUP
#line 226 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return ENDIAN; }
	YY_BREAK
case 31:
YY_RULE_SETUP
#line 227 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return POINTERSIZE; }
	YY_BREAK
case 32:
YY_RULE_SETUP
#line 228 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return DATALAYOUT; }
	YY_BREAK
case 33:
YY_RULE_SETUP
#line 229 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return LITTLE; }
	YY_BREAK
case 34:
YY_RULE_SETUP
#line 230 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return BIG; }
	YY_BREAK
case 35:
YY_RULE_SETUP
#line 231 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return VOLATILE; }
	YY_BREAK
case 36:
YY_RULE_SETUP
#line 232 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return ALIGN;  }
	YY_BREAK
case 37:
YY_RULE_SETUP
#line 233 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return SECTION; }
	YY_BREAK
case 38:
YY_RULE_SETUP
#line 234 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return MODULE; }
	YY_BREAK
case 39:
YY_RULE_SETUP
#line 235 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return ASM_TOK; }
	YY_BREAK
case 40:
YY_RULE_SETUP
#line 236 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return SIDEEFFECT; }
	YY_BREAK
case 41:
YY_RULE_SETUP
#line 238 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return CC_TOK; }
	YY_BREAK
case 42:
YY_RULE_SETUP
#line 239 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return CCC_TOK; }
	YY_BREAK
case 43:
YY_RULE_SETUP
#line 240 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return CSRETCC_TOK; }
	YY_BREAK
case 44:
YY_RULE_SETUP
#line 241 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return FASTCC_TOK; }
	YY_BREAK
case 45:
YY_RULE_SETUP
#line 242 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return COLDCC_TOK; }
	YY_BREAK
case 46:
YY_RULE_SETUP
#line 243 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return X86_STDCALLCC_TOK; }
	YY_BREAK
case 47:
YY_RULE_SETUP
#line 244 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return X86_FASTCALLCC_TOK; }
	YY_BREAK
case 48:
YY_RULE_SETUP
#line 246 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TY(SBYTE,  Type::Int8Ty,  2); }
	YY_BREAK
case 49:
YY_RULE_SETUP
#line 247 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TY(UBYTE,  Type::Int8Ty,  1); }
	YY_BREAK
case 50:
YY_RULE_SETUP
#line 248 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TY(UBYTE,  Type::Int8Ty,  1); }
	YY_BREAK
case 51:
YY_RULE_SETUP
#line 249 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TY(SHORT,  Type::Int16Ty, 2); }
	YY_BREAK
case 52:
YY_RULE_SETUP
#line 250 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TY(USHORT, Type::Int16Ty, 1); }
	YY_BREAK
case 53:
YY_RULE_SETUP
#line 251 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TY(USHORT, Type::Int16Ty, 1); }
	YY_BREAK
case 54:
YY_RULE_SETUP
#line 252 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TY(INT,    Type::Int32Ty, 2); }
	YY_BREAK
case 55:
YY_RULE_SETUP
#line 253 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TY(UINT,   Type::Int32Ty, 1); }
	YY_BREAK
case 56:
YY_RULE_SETUP
#line 254 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TY(UINT,   Type::Int32Ty, 1); }
	YY_BREAK
case 57:
YY_RULE_SETUP
#line 255 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TY(LONG,   Type::Int64Ty, 2); }
	YY_BREAK
case 58:
YY_RULE_SETUP
#line 256 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TY(ULONG,  Type::Int64Ty, 1); }
	YY_BREAK
case 59:
YY_RULE_SETUP
#line 257 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TY(ULONG,  Type::Int64Ty, 1); }
	YY_BREAK
case 60:
YY_RULE_SETUP
#line 258 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TY(VOID,   Type::VoidTy,  0); }
	YY_BREAK
case 61:
YY_RULE_SETUP
#line 259 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TY(BOOL,   Type::Int1Ty,  1); }
	YY_BREAK
case 62:
YY_RULE_SETUP
#line 260 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TY(BOOL,   Type::Int1Ty,  1); }
	YY_BREAK
case 63:
YY_RULE_SETUP
#line 261 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TY(FLOAT,  Type::FloatTy, 0); }
	YY_BREAK
case 64:
YY_RULE_SETUP
#line 262 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TY(DOUBLE, Type::DoubleTy,0); }
	YY_BREAK
case 65:
YY_RULE_SETUP
#line 263 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TY(LABEL,  Type::LabelTy, 0); }
	YY_BREAK
case 66:
YY_RULE_SETUP
#line 264 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return TYPE;   }
	YY_BREAK
case 67:
YY_RULE_SETUP
#line 265 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return OPAQUE; }
	YY_BREAK
case 68:
YY_RULE_SETUP
#line 267 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, AddOp, ADD); }
	YY_BREAK
case 69:
YY_RULE_SETUP
#line 268 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, SubOp, SUB); }
	YY_BREAK
case 70:
YY_RULE_SETUP
#line 269 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, MulOp, MUL); }
	YY_BREAK
case 71:
YY_RULE_SETUP
#line 270 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, DivOp,  DIV); }
	YY_BREAK
case 72:
YY_RULE_SETUP
#line 271 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, UDivOp, UDIV); }
	YY_BREAK
case 73:
YY_RULE_SETUP
#line 272 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, SDivOp, SDIV); }
	YY_BREAK
case 74:
YY_RULE_SETUP
#line 273 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, FDivOp, FDIV); }
	YY_BREAK
case 75:
YY_RULE_SETUP
#line 274 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, RemOp,  REM); }
	YY_BREAK
case 76:
YY_RULE_SETUP
#line 275 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, URemOp, UREM); }
	YY_BREAK
case 77:
YY_RULE_SETUP
#line 276 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, SRemOp, SREM); }
	YY_BREAK
case 78:
YY_RULE_SETUP
#line 277 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, FRemOp, FREM); }
	YY_BREAK
case 79:
YY_RULE_SETUP
#line 278 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, AndOp, AND); }
	YY_BREAK
case 80:
YY_RULE_SETUP
#line 279 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, OrOp , OR ); }
	YY_BREAK
case 81:
YY_RULE_SETUP
#line 280 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, XorOp, XOR); }
	YY_BREAK
case 82:
YY_RULE_SETUP
#line 281 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, SetNE, SETNE); }
	YY_BREAK
case 83:
YY_RULE_SETUP
#line 282 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, SetEQ, SETEQ); }
	YY_BREAK
case 84:
YY_RULE_SETUP
#line 283 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, SetLT, SETLT); }
	YY_BREAK
case 85:
YY_RULE_SETUP
#line 284 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, SetGT, SETGT); }
	YY_BREAK
case 86:
YY_RULE_SETUP
#line 285 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, SetLE, SETLE); }
	YY_BREAK
case 87:
YY_RULE_SETUP
#line 286 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, SetGE, SETGE); }
	YY_BREAK
case 88:
YY_RULE_SETUP
#line 287 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, ShlOp, SHL); }
	YY_BREAK
case 89:
YY_RULE_SETUP
#line 288 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, ShrOp, SHR); }
	YY_BREAK
case 90:
YY_RULE_SETUP
#line 289 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, LShrOp, LSHR); }
	YY_BREAK
case 91:
YY_RULE_SETUP
#line 290 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(BinaryOpVal, AShrOp, ASHR); }
	YY_BREAK
case 92:
YY_RULE_SETUP
#line 292 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(OtherOpVal, ICmpOp, ICMP); }
	YY_BREAK
case 93:
YY_RULE_SETUP
#line 293 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(OtherOpVal, FCmpOp, FCMP); }
	YY_BREAK
case 94:
YY_RULE_SETUP
#line 295 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return EQ; }
	YY_BREAK
case 95:
YY_RULE_SETUP
#line 296 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return NE; }
	YY_BREAK
case 96:
YY_RULE_SETUP
#line 297 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return SLT; }
	YY_BREAK
case 97:
YY_RULE_SETUP
#line 298 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return SGT; }
	YY_BREAK
case 98:
YY_RULE_SETUP
#line 299 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return SLE; }
	YY_BREAK
case 99:
YY_RULE_SETUP
#line 300 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return SGE; }
	YY_BREAK
case 100:
YY_RULE_SETUP
#line 301 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return ULT; }
	YY_BREAK
case 101:
YY_RULE_SETUP
#line 302 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return UGT; }
	YY_BREAK
case 102:
YY_RULE_SETUP
#line 303 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return ULE; }
	YY_BREAK
case 103:
YY_RULE_SETUP
#line 304 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return UGE; }
	YY_BREAK
case 104:
YY_RULE_SETUP
#line 305 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return OEQ; }
	YY_BREAK
case 105:
YY_RULE_SETUP
#line 306 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return ONE; }
	YY_BREAK
case 106:
YY_RULE_SETUP
#line 307 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return OLT; }
	YY_BREAK
case 107:
YY_RULE_SETUP
#line 308 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return OGT; }
	YY_BREAK
case 108:
YY_RULE_SETUP
#line 309 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return OLE; }
	YY_BREAK
case 109:
YY_RULE_SETUP
#line 310 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return OGE; }
	YY_BREAK
case 110:
YY_RULE_SETUP
#line 311 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return ORD; }
	YY_BREAK
case 111:
YY_RULE_SETUP
#line 312 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return UNO; }
	YY_BREAK
case 112:
YY_RULE_SETUP
#line 313 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return UEQ; }
	YY_BREAK
case 113:
YY_RULE_SETUP
#line 314 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return UNE; }
	YY_BREAK
case 114:
YY_RULE_SETUP
#line 316 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(OtherOpVal, PHIOp, PHI_TOK); }
	YY_BREAK
case 115:
YY_RULE_SETUP
#line 317 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(OtherOpVal, CallOp, CALL); }
	YY_BREAK
case 116:
YY_RULE_SETUP
#line 318 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(CastOpVal, CastOp, CAST);  }
	YY_BREAK
case 117:
YY_RULE_SETUP
#line 319 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(CastOpVal, TruncOp, TRUNC); }
	YY_BREAK
case 118:
YY_RULE_SETUP
#line 320 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(CastOpVal, ZExtOp , ZEXT); }
	YY_BREAK
case 119:
YY_RULE_SETUP
#line 321 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(CastOpVal, SExtOp, SEXT); }
	YY_BREAK
case 120:
YY_RULE_SETUP
#line 322 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(CastOpVal, FPTruncOp, FPTRUNC); }
	YY_BREAK
case 121:
YY_RULE_SETUP
#line 323 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(CastOpVal, FPExtOp, FPEXT); }
	YY_BREAK
case 122:
YY_RULE_SETUP
#line 324 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(CastOpVal, FPToUIOp, FPTOUI); }
	YY_BREAK
case 123:
YY_RULE_SETUP
#line 325 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(CastOpVal, FPToSIOp, FPTOSI); }
	YY_BREAK
case 124:
YY_RULE_SETUP
#line 326 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(CastOpVal, UIToFPOp, UITOFP); }
	YY_BREAK
case 125:
YY_RULE_SETUP
#line 327 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(CastOpVal, SIToFPOp, SITOFP); }
	YY_BREAK
case 126:
YY_RULE_SETUP
#line 328 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(CastOpVal, PtrToIntOp, PTRTOINT); }
	YY_BREAK
case 127:
YY_RULE_SETUP
#line 329 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(CastOpVal, IntToPtrOp, INTTOPTR); }
	YY_BREAK
case 128:
YY_RULE_SETUP
#line 330 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(CastOpVal, BitCastOp, BITCAST); }
	YY_BREAK
case 129:
YY_RULE_SETUP
#line 331 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(OtherOpVal, SelectOp, SELECT); }
	YY_BREAK
case 130:
YY_RULE_SETUP
#line 332 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return VANEXT_old; }
	YY_BREAK
case 131:
YY_RULE_SETUP
#line 333 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return VAARG_old; }
	YY_BREAK
case 132:
YY_RULE_SETUP
#line 334 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(OtherOpVal, VAArg , VAARG); }
	YY_BREAK
case 133:
YY_RULE_SETUP
#line 335 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(TermOpVal, RetOp, RET); }
	YY_BREAK
case 134:
YY_RULE_SETUP
#line 336 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(TermOpVal, BrOp, BR); }
	YY_BREAK
case 135:
YY_RULE_SETUP
#line 337 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(TermOpVal, SwitchOp, SWITCH); }
	YY_BREAK
case 136:
YY_RULE_SETUP
#line 338 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(TermOpVal, InvokeOp, INVOKE); }
	YY_BREAK
case 137:
YY_RULE_SETUP
#line 339 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return UNWIND; }
	YY_BREAK
case 138:
YY_RULE_SETUP
#line 340 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(TermOpVal, UnreachableOp, UNREACHABLE); }
	YY_BREAK
case 139:
YY_RULE_SETUP
#line 342 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(MemOpVal, MallocOp, MALLOC); }
	YY_BREAK
case 140:
YY_RULE_SETUP
#line 343 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(MemOpVal, AllocaOp, ALLOCA); }
	YY_BREAK
case 141:
YY_RULE_SETUP
#line 344 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(MemOpVal, FreeOp, FREE); }
	YY_BREAK
case 142:
YY_RULE_SETUP
#line 345 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(MemOpVal, LoadOp, LOAD); }
	YY_BREAK
case 143:
YY_RULE_SETUP
#line 346 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(MemOpVal, StoreOp, STORE); }
	YY_BREAK
case 144:
YY_RULE_SETUP
#line 347 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(MemOpVal, GetElementPtrOp, GETELEMENTPTR); }
	YY_BREAK
case 145:
YY_RULE_SETUP
#line 349 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(OtherOpVal, ExtractElementOp, EXTRACTELEMENT); }
	YY_BREAK
case 146:
YY_RULE_SETUP
#line 350 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(OtherOpVal, InsertElementOp, INSERTELEMENT); }
	YY_BREAK
case 147:
YY_RULE_SETUP
#line 351 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ RET_TOK(OtherOpVal, ShuffleVectorOp, SHUFFLEVECTOR); }
	YY_BREAK
case 148:
YY_RULE_SETUP
#line 354 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{
                  UnEscapeLexed(yytext+1);
                  Upgradelval.StrVal = strdup(yytext+1);             // Skip %
                  return VAR_ID;
                }
	YY_BREAK
case 149:
YY_RULE_SETUP
#line 359 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{
                  yytext[strlen(yytext)-1] = 0;  // nuke colon
                  UnEscapeLexed(yytext);
                  Upgradelval.StrVal = strdup(yytext);
                  return LABELSTR;
                }
	YY_BREAK
case 150:
YY_RULE_SETUP
#line 365 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{
                  yytext[strlen(yytext)-2] = 0;  // nuke colon, end quote
                  UnEscapeLexed(yytext+1);
                  Upgradelval.StrVal = strdup(yytext+1);
                  return LABELSTR;
                }
	YY_BREAK
case 151:
YY_RULE_SETUP
#line 372 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.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
                   Upgradelval.StrVal = strdup(yytext+1);  // Nuke start quote
                   return STRINGCONSTANT;
                 }
	YY_BREAK
case 152:
YY_RULE_SETUP
#line 383 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ Upgradelval.UInt64Val = atoull(yytext); return EUINT64VAL; }
	YY_BREAK
case 153:
YY_RULE_SETUP
#line 384 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{
                  uint64_t Val = atoull(yytext+1);
                  // +1:  we have bigger negative range
                  if (Val > (uint64_t)INT64_MAX+1)
                    error("Constant too large for signed 64 bits!");
                  Upgradelval.SInt64Val = -Val;
                  return ESINT64VAL;
                }
	YY_BREAK
case 154:
YY_RULE_SETUP
#line 392 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{
                   Upgradelval.UInt64Val = HexIntToVal(yytext+3);
                   return yytext[0] == 's' ? ESINT64VAL : EUINT64VAL;
                 }
	YY_BREAK
case 155:
YY_RULE_SETUP
#line 397 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{
                  uint64_t Val = atoull(yytext+1);
                  if ((unsigned)Val != Val)
                    error("Invalid value number (too large)!");
                  Upgradelval.UIntVal = unsigned(Val);
                  return UINTVAL;
                }
	YY_BREAK
case 156:
YY_RULE_SETUP
#line 404 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{
                  uint64_t Val = atoull(yytext+2);
                  // +1:  we have bigger negative range
                  if (Val > (uint64_t)INT32_MAX+1)
                    error("Constant too large for signed 32 bits!");
                  Upgradelval.SIntVal = (int)-Val;
                  return SINTVAL;
                }
	YY_BREAK
case 157:
YY_RULE_SETUP
#line 413 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ Upgradelval.FPVal = atof(yytext); return FPVAL; }
	YY_BREAK
case 158:
YY_RULE_SETUP
#line 414 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ Upgradelval.FPVal = HexToFP(yytext); return FPVAL; }
	YY_BREAK
case YY_STATE_EOF(INITIAL):
#line 416 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.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 159:
YY_RULE_SETUP
#line 424 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ /* Ignore whitespace */ }
	YY_BREAK
case 160:
YY_RULE_SETUP
#line 425 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
{ return yytext[0]; }
	YY_BREAK
case 161:
YY_RULE_SETUP
#line 427 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"
YY_FATAL_ERROR( "flex scanner jammed" );
	YY_BREAK
#line 2199 "UpgradeLexer.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 >= 620 )
				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 >= 620 )
			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 == 619);
	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 427 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l"

