/* A lexical scanner generated by flex */

/* Scanner skeleton version:
 * $Header: /home/daffy/u0/vern/flex/flex-2.4.7/RCS/flex.skl,v 1.2 94/08/03 11:13:24 vern Exp $
 */

#define FLEX_SCANNER

#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 */

#ifdef __STDC__

#define YY_USE_PROTOS
#define YY_USE_CONST

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


#ifdef __TURBOC__
#define YY_USE_CONST
#endif


#ifndef YY_USE_CONST
#ifndef const
#define const
#endif
#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.
 */
#define YY_START ((yy_start - 1) / 2)

/* 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".  Now included
 * only for backward compatibility with previous versions of flex.
 */
#define YY_NEW_FILE yyrestart( yyin )

#define YY_END_OF_BUFFER_CHAR 0

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

typedef struct yy_buffer_state *YY_BUFFER_STATE;

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

#ifdef __cplusplus
extern "C" {
#endif
	extern int yywrap YY_PROTO(( void ));
#ifdef __cplusplus
	}
#endif

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


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.
	 */
	int yy_buf_size;

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

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

static void yyunput YY_PROTO(( int c, char *buf_ptr ));
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 ));

static int yy_start_stack_ptr = 0;
static int yy_start_stack_depth = 0;
static int *yy_start_stack = 0;
static void yy_push_state YY_PROTO(( int new_state ));
static void yy_pop_state YY_PROTO(( void ));
static int yy_top_state YY_PROTO(( void ));

static void *yy_flex_alloc YY_PROTO(( unsigned int ));
static void *yy_flex_realloc YY_PROTO(( void *, unsigned int ));
static void yy_flex_free YY_PROTO(( void * ));

#define yy_new_buffer yy_create_buffer

