V10/cmd/cfront/cfront2.00/y.tab.c

Compare this file to the similar file:
Show the results in this format:


# line 24 "gram.y"
#include "cfront.h"
#include "size.h"

extern int ansi_opt;
#define YYMAXDEPTH 600

static init_seen = 0;
static cdi = 0;
static Pnlist cd = 0, cd_vec[BLMAX];
static char stmt_seen = 0, stmt_vec[BLMAX];

//local class
//static Plist tn_vec[BLMAX];
extern Plist local_blk; // put in cfront.h
static Plist tn_vec[BLMAX], lcl_tn_vec[BLMAX], lcl_blk_vec[BLMAX];
extern void local_restore();
extern void local_name();

static Pname err_name = 0;

// fcts put into norm2.c just to get them out of gram.y
void sig_name(Pname);	
Ptype tok_to_type(TOK);
void memptrdcl(Pname, Pname, Ptype, Pname);

static Pptr doptr(TOK p, TOK t)
{
	Pptr r = new ptr(p,0);
	switch (t) {
	case CONST:
		r->rdo = 1;
               // if (p == RPTR) error('w',"redundant `const' after &");
		break;
	case VOLATILE:
		error('w',"\"volatile\" not implemented (ignored)");
		break;
	default:
		error("syntax error: *%k",t);
	}
	return r;
}

static Pbcl dobase(TOK pr, Pname n, TOK v = 0)
{
	Pbcl b = new basecl(0,0);

	if (pr == PROTECTED) {
		pr = PUBLIC;
		error("protectedBC");
	}
	b->ppp = pr;	// save protection indicator

	if (n) {
		if (n->base != TNAME) {
			error("BN%n not aTN",n);
			return 0;
		}

		Pbase bt = Pbase(n->tp);
		while (bt->base == TYPE) bt = Pbase(bt->b_name->tp);

		if (bt->base != COBJ) {
			error("BN%n not aCN",n);
			return 0;
		}

		if (v) {
			if (v != VIRTUAL) error("syntax error:%k inBCD",v);
			b->base = VIRTUAL;
		}
		else
			b->base = NAME;

		b->bclass = Pclass(bt->b_name->tp);
	}

	return b;
}


#define lex_unget(x) back = x

#define Ndata(a,b)	b->normalize(Pbase(a),0,0)
#define Ncast(a,b)	b->normalize(Pbase(a),0,1)
#define Nfct(a,b,c)	b->normalize(Pbase(a),Pblock(c),0)
#define Ncopy(n)	(n->base==TNAME)?new name(n->string):n

#define Finit(p)	Pfct(p)->f_init
#define Fargdcl(p,q,r)	Pfct(p)->argdcl(q,r)
#define Freturns(p)	Pfct(p)->returns
#define Vtype(v)	Pvec(v)->typ
#define Ptyp(p)		Pptr(p)->typ

		/* avoid redefinitions */
#undef EOFTOK
#undef ASM
#undef BREAK
#undef CASE
#undef CONTINUE
#undef DEFAULT
#undef DELETE
#undef DO
#undef ELSE
#undef ENUM
#undef FOR
#undef FORTRAN 
#undef GOTO
#undef IF
#undef NEW
#undef OPERATOR
#undef RETURN
#undef SIZEOF
#undef SWITCH
#undef THIS
#undef WHILE
#undef LP
#undef RP
#undef LB
#undef RB
#undef REF
#undef DOT	
#undef NOT	
#undef COMPL	
#undef MUL	
#undef AND	
#undef PLUS	
#undef MINUS	
#undef ER	
#undef OR	
#undef ANDAND
#undef OROR
#undef QUEST
#undef COLON
#undef ASSIGN
#undef CM
#undef SM	
#undef LC	
#undef RC
#undef ID
#undef STRING
#undef ICON
#undef FCON	
#undef CCON	
#undef ZERO
#undef ASOP
#undef RELOP
#undef EQUOP
#undef DIVOP
#undef SHIFTOP
#undef ICOP
#undef TYPE
#undef TNAME
#undef EMPTY
#undef NO_ID
#undef NO_EXPR
#undef ELLIPSIS
#undef AGGR
#undef MEM
#undef MEMPTR
#undef PR
#undef TSCOPE
#undef DECL_MARKER
#undef REFMUL
#undef LDOUBLE
#undef LINKAGE
#undef LOCAL

# line 192 "gram.y"
typedef union  {
	char*	s;
	TOK	t;
	int	i;
	loc	l;
	Pname	pn;
	Ptype	pt;
	Pexpr	pe;
	Pstmt	ps;
	Pbase	pb;
	Pnlist	nl;
	Pslist	sl;
	Pelist	el;
	Pbcl	pbc;
	Pptr	pp;
	PP	p;	// fudge: pointer to all class node objects
} YYSTYPE;

# line 210 "gram.y"
extern YYSTYPE yylval, yyval;
extern int yyparse();

// interface to lalex/tlex
extern TOK	la_look();
extern void	la_backup( TOK, YYSTYPE );
extern int	la_cast();
extern int	la_decl();
extern TOK	lalex();

extern int	declTag;	 // !1: inline, virtual mod permitted
Ptype 		in_typedef = 0;  // catch redefinition of TNAME
Pname		in_tag = 0;      // handle complex typedefs: int (*)()
extern int	defer_check;	 // redefinition typedef check delay

extern int 	must_be_id;	 // !0, TNAME => ID, i.e., int X
int 		DECL_TYPE = 0; 	 // lalex() wants this set for global x(*fp)()
int 		in_arg_list=0; 	 // !0 when parsing argument list
int 		in_class_decl=0; // !0 when parsing class definition
int 		in_mem_fct=0;    // !0 when parsing member function definition

#define yylex lalex
#define NEXTTOK() ( (yychar==-1) ? (yychar=yylex(),yychar) : yychar )
#define EXPECT_ID() must_be_id = 1
#define NOT_EXPECT_ID() must_be_id = 0

Pname syn()
{
ll:
	switch (yyparse()) {
	case 0:		return 0;	// EOF
	case 1:		goto ll;	// no action needed
	default:	return yyval.pn;
	}
}

# define EOFTOK 0
# define ASM 1
# define BREAK 3
# define CASE 4
# define CONTINUE 7
# define DEFAULT 8
# define DELETE 9
# define DO 10
# define ELSE 12
# define ENUM 13
# define FOR 16
# define FORTRAN 17
# define GOTO 19
# define IF 20
# define NEW 23
# define OPERATOR 24
# define RETURN 28
# define SIZEOF 30
# define SWITCH 33
# define THIS 34
# define WHILE 39
# define LP 40
# define RP 41
# define LB 42
# define RB 43
# define REF 44
# define DOT 45
# define NOT 46
# define COMPL 47
# define MUL 50
# define AND 52
# define PLUS 54
# define MINUS 55
# define ER 64
# define OR 65
# define ANDAND 66
# define OROR 67
# define QUEST 68
# define COLON 69
# define ASSIGN 70
# define CM 71
# define SM 72
# define LC 73
# define RC 74
# define MEMPTR 173
# define ID 80
# define STRING 81
# define ICON 82
# define FCON 83
# define CCON 84
# define ZERO 86
# define ASOP 90
# define RELOP 91
# define EQUOP 92
# define DIVOP 93
# define SHIFTOP 94
# define ICOP 95
# define TYPE 97
# define TNAME 123
# define EMPTY 124
# define NO_ID 125
# define NO_EXPR 126
# define ELLIPSIS 155
# define AGGR 156
# define MEM 160
# define PR 175
# define TSCOPE 178
# define DECL_MARKER 179
# define REFMUL 180
# define LDOUBLE 181
# define LINKAGE 182
# define LOCAL 183
#define yyclearin yychar = -1
#define yyerrok yyerrflag = 0
extern int yychar;
extern short yyerrflag;
#ifndef YYMAXDEPTH
#define YYMAXDEPTH 150
#endif
YYSTYPE yylval, yyval;
# define YYERRCODE 256

# line 1697 "gram.y"


static void
check_cast()
/*
	Lookahead to direct parsing of cast
	la_cast() returns 1 if lookahead sees an ambiguous old-style C cast.
*/
{
	switch( NEXTTOK() ) {
	case TYPE: case TNAME:
	    if ( la_look() == LP && la_cast() ) {
		must_be_id = 0;
		yychar = DECL_MARKER;
	    }
	}
}

static void
check_decl()
/*
	Lookahead to direct parsing of local/arg type declarations
	la_decl() returns 1 if lookahead sees a declaration.
*/
{

	switch( NEXTTOK() ) {
	case TYPE: case TNAME:
	    if ( la_look() == LP && la_decl() ) {
		must_be_id = 0;
		DECL_TYPE=yychar;
		yychar = DECL_MARKER;
	    }
	}
}

static void
check_tag()
/*
        Allow the case of inline/virtual/overload as 
        modifiers of return type of form struct/class/union x foo() 
        SM, COLON, LC ==> real class declaration, not return type
*/
{
	switch ( NEXTTOK() ) {
	case SM: case COLON: case LC:
    		declTag = 1;
    		break;
	default:
    		declTag = 0;
    		break;
        }
}

short yyexca[] ={
-1, 1,
	0, -1,
	-2, 0,
-1, 39,
	71, 22,
	72, 22,
	-2, 21,
-1, 54,
	155, 309,
	-2, 246,
-1, 59,
	13, 303,
	97, 303,
	123, 303,
	155, 303,
	156, 303,
	179, 303,
	182, 303,
	-2, 246,
-1, 106,
	73, 56,
	-2, 53,
-1, 231,
	13, 294,
	97, 294,
	123, 294,
	156, 294,
	179, 294,
	182, 294,
	-2, 246,
-1, 254,
	1, 151,
	3, 151,
	4, 151,
	7, 151,
	8, 151,
	9, 151,
	10, 151,
	13, 151,
	16, 151,
	19, 151,
	20, 151,
	23, 151,
	24, 151,
	28, 151,
	30, 151,
	33, 151,
	34, 151,
	39, 151,
	40, 151,
	46, 151,
	47, 151,
	50, 151,
	52, 151,
	54, 151,
	55, 151,
	72, 151,
	73, 151,
	80, 151,
	81, 151,
	82, 151,
	83, 151,
	84, 151,
	86, 151,
	95, 151,
	97, 151,
	123, 151,
	156, 151,
	160, 151,
	178, 151,
	179, 151,
	182, 151,
	-2, 0,
-1, 316,
	13, 294,
	97, 294,
	123, 294,
	156, 294,
	179, 294,
	182, 294,
	-2, 246,
	};
