
/*  A Bison parser, made from c-parse.y  */

#define	IDENTIFIER	258
#define	TYPENAME	259
#define	SCSPEC	260
#define	TYPESPEC	261
#define	TYPE_QUAL	262
#define	CONSTANT	263
#define	STRING	264
#define	ELLIPSIS	265
#define	SIZEOF	266
#define	ENUM	267
#define	STRUCT	268
#define	UNION	269
#define	IF	270
#define	ELSE	271
#define	WHILE	272
#define	DO	273
#define	FOR	274
#define	SWITCH	275
#define	CASE	276
#define	DEFAULT	277
#define	BREAK	278
#define	CONTINUE	279
#define	RETURN	280
#define	GOTO	281
#define	ASM	282
#define	TYPEOF	283
#define	ALIGNOF	284
#define	ATTRIBUTE	285
#define	ASSIGN	286
#define	OROR	287
#define	ANDAND	288
#define	EQCOMPARE	289
#define	ARITHCOMPARE	290
#define	LSHIFT	291
#define	RSHIFT	292
#define	UNARY	293
#define	PLUSPLUS	294
#define	MINUSMINUS	295
#define	HYPERUNARY	296
#define	POINTSAT	297



#include "config.h"
#include "tree.h"
#include "input.h"
#include "c-parse.h"
#include "c-tree.h"
#include "flags.h"
#define MACRO
#include <stdio.h>
#undef MACRO
#ifdef __human68k__
#include <setjmp.h>
#include <ctype.h>
//#include <error.h>
#include <stdlib.h>
#define __DOS_INLINE__
//#include <sys/dos.h>
#else
#include <errno.h>
#endif

#ifndef errno
extern int errno;
#endif

#ifndef NATIVE_68000
#define _dos_open open
#define _dos_close close
#define _dos_read close
#define _dos_write write
#define _dos_create creat
#endif

void yyerror ();

/* Cause the `yydebug' variable to be defined.  */
#ifndef __human68k__
#define YYDEBUG 1
#else
#define YYDEBUG 0
#endif


typedef union {long itype; tree ttype; enum tree_code code; } YYSTYPE;


/* the declaration found for the last IDENTIFIER token read in.
   yylex must look this up to detect typedefs, which get token type TYPENAME,
   so it is left around in case the identifier is not a typedef but is
   used in a context which makes it a reference to a variable.  */
static tree lastiddecl;

static tree make_pointer_declarator ();
static tree combine_strings ();
static void reinit_parse_for_function ();

/* List of types and structure classes of the current declaration.  */
tree current_declspecs;

/* Stack of saved values of current_declspecs.  */
tree declspec_stack;

int undeclared_variable_notice;	/* 1 if we explained undeclared var errors.  */

static int yylex ();

#ifndef YYLTYPE
typedef
  struct yyltype
    {
      int timestamp;
      int first_line;
      int first_column;
      int last_line;
      int last_column;
      char *text;
   }
  yyltype;

#define YYLTYPE yyltype
#endif

#include <stdio.h>

#ifndef __STDC__
#define const
#endif


#define	YYFINAL		515
#define	YYFLAG		-32768
#define	YYNTBASE	65

#define YYTRANSLATE(x) ((unsigned)(x) <= 297 ? yytranslate[x] : 172)

static const char yytranslate[] = {     0,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,    61,     2,     2,     2,    48,    39,     2,    55,
    57,    46,    44,    62,    45,    54,    47,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,    34,    58,     2,
    32,     2,    33,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    56,     2,    64,    38,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,    63,    37,    59,    60,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     1,     2,     3,     4,     5,
     6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    26,    27,    28,    29,    30,    31,    35,    36,    40,    41,
    42,    43,    49,    50,    51,    52,    53
};

#if YYDEBUG != 0
static const short yyrline[] = { 0,
   177,   178,   185,   187,   187,   188,   190,   192,   193,   200,
   206,   208,   210,   212,   214,   215,   216,   221,   227,   229,
   230,   232,   237,   239,   240,   242,   247,   249,   250,   254,
   256,   259,   261,   263,   265,   267,   269,   271,   275,   279,
   282,   285,   288,   292,   294,   296,   298,   311,   313,   346,
   350,   352,   355,   369,   371,   373,   375,   377,   379,   381,
   383,   385,   387,   389,   391,   393,   395,   397,   399,   401,
   403,   407,   456,   457,   459,   461,   463,   471,   483,   485,
   487,   489,   491,   493,   498,   500,   504,   506,   509,   511,
   512,   513,   520,   527,   532,   536,   538,   546,   549,   553,
   555,   557,   565,   568,   570,   572,   581,   584,   588,   590,
   598,   599,   600,   601,   605,   613,   614,   615,   618,   620,
   623,   625,   628,   631,   639,   644,   645,   650,   655,   656,
   662,   665,   670,   671,   675,   679,   687,   693,   695,   699,
   701,   703,   709,   712,   719,   721,   726,   729,   734,   736,
   738,   740,   748,   754,   756,   758,   760,   766,   772,   774,
   776,   778,   780,   783,   788,   792,   795,   797,   799,   801,
   804,   806,   809,   812,   815,   818,   822,   824,   827,   829,
   833,   836,   841,   843,   845,   859,   865,   870,   874,   879,
   880,   884,   887,   889,   898,   900,   905,   908,   912,   915,
   919,   922,   925,   928,   932,   935,   939,   943,   945,   947,
   949,   951,   953,   955,   957,   965,   967,   968,   971,   973,
   976,   979,   988,   991,   994,   996,  1000,  1004,  1010,  1015,
  1017,  1019,  1029,  1032,  1033,  1035,  1039,  1043,  1044,  1048,
  1050,  1055,  1061,  1065,  1071,  1077,  1084,  1086,  1118,  1118,
  1129,  1129,  1133,  1137,  1140,  1143,  1148,  1155,  1162,  1169,
  1175,  1181,  1181,  1186,  1191,  1197,  1200,  1205,  1207,  1210,
  1212,  1216,  1221,  1224,  1230,  1234,  1241,  1245,  1250,  1252,
  1254,  1258,  1260,  1266,  1268,  1270,  1274,  1277,  1283,  1286,
  1288,  1290,  1292,  1297,  1300
};

static const char * const yytname[] = {     0,
"error","$illegal.","IDENTIFIER","TYPENAME","SCSPEC","TYPESPEC","TYPE_QUAL","CONSTANT","STRING","ELLIPSIS",
"SIZEOF","ENUM","STRUCT","UNION","IF","ELSE","WHILE","DO","FOR","SWITCH",
"CASE","DEFAULT","BREAK","CONTINUE","RETURN","GOTO","ASM","TYPEOF","ALIGNOF","ATTRIBUTE",
"ASSIGN","'='","'?'","':'","OROR","ANDAND","'|'","'^'","'&'","EQCOMPARE",
"ARITHCOMPARE","LSHIFT","RSHIFT","'+'","'-'","'*'","'/'","'%'","UNARY","PLUSPLUS",
"MINUSMINUS","HYPERUNARY","POINTSAT","'.'","'('","'['","')'","';'","'}'","'~'",
"'!'","','","'{'","']'","program"
};
#endif

static const short yyr1[] = {     0,
    65,    65,    67,    66,    68,    66,    69,    69,    69,    70,
    70,    70,    70,    70,    70,    70,    70,    72,    73,    71,
    71,    74,    75,    71,    71,    76,    77,    71,    71,    78,
    78,    79,    79,    79,    79,    79,    79,    79,    80,    81,
    81,    82,    82,    83,    83,    83,    83,    83,    83,    83,
    84,    84,    84,    85,    85,    85,    85,    85,    85,    85,
    85,    85,    85,    85,    85,    85,    85,    85,    85,    85,
    85,    86,    86,    86,    86,    86,    87,    86,    86,    86,
    86,    86,    86,    86,    88,    88,    89,    89,    90,    90,
    90,    90,    91,    92,    92,    92,    92,    93,    93,    94,
    94,    94,    95,    95,    95,    95,    96,    96,    97,    97,
    98,    98,    98,    98,    98,    99,    99,    99,   100,   100,
   101,   101,   102,   102,   104,   103,   103,   106,   105,   105,
   107,   107,   108,   108,   109,   109,   109,   110,   110,   110,
   110,   110,   111,   111,   112,   112,   113,   113,   113,   113,
   113,   113,   114,   114,   114,   114,   114,   115,   115,   115,
   115,   115,   115,   117,   116,   116,   116,   118,   116,   116,
   116,   119,   116,   120,   116,   116,   121,   121,   122,   122,
   123,   123,   124,   124,   124,   125,   125,   125,   126,   126,
   126,   127,   127,   127,   128,   128,   129,   129,   130,   130,
   131,   131,   132,   132,   133,   133,   134,   134,   134,   134,
   134,   134,   134,   134,   134,   135,   135,   135,   136,   136,
   137,   138,   139,   139,   140,   140,   140,   140,   142,   141,
   143,   143,   144,   143,   143,   145,   146,   143,   147,   148,
   143,   149,   150,   151,   143,   152,   143,   153,   143,   154,
   143,   143,   143,   143,   143,   143,   143,   143,   143,   143,
   155,   143,   143,   156,   156,   157,   157,   158,   158,   159,
   159,   160,   161,   161,   163,   162,   165,   164,   166,   166,
   166,   167,   167,   168,   168,   168,   169,   169,   170,   170,
   170,   170,   170,   171,   171
};

static const short yyr2[] = {     0,
     0,     1,     0,     2,     0,     3,     1,     1,     5,     3,
     4,     4,     2,     2,     2,     2,     1,     0,     0,     7,
     4,     0,     0,     7,     4,     0,     0,     6,     3,     1,
     1,     1,     1,     1,     1,     1,     1,     1,     1,     0,
     1,     1,     3,     1,     2,     2,     2,     4,     2,     4,
     1,     4,     7,     1,     3,     3,     3,     3,     3,     3,
     3,     3,     3,     3,     3,     3,     3,     3,     5,     3,
     3,     1,     1,     1,     3,     3,     0,     4,     4,     4,
     3,     3,     2,     2,     1,     2,     0,     1,     1,     1,
     2,     2,     0,     4,     4,     2,     2,     2,     3,     0,
     2,     2,     1,     1,     2,     2,     2,     3,     0,     2,
     1,     1,     1,     4,     4,     1,     1,     1,     1,     3,
     1,     3,     0,     4,     0,     6,     3,     0,     6,     3,
     0,     6,     1,     3,     1,     4,     4,     1,     2,     3,
     4,     1,     1,     3,     1,     1,     3,     3,     4,     3,
     3,     1,     3,     4,     3,     3,     1,     3,     3,     3,
     4,     3,     1,     0,     6,     4,     2,     0,     6,     4,
     2,     0,     7,     0,     6,     2,     0,     1,     0,     1,
     1,     2,     0,     3,     2,     3,     3,     1,     0,     1,
     3,     2,     4,     2,     1,     3,     1,     3,     2,     2,
     0,     1,     1,     2,     0,     2,     3,     3,     2,     3,
     4,     3,     2,     3,     2,     1,     2,     2,     0,     1,
     2,     0,     1,     2,     2,     5,     4,     4,     0,     6,
     1,     2,     0,     4,     1,     0,     0,     7,     0,     0,
     9,     0,     0,     0,    12,     0,     6,     0,     5,     0,
     4,     2,     2,     2,     3,     6,     8,    10,    12,     3,
     0,     4,     1,     0,     1,     0,     1,     0,     1,     1,
     3,     4,     1,     3,     0,     2,     0,     2,     2,     2,
     2,     2,     2,     0,     1,     3,     1,     3,     2,     2,
     2,     2,     2,     1,     3
};

static const short yydefact[] = {     3,
     5,     0,     0,     0,   113,   104,   111,   103,     0,     0,
     0,     0,     0,    17,     4,     8,     7,     0,    93,    93,
   100,   112,     6,    15,    16,    30,    31,   174,   176,   183,
   167,   183,   171,     0,     0,   163,   205,     0,     0,   121,
     0,    14,     0,   106,   105,    13,     0,   100,    98,     0,
   172,     0,     0,   164,     0,   168,    85,     0,    72,   203,
    73,     0,     0,    32,    34,    33,     0,    35,    36,     0,
    37,    38,     0,     0,    39,    51,    54,    42,    44,    74,
   201,   109,     0,   201,     0,     0,    10,     0,    29,     0,
   277,     0,     0,   131,   152,   205,     0,     0,   119,     0,
   145,   146,     0,     0,    99,   102,   116,   117,   101,   118,
   197,   179,   195,     0,   166,   188,   185,    93,   182,    93,
   183,   170,   183,    86,     0,     0,    47,     0,    49,    45,
     0,     0,     0,     0,    46,   114,     0,     0,     0,   266,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,     0,    83,    84,     0,     0,    40,     0,
   205,   275,     0,   199,   202,   107,   115,   204,   109,   200,
   206,   160,   159,   122,   123,     0,   158,     0,   162,     0,
     0,    27,    88,     0,    93,    93,    90,     0,   130,     0,
     0,    12,     0,    21,     0,   131,   277,     0,    11,    25,
     0,     0,   180,     0,   179,   189,   184,   189,     0,     0,
     9,     0,     0,    76,    75,   222,     0,     0,    43,    71,
    70,   267,     0,    68,    67,    65,    66,    64,    63,    62,
    60,    61,    55,    56,    57,    58,    59,    82,    81,     0,
    41,     0,   209,     0,   213,     0,   215,     0,   275,     0,
   110,   108,     0,     0,   294,   201,   201,   278,     0,   285,
   287,     0,   161,   221,     0,    91,    92,    96,     0,    97,
     0,     0,   128,   151,   147,   120,    19,   127,   148,   150,
     0,    23,   198,   196,   175,     0,     0,   131,   186,   190,
   187,   165,   169,    48,    50,   225,     0,    78,     0,    52,
     0,    79,    80,   208,   207,     0,   276,     0,   214,   210,
   212,     0,   124,   281,   157,   205,   275,   289,   290,   291,
   205,   292,   293,   279,     0,   280,     0,     0,    28,   223,
     0,     0,   123,     0,     0,     0,   125,   149,     0,   173,
   194,     0,   192,     0,     0,    72,   113,     0,   236,   239,
     0,     0,     0,     0,     0,     0,     0,     0,   264,   263,
     0,     0,   219,     0,   231,   235,   216,   142,     0,   138,
   143,   177,    69,   283,   282,   211,   209,   277,     0,   209,
   286,   288,   295,   224,    94,    95,   135,     0,   133,   129,
    20,     0,    24,   131,   191,   227,     0,     0,     0,   266,
     0,     0,   250,   252,   253,   254,     0,     0,   265,     0,
   261,   232,     0,     0,   228,   218,   217,   233,   139,     0,
     0,     0,   156,   153,   155,     0,     0,     0,     0,   126,
   193,     0,     0,     0,     0,     0,   248,     0,   255,   260,
     0,     0,   226,     0,   140,     0,   144,    53,   154,     0,
     0,   132,   134,   229,     0,   240,   242,   246,     0,   251,
     0,   262,   234,   141,   136,   137,     0,   237,     0,   266,
     0,   249,   268,     0,   230,     0,     0,     0,   247,     0,
     0,   269,   270,   256,   238,     0,   243,     0,   268,     0,
     0,     0,   266,     0,     0,   257,   271,   241,     0,   272,
     0,     0,   244,   273,     0,   258,     0,     0,     0,   245,
   259,   274,     0,     0,     0
};

static const short yydefgoto[] = {   513,
     1,     2,     3,    15,    16,    17,   195,   336,   201,   339,
    93,   265,   361,    73,   362,   240,    75,    76,    77,    78,
    79,   133,    80,   182,   183,    18,   184,   185,    49,   186,
    81,   166,    21,   109,    98,    39,    94,    99,   392,    40,
   335,   189,   388,   389,   371,   372,   175,   101,   318,   102,
    22,   121,   123,   114,    50,   422,   204,    52,    53,   119,
   289,   290,   112,   113,    83,   164,    84,    85,   165,   364,
   414,   187,   297,   329,   365,   366,   467,   367,   444,   398,
   476,   399,   469,   470,   493,   507,   471,   459,   438,   442,
   410,   223,   481,   482,   483,   505,   245,   246,   177,   178,
   258,   307,   259,   260,   261,   262
};

static const short yypact[] = {    61,
    71,  1439,  1439,   210,-32768,-32768,-32768,-32768,    35,    37,
    39,    79,   109,-32768,-32768,-32768,-32768,    86,    36,   131,
-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,    53,-32768,
    63,-32768,    84,   163,  1292,-32768,-32768,    86,    19,-32768,
   731,-32768,   267,-32768,-32768,-32768,    86,-32768,   467,   338,
-32768,   116,   389,-32768,   122,-32768,-32768,    76,-32768,-32768,
-32768,  1359,  1372,-32768,-32768,-32768,  1426,-32768,-32768,   369,
-32768,-32768,  1426,   135,   158,-32768,-32768,  1495,   844,   227,
   124,-32768,   187,  1450,   273,   190,-32768,   267,-32768,   220,
-32768,   947,    51,   223,-32768,-32768,   267,    26,-32768,   932,
   306,   310,    29,   768,   467,-32768,-32768,-32768,-32768,-32768,
   245,   217,-32768,   338,-32768,-32768,-32768,-32768,   229,   515,
-32768,-32768,-32768,-32768,   240,   369,-32768,   369,-32768,-32768,
   247,   264,   239,   266,-32768,-32768,  1426,  1426,  1426,  1426,
  1426,  1426,  1426,  1426,  1426,  1426,  1426,  1426,  1426,  1426,
  1426,  1426,  1426,  1426,-32768,-32768,   338,   338,  1426,  1426,
-32768,   124,   970,-32768,   349,   154,-32768,-32768,-32768,-32768,
-32768,   310,-32768,-32768,   308,   163,-32768,   302,-32768,   261,
   287,-32768,   457,   487,   292,   260,-32768,   314,   325,    46,
   298,-32768,   267,-32768,    51,   223,-32768,  1015,-32768,-32768,
    51,  1426,   338,   312,   217,   182,-32768,   182,   315,   328,
-32768,   334,   337,-32768,-32768,   347,   361,  1231,  1495,  1495,
  1495,-32768,   382,  1524,   832,  1535,   707,   538,   598,   923,
   237,   237,   246,   246,-32768,-32768,-32768,-32768,-32768,   366,
   158,   363,   102,   329,-32768,   699,-32768,   364,-32768,  1038,
-32768,   154,   112,   368,-32768,   100,   806,-32768,   374,   376,
-32768,    10,-32768,-32768,    33,-32768,-32768,-32768,   267,-32768,
    86,   385,-32768,   306,-32768,-32768,-32768,   413,-32768,-32768,
   386,-32768,  1495,-32768,-32768,   387,  1426,   189,   390,-32768,
   390,-32768,-32768,-32768,-32768,-32768,   548,-32768,   880,-32768,
  1426,-32768,-32768,   349,-32768,   394,-32768,   396,-32768,-32768,
-32768,   392,-32768,-32768,-32768,-32768,   107,   354,   310,-32768,
-32768,   310,-32768,-32768,   429,-32768,   451,   239,-32768,-32768,
   193,   198,    27,   455,   880,    33,-32768,-32768,    33,-32768,
  1495,  1426,-32768,   182,   353,   425,   431,   411,-32768,-32768,
   421,   422,  1426,   434,   424,   426,  1305,   338,   476,-32768,
   452,   439,  1145,   609,-32768,   471,-32768,-32768,   288,  1495,
-32768,   427,  1511,-32768,-32768,-32768,   333,-32768,  1083,   255,
-32768,-32768,-32768,-32768,-32768,-32768,   462,    92,-32768,-32768,
-32768,   880,-32768,  1477,-32768,-32768,  1426,   463,  1206,  1426,
  1426,   486,-32768,-32768,-32768,-32768,   465,   466,-32768,   470,
-32768,-32768,   670,   475,-32768,-32768,-32768,-32768,-32768,   -11,
   796,   477,   354,-32768,-32768,   480,   219,   473,   455,-32768,
-32768,   478,  1426,   522,   482,   484,-32768,  1206,-32768,-32768,
   163,  1206,-32768,  1206,-32768,   857,-32768,-32768,-32768,   501,
   176,-32768,-32768,-32768,   507,-32768,-32768,-32768,  1206,-32768,
    65,-32768,-32768,-32768,-32768,-32768,  1206,-32768,   533,  1426,
  1206,-32768,   580,   532,-32768,  1206,  1426,   537,-32768,   536,
    12,   534,-32768,-32768,-32768,   540,-32768,  1426,   580,   542,
   580,   543,  1426,   545,    13,-32768,-32768,-32768,   547,-32768,
   163,   549,-32768,   227,   186,-32768,  1206,   556,   163,-32768,
-32768,   227,   605,   615,-32768
};