#define INITIAL 0
#define Command 1
#define Expression 2
#define StringsExprs 3
#define Address 4
#define MovemAddress 5
#define String 6
#define FLP_single 7
#define FLP_double 8
#define FLP_extended 9
typedef unsigned char YY_CHAR;
typedef int yy_state_type;
FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
extern char *yytext;
#define yytext_ptr yytext

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

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

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(( const 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 = yy_cp - yy_bp; \
	yy_hold_char = *yy_cp; \
	*yy_cp = '\0'; \
	yy_c_buf_p = yy_cp;

#define YY_END_OF_BUFFER 82
static const short int yy_accept[579] =
    {   0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
       82,   80,    2,    1,   80,   77,   71,   80,   71,   71,
       71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
       71,   71,   71,   71,   71,   71,   71,   71,    6,    7,
       80,    2,   76,   80,   73,   74,   71,   71,   71,   71,
       71,   71,   71,   71,   71,   71,   77,   80,   80,   80,
        2,    1,   77,    0,    0,    0,   79,    0,   71,   30,
       46,   46,   46,   46,   46,   46,   46,   46,   46,   46,
       46,   46,   46,   46,   46,   46,   46,   72,   71,   70,

       46,   46,   46,   46,   46,   46,   46,   46,   46,   46,
       46,   46,   46,   46,   46,   46,   46,   71,   71,   71,
       71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
       71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
       71,   71,   71,   68,   68,   71,   71,   71,   71,   64,
       71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
       71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
       71,   71,   71,   71,   71,   71,   47,   71,   71,   71,
       71,   71,   71,   47,   71,   71,   71,   71,   71,   71,
       71,    6,    0,    7,    0,   78,    2,   75,    0,   69,

       18,   71,   71,   18,   71,   71,   71,   71,   15,   10,
       11,    0,    0,    0,    0,   46,   46,   46,   46,   46,
       46,   46,   46,   46,   46,   46,   46,   46,   46,   46,
       46,   46,   46,   46,   46,   46,   46,   46,   46,   46,
       46,   46,   46,   46,   46,   46,   46,   46,   46,   46,
       46,   46,   46,   46,   46,   46,   46,   46,   46,   46,
       46,   46,   46,   46,   46,   46,   46,   46,   46,   46,
       46,   46,   46,   71,   71,   71,   47,   71,   71,   71,
       71,   71,   71,   71,   71,   71,   47,   71,   71,   71,
       71,   47,   71,   71,   71,   47,   71,   71,   71,   71,

       71,   71,   71,   71,   71,   71,   67,   68,   68,   68,
       68,   67,   68,   68,   67,   68,   68,   71,   55,   71,
       71,   71,   71,   71,   71,   48,   52,   71,   71,   71,
       50,   71,   71,   71,   71,   71,   71,   71,    8,    0,
       78,    0,    0,    0,   17,   14,   13,   71,   71,   71,
       16,   10,    0,   11,    0,    0,    0,    0,    0,    0,
        0,    0,    0,   46,   46,   46,   46,   46,   46,   46,
       46,   46,   46,   46,   46,   42,   46,   46,   46,   46,
       25,   46,   46,   26,   46,   46,   46,   46,   46,   46,
       46,   46,   46,   46,   46,   46,   46,   46,   46,   46,

       46,   46,   46,   42,   46,   46,   46,   46,   25,   46,
       46,   26,   46,   46,   46,   46,   46,   46,   46,   53,
       54,   47,   71,   71,   71,   71,   71,   71,   71,   71,
       71,   71,   71,   57,   57,   53,   65,   65,   65,   65,
       65,   68,   71,   56,   58,   71,   71,   71,   71,   71,
       71,   57,   57,   49,   71,   47,    9,    0,    0,   13,
       71,   12,    0,    0,    0,   46,   46,   46,   36,   40,
       28,   35,   46,   32,   38,   23,   46,   46,   46,   39,
       27,   44,   22,   46,   46,   33,   46,   46,   34,   41,
       46,   46,   46,   36,   40,   28,   35,   46,   32,   38,

       23,   46,   46,   46,   39,   27,   44,   22,   46,   46,
       33,   46,   46,   34,   41,   71,   54,   66,   66,   66,
       65,   71,   62,   47,   60,   61,   63,   59,   71,   71,
       71,   71,   71,   71,   71,   71,   51,    0,    0,    0,
        0,   31,   24,   36,   37,   35,   46,   20,   43,   29,
       46,   45,   31,   24,   36,   37,   35,   46,   20,   43,
       29,   46,   45,   71,   50,    0,    0,    3,    0,    4,
        0,    5,   21,   19,   21,   19,   13,    0
    } ;

static const int yy_ec[256] =
    {   0,
        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    2,    1,    4,    5,    6,    1,    1,    1,    1,
        1,    7,    8,    1,    9,   10,   11,   12,   13,   14,
       15,   15,   15,   15,   15,   16,   16,   17,    1,   18,
       19,   20,    1,    1,   21,   22,   23,   23,   24,   23,
       25,   25,   25,   25,   25,   25,   25,   25,   26,   25,
       25,   27,   25,   28,   25,   25,   25,   29,   25,   25,
       30,    1,   31,    1,   32,    1,   33,   34,   35,   36,

       37,   38,   39,   40,   41,   42,   43,   44,   45,   46,
       47,   48,   49,   50,   51,   52,   53,   54,   55,   56,
       57,   58,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,

        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    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 const int yy_meta[59] =
    {   0,
        1,    2,    3,    1,    4,    5,    1,    1,    1,    2,
        4,    6,    6,    6,    6,    6,    7,    1,    5,    1,
        8,    8,    8,    8,    2,    2,    2,    2,    2,    1,
        1,    2,    8,    8,    8,    8,    8,    8,    2,    2,
        2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
        2,    2,    2,    2,    2,    2,    2,    2
    } ;

static const short int yy_base[591] =
    {   0,
        0,   31,   62,    0,    9,   40,  117,  122,  137,    0,
      432,  420,    0,    0,  403,  402,  374,  355,  330,  304,
      313, 3334,  153, 3334,  304, 3334,  190,  271,  121,  247,
      126,  304,  354,  308,  142,  307,  407,  313,  432,  327,
      146,  160,  316,  332,  343,  453,  477,  357,  500,  369,
       23,  184,  259,  273, 3334, 3334,  507,  377,  521,  368,
      356,  466,  122,  522,  523,  528,  536,  215,  208,  206,
      309, 3334, 3334,  179,  248,  250, 3334,  182,  248, 3334,
      559,  561,  573,  580,  594,  596,  601,  608,  629,  640,
      685,  616,  627,  629,  702,  634,  296, 3334,  536, 3334,

      686,  692,  738,  754,  759,  775,  778,  799,  817,  818,
      863,  665,  672,  804,  880,  807,  700,  619,  781,  785,
      708,  857,  682,  931,  851,  606,  858,  888,  870,  907,
      917,  883,  928,  935,  936,  940,  956,  960,  864,  977,
      976,  983,  987, 1006,  205,  988, 1017, 1018, 1046,  877,
     1047, 1053, 1054, 1073, 1079, 1057, 1085, 1091, 1098, 1105,
     1109, 1110, 1117, 1118, 1123,  979, 1128, 1129, 1142, 1148,
     1149, 1155, 1173, 1168, 1177, 1176, 1187, 1196, 1200, 1212,
     1218, 1219, 1225, 1228, 1238, 1241, 1248, 1249, 1260, 1268,
     1269,   45,    0, 1282,   25,  247, 1075, 3334, 1269, 3334,

      317,  695,  566, 1319,  719,  727,  777,  865,  320, 1296,
     1314, 1327, 1335, 1349,  399,  929,  962, 1062, 1271, 1331,
     1334, 1339, 1352, 1354, 1359, 1367, 1374, 1381, 1382, 1389,
     1396, 1403, 1404, 1417, 1418, 1437, 1438, 1436, 1445, 1458,
     1465, 1478, 1467, 1480, 1485, 1498, 1487, 1500, 1505, 1520,
     1513, 1527, 1534, 1535, 1548, 1549, 1556, 1563, 1570, 1577,
     1584, 1585, 1598, 1599, 1618, 1619, 1617, 1626, 1639, 1646,
     1659, 1648, 1661, 1686, 1696, 1699, 1272, 1707, 1712, 1715,
     1718, 1354, 1719, 1282, 1725, 1739, 1747, 1751, 1758, 1761,
     1765, 1769, 1779, 1787, 1783, 1795, 1799, 1809, 1823, 1827,

     1828, 1835, 1839, 1847, 1859, 1867,    0,  326,  172,  437,
      169,  494,  139,  137,  127,  337,  115, 1868, 1871, 1875,
     1878, 1924, 1887, 1897, 1898, 1901, 1911, 1917, 1927, 1933,
     1946, 1965, 1968, 2015, 1972, 1976, 1969, 1979,    0,  162,
      156, 1993, 1993,   99,  575,  811, 1992,  944,  916, 1189,
      827, 2023,    0, 2027, 2040, 2053, 2062, 2069, 2074, 2081,
     2088, 2093, 2100, 1780, 2082, 1904, 2010, 2084, 2085, 2104,
     2106, 2103, 2121, 2126, 2129, 2134, 2143, 2152, 2157, 2160,
     2165, 2174, 2182, 2179, 2187, 2200, 2201, 2209, 2220, 2218,
     2227, 2245, 2238, 2240, 2247, 2258, 2265, 2278, 2280, 2287,

     2295, 2302, 2310, 2313, 2321, 2328, 2335, 2336, 2343, 2350,
     2357, 2364, 2371, 2378, 2379, 2393, 2398, 2396, 2415, 2008,
     2301, 2436, 2440, 2444, 2450, 2456, 2466, 2469, 2470, 2479,
     2476, 2482, 2495, 2488, 2506, 2511,  376,    0,    0,   97,
      506, 2508, 2532, 2516, 2543, 2551,  171, 2555, 2556, 2559,
     2563, 2564, 2575, 2567, 2585, 2636, 3334, 2608,   89,  941,
     1444,    0, 2612, 2617, 2632, 2623, 2642, 2644, 2657, 2659,
     2662, 2683, 2670, 2681, 2684, 2692, 2701, 2703, 2710, 2721,
     2723, 2724, 2732, 2741, 2743, 2750, 2761, 2764, 2769, 2772,
     2786, 2783, 2791, 2800, 2805, 2813, 2818, 2826, 2827, 2840,

     2841, 2848, 2861, 2862, 2863, 2876, 2881, 2883, 2884, 2898,
     2903, 2906, 2905, 2920, 2923, 2648, 2596,    0,  536,   81,
        0, 2946, 2640, 2949, 2826, 2958, 2967, 2970, 2971, 2978,
     2979, 2983, 2992, 3001, 3011, 3006, 3017,   74, 3045, 3057,
     3066, 2998, 3000, 3042, 3049, 3050, 3051, 3064, 3069, 3071,
     3072, 3086, 3089, 3091, 3094, 3108, 3109, 3111, 3116, 3129,
     3130, 3131, 3138, 3167, 3173, 2648, 3181, 3186, 3200, 3206,
     3211, 3217, 3199, 3200, 3201, 3202, 3334, 3334, 3253, 3260,
     3268, 3275, 3282, 3290, 3297, 3304, 3311, 3314, 3322, 3325
    } ;

static const short int yy_def[591] =
    {   0,
      579,  579,  578,    3,    2,    2,    2,    2,    2,    9,
        9,    9,    2,    2,    2,    2,    2,    2,    2,    2,
      578,  578,  580,  578,  581,  578,  578,  578,  582,  578,
      583,  583,  583,  583,  583,  583,  578,  583,   33,  583,
      583,  583,  583,  583,  583,   39,  583,  583,  578,  578,
      584,  580,  578,  578,  578,  578,  582,  582,  582,  582,
      582,  582,  582,  582,  582,  582,  578,  578,  578,  578,
      580,  578,  578,  585,  578,  581,  578,  578,  582,  578,
      586,  586,  586,  586,  586,  586,  586,  586,  586,  586,
      586,   91,   91,   91,   91,   91,   91,  578,  583,  578,

      587,  587,  587,  587,  587,  587,  587,  587,  587,  587,
      587,  111,  111,  111,  111,  111,  111,  583,  583,  583,
      583,  583,  583,  583,  583,  583,  583,  583,  583,  583,
      583,  583,  583,  583,  583,  583,  583,  583,  583,   39,
      583,  583,  583,   37,  144,  583,  583,  583,  583,  583,
      583,  583,  583,  583,  583,  583,  583,  583,  583,  583,
      583,  583,  583,  583,  583,  583,  583,  583,  583,  583,
      583,  583,  583,  583,  583,  583,  583,  583,  583,  583,
      583,  583,  583,  583,  583,  583,  583,  583,  583,  583,
      583,  578,  588,  578,  584,  589,  580,  578,  578,  578,

      582,  582,  582,  582,  582,  582,  582,  582,  582,  578,
      578,  578,  578,  578,  585,   91,   91,   91,   91,   91,
       91,   91,   91,   91,   91,   91,   91,   91,   91,   91,
       91,   91,   91,   91,   91,   91,   91,   91,   91,   91,
       91,   91,   91,   91,  111,  111,  111,  111,  111,  111,
      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
      111,  111,  111,  583,  583,  583,  583,  583,  583,  583,
      583,  583,  583,  583,  583,  583,  583,  583,  583,  583,
      583,  583,  583,  583,  583,  583,  583,  583,  583,  583,

      583,  583,  583,  583,  583,  583,  144,  144,  144,  144,
      144,  144,  144,  144,  144,  144,  144,  583,  583,  583,
      583,  583,  583,  583,  583,  583,  583,  583,  583,  583,
      583,  583,  583,  583,  583,  583,  583,  583,  588,  589,
      589,  578,  578,  578,  582,  582,  582,  582,  582,  582,
      582,  578,  590,  578,  578,  578,  578,  578,  578,  578,
      578,  578,  578,   91,   91,   91,   91,   91,   91,   91,
       91,   91,   91,   91,   91,   91,   91,   91,   91,   91,
       91,   91,   91,   91,   91,   91,   91,   91,   91,   91,
       91,  111,  111,  111,  111,  111,  111,  111,  111,  111,

      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
      111,  111,  111,  111,  111,  111,  111,  111,  111,  583,
      583,  583,  583,  583,  583,  583,  583,  583,  583,  583,
      583,  583,  583,  583,  583,  583,  144,  144,  144,  144,
      144,  144,  583,  583,  583,  583,  322,  583,  583,  583,
      583,  583,  583,  583,  583,  583,  578,  578,  578,  582,
      582,  590,  578,  578,  578,   91,   91,   91,   91,   91,
       91,   91,   91,   91,   91,   91,   91,   91,   91,   91,
       91,   91,   91,   91,   91,   91,   91,   91,   91,   91,
      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,

      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
      111,  111,  111,  111,  111,  583,  583,  144,  144,  144,
      144,  583,  583,  583,  583,  583,  583,  583,  583,  583,
      583,  583,  583,  583,  583,  583,  583,  578,  578,  578,
      578,   91,   91,   91,   91,   91,   91,   91,   91,   91,
       91,   91,  111,  111,  111,  111,  111,  111,  111,  111,
      111,  111,  111,  583,  583,  578,  578,  578,  578,  578,
      578,  578,   91,   91,  111,  111,  578,    0,  578,  578,
      578,  578,  578,  578,  578,  578,  578,  578,  578,  578
    } ;

static const short int yy_nxt[3393] =
    {   0,
       22,   23,   24,   25,   26,   22,   22,   22,   22,   27,
       28,   22,   22,   22,   22,   22,   22,   22,   22,   22,
       49,   50,   50,   50,   50,   76,  196,   76,  196,   22,
       22,   22,   23,   24,   25,   26,   22,   22,   22,   22,
       27,   28,   22,   22,   22,   22,   22,   22,   22,   22,
       22,   49,   50,   50,   50,   50,  192,  192,  192,  192,
       22,   22,   22,   23,   24,   25,   26,   22,   22,   22,
       22,   30,   28,   22,   22,   22,   22,   22,   22,   22,
       22,   22,   31,   31,   31,   31,   31,   31,   31,   31,
       31,   22,   22,   31,   32,   33,   34,   35,   36,   37,

       31,   31,   38,   39,   31,   40,   41,   42,   43,   44,
       31,   45,   46,   47,   48,   31,   31,   31,   31,   31,
       51,  566,   78,   78,  441,   51,  538,   78,   49,   50,
       50,   50,   50,   49,   50,   50,   50,   50,   52,   80,
       80,   53,  100,   78,   80,  439,  458,   78,   49,   50,
       50,   50,   50,   54,   71,   72,  201,   73,  100,  341,
       80,   78,  100,   75,   80,  341,   55,   56,  442,   57,
      441,   58,   59,  440,   60,  140,  100,   61,   80,  439,
       78,   62,  141,   78,   63,  197,   72,   64,  198,   65,
       66,   78,  163,  165,   75,   79,  166,   80,  164,   79,

       80,   79,   79,   79,   79,   79,  167,   99,   80,  439,
       81,   82,   82,   82,   82,   82,   82,   82,   82,  524,
      439,   79,   83,   84,   85,   86,   87,   88,   89,   82,
       90,   82,   82,   91,   82,   82,   92,   93,   94,   82,
       95,   96,   82,   82,   97,   82,   82,   82,   78,   78,
      341,  317,   99,   77,   98,  214,   99,  213,   99,   99,
       99,   99,   99,  100,  212,   80,   80,  101,  102,  102,
      102,  102,  102,  102,  102,  102,  199,   98,   99,  103,
      104,  105,  106,  107,  108,  109,  102,  110,  102,  102,
      111,  102,  102,  112,  113,  114,  102,  115,  116,  102,

      102,  117,  102,  102,  102,   78,  200,   77,   78,   78,
       71,   72,  578,   73,   78,   70,  200,   78,   78,   75,
      100,   78,   80,  100,  100,   80,   80,  200,   78,  100,
      216,   80,  100,   78,   80,   80,  216,  118,   80,  119,
      136,   70,  244,  100,   78,   80,  216,  137,  100,  120,
       80,  138,  139,  142,  121,   78,  146,   78,   78,  100,
      437,   80,  143,  160,  169,  168,   69,  161,  170,   78,
      100,  437,   80,  100,   80,   80,  438,  162,   78,  171,
      194,  194,  194,  194,  194,   69,   80,  438,  122,  172,
      123,  124,  125,  126,  173,   80,  127,  128,  129,  130,

       78,  131,  191,  132,  133,  134,  205,  135,   78,  202,
      437,  201,   99,   68,   68,  204,   99,   80,   99,   99,
       99,   99,   99,  100,   67,   80,  438,   99,   99,   99,
       99,   99,   99,   99,   99,   99,   67,  578,   99,  144,
      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
      144,  145,  144,  144,  144,  144,  144,  144,  144,  144,
      144,  144,  144,  144,  144,  147,  148,   78,  149,  150,
      151,  152,  578,  440,   99,  153,  154,  155,   78,  156,
      578,  157,  158,  150,   80,  159,  174,  175,  439,  176,
      177,  178,  179,  100,  578,   80,  180,  181,  182,  578,

      183,  578,   99,   99,  184,  185,  186,  187,   78,  188,
      578,  192,  192,  192,  192,  578,  206,  578,  201,  201,
      201,  201,   78,   78,   78,   80,  189,  190,  193,   78,
      440,  578,  201,  201,  201,  201,  578,   78,  578,   80,
       80,   80,  440,  578,  438,  439,   80,  210,  211,  211,
      211,  211,  100,  199,   80,  193,  438,  439,  203,  207,
       78,  209,   78,  578,   79,  578,   79,   78,   79,  201,
       79,  201,  440,  208,   78,  578,   78,   80,   79,   80,
      217,   78,   79,  578,   80,   79,  438,  439,  578,   79,
       79,   80,   79,   80,  578,   78,  578,   78,   80,   79,

      346,   79,   78,   79,   79,   79,   79,   78,  578,   78,
       79,   79,   80,   79,   80,  578,  218,   79,  578,   80,
       78,  578,  100,  219,   80,   79,   80,   79,  223,  578,
       78,  578,   79,  221,   79,  100,  220,   80,   79,   79,
      222,   78,  224,  578,  578,   79,  277,   80,  226,   79,
      216,  227,  578,  274,  225,  578,  216,  578,   80,  578,
       79,  216,  216,  216,  578,  234,  216,  216,  216,  216,
      243,   79,  228,  216,  216,  216,  235,  216,  578,  216,
      216,  236,  578,   78,  216,  229,   78,   78,  578,  578,
       79,   99,  578,   78,   79,   99,   78,   99,  100,  245,

       80,   99,  100,   80,   80,  245,  245,  246,  100,   78,
       80,  245,  245,   80,  263,  245,   79,   99,  245,  230,
       78,  264,  245,   99,  100,  231,   80,  345,   78,  345,
      277,  232,  578,  578,  245,  233,  216,   80,  237,   78,
      245,  238,  239,   99,  240,   80,  273,   99,  216,  241,
      245,  276,  216,  242,  100,   78,   80,  276,  578,   99,
       78,  578,  578,   99,   99,  578,  351,  578,   99,   99,
      100,  578,   80,  578,  351,  100,   78,   80,   78,   78,
       99,  247,   78,   99,   99,   99,   78,   99,  248,  578,
       99,  100,  578,   80,  100,   80,   80,  100,  250,   80,

       78,  100,  578,   80,   99,  251,   99,  252,   99,   99,
      249,  346,   78,  578,  578,  100,  275,   80,   78,   78,
      168,  253,   99,   99,  578,  578,   99,   99,   78,   80,
       99,  254,  578,  100,  100,   80,   80,  578,  245,  255,
      578,  245,  256,  272,  245,   80,  578,  245,   99,   99,
      245,  578,   78,  245,  245,  578,  265,  245,   78,   78,
      257,  578,  578,  258,   78,   78,   78,  100,   99,   80,
      578,   78,   99,  100,  100,   80,   80,  578,   78,  100,
      100,   80,   80,   80,   78,  578,  100,  277,   80,   78,
      578,  277,  578,  100,   99,   80,  278,  259,  578,  100,

      279,   80,  277,  260,  100,  286,   80,  277,   78,  261,
      277,  293,  201,  262,  245,  287,  266,   78,   78,  267,
      268,  578,  269,  100,  277,   80,  245,  270,  578,   78,
      245,  271,   78,  100,   80,   80,   78,   78,  277,  277,
      578,   78,   78,  277,  100,   78,   80,  100,  461,   80,
      578,  100,  100,   80,   80,  578,  100,   78,   80,   80,
      277,   78,   80,  216,  288,  280,  578,  281,  282,  216,
      277,  283,  100,  578,   80,  216,  100,   78,   80,  216,
       78,  284,  285,  290,   78,  289,  277,  364,   78,   78,
      291,  578,  100,  460,   80,  100,  216,   80,  292,  100,

      578,   80,  216,  100,  100,   80,   80,  578,  216,  276,
       99,  294,  216,  295,  296,  297,  298,  325,   78,   78,
      299,  300,  301,  578,  302,  287,  303,   99,  296,  305,
      304,  318,  168,  100,  100,   80,   80,  578,  306,  307,
      308,  307,  309,  578,  310,  311,  578,   78,   78,  312,
      313,  314,  150,  315,   78,   78,  307,  578,   78,  316,
      307,  307,  100,  100,   80,   80,  319,  320,  150,  100,
      100,   80,   80,  100,   78,   80,  197,   72,  578,  198,
       78,  578,  578,  150,  578,   75,   78,  578,  578,  100,
      150,   80,   78,  150,  150,  100,  216,   80,  150,   78,

      150,  100,  365,   80,  150,  150,   78,  100,  216,   80,
       78,   78,  216,  150,  100,  150,   80,  150,   78,   78,
      287,  100,  578,   80,   78,  100,  100,   80,   80,   78,
       78,  578,  150,  100,  100,   80,   80,  287,  578,  100,
      287,   80,  578,   78,  100,  100,   80,   80,  150,   78,
       78,  578,  578,  276,  321,  578,   78,  324,  100,  276,
       80,  323,  327,  578,  100,  100,   80,   80,  578,   78,
      322,  100,  327,   80,   78,  326,  328,   78,   78,  276,
      287,  578,  578,  327,  100,  578,   80,  578,   78,  100,
       78,   80,  100,  100,   80,   80,  578,   78,  276,  329,

      578,   78,  332,  100,  276,   80,  578,   80,  331,  326,
      330,  177,  100,   78,   80,  578,  100,  331,   80,   78,
       78,  578,  326,  326,  177,  578,   78,  177,  100,   78,
       80,  578,  177,  578,  100,  100,   80,   80,  460,   78,
      177,  100,   78,   80,  100,  578,   80,  177,  177,   78,
       78,  578,  578,  578,  100,  177,   80,  100,  177,   80,
      578,   78,  177,  177,  100,  100,   80,   80,  177,   78,
       78,  334,  578,   78,  333,  177,  100,  342,   80,  342,
      335,  578,  578,   78,  100,  100,   80,   80,  100,  578,
       80,  177,  336,  194,  194,  194,  194,  194,  100,  287,

       80,  343,  578,  578,  343,  366,  344,  352,  352,  352,
      352,  216,  337,  578,  578,  421,  338,  216,  428,  276,
       78,  216,  578,  578,  353,  354,  354,  354,  354,  354,
      347,  347,  347,  347,  578,  355,  356,   80,  357,  357,
      357,  357,  357,  358,  359,  578,  360,  360,  360,  360,
      360,  353,  578,  348,  578,   78,  578,  361,  362,  349,
      363,  363,  363,  363,  363,  216,  368,  578,  216,  350,
      100,  216,   80,  216,  216,  578,  578,  216,  578,  216,
      216,  216,  367,  369,  216,  216,  216,  578,  216,  216,
      578,  426,  216,  216,  216,  372,  578,  578,  216,  216,

      216,  216,  216,  370,  216,  216,  371,  216,  216,  216,
      373,  578,  578,  216,  216,  216,  216,  216,  578,  578,
      374,  216,  216,  216,  216,  578,  578,  375,  216,  216,
      216,  216,  216,  376,  578,  377,  216,  216,  216,  216,
      578,  378,  216,  216,  216,   78,  216,  578,  379,  216,
      216,  216,  216,  216,  216,  381,  578,  216,  216,  578,
      380,  578,   80,  216,  382,  578,  578,  216,  216,  383,
      216,  216,  216,  578,  578,  578,  216,  216,  216,  216,
      578,  578,  385,  216,  216,  216,  216,  216,  216,  384,
      386,  216,  216,  460,  578,  216,  578,  388,  387,  216,

      578,  216,  578,  578,  216,  216,  578,  216,  216,  578,
      389,  216,  216,  216,  216,  216,  578,  216,  216,  245,
      216,  245,  390,  392,  216,  245,  216,  393,  216,  391,
      216,  245,  245,  245,  394,  245,  578,  245,  245,  245,
      245,  578,  578,  578,  245,  245,  245,  245,  245,  578,
      245,  245,  396,  245,  245,  245,  395,  397,  578,  245,
      245,  245,  578,  245,  578,  578,  245,  245,  245,  245,
      245,  400,  578,  245,  245,  245,  578,  245,  398,  578,
      245,  245,  245,  245,  245,  245,  399,  578,  245,  245,
      245,  401,  578,  578,  245,  402,  245,  245,  245,  245,

      578,  578,  403,  245,  245,  578,  245,  578,  578,  245,
      245,  245,  578,  245,  404,  578,  405,  245,  245,  245,
      245,  578,  406,  245,  245,  245,  578,  245,  578,  407,
      245,  245,  245,  245,  245,  245,  409,  578,  245,  245,
      578,  408,  578,  578,  245,  410,  578,  578,  245,  245,
      411,  245,  245,  245,  578,  578,  578,  245,  245,  245,
      245,  578,  578,  413,  245,  245,  245,  245,  245,  245,
      412,  414,  245,  245,  578,  578,  245,  578,  416,  415,
      245,  578,  245,  578,  578,  245,  245,   78,  245,  245,
      578,  417,  245,  245,  245,  245,  245,   78,  245,  245,

       78,  245,  100,  418,   80,  245,  578,  245,   78,  245,
      419,  245,  100,   78,   80,  100,   78,   80,  578,   78,
       78,  287,  578,  100,  578,   80,   78,  578,  100,  327,
       80,  100,  420,   80,  100,  100,   80,   80,  578,  327,
       78,  100,  420,   80,  276,  422,  578,  578,   78,  578,
      327,  276,   78,  420,  423,  100,  578,   80,  424,   78,
      578,  422,   78,  100,  427,   80,   78,  100,  578,   80,
       78,  578,  578,  425,  100,  429,   80,  100,  431,   80,
       78,  100,  432,   80,   78,  100,  578,   80,   78,  578,
      331,  578,  433,  578,  578,  100,   78,   80,  421,  100,

       78,   80,  422,  100,  430,   80,  466,  578,  421,  422,
       78,  100,  327,   80,  216,  100,  578,   80,  578,  421,
      216,  296,  327,  276,   78,  100,  216,   80,   78,   78,
      216,  296,  578,  327,  578,  296,   78,  296,  578,  100,
       78,   80,  578,  100,  100,   80,   80,  578,   78,  296,
      296,  100,  578,   80,  578,  100,  578,   80,  578,  296,
       78,  578,  578,  100,  296,   80,  578,  296,   78,   78,
      578,  287,   78,  296,  296,  100,   78,   80,  296,   78,
      578,  296,  578,  100,  100,   80,   80,  100,   78,   80,
      578,  100,  578,   80,  100,  578,   80,  296,   78,   78,

      436,  578,   78,  100,  443,   80,  578,  578,  578,  434,
      420,  435,   78,  100,  100,   80,   80,  100,   78,   80,
      287,  420,  578,  578,  444,   78,  578,  100,   78,   80,
      578,  420,  287,  100,   78,   80,  578,  452,  216,  453,
      100,  420,   80,  100,  468,   80,  578,   78,  578,  100,
      216,   80,  420,  276,  216,  578,  578,  445,  446,  454,
      447,  578,  100,  455,   80,  578,   78,  445,  448,   78,
       78,  449,  450,   78,  451,  578,  276,   78,  445,  578,
       78,  100,  276,   80,  100,  100,   80,   80,  100,  578,
       80,  578,  100,   78,   80,  100,  578,   80,  578,  578,

      287,  342,  578,  342,  342,  342,  342,  342,  459,   78,
       80,  287,  457,  578,  578,  287,   78,  578,  578,  287,
      578,  331,  578,  456,  100,  343,   80,  578,  343,  578,
      344,  100,  578,   80,  352,  352,  352,  352,  354,  354,
      354,  354,  354,  578,  216,  578,  469,  276,  327,  356,
      216,  357,  357,  357,  357,  357,  216,  578,  327,  578,
      216,  578,  578,  276,  463,  463,  463,  463,  463,  327,
      276,  356,  578,  357,  357,  357,  357,  357,  359,  578,
      360,  360,  360,  360,  360,  464,  464,  464,  464,  464,
      359,  578,  360,  360,  360,  360,  360,  362,  578,  363,

      363,  363,  363,  363,  465,  465,  465,  465,  465,  362,
      578,  363,  363,  363,  363,  363,  216,  578,  216,  216,
      467,  578,  216,  578,  216,  216,  578,  578,  216,  471,
      216,  216,  216,  470,  216,  216,  472,  216,  216,  473,
      216,  578,  578,  216,  216,  578,  216,  578,  474,  216,
      216,  578,  216,  216,  216,  216,  216,  475,  477,  578,
      216,  216,  478,  216,  476,  578,  216,  216,  216,  216,
      578,  216,  216,  578,  216,  216,  216,  216,  578,  216,
      216,  578,  578,  216,  216,  578,  216,  479,  480,  216,
      578,  216,  216,  216,  216,  376,  578,  216,  216,  216,

      216,  578,  216,  216,  481,  216,  216,  216,  482,  578,
      216,  216,  578,  216,  216,  216,  216,  483,  578,  216,
      216,  216,  216,  578,  216,  216,  578,  216,  216,  216,
      578,  578,  216,  216,  216,  216,  484,  216,  485,  578,
      216,  216,  578,  487,  578,  578,  216,  216,  486,  216,
      216,  216,  216,  488,  216,  216,  578,  578,  216,  216,
      216,  216,  490,  578,  216,  578,  216,  216,  216,  489,
      216,  491,  245,  216,  245,  578,  492,  216,  245,  245,
      493,  245,  578,  494,  245,  245,  245,  245,  245,  578,
      245,  245,  245,  245,  578,  245,  578,  245,  245,  245,

      578,  578,   78,  578,  245,  245,  578,  495,  245,  496,
      497,  245,  245,  498,  245,  245,  578,  100,  245,   80,
      245,  245,  578,  578,  245,  578,  245,  245,  245,  245,
      245,  500,  499,  245,  502,  245,  245,  245,  501,  578,
      578,  245,  245,  503,  245,  245,  578,  245,  245,  578,
      245,  578,  245,  245,  578,  245,  245,  578,  578,  245,
      245,  245,  245,  245,  505,  504,  578,  245,  245,  245,
      245,  245,  578,  404,  245,  245,  245,  245,  245,  578,
      506,  245,  245,  245,  507,  245,  245,  578,  578,  245,
      245,  245,  508,  245,  578,  578,  245,  245,  245,  578,

      245,  578,  578,  245,  245,  245,  578,  245,  578,  578,
      245,  245,  245,  245,  245,  578,  510,  245,  245,  245,
      509,  245,  578,  578,  245,  245,  511,  512,  245,  245,
      245,  513,  245,  245,  578,  578,  245,   78,  245,  245,
      578,   78,  245,  245,  245,   78,  245,  514,  245,  245,
      515,   78,  100,  578,   80,  245,  100,   78,   80,  578,
      100,  245,   80,  578,  578,  245,  100,   78,   80,  420,
       78,   78,  100,  578,   80,  578,  578,   78,  331,  420,
       78,  578,  100,   78,   80,  100,  100,   80,   80,   78,
      420,  578,  100,  331,   80,  100,   78,   80,  100,  578,

       80,  516,  331,  578,  100,  578,   80,   78,  578,  421,
      578,  100,   78,   80,  578,  421,  331,   78,  578,  421,
      331,  331,  100,  331,   80,  421,  578,  100,  421,   80,
      421,  517,  100,   78,   80,  578,  421,  578,  421,  578,
      578,  518,  437,  518,   78,  578,  578,  578,  100,  421,
       80,  519,   78,  578,  421,  520,   78,   78,  521,  100,
       78,   80,  518,  518,   78,   78,  578,  100,   78,   80,
      522,  100,  100,   80,   80,  100,   78,   80,  578,  100,
      100,   80,   80,  100,  523,   80,   78,  578,  525,  526,
      578,  100,  527,   80,  523,  578,  528,   78,  525,  526,

      578,  100,  527,   80,  578,  523,  528,  421,  578,  525,
      526,  578,  100,  527,   80,  578,  578,  528,  421,  342,
      342,  342,  342,  463,  463,  463,  463,  463,  464,  464,
      464,  464,  464,  578,  578,  539,  326,   78,  578,  421,
      540,   78,  578,  465,  465,  465,  465,  465,  539,   78,
      542,  578,  100,  540,   80,  541,  100,  216,   80,  577,
      577,  577,  577,  216,  100,  578,   80,  578,  541,  216,
      529,  578,  530,  216,  531,  532,  216,  578,  216,  533,
      534,  535,  216,  536,  544,  578,  578,  543,  216,  537,
      216,  216,  216,  216,  216,  546,  216,  216,  331,  216,

      331,  545,  216,  216,  216,  216,  578,  216,  216,  216,
      216,  578,  216,  547,  578,  216,  216,  216,  216,  578,
      216,  216,  578,  216,  216,  578,  216,  216,  578,  216,
      216,  216,  216,  216,  216,  216,  578,  216,  216,  578,
      578,  216,  216,  216,  216,  578,  549,  216,  578,  216,
      216,  216,  548,  216,  550,  216,  216,  216,  216,  578,
      216,  216,  578,  216,  216,  578,  216,  216,  578,  216,
      216,  216,  216,  216,  216,  216,  578,  216,  216,  578,
      578,  216,  216,  216,  216,  578,  551,  216,  578,  216,
      216,  216,  490,  216,  578,  216,  216,  486,  216,  578,

      216,  216,  578,  216,  216,  578,  216,  216,  578,  216,
      216,  216,  216,  553,  552,  216,  578,  245,  216,  216,
      245,  578,  216,  245,  578,  245,  245,   78,  554,  245,
      557,  555,  245,  245,  245,  578,  245,  245,  578,  245,
      245,  245,  100,  578,   80,  245,  245,  245,  556,  578,
      245,  245,  245,  245,  578,  245,  578,  578,  245,  245,
      245,  245,  578,  245,  245,  578,  245,  245,  245,  558,
      578,  578,  245,  245,  245,  245,  245,  245,  578,  578,
      245,  245,  245,  578,  578,  578,  245,  245,  245,  578,
      245,  245,  578,  578,  245,  245,  245,  245,  245,  559,

      578,  245,  245,  245,  560,  578,  561,  245,  245,  245,
      245,  245,  245,  245,  578,  245,  245,  245,  245,  578,
      578,  245,  245,  245,  245,  578,  245,  245,  578,  245,
      245,  245,  245,  245,  245,  515,  578,  245,  245,  245,
      245,  562,  511,  245,  245,  245,  245,   78,  245,  245,
       78,  245,  245,  245,  245,  563,  245,  245,  578,   78,
      245,  578,  100,  245,   80,  100,  245,   80,   78,  245,
      245,   78,   78,  245,  100,  578,   80,  578,  564,   78,
       78,  578,  527,  100,   78,   80,  100,  100,   80,   80,
      578,  578,  527,   78,  100,  100,   80,   80,  578,  100,

      578,   80,   78,  527,  578,  565,  578,   78,  100,  578,
       80,  578,   78,  578,  578,  565,  578,  100,   78,   80,
      578,  565,  100,  565,   80,  578,  565,  100,  565,   80,
      565,  578,  216,  100,  216,   80,  578,  578,  216,  578,
      216,  565,  565,  565,  216,  578,  216,  565,  216,  565,
      216,  565,  567,  567,  578,  578,  568,  568,  568,  568,
      568,  578,  578,  578,  569,  569,  578,  565,  570,  570,
      570,  570,  570,  571,  571,  578,  216,  572,  572,  572,
      572,  572,  216,  216,  216,  216,  578,  573,  216,  216,
      216,  216,  216,  578,  578,  216,  216,  216,  216,  216,

      216,  216,  578,  216,  216,  216,  216,  578,  574,  216,
      216,  216,  216,  578,  216,  216,  578,  216,  216,  216,
      216,  216,  216,  245,  578,  245,  216,  578,  245,  245,
      578,  245,  216,  578,  245,  245,  216,  245,  578,  245,
      245,  245,  245,  245,  245,  245,  578,  575,  245,  245,
      245,  245,  578,  578,  245,  245,  245,  245,  245,  245,
      578,  245,  245,  245,  245,  245,  245,  576,   78,  245,
      245,  245,  245,  578,   78,  245,  245,  245,  245,  245,
      245,  245,  578,  100,  245,   80,  578,  578,  245,  100,
      578,   80,  568,  568,  568,  568,  568,  568,  568,  568,

      568,  568,  578,  578,  578,  578,  421,  578,  578,  578,
      287,  570,  570,  570,  570,  570,  421,  570,  570,  570,
      570,  570,  572,  572,  572,  572,  572,  421,  572,  572,
      572,  572,  572,  216,  216,  245,  245,  578,  578,  216,
      216,  245,  245,  578,  578,  216,  216,  245,  245,  216,
      216,  245,  245,   29,   29,   29,   29,   29,   29,   29,
       29,   74,   74,   74,  578,  578,  578,   74,   76,   76,
       76,   76,   76,   76,   76,   76,   79,  578,  578,   79,
       79,  578,   79,   99,  578,  578,   99,   99,   99,   99,
      195,  195,  195,  195,  195,  195,  195,  195,  215,  578,

      578,  215,  215,  578,  215,  216,  578,  578,  216,  216,
      578,  216,  245,  578,  578,  245,  245,  245,  245,  339,
      578,  339,  340,  340,  578,  340,  340,  340,  340,  340,
      462,  578,  462,   21,  578,  578,  578,  578,  578,  578,
      578,  578,  578,  578,  578,  578,  578,  578,  578,  578,
      578,  578,  578,  578,  578,  578,  578,  578,  578,  578,
      578,  578,  578,  578,  578,  578,  578,  578,  578,  578,
      578,  578,  578,  578,  578,  578,  578,  578,  578,  578,
      578,  578,  578,  578,  578,  578,  578,  578,  578,  578,
      578,  578

    } ;

static const short int yy_chk[3393] =
    {   0,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        5,    5,    5,    5,    5,   51,   51,  195,  195,    1,
        1,    2,    2,    2,    2,    2,    2,    2,    2,    2,
        2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
        2,    6,    6,    6,    6,    6,  192,  192,  192,  192,
        2,    2,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,

        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        7,  538,   29,   63,  520,    8,  459,   31,    7,    7,
        7,    7,    7,    8,    8,    8,    8,    8,    9,   29,
       63,    9,   31,   35,   31,  440,  344,   41,    9,    9,
        9,    9,    9,    9,   23,   23,   63,   23,   35,  341,
       35,   42,   41,   23,   41,  340,    9,    9,  317,    9,
      315,    9,    9,  314,    9,   35,   42,    9,   42,  313,
       74,    9,   35,   78,    9,   52,   52,    9,   52,    9,
        9,   27,   41,   42,   52,   27,   42,   74,   41,   27,

       78,   27,   27,   27,   27,   27,   42,  447,   27,  311,
       27,   27,   27,   27,   27,   27,   27,   27,   27,  447,
      309,   27,   27,   27,   27,   27,   27,   27,   27,   27,
       27,   27,   27,   27,   27,   27,   27,   27,   27,   27,
       27,   27,   27,   27,   27,   27,   27,   27,   30,   79,
      196,  145,   30,   76,   75,   70,   30,   69,   30,   30,
       30,   30,   30,   30,   68,   30,   79,   30,   30,   30,
       30,   30,   30,   30,   30,   30,   53,   28,   30,   30,
       30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
       30,   30,   30,   30,   30,   30,   30,   30,   30,   30,

       30,   30,   30,   30,   30,   32,   54,   25,   36,   34,
       71,   71,   21,   71,   38,   20,   54,   43,  201,   71,
       32,  209,   32,   36,   34,   36,   34,   54,   40,   38,
       97,   38,   43,   44,   43,  201,   97,   32,  209,   32,
       34,   19,   97,   40,   45,   40,   97,   34,   44,   32,
       44,   34,   34,   36,   32,   33,   38,   61,   48,   45,
      308,   45,   36,   40,   44,   43,   18,   40,   44,   60,
       33,  316,   33,   48,   61,   48,  308,   40,   58,   45,
       50,   50,   50,   50,   50,   17,   60,  316,   33,   45,
       33,   33,   33,   33,   45,   58,   33,   33,   33,   33,

      215,   33,   48,   33,   33,   33,   61,   33,   37,   58,
      437,   58,   37,   16,   15,   60,   37,  215,   37,   37,
       37,   37,   37,   37,   12,   37,  437,   37,   37,   37,
       37,   37,   37,   37,   37,   37,   11,    0,   37,   37,
       37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
       37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
       37,   37,   37,   37,   37,   39,   39,   62,   39,   39,
       39,   39,    0,  310,   39,   39,   39,   39,   47,   39,
        0,   39,   39,   39,   62,   39,   46,   46,  310,   46,
       46,   46,   46,   47,    0,   47,   46,   46,   46,    0,

       46,    0,   46,   46,   46,   46,   46,   46,   57,   47,
        0,   49,   49,   49,   49,    0,   62,    0,   57,   57,
       57,   57,   59,   64,   65,   57,   47,   47,   49,   66,
      312,    0,   59,   59,   59,   59,    0,   99,    0,   59,
       64,   65,  441,    0,  312,  312,   66,   67,   67,   67,
       67,   67,   99,   67,   99,   49,  441,  441,   59,   64,
       81,   66,   82,    0,   81,    0,   82,  203,   81,   64,
       82,   64,  519,   65,   83,    0,  345,   81,   83,   82,
       81,   84,   83,    0,  203,   84,  519,  519,    0,   84,
       81,   83,   82,  345,    0,   85,    0,   86,   84,   85,

      203,   86,   87,   85,   83,   86,   87,  126,    0,   88,
       87,   84,   85,   88,   86,    0,   83,   88,    0,   87,
      118,    0,  126,   83,  126,   85,   88,   86,   86,    0,
       89,    0,   87,   85,   89,  118,   84,  118,   89,   88,
       85,   90,   86,    0,    0,   90,  126,   89,   88,   90,
       92,   88,    0,  118,   87,    0,   92,    0,   90,    0,
       89,   93,   92,   94,    0,   92,   92,   93,   96,   94,
       96,   90,   89,   93,   96,   94,   93,   93,    0,   94,
       96,   94,    0,  123,   96,   90,   91,  101,    0,    0,
       91,  101,    0,  102,   91,  101,  202,  102,  123,  112,

      123,  102,  101,   91,  101,  112,  113,  101,  102,  121,
      102,  112,  113,  202,  112,  112,   91,  101,  113,   91,
      205,  113,  113,  102,  121,   91,  121,  202,  206,  202,
      123,   91,    0,    0,  117,   91,   95,  205,   95,  103,
      117,   95,   95,  103,   95,  206,  117,  103,   95,   95,
      117,  121,   95,   95,  103,  104,  103,  121,    0,  104,
      105,    0,    0,  104,  105,    0,  205,    0,  105,  103,
      104,    0,  104,    0,  206,  105,  106,  105,  207,  107,
      106,  103,  119,  107,  106,  104,  120,  107,  103,    0,
      105,  106,    0,  106,  107,  207,  107,  119,  105,  119,

      108,  120,    0,  120,  108,  105,  106,  106,  108,  107,
      104,  207,  346,    0,    0,  108,  119,  108,  109,  110,
      120,  106,  109,  110,    0,    0,  109,  110,  351,  346,
      108,  107,    0,  109,  110,  109,  110,    0,  114,  108,
        0,  116,  108,  116,  114,  351,    0,  116,  109,  110,
      114,    0,  125,  116,  114,    0,  114,  116,  122,  127,
      109,    0,    0,  110,  111,  139,  208,  125,  111,  125,
        0,  129,  111,  122,  127,  122,  127,    0,  150,  111,
      139,  111,  139,  208,  132,    0,  129,  125,  129,  128,
        0,  122,    0,  150,  111,  150,  122,  111,    0,  132,

      122,  132,  125,  111,  128,  127,  128,  122,  130,  111,
      129,  139,  208,  111,  115,  132,  115,  349,  131,  115,
      115,    0,  115,  130,  128,  130,  115,  115,    0,  133,
      115,  115,  124,  131,  349,  131,  134,  135,  128,  128,
        0,  136,  460,  130,  133,  348,  133,  124,  349,  124,
        0,  134,  135,  134,  135,    0,  136,  137,  136,  460,
      131,  138,  348,  216,  133,  124,    0,  124,  124,  216,
      135,  124,  137,    0,  137,  216,  138,  141,  138,  216,
      166,  124,  124,  136,  142,  134,  135,  217,  143,  146,
      136,    0,  141,  348,  141,  166,  217,  166,  137,  142,

        0,  142,  217,  143,  146,  143,  146,    0,  217,  138,
      140,  140,  217,  140,  140,  140,  140,  166,  147,  148,
      140,  140,  140,    0,  140,  143,  140,  140,  140,  141,
      140,  146,  142,  147,  148,  147,  148,    0,  143,  144,
      144,  144,  144,    0,  144,  144,    0,  149,  151,  144,
      144,  144,  148,  144,  152,  153,  144,    0,  156,  144,
      144,  144,  149,  151,  149,  151,  147,  147,  148,  152,
      153,  152,  153,  156,  154,  156,  197,  197,    0,  197,
      155,    0,    0,  151,    0,  197,  157,    0,    0,  154,
      153,  154,  158,  152,  149,  155,  218,  155,  151,  159,

      156,  157,  218,  157,  153,  153,  160,  158,  218,  158,
      161,  162,  218,  154,  159,  155,  159,  157,  163,  164,
      154,  160,    0,  160,  165,  161,  162,  161,  162,  167,
      168,    0,  159,  163,  164,  163,  164,  160,    0,  165,
      158,  165,    0,  169,  167,  168,  167,  168,  159,  170,
      171,    0,    0,  162,  161,    0,  172,  165,  169,  162,
      169,  164,  168,    0,  170,  171,  170,  171,    0,  174,
      163,  172,  168,  172,  173,  167,  169,  176,  175,  167,
      170,    0,    0,  168,  174,    0,  174,    0,  177,  173,
      350,  173,  176,  175,  176,  175,    0,  178,  172,  171,

        0,  179,  174,  177,  172,  177,    0,  350,  173,  173,
      172,  175,  178,  180,  178,    0,  179,  173,  179,  181,
      182,    0,  173,  173,  176,    0,  183,  175,  180,  184,
      180,    0,  178,    0,  181,  182,  181,  182,  350,  185,
      179,  183,  186,  183,  184,    0,  184,  178,  180,  187,
      188,    0,    0,    0,  185,  182,  185,  186,  181,  186,
        0,  189,  180,  180,  187,  188,  187,  188,  183,  190,
      191,  185,    0,  277,  184,  186,  189,  199,  189,  199,
      187,    0,    0,  284,  190,  191,  190,  191,  277,    0,
      277,  186,  189,  194,  194,  194,  194,  194,  284,  188,

      284,  199,    0,    0,  199,  219,  199,  210,  210,  210,
      210,  219,  191,    0,    0,  277,  191,  219,  284,  190,
      204,  219,    0,    0,  210,  211,  211,  211,  211,  211,
      204,  204,  204,  204,    0,  212,  212,  204,  212,  212,
      212,  212,  212,  213,  213,    0,  213,  213,  213,  213,
      213,  210,    0,  204,    0,  282,    0,  214,  214,  204,
      214,  214,  214,  214,  214,  220,  221,    0,  221,  204,
      282,  220,  282,  222,  221,    0,    0,  220,    0,  222,
      221,  220,  220,  222,  221,  222,  223,    0,  224,  222,
        0,  282,  223,  225,  224,  225,    0,    0,  223,  225,

      224,  226,  223,  223,  224,  225,  224,  226,  227,  225,
      226,    0,    0,  226,  227,  228,  229,  226,    0,    0,
      227,  228,  229,  230,  227,    0,    0,  228,  229,  230,
      231,  228,  229,  229,    0,  230,  231,  232,  233,  230,
        0,  231,  231,  232,  233,  461,  231,    0,  232,  232,
      233,  234,  235,  232,  233,  234,    0,  234,  235,    0,
      233,    0,  461,  234,  235,    0,    0,  234,  235,  236,
      238,  236,  237,    0,    0,    0,  238,  236,  237,  239,
        0,    0,  238,  236,  237,  239,  238,  236,  237,  237,
      239,  239,  240,  461,    0,  239,    0,  241,  240,  241,

        0,  243,    0,    0,  240,  241,    0,  243,  240,    0,
      242,  241,  242,  243,  244,  241,    0,  243,  242,  245,
      244,  247,  243,  246,  242,  245,  244,  247,  242,  244,
      244,  245,  246,  247,  248,  245,    0,  247,  246,  249,
      248,    0,    0,    0,  246,  249,  248,  251,  246,    0,
      248,  249,  250,  251,  250,  249,  249,  251,    0,  251,
      250,  252,    0,  251,    0,    0,  250,  252,  253,  254,
      250,  254,    0,  252,  253,  254,    0,  252,  252,    0,
      253,  254,  255,  256,  253,  254,  253,    0,  255,  256,
      257,  255,    0,    0,  255,  256,  257,  258,  255,  256,

        0,    0,  257,  258,  259,    0,  257,    0,    0,  258,
      259,  260,    0,  258,  258,    0,  259,  260,  261,  262,
      259,    0,  260,  260,  261,  262,    0,  260,    0,  261,
      261,  262,  263,  264,  261,  262,  263,    0,  263,  264,
        0,  262,    0,    0,  263,  264,    0,    0,  263,  264,
      265,  267,  265,  266,    0,    0,    0,  267,  265,  266,
      268,    0,    0,  267,  265,  266,  268,  267,  265,  266,
      266,  268,  268,  269,    0,    0,  268,    0,  270,  269,
      270,    0,  272,    0,    0,  269,  270,  274,  272,  269,
        0,  271,  270,  271,  272,  273,  270,  275,  272,  271,

      276,  273,  274,  272,  274,  271,    0,  273,  278,  271,
      273,  273,  275,  279,  275,  276,  280,  276,    0,  281,
      283,  274,    0,  278,    0,  278,  285,    0,  279,  275,
      279,  280,  276,  280,  281,  283,  281,  283,    0,  275,
      286,  285,  276,  285,  275,  278,    0,    0,  287,    0,
      275,  275,  288,  276,  280,  286,    0,  286,  280,  289,
        0,  279,  290,  287,  283,  287,  291,  288,    0,  288,
      292,    0,    0,  281,  289,  285,  289,  290,  291,  290,
      293,  291,  292,  291,  295,  292,    0,  292,  294,    0,
      286,    0,  293,    0,    0,  293,  296,  293,  291,  295,

      297,  295,  288,  294,  290,  294,  364,    0,  291,  289,
      298,  296,  293,  296,  364,  297,    0,  297,    0,  291,
      364,  294,  293,  293,  299,  298,  364,  298,  300,  301,
      364,  295,    0,  293,    0,  297,  302,  294,    0,  299,
      303,  299,    0,  300,  301,  300,  301,    0,  304,  298,
      297,  302,    0,  302,    0,  303,    0,  303,    0,  299,
      305,    0,    0,  304,  301,  304,    0,  300,  306,  318,
        0,  303,  319,  299,  299,  305,  320,  305,  302,  321,
        0,  304,    0,  306,  318,  306,  318,  319,  323,  319,
        0,  320,    0,  320,  321,    0,  321,  304,  324,  325,

      306,    0,  326,  323,  318,  323,    0,    0,    0,  305,
      306,  305,  327,  324,  325,  324,  325,  326,  328,  326,
      321,  306,    0,    0,  320,  322,    0,  327,  329,  327,
        0,  325,  324,  328,  330,  328,    0,  323,  366,  323,
      322,  325,  322,  329,  366,  329,    0,  331,    0,  330,
      366,  330,  325,  325,  366,    0,    0,  322,  322,  328,
      322,    0,  331,  329,  331,    0,  332,  322,  322,  333,
      337,  322,  322,  335,  322,    0,  330,  336,  322,    0,
      338,  332,  330,  332,  333,  337,  333,  337,  335,    0,
      335,    0,  336,  347,  336,  338,    0,  338,    0,    0,

      332,  342,    0,  342,  343,  343,  343,  343,  347,  420,
      347,  337,  342,    0,    0,  333,  334,    0,    0,  335,
        0,  338,    0,  336,  420,  342,  420,    0,  342,    0,
      342,  334,    0,  334,  352,  352,  352,  352,  354,  354,
      354,  354,  354,    0,  367,    0,  367,  334,  334,  355,
      367,  355,  355,  355,  355,  355,  367,    0,  334,    0,
      367,    0,    0,  334,  356,  356,  356,  356,  356,  334,
      334,  357,    0,  357,  357,  357,  357,  357,  358,    0,
      358,  358,  358,  358,  358,  359,  359,  359,  359,  359,
      360,    0,  360,  360,  360,  360,  360,  361,    0,  361,

      361,  361,  361,  361,  362,  362,  362,  362,  362,  363,
        0,  363,  363,  363,  363,  363,  365,    0,  368,  369,
      365,    0,  365,    0,  368,  369,    0,    0,  365,  369,
      368,  369,  365,  368,  368,  369,  370,  372,  370,  371,
      371,    0,    0,  372,  370,    0,  371,    0,  372,  372,
      370,    0,  371,  372,  370,  373,  371,  373,  374,    0,
      374,  373,  375,  375,  373,    0,  374,  373,  376,  375,
        0,  373,  374,    0,  376,  375,  374,  377,    0,  375,
      376,    0,    0,  377,  376,    0,  378,  377,  378,  377,
        0,  379,  378,  377,  380,  379,    0,  379,  378,  381,

      380,    0,  378,  379,  380,  381,  380,  379,  382,    0,
      380,  381,    0,  384,  382,  381,  383,  383,    0,  384,
      382,  385,  383,    0,  382,  384,    0,  385,  383,  384,
        0,    0,  383,  385,  386,  387,  385,  385,  386,    0,
      386,  387,    0,  388,    0,    0,  386,  387,  387,  388,
      386,  387,  390,  389,  389,  388,    0,    0,  390,  388,
      389,  391,  391,    0,  390,    0,  389,  391,  390,  390,
      389,  392,  393,  391,  394,    0,  393,  391,  393,  392,
      394,  395,    0,  395,  393,  392,  394,  395,  393,    0,
      394,  392,  396,  395,    0,  392,    0,  395,  396,  397,

        0,    0,  421,    0,  396,  397,    0,  396,  396,  397,
      398,  397,  398,  399,  399,  397,    0,  421,  398,  421,
      399,  400,    0,    0,  398,    0,  399,  400,  398,  401,
      399,  401,  400,  400,  402,  401,  402,  400,  401,    0,
        0,  401,  402,  403,  403,  401,    0,  404,  402,    0,
      403,    0,  402,  404,    0,  405,  403,    0,    0,  404,
      403,  405,  406,  404,  406,  405,    0,  405,  406,  407,
      408,  405,    0,  407,  406,  407,  408,  409,  406,    0,
      408,  407,  408,  409,  410,  407,  408,    0,    0,  409,
      410,  411,  411,  409,    0,    0,  410,  411,  412,    0,

      410,    0,    0,  411,  412,  413,    0,  411,    0,    0,
      412,  413,  414,  415,  412,    0,  414,  413,  414,  415,
      413,  413,    0,    0,  414,  415,  415,  416,  414,  415,
      418,  417,  417,  416,    0,    0,  418,  422,  417,  416,
        0,  423,  418,  416,  417,  424,  418,  418,  417,  419,
      419,  425,  422,    0,  422,  419,  423,  426,  423,    0,
      424,  419,  424,    0,    0,  419,  425,  427,  425,  422,
      428,  429,  426,    0,  426,    0,    0,  431,  423,  422,
      430,    0,  427,  432,  427,  428,  429,  428,  429,  434,
      422,    0,  431,  424,  431,  430,  433,  430,  432,    0,

      432,  425,  426,    0,  434,    0,  434,  435,    0,  431,
        0,  433,  436,  433,    0,  432,  427,  444,    0,  431,
      428,  429,  435,  430,  435,  432,    0,  436,  433,  436,
      431,  434,  444,  443,  444,    0,  432,    0,  433,    0,
        0,  442,  442,  442,  445,    0,    0,    0,  443,  433,
      443,  442,  446,    0,  436,  442,  448,  449,  442,  445,
      450,  445,  442,  442,  451,  452,    0,  446,  454,  446,
      443,  448,  449,  448,  449,  450,  453,  450,    0,  451,
      452,  451,  452,  454,  446,  454,  455,    0,  448,  449,
        0,  453,  450,  453,  446,    0,  451,  517,  448,  449,

        0,  455,  450,  455,    0,  446,  451,  452,    0,  448,
      449,    0,  517,  450,  517,    0,    0,  451,  453,  458,
      458,  458,  458,  463,  463,  463,  463,  463,  464,  464,
      464,  464,  464,    0,    0,  463,  455,  456,    0,  517,
      464,  523,    0,  465,  465,  465,  465,  465,  463,  516,
      466,    0,  456,  464,  456,  465,  523,  466,  523,  566,
      566,  566,  566,  466,  516,    0,  516,    0,  465,  466,
      456,    0,  456,  466,  456,  456,  467,    0,  468,  456,
      456,  456,  467,  456,  468,    0,    0,  467,  467,  456,
      468,  469,  467,  470,  468,  472,  471,  469,  516,  470,

      516,  468,  471,  469,  473,  470,    0,  469,  471,  470,
      473,    0,  471,  473,    0,  474,  473,  472,  475,    0,
      473,  474,    0,  472,  475,    0,  476,  474,    0,  472,
      475,  474,  476,  472,  475,  477,    0,  478,  476,    0,
        0,  477,  476,  478,  479,    0,  478,  477,    0,  478,
      479,  477,  477,  478,  479,  480,  479,  481,  482,    0,
      479,  480,    0,  481,  482,    0,  483,  480,    0,  481,
      482,  480,  483,  481,  482,  484,    0,  485,  483,    0,
        0,  484,  483,  485,  486,    0,  485,  484,    0,  485,
      486,  484,  484,  485,    0,  487,  486,  487,  488,    0,

      486,  487,    0,  489,  488,    0,  490,  487,    0,  489,
      488,  487,  490,  491,  488,  489,    0,  492,  490,  489,
      491,    0,  490,  492,    0,  493,  491,  525,  492,  492,
      497,  493,  491,  492,  494,    0,  491,  493,    0,  495,
      494,  493,  525,    0,  525,  495,  494,  496,  493,    0,
      494,  495,  497,  496,    0,  495,    0,    0,  497,  496,
      498,  499,    0,  496,  497,    0,  498,  499,  497,  498,
        0,    0,  498,  499,  500,  501,  498,  499,    0,    0,
      500,  501,  502,    0,    0,    0,  500,  501,  502,    0,
      500,  501,    0,    0,  502,  503,  504,  505,  502,  502,

        0,  503,  504,  505,  503,    0,  504,  503,  504,  505,
      506,  503,  504,  505,    0,  507,  506,  508,  509,    0,
        0,  507,  506,  508,  509,    0,  506,  507,    0,  508,
      509,  507,  510,  508,  509,  509,    0,  511,  510,  513,
      512,  510,  512,  511,  510,  513,  512,  522,  510,  511,
      524,  513,  512,  511,  514,  513,  512,  515,    0,  526,
      514,    0,  522,  515,  522,  524,  514,  524,  527,  515,
      514,  528,  529,  515,  526,    0,  526,    0,  522,  530,
      531,    0,  524,  527,  532,  527,  528,  529,  528,  529,
        0,    0,  524,  533,  530,  531,  530,  531,    0,  532,

        0,  532,  534,  524,    0,  529,    0,  536,  533,    0,
      533,    0,  535,    0,    0,  531,    0,  534,  537,  534,
        0,  529,  536,  532,  536,    0,  530,  535,  533,  535,
      531,    0,  542,  537,  543,  537,    0,    0,  542,    0,
      543,  534,  533,  533,  542,    0,  543,  535,  542,  536,
      543,  537,  539,  539,    0,    0,  539,  539,  539,  539,
      539,    0,    0,    0,  540,  540,    0,  537,  540,  540,
      540,  540,  540,  541,  541,    0,  544,  541,  541,  541,
      541,  541,  544,  545,  546,  547,    0,  547,  544,  545,
      546,  547,  544,    0,    0,  545,  546,  547,  548,  545,

      546,  547,    0,  549,  548,  550,  551,    0,  551,  549,
      548,  550,  551,    0,  548,  549,    0,  550,  551,  549,
      552,  550,  551,  553,    0,  554,  552,    0,  555,  553,
        0,  554,  552,    0,  555,  553,  552,  554,    0,  553,
      555,  554,  556,  557,  555,  558,    0,  558,  556,  557,
      559,  558,    0,    0,  556,  557,  559,  558,  556,  557,
        0,  558,  559,  560,  561,  562,  559,  562,  564,  560,
      561,  562,  563,    0,  565,  560,  561,  562,  563,  560,
      561,  562,    0,  564,  563,  564,    0,    0,  563,  565,
        0,  565,  567,  567,  567,  567,  567,  568,  568,  568,

      568,  568,    0,    0,    0,    0,  565,    0,    0,    0,
      564,  569,  569,  569,  569,  569,  565,  570,  570,  570,
      570,  570,  571,  571,  571,  571,  571,  565,  572,  572,
      572,  572,  572,  573,  574,  575,  576,    0,    0,  573,
      574,  575,  576,    0,    0,  573,  574,  575,  576,  573,
      574,  575,  576,  579,  579,  579,  579,  579,  579,  579,
      579,  580,  580,  580,    0,    0,    0,  580,  581,  581,
      581,  581,  581,  581,  581,  581,  582,    0,    0,  582,
      582,    0,  582,  583,    0,    0,  583,  583,  583,  583,
      584,  584,  584,  584,  584,  584,  584,  584,  585,    0,

        0,  585,  585,    0,  585,  586,    0,    0,  586,  586,
        0,  586,  587,    0,    0,  587,  587,  587,  587,  588,
        0,  588,  589,  589,    0,  589,  589,  589,  589,  589,
      590,    0,  590,  578,  578,  578,  578,  578,  578,  578,
      578,  578,  578,  578,  578,  578,  578,  578,  578,  578,
      578,  578,  578,  578,  578,  578,  578,  578,  578,  578,
      578,  578,  578,  578,  578,  578,  578,  578,  578,  578,
      578,  578,  578,  578,  578,  578,  578,  578,  578,  578,
      578,  578,  578,  578,  578,  578,  578,  578,  578,  578,
      578,  578

    } ;

static yy_state_type yy_last_accepting_state;
static char *yy_last_accepting_cpos;

/* The intent behind this definition is that it'll catch
 * any uses of REJECT which flex missed.
 */
#define REJECT reject_used_but_not_detected
#define yymore() yymore_used_but_not_detected
#define YY_MORE_ADJ 0
char *yytext;
# line 1 "mit2mot.lex"
/* Jetzt kommen die Lex-Macros:
S: steht fuer die Groesse bei den Assemblerbefehlen (b=byte; i=int; l=long)
cc: steht fuer die Conditions bei Sprungbefehlen ohne f (False) und
ohne t (True).
CC: steht fuer die Conditions bei Sprungbefehlen: (cc=carry clear; ...)
FLP: steht fuer eine Fliesskommazahl wie z. B. 0r3.45e-3
*/
/* - - - - - - - -  */
# line 17 "mit2mot.lex"

#include "mit2mot.config.h"
#include <math.h>
#include "mit2mot.tab.h"
  /* in "MitToMot.tab.h" stehen die Werte der Token, die bison erzeugt hat */

static int yyStartFlag = 1;
extern FILE *fd_out;

/* ---------------Fliesskommakonstantenbehandlung------------------------------------------------ */


/* Um Tests, Speicher, Nerven u. s. w. zu sparen, wird ein und das selbe
 * Modul 'floats.c' von beiden Konvertern benutzt.
 * Die einzige notwendige Anpassung wird durch Definition des Makros
 * 'MPRINT' vorgenommen.  	*/

#define MPRINT cprintf
#include "floats.c"

/* --------------------------------------------------------------------------------------------- */


static void constr( char *start, char *suffix );
/* Es wird das Befehlswort "start" verbunden mit der Endung des
   Befehlswortes "suffix" */

static short lexline_len,lexline_n;
static char lexbuffer[512];

#define Save(string) for(lexline_n=0;lexline_n<yyleng;(lexline_len<511)?lexline_len++:lexline_len)lexbuffer[lexline_len]=string[lexline_n++];lexbuffer[lexline_len]=0

static char *ReadComment( char *CommentStart, char *CommentEnd );
  /* liest ein Kommentar ein, bis eine Zeichenkette wie bei CommentEnd 
     auftaucht; Am Anfang steht der String von CommentStart */

static struct t_LabelList { char label[LABELSIZE];
			    int flags;
			    struct t_LabelList *next; } *LabelList=NULL;

static void InsertLabel( char *label, int define );
/* Fuegt ein Label in die Label-Liste ein.
   label Zeigt auf die Zeichenkette des Labels. Die Zeichenkette endet mit '\0' oder mit ':'
   Falls define = 0, so wird das Label als (noch) nicht definiert eingetragen
   Falls define = 1, so wird das Label als definiert in die Labelliste eingetragen */

static long CalculateNumber( char *string, int base );
/* formt den angegebenen "string" in eine Long Zahl um. "base" gibt die Basis des Zahlensystems an. */

static char *CalculateEqu( char *string );
/* Ergibt das Label der Zuweisung durch: "    label =" */

static char *CalculateString( char *string );
/* Wandelt die Zeichkette des string um in eine Liste von NUM */

static char *konvert_registerlist( char *string );

static int SetDirective = 0, AscizDirective = 0;
static short counter_CalcString;


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

#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 = getc( yyin ); \
		result = c == EOF ? 0 : 1; \
		buf[0] = (char) c; \
		} \
	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

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

# line 79 "mit2mot.lex"


	if ( yy_init )
		{
#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_init_buffer( yy_current_buffer, yyin );
		else
			yy_current_buffer =
				yy_create_buffer( yyin, YY_BUF_SIZE );

		yy_load_buffer_state();

		yy_init = 0;
		}

	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_match:
		do
			{
			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
			if ( yy_accept[yy_current_state] )
				{
				yy_last_accepting_state = yy_current_state;
				yy_last_accepting_cpos = yy_cp;
				}
			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
				{
				yy_current_state = (int) yy_def[yy_current_state];
				if ( yy_current_state >= 579 )
					yy_c = yy_meta[(unsigned int) yy_c];
				}
			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
			++yy_cp;
			}
		while ( yy_base[yy_current_state] != 3334 );

yy_find_action:
		yy_act = yy_accept[yy_current_state];

		YY_DO_BEFORE_ACTION;


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


		switch ( yy_act )
	{ /* beginning of action switch */
			case 0: /* must back up */
			/* undo the effects of YY_DO_BEFORE_ACTION */
			*yy_cp = yy_hold_char;
			yy_cp = yy_last_accepting_cpos;
			yy_current_state = yy_last_accepting_state;
			goto yy_find_action;

case 1:
YY_USER_ACTION
# line 80 "mit2mot.lex"
{ BEGIN Command; return RETURN; }
	YY_BREAK
case 2:
YY_USER_ACTION
# line 81 "mit2mot.lex"
{ yylval.string=cprintf("%s",yytext);
		  	  Save(yytext); return BLANK;


/* Jetzt kommen die Regeln fuer Zahlen.
   Sie werden direkt von Mit- zu Motorola umgewandelt */

               /* Zuerst die FLP's */ }
	YY_BREAK
case 3:
YY_USER_ACTION
# line 89 "mit2mot.lex"
{
               yylval.string = float_transform( yytext+2 , FLP_SINGLE );
               return NUM; /* FLP single precision */ }
	YY_BREAK
case 4:
YY_USER_ACTION
# line 92 "mit2mot.lex"
{
               yylval.string = float_transform( yytext+2 , FLP_DOUBLE );
               return NUM; /* FLP double precision */ }
	YY_BREAK
case 5:
YY_USER_ACTION
# line 95 "mit2mot.lex"
{
               yylval.string = float_transform( yytext+2 , FLP_EXTENDED );
               return NUM; /* FLP extended precision */
               /* Nun normale Zahlen */ }
	YY_BREAK
case 6:
YY_USER_ACTION
# line 99 "mit2mot.lex"
{
               if ( yytext[1]==0 ) {
                 yylval.number.string=cprintf( yytext ); 
	       }
               else {
                 yylval.number.string=cprintf("@%s",yytext+1);
	       }
	       yylval.number.value=CalculateNumber(yytext+1,8);
               Save(yytext); return NUM; /* Octalzahlen */ }
	YY_BREAK
case 7:
YY_USER_ACTION
# line 108 "mit2mot.lex"
{
               yylval.number.string=cprintf("%s",yytext);
               yylval.number.value=CalculateNumber(yytext,10);
	       Save(yytext); return NUM; /* Dezimalzahlen */ }
	YY_BREAK
case 8:
YY_USER_ACTION
# line 112 "mit2mot.lex"
{
               yylval.number.string=cprintf("$%s",yytext+2);
               yylval.number.value=CalculateNumber(yytext+2,16);
	       Save(yytext); return NUM; /* Hexadeziamlzahlen */ }
	YY_BREAK
case 9:
YY_USER_ACTION
# line 116 "mit2mot.lex"
{
               Save(yytext);
               yylval.number.string=
	         cprintf("%s", konvert_registerlist(yytext));
	       return NUM; }
	YY_BREAK
case 10:
YY_USER_ACTION
# line 121 "mit2mot.lex"
{
               yylval.number.string=cprintf("Immediate in Movem");
	       yylval.number.value=CalculateNumber(yytext+1,8);
               Save(yytext); return IMED_ADDRESS; }
	YY_BREAK
case 11:
YY_USER_ACTION
# line 125 "mit2mot.lex"
{
               yylval.number.string=cprintf("Immediate in Movem");
	       yylval.number.value=CalculateNumber(yytext+1,10);
               Save(yytext); return IMED_ADDRESS; }
	YY_BREAK
case 12:
YY_USER_ACTION
# line 129 "mit2mot.lex"
{
               yylval.number.string=cprintf("Immediate in Movem");
               yylval.number.value=CalculateNumber(yytext+3,16);
               Save(yytext); return IMED_ADDRESS;

/* Regeln fuer die Register */
}
	YY_BREAK
case 13:
YY_USER_ACTION
# line 136 "mit2mot.lex"
{
		  yylval.string=cprintf("%s",yytext);
		  Setmc68881();
		  Save(yytext); return REG; }
	YY_BREAK
case 14:
YY_USER_ACTION
# line 140 "mit2mot.lex"
{
                  yylval.string=cprintf("%s",yytext);
		  Setmc68010();
		  Save(yytext); return REG; }
	YY_BREAK
case 15:
YY_USER_ACTION
# line 144 "mit2mot.lex"
{
                  yylval.string="vbr";
                  Setmc68010();
                  Save(yytext); return REG; }
	YY_BREAK
case 16:
YY_USER_ACTION
# line 148 "mit2mot.lex"
{
                  yylval.string=cprintf("%s",yytext);
		  Setmc68020();
		  Save(yytext); return REG; }
	YY_BREAK
case 17:
YY_USER_ACTION
# line 152 "mit2mot.lex"
{
		  yylval.string=cprintf("%sr",yytext);
                  Setmc68020();
                  Save(yytext); return REG; }
	YY_BREAK
case 18:
YY_USER_ACTION
# line 156 "mit2mot.lex"
{
                  yylval.string=cprintf("%s",yytext);
		  Save(yytext); return REG;


/* Regeln fuer die Direktieven. Es wird die zu Mit entsprechende
   Motorola Regel als ergebnis uebergeben. Es gibt drei Arten
   von Direktiven:
      DIR: die allgemeine Direktive. Eine Umwandlung kann durch
           Ersetzen der Direktive stattfinden.
      DIR_FILL: Eine spezielles Token fuer die .fill Direktive.
           Die weiter Behandlung wird "bison"(c) ueberlassen.
           Die Umwandlung sieht etwa so aus:
             fill expr,1,expr  ->  dcb.b expr,expr
             fill expr,2,expr  ->  dcb.w expr,expr
             fill expr,4,expr  ->  dcb.l expr,expr
      DIR_ALIGN: Ein spezielles Token fuer die .align Direktive.
           Die weitere Behandlung wird "bison"(c) ueberlassen.
           Die Umwadnlung sieht etwa so aus:
             .align expr       -> cnop 0,expr
      DIR_SET: Eine spezielle Behandlung der .set Directive.
           Die Umwandlung sieht etwa so aus:
             .set label,value  ->  \nlabel equ value */
}
	YY_BREAK
case 19:
YY_USER_ACTION
# line 180 "mit2mot.lex"
{ yylval.string="dc.b";	BEGIN FLP_single; Save(yytext); return DIR; }
	YY_BREAK
case 20:
YY_USER_ACTION
# line 181 "mit2mot.lex"
{ yylval.string="dc.b";	BEGIN FLP_single; Save(yytext); return DIR; }
	YY_BREAK
case 21:
YY_USER_ACTION
# line 182 "mit2mot.lex"
{ yylval.string="dc.b";	BEGIN FLP_double; Save(yytext); return DIR; }
	YY_BREAK
case 22:
YY_USER_ACTION
# line 183 "mit2mot.lex"
{ yylval.string="dc.b";	BEGIN FLP_extended; Save(yytext); return DIR; }
	YY_BREAK
case 23:
YY_USER_ACTION
# line 184 "mit2mot.lex"
{ yylval.string="dcb";	BEGIN StringsExprs; Save(yytext); return DIR_FILL; }
	YY_BREAK
case 24:
YY_USER_ACTION
# line 185 "mit2mot.lex"
{ yylval.string="cnop 0,"; BEGIN Expression; Save(yytext); return DIR_ALIGN; }
	YY_BREAK
case 25:
YY_USER_ACTION
# line 186 "mit2mot.lex"
{ yylval.string="\n__org:	dcb.b -__orgl+";
				  Save(yytext); return DIR; }
	YY_BREAK
case 26:
YY_USER_ACTION
# line 188 "mit2mot.lex"
{ yylval.string="equ";
				  BEGIN Expression; Save(yytext);
			 	  SetDirective=1; return DIR_SET; }
	YY_BREAK
case 27:
YY_USER_ACTION
# line 191 "mit2mot.lex"
{ yylval.string="equ";
				  BEGIN Expression; Save(yytext);
				  SetDirective=1; return DIR_SET; }
	YY_BREAK
case 28:
YY_USER_ACTION
# line 194 "mit2mot.lex"
{ yylval.string="global";
				  BEGIN Expression; Save(yytext);
				  SetDirective=1; return DIR; }
	YY_BREAK
case 29:
YY_USER_ACTION
# line 197 "mit2mot.lex"
{ yylval.string="bss";
				  BEGIN Expression; Save(yytext);
				  SetDirective=1; return DIR; }
	YY_BREAK
case 30:
YY_USER_ACTION
# line 200 "mit2mot.lex"
{
				  yylval.string=cprintf("\n%s\tequ",CalculateEqu(yytext));
				  BEGIN Expression; Save(yytext);
                                  return DIR; }
	YY_BREAK
case 31:
YY_USER_ACTION
# line 204 "mit2mot.lex"
{ yylval.string="end";          BEGIN Expression; Save(yytext); return DIR; }
	YY_BREAK
case 32:
YY_USER_ACTION
# line 205 "mit2mot.lex"
{ yylval.string="even";		BEGIN Expression; Save(yytext); return DIR; }
	YY_BREAK
case 33:
YY_USER_ACTION
# line 206 "mit2mot.lex"
{ yylval.string="dcb.b";	BEGIN StringsExprs; Save(yytext); return DIR; }
	YY_BREAK
case 34:
YY_USER_ACTION
# line 207 "mit2mot.lex"
{ yylval.string="cseg";         BEGIN Expression; Save(yytext); return DIR; }
	YY_BREAK
case 35:
YY_USER_ACTION
# line 208 "mit2mot.lex"
{ yylval.string="dseg";         BEGIN Expression; Save(yytext); return DIR; }
	YY_BREAK
case 36:
YY_USER_ACTION
# line 209 "mit2mot.lex"
{ yylval.string="dc.b";         BEGIN StringsExprs; Save(yytext); return DIR; }
	YY_BREAK
case 37:
YY_USER_ACTION
# line 210 "mit2mot.lex"
{ yylval.string="dc.b"; AscizDirective=1; BEGIN StringsExprs; Save(yytext); return DIR; }
	YY_BREAK
case 38:
YY_USER_ACTION
# line 211 "mit2mot.lex"
{ yylval.string="include";	BEGIN Expression; Save(yytext); return DIR; }
	YY_BREAK
case 39:
YY_USER_ACTION
# line 212 "mit2mot.lex"
{ yylval.string=";.line";       BEGIN Expression; Save(yytext); return DIR; }
	YY_BREAK
case 40:
YY_USER_ACTION
# line 213 "mit2mot.lex"
{ yylval.string="dc.b";		BEGIN StringsExprs; Save(yytext); return DIR; }
	YY_BREAK
case 41:
YY_USER_ACTION
# line 214 "mit2mot.lex"
{ yylval.string="dc.w";		BEGIN Expression; Save(yytext); return DIR; }
	YY_BREAK
case 42:
YY_USER_ACTION
# line 215 "mit2mot.lex"
{ yylval.string="dc.l";		BEGIN Expression; Save(yytext); return DIR; }
	YY_BREAK
case 43:
YY_USER_ACTION
# line 216 "mit2mot.lex"
{ yylval.string="xdef";		BEGIN Expression; Save(yytext); return DIR; }
	YY_BREAK
case 44:
YY_USER_ACTION
# line 217 "mit2mot.lex"
{ yylval.string=";.proc";
			  BEGIN Expression; Save(yytext); return DIR; }
	YY_BREAK
case 45:
YY_USER_ACTION
# line 219 "mit2mot.lex"
{ yylval.string=";.stabs";
			  BEGIN Expression; Save(yytext); return DIR; }
	YY_BREAK
case 46:
YY_USER_ACTION
# line 222 "mit2mot.lex"
{ yylval.string=yytext;
			  Save(yytext); return FEHLER; 


/* Es wird unterschieden zwischen Mnemos mit und ohne
   Operanden. Dies ist notwendig, um zu unterscheiden, ob ein
   "#" ein Kommentar oder eine Immediate-Addresse einleitet.
   Bei Mnemos ohne Operanden (Nullstellige Befehle) ist
   die Startconition 0 notwendig, ansonsten muss die Start-
   kondition <Address> gesetzt werden. */
/* Regeln fuer die Mnemos Gruppe 1:
   Die Mnenmos werden ohne Aenderung uebernommen */
}
	YY_BREAK
case 47:
YY_USER_ACTION
# line 235 "mit2mot.lex"
{
			  yylval.string=cprintf("%s",yytext);
			  BEGIN Address; Save(yytext); return MNEMO;	}
	YY_BREAK
case 48:
YY_USER_ACTION
# line 238 "mit2mot.lex"
{
                          yylval.string=cprintf("%s",yytext);
                          BEGIN 0; Save(yytext); return MNEMO; }
	YY_BREAK
case 49:
YY_USER_ACTION
# line 241 "mit2mot.lex"
{
                          Setmc68010();
                          yylval.string=cprintf("%s",yytext);
                          BEGIN Address; Save(yytext); return MNEMO; }
	YY_BREAK
case 50:
YY_USER_ACTION
# line 245 "mit2mot.lex"
{
                          Setmc68020(); 
                          yylval.string=cprintf("%s",yytext);
			  BEGIN Address; Save(yytext); return MNEMO; }
	YY_BREAK
case 51:
YY_USER_ACTION
# line 249 "mit2mot.lex"
{
                          Setmc68020();
                          yylval.string=cprintf("%s",yytext);
                          BEGIN 0; Save(yytext); return MNEMO; 

/* Regeln fuer die Mnemos Gruppe 2:
   Die Mnemos haben zusaetzlich eine Endung fuer die groesse (l=long; w=word..)
   Ansonsten bleiben die Mnemos aber gleich. Eine Umwandlung von Mit zu
   Motorola findet statt, ueber constr(menmo,endung); */
}
	YY_BREAK
case 52:
YY_USER_ACTION
# line 259 "mit2mot.lex"
{
                          constr(yytext,yytext); BEGIN Address; Save(yytext); return MNEMO; }
	YY_BREAK
case 53:
YY_USER_ACTION
# line 261 "mit2mot.lex"
{
			  constr(yytext,yytext); BEGIN Address; Save(yytext); return MNEMO; }
	YY_BREAK
case 54:
YY_USER_ACTION
# line 263 "mit2mot.lex"
{
			  Setmc68020();
			  constr(yytext,yytext); BEGIN Address;
			  Save(yytext); return MNEMO;


/* Regeln fuer die Mnemos Gruppe 3:
   Diese Mnemos passen nicht auf eine der anderen Gruppen. Die Veraenderung
   des Mnemos von Mit zu Motorola findet expliziet statt. */
}
	YY_BREAK
case 55:
YY_USER_ACTION
# line 273 "mit2mot.lex"
{ yylval.string="bra";
				  BEGIN Address; Save(yytext); return MNEMO; }
	YY_BREAK
case 56:
YY_USER_ACTION
# line 275 "mit2mot.lex"
{ yylval.string="jsr";
				  BEGIN Address; Save(yytext); return MNEMO; }
	YY_BREAK
case 57:
YY_USER_ACTION
# line 277 "mit2mot.lex"
{
                                  yylval.string=cprintf("%s.w",yytext);
				  BEGIN Address; Save(yytext); return MNEMO; }
	YY_BREAK
case 58:
YY_USER_ACTION
# line 280 "mit2mot.lex"
{ constr("moveX",yytext);
				  BEGIN Address; Save(yytext); return MNEMO; }
	YY_BREAK
case 59:
YY_USER_ACTION
# line 282 "mit2mot.lex"
{ Setmc68010();
				  constr("movesX",yytext);	
				  BEGIN Address; Save(yytext); return MNEMO; }
	YY_BREAK
case 60:
YY_USER_ACTION
# line 285 "mit2mot.lex"
{ constr("movemX",yytext);	
				  BEGIN MovemAddress; Save(yytext);
				  return MNEMO; }
	YY_BREAK
case 61:
YY_USER_ACTION
# line 288 "mit2mot.lex"
{ constr("movepX",yytext);	
				  BEGIN Address; Save(yytext); return MNEMO; }
	YY_BREAK
case 62:
YY_USER_ACTION
# line 290 "mit2mot.lex"
{ constr("movecX",yytext);
                                  BEGIN Address; Save(yytext); return MNEMO; }
	YY_BREAK
case 63:
YY_USER_ACTION
# line 292 "mit2mot.lex"
{ constr("moveqX",yytext);	
				  BEGIN Address; Save(yytext); return MNEMO;


/* Regeln fuer die Mnemos Gruppe 4:
   speziell fur die jump or branch Befehle. Der erste Buchstabe
   aendert sich nur. */
}
	YY_BREAK
case 64:
YY_USER_ACTION
# line 300 "mit2mot.lex"
{ yylval.string=cprintf("b%s",yytext+1);
				  BEGIN Address; Save(yytext); return MNEMO; 

/* Regeln fuer die Mnemos Gruppe 5:
   die mc68881 (Fliesskommaarithmetik) Instruktionen werden behandelt. */
}
	YY_BREAK
case 65:
YY_USER_ACTION
# line 306 "mit2mot.lex"
{ Setmc68881();
				  yylval.string=cprintf("%s",yytext);
				  BEGIN Address; Save(yytext); return MNEMO; }
	YY_BREAK
case 66:
YY_USER_ACTION
# line 309 "mit2mot.lex"
{ Setmc68881();
				  constr( "fmoveX",yytext );
                                  BEGIN Address; Save(yytext);
				  return MNEMO; }
	YY_BREAK
case 67:
YY_USER_ACTION
# line 313 "mit2mot.lex"
{ Setmc68881();
				  constr(yytext,yytext);
				  BEGIN Address; Save(yytext);
				  return MNEMO; }
	YY_BREAK
case 68:
YY_USER_ACTION
# line 317 "mit2mot.lex"
{ Setmc68881();
				  yylval.string=cprintf("%s",yytext);
                                  BEGIN Address; Save(yytext);
				  return MNEMO;

/* Spezielle Regeln folgen nun: 
      - Groesse bei speziellen Addressierungsarten
      - Identifiers
      - C-Aehnliche Kommentare
      - Strings
      - alle sonstigen einzelnen Zeichen (default-Regel) */
}
	YY_BREAK
case 69:
YY_USER_ACTION
# line 329 "mit2mot.lex"
{ yylval.string=cprintf("%s",yytext+1);
       		          			  Save(yytext); return SIZE; }
	YY_BREAK
case 70:
YY_USER_ACTION
# line 331 "mit2mot.lex"
{ yylval.string=cprintf("%s",yytext);
						  InsertLabel(yytext,1);
						  Save(yytext); return LABEL; }
	YY_BREAK
case 71:
YY_USER_ACTION
# line 334 "mit2mot.lex"
{ yylval.string=cprintf("%s",yytext);
						  InsertLabel(yytext,SetDirective);
						  SetDirective = 0;
				 	  	  Save(yytext); return IDENT; }
	YY_BREAK
case 72:
YY_USER_ACTION
# line 338 "mit2mot.lex"
{ yylval.string=ReadComment(yytext,"*/");
		 	  return COMMENT; }
	YY_BREAK
case 73:
YY_USER_ACTION
# line 340 "mit2mot.lex"
{ Save(yytext); return '('; }
	YY_BREAK
case 74:
YY_USER_ACTION
# line 341 "mit2mot.lex"
{ Save(yytext); return ')'; }
	YY_BREAK
case 75:
YY_USER_ACTION
# line 342 "mit2mot.lex"
{ yylval.string="\t";
			  Save(yytext); unput('#'); lexline_len--;
			  return BLANK; }
	YY_BREAK
case 76:
YY_USER_ACTION
# line 345 "mit2mot.lex"
{ Save(yytext); return '#'; }
	YY_BREAK
case 77:
YY_USER_ACTION
# line 346 "mit2mot.lex"
{ yylval.string=ReadComment(yytext,"\n");
			  unput('\n');
			  BEGIN Command; 
			  return COMMENT; }
	YY_BREAK
case 78:
YY_USER_ACTION
# line 350 "mit2mot.lex"
{ Save(yytext); yylval.string=CalculateString(yytext+1);	
			  return NUM; }
	YY_BREAK
case 79:
YY_USER_ACTION
# line 352 "mit2mot.lex"
{ Save(yytext); yylval.string=CalculateString(yytext+1);	
			  return NUM; }
	YY_BREAK
case 80:
YY_USER_ACTION
# line 354 "mit2mot.lex"
{ Save(yytext); return *yytext; }
	YY_BREAK
case 81:
YY_USER_ACTION
# line 355 "mit2mot.lex"
ECHO;
	YY_BREAK
case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(Command):
case YY_STATE_EOF(Expression):
case YY_STATE_EOF(StringsExprs):
case YY_STATE_EOF(Address):
case YY_STATE_EOF(MovemAddress):
case YY_STATE_EOF(String):
case YY_STATE_EOF(FLP_single):
case YY_STATE_EOF(FLP_double):
case YY_STATE_EOF(FLP_extended):
	yyterminate();

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

		/* Undo the effects of YY_DO_BEFORE_ACTION. */
		*yy_cp = yy_hold_char;

		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 - 1; /* copy prev. char, too */
	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 singled characater, 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 = yy_c_buf_p - yytext_ptr;

	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_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 = yy_c_buf_p - b->yy_ch_buf;

			b->yy_buf_size *= 2;
			b->yy_ch_buf = (char *)
				yy_flex_realloc( (void *) b->yy_ch_buf,
						 b->yy_buf_size );

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

	if ( yy_n_chars == 0 )
		{
		if ( number_to_move - YY_MORE_ADJ == 1 )
			{
			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 begins at the second character in yy_ch_buf; the first
	 * character is the one which preceded it before reading in the latest
	 * buffer; it needs to be kept around in case it's a newline, so
	 * yy_get_previous_state() will have with '^' rules active.
	 */

	yytext_ptr = &yy_current_buffer->yy_ch_buf[1];

	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;

	for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
		{
		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
		if ( yy_accept[yy_current_state] )
			{
			yy_last_accepting_state = yy_current_state;
			yy_last_accepting_cpos = yy_cp;
			}
		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
			{
			yy_current_state = (int) yy_def[yy_current_state];
			if ( yy_current_state >= 579 )
				yy_c = yy_meta[(unsigned int) yy_c];
			}
		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
		}

	return yy_current_state;
	}


/* yy_try_NUL_trans - try to make a transition on the NUL character
 *
 * synopsis
 *	next_state = yy_try_NUL_trans( current_state );
 */

#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 char *yy_cp = yy_c_buf_p;

	register YY_CHAR yy_c = 1;
	if ( yy_accept[yy_current_state] )
		{
		yy_last_accepting_state = yy_current_state;
		yy_last_accepting_cpos = yy_cp;
		}
	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
		{
		yy_current_state = (int) yy_def[yy_current_state];
		if ( yy_current_state >= 579 )
			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 == 578);

	return yy_is_jam ? 0 : yy_current_state;
	}


#ifdef YY_USE_PROTOS
static void yyunput( int c, register char *yy_bp )
#else
static 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 += dest - source;
		yy_bp += dest - source;
		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" );
		}

	if ( yy_cp > yy_bp && yy_cp[-1] == '\n' )
		yy_cp[-2] = '\n';

	*--yy_cp = (char) c;


	/* Note: the formal parameter *must* be called "yy_bp" for this
	 * macro to now work correctly.
	 */
	YY_DO_BEFORE_ACTION; /* set up yytext again */
	}


#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 */
			yytext_ptr = yy_c_buf_p;
			++yy_c_buf_p;

			switch ( yy_get_next_buffer() )
				{
				case EOB_ACT_END_OF_FILE:
					{
					if ( yywrap() )
						{
						yy_c_buf_p =
						yytext_ptr + YY_MORE_ADJ;
						return EOF;
						}

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

				case EOB_ACT_CONTINUE_SCAN:
					yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
					break;

				case EOB_ACT_LAST_MATCH:
#ifdef __cplusplus
					YY_FATAL_ERROR(
					"unexpected last match in yyinput()" );
#else
					YY_FATAL_ERROR(
					"unexpected last match in input()" );
#endif
				}
			}
		}

	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;

	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()" );

	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 == yy_current_buffer )
		yy_current_buffer = (YY_BUFFER_STATE) 0;

	yy_flex_free( (void *) b->yy_ch_buf );
	yy_flex_free( (void *) b );
	}