# define YYNPROD 322
# define YYLAST 2323
short yyact[]={

 123, 253, 150,   7, 454,   8, 160,  55, 256, 159,
 285,  52, 258,  19, 325, 328, 193, 267, 337, 233,
  12,  73,  22,  60, 257, 162,  74,  58, 192, 134,
 125,  16, 180, 156, 400,  44,  34, 230, 136, 333,
  34, 109, 109,  23,  26, 111, 106, 112,  61,  20,
  65,  60, 109,  72, 262,  58,  45, 149, 288, 109,
  31,  20,  54, 148, 109,  18,  48,  25,  20,  20,
  28, 152,  29, 385, 164, 120,  60, 274, 259,  60,
  58, 164, 167,  58, 110, 110, 330, 104,  54,  49,
 103, 102, 247, 169, 172, 110,  28, 108,  29, 465,
  47, 109, 110, 511, 109, 478,   9, 110, 184, 424,
 114, 185,  10, 181, 194, 248,  54, 251, 359,  54,
  21, 401, 218, 198,  21,  12, 234, 235, 236, 237,
 238, 239, 240, 241, 242, 152, 287, 361, 263, 381,
 144,  27, 471,  71, 110, 201, 154, 110, 109, 205,
 154, 113, 346,  27,  20, 229, 245, 246, 453,  63,
  27,  27, 244, 232, 243, 290,  20, 249, 364, 235,
 254, 189, 250, 197, 290,  44, 356, 289, 269,  33,
  36, 283, 344,  33, 199, 195,  37,  44, 355,  34,
 293, 110, 211,  30, 279, 181,  45, 265,  35, 294,
 338,  20,  24, 107, 286, 153,  24, 278,  45, 153,
 357,  34, 186, 270, 276, 339, 316, 264, 187,  30,
  20, 282, 312, 291, 292,  26, 461, 320, 295, 296,
 297, 298, 299, 300, 301, 302, 303, 304, 305, 306,
 307, 308, 309, 310, 234, 311,  27, 326,  25,  54,
 317,  34, 245, 314,  31, 318,  44, 321,  27, 329,
 315, 232, 323,  34,  28, 324,  29, 151,  44, 331,
 177, 345, 343,  21, 332, 347, 459,  45, 231, 348,
  31, 173, 164, 269, 269, 334, 335, 351, 352,  45,
  28, 340,  29,  27, 268,  21, 117, 118,  62, 154,
 358, 360,  53, 280,  56, 191,  56, 362,  57, 465,
  57,  69,  27, 463, 464, 174,  62, 363, 270, 270,
 268, 154, 119, 228,  54, 224, 523, 225, 227, 403,
  63, 396,  33, 372,  50,  21, 374, 350, 383, 367,
 326, 373, 379, 329, 329, 376, 377,  21, 382,  34,
 368, 378, 471, 469,  33,  24, 386, 371, 153, 347,
 347, 154, 145, 348, 348, 388, 389, 394, 390, 370,
 286, 353, 391, 154, 392, 384,  31,  24, 223, 455,
 153, 372, 342, 145, 374, 374,  28,  30,  29, 273,
  28, 393,  29, 260,  33, 228, 404, 224,  26, 225,
 227, 196, 397, 432, 416, 414,  33, 408, 415, 398,
 232, 407, 176,  30,  31, 480, 268,  24, 143, 155,
 153,  25,  12, 456,  28, 458,  29, 405, 457,  24,
 330, 481, 153,  42, 406, 232,  31,  69, 452, 143,
  28, 341,  29, 252, 251,  38, 522,  28,  51,  29,
 223, 222, 205, 515,  17, 485, 203, 204, 493, 266,
 460, 322,  26, 432, 432, 432, 432, 432, 432, 432,
 432, 432, 432, 432, 432, 432, 432, 432, 432, 491,
 489, 487, 319, 434, 513,  25, 492,  69, 115, 486,
 479, 488,  33, 490, 178, 211, 209,  71,  36, 465,
  26, 205, 336, 463, 464, 203, 204, 483, 512,  30,
 284, 190, 261,  30, 510,  46,  35, 221,  64,  36,
 179, 222, 432,  25, 517, 531, 518, 530, 520, 157,
  31, 222,  56, 534,  36, 226,  57,  35, 161,  99,
 525, 135, 471, 527, 211,  13, 158,  30, 410,  31,
 526,  56,  35, 409, 528,  57,  64, 402,  39, 535,
 349, 281,  53,  30,  56,  67,  70, 380,  57,  40,
  30, 537, 494, 495, 496, 497, 498, 499, 500, 501,
 502, 503, 504, 505, 506, 507, 508, 509, 429, 183,
 425, 422, 116, 105, 426, 423, 430, 428,  36,  66,
  34,  32,  26, 419, 465,  14, 427, 417, 463, 464,
 124, 145,   1, 255,   2, 412,  35, 133,  31,   0,
 420, 142,   0,   0,   0,  25, 418, 148,  28,   0,
  29, 529,   0, 130, 131,   0,  36, 126,  59, 127,
  56, 129, 128,   0,  57, 472, 470, 471, 469,   0,
   0, 465, 399,  56,  35, 463, 464,  57,  17, 411,
 254,   0, 121, 200,   0,   0,  34, 421, 140, 138,
 139, 141,  53, 137,  56,  69, 124, 145,  57,  31,
 387,  56, 132, 133, 413,  57,   0, 142,   0,   0,
   0,  34, 472, 148, 471, 469,   0,   0, 200, 130,
 131,  68,   0, 126,   0, 127,   0, 129, 128,   0,
 166, 205,   0,   0,   0, 203, 204, 275, 330, 465,
   0, 466,   0, 463, 464,   0, 163,   0,  28,   0,
  29,   0,   0, 143, 140, 138, 139, 141,  36, 137,
  53, 354,  56,  33, 375,  56,  57, 431, 132,  57,
 165,  30, 212, 121, 211, 209,  35,  34,   0,   0,
 472, 470, 471, 469,   0,  35,  24, 124, 145, 153,
   0,  34,   0,   0, 133,  42, 166,   0, 142,  53,
 175,  56,   0,   0, 148,  57,   0,   0,   0,   0,
 130, 131,   0,   0, 126,   0, 127,   0, 129, 128,
   0, 266,   0,   0,   0,   0,   0,  95,  28,  33,
  29,   0,   0, 122,   0,   0,   0,   0,   0,   0,
   0,  94,   0,   0, 143, 140, 138, 139, 141,   0,
 137,  35,  24,   0,  33, 153,   0,   0,  87, 132,
  88, 165,  96,   0,  89,  90,   0,   0,  77,   0,
  78,  30,  75,  76,   0,  42,   0,  46,   0,   0,
   0,   0,  80,  79,  85,  86,   0, 166,  93,  97,
   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
   0, 266,   0,   0,   0,   0,   0, 121,  92,  84,
  82,  83,  81,  91,   0, 100,   0,   0,   0,   0,
  33, 124, 145,   0, 122, 465,   0, 466, 133, 463,
 464, 205, 142, 206,  33, 203, 204,   0, 148, 468,
 467, 101,  35,  24, 130, 131, 153,   0, 126,   0,
 127,  30, 129, 128,   0,   0,   0,  46,   0,   0,
   0,   0,   0,   0,   0,   0, 472, 470, 471, 469,
   0, 163, 212, 210, 211, 209,   0,   0, 143, 140,
 138, 139, 141,   0, 137,   0,   0,   0, 121,   0,
   0,   0,   0, 132,   0, 146,   0,   0,  98,   0,
   0,   0, 124, 145,   0,   0, 205,   0,   0, 133,
 203, 204,   0, 142,   0,   0,   0,   0,   0, 148,
 170, 147,   0,   0,   0, 130, 131,   0,   0, 168,
   0, 127,   0, 129, 128,   0,   0,   0,   0, 465,
   0, 466,   0, 463, 464,   0,   0, 212, 210, 211,
 209,   0, 163, 468, 121,   0,   0,   0, 122, 143,
 140, 138, 139, 141,   0, 137,   0,   0, 124, 145,
   0,   0,   0, 430, 132, 133,  35,   0,   0, 142,
 472, 470, 471, 469,   0, 148,   0, 124, 145,   0,
   0, 130, 131,   0, 133, 126,   0, 127, 142, 129,
 128,   0,   0,   0, 148,   0,   0,   0,   0,   0,
 130, 131,   0,   0, 126,   0, 127,   0, 129, 128,
   0,   0,   0,   0,   0, 143, 140, 138, 139, 141,
   0, 137,   0,   0,   0,   0,   0,   0,   0, 122,
 132,   0, 146,   0, 143, 140, 138, 139, 141,   0,
 137,   0, 171, 124, 145,   0,   0,  35,   0, 132,
 133, 146,   0,   0, 142,   0,   0,   0, 147,   0,
 148,   0, 514,   0,   0,   0, 130, 131,   0,   0,
 126,   0, 127,   0, 129, 128,   0, 147,   0, 205,
   0, 206,   0, 203, 204,   0,   0,   0,   0,   0,
   0,   0,   0, 208, 207, 122,   0,   0,   0,   0,
 143, 140, 138, 139, 141,   0, 137,   0,   0,   0,
   0,   0,   0,  35, 431, 132,   0, 146, 124, 145,
 212, 210, 211, 209,   0, 133,   0,   0,   0, 142,
   0,   0,  35,   0,   0, 148,   0, 482,   0,   0,
   0, 130, 131, 147,   0, 126,   0, 127,   0, 129,
 128,   0,   0, 465,   0, 466,   0, 463, 464,   0,
   0,   0,   0,   0,   0,   0,   0, 468, 467, 473,
 474, 477,   0,   0,   0, 143, 140, 138, 139, 141,
 220, 137, 124, 145,   0,   0,   0,   0,   0, 133,
 132,   0, 146, 142, 472, 470, 471, 469,  35, 148,
   0, 313,   0,   0,   0, 130, 131,   0,   0, 126,
   0, 127,   0, 129, 128,   0,   0,   0, 147,   0,
   4,  11,   0,   0,   0,   0,   0,   0,   0,   0,
   0,   0,   0,  34,   0,   0,   0,   0,   0, 143,
 140, 138, 139, 141,  26, 137,   0,   0,   0,   0,
   0,   0, 124, 145, 132, 220, 146,   0,   0, 133,
  31,   0,   0, 142,   0,   0,   0,  25,   0, 148,
  28, 219,  29,  35,   0, 130, 131,   0,   0, 126,
   0, 127, 147, 129, 128,   0,   0,   0,   0,   0,
   0,   0,   3,   0,   6,   0,   0,   0,   0,   0,
  17,   0,   0,   0,   0,   0,   0,   0,   0, 143,
 140, 138, 139, 141,   0, 137, 465,  21, 466, 220,
 463, 464,   0,   0, 132,   0, 146,   0,   0,   0,
 468, 467, 473, 474, 477,   0, 462,  35,   0,   0,
   0,   0,   0,  15,   0,   0,   0,   0,   0,   0,
   0,   0, 147,   0, 124, 145, 475, 472, 470, 471,
 469, 133,   0,   0,   0, 142,   0,   0,   0,   0,
   0, 148,   0,   0,   0,   0,  33, 130, 131,   0,
  36, 126,   0, 127,   0, 129, 128,   0,   0, 220,
   0,   0,   0,  30,   0,   0,   0,   0,  35,  24,
   0,   0,   5,   0, 121,   0,   0,  35,   0,   0,
   0, 143, 140, 138, 139, 141,   0, 137, 124, 145,
   0,   0,   0,   0,   0, 133, 132,   0, 146, 142,
   0,   0,   0,   0,   0, 148,   0,   0,   0,   0,
   0, 130, 131,   0,   0, 126,  34, 127,   0, 129,
 128,   0,   0,   0, 147,   0,   0,  26, 205,   0,
 206,   0, 203, 204,   0,   0,   0,   0, 163,   0,
   0,   0, 208,  31,   0, 143, 140, 138, 139, 141,
  25, 137,   0,  28,   0,  29,   0, 124, 145,   0,
 132, 220,   0,   0, 133,   0,   0,   0, 142, 212,
 210, 211, 209,   0, 148,   0,   0, 182,   0,  35,
 130, 131,   0,  17, 126,  34, 127,   0, 129, 128,
   0,   0,   0, 205,   0, 206,  26, 203, 204,   0,
  21,   0,   0,   0,   0,   0,   0, 208, 207, 213,
 214, 217,  31, 202, 272, 140, 138, 139, 141,  25,
 137,   0,  28,   0,  29, 122,  15,   0,   0, 132,
   0, 146,   0, 215, 212, 210, 211, 209, 124, 145,
   0,  49,   0,  35,  41, 133,   0,   0,   0, 142,
   0,   0,  47,   0,   0, 148,   0, 147,   0,  33,
   0, 130, 131,  36,   0,   0,   0,   0,   0,  42,
   0,   0,   0,   0,   0,   0,  30,   0, 188,   0,
   0,  35,  24,   0,   0, 153,   0,   0,   0,   0,
   0,   0,   0,   0, 220,  43, 140, 138, 139, 141,
   0, 137,   0,   0,   0,   0,   0,   0,   0,   0,
 132, 450,  35, 440, 446,   0,   0, 441, 447,   0,
 439,   0,   0,   0,   0,   0, 437,   0,  33, 442,
 435,   0,  36,   0,   0,   0,   0,   0, 443,   0,
   0,   0,   0, 436,   0,  30,   0, 536,   0, 438,
  35,  46,   0,   0,   0,   0, 205,   0, 206,   0,
 203, 204,   0,   0,   0,   0,   0,   0,   0,   0,
 208, 207, 213, 214, 217, 220, 202, 216,   0, 451,
   0,   0, 433,   0, 445,   0,   0,   0,   0,   0,
 444,   0,   0,  35,   0,   0, 215, 212, 210, 211,
 209, 205,   0, 206,   0, 203, 204, 448,   0,   0,
   0,   0,   0,   0,   0, 208, 207, 213, 214, 217,
   0, 202, 216, 533,   0, 532,   0,   0,   0,   0,
   0,   0, 205, 449, 206,   0, 203, 204,   0,   0,
   0, 215, 212, 210, 211, 209, 208, 207, 213, 214,
 217,   0, 202, 216,   0,   0, 524,   0,   0,   0,
   0,   0,   0, 205,   0, 206,   0, 203, 204,   0,
   0,   0, 215, 212, 210, 211, 209, 208, 207, 213,
 214, 217,   0, 202, 216,   0,   0,   0,   0,   0,
   0,   0,   0,   0, 465,   0, 466,   0, 463, 464,
   0,   0,   0, 215, 212, 210, 211, 209, 468, 467,
 473, 474, 477, 521, 462, 476,   0,   0,   0,   0,
   0,   0,   0,   0,   0, 205,   0, 206,   0, 203,
 204,   0,   0,   0, 475, 472, 470, 471, 469, 208,
 207, 213, 214, 217, 519, 202, 216, 516,   0,   0,
   0,   0,   0,   0,   0,   0, 205,   0, 206,   0,
 203, 204,   0,   0,   0, 215, 212, 210, 211, 209,
 208, 207, 213, 214, 217,   0, 202, 216,   0,   0,
   0,   0,   0,   0,   0,   0,   0, 205,   0, 206,
   0, 203, 204,   0,   0,   0, 215, 212, 210, 211,
 209, 208, 207, 213, 214, 217,   0, 202, 216, 484,
   0, 395,   0,   0,   0,   0,   0,   0, 205,   0,
 206,   0, 203, 204,   0,   0,   0, 215, 212, 210,
 211, 209, 208, 207, 213, 214, 217,   0, 202, 216,
   0,   0, 369,   0,   0,   0,   0,   0,   0, 205,
   0, 206,   0, 203, 204,   0,   0,   0, 215, 212,
 210, 211, 209, 208, 207, 213, 214, 217,   0, 202,
 216,   0,   0, 366,   0,   0,   0,   0,   0,   0,
 205,   0, 206,   0, 203, 204,   0,   0,   0, 215,
 212, 210, 211, 209, 208, 207, 213, 214, 217,   0,
 202, 216,   0,   0,   0,   0,   0,   0,   0,   0,
   0, 205,   0, 206,   0, 203, 204,   0,   0,   0,
 215, 212, 210, 211, 209, 208, 207, 213, 214, 217,
 365, 202, 216, 327,   0,   0,   0,   0,   0,   0,
   0,   0, 205,   0, 206,   0, 203, 204,   0,   0,
   0, 215, 212, 210, 211, 209, 208, 207, 213, 214,
 217,   0, 202, 216,   0,   0, 271,   0,   0,   0,
   0,   0,   0, 205,   0, 206,   0, 203, 204,   0,
   0,   0, 215, 212, 210, 211, 209, 208, 207, 213,
 214, 217,   0, 202, 216,   0,   0,   0,   0,   0,
   0,   0,   0,   0, 465,   0, 466,   0, 463, 464,
   0,   0,   0, 215, 212, 210, 211, 209, 468, 467,
 473, 474, 477,   0, 462, 476,   0, 465,   0, 466,
   0, 463, 464,   0,   0, 205,   0, 206,   0, 203,
 204, 468, 467, 473, 475, 472, 470, 471, 469, 208,
 207, 213, 214, 217,   0,   0,   0,   0, 205,   0,
 206,   0, 203, 204,   0,   0,   0,   0, 472, 470,
 471, 469, 208, 207, 213,   0, 212, 210, 211, 209,
   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
   0,   0,   0,   0,   0,   0,   0,   0,   0, 212,
 210, 211, 209 };