static const short yypgoto[] = {-32768,
-32768,-32768,-32768,   613,-32768,-32768,-32768,-32768,-32768,-32768,
-32768,-32768,    -6,-32768,   -33,-32768,   460,   359,   -41,    57,
-32768,-32768,   -34,  -135,   324,     5,  -148,     4,   574,     6,
   570,   456,    -8,  -147,   378,   -30,   -64,   -65,-32768,-32768,
-32768,  -182,-32768,   208,  -306,   280,   -32,   -66,   274,   -17,
   -27,-32768,-32768,-32768,-32768,-32768,   445,    -4,-32768,-32768,
   444,   313,   544,   453,     3,   -69,   608,   -86,  -146,   299,
-32768,  -171,-32768,  -110,  -115,-32768,-32768,  -181,-32768,-32768,
-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
-32768,  -380,   174,-32768,   175,-32768,   416,-32768,  -164,-32768,
-32768,-32768,   430,-32768,   350,   250
};


#define	YYLAST		1583


static const short yytable[] = {    58,
    41,    74,    29,    31,    33,    19,    19,    20,    20,   190,
   100,    48,   267,   278,   170,   244,   103,   217,   251,   435,
    86,   110,   174,    43,    47,   130,    82,    55,   390,   104,
   191,   135,   279,   328,   266,   196,   132,    26,    27,    26,
    27,    26,    27,   111,    82,   489,   501,   445,    36,    95,
   446,   181,   171,    90,     5,     6,     7,     8,   180,   277,
    -1,    82,     9,    10,    11,   282,   326,   172,   490,   502,
    -2,   327,   134,   124,   243,   169,    87,   110,    13,    86,
    88,    91,    92,   192,   124,   430,   199,   193,    36,   478,
    88,    96,   132,    42,   132,   216,   304,    28,   473,    30,
    97,    32,    36,   315,   251,   343,   222,   111,   171,    36,
   196,   169,   499,   -87,   447,    51,   209,    82,   210,    82,
   124,   474,   206,   274,   208,    54,   242,   276,   212,   248,
   213,    37,   125,    34,     5,    44,     7,    45,   110,   447,
    38,   253,     9,    10,    11,   316,    56,   161,   428,   330,
   238,   239,   321,   429,   317,   163,   162,   163,    13,   107,
   108,   317,   163,    35,   281,     9,    10,    11,   313,   161,
   244,    57,   172,   288,   115,   288,   300,    48,   162,   163,
   122,   256,   417,   257,    36,    95,   320,   323,    46,   269,
   271,   136,   416,   219,   220,   221,   111,   224,   225,   226,
   227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
   237,   431,   384,   424,   266,   287,   312,   434,   188,   137,
   330,   255,   342,   330,   110,   391,   450,    96,   393,   377,
   304,   417,   466,   304,   380,   124,    97,   327,   319,   322,
   332,   416,   508,   167,    91,    92,   173,   509,    48,   256,
   385,   257,   188,   333,   193,   386,   460,    36,   283,    88,
   462,   171,   463,     5,    44,     7,    45,    24,    25,    36,
    95,     9,    10,    11,   176,    36,   202,   472,   203,   171,
   150,   151,   152,   153,   154,   475,   207,    13,   368,   479,
    59,   152,   153,   154,   485,    61,    57,   211,    62,    86,
   321,   216,   254,   214,   255,     5,     6,     7,     8,   317,
   163,   288,    96,     9,    10,    11,    63,   270,    37,   402,
   215,    97,   218,   407,   263,   510,    64,    38,   256,    13,
   257,    65,    66,    67,    90,    36,   315,    68,    69,   171,
    26,    27,    70,   341,   264,   426,   419,    71,    72,   268,
   369,   408,   197,   198,   275,   370,   273,   373,  -284,   172,
   197,   198,   172,   432,    91,    92,   222,   436,   272,   131,
   285,    59,     5,   292,     7,    60,    61,    57,   316,    62,
     9,    10,    11,   249,   250,   305,   293,   317,   163,   116,
   294,   370,     5,   295,     7,    60,    13,    63,   394,   455,
     9,    10,    11,   249,   250,   296,   461,    64,   378,   379,
   264,   396,    65,    66,    67,   301,    13,   298,    68,    69,
   127,   129,   302,    70,   314,   370,   303,   309,    71,    72,
   324,   -77,     5,     6,     7,     8,   222,   325,   381,   334,
     9,    10,    11,   486,   337,   340,   117,  -181,   370,   338,
   374,   344,   375,   383,   494,   376,    13,   387,   -30,   222,
     5,     6,     7,     8,   -31,   397,   504,   403,     9,    10,
    11,   106,   107,   108,   512,   400,   401,   370,     9,    10,
    11,   404,   409,   405,    13,   411,   418,   181,   421,   -89,
   -89,   -89,   -89,   -89,   -89,   -89,   412,   -89,   -89,   -89,
   -89,   -89,   370,   -89,   -89,   -89,   -89,   -89,   -89,   -89,
   -89,   -89,   -89,   -89,   -89,   -89,   427,   433,     5,   437,
     7,   168,   439,   440,   441,   -89,     9,    10,    11,   452,
   -89,   -89,   -89,   443,   454,   448,   -89,   -89,   456,   457,
   458,   -89,    13,   449,   -89,   -89,   -89,   -89,   345,   -89,
   346,   347,     6,     7,     8,    61,    57,   465,    62,     9,
    10,    11,   348,   468,   349,   350,   351,   352,   353,   354,
   355,   356,   357,   358,   359,    13,    63,   146,   147,   148,
   149,   150,   151,   152,   153,   154,    64,   477,   480,   484,
   488,    65,    66,    67,   487,   491,   492,    68,    69,   496,
   498,   500,    70,   503,   514,   360,   506,    71,    72,   181,
   216,   346,    27,   511,   515,    23,    61,    57,   241,    62,
   363,   105,   118,   348,   252,   349,   350,   351,   352,   353,
   354,   355,   356,   357,   358,   359,   453,    63,   147,   148,
   149,   150,   151,   152,   153,   154,   331,    64,   420,   286,
   423,   291,    65,    66,    67,   284,   395,   205,    68,    69,
   120,   413,   495,    70,   310,   497,   360,   415,    71,    72,
   181,   216,   346,    27,   382,   308,   451,    61,    57,     0,
    62,     0,     0,     0,   348,     0,   349,   350,   351,   352,
   353,   354,   355,   356,   357,   358,   359,     0,    63,   306,
     0,     0,     5,     6,     7,     8,     0,     0,    64,     0,
     9,    10,    11,    65,    66,    67,     0,     0,     0,    68,
    69,     0,     0,     0,    70,     0,    13,   360,  -220,    71,
    72,    89,   216,     0,   -26,   -26,   -26,   -26,     0,     0,
     0,     0,   -26,   -26,   -26,   145,   146,   147,   148,   149,
   150,   151,   152,   153,   154,  -284,     0,    90,   -26,     0,
  -123,     0,  -123,     0,     0,     0,     0,     0,   200,     0,
     0,   -22,   -22,   -22,   -22,     0,     0,     0,     0,   -22,
   -22,   -22,     0,     0,     0,    91,    92,     0,  -123,     0,
     0,     0,  -123,   -26,    90,   -22,   368,  -123,    59,  -123,
     0,     0,     0,    61,    57,     0,    62,     0,    36,     5,
    44,     7,    45,     0,     0,     0,     0,     9,    10,    11,
     0,     0,    91,    92,    63,  -123,     0,     0,     0,  -123,
   -22,     0,     0,    13,    64,     0,     0,     0,     0,    65,
    66,    67,     0,     0,     0,    68,    69,     0,     0,     0,
    70,   321,     0,     0,  -178,    71,    72,   368,   369,    59,
   317,   163,     0,     0,    61,    57,     0,    62,   143,   144,
   145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
   368,     0,    59,     0,     0,    63,     0,    61,    57,     0,
    62,     0,     0,   155,   156,    64,   157,   158,   159,   160,
    65,    66,    67,     0,     0,     0,    68,    69,    63,     0,
     0,    70,     0,     0,     0,   464,    71,    72,    64,   369,
     0,     0,     0,    65,    66,    67,     0,     0,     0,    68,
    69,     0,   194,     0,    70,   -18,   -18,   -18,   -18,    71,
    72,     0,   369,   -18,   -18,   -18,     0,     0,     0,    59,
     0,     0,     0,     0,    61,    57,     0,    62,    90,   -18,
     0,  -123,     0,  -123,   148,   149,   150,   151,   152,   153,
   154,     0,    59,     0,     0,    63,     0,    61,    57,     0,
    62,     0,     0,     0,     0,    64,     0,     0,     0,  -123,
    65,    66,    67,  -123,   -18,     0,    68,    69,    63,     0,
     0,    70,     0,     0,     0,     0,    71,    72,    64,     0,
   179,     0,     0,    65,    66,    67,     0,    59,     0,    68,
    69,     0,    61,    57,    70,    62,     0,     0,     0,    71,
    72,     0,     0,   247,     0,     0,     0,     0,     0,     0,
    59,     0,     0,    63,     0,    61,    57,     0,    62,     0,
     0,     0,     0,    64,     0,     0,     0,     0,    65,    66,
    67,     0,     0,     0,    68,    69,    63,     0,     0,    70,
     0,     0,     0,     0,    71,    72,    64,     0,   280,     0,
     0,    65,    66,    67,     0,    59,     0,    68,    69,     0,
    61,    57,    70,    62,     0,     0,     0,    71,    72,     0,
     0,   311,     0,     0,     0,     0,     0,     0,     0,     0,
     0,    63,     0,     0,     0,     0,     0,     0,     0,     0,
     0,    64,     0,     0,     0,     0,    65,    66,    67,     0,
     0,     0,    68,    69,     0,     0,     0,    70,     0,     0,
     0,     0,    71,    72,     0,     0,   425,   346,   347,     6,
     7,     8,    61,    57,     0,    62,     9,    10,    11,   348,
     0,   349,   350,   351,   352,   353,   354,   355,   356,   357,
   358,   359,    13,    63,     0,     0,     0,     0,     0,     0,
     0,     0,     0,    64,     0,     0,     0,     0,    65,    66,
    67,     0,     0,     0,    68,    69,     0,     0,     0,    70,
     0,     0,   360,     0,    71,    72,     0,   216,   346,    27,
     0,     0,     0,    61,    57,     0,    62,     0,     0,     0,
   348,     0,   349,   350,   351,   352,   353,   354,   355,   356,
   357,   358,   359,    59,    63,     0,     0,     0,    61,    57,
     0,    62,     0,     0,    64,     0,     0,     0,     0,    65,
    66,    67,     0,     0,     0,    68,    69,     0,     0,    63,
    70,     0,     0,   360,     0,    71,    72,     0,   216,    64,
     0,     0,     0,     0,    65,    66,    67,     0,     0,     0,
    68,    69,     0,     0,     0,    70,     0,     0,     0,     0,
    71,    72,     0,   299,    59,     5,     0,     7,    60,    61,
    57,     0,    62,     9,    10,    11,     0,    59,     0,     0,
     0,     0,    61,    57,     0,    62,     0,     0,     0,    13,
    63,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    64,     0,     0,    63,     0,    65,    66,    67,     0,     0,
     0,    68,    69,    64,     0,     0,    70,     0,    65,    66,
    67,    71,    72,     0,    68,    69,     0,     0,     0,    70,
     0,    59,   406,     0,    71,    72,    61,    57,     0,    62,
     0,     0,     0,     0,    59,     0,     0,     0,     0,    61,
    57,     0,    62,     0,     0,     0,     0,    63,     0,     0,
     0,     0,     0,     0,     0,     0,     0,    64,     0,     0,
    63,     0,    65,    66,    67,     0,     0,     0,    68,    69,
    64,     0,     0,   126,     0,    65,    66,    67,    71,    72,
     0,    68,    69,     0,     0,     0,   128,     0,    59,     0,
     0,    71,    72,    61,    57,     0,    62,     0,     0,     4,
     0,   -93,     5,     6,     7,     8,     0,     0,     0,     0,
     9,    10,    11,     5,    63,     7,   168,     0,     0,     0,
     0,     9,    10,    11,    64,    12,    13,     0,     0,    65,
    66,    67,     0,     0,     0,    68,    69,    13,     0,     0,
    70,     0,     0,     0,   -93,    71,    72,     0,     0,     0,
     0,     0,     0,   -93,     0,   161,    14,     0,     0,     0,
     0,     0,     0,     0,   162,   163,   188,   138,   139,   140,
     0,   141,   142,   143,   144,   145,   146,   147,   148,   149,
   150,   151,   152,   153,   154,   138,   139,   140,     0,   141,
   142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
   152,   153,   154,   140,     0,   141,   142,   143,   144,   145,
   146,   147,   148,   149,   150,   151,   152,   153,   154,   142,
   143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
   153,   154,   144,   145,   146,   147,   148,   149,   150,   151,
   152,   153,   154
};