#ifdef YY_USE_PROTOS
void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
#else
void yy_init_buffer( b, file )
YY_BUFFER_STATE b;
FILE *file;
#endif
	{
	b->yy_input_file = file;

	/* We put in the '\n' and start reading from [1] so that an
	 * initial match-at-newline will be true.
	 */

	b->yy_ch_buf[0] = '\n';
	b->yy_n_chars = 1;

	/* 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[1] = YY_END_OF_BUFFER_CHAR;
	b->yy_ch_buf[2] = YY_END_OF_BUFFER_CHAR;

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

	b->yy_is_interactive = file ? isatty( fileno(file) ) : 0;

	b->yy_fill_buffer = 1;

	b->yy_buffer_status = YY_BUFFER_NEW;
	}


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


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


static int yy_top_state()
	{
	return yy_start_stack[yy_start_stack_ptr - 1];
	}


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



/* 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_MORE_ADJ; \
		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, const char *s2, int n )
#else
static void yy_flex_strncpy( s1, s2, n )
char *s1;
const char *s2;
int n;
#endif
	{
	register int i;
	for ( i = 0; i < n; ++i )
		s1[i] = s2[i];
	}
#endif


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

#ifdef YY_USE_PROTOS
static void *yy_flex_realloc( void *ptr, unsigned int size )
#else
static void *yy_flex_realloc( ptr, size )
void *ptr;
unsigned int size;
#endif
	{
	return (void *) realloc( 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 );
	}
# line 355 "mit2mot.lex"


static void constr( char *start, char *suffix )
/* Es wird das Befehlswort "start" verbunden mit der Endung des
   Befehlswortes "suffix" */
{
char buffer[32];
int i,j;
  for (i=0; start[i]!=0; i++) buffer[i]=start[i];
  for (j=0; suffix[j]!=0; j++);
  buffer[i-1]='.';
  buffer[i]=suffix[j-1];
  buffer[i+1]=0;
  yylval.string=cprintf("%s",buffer);
}

void lexnextline()
  /* Loescht den Buffer, der durch das MACRO "Save" gefuellt wird
   - geschieht nach jeder Zeile */
  { 
  SetDirective = AscizDirective = 0;
  lexline_len=0;
  counter_CalcString=0;
  }

char *lexline()
  /* ergibt die gebufferten Zeile */
  {
  lexbuffer[lexline_len]=0;
  return lexbuffer;
  }

static char *ReadComment( char *CommentStart, char *CommentEnd )
  /* liest ein Kommentar ein, bis eine Zeichenkette wie bei CommentEnd
     auftaucht; Am Anfang steht der String von CommentStart.
     Der Kommntar wird mit fuehrenden Semikolons auf die
     Standardausgabe geschrieben. */
  {
  short i,n;
  int zeich;
  char *return_value;

  /*printf( "CommentStart = >%s<  CommentEnd = >%s<\n",
	CommentStart, CommentEnd ) ;*/

  return_value=cprintfappendinit();
  for (i=0; CommentStart[i]==' ' || CommentStart[i]=='\t'; i++)
    cprintf_char( CommentStart[i] ); /* Leerzeichen zuerst raus */
  cprintf_char( ';' ); /* Kommentar einleiten in Motorola */
  /* Fall 1: Kommentareinleitung "#" soll kopiert werden.
     Fall 2: statt der Kommentareinleitung "/*" Leerzeichen schreiben. */
  if (strcmp("#",CommentStart+i)==0)
    for(; CommentStart[i]!=0; )
      cprintf_char(CommentStart[i++]);
  else
    for(; CommentStart[i]!=0; i++)
      cprintf_char(' ');
  for(i=0; CommentEnd[i]!=0; )
    {
    zeich = input();
    if (zeich==EOF) 
      {
      fprintf(stderr,
	"ERROR (fatal one): Kommentar endet nicht.\n");
      exit(1);
      }
    if (CommentEnd[i]==zeich) i++;
    else
	{
        for (n=0; n<i; n++)
	  cprintf_char( CommentEnd[n] );
	i=0;
	cprintf_char( zeich );
	if (zeich=='\n')
	  cprintf_char(';');
	}
    }
  /* falls man das Kommentarende ausgeben moechte:
     for (i=0; CommentEnd[i]!=0; i++) cprintf_char(CommentEnd[i]); */
  cprintf_char( (char)0 );
  return return_value;
  }

void InsertLabel( char *label, int flags )
{
struct t_LabelList **pt_LabelList, *neu;
short n,dif=-1;
  pt_LabelList = &LabelList;
  while (*pt_LabelList!=NULL)
    { 
    for (n=0; (  dif = (label[n]==':' ? 0 : label[n]) - (*pt_LabelList)->label[n]  )==0 &&
              (*pt_LabelList)->label[n]!=0; ) n++;
    if (dif==0) (*pt_LabelList)->flags |= flags;
    if (dif<=0) break;
    pt_LabelList = &( (*pt_LabelList)->next );
    }
  if (dif!=0)
    {
    neu = (struct t_LabelList *) calloc( sizeof( *neu ), 1 );
    if (neu!=0) 
      {
      for (n=0; label[n]!=':' && label[n]!=0 && n<LABELSIZE-1; n++)
        neu->label[n]=label[n];
      neu->label[n] = 0;
      neu->flags = flags;
      neu->next = *pt_LabelList;
      *pt_LabelList = neu;
      }
    }
}

void PrintLabels( void )
{
struct t_LabelList *next;
short n;
  n=0;
  fprintf(fd_out,";Global:\n");
  for (next=LabelList; next!=NULL; next=next->next)
    if (next->flags==0) fprintf(fd_out,"\txref %s\n",next->label);
  for (next=LabelList; next!=NULL; next=next->next)
    {
    if (next->flags!=0)
      {
      if (n==0) fprintf(fd_out,";Local\t");
      n++;
      fprintf(fd_out,"%s ",next->label);
      if (n>5) { n=0; fprintf(fd_out,"\n"); }
      }
    }
  if (n>0) fprintf(fd_out,"\n");
}

long CalculateNumber( char *string, int base )
{
long value;
short number;
number=0;
for (value=0; *string!=0; string++)
	{
	if (*string>='0' && *string<='9') number = *string-'0';
	else if (*string>='a' && *string<='f') number = *string-'a'+10;
	else if (*string>='A' && *string<='F') number = *string-'A'+10;
        else
          {
          fprintf(stderr,"Programmfehler 1 in CalculateNumber()\n");
          break;
          }
        if (number>base)
          {
          fprintf(stderr,"Programmfehler 2 in CalculateNumber()\n");
          break;
          }
	value=value*base+number;
	}
return value;
}

char *CalculateEqu( char *string )
{
char *end;
  while (*string==' ' || *string=='\t') string++;
  end=string;
  while (*end!=' ' && *end!='\t' && *end!='=') end++;
  *end=0;
  InsertLabel( string, 1);
  return string;
}

char *CalculateString( char *string )
{
char *result,*komma;
int value;
  result=cprintfappendinit();
  komma="";
  while (*string!='"')
    {
    if (*string!='\\') cprintfappend("%s%d",komma,(int)*string++);
    else 
      {
      string++;
      value = 0;
      while (*string>='0' && *string<='7')
        value = value * 8 + *string++ - '0';
      cprintfappend("%s%d",komma,value);
      }
    komma=",";
    if (counter_CalcString++ >=12)
      { komma="\n\tdc.b\t"; counter_CalcString=0; }
    }
  if (AscizDirective!=0) cprintfappend("%s0",komma);
  return result;
}

char *konvert_registerlist( char *string )
{
char *start;
start=string;
while (*string!=0 && *string!='>')
  string++;
*string=0;
return start+2;
}