short yypact[]={

1310,-1000,-1000,-1000,-1000, 113,-1000,-1000,-1000,-1000,
-1000, 405,1592, 262,-1000, 598,-1000, 271, 476, 578,
 374,-1000,-1000,-1000,-1000, -70, 798,-1000,  -6,  -7,
 -10,-1000,-1000,  24, -28,-1000,-1000,-1000,  29, 522,
 225,-1000,-1000, 598,-1000,-1000,-1000, 253,-1000,1025,
-1000, 198,-1000, 378, 653,-1000,1025,-1000,-1000, 959,
-1000, 250, 201,-1000, 270,-1000,-1000, 632, 598,-1000,
 739, 598,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
-1000,-1000,-1000,-1000,-1000,-1000,-1000, 371, 227,-1000,
-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, 397,
-1000,-1000,-1000,-1000,-1000,1523, 236,-1000,-1000,-1000,
-1000,  34, 112,-1000, 360, 198, 878,  20,-1000,1025,
1563,1319, 508, 355, 238,1421,1421,1421,1421,1421,
1421,1421,1421,1421,-1000,-1000, 744,-1000,-1000,-1000,
-1000,-1000,-1000,-1000,  68, 798, 404, 403,-1000,  97,
-1000, -16,1592,-1000,-1000, -19, 352, -17, 146,-1000,
-1000,-1000,1563, 878, 336, 404, 403,2143,1554, 348,
 -20, 374,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
-1000, 340,-1000,-1000,-1000, 135, 122,-1000, 234, 438,
 108, -39, 103,-1000, 153,  34, 118,  97,-1000,-1000,
 522,1563,1025,1025,1025,1025,1025,1025,1025,1025,
1025,1025,1025,1025,1025,1025,1025,1025, 355,1025,
 428,1249, 176,-1000,1025, 359,1421, 338, 878,-1000,
-1000,1485, 250, 758, 283, 355, 355, 355, 355, 283,
 283, 283, 283,1635,2112, 678,-1000, 798, -84,-1000,
-1000, 878, 878,-1000, -56, 144,-1000, 878, 401,-1000,
-1000, 341,  27,-1000, 878,  78,-1000, 490,-1000, 214,
 240,-1000, 330,-1000,-1000, 700,-1000,-1000,-1000,-1000,
-1000, 116, 104,-1000, 139,-1000,-1000,  21, -38,-1000,
  34,1025,  94,-1000,-1000,1563,  99,  99,-1000, 936,
1498, 861, 451, 661,-1000, 402,1119,2228,1563,1563,
2081,2050, 355,1025,-1000,-1000,1485,2019,-1000,-1000,
 283,-1000,-1000, 328, 316, 264, 340,-1000, 703, 390,
  46,-1000,-1000,-1000, 310, 301,-1000,-1000,  65, -16,
 297, 878, -24,-1000,-1000,-1000,-1000,-1000,-1000, 878,
-1000, 509, 639, 396, 396,-1000,-1000, -39,-1000, -21,
-1000, -21,-1000,1563,-1000,1025,1421,1988, 290,-1000,
-1000,  23,-1000, 264,-1000,-1000, 264, 611,-1000,-1000,
  47,-1000,-1000,-1000, 288,-1000,-1000,-1000,-1000,-1000,
-1000,-1000,-1000,2205, 355,1421,  23,-1000,-1000, 509,
-1000,-1000, 587,-1000, 355,-1000,-1000,-1000,-1000,-1000,
1730,-1000,1025,  77,-1000,-1000,-1000, 339, 339, 388,
 339, 207,-1000, 157,2174,-1000,-1000,  25,-1000, 375,
1185, 498, 355,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
-1000,-1000,1957,  97,-1000,1025,-1000,-1000,-1000,-1000,
1025,-1000,1044,1044,1044,1044,1044,1044,1044,1044,
1044,1044,1044,1044,1044,1044,1044,1044,-1000,-1000,
  22, 355,1025,1110,-1000,-1000, 441,1926,-1000,-1000,
-1000,-1000,1895,-1000,1356,  49,  49,-1000, 554, 969,
 669, 449, 601,-1000, 259, 855,2197,1356,1356,1864,
 407, 285,1833, 355,1025,-1000,-1000,1025,-1000,-1000,
-1000,1044, 339,-1000,1421,1802,-1000,1771,-1000,1193,
-1000, 355,1421,1025, 355,1726,-1000,-1000 };
short yypgo[]={

   0, 614, 112, 106,   5, 448,  57, 613,   8,   2,
 612,   7,  13,  19, 605,  43,  28,  16,  12, 601,
  22, 593, 589,  66, 569,  31, 545,   6, 567,  34,
 557,   1, 553, 548, 546,  33,  25, 109,   0,  29,
 541,  15,  30,  32,  26, 539,  17,   9, 538,  11,
 529,  14,  37,   4, 140,  65,  21, 512, 511, 510,
  10,  48, 502, 490, 483, 480, 479, 460, 458,  38 };
short yyr1[]={

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

   0,   1,   1,   1,   2,   1,   1,   1,   1,   1,
   5,   2,   5,   4,   2,   0,   1,   3,   3,   4,
   2,   0,   1,   3,   2,   3,   1,   3,   3,   2,
   1,   1,   1,   1,   1,   1,   1,   2,   2,   2,
   2,   2,   4,   5,   2,   2,   1,   3,   1,   3,
   0,   3,   4,   2,   2,   2,   0,   1,   3,   1,
   2,   2,   3,   3,   2,   4,   1,   1,   2,   0,
   1,   2,   2,   1,   1,   1,   2,   3,   3,   1,
   2,   2,   2,   1,   1,   1,   1,   1,   1,   1,
   1,   1,   1,   1,   1,   2,   2,   1,   1,   1,
   1,   1,   1,   1,   1,   1,   1,   1,   2,   3,
   2,   3,   4,   2,   4,   6,   4,   3,   4,   6,
   1,   3,   2,   2,   2,   2,   2,   2,   3,   1,
   2,   0,   2,   2,   2,   3,   0,   2,   2,   0,
   2,   2,   4,   4,   0,   2,   0,   2,   2,   0,
   3,   0,   4,   2,   3,   1,   1,   1,   2,   0,
   5,   4,   1,   1,   1,   1,   1,   1,   1,   1,
   1,   1,   1,   1,   1,   1,   1,   1,   1,   2,
   2,   1,   3,   3,   1,   1,   1,   3,   5,   3,
   0,   9,   3,   0,   4,   0,   5,   0,   4,   1,
   1,   3,   1,   3,   3,   3,   3,   3,   3,   3,
   3,   3,   3,   3,   3,   3,   3,   3,   3,   5,
   2,   5,   3,   6,   1,   3,   3,   3,   3,   3,
   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,
   5,   2,   5,   3,   6,   1,   0,   2,   2,   3,
   3,   2,   2,   2,   2,   2,   2,   2,   2,   2,
   2,   2,   4,   3,   3,   3,   3,   3,   1,   1,
   3,   1,   1,   1,   1,   1,   1,   4,   4,   5,
   5,   6,   6,   4,   1,   1,   1,   2,   2,   3,
   2,   3,   3,   4,   1,   1,   1,   2,   2,   2,
   2,   2,   4,   1,   4,   5,   3,   1,   1,   0,
   0,   1,   2,   1,   1,   2,   2,   2,   1,   2,
   3,   1 };