static const short yycheck[] = {    34,
    18,    35,     9,    10,    11,     2,     3,     2,     3,    96,
    43,    20,   184,   196,    84,   162,    47,   133,   166,   400,
    38,    49,    88,    19,    20,    67,    35,    32,   335,    47,
    97,    73,   197,     1,   183,   100,    70,     3,     4,     3,
     4,     3,     4,    50,    53,    34,    34,    59,     3,     4,
    62,     1,     7,    27,     4,     5,     6,     7,    92,   195,
     0,    70,    12,    13,    14,   201,    57,    85,    57,    57,
     0,    62,    70,     9,   161,    84,    58,   105,    28,    97,
    62,    55,    56,    58,     9,   392,    58,    62,     3,   470,
    62,    46,   126,    58,   128,    63,   243,    63,    34,    63,
    55,    63,     3,     4,   252,   288,   140,   114,     7,     3,
   175,   120,   493,    63,   421,    63,   121,   126,   123,   128,
     9,    57,   118,   190,   120,    63,   160,   193,   126,   163,
   128,    46,    57,    55,     4,     5,     6,     7,   166,   446,
    55,   176,    12,    13,    14,    46,    63,    46,    57,   265,
   157,   158,    46,    62,    55,    56,    55,    56,    28,     6,
     7,    55,    56,    55,   198,    12,    13,    14,    57,    46,
   317,     9,   190,   206,    59,   208,   218,   186,    55,    56,
    59,   178,   364,   178,     3,     4,   256,   257,    58,   185,
   186,    57,   364,   137,   138,   139,   203,   141,   142,   143,
   144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
   154,   394,   328,   378,   363,    34,   250,   399,    30,    62,
   336,     3,    34,   339,   252,   336,     8,    46,   339,   316,
   377,   413,    57,   380,   321,     9,    55,    62,   256,   257,
   271,   413,    57,    57,    55,    56,    57,    62,   257,   246,
    58,   246,    30,   271,    62,    58,   438,     3,   202,    62,
   442,     7,   444,     4,     5,     6,     7,    58,    59,     3,
     4,    12,    13,    14,    55,     3,    32,   459,    62,     7,
    44,    45,    46,    47,    48,   467,    58,    28,     1,   471,
     3,    46,    47,    48,   476,     8,     9,    58,    11,   317,
    46,    63,     1,    57,     3,     4,     5,     6,     7,    55,
    56,   344,    46,    12,    13,    14,    29,    58,    46,   353,
    57,    55,    57,   357,    64,   507,    39,    55,   325,    28,
   325,    44,    45,    46,    27,     3,     4,    50,    51,     7,
     3,     4,    55,   287,    58,   379,    59,    60,    61,    58,
    63,   358,    55,    56,    57,   299,    32,   301,    57,   377,
    55,    56,   380,   397,    55,    56,   400,   401,    55,     1,
    59,     3,     4,    59,     6,     7,     8,     9,    46,    11,
    12,    13,    14,    55,    56,    57,    59,    55,    56,     1,
    57,   335,     4,    57,     6,     7,    28,    29,   342,   433,
    12,    13,    14,    55,    56,    59,   441,    39,    55,    56,
    58,    59,    44,    45,    46,    34,    28,    57,    50,    51,
    62,    63,    57,    55,    57,   369,    64,    64,    60,    61,
    57,    63,     4,     5,     6,     7,   470,    62,    10,    55,
    12,    13,    14,   477,    32,    59,    58,    59,   392,    64,
    57,    62,    57,     3,   488,    64,    28,     3,    34,   493,
     4,     5,     6,     7,    34,    55,   501,    34,    12,    13,
    14,     5,     6,     7,   509,    55,    55,   421,    12,    13,
    14,    58,     7,    58,    28,    34,    16,     1,    62,     3,
     4,     5,     6,     7,     8,     9,    58,    11,    12,    13,
    14,    15,   446,    17,    18,    19,    20,    21,    22,    23,
    24,    25,    26,    27,    28,    29,    55,    55,     4,    34,
     6,     7,    58,    58,    55,    39,    12,    13,    14,    57,
    44,    45,    46,    59,    57,    59,    50,    51,    17,    58,
    57,    55,    28,    64,    58,    59,    60,    61,     1,    63,
     3,     4,     5,     6,     7,     8,     9,    57,    11,    12,
    13,    14,    15,    57,    17,    18,    19,    20,    21,    22,
    23,    24,    25,    26,    27,    28,    29,    40,    41,    42,
    43,    44,    45,    46,    47,    48,    39,    55,     9,    58,
    55,    44,    45,    46,    58,    62,    57,    50,    51,    58,
    58,    57,    55,    57,     0,    58,    58,    60,    61,     1,
    63,     3,     4,    58,     0,     3,     8,     9,   159,    11,
   297,    48,    53,    15,   169,    17,    18,    19,    20,    21,
    22,    23,    24,    25,    26,    27,   429,    29,    41,    42,
    43,    44,    45,    46,    47,    48,   269,    39,   369,   205,
   377,   208,    44,    45,    46,   203,   344,   114,    50,    51,
    53,   363,   489,    55,   249,   491,    58,    59,    60,    61,
     1,    63,     3,     4,   325,   246,   427,     8,     9,    -1,
    11,    -1,    -1,    -1,    15,    -1,    17,    18,    19,    20,
    21,    22,    23,    24,    25,    26,    27,    -1,    29,     1,
    -1,    -1,     4,     5,     6,     7,    -1,    -1,    39,    -1,
    12,    13,    14,    44,    45,    46,    -1,    -1,    -1,    50,
    51,    -1,    -1,    -1,    55,    -1,    28,    58,    59,    60,
    61,     1,    63,    -1,     4,     5,     6,     7,    -1,    -1,
    -1,    -1,    12,    13,    14,    39,    40,    41,    42,    43,
    44,    45,    46,    47,    48,    57,    -1,    27,    28,    -1,
    30,    -1,    32,    -1,    -1,    -1,    -1,    -1,     1,    -1,
    -1,     4,     5,     6,     7,    -1,    -1,    -1,    -1,    12,
    13,    14,    -1,    -1,    -1,    55,    56,    -1,    58,    -1,
    -1,    -1,    62,    63,    27,    28,     1,    30,     3,    32,
    -1,    -1,    -1,     8,     9,    -1,    11,    -1,     3,     4,
     5,     6,     7,    -1,    -1,    -1,    -1,    12,    13,    14,
    -1,    -1,    55,    56,    29,    58,    -1,    -1,    -1,    62,
    63,    -1,    -1,    28,    39,    -1,    -1,    -1,    -1,    44,
    45,    46,    -1,    -1,    -1,    50,    51,    -1,    -1,    -1,
    55,    46,    -1,    -1,    59,    60,    61,     1,    63,     3,
    55,    56,    -1,    -1,     8,     9,    -1,    11,    37,    38,
    39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
     1,    -1,     3,    -1,    -1,    29,    -1,     8,     9,    -1,
    11,    -1,    -1,    50,    51,    39,    53,    54,    55,    56,
    44,    45,    46,    -1,    -1,    -1,    50,    51,    29,    -1,
    -1,    55,    -1,    -1,    -1,    59,    60,    61,    39,    63,
    -1,    -1,    -1,    44,    45,    46,    -1,    -1,    -1,    50,
    51,    -1,     1,    -1,    55,     4,     5,     6,     7,    60,
    61,    -1,    63,    12,    13,    14,    -1,    -1,    -1,     3,
    -1,    -1,    -1,    -1,     8,     9,    -1,    11,    27,    28,
    -1,    30,    -1,    32,    42,    43,    44,    45,    46,    47,
    48,    -1,     3,    -1,    -1,    29,    -1,     8,     9,    -1,
    11,    -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    58,
    44,    45,    46,    62,    63,    -1,    50,    51,    29,    -1,
    -1,    55,    -1,    -1,    -1,    -1,    60,    61,    39,    -1,
    64,    -1,    -1,    44,    45,    46,    -1,     3,    -1,    50,
    51,    -1,     8,     9,    55,    11,    -1,    -1,    -1,    60,
    61,    -1,    -1,    64,    -1,    -1,    -1,    -1,    -1,    -1,
     3,    -1,    -1,    29,    -1,     8,     9,    -1,    11,    -1,
    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    44,    45,
    46,    -1,    -1,    -1,    50,    51,    29,    -1,    -1,    55,
    -1,    -1,    -1,    -1,    60,    61,    39,    -1,    64,    -1,
    -1,    44,    45,    46,    -1,     3,    -1,    50,    51,    -1,
     8,     9,    55,    11,    -1,    -1,    -1,    60,    61,    -1,
    -1,    64,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    -1,    29,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    -1,    39,    -1,    -1,    -1,    -1,    44,    45,    46,    -1,
    -1,    -1,    50,    51,    -1,    -1,    -1,    55,    -1,    -1,
    -1,    -1,    60,    61,    -1,    -1,    64,     3,     4,     5,
     6,     7,     8,     9,    -1,    11,    12,    13,    14,    15,
    -1,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    26,    27,    28,    29,    -1,    -1,    -1,    -1,    -1,    -1,
    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    44,    45,
    46,    -1,    -1,    -1,    50,    51,    -1,    -1,    -1,    55,
    -1,    -1,    58,    -1,    60,    61,    -1,    63,     3,     4,
    -1,    -1,    -1,     8,     9,    -1,    11,    -1,    -1,    -1,
    15,    -1,    17,    18,    19,    20,    21,    22,    23,    24,
    25,    26,    27,     3,    29,    -1,    -1,    -1,     8,     9,
    -1,    11,    -1,    -1,    39,    -1,    -1,    -1,    -1,    44,
    45,    46,    -1,    -1,    -1,    50,    51,    -1,    -1,    29,
    55,    -1,    -1,    58,    -1,    60,    61,    -1,    63,    39,
    -1,    -1,    -1,    -1,    44,    45,    46,    -1,    -1,    -1,
    50,    51,    -1,    -1,    -1,    55,    -1,    -1,    -1,    -1,
    60,    61,    -1,    63,     3,     4,    -1,     6,     7,     8,
     9,    -1,    11,    12,    13,    14,    -1,     3,    -1,    -1,
    -1,    -1,     8,     9,    -1,    11,    -1,    -1,    -1,    28,
    29,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    39,    -1,    -1,    29,    -1,    44,    45,    46,    -1,    -1,
    -1,    50,    51,    39,    -1,    -1,    55,    -1,    44,    45,
    46,    60,    61,    -1,    50,    51,    -1,    -1,    -1,    55,
    -1,     3,    58,    -1,    60,    61,     8,     9,    -1,    11,
    -1,    -1,    -1,    -1,     3,    -1,    -1,    -1,    -1,     8,
     9,    -1,    11,    -1,    -1,    -1,    -1,    29,    -1,    -1,
    -1,    -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,    -1,
    29,    -1,    44,    45,    46,    -1,    -1,    -1,    50,    51,
    39,    -1,    -1,    55,    -1,    44,    45,    46,    60,    61,
    -1,    50,    51,    -1,    -1,    -1,    55,    -1,     3,    -1,
    -1,    60,    61,     8,     9,    -1,    11,    -1,    -1,     1,
    -1,     3,     4,     5,     6,     7,    -1,    -1,    -1,    -1,
    12,    13,    14,     4,    29,     6,     7,    -1,    -1,    -1,
    -1,    12,    13,    14,    39,    27,    28,    -1,    -1,    44,
    45,    46,    -1,    -1,    -1,    50,    51,    28,    -1,    -1,
    55,    -1,    -1,    -1,    46,    60,    61,    -1,    -1,    -1,
    -1,    -1,    -1,    55,    -1,    46,    58,    -1,    -1,    -1,
    -1,    -1,    -1,    -1,    55,    56,    30,    31,    32,    33,
    -1,    35,    36,    37,    38,    39,    40,    41,    42,    43,
    44,    45,    46,    47,    48,    31,    32,    33,    -1,    35,
    36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
    46,    47,    48,    33,    -1,    35,    36,    37,    38,    39,
    40,    41,    42,    43,    44,    45,    46,    47,    48,    36,
    37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
    47,    48,    38,    39,    40,    41,    42,    43,    44,    45,
    46,    47,    48
};
#define YYPURE 1

/* -*-C-*-  Note some compilers choke on comments on */

/* Skeleton output parser for bison,
   Copyright (C) 1984, 1989, 1990 Bob Corbett and Richard Stallman

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 1, or (at your option)
   any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */


#ifdef __GNUC__
#ifndef alloca
#define alloca __builtin_alloca
#endif
#else /* Not GNU C.  */
#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__)
#include <alloca.h>
#endif /* Sparc.  */
#endif /* Not GNU C.  */

/* This is the parser code that is written into each bison parser
  when the %semantic_parser declaration is not specified in the grammar.
  It was written by Richard Stallman by simplifying the hairy parser
  used when %semantic_parser is specified.  */

/* Note: there must be only one dollar sign in this file.
   It is replaced by the list of actions, each action
   as one case of the switch.  */

#define yyerrok		(yyerrstatus = 0)
#define yyclearin	(yychar = YYEMPTY)
#define YYEMPTY		-2
#define YYEOF		0
#define YYACCEPT	return(0)
#define YYABORT 	return(1)
#define YYERROR		goto yyerrlab1
/* Like YYERROR except do call yyerror.
   This remains here temporarily to ease the
   transition to the new meaning of YYERROR, for GCC.
   Once GCC version 2 has supplanted version 1, this can go.  */
#define YYFAIL		goto yyerrlab
#define YYRECOVERING()  (!!yyerrstatus)
#define YYBACKUP(token, value) \
do								\
  if (yychar == YYEMPTY && yylen == 1)				\
    { yychar = (token), yylval = (value);			\
      yychar1 = YYTRANSLATE (yychar);				\
      YYPOPSTACK;						\
      goto yybackup;						\
    }								\
  else								\
    { yyerror ("syntax error: cannot back up"); YYERROR; }	\
while (0)

#define YYTERROR	1
#define YYERRCODE	256

#ifndef YYIMPURE
#define YYLEX		yylex()
#endif

#ifndef YYPURE
#define YYLEX		yylex(&yylval, &yylloc)
#endif

/* If nonreentrant, generate the variables here */

#ifndef YYIMPURE

int	yychar;			/*  the lookahead symbol		*/
YYSTYPE	yylval;			/*  the semantic value of the		*/
				/*  lookahead symbol			*/

#ifdef YYLSP_NEEDED
YYLTYPE yylloc;			/*  location data for the lookahead	*/
				/*  symbol				*/
#endif

int yynerrs;			/*  number of parse errors so far       */
#endif  /* YYIMPURE */

#if YYDEBUG != 0
int yydebug;			/*  nonzero means print parse trace	*/
/* Since this is uninitialized, it does not stop multiple parsers
   from coexisting.  */
#endif

/*  YYINITDEPTH indicates the initial size of the parser's stacks	*/

#ifndef	YYINITDEPTH
#define YYINITDEPTH 200
#endif

/*  YYMAXDEPTH is the maximum size the stacks can grow to
    (effective only if the built-in stack extension method is used).  */

#if YYMAXDEPTH == 0
#undef YYMAXDEPTH
#endif

#ifndef YYMAXDEPTH
#define YYMAXDEPTH 10000
#endif

/* This is the most reliable way to avoid incompatibilities
   in available built-in functions on various systems.  */
static void
__yy_bcopy (from, to, count)
     char *from;
     char *to;
     int count;
{
  register char *f = from;
  register char *t = to;
  register int i = count;

  while (i-- > 0)
    *t++ = *f++;
}


