#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: /cvs/root/flex/flex/skel.c,v 1.2 2004/05/07 00:28:17 jkh Exp $
 */

#define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2
#define YY_FLEX_MINOR_VERSION 5

#include <stdio.h>


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


#ifdef __cplusplus

#include <stdlib.h>
#include <unistd.h>

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

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

#else	/* ! __cplusplus */

#if __STDC__

#define YY_USE_PROTOS
#define YY_USE_CONST

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

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

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


#ifdef YY_USE_PROTOS
#define YY_PROTO(proto) proto
#else
#define YY_PROTO(proto) ()
#endif

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

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

/* Enter a start condition.  This macro really ought to take a parameter,
 * but we do it the disgusting crufty way forced on us by the ()-less
 * definition of BEGIN.
 */
#define BEGIN yy_start = 1 + 2 *

/* Translate the current start state into a value that can be later handed
 * to BEGIN to return to the state.  The YYSTATE alias is for lex
 * compatibility.
 */
#define YY_START ((yy_start - 1) / 2)
#define YYSTATE YY_START

/* Action number for EOF rule of a given start state. */
#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)

/* Special action meaning "start processing a new file". */
#define YY_NEW_FILE yyrestart( yyin )

#define YY_END_OF_BUFFER_CHAR 0

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

typedef struct yy_buffer_state *YY_BUFFER_STATE;

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

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

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

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

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

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

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


struct yy_buffer_state
	{
	FILE *yy_input_file;

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

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

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

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

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

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

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

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

static YY_BUFFER_STATE yy_current_buffer = 0;

/* We provide macros for accessing buffer states in case in the
 * future we want to put the buffer states in a more general
 * "scanner state".
 */
#define YY_CURRENT_BUFFER yy_current_buffer


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

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


int yyleng;

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

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

void yyrestart YY_PROTO(( FILE *input_file ));

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

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

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

#define yy_new_buffer yy_create_buffer

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

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

#define YY_AT_BOL() (yy_current_buffer->yy_at_bol)


#define YY_USES_REJECT

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

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

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

#define YY_NUM_RULES 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 "/Volumes/MacOS9/gcc/llvm/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 "/Volumes/MacOS9/gcc/llvm/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 1085 "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, *yy_bp;
	register int yy_act;

#line 194 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l"


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


#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;
	}


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


#ifndef YY_ALWAYS_INTERACTIVE
#ifndef YY_NEVER_INTERACTIVE
extern int isatty YY_PROTO(( int ));
#endif
#endif

#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 429 "/Volumes/MacOS9/gcc/llvm/tools/llvm-upgrade/UpgradeLexer.l"