short yychk[]={

-1000, -10,  -1,  72,   0, 182,  74,  -9,  -4,  -3,
  -2,   1, -13, -26, -14, 123, -25,  80, -55, -12,
 -61,  97, -20, -15, 179,  47,  24, -54,  50,  52,
 173,  40, -19, 156,  13, 178, 160,  73,  40, -26,
 -24,  72,  97, 123, -20, -15, 179,  80, -23,  69,
  72,  -5, -49,  40, -61, -11,  42,  46, -49,  40,
 -11, -61,  45, -54,  80, -25, 123, -26, 123,  97,
 -26, 123, 123, -56, -44,  54,  55,  50,  52,  65,
  64,  94,  92,  93,  91,  66,  67,  40,  42,  46,
  47,  95,  90,  70,  23,   9,  44,  71, 180, -45,
  97, 123,  97,  97,  97, -21, -18, 179,  73,  80,
 123,  73, -18, 179,  81,  -5,  70,  71,  72,  69,
 -36,   9, 160, -38,  23, -42,  50,  52,  55,  54,
  46,  47,  95,  30, -39, -40, -69,  86,  82,  83,
  81,  84,  34,  80, -54,  24,  97, 123,  40,  -6,
  -9,  69, -13, 182, 123,  41, -35, -50, -34, -47,
 -27, -48, -36,  73, -13,  97, 123, -36,  50, -35,
  41, 173, -25,  80,  45,  41,  41,  43,  97, 123,
 -43, -12,  74, -22,  -9,  -4,  -3,  -2, 175, -55,
 -58,  69, -16, -17,  80,  73,  41,  -6, -27, -23,
 -26, -36,  70,  54,  55,  50,  52,  65,  64,  94,
  92,  93,  91,  66,  67,  90,  71,  68, -38,  42,
 160,   9,  23,  95,  42,  44, 180,  45,  40, -42,
 -52,  40, -69, -13, -38, -38, -38, -38, -38, -38,
 -38, -38, -38, -42, -36, -13, -18,  24,  47, -56,
 -44,  40,  40, -31,  73,  -7,  -8,  40, -18,  97,
  41, -57,  71, 155,  71, -35, 123, -46,  80, -12,
 -61,  43,  80,  41,  97, -26, -43,  97,  72,  72,
  69, 123, -25,  73, -59, -60, -18, 175,  97,  74,
  71,  70, -16,  72, -31, -36, -36, -36, -36, -36,
 -36, -36, -36, -36, -36, -36, -36, -36, -36, -36,
 -36, -36, -38,  42, -42, -52,  40, -36, -39, 123,
 -38, -39, 123, -35, -35, -51, -12,  41, -41, -12,
  40, -56, -44, 123, -35, -35, -62,  74, 256,  71,
 -35,  40,  41, -47, 155, -27,  74, -11, -49,  70,
 123, -46, -46,  41,  41,  72,  72,  71, -18,  97,
 -18, 175, -17, -36,  74,  69,  43, -36, -35,  43,
  41,  41, -11, -51, -11,  41, -41, -41,  41,  41,
 -28,  74,  -8,  41, -35,  97, -27,  41, -49, -49,
 -60, -18, -18, -36, -38,  43,  41, -42, -52,  41,
 -29,  74, -30,  41, -38, -42, -52, -49, -11, -32,
 -33,  72,  28,  97,  -9,  -4, -31,  20,  39,  16,
  33,  80,   4,   8, -37,   3,   7,  19,  10,   1,
   9, 160, -38,  72, -64,  20,  33,  16,  39,  10,
   3,   7,  19,  28,  80,  74,   4,   8,  97, 123,
   1,  69, -36,  81, -53,  40, -53,  40, -53,  69,
 -67,  69,  70,  54,  55,  50,  52,  65,  64,  94,
  92,  93,  91,  66,  67,  90,  71,  68,  80, -63,
  40, -38,  42,   9,  72, -31, -29, -36, -29, -65,
 -29, -66, -36, -68, -37, -37, -37, -37, -37, -37,
 -37, -37, -37, -37, -37, -37, -37, -37, -37, -37,
 -29,  81, -36, -38,  42,  12,  41, -29, -29,  69,
 -29,  69,  39,  41,  43, -36, -29, -36, -29, -37,
 -53, -38,  43,  72, -38, -36,  41, -29 };