int
yyparse()
{
  register int yystate;
  register int yyn;
  register short *yyssp;
  register YYSTYPE *yyvsp;
  int yyerrstatus;	/*  number of tokens to shift before error messages enabled */
  int yychar1;		/*  lookahead token as an internal (translated) token number */

  short	yyssa[YYINITDEPTH];	/*  the state stack			*/
  YYSTYPE yyvsa[YYINITDEPTH];	/*  the semantic value stack		*/

  short *yyss = yyssa;		/*  refer to the stacks thru separate pointers */
  YYSTYPE *yyvs = yyvsa;	/*  to allow yyoverflow to reallocate them elsewhere */

#ifdef YYLSP_NEEDED
  YYLTYPE *yyls = yylsa;
  YYLTYPE *yylsp;
  YYLTYPE yylsa[YYINITDEPTH];	/*  the location stack			*/

#define YYPOPSTACK   (yyvsp--, yysp--, yylsp--)
#else
#define YYPOPSTACK   (yyvsp--, yysp--)
#endif

  int yystacksize = YYINITDEPTH;

#ifndef YYPURE
  int yychar;
  YYSTYPE yylval;
  int yynerrs;
#ifdef YYLSP_NEEDED
  YYLTYPE yylloc;
#endif
#endif

  YYSTYPE yyval;		/*  the variable used to return		*/
				/*  semantic values from the action	*/
				/*  routines				*/

  int yylen;

#if YYDEBUG != 0
  if (yydebug)
    fprintf(stderr, "Starting parse\n");
#endif

  yystate = 0;
  yyerrstatus = 0;
  yynerrs = 0;
  yychar = YYEMPTY;		/* Cause a token to be read.  */

  /* Initialize stack pointers.
     Waste one element of value and location stack
     so that they stay on the same level as the state stack.  */

  yyssp = yyss - 1;
  yyvsp = yyvs;
#ifdef YYLSP_NEEDED
  yylsp = yyls;
#endif

/* Push a new state, which is found in  yystate  .  */
/* In all cases, when you get here, the value and location stacks
   have just been pushed. so pushing a state here evens the stacks.  */
yynewstate:

  *++yyssp = yystate;

  if (yyssp >= yyss + yystacksize - 1)
    {
      /* Give user a chance to reallocate the stack */
      /* Use copies of these so that the &'s don't force the real ones into memory. */
      YYSTYPE *yyvs1 = yyvs;
      short *yyss1 = yyss;
#ifdef YYLSP_NEEDED
      YYLTYPE *yyls1 = yyls;
#endif

      /* Get the current used size of the three stacks, in elements.  */
      int size = yyssp - yyss + 1;

#ifdef yyoverflow
      /* Each stack pointer address is followed by the size of
	 the data in use in that stack, in bytes.  */
      yyoverflow("parser stack overflow",
		 &yyss1, size * sizeof (*yyssp),
		 &yyvs1, size * sizeof (*yyvsp),
#ifdef YYLSP_NEEDED
		 &yyls1, size * sizeof (*yylsp),
#endif
		 &yystacksize);

      yyss = yyss1; yyvs = yyvs1;
#ifdef YYLSP_NEEDED
      yyls = yyls1;
#endif
#else /* no yyoverflow */
      /* Extend the stack our own way.  */
      if (yystacksize >= YYMAXDEPTH)
	{
	  yyerror("parser stack overflow");
	  return 2;
	}
      yystacksize *= 2;
      if (yystacksize > YYMAXDEPTH)
	yystacksize = YYMAXDEPTH;
      yyss = (short *) alloca (yystacksize * sizeof (*yyssp));
      __yy_bcopy ((char *)yyss1, (char *)yyss, size * sizeof (*yyssp));
      yyvs = (YYSTYPE *) alloca (yystacksize * sizeof (*yyvsp));
      __yy_bcopy ((char *)yyvs1, (char *)yyvs, size * sizeof (*yyvsp));
#ifdef YYLSP_NEEDED
      yyls = (YYLTYPE *) alloca (yystacksize * sizeof (*yylsp));
      __yy_bcopy ((char *)yyls1, (char *)yyls, size * sizeof (*yylsp));
#endif
#endif /* no yyoverflow */

      yyssp = yyss + size - 1;
      yyvsp = yyvs + size - 1;
#ifdef YYLSP_NEEDED
      yylsp = yyls + size - 1;
#endif

#if YYDEBUG != 0
      if (yydebug)
	fprintf(stderr, "Stack size increased to %d\n", yystacksize);
#endif

      if (yyssp >= yyss + yystacksize - 1)
	YYABORT;
    }

#if YYDEBUG != 0
  if (yydebug)
    fprintf(stderr, "Entering state %d\n", yystate);
#endif

 yybackup:

/* Do appropriate processing given the current state.  */
/* Read a lookahead token if we need one and don't already have one.  */
/* yyresume: */

  /* First try to decide what to do without reference to lookahead token.  */

  yyn = yypact[yystate];
  if (yyn == YYFLAG)
    goto yydefault;

  /* Not known => get a lookahead token if don't already have one.  */

  /* yychar is either YYEMPTY or YYEOF
     or a valid token in external form.  */

  if (yychar == YYEMPTY)
    {
#if YYDEBUG != 0
      if (yydebug)
	fprintf(stderr, "Reading a token: ");
#endif
      yychar = YYLEX;
    }

  /* Convert token to internal form (in yychar1) for indexing tables with */

  if (yychar <= 0)		/* This means end of input. */
    {
      yychar1 = 0;
      yychar = YYEOF;		/* Don't call YYLEX any more */

#if YYDEBUG != 0
      if (yydebug)
	fprintf(stderr, "Now at end of input.\n");
#endif
    }
  else
    {
      yychar1 = YYTRANSLATE(yychar);

#if YYDEBUG != 0
      if (yydebug)
	fprintf(stderr, "Next token is %d (%s)\n", yychar, yytname[yychar1]);
#endif
    }

  yyn += yychar1;
  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
    goto yydefault;

  yyn = yytable[yyn];

  /* yyn is what to do for this token type in this state.
     Negative => reduce, -yyn is rule number.
     Positive => shift, yyn is new state.
       New state is final state => don't bother to shift,
       just return success.
     0, or most negative number => error.  */

  if (yyn < 0)
    {
      if (yyn == YYFLAG)
	goto yyerrlab;
      yyn = -yyn;
      goto yyreduce;
    }
  else if (yyn == 0)
    goto yyerrlab;

  if (yyn == YYFINAL)
    YYACCEPT;

  /* Shift the lookahead token.  */

#if YYDEBUG != 0
  if (yydebug)
    fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
#endif

  /* Discard the token being shifted unless it is eof.  */
  if (yychar != YYEOF)
    yychar = YYEMPTY;

  *++yyvsp = yylval;
#ifdef YYLSP_NEEDED
  *++yylsp = yylloc;
#endif

  /* count tokens shifted since error; after three, turn off error status.  */
  if (yyerrstatus) yyerrstatus--;

  yystate = yyn;
  goto yynewstate;

/* Do the default action for the current state.  */
yydefault:

  yyn = yydefact[yystate];
  if (yyn == 0)
    goto yyerrlab;

/* Do a reduction.  yyn is the number of a rule to reduce with.  */
yyreduce:
  yylen = yyr2[yyn];
  yyval = yyvsp[1-yylen]; /* implement default value of the action */

#if YYDEBUG != 0
  if (yydebug)
    {
      if (yylen == 1)
	fprintf (stderr, "Reducing 1 value via rule %d (line %d), ",
		 yyn, yyrline[yyn]);
      else
	fprintf (stderr, "Reducing %d values via rule %d (line %d), ",
		 yylen, yyn, yyrline[yyn]);
    }
#endif


  switch (yyn) {

case 3:

{yyval.ttype = NULL_TREE; ;
    break;}
case 5:

{yyval.ttype = NULL_TREE; ;
    break;}
case 9:

{
		  if (TREE_CHAIN (yyvsp[-2].ttype)) yyvsp[-2].ttype = combine_strings (yyvsp[-2].ttype);
		  assemble_asm (yyvsp[-2].ttype); ;
    break;}
case 10:

{ if (pedantic)
		    error ("A declaration without type or storage class is illegal in ANSI C");
		  else if (!flag_traditional)
		    warning ("type or storage class does not exist"); ;
    break;}
case 11:

{;
    break;}
case 12:

{;
    break;}
case 13:

{ error ("Empty declaration"); ;
    break;}
case 14:

{ shadow_tag (yyvsp[-1].ttype); ;
    break;}
case 17:

{ if (pedantic)
		    warning ("Outside of a function in ANSI C';''Is illegal"); ;
    break;}
case 18:

{ if (! start_function (yyvsp[-2].ttype, yyvsp[0].ttype))
		    YYFAIL;
		  reinit_parse_for_function (); ;
    break;}
case 19:

{ store_parm_decls (); ;
    break;}
case 20:

{ finish_function (lineno); ;
    break;}
case 21:

{ ;
    break;}
case 22:

{ if (! start_function (yyvsp[-2].ttype, yyvsp[0].ttype))
		    YYFAIL;
		  reinit_parse_for_function (); ;
    break;}
case 23:

{ store_parm_decls (); ;
    break;}
case 24:

{ finish_function (lineno); ;
    break;}
case 25:

{ ;
    break;}
case 26:

{ if (! start_function (0, yyvsp[0].ttype))
		    YYFAIL;
		  reinit_parse_for_function (); ;
    break;}
case 27:

{ store_parm_decls (); ;
    break;}
case 28:

{ finish_function (lineno); ;
    break;}
case 29:

{ ;
    break;}
case 32:

{ yyval.code = ADDR_EXPR; ;
    break;}
case 33:

{ yyval.code = NEGATE_EXPR; ;
    break;}
case 34:

{ yyval.code = CONVERT_EXPR; ;
    break;}
case 35:

{ yyval.code = PREINCREMENT_EXPR; ;
    break;}
case 36:

{ yyval.code = PREDECREMENT_EXPR; ;
    break;}
case 37:

{ yyval.code = BIT_NOT_EXPR; ;
    break;}
case 38:

{ yyval.code = TRUTH_NOT_EXPR; ;
    break;}
case 39:

{ yyval.ttype = build_compound_expr (yyvsp[0].ttype); ;
    break;}
case 40:

{ yyval.ttype = NULL_TREE; ;
    break;}
case 42:

{ yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
    break;}
case 43:

{ chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
    break;}
case 45:

{ yyval.ttype = build_indirect_ref (yyvsp[0].ttype, "unary *"); ;
    break;}
case 46:

{ yyval.ttype = build_unary_op (yyvsp[-1].code, yyvsp[0].ttype, 0); ;
    break;}
case 47:

{ if (TREE_CODE (yyvsp[0].ttype) == COMPONENT_REF
		      && TREE_PACKED (TREE_OPERAND (yyvsp[0].ttype, 1)))
		    error ("sizeof' cannot be applied to bit-field");
		  /* ANSI says arrays and functions are converted inside comma.
		     But we can't really convert them in build_compound_expr
		     because that would break commas in lvalues.
		     So do the conversion here if operand was a comma.  */
		  if (TREE_CODE (yyvsp[0].ttype) == COMPOUND_EXPR
		      && (TREE_CODE (TREE_TYPE (yyvsp[0].ttype)) == ARRAY_TYPE
			  || TREE_CODE (TREE_TYPE (yyvsp[0].ttype)) == FUNCTION_TYPE))
		    yyvsp[0].ttype = default_conversion (yyvsp[0].ttype);
		  yyval.ttype = c_sizeof (TREE_TYPE (yyvsp[0].ttype)); ;
    break;}
case 48:

{ yyval.ttype = c_sizeof (groktypename (yyvsp[-1].ttype)); ;
    break;}
case 49:

{ if (TREE_CODE (yyvsp[0].ttype) == COMPONENT_REF
		      && TREE_PACKED (TREE_OPERAND (yyvsp[0].ttype, 1)))
		    error ("`__alignof' cannot be applied to bit-field");
		  if (TREE_CODE (yyvsp[0].ttype) == INDIRECT_REF)
		    {
		      tree t = TREE_OPERAND (yyvsp[0].ttype, 0);
		      tree best = t;
		      int bestalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
		      while (TREE_CODE (t) == NOP_EXPR
			     && TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == POINTER_TYPE)
			{
			  int thisalign;
			  t = TREE_OPERAND (t, 0);
			  thisalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
			  if (thisalign > bestalign)
			    best = t, bestalign = thisalign;
			}
		      yyval.ttype = c_alignof (TREE_TYPE (TREE_TYPE (best)));
		    }
		  else
		    {
		      /* ANSI says arrays and fns are converted inside comma.
			 But we can't convert them in build_compound_expr
			 because that would break commas in lvalues.
			 So do the conversion here if operand was a comma.  */
		      if (TREE_CODE (yyvsp[0].ttype) == COMPOUND_EXPR
			  && (TREE_CODE (TREE_TYPE (yyvsp[0].ttype)) == ARRAY_TYPE
			      || TREE_CODE (TREE_TYPE (yyvsp[0].ttype)) == FUNCTION_TYPE))
			yyvsp[0].ttype = default_conversion (yyvsp[0].ttype);
		      yyval.ttype = c_alignof (TREE_TYPE (yyvsp[0].ttype));
		    }
		;
    break;}
case 50:

{ yyval.ttype = c_alignof (groktypename (yyvsp[-1].ttype)); ;
    break;}
case 52:

{ tree type = groktypename (yyvsp[-2].ttype);
		  yyval.ttype = build_c_cast (type, yyvsp[0].ttype); ;
    break;}
case 53:

{ tree type = groktypename (yyvsp[-5].ttype);
		  if (pedantic)
		    warning ("ANSI C does not allow constructor notation");
		  yyval.ttype = digest_init (type, build_nt (CONSTRUCTOR, NULL_TREE, nreverse (yyvsp[-2].ttype)), 0);
		  if (TREE_CODE (type) == ARRAY_TYPE && TYPE_SIZE (type) == 0)
		    {
		      int failure = complete_array_type (type, yyval.ttype, 1);
		      if (failure)
			abort ();
		    }
		;
    break;}
case 55:

{ yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
    break;}
case 56:

{ yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
    break;}
case 57:

{ yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
    break;}
case 58:

{ yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
    break;}
case 59:

{ yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
    break;}
case 60:

{ yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
    break;}
case 61:

{ yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
    break;}
case 62:

{ yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
    break;}
case 63:

{ yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
    break;}
case 64:

{ yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
    break;}
case 65:

{ yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
    break;}
case 66:

{ yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
    break;}
case 67:

{ yyval.ttype = build_binary_op (TRUTH_ANDIF_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype); ;
    break;}
case 68:

{ yyval.ttype = build_binary_op (TRUTH_ORIF_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype); ;
    break;}
case 69:

{ yyval.ttype = build_conditional_expr (yyvsp[-4].ttype, yyvsp[-2].ttype, yyvsp[0].ttype); ;
    break;}
case 70:

{ yyval.ttype = build_modify_expr (yyvsp[-2].ttype, NOP_EXPR, yyvsp[0].ttype); ;
    break;}
case 71:

{ yyval.ttype = build_modify_expr (yyvsp[-2].ttype, yyvsp[-1].code, yyvsp[0].ttype); ;
    break;}
case 72:

{ yyval.ttype = lastiddecl;
		  if (!yyval.ttype || yyval.ttype == error_mark_node)
		    {
		      if (yychar == YYEMPTY)
			yychar = YYLEX;
		      if (yychar == '(')
			{
			  yyval.ttype = implicitly_declare (yyvsp[0].ttype);
			  assemble_external (yyval.ttype);
			  TREE_USED (yyval.ttype) = 1;
			}
		      else if (current_function_decl == 0)
			{
			  error ("`%s' is undeclared",
				 IDENTIFIER_POINTER (yyvsp[0].ttype));
			  yyval.ttype = error_mark_node;
			}
		      else
			{
			  if (IDENTIFIER_GLOBAL_VALUE (yyvsp[0].ttype) != error_mark_node
			      || IDENTIFIER_ERROR_LOCUS (yyvsp[0].ttype) != current_function_decl)
			    {
			      error ("`%s' is undeclared",
				     IDENTIFIER_POINTER (yyvsp[0].ttype));

			      if (! undeclared_variable_notice)
				{
				  error ("(Undeclared identifiers are only reported once for each function encountered)");
				  undeclared_variable_notice = 1;
				}
			    }
			  yyval.ttype = error_mark_node;
			  /* Prevent repeated error messages.  */
			  IDENTIFIER_GLOBAL_VALUE (yyvsp[0].ttype) = error_mark_node;
			  IDENTIFIER_ERROR_LOCUS (yyvsp[0].ttype) = current_function_decl;
			}
		    }
		  else if (! TREE_USED (yyval.ttype))
		    {
		      if (TREE_EXTERNAL (yyval.ttype))
			assemble_external (yyval.ttype);
		      TREE_USED (yyval.ttype) = 1;
		    }
		  if (TREE_CODE (yyval.ttype) == CONST_DECL)
		    yyval.ttype = DECL_INITIAL (yyval.ttype);
		;
    break;}
case 74:

{ yyval.ttype = combine_strings (yyvsp[0].ttype); ;
    break;}
case 75:

{ yyval.ttype = yyvsp[-1].ttype; ;
    break;}
case 76:

{ yyval.ttype = error_mark_node; ;
    break;}
case 77:

{ if (current_function_decl == 0)
		    {
		      error ("`{}' expression can only be used inside a function");
		      YYFAIL;
		    }
		  keep_next_level ();
		  yyval.ttype = expand_start_stmt_expr (); ;
    break;}
case 78:

{ tree rtl_exp;
		  if (pedantic)
		    warning ("Cannot use `{}' expression in ANSI C");
		  rtl_exp = expand_end_stmt_expr (yyvsp[-2].ttype);
		  yyval.ttype = yyvsp[-1].ttype;
		  TREE_USED (yyval.ttype) = 0;
		  /* Since the statements have side effects,
		     consider this volatile.  */
		  TREE_VOLATILE (yyval.ttype) = 1;
		  TREE_TYPE (yyval.ttype) = TREE_TYPE (rtl_exp);
		  STMT_BODY (yyval.ttype) = rtl_exp; ;
    break;}
case 79:

{ yyval.ttype = build_function_call (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
    break;}
case 80:

{ yyval.ttype = build_array_ref (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
    break;}
case 81:

{ yyval.ttype = build_component_ref (yyvsp[-2].ttype, yyvsp[0].ttype); ;
    break;}
case 82:

{ yyval.ttype = build_component_ref (build_indirect_ref (yyvsp[-2].ttype, "->"), yyvsp[0].ttype); ;
    break;}
case 83:

{ yyval.ttype = build_unary_op (POSTINCREMENT_EXPR, yyvsp[-1].ttype, 0); ;
    break;}
case 84:

{ yyval.ttype = build_unary_op (POSTDECREMENT_EXPR, yyvsp[-1].ttype, 0); ;
    break;}
case 86:

{ yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ;
    break;}
case 93:

{ yyval.itype = suspend_momentary ();
		  declspec_stack = tree_cons (0, current_declspecs,
					      declspec_stack);
		  current_declspecs = yyvsp[0].ttype; ;
    break;}
case 94:

{ current_declspecs = TREE_VALUE (declspec_stack);
		  declspec_stack = TREE_CHAIN (declspec_stack);
		  resume_momentary (yyvsp[-2].itype); ;
    break;}
case 95:

{ current_declspecs = TREE_VALUE (declspec_stack);
		  declspec_stack = TREE_CHAIN (declspec_stack);
		  resume_momentary (yyvsp[-2].itype); ;
    break;}
case 96:

{ shadow_tag (yyvsp[-1].ttype); ;
    break;}
case 97:

{ warning ("Empty declaration"); ;
    break;}
case 98:

{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[0].ttype); ;
    break;}
case 99:

{ yyval.ttype = chainon (yyvsp[0].ttype, tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[-2].ttype)); ;
    break;}
case 100:

{ yyval.ttype = NULL_TREE; ;
    break;}
case 101:

{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
    break;}
case 102:

{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
    break;}
case 103:

{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
    break;}
case 104:

{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
    break;}
case 105:

{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
    break;}
case 106:

{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
    break;}
case 107:

{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[0].ttype); ;
    break;}
case 108:

{ yyval.ttype = chainon (yyvsp[0].ttype, tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[-2].ttype)); ;
    break;}
case 109:

{ yyval.ttype = NULL_TREE; ;
    break;}
case 110:

{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
    break;}
case 114:

{ yyval.ttype = TREE_TYPE (yyvsp[-1].ttype);
    break;}
case 115:

{ yyval.ttype = groktypename (yyvsp[-1].ttype);
    break;}
case 123:

{ yyval.ttype = NULL_TREE; ;
    break;}
case 124:

{ if (TREE_CHAIN (yyvsp[-1].ttype)) yyvsp[-1].ttype = combine_strings (yyvsp[-1].ttype);
		  yyval.ttype = yyvsp[-1].ttype;
		;
    break;}
case 125:

{ yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1); ;
    break;}
case 126:

{ finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); ;
    break;}
case 127:

{ tree d = start_decl (yyvsp[-2].ttype, current_declspecs, 0);
		  finish_decl (d, NULL_TREE, yyvsp[-1].ttype); ;
    break;}
case 128:

{ yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1); ;
    break;}
case 129:

{ finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); ;
    break;}
case 130:

{ tree d = start_decl (yyvsp[-2].ttype, current_declspecs, 0);
		  finish_decl (d, NULL_TREE, yyvsp[-1].ttype); ;
    break;}
case 131:

{ yyval.ttype = NULL_TREE; ;
    break;}
case 132:

{ yyval.ttype = yyvsp[-2].ttype; ;
    break;}
case 135:

{ warning ("`%s' attribute ignored",
		   IDENTIFIER_POINTER (yyvsp[0].ttype));
	  yyval.ttype = yyvsp[0].ttype; ;
    break;}
case 136:

{ /* if not "aligned(1)", then issue warning */
	  if (strcmp (IDENTIFIER_POINTER (yyvsp[-3].ttype), "aligned") != 0
	      || TREE_CODE (yyvsp[-1].ttype) != INTEGER_CST
	      || TREE_INT_CST_LOW (yyvsp[-1].ttype) != 1)
	    warning ("``%s'属性は無視しました",
		     IDENTIFIER_POINTER (yyvsp[-3].ttype));
	  yyval.ttype = yyvsp[-3].ttype; ;
    break;}
case 137:

{ warning ("`%s'属性は無視しました",
		   IDENTIFIER_POINTER (yyvsp[-3].ttype));
	  yyval.ttype = yyvsp[-3].ttype; ;
    break;}
case 139:

{ yyval.ttype = build_nt (CONSTRUCTOR, NULL_TREE, NULL_TREE);
		  if (pedantic)
		    warning ("ANSI Cでは空の{}での初期化は違法です"); ;
    break;}
case 140:

{ yyval.ttype = build_nt (CONSTRUCTOR, NULL_TREE, nreverse (yyvsp[-1].ttype)); ;
    break;}
case 141:

{ yyval.ttype = build_nt (CONSTRUCTOR, NULL_TREE, nreverse (yyvsp[-2].ttype)); ;
    break;}
case 142:

{ yyval.ttype = NULL_TREE; ;
    break;}
case 143:

{ yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
    break;}
case 144:

{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype); ;
    break;}
case 147:

{ yyval.ttype = yyvsp[-1].ttype; ;
    break;}
case 148:

{ yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
    break;}
case 149:

{ yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
    break;}
case 150:

{ yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
    break;}
case 151:

{ yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
    break;}
case 153:

{ yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
    break;}
case 154:

{ yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
    break;}
case 155:

{ yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
    break;}
case 156:

{ yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
    break;}
case 158:

{ yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
    break;}
case 159:

{ yyval.ttype = yyvsp[-1].ttype; ;
    break;}
case 160:

{ yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
    break;}
case 161:

{ yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
    break;}
case 162:

{ yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
    break;}
case 164:

{ yyval.ttype = start_struct (RECORD_TYPE, yyvsp[-1].ttype);
		  /* Start scope of tag before parsing components.  */
		;
    break;}
case 165:

{ yyval.ttype = finish_struct (yyvsp[-2].ttype, yyvsp[-1].ttype);
		  /* Really define the structure.  */
		;
    break;}
case 166:

{ yyval.ttype = finish_struct (start_struct (RECORD_TYPE, NULL_TREE),
				      yyvsp[-1].ttype); ;
    break;}
case 167:

{ yyval.ttype = xref_tag (RECORD_TYPE, yyvsp[0].ttype); ;
    break;}
case 168:

{ yyval.ttype = start_struct (UNION_TYPE, yyvsp[-1].ttype); ;
    break;}
case 169:

{ yyval.ttype = finish_struct (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
    break;}
case 170:

{ yyval.ttype = finish_struct (start_struct (UNION_TYPE, NULL_TREE),
				      yyvsp[-1].ttype); ;
    break;}
case 171:

{ yyval.ttype = xref_tag (UNION_TYPE, yyvsp[0].ttype); ;
    break;}
case 172:

{ yyvsp[0].itype = suspend_momentary ();
		  yyval.ttype = start_enum (yyvsp[-1].ttype); ;
    break;}
case 173:

{ yyval.ttype = finish_enum (yyvsp[-3].ttype, nreverse (yyvsp[-2].ttype));
		  resume_momentary (yyvsp[-4].itype); ;
    break;}
case 174:

{ yyvsp[0].itype = suspend_momentary ();
		  yyval.ttype = start_enum (NULL_TREE); ;
    break;}
case 175:

{ yyval.ttype = finish_enum (yyvsp[-3].ttype, nreverse (yyvsp[-2].ttype));
		  resume_momentary (yyvsp[-4].itype); ;
    break;}
case 176:

{ yyval.ttype = xref_tag (ENUMERAL_TYPE, yyvsp[0].ttype); ;
    break;}
case 180:

{ if (pedantic) warning ("`,'がenum listの終わりにあります"); ;
    break;}
case 181:

{ yyval.ttype = yyvsp[0].ttype; ;
    break;}
case 182:

{ yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype);
		  warning ("`;'がstructかunionの終わりにありません"); ;
    break;}
case 183:

{ yyval.ttype = NULL_TREE; ;
    break;}
case 184:

{ yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
    break;}
case 185:

{ if (pedantic)
		    warning ("`;'がstructかunionに余計にあります"); ;
    break;}
case 186:

{ yyval.ttype = yyvsp[0].ttype;
		  current_declspecs = TREE_VALUE (declspec_stack);
		  declspec_stack = TREE_CHAIN (declspec_stack);
		  resume_momentary (yyvsp[-1].itype); ;
    break;}
case 187:

{ yyval.ttype = yyvsp[0].ttype;
		  current_declspecs = TREE_VALUE (declspec_stack);
		  declspec_stack = TREE_CHAIN (declspec_stack);
		  resume_momentary (yyvsp[-1].itype); ;
    break;}
case 188:

{ yyval.ttype = NULL_TREE; ;
    break;}
case 189:

{ if (pedantic)
		    warning ("ANSI Cではメンバのない宣言は違法です");
		  yyval.ttype = NULL_TREE; ;
    break;}
case 191:

{ yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
    break;}
case 192:

{ yyval.ttype = grokfield (input_filename, lineno, yyvsp[-1].ttype, current_declspecs, NULL_TREE); ;
    break;}
case 193:

{ yyval.ttype = grokfield (input_filename, lineno, yyvsp[-3].ttype, current_declspecs, yyvsp[-1].ttype); ;
    break;}
case 194:

{ yyval.ttype = grokfield (input_filename, lineno, NULL_TREE, current_declspecs, yyvsp[0].ttype); ;
    break;}
case 196:

{ yyval.ttype = chainon (yyvsp[0].ttype, yyvsp[-2].ttype); ;
    break;}
case 197:

{ yyval.ttype = build_enumerator (yyvsp[0].ttype, NULL_TREE); ;
    break;}
case 198:

{ yyval.ttype = build_enumerator (yyvsp[-2].ttype, yyvsp[0].ttype); ;
    break;}
case 199:

{ yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
    break;}
case 200:

{ yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
    break;}
case 201:

{ yyval.ttype = NULL_TREE; ;
    break;}
case 203:

{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
    break;}
case 204:

{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
    break;}
case 205:

{ yyval.ttype = NULL_TREE; ;
    break;}
case 206:

{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
    break;}
case 207:

{ yyval.ttype = yyvsp[-1].ttype; ;
    break;}
case 208:

{ yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
    break;}
case 209:

{ yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); ;
    break;}
case 210:

{ yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
    break;}
case 211:

{ yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
    break;}
case 212:

{ yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
    break;}
case 213:

{ yyval.ttype = build_nt (CALL_EXPR, NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
    break;}
case 214:

{ yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ;
    break;}
case 215:

{ yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, NULL_TREE); ;
    break;}
case 222:

{ pushlevel (0);
		  clear_last_expr ();
		  push_momentary ();
		  expand_start_bindings (0); ;
    break;}
case 223:

{;
    break;}
case 225:

{ yyval.ttype = 0; ;
    break;}
case 226:

{ expand_end_bindings (getdecls (), 1, 0);
		  yyval.ttype = poplevel (1, 1, 0);
		  pop_momentary (); ;
    break;}
case 227:

{ expand_end_bindings (getdecls (), kept_level_p (), 0);
		  yyval.ttype = poplevel (kept_level_p (), 0, 0);
		  pop_momentary (); ;
    break;}
case 228:

{ expand_end_bindings (getdecls (), kept_level_p (), 0);
		  yyval.ttype = poplevel (kept_level_p (), 0, 0);
		  pop_momentary (); ;
    break;}
case 229:

{ emit_line_note (input_filename, lineno);
		  expand_start_cond (truthvalue_conversion (yyvsp[-1].ttype), 0); ;
    break;}
case 231:

{;
    break;}
case 232:

{ emit_line_note (input_filename, lineno);
		  /* Do default conversion if safe and possibly important,
		     in case within ({...}).  */
		  if ((TREE_CODE (TREE_TYPE (yyvsp[-1].ttype)) == ARRAY_TYPE
		       && lvalue_p (yyvsp[-1].ttype))
		      || TREE_CODE (TREE_TYPE (yyvsp[-1].ttype)) == FUNCTION_TYPE)
		    yyvsp[-1].ttype = default_conversion (yyvsp[-1].ttype);
		  expand_expr_stmt (yyvsp[-1].ttype);
		  clear_momentary (); ;
    break;}
case 233:

{ expand_start_else (); ;
    break;}
case 234:

{ expand_end_else (); ;
    break;}
case 235:

{ expand_end_cond (); ;
    break;}
case 236:

{ emit_nop ();
		  emit_line_note (input_filename, lineno);
		  expand_start_loop (1); ;
    break;}
case 237:

{ emit_line_note (input_filename, lineno);
		  expand_exit_loop_if_false (truthvalue_conversion (yyvsp[-1].ttype)); ;
    break;}
case 238:

{ expand_end_loop (); ;
    break;}
case 239:

{ emit_nop ();
		  emit_line_note (input_filename, lineno);
		  expand_start_loop_continue_elsewhere (1); ;
    break;}
case 240:

{ expand_loop_continue_here (); ;
    break;}
case 241:

{ emit_line_note (input_filename, lineno);
		  expand_exit_loop_if_false (truthvalue_conversion (yyvsp[-2].ttype));
		  expand_end_loop ();
		  clear_momentary (); ;
    break;}
case 242:

{ emit_nop ();
		  emit_line_note (input_filename, lineno);
		  if (yyvsp[-1].ttype) expand_expr_stmt (yyvsp[-1].ttype);
		  expand_start_loop_continue_elsewhere (1); ;
    break;}
case 243:

{ emit_line_note (input_filename, lineno);
		  if (yyvsp[-1].ttype)
		    expand_exit_loop_if_false (truthvalue_conversion (yyvsp[-1].ttype)); ;
    break;}
case 244:

{ push_momentary ();
		  yyvsp[0].itype = lineno; ;
    break;}
case 245:

{ emit_line_note (input_filename, yyvsp[-2].itype);
		  expand_loop_continue_here ();
		  if (yyvsp[-3].ttype)
		    expand_expr_stmt (yyvsp[-3].ttype);
		  pop_momentary ();
		  expand_end_loop (); ;
    break;}
case 246:

{ emit_line_note (input_filename, lineno);
		  c_expand_start_case (yyvsp[-1].ttype);
		  /* Don't let the tree nodes for $3 be discarded by
		     clear_momentary during the parsing of the next stmt.  */
		  push_momentary (); ;
    break;}
case 247:

{ expand_end_case (yyvsp[-3].ttype);
		  pop_momentary (); ;
    break;}
case 248:

{ register tree value = fold (yyvsp[-1].ttype);
		  register tree label
		    = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);

		  /* build_c_cast puts on a NOP_EXPR to make a non-lvalue.
		     Strip such NOP_EXPRs.  */
		  if (TREE_CODE (value) == NOP_EXPR
		      && TREE_TYPE (value) == TREE_TYPE (TREE_OPERAND (value, 0)))
		    value = TREE_OPERAND (value, 0);

		  if (TREE_CODE (value) != INTEGER_CST
		      && value != error_mark_node)
		    {
		      error ("caseラベルが整数型ではありません");
		      value = error_mark_node;
		    }
		  else
		    /* Promote char or short to int.  */
		    value = default_conversion (value);
		  if (value != error_mark_node)
		    {
		      int success = pushcase (value, label);
		      if (success == 1)
			error ("caseラベルがswitch文の中にありません");
		      else if (success == 2)
			error ("caseの値が同値です");
		      else if (success == 3)
			warning ("caseの値が範囲外です");
		    }
		;
    break;}
case 250:

{
		  register tree label
		    = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
		  int success = pushcase (NULL_TREE, label);
		  if (success == 1)
		    error ("defaultラベルがswitch文の中にありません");
		  else if (success == 2)
		    error ("defaultラベルが２つ以上あります");
		;
    break;}
case 252:

{ emit_line_note (input_filename, lineno);
		  if ( ! expand_exit_something ())
		    error ("breakがloopかswitchの中にありません"); ;
    break;}
case 253:

{ emit_line_note (input_filename, lineno);
		  if (! expand_continue_loop ())
		    error ("continueがloop外部です"); ;
    break;}
case 254:

{ emit_line_note (input_filename, lineno);
		  c_expand_return (NULL_TREE); ;
    break;}
case 255:

{ emit_line_note (input_filename, lineno);
		  c_expand_return (yyvsp[-1].ttype); ;
    break;}
case 256:

{ if (TREE_CHAIN (yyvsp[-2].ttype)) yyvsp[-2].ttype = combine_strings (yyvsp[-2].ttype);
		  emit_line_note (input_filename, lineno);
		  expand_asm (yyvsp[-2].ttype); ;
    break;}
case 257:

{ if (TREE_CHAIN (yyvsp[-4].ttype)) yyvsp[-4].ttype = combine_strings (yyvsp[-4].ttype);
		  emit_line_note (input_filename, lineno);
		  c_expand_asm_operands (yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE, NULL_TREE,
					 yyvsp[-6].ttype == ridpointers[(int)RID_VOLATILE],
					 input_filename, lineno); ;
    break;}
case 258:

{ if (TREE_CHAIN (yyvsp[-6].ttype)) yyvsp[-6].ttype = combine_strings (yyvsp[-6].ttype);
		  emit_line_note (input_filename, lineno);
		  c_expand_asm_operands (yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE,
					 yyvsp[-8].ttype == ridpointers[(int)RID_VOLATILE],
					 input_filename, lineno); ;
    break;}
case 259:

{ if (TREE_CHAIN (yyvsp[-8].ttype)) yyvsp[-8].ttype = combine_strings (yyvsp[-8].ttype);
		  emit_line_note (input_filename, lineno);
		  c_expand_asm_operands (yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype,
					 yyvsp[-10].ttype == ridpointers[(int)RID_VOLATILE],
					 input_filename, lineno); ;
    break;}
case 260:

{ tree decl;
		  emit_line_note (input_filename, lineno);
		  decl = lookup_label (yyvsp[-1].ttype);
		  TREE_USED (decl) = 1;
		  expand_goto (decl); ;
    break;}
case 261:

{ tree label = define_label (input_filename, lineno, yyvsp[-1].ttype);
		  emit_nop ();
		  if (label)
		    expand_label (label); ;
    break;}
case 264:

{
		  emit_line_note (input_filename, lineno); ;
    break;}
case 265:

{
		  emit_line_note (input_filename, lineno); ;
    break;}
case 266:

{ yyval.ttype = NULL_TREE; ;
    break;}
case 268:

{ yyval.ttype = NULL_TREE; ;
    break;}
case 271:

{ yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
    break;}
case 272:

{ yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
    break;}
case 273:

{ yyval.ttype = tree_cons (NULL_TREE, combine_strings (yyvsp[0].ttype), NULL_TREE); ;
    break;}
case 274:

{ yyval.ttype = tree_cons (NULL_TREE, combine_strings (yyvsp[0].ttype), yyvsp[-2].ttype); ;
    break;}
case 275:

{ pushlevel (0);
		  declare_parm_level (); ;
    break;}
case 276:

{ yyval.ttype = yyvsp[0].ttype;
		  parmlist_tags_warning ();
		  poplevel (0, 0, 0); ;
    break;}
case 277:

{ pushlevel (0);
		  declare_parm_level (); ;
    break;}
case 278:

{ yyval.ttype = yyvsp[0].ttype;
		  parmlist_tags_warning ();
		  poplevel (0, 0, 0); ;
    break;}
case 280:

{ yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, yyvsp[-1].ttype); ;
    break;}
case 281:

{ yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE); ;
    break;}
case 283:

{ yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE); ;
    break;}
case 284:

{ yyval.ttype = get_parm_info (0); ;
    break;}
case 285:

{ yyval.ttype = get_parm_info (1); ;
    break;}
case 286:

{ yyval.ttype = get_parm_info (0); ;
    break;}
case 287:

{ push_parm_decl (yyvsp[0].ttype); ;
    break;}
case 288:

{ push_parm_decl (yyvsp[0].ttype); ;
    break;}
case 289:

{ yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype)	; ;
    break;}
case 290:

{ yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype)	; ;
    break;}
case 291:

{ yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
    break;}
case 292:

{ yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype)	; ;
    break;}
case 293:

{ yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
    break;}
case 294:

{ yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
    break;}
case 295:

{ yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
    break;}
}
   /* the action file gets copied in in place of this dollarsign */


  yyvsp -= yylen;
  yyssp -= yylen;
#ifdef YYLSP_NEEDED
  yylsp -= yylen;
#endif

#if YYDEBUG != 0
  if (yydebug)
    {
      short *ssp1 = yyss - 1;
      fprintf (stderr, "state stack now");
      while (ssp1 != yyssp)
	fprintf (stderr, " %d", *++ssp1);
      fprintf (stderr, "\n");
    }
#endif

  *++yyvsp = yyval;

#ifdef YYLSP_NEEDED
  yylsp++;
  if (yylen == 0)
    {
      yylsp->first_line = yylloc.first_line;
      yylsp->first_column = yylloc.first_column;
      yylsp->last_line = (yylsp-1)->last_line;
      yylsp->last_column = (yylsp-1)->last_column;
      yylsp->text = 0;
    }
  else
    {
      yylsp->last_line = (yylsp+yylen-1)->last_line;
      yylsp->last_column = (yylsp+yylen-1)->last_column;
    }
#endif

  /* Now "shift" the result of the reduction.
     Determine what state that goes to,
     based on the state we popped back to
     and the rule number reduced by.  */

  yyn = yyr1[yyn];

  yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
  if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
    yystate = yytable[yystate];
  else
    yystate = yydefgoto[yyn - YYNTBASE];

  goto yynewstate;

yyerrlab:   /* here on detecting error */

  if (! yyerrstatus)
    /* If not already recovering from an error, report this error.  */
    {
      ++yynerrs;

#ifdef YYERROR_VERBOSE
      yyn = yypact[yystate];

      if (yyn > YYFLAG && yyn < YYLAST)
	{
	  int size = 0;
	  char *msg;
	  int x, count;

	  count = 0;
	  for (x = 0; x < (sizeof(yytname) / sizeof(char *)); x++)
	    if (yycheck[x + yyn] == x)
	      size += strlen(yytname[x]) + 15, count++;
	  msg = (char *) xmalloc(size + 15);
	  strcpy(msg, "文法違反 ");

	  if (count < 5)
	    {
	      count = 0;
	      for (x = 0; x < (sizeof(yytname) / sizeof(char *)); x++)
		if (yycheck[x + yyn] == x)
		  {
		    strcat(msg, count == 0 ? ", expecting `" : " or `");
		    strcat(msg, yytname[x]);
		    strcat(msg, "'");
		    count++;
		  }
	    }
	  yyerror(msg);
	  free(msg);
	}
      else
#endif /* YYERROR_VERBOSE */
	yyerror("文法違反 ");
    }

yyerrlab1:   /* here on error raised explicitly by an action */

  if (yyerrstatus == 3)
    {
      /* if just tried and failed to reuse lookahead token after an error, discard it.  */

      /* return failure if at end of input */
      if (yychar == YYEOF)
	YYABORT;

#if YYDEBUG != 0
      if (yydebug)
	fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
#endif

      yychar = YYEMPTY;
    }

  /* Else will try to reuse lookahead token
     after shifting the error token.  */

  yyerrstatus = 3;		/* Each real token shifted decrements this */

  goto yyerrhandle;

yyerrdefault:  /* current state does not do anything special for the error token. */

#if 0
  /* This is wrong; only states that explicitly want error tokens
     should shift them.  */
  yyn = yydefact[yystate];  /* If its default is to accept any token, ok.  Otherwise pop it.*/
  if (yyn) goto yydefault;
#endif

yyerrpop:   /* pop the current state because it cannot handle the error token */

  if (yyssp == yyss) YYABORT;
  yyvsp--;
  yystate = *--yyssp;
#ifdef YYLSP_NEEDED
  yylsp--;
#endif

#if YYDEBUG != 0
  if (yydebug)
    {
      short *ssp1 = yyss - 1;
      fprintf (stderr, "Error: state stack now");
      while (ssp1 != yyssp)
	fprintf (stderr, " %d", *++ssp1);
      fprintf (stderr, "\n");
    }
#endif

yyerrhandle:

  yyn = yypact[yystate];
  if (yyn == YYFLAG)
    goto yyerrdefault;

  yyn += YYTERROR;
  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
    goto yyerrdefault;

  yyn = yytable[yyn];
  if (yyn < 0)
    {
      if (yyn == YYFLAG)
	goto yyerrpop;
      yyn = -yyn;
      goto yyreduce;
    }
  else if (yyn == 0)
    goto yyerrpop;

  if (yyn == YYFINAL)
    YYACCEPT;

#if YYDEBUG != 0
  if (yydebug)
    fprintf(stderr, "Shifting error token, ");
#endif

  *++yyvsp = yylval;
#ifdef YYLSP_NEEDED
  *++yylsp = yylloc;
#endif

  yystate = yyn;
  goto yynewstate;
}



/* Return something to represent absolute declarators containing a *.
   TARGET is the absolute declarator that the * contains.
   TYPE_QUALS is a list of modifiers such as const or volatile
   to apply to the pointer type, represented as identifiers.

   We return an INDIRECT_REF whose "contents" are TARGET
   and whose type is the modifier list.  */

static tree
make_pointer_declarator (type_quals, target)
     tree type_quals, target;
{
  return build (INDIRECT_REF, type_quals, target);
}

/* Given a chain of STRING_CST nodes,
   concatenate them into one STRING_CST
   and give it a suitable array-of-chars data type.  */

static tree
combine_strings (strings)
     tree strings;
{
  register tree value, t;
  register int length = 1;
  int wide_length = 0;
  int wide_flag = 0;
  int nchars;
#ifdef __human68k__
  int sx_str_type = TREE_LANG_FLAG_3 (strings);
#endif
  if (TREE_CHAIN (strings))
    {
      /* More than one in the chain, so concatenate.  */
      register char *p, *q;

      /* Don't include the \0 at the end of each substring,
	 except for the last one.
	 Count wide strings and ordinary strings separately.  */
      for (t = strings; t; t = TREE_CHAIN (t))
	{
#ifdef __human68k__
	  if (t != strings && TREE_LANG_FLAG_3 (t))
	    error ("LASCII文字列同士は連結できません");
#endif
	  if (TREE_TYPE (t) == int_array_type_node)
	    {
	      wide_length += (TREE_STRING_LENGTH (t) - UNITS_PER_WORD);
	      wide_flag = 1;
	    }
	  else
	    length += (TREE_STRING_LENGTH (t) - 1);
	}

      /* If anything is wide, the non-wides will be converted,
	 which makes them take more space.  */
      if (wide_flag)
	length = length * UNITS_PER_WORD + wide_length;

      p = (char *) savealloc (length);

      /* Copy the individual strings into the new combined string.
	 If the combined string is wide, convert the chars to ints
	 for any individual strings that are not wide.  */

#ifndef __human68k__
      q = p;
      for (t = strings; t; t = TREE_CHAIN (t))
	{
	  int len = TREE_STRING_LENGTH (t) - 1;
	  if ((TREE_TYPE (t) == int_array_type_node) == wide_flag)
	    {
	      bcopy (TREE_STRING_POINTER (t), q, len);
	      q += len;
	    }
	  else
	    {
	      int i;
	      for (i = 0; i < len; i++)
		((int *) q)[i] = TREE_STRING_POINTER (t)[i];
	      q += len * UNITS_PER_WORD;
	    }
	}
      *q = 0;

      value = make_node (STRING_CST);
      TREE_STRING_POINTER (value) = p;
      TREE_STRING_LENGTH (value) = length;
      TREE_LITERAL (value) = 1;
    }
  else
    {
      value = strings;
      length = TREE_STRING_LENGTH (value);
      if (TREE_TYPE (value) == int_array_type_node)
	wide_flag = 1;
    }
#else
      q = p;
      for (t = strings; t; t = TREE_CHAIN (t))
	{
	  int len = TREE_STRING_LENGTH (t) - 1;
	  if ((TREE_TYPE (t) == int_array_type_node) == wide_flag)
            {
               if (TREE_TYPE (t) == int_array_type_node) {
               	 len -=3;
	         bcopy (TREE_STRING_POINTER (t), q, len);
	       } else
	         bcopy (TREE_STRING_POINTER (t), q, len);
	       q += len;
	    }
	  else
	    {
	      int i;
	      char *tem = q;
	      for (i = 0; i < len; i++) {
	      	if (iskanji ((unsigned char)TREE_STRING_POINTER (t)[i]) &&
	      	    iskanji2 ((unsigned char)TREE_STRING_POINTER (t)[i+1]))
	      	  {
	      	    *tem++ = 0;
	      	    *tem++ = 0;
	      	    *tem++ = TREE_STRING_POINTER (t)[i++];
	      	    *tem++  = TREE_STRING_POINTER (t)[i];
	      	  }
	      	else
	      	  {
	      	    *tem++ = 0;
	      	    *tem++ = 0;
	      	    *tem++ = 0;
	      	    *tem++ = TREE_STRING_POINTER (t)[i];
	      	  }
	      }
	      q += tem - q ;
	    }
	}
      if (wide_flag) {
      	*q ++ =0;
      	*q ++ =0;
      	*q ++ =0;
      	*q ++ =0;
      	length = q - p;
      } else
        *q = 0;
      value = make_node (STRING_CST);
      TREE_STRING_POINTER (value) = p;
      TREE_STRING_LENGTH (value) = length;
      TREE_LITERAL (value) = 1;
    }
  else
    {
      value = strings;
      length = TREE_STRING_LENGTH (value);
      if (TREE_TYPE (value) == int_array_type_node)
	wide_flag = 1;
    }