short yydef[]={

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

# define YYFLAG -1000
# define YYERROR goto yyerrlab
# define YYACCEPT return(0)
# define YYABORT return(1)

/*	parser for yacc output	*/

#ifdef YYDEBUG
int yydebug = 0; /* 1 for debugging */
#endif
YYSTYPE yyv[YYMAXDEPTH]; /* where the values are stored */
int yychar = -1; /* current input token number */
int yynerrs = 0;  /* number of errors */
short yyerrflag = 0;  /* error recovery flag */

yyparse()
{	short yys[YYMAXDEPTH];
	int yyj, yym;
	register YYSTYPE *yypvt;
	register int yystate, yyn;
	register short *yyps;
	register YYSTYPE *yypv;
	register short *yyxi;

	yystate = 0;
	yychar = -1;
	yynerrs = 0;
	yyerrflag = 0;
	yyps= &yys[-1];
	yypv= &yyv[-1];

yystack:    /* put a state and value onto the stack */
#ifdef YYDEBUG
	if(yydebug >= 3)
		if(yychar < 0 || yytoknames[yychar] == 0)
			printf("char %d in %s", yychar, yystates[yystate]);
		else
			printf("%s in %s", yytoknames[yychar], yystates[yystate]);
#endif
	if( ++yyps >= &yys[YYMAXDEPTH] ) { 
		yyerror( "yacc stack overflow" ); 
		return(1); 
	}
	*yyps = yystate;
	++yypv;
	*yypv = yyval;
yynewstate:
	yyn = yypact[yystate];
	if(yyn <= YYFLAG) goto yydefault; /* simple state */
	if(yychar<0) {
		yychar = yylex();
#ifdef YYDEBUG
		if(yydebug >= 2) {
			if(yychar <= 0)
				printf("lex EOF\n");
			else if(yytoknames[yychar])
				printf("lex %s\n", yytoknames[yychar]);
			else
				printf("lex (%c)\n", yychar);
		}
#endif
		if(yychar < 0)
			yychar = 0;
	}
	if((yyn += yychar) < 0 || yyn >= YYLAST)
		goto yydefault;
	if( yychk[ yyn=yyact[ yyn ] ] == yychar ){ /* valid shift */
		yychar = -1;
		yyval = yylval;
		yystate = yyn;
		if( yyerrflag > 0 ) --yyerrflag;
		goto yystack;
	}
yydefault:
	/* default state action */
	if( (yyn=yydef[yystate]) == -2 ) {
		if(yychar < 0) {
			yychar = yylex();
#ifdef YYDEBUG
			if(yydebug >= 2)
				if(yychar < 0)
					printf("lex EOF\n");
				else
					printf("lex %s\n", yytoknames[yychar]);
#endif
			if(yychar < 0)
				yychar = 0;
		}
		/* look through exception table */
		for(yyxi=yyexca; (*yyxi!= (-1)) || (yyxi[1]!=yystate);
			yyxi += 2 ) ; /* VOID */
		while( *(yyxi+=2) >= 0 ){
			if( *yyxi == yychar ) break;
		}
		if( (yyn = yyxi[1]) < 0 ) return(0);   /* accept */
	}
	if( yyn == 0 ){ /* error */
		/* error ... attempt to resume parsing */
		switch( yyerrflag ){
		case 0:   /* brand new error */
#ifdef YYDEBUG
			yyerror("syntax error\n%s", yystates[yystate]);
			if(yytoknames[yychar])
				yyerror("saw %s\n", yytoknames[yychar]);
			else if(yychar >= ' ' && yychar < '\177')
				yyerror("saw `%c'\n", yychar);
			else if(yychar == 0)
				yyerror("saw EOF\n");
			else
				yyerror("saw char 0%o\n", yychar);
#else
			yyerror( "syntax error" );
#endif
yyerrlab:
			++yynerrs;
		case 1:
		case 2: /* incompletely recovered error ... try again */
			yyerrflag = 3;
			/* find a state where "error" is a legal shift action */
			while ( yyps >= yys ) {
				yyn = yypact[*yyps] + YYERRCODE;
				if( yyn>= 0 && yyn < YYLAST && yychk[yyact[yyn]] == YYERRCODE ){
					yystate = yyact[yyn];  /* simulate a shift of "error" */
					goto yystack;
				}
				yyn = yypact[*yyps];
				/* the current yyps has no shift onn "error", pop stack */
#ifdef YYDEBUG
				if( yydebug ) printf( "error recovery pops state %d, uncovers %d\n", *yyps, yyps[-1] );
#endif
				--yyps;
				--yypv;
			}
			/* there is no state on the stack with an error shift ... abort */
yyabort:
			return(1);
		case 3:  /* no shift yet; clobber input char */
#ifdef YYDEBUG
			if( yydebug ) {
				printf("error recovery discards ");
				if(yytoknames[yychar])
					printf("%s\n", yytoknames[yychar]);
				else if(yychar >= ' ' && yychar < '\177')
					printf("`%c'\n", yychar);
				else if(yychar == 0)
					printf("EOF\n");
				else
					printf("char 0%o\n", yychar);
			}
#endif
			if( yychar == 0 ) goto yyabort; /* don't discard EOF, quit */
			yychar = -1;
			goto yynewstate;   /* try again in the same state */
		}
	}
	/* reduction by production yyn */
#ifdef YYDEBUG
	if(yydebug) {	char *s;
		printf("reduce %d in:\n\t", yyn);
		for(s = yystates[yystate]; *s; s++) {
			putchar(*s);
			if(*s == '\n' && *(s+1))
				putchar('\t');
		}
	}
#endif
	yyps -= yyr2[yyn];
	yypvt = yypv;
	yypv -= yyr2[yyn];
	yyval = yypv[1];
	yym=yyn;
	/* consult goto table to find next state */
	yyn = yyr1[yyn];
	yyj = yypgo[yyn] + *yyps + 1;
	if( yyj>=YYLAST || yychk[ yystate = yyact[yyj] ] != -yyn ) yystate = yyact[yypgo[yyn]];
	switch(yym){
		
case 1:
# line 399 "gram.y"
{	return 2; } break;
case 2:
# line 400 "gram.y"
{	return 1; } break;
case 3:
# line 401 "gram.y"
{	return 0; } break;
case 4:
# line 403 "gram.y"
{
				set_linkage(yypvt[-1].s);
				bl_level--;
				return 1;
			} break;
case 5:
# line 409 "gram.y"
{
				set_linkage(0);
				bl_level++;
				return 1;
			} break;
case 6:
# line 417 "gram.y"
{	
			/* if function declartion with arguments
			 * need to make sure modified_tn is traversed */
			if ( yypvt[-0].pn != 0 
				&& yypvt[-0].pn->tp->base == FCT 
				&& Pfct(yypvt[-0].pn->tp)->nargs !=0 ) 
					goto mod;
			else {
				modified_tn = 0;
				if (yypvt[-0].pn==0) yyval.i = 1; 
			     }
			} break;
case 7:
# line 430 "gram.y"
{	goto mod; } break;
case 8:
# line 432 "gram.y"
{	goto mod; } break;
case 9:
# line 434 "gram.y"
{ mod:	if (modified_tn) {
					restore();
					modified_tn = 0;
				}
				local_blk = 0;
				if (local_tn) {
					extern void local_restore();
					local_restore();
					local_tn = 0;
				}
			} break;
case 10:
# line 446 "gram.y"
{	Pname n = new name(make_name('A'));
				n->tp = new basetype(ASM,0);
				Pbase(n->tp)->b_name = Pname(yypvt[-2].s);
				yyval.p = n;
			} break;
case 11:
# line 462 "gram.y"
{	
				Ptype t;
		/*	fix: */
				if (err_name == 0) err_name = yypvt[-1].pn;
				if (err_name == 0) {
					error("syntax error:TX");
					yyval.p = Ndata(defa_type,err_name);
				}
				else if ((t=err_name->tp) == 0) {
					error("TX for%n",err_name);
					yyval.p = Ndata(defa_type,err_name);
				}
				else if (t->base==FCT) {
					if (Pfct(t)->returns==0)
						yyval.p = Nfct(defa_type,err_name,0);
					else
						yyval.p = Ndata(0,err_name);
				}
				else {
					error("syntax error:TX for%k%n",t->base,err_name);
					yyval.p = Ndata(defa_type,err_name);
				}
				err_name = 0;
			} break;
case 12:
# line 489 "gram.y"
{	Pname n = Nfct(yypvt[-4].p,yypvt[-3].pn,yypvt[-0].p);
				Fargdcl(n->tp,name_unlist(yypvt[-2].nl),n);
				Finit(n->tp) = yypvt[-1].pn;
				yyval.p = n;
				NOT_EXPECT_ID();
				in_mem_fct = 0;
			} break;
case 13:
# line 499 "gram.y"
{	Pname n = Nfct(defa_type,yypvt[-3].pn,yypvt[-0].p);
				Fargdcl(n->tp,name_unlist(yypvt[-2].nl),n);
				Finit(n->tp) = yypvt[-1].pn;
				yyval.p = n;
				NOT_EXPECT_ID();
				in_mem_fct = 0;
			} break;
case 14:
# line 509 "gram.y"
{	
				yyval.p = yypvt[-0].p; 
				in_arg_list = 0;
			} break;
case 15:
# line 514 "gram.y"
{	yyval.p = 0; } break;
case 16:
# line 518 "gram.y"
{	yyval.p = yypvt[-0].p; } break;
case 17:
# line 520 "gram.y"
{	yyval.pn = yypvt[-0].pn;  yyval.pn->n_list = yypvt[-2].pn; } break;
case 18:
# line 524 "gram.y"
{
				yyval.pn = new name;
				yyval.pn->n_initializer = yypvt[-1].pe;
			} break;
case 19:
# line 529 "gram.y"
{
				Pname n = Ncopy(yypvt[-3].pn);
				n->base = yypvt[-3].pn->base;
				n->n_initializer = yypvt[-1].pe;
				yyval.pn = n;
			} break;
case 20:
# line 552 "gram.y"
{	if (yypvt[-0].pn == 0)
					error("badAD");
				else if (yypvt[-0].pn->tp->base == FCT)
					error("FD inAL (%n)",yypvt[-0].pn);
				else if (yypvt[-1].p)
                                        yypvt[-1].nl->add_list(yypvt[-0].pn);
				else
					yyval.nl = new nlist(yypvt[-0].pn);
			} break;
case 21:
# line 562 "gram.y"
{
                                yyval.p = 0; 
/* error( 'd', "arg_dcl_list: in_class_decl: %d", in_class_decl );
 */
                                if ( in_class_decl ) in_mem_fct = 1;
			} break;
case 23:
# line 572 "gram.y"
{	yyval.p = yypvt[-2].pn;
				yyval.pn->tp = new basetype(FIELD,yypvt[-0].pn);
		 	} break;
case 24:
# line 576 "gram.y"
{	yyval.p = new name;
				yyval.pn->tp = new basetype(FIELD,yypvt[-0].pn);
			} break;
case 25:
# line 580 "gram.y"
{	Pexpr e = yypvt[-0].pe;
				if (e == dummy) error("emptyIr");
				yypvt[-2].pn->n_initializer = e;
				init_seen = 0;
			} break;
case 26:
# line 588 "gram.y"
{	
				if (yypvt[-0].p) yyval.nl = new nlist(yypvt[-0].pn); 
				if ( NEXTTOK() == CM && 
					la_look() == TNAME ) 
					EXPECT_ID();
			} break;
case 27:
# line 595 "gram.y"
{	if (yypvt[-2].p)
					if (yypvt[-0].p)
						yypvt[-2].nl->add(yypvt[-0].pn);
					else
						error("DL syntax");
				else {
					if (yypvt[-0].p) yyval.nl = new nlist(yypvt[-0].pn);
					error("DL syntax");
				}
			} break;
case 28:
# line 608 "gram.y"
{ 
				extern int co_hack;
				co_hack = 1;
				/*$$ = Ndata($1,name_unlist($<nl>2));*/
				Pname n = Ndata(yypvt[-2].p,name_unlist(yypvt[-1].nl)); 
				if ( in_typedef && in_tag ) { 
					if ( n->tp->check( in_tag->tp, 0 ))
    						error("%nredefined: previous: %t now: %t", in_tag, in_tag->tp, n->tp );
				}
				in_typedef = 0;
				in_tag = 0;
				co_hack = 0;
				DECL_TYPE = 0; 
				yyval.p = n;
			} break;
case 29:
# line 624 "gram.y"
{ 
				yyval.p = yypvt[-1].pb->aggr(); 
				DECL_TYPE = 0; 
			
			} break;
case 30:
# line 633 "gram.y"
{ 
				yyval.p = new basetype(yypvt[-0].t,0); 
				if ( yypvt[-0].t == TYPEDEF ) in_typedef = yyval.pt;
				if (DECL_TYPE == -1) DECL_TYPE = 0;
			} break;
case 31:
# line 639 "gram.y"
{	yyval.p = new basetype(EXTERN,0);
				yyval.pb->b_linkage = yypvt[-0].s;
				if (DECL_TYPE == -1) DECL_TYPE = 0;
			} break;
case 32:
# line 644 "gram.y"
{ 
				yyval.p = new basetype(TYPE,yypvt[-0].pn); 
				if (DECL_TYPE == -1) DECL_TYPE = 0;
			} break;
case 35:
# line 651 "gram.y"
{ 
				if (DECL_TYPE == TNAME)
					yyval.p = new basetype(TYPE,yypvt[-0].pn); 
				else
					yyval.p = new basetype(yypvt[-0].t,0); 
				DECL_TYPE = -1;
			} break;
case 37:
# line 662 "gram.y"
{ 
				if ( DECL_TYPE != -1 ) 
					yyval.p = yypvt[-1].pb->type_adj(yypvt[-0].t); 
				DECL_TYPE = 0;
			} break;
case 38:
# line 668 "gram.y"
{ 
				if ( DECL_TYPE != -1 ) 
			 		yyval.p = yypvt[-1].pb->name_adj(yypvt[-0].pn);
				DECL_TYPE = 0;
			} break;
case 39:
# line 673 "gram.y"
{ yyval.p = yypvt[-1].pb->base_adj(yypvt[-0].pb); } break;
case 40:
# line 674 "gram.y"
{ yyval.p = yypvt[-1].pb->base_adj(yypvt[-0].pb); } break;
case 41:
# line 676 "gram.y"
{ 
				if (DECL_TYPE == TYPE)
					yyval.p = yypvt[-1].pb->type_adj(yypvt[-0].t);  
				else
					yyval.p = yypvt[-1].pb->name_adj(yypvt[-0].pn); 
				DECL_TYPE = -1;
			} break;
case 42:
# line 688 "gram.y"
{ yyval.p = end_enum(0,yypvt[-1].pn); } break;
case 43:
# line 689 "gram.y"
{ yyval.p = end_enum(yypvt[-3].pn,yypvt[-1].pn); } break;
case 44:
# line 690 "gram.y"
{ yyval.pb = (Pbase)yypvt[-0].pn->tp;} break;
case 45:
# line 691 "gram.y"
{ yyval.pb = (Pbase)yypvt[-0].pn->tp;} break;
case 46:
# line 695 "gram.y"
{	if (yypvt[-0].p) yyval.nl = new nlist(yypvt[-0].pn); } break;
case 47:
# line 697 "gram.y"
{	if( yypvt[-0].p)
					if (yypvt[-2].p)
						yypvt[-2].nl->add(yypvt[-0].pn);
					else
						yyval.nl = new nlist(yypvt[-0].pn);
			} break;
case 48:
# line 706 "gram.y"
{	yyval.p = yypvt[-0].pn; yyval.pn->tp = moe_type; } break;
case 49:
# line 708 "gram.y"
{	yyval.p = yypvt[-2].pn;
				yyval.pn->tp = moe_type;
				yyval.pn->n_initializer = yypvt[-0].pe;
			} break;
case 50:
# line 713 "gram.y"
{	yyval.p = 0; } break;
case 51:
# line 717 "gram.y"
{	
				ccl->mem_list = name_unlist(yypvt[-1].nl);
				end_cl();
				--in_class_decl;
				declTag = 1;
			} break;
case 52:
# line 724 "gram.y"
{	
				ccl->mem_list = name_unlist(yypvt[-2].nl);
				end_cl();
				--in_class_decl;
				error("`;' or declaratorX afterCD");
				lex_unget(yypvt[-0].t);
				/* lex_unget($4); but only one unget, sorry */
				declTag = 1;
			} break;
case 53:
# line 734 "gram.y"
{ 
				yyval.pb = (Pbase)yypvt[-0].pn->tp; 
				check_tag();
			} break;
case 54:
# line 740 "gram.y"
{
				 yyval.pb = (Pbase)yypvt[-0].pn->tp; 
				check_tag();
			
			} break;
case 55:
# line 747 "gram.y"
{ yyval.pbc = yypvt[-0].pbc; } break;
case 56:
# line 748 "gram.y"
{ yyval.pbc = 0; } break;
case 58:
# line 753 "gram.y"
{	if (yypvt[-0].pbc) { yyval.pbc = yypvt[-0].pbc; yyval.pbc->next = yypvt[-2].pbc; } } break;
case 59:
# line 756 "gram.y"
{ yyval.pbc = dobase(0,yypvt[-0].pn); } break;
case 60:
# line 757 "gram.y"
{ yyval.pbc = dobase(yypvt[-1].t,yypvt[-0].pn); } break;
case 61:
# line 758 "gram.y"
{ yyval.pbc = dobase(0,yypvt[-0].pn,yypvt[-1].t); } break;
case 62:
# line 759 "gram.y"
{ yyval.pbc = dobase(yypvt[-2].t,yypvt[-0].pn,yypvt[-1].t); } break;
case 63:
# line 760 "gram.y"
{ yyval.pbc = dobase(yypvt[-1].t,yypvt[-0].pn,yypvt[-2].t); } break;
case 64:
# line 764 "gram.y"
{	
				yyval.p = start_cl(yypvt[-1].t,0,0); 
				++in_class_decl;
			} break;
case 65:
# line 770 "gram.y"
{	
				yyval.p = start_cl(yypvt[-3].t,yypvt[-2].pn,yypvt[-1].pbc);
				++in_class_decl;
			} break;
case 66:
# line 776 "gram.y"
{	yyval.p = yypvt[-0].pn; } break;
case 68:
# line 781 "gram.y"
{
				if (yypvt[-0].p) {
					if (yypvt[-1].p)
						yypvt[-1].nl->add_list(yypvt[-0].pn);
					else
						yyval.nl = new nlist(yypvt[-0].pn);
				}
			} break;
case 69:
# line 790 "gram.y"
{	yyval.p = 0; } break;
case 76:
# line 800 "gram.y"
{	yyval.p = new name;
				yyval.pn->base = yypvt[-1].t;
			} break;
case 77:
# line 804 "gram.y"
{	Pname n = Ncopy(yypvt[-1].pn);
				n->n_qualifier = yypvt[-2].pn;
				n->base = PR;
				yyval.p = n;
			} break;
case 78:
# line 810 "gram.y"
{	Pname n = Ncopy(yypvt[-1].pn);
				if (n->n_oper == TYPE) {
					error('s',"visibilityD for conversion operator");
					n->tp = Ptype(n->n_initializer);
					n->n_initializer = 0;
					n->n_oper = 0;
					sig_name(n);
				}
				n->n_qualifier = yypvt[-2].pn;
				n->base = PR;
				yyval.p = n;
			} break;
case 79:
# line 839 "gram.y"
{	yyval.p = yypvt[-0].pn; } break;
case 80:
# line 841 "gram.y"
{	yyval.p = Ncopy(yypvt[-0].pn);
				yyval.pn->n_oper = DTOR;
			} break;
case 81:
# line 845 "gram.y"
{	yyval.p = new name(oper_name(yypvt[-0].t));
				yyval.pn->n_oper = yypvt[-0].t;
			} break;
case 82:
# line 849 "gram.y"
{	Pname n = yypvt[-0].pn;
				n->string = "_type";
				n->n_oper = TYPE;
				n->n_initializer = Pexpr(n->tp);
				n->tp = 0;
				yyval.p = n;
			} break;
case 95:
# line 870 "gram.y"
{	yyval.t = CALL; } break;
case 96:
# line 871 "gram.y"
{	yyval.t = DEREF; } break;
case 102:
# line 877 "gram.y"
{	yyval.t = NEW; } break;
case 103:
# line 878 "gram.y"
{	yyval.t = DELETE; } break;
case 104:
# line 879 "gram.y"
{	yyval.t = REF; } break;
case 105:
# line 880 "gram.y"
{	yyval.t = CM; } break;
case 106:
# line 881 "gram.y"
{	yyval.t = REFMUL;
					if (yypvt[-0].t == DOT) error(".* cannot be overloaded");
				} break;
case 107:
# line 886 "gram.y"
{ yyval.pn = yypvt[-0].pn; } break;
case 108:
# line 887 "gram.y"
{	error("CNs do not nest"); } break;
case 109:
# line 888 "gram.y"
{	error("CNs do not nest"); } break;
case 110:
# line 892 "gram.y"
{	Freturns(yypvt[-0].p) = yypvt[-1].pn->tp;
				yypvt[-1].pn->tp = yypvt[-0].pt;
			} break;
case 111:
# line 896 "gram.y"
{	yypvt[-2].pn->tp = new fct(yypvt[-2].pn->tp,0,1);
 			} break;
case 112:
# line 900 "gram.y"
{	yypvt[-3].pn->tp = new fct(yypvt[-3].pn->tp,0,1);
 				Pfct(yypvt[-3].pn->tp)->f_const = 1;
 			} break;
case 113:
# line 904 "gram.y"
{	Pname n = yypvt[-1].pn;
				yyval.p = Ncopy(n);
				if (ccl && strcmp(n->string,ccl->string)) n->hide();
				yyval.pn->n_oper = TNAME;
				Freturns(yypvt[-0].p) = yyval.pn->tp;
				yyval.pn->tp = yypvt[-0].pt;
			} break;
case 114:
# line 916 "gram.y"
{	
				yypvt[-3].pn->tp = new fct(yypvt[-3].pn->tp,yypvt[-1].pn,1); 
 				in_arg_list = 0;
			} break;
case 115:
# line 921 "gram.y"
{ 
				Pptr p = new ptr( PTR, 0 );
				Ptyp(p) = yypvt[-2].pn->tp;
				Freturns( yypvt[-0].p ) = Ptype(p);
				yypvt[-2].pn->tp = yypvt[-0].pt;
				yyval.p = yypvt[-2].pn;
				if (DECL_TYPE == -1) DECL_TYPE = 0;
			} break;
case 116:
# line 930 "gram.y"
{	yyval.p = Ncopy(yypvt[-3].pn);
				yyval.pn->n_oper = TNAME;
				yyval.pn->tp = new fct(0,yypvt[-1].pn,1);
			} break;
case 117:
# line 935 "gram.y"
{	yyval.p = Ncopy(yypvt[-2].pn);
 				yyval.pn->n_oper = TNAME;
				yyval.pn->tp = new fct(0,0,1);
			} break;
case 118:
# line 941 "gram.y"
{	yyval.p = Ncopy(yypvt[-3].pn);
 				yyval.pn->n_oper = TNAME;
 				yyval.pn->tp = new fct(0,0,1);
 				Pfct(yypvt[-3].pn->tp)->f_const = 1;
			} break;
case 119:
# line 947 "gram.y"
{	memptrdcl(yypvt[-3].pn,yypvt[-5].pn,yypvt[-0].pt,yypvt[-2].pn);
				yyval.p = yypvt[-2].p;
			} break;
case 121:
# line 952 "gram.y"
{	yyval.p = Ncopy(yypvt[-0].pn);
				yyval.pn->n_qualifier = yypvt[-2].pn;
				error(ansi_opt?0:'w',"anachronism `.' used for qualification; please use `::'");
			} break;
case 122:
# line 957 "gram.y"
{	yyval.p = yypvt[-0].p;
				if ( yypvt[-1].pn != sta_name ) {
    					set_scope(yypvt[-1].pn); 
    					yyval.pn->n_qualifier = yypvt[-1].pn;
				}
			} break;
case 123:
# line 964 "gram.y"
{	
				if ( yypvt[-1].pn == sta_name ) 
     					error( ":: applied to CN%n", yypvt[-0].pn );
				yyval.p = Ncopy(yypvt[-0].pn);
				set_scope(yypvt[-1].pn);
				yyval.pn->n_oper = TNAME;
				yyval.pn->n_qualifier = yypvt[-1].pn;
			} break;
case 124:
# line 973 "gram.y"
{	Ptyp(yypvt[-1].p) = yypvt[-0].pn->tp;
				yypvt[-0].pn->tp = yypvt[-1].pt;
				yyval.p = yypvt[-0].p;
			} break;
case 125:
# line 978 "gram.y"
{	yyval.p = Ncopy(yypvt[-0].pn);
				yyval.pn->n_oper = TNAME;
				// cannot evaluate at this point: defer until data_dcl
				if ( in_typedef ) {
					defer_check = 1;
					in_tag = yypvt[-0].pn;
				}
				yypvt[-0].pn->hide();
				defer_check = 0;
				yyval.pn->tp = yypvt[-1].pt;
			} break;
case 126:
# line 990 "gram.y"
{	yyval.p = Ncopy(yypvt[-1].pn);
				yyval.pn->n_oper = TNAME;
				if ( in_typedef ) {
     					defer_check = 1;
     					in_tag = yypvt[-0].pn;
				}
				yypvt[-1].pn->hide();
				defer_check = 0;
				yyval.pn->tp = yypvt[-0].pt;
			} break;
case 127:
# line 1001 "gram.y"
{	Vtype(yypvt[-0].p) = yypvt[-1].pn->tp;
				yypvt[-1].pn->tp = yypvt[-0].pt;
			} break;
case 128:
# line 1018 "gram.y"
{ 
				yyval.p = yypvt[-1].p; 
				in_arg_list = 0;
			} break;
case 129:
# line 1025 "gram.y"
{	yyval.p = yypvt[-0].pn; } break;
case 130:
# line 1027 "gram.y"
{	yyval.p = Ncopy(yypvt[-0].pn);
				yyval.pn->n_oper = TNAME;
				yypvt[-0].pn->hide();
				yyval.pn->tp = yypvt[-1].pt;
			} break;
case 131:
# line 1033 "gram.y"
{	
				yyval.p = new name; 
				NOT_EXPECT_ID();
			} break;
case 132:
# line 1038 "gram.y"
{	Ptyp(yypvt[-1].p) = yypvt[-0].pn->tp;
				yypvt[-0].pn->tp = (Ptype)yypvt[-1].p;
				yyval.p = yypvt[-0].p;
			} break;
case 133:
# line 1043 "gram.y"
{	Vtype(yypvt[-0].p) = yypvt[-1].pn->tp;
				yypvt[-1].pn->tp = (Ptype)yypvt[-0].p;
			} break;
case 134:
# line 1047 "gram.y"
{	Freturns(yypvt[-0].p) = yypvt[-1].pn->tp;
				yypvt[-1].pn->tp = (Ptype)yypvt[-0].p;
			} break;
case 135:
# line 1063 "gram.y"
{ 
// error('d', "arg_lp arg_decl rp in_arg_list: %d", in_arg_list );
				yyval.p = yypvt[-1].p; 
				in_arg_list = 0;
			} break;
case 136:
# line 1071 "gram.y"
{	yyval.p = new name; } break;
case 137:
# line 1073 "gram.y"
{	Ptyp(yypvt[-1].p) = yypvt[-0].pn->tp;
				yypvt[-0].pn->tp = (Ptype)yypvt[-1].p;
				yyval.p = yypvt[-0].p;
                                NOT_EXPECT_ID();
			} break;
case 138:
# line 1079 "gram.y"
{	Vtype(yypvt[-0].p) = yypvt[-1].pn->tp;
				yypvt[-1].pn->tp = (Ptype)yypvt[-0].p;
			} break;
case 139:
# line 1084 "gram.y"
{ yyval.p = new name; } break;
case 140:
# line 1086 "gram.y"
{	Ptyp(yypvt[-1].p) = yypvt[-0].pn->tp;
				yypvt[-0].pn->tp = (Ptype)yypvt[-1].p;
				yyval.p = yypvt[-0].p;
				NOT_EXPECT_ID();
			} break;
case 141:
# line 1092 "gram.y"
{	Vtype(yypvt[-0].p) = yypvt[-1].pn->tp;
				yypvt[-1].pn->tp = (Ptype)yypvt[-0].p;
			} break;
case 142:
# line 1096 "gram.y"
{	Freturns(yypvt[-0].p) = yypvt[-2].pn->tp;
				yypvt[-2].pn->tp = yypvt[-0].pt;
				yyval.p = yypvt[-2].p;
			} break;
case 143:
# line 1101 "gram.y"
{	Vtype(yypvt[-0].p) = yypvt[-2].pn->tp;
				yypvt[-2].pn->tp = yypvt[-0].pt;
				yyval.p = yypvt[-2].p;
			} break;
case 144:
# line 1108 "gram.y"
{	yyval.p = new name; } break;
case 145:
# line 1110 "gram.y"
{	Ptyp(yypvt[-1].p) = yypvt[-0].pn->tp;
				yypvt[-0].pn->tp = (Ptype)yypvt[-1].p;
				yyval.p = yypvt[-0].p;
			} break;
case 146:
# line 1120 "gram.y"
{
				yyval.p = 0; 
			} break;
case 147:
# line 1124 "gram.y"
{	
				if (yypvt[-0].p)
					if (yypvt[-1].p)
						yypvt[-1].sl->add(yypvt[-0].ps);
					else {
						yyval.sl =  new slist(yypvt[-0].ps);
						stmt_seen = 1;
					}
			} break;
case 148:
# line 1135 "gram.y"
{
				yyval.p = yypvt[-0].p;
				if (yypvt[-0].p)	stmt_seen = 1;
			} break;
case 149:
# line 1142 "gram.y"
{
				yyval.p = 0;
				check_decl();
			} break;
case 150:
# line 1149 "gram.y"
{	yyval.p = yypvt[-1].p;
			/*	if ($<pe>$ == dummy) error("empty condition");*/
				stmt_seen = 1;
			} break;
case 151:
# line 1156 "gram.y"
{	cd_vec[cdi] = cd;
				stmt_vec[cdi] = stmt_seen;
				tn_vec[cdi] = modified_tn;
				lcl_blk_vec[cdi++] = local_blk;
				lcl_tn_vec[cdi] = local_tn;
				local_blk = 0;
				local_tn = 0;
				cd = 0;
				stmt_seen = 0;
				modified_tn = 0;
			} break;
case 152:
# line 1168 "gram.y"
{	Pname n = name_unlist(cd);
				Pstmt ss = stmt_unlist(yypvt[-1].sl);
				yyval.p = new block(yypvt[-3].l,n,ss);
				if ( local_tn ) local_restore();
				if ( local_blk ) local_name();
				if (modified_tn) restore();
				cd = cd_vec[--cdi];
				stmt_seen = stmt_vec[cdi];
				modified_tn = tn_vec[cdi];
				local_tn = lcl_tn_vec[cdi];
				local_blk = lcl_blk_vec[cdi];
				if (cdi < 0) error('i',"block level(%d)",cdi);
				NOT_EXPECT_ID();
			} break;
case 153:
# line 1183 "gram.y"
{	yyval.p = new block(yypvt[-1].l,0,0); NOT_EXPECT_ID();} break;
case 154:
# line 1185 "gram.y"
{	yyval.p = new block(yypvt[-2].l,0,0); NOT_EXPECT_ID();} break;
case 155:
# line 1189 "gram.y"
{	yyval.p = new estmt(SM,curloc,yypvt[-0].pe,0);	} break;
case 156:
# line 1191 "gram.y"
{	yyval.p = new stmt(BREAK,yypvt[-0].l,0); } break;
case 157:
# line 1193 "gram.y"
{	yyval.p = new stmt(CONTINUE,yypvt[-0].l,0); } break;
case 158:
# line 1195 "gram.y"
{	yyval.p = new lstmt(GOTO,yypvt[-1].l,yypvt[-0].pn,0); } break;
case 159:
# line 1196 "gram.y"
{ stmt_seen=1; } break;
case 160:
# line 1197 "gram.y"
{	yyval.p = new estmt(DO,yypvt[-4].l,yypvt[-0].pe,yypvt[-2].ps); } break;
case 161:
# line 1199 "gram.y"
{	
				if (stmt_seen)
					yyval.p = new estmt(ASM,curloc,(Pexpr)yypvt[-1].s,0);
				else {
					Pname n = new name(make_name('A'));
					n->tp = new basetype(ASM,(Pname)yypvt[-1].s);
					if (cd)
						cd->add_list(n);
					else
						cd = new nlist(n);
					yyval.p = 0;
				}
			} break;
case 180:
# line 1235 "gram.y"
{ error("`;' missing afterS"); } break;
case 181:
# line 1237 "gram.y"
{	yyval.p = new estmt(SM,yypvt[-0].l,dummy,0); } break;
case 182:
# line 1239 "gram.y"
{	yyval.p = new estmt(RETURN,yypvt[-2].l,yypvt[-1].pe,0); } break;
case 183:
# line 1241 "gram.y"
{
				error("local linkage specification");
				yyval.p = yypvt[-0].pn;
			} break;
case 184:
# line 1246 "gram.y"
{	Pname n = yypvt[-0].pn;
				if (n)
					if (stmt_seen) {
						yyval.p = new block(n->where,n,0);
						yyval.ps->base = DCL;
					}
					else {
						if (cd)
							cd->add_list(n);
						else
							cd = new nlist(n);
						yyval.p = 0;
					}
			} break;
case 185:
# line 1261 "gram.y"
{
				Pname n = yypvt[-0].pn;
				lex_unget(RC);
				error(&n->where,"%n's definition is nested (did you forget a ``}''?)",n);
				if (cd)
					cd->add_list(n);
				else
					cd = new nlist(n);
				yyval.p = 0;
			} break;
case 187:
# line 1273 "gram.y"
{	yyval.p = new ifstmt(yypvt[-2].l,yypvt[-1].pe,yypvt[-0].ps,0); } break;
case 188:
# line 1275 "gram.y"
{	yyval.p = new ifstmt(yypvt[-4].l,yypvt[-3].pe,yypvt[-2].ps,yypvt[-0].ps); } break;
case 189:
# line 1277 "gram.y"
{	yyval.p = new estmt(WHILE,yypvt[-2].l,yypvt[-1].pe,yypvt[-0].ps); } break;
case 190:
# line 1278 "gram.y"
{ stmt_seen=1; } break;
case 191:
# line 1279 "gram.y"
{	yyval.p = new forstmt(yypvt[-8].l,yypvt[-5].ps,yypvt[-4].pe,yypvt[-2].pe,yypvt[-0].ps); } break;
case 192:
# line 1281 "gram.y"
{	yyval.p = new estmt(SWITCH,yypvt[-2].l,yypvt[-1].pe,yypvt[-0].ps); } break;
case 193:
# line 1282 "gram.y"
{ yyval.p = yypvt[-1].pn; stmt_seen=1; } break;
case 194:
# line 1283 "gram.y"
{	Pname n = yypvt[-1].pn;
				yyval.p = new lstmt(LABEL,n->where,n,yypvt[-0].ps);
			} break;
case 195:
# line 1286 "gram.y"
{ stmt_seen=1; } break;
case 196:
# line 1287 "gram.y"
{	if (yypvt[-2].pe == dummy) error("empty case label");
				yyval.p = new estmt(CASE,yypvt[-4].l,yypvt[-2].pe,yypvt[-0].ps);
			} break;
case 197:
# line 1290 "gram.y"
{ stmt_seen=1; } break;
case 198:
# line 1291 "gram.y"
{	yyval.p = new stmt(DEFAULT,yypvt[-3].l,yypvt[-0].ps); } break;
case 199:
# line 1298 "gram.y"
{	Pexpr e = expr_unlist(yypvt[-0].el);
				while (e && e->e1==dummy) {
					register Pexpr ee2 = e->e2;
					if (ee2) error("EX inEL");
					delete e;
					e = ee2;
				}
				yyval.p = e;
			} break;
case 200:
# line 1309 "gram.y"
{	yyval.el = new elist(new expr(ELIST,yypvt[-0].pe,0)); } break;
case 201:
# line 1311 "gram.y"
{	yypvt[-2].el->add(new expr(ELIST,yypvt[-0].pe,0)); } break;
case 203:
# line 1316 "gram.y"
{
  			  	if ( in_arg_list ) 
       			  		error( "syntax error: IrL not permitted in AL" );
  			  	else 
					init_seen = 1;
				Pexpr e;
				if (yypvt[-1].p)
					e = yypvt[-1].pe;
				else
					e = new expr(ELIST,dummy,0);
				yyval.p = new expr(ILIST,e,0);
			} break;
case 204:
# line 1331 "gram.y"
{	bbinop:	yyval.p = new expr(yypvt[-1].t,yypvt[-2].pe,yypvt[-0].pe); } break;
case 205:
# line 1332 "gram.y"
{	goto bbinop; } break;
case 206:
# line 1333 "gram.y"
{	goto bbinop; } break;
case 207:
# line 1334 "gram.y"
{	goto bbinop; } break;
case 208:
# line 1335 "gram.y"
{	goto bbinop; } break;
case 209:
# line 1336 "gram.y"
{	goto bbinop; } break;
case 210:
# line 1337 "gram.y"
{	goto bbinop; } break;
case 211:
# line 1338 "gram.y"
{ 	goto bbinop; } break;
case 212:
# line 1339 "gram.y"
{	goto bbinop; } break;
case 213:
# line 1340 "gram.y"
{	goto bbinop; } break;
case 214:
# line 1341 "gram.y"
{	goto bbinop; } break;
case 215:
# line 1342 "gram.y"
{	goto bbinop; } break;
case 216:
# line 1343 "gram.y"
{	goto bbinop; } break;
case 217:
# line 1344 "gram.y"
{	goto bbinop; } break;
case 218:
# line 1345 "gram.y"
{	goto bbinop; } break;
case 219:
# line 1347 "gram.y"
{	yyval.p = new qexpr(yypvt[-4].pe,yypvt[-2].pe,yypvt[-0].pe); } break;
case 220:
# line 1349 "gram.y"
{	yyval.p = new expr(DELETE,yypvt[-0].pe,0); } break;
case 221:
# line 1351 "gram.y"
{	yyval.p = new expr(DELETE,yypvt[-0].pe,yypvt[-2].pe); } break;
case 222:
# line 1353 "gram.y"
{	yyval.p = new expr(GDELETE,yypvt[-0].pe,0); } break;
case 223:
# line 1355 "gram.y"
{	yyval.p = new expr(GDELETE,yypvt[-0].pe,yypvt[-2].pe); } break;
case 225:
# line 1360 "gram.y"
{	binop:	yyval.p = new expr(yypvt[-1].t,yypvt[-2].pe,yypvt[-0].pe); } break;
case 226:
# line 1361 "gram.y"
{	goto binop; } break;
case 227:
# line 1362 "gram.y"
{	goto binop; } break;
case 228:
# line 1363 "gram.y"
{	goto binop; } break;
case 229:
# line 1364 "gram.y"
{	goto binop; } break;
case 230:
# line 1365 "gram.y"
{	goto binop; } break;
case 231:
# line 1366 "gram.y"
{	goto binop; } break;
case 232:
# line 1367 "gram.y"
{ 	goto binop; } break;
case 233:
# line 1368 "gram.y"
{	goto binop; } break;
case 234:
# line 1369 "gram.y"
{	goto binop; } break;
case 235:
# line 1370 "gram.y"
{	goto binop; } break;
case 236:
# line 1371 "gram.y"
{	goto binop; } break;
case 237:
# line 1372 "gram.y"
{	goto binop; } break;
case 238:
# line 1373 "gram.y"
{	goto binop; } break;
case 239:
# line 1374 "gram.y"
{	goto binop; } break;
case 240:
# line 1376 "gram.y"
{	yyval.p = new qexpr(yypvt[-4].pe,yypvt[-2].pe,yypvt[-0].pe); } break;
case 241:
# line 1378 "gram.y"
{	yyval.p = new expr(DELETE,yypvt[-0].pe,0); } break;
case 242:
# line 1380 "gram.y"
{	yyval.p = new expr(DELETE,yypvt[-0].pe,yypvt[-2].pe); } break;
case 243:
# line 1382 "gram.y"
{	yyval.p = new expr(GDELETE,yypvt[-0].pe,0); } break;
case 244:
# line 1384 "gram.y"
{	yyval.p = new expr(GDELETE,yypvt[-0].pe,yypvt[-2].pe); } break;
case 245:
# line 1385 "gram.y"
{ 
			init_seen = 0; 
			} break;
case 246:
# line 1389 "gram.y"
{	yyval.p = dummy; } break;
case 247:
# line 1392 "gram.y"
{ goto new1; } break;
case 248:
# line 1394 "gram.y"
{	new1:
				Ptype t = yypvt[-0].pn->tp;
				yyval.p = new texpr(NEW,t,0);
			} break;
case 249:
# line 1398 "gram.y"
{ goto new3; } break;
case 250:
# line 1400 "gram.y"
{	new3:
				Ptype t = yypvt[-0].pn->tp;
 				yyval.p = new texpr(GNEW,t,0);
 			} break;
case 251:
# line 1405 "gram.y"
{	yyval.p = new expr(yypvt[-0].t,yypvt[-1].pe,0); } break;
case 252:
# line 1407 "gram.y"
{	yyval.p = new texpr(CAST,yypvt[-1].pn->tp,yypvt[-0].pe); } break;
case 253:
# line 1409 "gram.y"
{	yyval.p = new expr(DEREF,yypvt[-0].pe,0); } break;
case 254:
# line 1411 "gram.y"
{	yyval.p = new expr(ADDROF,0,yypvt[-0].pe); } break;
case 255:
# line 1413 "gram.y"
{	yyval.p = new expr(UMINUS,0,yypvt[-0].pe); } break;
case 256:
# line 1415 "gram.y"
{	yyval.p = new expr(UPLUS,0,yypvt[-0].pe); } break;
case 257:
# line 1417 "gram.y"
{	yyval.p = new expr(NOT,0,yypvt[-0].pe); } break;
case 258:
# line 1419 "gram.y"
{	yyval.p = new expr(COMPL,0,yypvt[-0].pe); } break;
case 259:
# line 1421 "gram.y"
{	yyval.p = new expr(yypvt[-1].t,0,yypvt[-0].pe); } break;
case 260:
# line 1423 "gram.y"
{	yyval.p = new texpr(SIZEOF,0,yypvt[-0].pe); } break;
case 261:
# line 1425 "gram.y"
{	yyval.p = new texpr(SIZEOF,yypvt[-0].pn->tp,0); } break;
case 262:
# line 1427 "gram.y"
{	yyval.p = new expr(DEREF,yypvt[-3].pe,yypvt[-1].pe); } break;
case 263:
# line 1429 "gram.y"
{	yyval.p = new ref(REF,yypvt[-2].pe,yypvt[-0].pn); } break;
case 264:
# line 1431 "gram.y"
{	yyval.p = new expr(yypvt[-1].t,yypvt[-2].pe,yypvt[-0].pe); } break;
case 265:
# line 1433 "gram.y"
{	yyval.p = new ref(REF,yypvt[-2].pe,Ncopy(yypvt[-0].pn)); } break;
case 266:
# line 1435 "gram.y"
{	yyval.p = new ref(DOT,yypvt[-2].pe,yypvt[-0].pn); } break;
case 267:
# line 1437 "gram.y"
{	yyval.p = new ref(DOT,yypvt[-2].pe,Ncopy(yypvt[-0].pn)); } break;
case 269:
# line 1440 "gram.y"
{
			if ( init_seen )
     				error( "syntax error:IrL illegal within ()");
			} break;
case 270:
# line 1446 "gram.y"
{	yyval.p = yypvt[-1].p; } break;
case 271:
# line 1448 "gram.y"
{	yyval.p = zero; } break;
case 272:
# line 1450 "gram.y"
{	yyval.p = new expr(ICON,0,0);
				yyval.pe->string = yypvt[-0].s;
			} break;
case 273:
# line 1454 "gram.y"
{	yyval.p = new expr(FCON,0,0);
				yyval.pe->string = yypvt[-0].s;
			} break;
case 274:
# line 1458 "gram.y"
{	yyval.p = new expr(STRING,0,0);
				yyval.pe->string = yypvt[-0].s;
			} break;
case 275:
# line 1462 "gram.y"
{	yyval.p = new expr(CCON,0,0);
				yyval.pe->string = yypvt[-0].s;
			} break;
case 276:
# line 1466 "gram.y"
{	yyval.p = new expr(THIS,0,0); } break;
case 277:
# line 1470 "gram.y"
{ 	yyval.p = new texpr(VALUE,tok_to_type(yypvt[-3].t),yypvt[-1].pe); } break;
case 278:
# line 1472 "gram.y"
{	yyval.p = new texpr(VALUE,yypvt[-3].pn->tp,yypvt[-1].pe); } break;
case 279:
# line 1473 "gram.y"
{ goto new2; } break;
case 280:
# line 1475 "gram.y"
{	new2:
				Ptype t = yypvt[-0].pn->tp;
				yyval.p=new texpr(NEW,t,0);
				yyval.pe->e2 = yypvt[-2].pe;
			} break;
case 281:
# line 1480 "gram.y"
{ goto new4; } break;
case 282:
# line 1482 "gram.y"
{	new4:
				Ptype t = yypvt[-0].pn->tp;
				yyval.p = new texpr(GNEW,t,0);
				yyval.pe->e2 = yypvt[-2].pe;
			} break;
case 283:
# line 1488 "gram.y"
{	
				Pexpr ee = yypvt[-1].pe;
				Pexpr e = yypvt[-3].pe;
				if (e->base==NEW || e->base==GNEW)
					e->e1 = ee;
				else
					yyval.p = new call(e,ee);
			} break;
case 284:
# line 1499 "gram.y"
{       yyval.pn = yypvt[-0].pn; } break;
case 285:
# line 1501 "gram.y"
{       yyval.pn = sta_name; } break;
case 286:
# line 1506 "gram.y"
{	yyval.p = yypvt[-0].pn; } break;
case 287:
# line 1508 "gram.y"
{	yyval.p = Ncopy(yypvt[-0].pn);
				yyval.pn->n_qualifier = yypvt[-1].pn;
			} break;
case 288:
# line 1512 "gram.y"
{	yyval.p = new name(oper_name(yypvt[-0].t));
				yyval.pn->n_oper = yypvt[-0].t;
			} break;
case 289:
# line 1516 "gram.y"
{	yyval.p = new name(oper_name(yypvt[-0].t));
				yyval.pn->n_oper = yypvt[-0].t;
				yyval.pn->n_qualifier = yypvt[-2].pn;
			} break;
case 290:
# line 1521 "gram.y"
{	yyval.p = yypvt[-0].p;
				sig_name(yyval.pn);
			} break;
case 291:
# line 1525 "gram.y"
{	yyval.p = yypvt[-0].p;
				sig_name(yyval.pn);
				yyval.pn->n_qualifier = yypvt[-2].pn;
			} break;
case 292:
# line 1530 "gram.y"
{	
				if (strcmp(yypvt[-2].pn->string,yypvt[-0].pn->string)) error("syntax error: inconsistent destructor notation");
				yyval.p = new name(oper_name(DTOR));
				yyval.pn->n_oper = DTOR;
				yyval.pn->n_qualifier = yypvt[-2].pn;
			} break;
case 293:
# line 1542 "gram.y"
{ yyval.p = Ncast(yypvt[-2].p,yypvt[-1].pn); } break;
case 294:
# line 1545 "gram.y"
{ check_cast(); } break;
case 295:
# line 1549 "gram.y"
{
				TOK t = yypvt[-0].t;

				switch (t) {
				case FRIEND:
				case OVERLOAD:
				case REGISTER:
				case STATIC:
				case EXTERN:
				case AUTO:
				case VIRTUAL:
					error("%k in operatorT",t);
					t = INT;
					
				}

				yyval.p = new basetype(t,0);

			} break;
case 296:
# line 1568 "gram.y"
{ yyval.p = new basetype(TYPE,yypvt[-0].pn); } break;
case 297:
# line 1570 "gram.y"
{ 
				if ( DECL_TYPE != -1 ) 
					yyval.p = yypvt[-1].pb->type_adj(yypvt[-0].t); 
				DECL_TYPE = 0;
			} break;
case 298:
# line 1576 "gram.y"
{ 
				if ( DECL_TYPE != -1 ) 
			 		yyval.p = yypvt[-1].pb->name_adj(yypvt[-0].pn);
				DECL_TYPE = 0;
			} break;
case 299:
# line 1583 "gram.y"
{ yyval.p = Ncast(yypvt[-1].p,yypvt[-0].pn); } break;
case 300:
# line 1586 "gram.y"
{ yyval.p = Ncast(yypvt[-1].p,yypvt[-0].pn); } break;
case 301:
# line 1589 "gram.y"
{	yyval.p = Ndata(yypvt[-1].p,yypvt[-0].pn); } break;
case 302:
# line 1591 "gram.y"
{	yyval.p = Ndata(yypvt[-3].p,yypvt[-2].pn);
				yyval.pn->n_initializer = yypvt[-0].pe;
			} break;
case 303:
# line 1597 "gram.y"
{ 
				check_decl(); 
				in_arg_list=1; 
				if ( in_class_decl ) in_mem_fct = 1; 
			} break;
case 304:
# line 1605 "gram.y"
{ 
			yyval.p = new fct(0,name_unlist(yypvt[-2].nl),yypvt[-1].t); 
			if ( NEXTTOK() != COLON ) in_arg_list=0;
		    } break;
case 305:
# line 1610 "gram.y"
{ 
			yyval.p = new fct(0,name_unlist(yypvt[-3].nl),yypvt[-2].t); 
			in_arg_list=0;
			if (yypvt[-0].t != CONST)
			if ( la_look() != SM ) {
				error("syntax error: unexpected%k (did you forget a `;'?)",yypvt[-0].t);
                        	{ YYSTYPE y; y.t = SM; la_backup(SM,y); }
                        	lex_unget(yypvt[-0].t);
 			}
				else error("syntax error: unexpected%k",yypvt[-0].t);
			Pfct(yyval.pt)->f_const = 1;
		    } break;
case 306:
# line 1625 "gram.y"
{
				if (yypvt[-0].p)
					if (yypvt[-2].p)
						yypvt[-2].nl->add(yypvt[-0].pn);
					else {
						error("AD syntax");
						yyval.nl = new nlist(yypvt[-0].pn); 
					}
				else
					error("AD syntax");
			} break;
case 307:
# line 1637 "gram.y"
{
				if (yypvt[-0].p) yyval.nl = new nlist(yypvt[-0].pn); 
			} break;
case 309:
# line 1643 "gram.y"
{	yyval.p = 0; } break;
case 310:
# line 1647 "gram.y"
{	yyval.t = 1; } break;
case 311:
# line 1649 "gram.y"
{	yyval.t = ELLIPSIS; } break;
case 312:
# line 1651 "gram.y"
{	yyval.t = ELLIPSIS; } break;
case 313:
# line 1655 "gram.y"
{
			yyval.p = new ptr(PTR,0); 
			EXPECT_ID();
			} break;
case 314:
# line 1660 "gram.y"
{
			yyval.p = new ptr(RPTR,0); 
			EXPECT_ID();
			} break;
case 315:
# line 1665 "gram.y"
{	yyval.p = doptr(PTR,yypvt[-0].t); } break;
case 316:
# line 1667 "gram.y"
{	
				switch ( yypvt[-0].t ) {
				case CONST:
                                     yypvt[-1].pp->rdo = 1; break;
				case VOLATILE:
				     error('w',"\"volatile\" not implemented (ignored)");
				     break;
				default:
				    error( "syntax error: *%k", yypvt[-0].t );
				}
				yyval.p = yypvt[-1].pp; 
			} break;
case 317:
# line 1680 "gram.y"
{	yyval.p = doptr(RPTR,yypvt[-0].t); } break;
case 318:
# line 1682 "gram.y"
{
			yyval.p = new ptr(PTR,0);
			yyval.pp->memof = Pclass(Pbase(yypvt[-0].pn->tp)->b_name->tp);
			EXPECT_ID();
			} break;
case 319:
# line 1688 "gram.y"
{	yyval.p = doptr(PTR,yypvt[-0].t);
				yyval.pp->memof = Pclass(Pbase(yypvt[-1].pn->tp)->b_name->tp);
			} break;
case 320:
# line 1693 "gram.y"
{ yyval.p = new vec(0,yypvt[-1].pe!=dummy?yypvt[-1].pe:0 ); } break;
case 321:
# line 1694 "gram.y"
{ yyval.p = new vec(0,0); } break;
	}
	goto yystack;  /* stack new state and value */
}