#endif
  /* Compute the number of elements, for the array type.  */ 
  nchars = wide_flag ? length / UNITS_PER_WORD : length;

  /* Create the array type for the string constant.
     -Wwrite-strings says make the string constant an array of const char
     so that copying it to a non-const pointer will get a warning.  */
  if (warn_write_strings)
    {
      tree elements
	= build_type_variant (wide_flag ? integer_type_node : char_type_node,
			      1, 0);
      TREE_TYPE (value)
	= build_array_type (elements,
			    build_index_type (build_int_2 (nchars - 1, 0)));
    }
  else
    TREE_TYPE (value)
      = build_array_type (wide_flag ? integer_type_node : char_type_node,
			  build_index_type (build_int_2 (nchars - 1, 0)));
#ifdef __human68k__
  if (sx_str_type)
    {
      TREE_LANG_FLAG_3(value) = 1;
      if (TREE_STRING_LENGTH (value) - 2 > 255)
        error ("LASCII文字列は255文字までです");
      else
        *(TREE_STRING_POINTER (value))
        = TREE_STRING_LENGTH (value) - 2;
    }
#endif
  TREE_LITERAL (value) = 1;
  TREE_STATIC (value) = 1;
  return value;
}

FILE *finput;			/* input file.
				   Normally a pipe from the preprocessor.  */

/* lexical analyzer */

static int maxtoken;		/* Current nominal length of token buffer.  */
static char *token_buffer;	/* Pointer to token buffer.
				   Actual allocated length is maxtoken + 2.  */
static int max_wide;		/* Current nominal length of wide_buffer.  */
static int *wide_buffer;	/* Pointer to wide-string buffer.
				   Actual allocated length is max_wide + 1.  */

/* Nonzero if end-of-file has been seen on input.  */
static int end_of_file;

/* Buffered character to reread.
   I'm not sure why ungetc is not used.  */
static int nextchar = -1;

/* C code produced by gperf version 2.3 (GNU C++ version) */
/* Command-line: Z:\gperf.x -p -j1 -i 1 -g -o -t -N is_reserved_word -k2,3,$ gcc.gpe  */
/* Command-line: gperf -p -j1 -i 1 -g -o -t -N is_reserved_word -k1,3,$ c-parse.gperf  */ 
struct resword { char *name; short token; enum rid rid; };

#define TOTAL_KEYWORDS 82
#define MIN_WORD_LENGTH 2
#define MAX_WORD_LENGTH 13
#define MIN_HASH_VALUE 4
#define MAX_HASH_VALUE 145
#define NORID RID_UNUSED
/* maximum key range = 142, duplicates = 0 */

#ifdef __GNUC__
inline
#endif
static unsigned int
hash (str, len)
     register char *str;
     register int unsigned len;
{
  static unsigned char asso_values[] =
    {
     146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
     146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
     146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
     146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
     146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
     146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
     146, 146, 146, 146, 146, 146, 146,   1,  14, 146,
     146, 146, 146, 146, 146, 146,   1, 146, 146,   7,
     146, 146, 146,   5, 146, 146, 146, 146,   1, 146,
     146, 146, 146, 146, 146,   1, 146,  68, 146,  61,
      47,  20,  29,  17,  15,   6, 146,   2,  21,  17,
      27,   1,  58, 146,   2,  50,   1,  74,  47,   3,
       6,   5,   2, 146, 146, 146, 146, 146,
    };
  register int hval = len;

  switch (hval)
    {
      default:
      case 3:
        hval += asso_values[str[2]];
      case 2:
        hval += asso_values[str[1]];
    }
  return hval + asso_values[str[len - 1]];
}

static struct resword wordlist[] =
  {
    {"do",  DO, NORID},
    {"",}, {"",}, 
    {"goto",  GOTO, NORID},
    {"for",  FOR, NORID},
    {"SXCALL",  SCSPEC, RID_DOSCALL},
    {"struct",  STRUCT, NORID},
    {"",}, {"",}, 
    {"__typeof__",  TYPEOF, NORID},
    {"__remote__",  SCSPEC, RID_REMOTE},
    {"__SXCALL",  SCSPEC, RID_DOSCALL},
    {"__relocate__",  SCSPEC, RID_RELOCATE},
    {"__SXCALL__",  SCSPEC, RID_DOSCALL},
    {"__inline__",  SCSPEC, RID_INLINE},
    {"__interrupt",  SCSPEC, RID_INTERRUPT},
    {"DOSCALL",  SCSPEC, RID_DOSCALL},
    {"__interrupt__",  SCSPEC, RID_INTERRUPT},
    {"short",  TYPESPEC, RID_SHORT},
    {"",}, {"",}, 
    {"__DOSCALL",  SCSPEC, RID_DOSCALL},
    {"",}, 
    {"__DOSCALL__",  SCSPEC, RID_DOSCALL},
    {"float",  TYPESPEC, RID_FLOAT},
    {"break",  BREAK, NORID},
    {"switch",  SWITCH, NORID},
    {"__remote",  SCSPEC, RID_REMOTE},
    {"int",  TYPESPEC, RID_INT},
    {"__relocate",  SCSPEC, RID_RELOCATE},
    {"const",  TYPE_QUAL, RID_CONST},
    {"__inline",  SCSPEC, RID_INLINE},
    {"__near",  -1,  NORID},
    {"__far",  -1, NORID},
    {"interrupt",  SCSPEC, RID_INTERRUPT},
    {"__typeof",  TYPEOF, NORID},
    {"extern",  SCSPEC, RID_EXTERN},
    {"",}, 
    {"__huge",  -1, NORID},
    {"sizeof",  SIZEOF, NORID},
    {"",}, {"",}, 
    {"while",  WHILE, NORID},
    {"register",  SCSPEC, RID_REGISTER},
    {"",}, 
    {"long",  TYPESPEC, RID_LONG},
    {"volatile",  TYPE_QUAL, RID_VOLATILE},
    {"common", SCSPEC, RID_COMMON},
    {"",}, {"",}, 
    {"return",  RETURN, NORID},
    {"",}, 
    {"continue",  CONTINUE, NORID},
    {"default",  DEFAULT, NORID},
    {"void",  TYPESPEC, RID_VOID},
    {"",}, 
    {"if",  IF, NORID},
    {"__volatile__",  TYPE_QUAL, RID_VOLATILE},
    {"__signed__",  TYPESPEC, RID_SIGNED},
    {"remote",  SCSPEC, RID_REMOTE},
    {"",}, 
    {"union",  UNION, NORID},
    {"__pcr",  SCSPEC, RID_PCR},
    {"__pcr__",  SCSPEC, RID_PCR},
    {"pcr",  SCSPEC, RID_PCR},
    {"relocate",  SCSPEC, RID_RELOCATE},
    {"__const",  TYPE_QUAL, RID_CONST},
    {"",}, 
    {"__const__",  TYPE_QUAL, RID_CONST},
    {"__common__", SCSPEC, RID_COMMON},
    {"inline",  SCSPEC, RID_INLINE},
    {"far",  -1,  NORID},
    {"signed",  TYPESPEC, RID_SIGNED},
    {"__asm__",  ASM, NORID},
    {"__volatile",  TYPE_QUAL, RID_VOLATILE},
    {"",}, 
    {"auto",  SCSPEC, RID_AUTO},
    {"__alignof__",  ALIGNOF, NORID},
    {"",}, 
    {"__attribute__",  ATTRIBUTE, NORID},
    {"",}, {"",}, {"",}, 
    {"asm",  ASM, NORID},
    {"__pascal",  -1, NORID},
    {"char",  TYPESPEC, RID_CHAR},
    {"__cdecl",  -1, NORID},
    {"__asm",  ASM, NORID},
    {"",}, 
    {"cdecl",  -1, NORID},
    {"near",  -1,  NORID},
    {"else",  ELSE, NORID},
    {"",}, 
    {"__common", SCSPEC, RID_COMMON},
    {"typeof",  TYPEOF, NORID},
    {"typedef",  SCSPEC, RID_TYPEDEF},
    {"__attribute",  ATTRIBUTE, NORID},
    {"double",  TYPESPEC, RID_DOUBLE},
    {"",}, {"",}, {"",}, {"",}, 
    {"__signed",  TYPESPEC, RID_SIGNED},
    {"__alignof",  ALIGNOF, NORID},
    {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, 
    {"huge",  -1, NORID},
    {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, 
    {"enum",  ENUM, NORID},
    {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, 
    {"unsigned",  TYPESPEC, RID_UNSIGNED},
    {"",}, {"",}, {"",}, 
    {"static",  SCSPEC, RID_STATIC},
    {"",}, {"",}, {"",}, {"",}, {"",}, 
    {"case",  CASE, NORID},
    {"",}, {"",}, 
    {"pascal",  -1, NORID},
  };

#ifdef __GNUC__
//inline
#endif
struct resword *
is_reserved_word (str, len)
     register char *str;
     register unsigned int len;
{
  if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
    {
      register int key = hash (str, len) - MIN_HASH_VALUE;

      if (key <= (MAX_HASH_VALUE - MIN_HASH_VALUE) && key >= 0)
        {
          register char *s = wordlist[key].name;

          if (*s == *str && !strcmp (str + 1, s + 1))
            return &wordlist[key];
        }
    }
  return 0;
}

#ifdef __human68k__
static void
unset_res_word (str)
    char *str;
{
  int i;
  for (i = 0; i < sizeof (wordlist)/sizeof (struct resword); i++)
    if (!strcmp (wordlist[i].name, str))
      wordlist[i].name = "";
}
#endif
/* The elements of `ridpointers' are identifier nodes
   for the reserved type names and storage classes.
   It is indexed by a RID_... value.  */

tree ridpointers[(int) RID_MAX];

static short kanji_id_ok;

int check_newline ();

void
init_lex ()
{

  extern int flag_ansi;

  /* Start it at 0, because check_newline is called at the very beginning
     and will increment it to 1.  */
  lineno = 0;
  kanji_id_ok = (MARIKO_A) ? (! pedantic) : 0;
  maxtoken = 40;
  token_buffer = (char *) xmalloc (maxtoken + 2);
  max_wide = 40;
  wide_buffer = (int *) xmalloc ((max_wide + 1) * UNITS_PER_WORD);

  ridpointers[(int) RID_INT] = get_identifier ("int");
  ridpointers[(int) RID_CHAR] = get_identifier ("char");
  ridpointers[(int) RID_VOID] = get_identifier ("void");
  ridpointers[(int) RID_FLOAT] = get_identifier ("float");
  ridpointers[(int) RID_DOUBLE] = get_identifier ("double");
  ridpointers[(int) RID_SHORT] = get_identifier ("short");
  ridpointers[(int) RID_LONG] = get_identifier ("long");
  ridpointers[(int) RID_UNSIGNED] = get_identifier ("unsigned");
  ridpointers[(int) RID_SIGNED] = get_identifier ("signed");
  ridpointers[(int) RID_INLINE] = get_identifier ("inline");
  ridpointers[(int) RID_CONST] = get_identifier ("const");
  ridpointers[(int) RID_VOLATILE] = get_identifier ("volatile");
  ridpointers[(int) RID_AUTO] = get_identifier ("auto");
  ridpointers[(int) RID_STATIC] = get_identifier ("static");
  ridpointers[(int) RID_EXTERN] = get_identifier ("extern");
  ridpointers[(int) RID_TYPEDEF] = get_identifier ("typedef");
  ridpointers[(int) RID_REGISTER] = get_identifier ("register");
#ifdef __human68k__
  ridpointers[(int) RID_COMMON] = get_identifier ("common");
  ridpointers[(int) RID_REMOTE] = get_identifier ("remote");
  ridpointers[(int) RID_RELOCATE] = get_identifier ("relocate");
  ridpointers[(int) RID_DOSCALL] = get_identifier ("SXCALL");
  ridpointers[(int) RID_INTERRUPT] = get_identifier ("interrupt");
  ridpointers[(int) RID_PCR] = get_identifier ("pcr");
  {
    extern int flag_no_sx;
    extern int flag_pic;
    if (!flag_no_sx)
      {
        unset_res_word ("DOSCALL");
        unset_res_word ("__DOSCALL");
        unset_res_word ("__DOSCALL__");
      }
    else
      {
      	ridpointers[(int) RID_DOSCALL] = get_identifier ("DOSCALL");
        if (!flag_pic)
          {
	    unset_res_word ("remote");
	    unset_res_word ("__remote__");
	    unset_res_word ("__remote");
	    unset_res_word ("relocate");
	    unset_res_word ("__relocate__");
	    unset_res_word ("__relocate");
	    unset_res_word ("common");
	    unset_res_word ("__common__");
	    unset_res_word ("__common");
	  }
	unset_res_word ("SXCALL");
	unset_res_word ("__SXCALL__");
	unset_res_word ("__SXCALL");
      }
    if (pedantic || flag_ansi)
      {
        unset_res_word ("remote");
        unset_res_word ("relocate");
        unset_res_word ("common");
        unset_res_word ("SXCALL");
        unset_res_word ("DOSCALL");
        unset_res_word ("asm");
        unset_res_word ("inline");
        unset_res_word ("typeof");
        unset_res_word ("interrupt");
        unset_res_word ("pcr");
        unset_res_word ("huge");
        unset_res_word ("far");
        unset_res_word ("near");
        unset_res_word ("cdecl");
        unset_res_word ("pascal");
      }
    if (!flag_dos)
      {
        int i;
        for (i = 0; i < sizeof (wordlist)/sizeof (struct resword); i++)
          if (wordlist[i].token < 0)
            wordlist[i].name = "";
      }
  }
#endif
}

static void
reinit_parse_for_function ()
{
}

/* If C is not whitespace, return C.
   Otherwise skip whitespace and return first nonwhite char read.  */

static int
skip_white_space (c)
     register int c;
{
#if 0
  register int inside;
#endif

  for (;;)
    {
      switch (c)
	{
	  /* Don't recognize comments in cc1: all comments are removed by cpp,
	     and cpp output can include / and * consecutively as operators.  */
#if 0
	case '/':
	  c = getc (finput);
	  if (c != '*')
	    {
	      ungetc (c, finput);
	      return '/';
	    }

	  c = getc (finput);

	  inside = 1;
	  while (inside)
	    {
	      if (c == '*')
		{
		  while (c == '*')
		    c = getc (finput);

		  if (c == '/')
		    {
		      inside = 0;
		      c = getc (finput);
		    }
		}
	      else if (c == '\n')
		{
		  lineno++;
		  c = getc (finput);
		}
	      else if (c == EOF)
		{
		  error ("unterminated comment");
		  break;
		}
	      else
		c = getc (finput);
	    }

	  break;
#endif

	case '\n':
	  c = check_newline ();
	  break;

	case ' ':
	case '\t':
	case '\f':
	case '\r':
	case '\v':
	case '\b':
	  c = getc (finput);
	  break;

	case '\\':
	  c = getc (finput);
	  if (c == '\n')
	    lineno++;
	  else
	    error ("違法な'\\'です");
	  c = getc (finput);
	  break;

	default:
	  return (c);
	}
    }
}



/* Make the token buffer longer, preserving the data in it.
   P should point to just beyond the last valid character in the old buffer.
   The value we return is a pointer to the new buffer
   at a place corresponding to P.  */

static char *
extend_token_buffer (p)
     char *p;
{
  int offset = p - token_buffer;

  maxtoken = maxtoken * 2 + 10;
  token_buffer = (char *) xrealloc (token_buffer, maxtoken + 2);

  return token_buffer + offset;
}


static char *
trace_malloc_p ()
{
#ifdef NATIVE_68000
  struct _mem {
    int *dum0;
    int *dum1;
    struct _mem *next;
  } *t;
  asm ("move.l MALLOCP,%0"::"r"(t));
  while ( t -> next != 0)
    t = t -> next;
  if ((unsigned int) (t -> dum1) > 0xffffff)
    return (char *) (t + 1);
  else
    return (char *) (t -> dum1);
#else
printf("trace_malloc_p\n needs to be patched up, what is it?\n");
exit(0);
#endif
}

void dump_data()
{
  int _PSP;	//was extern
  int my_edata;	//was extern
  extern int readdump;
  extern char *dump_source_name;
  extern FILE *asm_out_file;

  struct INF {
    int *PSP;
    int *PSTA;
    int *PEND;
    int *DSTA;
    int *DEND;
    int *BSTA;
    int *BEND;
    int *SSTA;
    int *SEND;
    int *HSTA;
    int *HDEF;
    int *HEND;
    int *MALLOCP;
  };

  int new;
  char dump_file_name[256];	/* Fixed-sized buffer -- sigh. */
  char *start_of_data, *end_of_heap;
  int data_size, token, size;
  struct INF *inf_ptr;
  register int c;

  if (readdump)
    return;

  /* Here we have just seen `#pragma dump '.
     The name to dump to, a string constant, may follow.  */

  do
    c = getc (finput);
  while (c == ' ' || c == '\t');

  /* If no argument, default to something like "dumped_cc1plus.bin".  */
  if (c == '\n')
    {
      char *tmp;
      strcpy (dump_file_name, "Cdump.bin");
    }
  else
    {
      ungetc (c, finput);
      token = yylex ();
      if (nextchar >= 0)
	ungetc (nextchar, finput), nextchar = -1;
      if (token != STRING
	  || TREE_CODE (yylval.ttype) != STRING_CST)
	{
	  error ("不正な#pragma dumpです");
	  return;
	}

      strcpy (dump_file_name, TREE_STRING_POINTER (yylval.ttype));
    }
  /* fclose free file buffer */
  fclose (finput);
  fclose (asm_out_file);
  /* reinit time for datareloc.x */
  {
    extern int parse_time;
    extern int varconst_time;
    extern int integration_time;
    extern int jump_time;
    extern int cse_time;
    extern int loop_time;
    extern int flow_time;
    extern int combine_time;
    extern int local_alloc_time;
    extern int global_alloc_time;
    extern int dbr_sched_time;
    extern int final_time;
    extern int symout_time;
    extern int dump_time;
    parse_time = 0;
    varconst_time = 0;
    integration_time = 0;
    jump_time = 0;
    cse_time = 0;
    loop_time = 0;
    flow_time = 0;
    combine_time = 0;
    local_alloc_time = 0;
    global_alloc_time = 0;
    dbr_sched_time = 0;
    final_time = 0;
    symout_time = 0;
    dump_time = 0;
  }
  inf_ptr = (struct INF *) &_PSP;
  end_of_heap = trace_malloc_p ();

  printf("Write total size = %d\n", size = (int)end_of_heap - (int)&my_edata);

  new = _dos_create (dump_file_name, 0x20);

  if (new <0)
    {
      error ("Dumpファイルを作れません %s", dump_file_name);
      return;
    }
  data_size  = _dos_write (new, (void *)inf_ptr, sizeof (struct INF));
  data_size += _dos_write (new, (void *)& size, sizeof (int));
  data_size += _dos_write (new, (void *)&my_edata, (int)end_of_heap - (int)&my_edata);
  if (data_size != (int)end_of_heap - (int)&my_edata + sizeof (struct INF) + sizeof(int))
    {
      error ("Dumpファイル書出しに失敗しました");
      _dos_close (new);
      return;
    }
  _dos_close (new);
  abort ();
}

/* At the beginning of a line, increment the line number
   and process any #-directive on this line.
   If the line is a #-directive, read the entire line and return a newline.
   Otherwise, return the line's first non-whitespace character.  */

static void
do_pragma ()
{
  int c;
  int i;
  char token0[48];
  char token1[16];

  /* skip white spaces */
  do
    c = getc (finput);
  while (c == ' ' || c == '\t');

  i = 0;
  token0[i++] = c;
  while (!(c == ' ' || c == '\t' || c == '\n') && i < 48)
    {
      c = getc (finput);
      token0[i++] = c;
    }
  token0[i - 1] = '\0';
  ungetc (c, finput);

  /* long pragma is unknown, just return */
  if (i >= 48)
    return;

  if (!strcmp (token0, "dump"))
    {
      /* #pragma dump do !! */
      ungetc (c, finput);
      dump_data();
      return;
    }
  else if (!strcmp (token0, "block"))
    {
      /* do block profiler */
      extern int profile_block_flag;
      extern int pragma_profile_block_flag;
      pragma_profile_block_flag = 1;
      profile_block_flag = profile_block_flag ? 0 : 1;
      return;
    }
  else if (!strcmp (token0, "noprofiler"))
    {
       extern int profile_flag;
       static char old_profile;
       static char invert;
       invert = invert ? 0 : 1;
       if (invert)
         {
           old_profile = profile_flag;
           profile_flag = 0;
         }
       else
         profile_flag = old_profile;
    }
  else
    {
      extern struct { char *str; int val;} target_switches [];
      extern struct { char *str; int *varptr; int val;} f_options[];
      extern int target_flags;
      int on_off;

      /* skip white spaces */
      do
        c = getc (finput);
      while (c == ' ' || c == '\t');

      i = 0;
      token1[i++] = c;
      while (!(c == ' ' || c == '\t' || c == '\n') && i < 16)
        {
          c = getc (finput);
          token1[i++] = c;
        }
      token1[i - 1] = '\0';
      ungetc (c, finput);

      if (!strcmp (token1, "on"))
        on_off = 1;
      else if (!strcmp (token1, "off"))
        on_off = 0;
      else
        return;

      for (i = 0; target_switches[i].str[0]; i++)
        if (!strcmp (token0, target_switches[i].str))
          {
            int val = target_switches[i].val;
            val = val > 0 ? val : -val;
            if (on_off)
              target_flags |= val;
            else
              target_flags &= ~val;
	    /*  -m68881 modyfied init_optabs call !! */
            init_optabs ();
            /*  -mshort modyfied trans int size !!   */
            val = INT_TYPE_SIZE;
            TYPE_PRECISION (integer_type_node) = val;
            TYPE_PRECISION (unsigned_type_node) = val;
            return;
          }

      for (i = 0; i < 31; i++)
        if (!strcmp (token0, f_options[i].str))
          {
            *f_options[i].varptr = on_off;
            return;
          }
    }
}

int
check_newline ()
{
  register int c;
  register int token;

  lineno++;

  /* Read first nonwhite char on the line.  */

  c = getc (finput);
  while (c == ' ' || c == '\t')
    c = getc (finput);

  if (c != '#')
    {
      /* If not #, return it so caller will use it.  */
      return c;
    }

  /* Read first nonwhite char after the `#'.  */

  c = getc (finput);
  while (c == ' ' || c == '\t')
    c = getc (finput);

  /* If a letter follows, then if the word here is `line', skip
     it and ignore it; otherwise, ignore the line, with an error
     if the word isn't `pragma'.  */

  if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))
    {
      if (c == 'p')
	{
	  if (getc (finput) == 'r'
	      && getc (finput) == 'a'
	      && getc (finput) == 'g'
	      && getc (finput) == 'm'
	      && getc (finput) == 'a'
	      && ((c = getc (finput)) == ' ' || c == '\t' || c == '\n'))
	    {
	      do_pragma ();
	      goto skipline;
	    }
	}
      else if (c == 'l')
	{
	  if (getc (finput) == 'i'
	      && getc (finput) == 'n'
	      && getc (finput) == 'e'
	      && ((c = getc (finput)) == ' ' || c == '\t'))
	    goto linenum;
	}
      else if (c == 'i')
	{
	  if (getc (finput) == 'd'
	      && getc (finput) == 'e'
	      && getc (finput) == 'n'
	      && getc (finput) == 't'
	      && ((c = getc (finput)) == ' ' || c == '\t'))
	    {
	      extern FILE *asm_out_file;

	      if (pedantic)
		error ("ANSI C does not allow #ident");

	      /* Here we have just seen `#ident '.
		 A string constant should follow.  */

	      while (c == ' ' || c == '\t')
		c = getc (finput);

	      /* If no argument, ignore the line.  */
	      if (c == '\n')
		return c;

	      ungetc (c, finput);
	      token = yylex ();
	      if (nextchar >= 0)
		ungetc (nextchar, finput), nextchar = -1;
	      if (token != STRING
		  || TREE_CODE (yylval.ttype) != STRING_CST)
		{
		  error ("invalid #ident");
		  goto skipline;
		}

#ifdef ASM_OUTPUT_IDENT
	      ASM_OUTPUT_IDENT (asm_out_file, TREE_STRING_POINTER (yylval.ttype));
#endif

	      /* Skip the rest of this line.  */
	      goto skipline;
	    }
	}

      error ("undefined or invalid # directive");	
      goto skipline;
    }

linenum:
  /* Here we have either */
  /*   In either case, it should be a line number; a digit should follow.  */

  while (c == ' ' || c == '\t')
    c = getc (finput);

  /* If the # is the only nonwhite char on the line,
     just ignore it.  Check the new newline.  */
  if (c == '\n')
    return c;

  /* Something follows the #; read a token.  */

  ungetc (c, finput);
  token = yylex ();
  if (nextchar >= 0)
    ungetc (nextchar, finput), nextchar = -1;
  if (token == CONSTANT
      && TREE_CODE (yylval.ttype) == INTEGER_CST)
    {
      int old_lineno = lineno;
      /* subtract one, because it is the following line that
	 gets the specified number */

      int l = TREE_INT_CST_LOW (yylval.ttype) - 1;

      /* Is this the last nonwhite stuff on the line?  */
      c = getc (finput);
      while (c == ' ' || c == '\t')
	c = getc (finput);
      if (c == '\n')
	{
	  /* No more: store the line number and check following line.  */
	  lineno = l;
	  return c;
	}
      ungetc (c, finput);

      /* More follows: it must be a string constant (filename).  */

      token = yylex ();
      if (nextchar >= 0)
	ungetc (nextchar, finput), nextchar = -1;
      if (token != STRING || TREE_CODE (yylval.ttype) != STRING_CST)
	{
	  error ("invalid #line");
	  goto skipline;
	}

      input_filename
	= (char *) permalloc (TREE_STRING_LENGTH (yylval.ttype) + 1);
      strcpy (input_filename, TREE_STRING_POINTER (yylval.ttype));
      lineno = l;

      if (main_input_filename == 0)
	main_input_filename = input_filename;

      /* Is this the last nonwhite stuff on the line?  */
      c = getc (finput);
      while (c == ' ' || c == '\t')
	c = getc (finput);
      if (c == '\n')
	return c;
      ungetc (c, finput);

      token = yylex ();
      if (nextchar >= 0)
	ungetc (nextchar, finput), nextchar = -1;

      /* `1' after file name means entering new file.
	 `2' after file name means just left a file.  */

      if (token == CONSTANT
	  && TREE_CODE (yylval.ttype) == INTEGER_CST)
	{
	  if (TREE_INT_CST_LOW (yylval.ttype) == 1)
	    {
	      struct file_stack *p
		= (struct file_stack *) xmalloc (sizeof (struct file_stack));
	      input_file_stack->line = old_lineno;
	      p->next = input_file_stack;
	      p->name = input_filename;
	      input_file_stack = p;
	      input_file_stack_tick++;
	    }
	  else if (input_file_stack->next)
	    {
	      struct file_stack *p = input_file_stack;
	      input_file_stack = p->next;
	      free (p);
	      input_file_stack_tick++;
	    }
	  else
	    error ("#-lines for entering and leaving files don't match");
	}
    }
  else
    error ("invalid #-line");

  /* skip the rest of this line.  */
 skipline:
  if (c == '\n')
    return c;
  while ((c = getc (finput)) != EOF && c != '\n');
  return c;
}

#ifndef __human68k__
#define isalnum(char) ((char >= 'a' && char <= 'z') || (char >= 'A' && char <= 'Z') || (char >= '0' && char <= '9'))
#define isdigit(char) (char >= '0' && char <= '9')
#endif
#define ENDFILE -1  /* token that represents end-of-file */


static int
readescape ()
{
  register int c = getc (finput);
  register int count, code;
  int firstdig;

  switch (c)
    {
    case 'x':
      code = 0;
      count = 0;
      while (1)
	{
	  c = getc (finput);
	  if (!(c >= 'a' && c <= 'f')
	      && !(c >= 'A' && c <= 'F')
	      && !(c >= '0' && c <= '9'))
	    {
	      ungetc (c, finput);
	      break;
	    }
	  code *= 16;
	  if (c >= 'a' && c <= 'f')
	    code += c - 'a' + 10;
	  if (c >= 'A' && c <= 'F')
	    code += c - 'A' + 10;
	  if (c >= '0' && c <= '9')
	    code += c - '0';
	  if (count == 0)
	    firstdig = code;
	  count++;
	}
      if (count == 0)
	error ("\\x used with no following hex digits");
      else if ((count - 1) * 4 >= TYPE_PRECISION (integer_type_node)
	       || ((1 << (TYPE_PRECISION (integer_type_node) - (count - 1) * 4))
		   <= firstdig))
	warning ("hex escape out of range");
      return code;

    case '0':  case '1':  case '2':  case '3':  case '4':
    case '5':  case '6':  case '7':
      code = 0;
      count = 0;
      while ((c <= '7') && (c >= '0') && (count++ < 3))
	{
	  code = (code * 8) + (c - '0');
	  c = getc (finput);
	}
      ungetc (c, finput);
      return code;

    case '\\': case '\'': case '"':
      return c;

    case '\n':
      lineno++;
      return -1;

    case 'n':
      return TARGET_NEWLINE;

    case 't':
      return TARGET_TAB;

    case 'r':
      return TARGET_CR;

    case 'f':
      return TARGET_FF;

    case 'b':
      return TARGET_BS;

    case 'a':
      return TARGET_BELL;

    case 'v':
      return TARGET_VT;

    case 'E':
      return 033;

    case '?':
      /* `\(', etc, are used at beginning of line to avoid confusing Emacs.  */
    case '(':
    case '{':
    case '[':
      return c;
    }
  if (c >= 040 && c <= 0177)
    warning ("unknown escape sequence `\\%c'", c);
  else
    warning ("unknown escape sequence: `\\' followed by char code 0x%x", c);
  return c;
}

void
yyerror (string)
     char *string;
{
  char buf[200];

  strcpy (buf, string);

  /* We can't print string and character constants well
     because the token_buffer contains the result of processing escapes.  */
  if (end_of_file)
    strcat (buf, " ファイルエンド");
  else if (token_buffer[0] == 0)
    strcat (buf, " null文字");
  else if (token_buffer[0] == '"')
    strcat (buf, " 文字列");
  else if (token_buffer[0] == '\'')
    strcat (buf, " 文字");
#ifdef __human68k__
  else if (!iskanji ((unsigned char)token_buffer[0])
           && (token_buffer[0] < 040
               || token_buffer[0] >= 0177))
#else
  else if (token_buffer[0] < 040 || token_buffer[0] >= 0177)
#endif
    sprintf (buf + strlen (buf), " 文字 0%o", token_buffer[0]);
  else
    strcat (buf, " 文字 `%s'");

  error_parse (buf, token_buffer);
}


#ifdef __human68k__
int cur_lex_pos;
int cur_lex_line;
#endif

static int
yylex ()
{
  register int c;
  register char *p;
  register int value;
  int wide_flag = 0;
  int kanji_id = 0;

skip_lex:

  if (nextchar >= 0)
    c = nextchar, nextchar = -1;
  else
    c = getc (finput);

  /* Effectively do c = skip_white_space (c)
     but do it faster in the usual cases.  */
  while (1)
    switch (c)
      {
      case ' ':
      case '\t':
      case '\f':
      case '\r':
      case '\v':
      case '\b':
	c = getc (finput);
	break;

      case '\n':
      case '/':
      case '\\':
	c = skip_white_space (c);
      default:
	goto found_nonwhite;
      }
 found_nonwhite:

  token_buffer[0] = c;
  token_buffer[1] = 0;


#ifdef __human68k__
  cur_lex_pos = ftell (finput);
  cur_lex_line = lineno;
  if (iskanji(c))
    {
      kanji_id = 1;
      goto letter;
    }
#endif

/*  yylloc.first_line = lineno; */

  switch (c)
    {
    case EOF:
      end_of_file = 1;
      token_buffer[0] = 0;
      value = ENDFILE;
      break;

    case '$':
      if (dollars_in_ident)
	goto letter;
      return '$';

    case 'L':
      /* Capital L may start a wide-string or wide-character constant.  */
      {
	register int c = getc (finput);
	if (c == '\'')
	  {
	    wide_flag = 1;
	    goto char_constant;
	  }
	if (c == '"')
	  {
	    wide_flag = 1;
	    goto string_constant;
	  }
	ungetc (c, finput);
      }

    case 'A':  case 'B':  case 'C':  case 'D':  case 'E':
    case 'F':  case 'G':  case 'H':  case 'I':  case 'J':
    case 'K':		  case 'M':  case 'N':  case 'O':
    case 'P':  case 'Q':  case 'R':  case 'S':  case 'T':
    case 'U':  case 'V':  case 'W':  case 'X':  case 'Y':
    case 'Z':
    case 'a':  case 'b':  case 'c':  case 'd':  case 'e':
    case 'f':  case 'g':  case 'h':  case 'i':  case 'j':
    case 'k':  case 'l':  case 'm':  case 'n':  case 'o':
    case 'p':  case 'q':  case 'r':  case 's':  case 't':
    case 'u':  case 'v':  case 'w':  case 'x':  case 'y':
    case 'z':
    case '_':
    letter:
      p = token_buffer;
      while (isalnum (c) || iskanji(c) || c == '_' || c == '$')
	{
	  if (p >= token_buffer + maxtoken)
	    p = extend_token_buffer (p);
	  if (c == '$' && ! dollars_in_ident)
	    break;

	  *p++ = c;
#ifdef __human68k__
          if (iskanji(c)) {
          	c = getc (finput);
          	kanji_id = 1;
	        if (p >= token_buffer + maxtoken)
	          p = extend_token_buffer (p);
	        *p ++ = c;
	  }
#endif
	  c = getc (finput);
	}
#ifdef __human68k__
      if (kanji_id)
        {
          if (!kanji_id_ok)
	    warning ("ANSI C Chinese/Kanji characters can not be used to identifier (google xlate)");
	  kanji_id_ok = 1;
	}
#endif

      *p = 0;
      nextchar = c;

      value = IDENTIFIER;
      yylval.itype = 0;

      /* Try to recognize a keyword.  Uses minimum-perfect hash function */

      {
	register struct resword *ptr;

	if (!kanji_id && (ptr = is_reserved_word (token_buffer, p - token_buffer)))
	  {
	    if (ptr->token < 0)
	      goto skip_lex;
	    if (ptr->rid)
	      yylval.ttype = ridpointers[(int) ptr->rid];
	    if ((! flag_no_asm
		 /* -fno-asm means don't recognize the non-ANSI keywords.  */
		 || ((int) ptr->token != ASM
		     && (int) ptr->token != TYPEOF
		     && ptr->rid != RID_INLINE)
		 /* Recognize __asm and __inline despite -fno-asm.  */
		 || token_buffer[0] == '_')
		/* -ftraditional means don't recognize nontraditional keywords
		   typeof, const, volatile, signed or inline.  */
		&& (! flag_traditional
		    || ((int) ptr->token != TYPE_QUAL
			&& (int) ptr->token != TYPEOF
			&& ptr->rid != RID_SIGNED
			&& ptr->rid != RID_INLINE)
		    /* Recognize __inline, etc. despite -ftraditional.  */
		    || token_buffer[0] == '_'))
	      value = (int) ptr->token;
	  }
      }

      /* If we did not find a keyword, look for an identifier
	 (or a typename).  */

      if (value == IDENTIFIER)
	{
          yylval.ttype = get_identifier (token_buffer);
	  lastiddecl = lookup_name (yylval.ttype);

	  if (lastiddecl != 0 && TREE_CODE (lastiddecl) == TYPE_DECL)
	    value = TYPENAME;
	}

      break;

    case '0':  case '1':  case '2':  case '3':  case '4':
    case '5':  case '6':  case '7':  case '8':  case '9':
    case '.':
      {
	int base = 10;
	int count = 0;
	int largest_digit = 0;
	int numdigits = 0;
	/* for multi-precision arithmetic,
	   we store only 8 live bits in each short,
	   giving us 64 bits of reliable precision */
	short shorts[8];
	int overflow = 0;

	enum anon1 { NOT_FLOAT, AFTER_POINT, TOO_MANY_POINTS} floatflag
	  = NOT_FLOAT;

	for (count = 0; count < 8; count++)
	  shorts[count] = 0;

	p = token_buffer;
	*p++ = c;

	if (c == '0')
	  {
	    *p++ = (c = getc (finput));
	    if ((c == 'x') || (c == 'X'))
	      {
		base = 16;
		*p++ = (c = getc (finput));
	      }
	    else if ( MARIKO_A && ((c == 'b') || (c == 'B')))
	      {
	      	base = 2;
		if (pedantic)
	      	  warning ("ＸＣ is an extended expression (google xlate)");
	      	*p++ = (c = getc (finput));
	      }
	    else
	      {
		base = 8;
		numdigits++;
	      }
	  }

	/* Read all the digits-and-decimal-points.  */

	while (c == '.'
	       || (isalnum (c) && (c != 'l') && (c != 'L')
		   && (c != 'u') && (c != 'U')
		   && (floatflag == NOT_FLOAT || ((c != 'f') && (c != 'F')))))
	  {
	    if (c == '.')
	      {
		if (base == 16 || base == 2)
		  error ("浮動小数点表現が違法です");
		if (floatflag == AFTER_POINT)
		  {
		    error ("不適切な浮動小数表現です");
		    floatflag = TOO_MANY_POINTS;
		  }
		else
		  floatflag = AFTER_POINT;

		base = 10;
		*p++ = c = getc (finput);
		/* Accept '.' as the start of a floating-point number
		   only when it is followed by a digit.
		   Otherwise, unread the following non-digit
		   and use the '.' as a structural token.  */
		if (p == token_buffer + 2 && !isdigit (c))
		  {
		    if (c == '.')
		      {
			c = getc (finput);
			if (c == '.')
			  {
			    *p++ = c;
			    *p = 0;
			    return ELLIPSIS;
			  }
			error ("文法違反です at `..'");
		      }
		    ungetc (c, finput);
		    token_buffer[1] = 0;
		    value = '.';
		    goto done;
		  }
	      }
	    else
	      {
		/* It is not a decimal point.
		   It should be a digit (perhaps a hex digit).  */

		if (isdigit (c))
		  {
		    c = c - '0';
		  }
		else if (base <= 10)
		  {
		    if ((c&~040) == 'E')
		      {
			base = 10;
			floatflag = AFTER_POINT;
			break;   /* start of exponent */
		      }
		    error ("数字表現が違法です");
		    c = 0;
		  }
		else if (c >= 'a')
		  {
		    c = c - 'a' + 10;
		  }
		else
		  {
		    c = c - 'A' + 10;
		  }
		if (c >= largest_digit)
		  largest_digit = c;
		numdigits++;

		for (count = 0; count < 8; count++)
		  {
		    shorts[count] *= base;
		    if (count)
		      {
			shorts[count] += (shorts[count-1] >> 8);
			shorts[count-1] &= (1<<8)-1;
		      }
		    else shorts[0] += c;
		  }

		if (shorts[7] >= 1<<8
		    || shorts[7] < - (1 << 8))
		  overflow = TRUE;

		if (p >= token_buffer + maxtoken - 3)
		  p = extend_token_buffer (p);
		*p++ = (c = getc (finput));

		/* On X68000 0b0000_0100 ok */
		if (base == 2 && c == '_')
		  {
		    p--;
		    c = getc (finput);
		    if (c != '0' && c != '1')
		      {
		      	ungetc (c, finput);
		        error ("数字表現が違法です");
		        break;
		      }
		    *p ++ = c;
		  }

	      }
	  }

	if (numdigits == 0)
	  error ("不適切な数字表現です");

	if (largest_digit >= base)
	  error ("数字表現が違法です");

	/* Remove terminating char from the token buffer and delimit the string */
	*--p = 0;

	if (floatflag != NOT_FLOAT)
	  {
	    tree type = double_type_node;
	    char f_seen = 0;
	    char l_seen = 0;
	    REAL_VALUE_TYPE value;

	    /* Read explicit exponent if any, and put it in tokenbuf.  */

	    if ((c == 'e') || (c == 'E'))
	      {
		if (p >= token_buffer + maxtoken - 3)
		  p = extend_token_buffer (p);
		*p++ = c;
		c = getc (finput);
		if ((c == '+') || (c == '-'))
		  {
		    *p++ = c;
		    c = getc (finput);
		  }
		if (! isdigit (c))
		  error ("不適切な浮動小数点表現です");
	        while (isdigit (c))
		  {
		    if (p >= token_buffer + maxtoken - 3)
		      p = extend_token_buffer (p);
		    *p++ = c;
		    c = getc (finput);
		  }
	      }

	    *p = 0;
	    errno = 0;
	    value = REAL_VALUE_ATOF (token_buffer);
#ifdef ERANGE
	    if (errno == ERANGE && !flag_traditional)
	      {
		char *p1 = token_buffer;
		/* Check for "0.0" and variants;
		   Sunos 4 spuriously returns ERANGE for them.  */
		while (*p1 == '0') p1++;
		if (*p1 == '.')
		  {
		    p1++;
		    while (*p1 == '0') p1++;
		  }
		if (*p1 == 'e' || *p1 == 'E')
		  {
		    /* with significand==0, ignore the exponent */
		    p1++;
		    while (*p1 != 0) p1++;
		  }
 		/* ERANGE is also reported for underflow,
 		   so test the value to distinguish overflow from that.  */
 		if (*p1 != 0 && (value > 1.0 || value < 1.0))
  		  warning ("floating point number exceeds range of `double'");
	      }
#endif

	    /* Read the suffixes to choose a data type.  */
	    while (1)
	      {
		if (c == 'f' || c == 'F')
		  {
		    float floater;
		    if (f_seen)
		      error ("`f'が２つ以上あります");
		    f_seen = 1;
		    type = float_type_node;
		    floater = value;
		    value = floater;
		  }
		else if (c == 'l' || c == 'L')
		  {
		    if (l_seen)
		      error ("`l'が２つ以上あります");
		    l_seen = 1;
		    type = long_double_type_node;
		  }
		else
		  {
		    if (isalnum (c))
		      {
			error ("数字末尾が違法です");
			while (isalnum (c))
			  {
			    if (p >= token_buffer + maxtoken - 3)
			      p = extend_token_buffer (p);
			    *p++ = c;
			    c = getc (finput);
			  }
		      }
		    break;
		  }
		if (p >= token_buffer + maxtoken - 3)
		  p = extend_token_buffer (p);
		*p++ = c;
		c = getc (finput);
	      }

	    /* Create a node with determined type and value.  */
	    yylval.ttype = build_real (type, value);

	    ungetc (c, finput);
	    *p = 0;
	  }
	else
	  {
	    tree type;
	    int spec_unsigned = 0;
	    int spec_long = 0;
	    int spec_long_long = 0;

	    while (1)
	      {
		if (c == 'u' || c == 'U')
		  {
		    if (spec_unsigned)
		      error ("two `u's in integer constant");
		    spec_unsigned = 1;
		  }
		else if (c == 'l' || c == 'L')
		  {
		    if (spec_long)
		      {
			if (spec_long_long)
			  error ("three `l's in integer constant");
			else if (pedantic)
			  warning ("ANSI C forbids long long integer constants");
			spec_long_long = 1;
		      }
		    spec_long = 1;
		  }
		else
		  {
		    if (isalnum (c))
		      {
			error ("garbage at end of number");
			while (isalnum (c))
			  {
			    if (p >= token_buffer + maxtoken - 3)
			      p = extend_token_buffer (p);
			    *p++ = c;
			    c = getc (finput);
			  }
		      }
		    break;
		  }
		if (p >= token_buffer + maxtoken - 3)
		  p = extend_token_buffer (p);
		*p++ = c;
		c = getc (finput);
	      }

	    ungetc (c, finput);
#ifndef __human68k__
	    if ((overflow || shorts[7] || shorts[6] || shorts[5] || shorts[4])
		&& !spec_long_long)
#else
	    if (overflow
	        || ((shorts[7] || shorts[6] || shorts[5] || shorts[4])
	             && !spec_long_long))
#endif
	      warning ("integer constant out of range");

	    /* If it won't fit in a signed long long, make it unsigned.
	       We can't distinguish based on the tree node because
	       any integer constant fits any long long type.  */
	    if (shorts[7] >= (1<<8))
	      spec_unsigned = 1;

	    /* This is simplified by the fact that our constant
	       is always positive.  */
	    yylval.ttype
	      = (build_int_2
		 ((shorts[3]<<24) + (shorts[2]<<16) + (shorts[1]<<8) + shorts[0],
		  (spec_long_long
		   ? (shorts[7]<<24) + (shorts[6]<<16) + (shorts[5]<<8) + shorts[4]
		   : 0)));

	    if (!spec_long && !spec_unsigned
		&& int_fits_type_p (yylval.ttype, integer_type_node))
	      type = integer_type_node;

	    else if (!spec_long && (base != 10 || spec_unsigned)
		     && int_fits_type_p (yylval.ttype, unsigned_type_node))
	      type = unsigned_type_node;

	    else if (!spec_unsigned && !spec_long_long
		     && int_fits_type_p (yylval.ttype, long_integer_type_node))
	      type = long_integer_type_node;

	    else if (! spec_long_long
		     && int_fits_type_p (yylval.ttype,
					 long_unsigned_type_node))
	      type = long_unsigned_type_node;

	    else if (! spec_unsigned
		     && int_fits_type_p (yylval.ttype,
					 long_long_integer_type_node))
	      type = long_long_integer_type_node;

	    else if (int_fits_type_p (yylval.ttype,
				      long_long_unsigned_type_node))
	      type = long_long_unsigned_type_node;

	    else
	      {
		type = long_long_integer_type_node;
		warning ("integer constant out of range");
	      }

	    TREE_TYPE (yylval.ttype) = type;
	  }

	value = CONSTANT; break;
      }

    case '\'':
    char_constant:
      {
	register int result = 0;
	register num_chars = 0;
	int width = TYPE_PRECISION (char_type_node);
	int max_chars;

	if (wide_flag) width = TYPE_PRECISION (integer_type_node);

#ifdef __human68k__
	max_chars = TYPE_PRECISION (long_integer_type_node) / width;
#else
	max_chars = TYPE_PRECISION (integer_type_node) / width;
#endif
	
#ifdef __human68k__
        c = getc (finput);
        ungetc (c, finput);
        if (iskanji(c)) {
          if (!wide_flag)  warning ( "We use the constants rather than the kanji (google xlate)");
          wide_flag = 1;
          max_chars = 2;
        }
#endif
	while (1)
	  {
	  tryagain:

	    c = getc (finput);

	    if (c == '\'' || c == EOF)
	      break;

#ifdef __human68k__
	    if (iskanji(c))
	      {
		num_chars++;
		if (num_chars > maxtoken - 4)
		  extend_token_buffer (token_buffer);
		token_buffer[num_chars] = c;
		result |= c << 8;
		c = getc (finput);	/* read 2nd byte */
		result |=c;
		num_chars++;
		if (num_chars > maxtoken - 4)
		  extend_token_buffer (token_buffer);
		token_buffer[num_chars] = c;
		continue;
	      }
	    else
#endif
	    if (c == '\\')
	      {
		c = readescape ();
		if (c < 0)
		  goto tryagain;
		if (width < HOST_BITS_PER_INT
		    && (unsigned) c >= (1 << width))
		  warning ("escape sequence out of range for character");
	      }
	    else if (c == '\n')
	      {
		if (pedantic)
		  warning ("ANSI C forbids newline in character constant");
		lineno++;
	      }

	    num_chars++;
	    if (num_chars > maxtoken - 4)
	      extend_token_buffer (token_buffer);

	    token_buffer[num_chars] = c;

	    /* Merge character into result; ignore excess chars.  */
	    if (num_chars < max_chars + 1)
	      {
		if (width < HOST_BITS_PER_INT)
		  result = (result << width) | (c & ((1 << width) - 1));
		else
		  result = c;
	      }
	  }

	token_buffer[num_chars + 1] = '\'';
	token_buffer[num_chars + 2] = 0;

	if (c != '\'')
	  error ("malformatted character constant");
	else if (num_chars == 0)
	  error ("empty character constant");
	else if (num_chars > max_chars)
	  {
	    num_chars = max_chars;
	    error ("character constant too long");
	  }
	else if (! wide_flag && num_chars != 1 && ! flag_traditional)
#ifdef __human68k__
	  if (!(MARIKO_A) || pedantic)
	    warning ("multi-character character constant");
#else
	  warning ("multi-character character constant");
#endif
	/* If char type is signed, sign-extend the constant.  */
	if (! wide_flag )
	  {
	    int num_bits = num_chars * width;
	    if (TREE_UNSIGNED (char_type_node)
		|| ((result >> (num_bits - 1)) & 1) == 0)
	      yylval.ttype
		= build_int_2 (result & ((unsigned) ~0
					 >> (HOST_BITS_PER_INT - num_bits)),
			       0);
	    else
	      yylval.ttype
		= build_int_2 (result | ~((unsigned) ~0
					  >> (HOST_BITS_PER_INT - num_bits)),
			       -1);
	  }
	else
	  yylval.ttype = build_int_2 (result, 0);
#ifdef __human68k__
	if (num_chars > 2
	    && TYPE_PRECISION (integer_type_node) == 16)
	  TREE_TYPE (yylval.ttype) = long_integer_type_node;
	else
	  TREE_TYPE (yylval.ttype) = integer_type_node;
#else
	TREE_TYPE (yylval.ttype) = integer_type_node;
#endif
	value = CONSTANT; break;
      }

    case '"':
    string_constant:
      {
	int *widep;
#ifdef __human68k__
	int str_top = 1;
	int str_sx_type = 0;
	extern int flag_no_sx;
#endif
	c = getc (finput);
	p = token_buffer + 1;

	if (wide_flag)
	  widep = wide_buffer;

	while (c != '"' && c >= 0)
	  {
#ifdef __human68k__
	    if (iskanji(c))
	      {
	        c = ((c & 0x00ff) << 8) | (getc(finput) & 0x00ff);
	      }
	    else
#endif
	    if (c == '\\')
	      {
#ifdef __human68k__
	      	if (str_top && !flag_no_sx)
		  if ((c = getc (finput)) == '@')
		    {
		      if (wide_flag)
		        error ("You can not use the wide characters in the ASCII string (google xlate)");
		      str_sx_type = 1;
		      /* This space for string length */
		      *p++ = '\0';
		      goto skipnewline;
		    }
		  else
		    ungetc (c, finput);
#endif
		c = readescape ();
		if (c < 0)
		  goto skipnewline;
		if (!wide_flag && c >= (1 << TYPE_PRECISION (char_type_node)))
		  warning ("escape sequence out of range for character");
	      }
	    else if (c == '\n')
	      {
		if (pedantic)
		  warning ("ANSI C forbids newline in string constant");
		lineno++;
	      }
#ifdef __human68k__
	    str_top = 0;
#endif
	    /* Store the char in C into the appropriate buffer.  */

	    if (wide_flag)
	      {
		if (widep == wide_buffer + max_wide)
		  {
		    int n = widep - wide_buffer;
		    max_wide *= 2;
		    wide_buffer =
		      (int *) xrealloc (wide_buffer,
		                        (max_wide + 1) * UNITS_PER_WORD);
		    widep = wide_buffer + n;
		  }
		*widep++ = c;
	      }
	    else
	      {
#ifdef __human68k__
		if (c >= 0x0100) {	/* kanji code ? */
		  if (p >= token_buffer + maxtoken - 1)
		    p = extend_token_buffer (p);
		  *p++ = c >> 8;	/* store high byte */
		} else
#endif
		if (p == token_buffer + maxtoken)
		  p = extend_token_buffer (p);
		*p++ = c;
	      }

	  skipnewline:
#ifdef __human68k__
	    str_top = 0;
#endif
	    c = getc (finput);
	  }

	/* We have read the entire constant.
	   Construct a STRING_CST for the result.  */

	if (wide_flag)
	  {
	    /* If this is a L"..." wide-string, make a vector
	       of the ints in wide_buffer.  */
	    *widep = 0;
	    /* We have not implemented the case where `int'
	       on the target and on the execution machine differ in size.  */
#ifdef __human68k__
	    if (TYPE_PRECISION (integer_type_node)
		!= sizeof (int) * BITS_PER_UNIT)
	      {
	        int *top = wide_buffer;
	        short *conv = (short *)wide_buffer;
	        while (top < widep)
	          *conv ++ = *top ++;
	        *conv = *top;
	        widep = (int *)conv;
	      }
	    yylval.ttype
	      = build_string ((char *) widep
	      		       - (char *) wide_buffer
	      		       + TYPE_PRECISION (integer_type_node)/BITS_PER_UNIT,
			      wide_buffer);
#else
	    if (TYPE_PRECISION (integer_type_node)
		!= sizeof (int) * BITS_PER_UNIT)
	      abort ();
	    yylval.ttype
	      = build_string ((widep - wide_buffer + 1) * sizeof (int),
			      wide_buffer);
#endif
	    TREE_TYPE (yylval.ttype) = int_array_type_node;
	  }
	else
	  {
	    *p = 0;
	    yylval.ttype = build_string (p - token_buffer, token_buffer + 1);
	    TREE_TYPE (yylval.ttype) = char_array_type_node;
	  }

	*p++ = '"';
	*p = 0;
#ifdef __human68k__
	if (str_sx_type)
	  {
	    TREE_LANG_FLAG_3(yylval.ttype) = 1;
	    if (TREE_STRING_LENGTH (yylval.ttype) - 2 > 255)
	      error ("ASCII string can be up to 255 characters (google xlate)");
	    else
	      *(TREE_STRING_POINTER (yylval.ttype))
	      = TREE_STRING_LENGTH (yylval.ttype) - 2;
	  }
#endif
	value = STRING; break;
      }

    case '+':
    case '-':
    case '&':
    case '|':
    case '<':
    case '>':
    case '*':
    case '/':
    case '%':
    case '^':
    case '!':
    case '=':
      {
	register int c1;

      combine:

	switch (c)
	  {
	  case '+':
	    yylval.code = PLUS_EXPR; break;
	  case '-':
	    yylval.code = MINUS_EXPR; break;
	  case '&':
	    yylval.code = BIT_AND_EXPR; break;
	  case '|':
	    yylval.code = BIT_IOR_EXPR; break;
	  case '*':
	    yylval.code = MULT_EXPR; break;
	  case '/':
	    yylval.code = TRUNC_DIV_EXPR; break;
	  case '%':
	    yylval.code = TRUNC_MOD_EXPR; break;
	  case '^':
	    yylval.code = BIT_XOR_EXPR; break;
	  case LSHIFT:
	    yylval.code = LSHIFT_EXPR; break;
	  case RSHIFT:
	    yylval.code = RSHIFT_EXPR; break;
	  case '<':
	    yylval.code = LT_EXPR; break;
	  case '>':
	    yylval.code = GT_EXPR; break;
	  }

	token_buffer[1] = c1 = getc (finput);
	token_buffer[2] = 0;

	if (c1 == '=')
	  {
	    switch (c)
	      {
	      case '<':
		value = ARITHCOMPARE; yylval.code = LE_EXPR; goto done;
	      case '>':
		value = ARITHCOMPARE; yylval.code = GE_EXPR; goto done;
	      case '!':
		value = EQCOMPARE; yylval.code = NE_EXPR; goto done;
	      case '=':
		value = EQCOMPARE; yylval.code = EQ_EXPR; goto done;
	      }
	    value = ASSIGN; goto done;
	  }
	else if (c == c1)
	  switch (c)
	    {
	    case '+':
	      value = PLUSPLUS; goto done;
	    case '-':
	      value = MINUSMINUS; goto done;
	    case '&':
	      value = ANDAND; goto done;
	    case '|':
	      value = OROR; goto done;
	    case '<':
	      c = LSHIFT;
	      goto combine;
	    case '>':
	      c = RSHIFT;
	      goto combine;
	    }
	else if ((c == '-') && (c1 == '>'))
	  { value = POINTSAT; goto done; }
	ungetc (c1, finput);
	token_buffer[1] = 0;

	if ((c == '<') || (c == '>'))
	  value = ARITHCOMPARE;
	else value = c;
	goto done;
      }

    case 0:
      /* Don't make yyparse think this is eof.  */
      value = 1;
      break;

    default:
      value = c;
    }

done:
/*  yylloc.last_line = lineno; */

  return value;
}

