⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 y.tab.c

📁 CFront1.0的源代码,第一代C++编译器的思想...
💻 C
📖 第 1 页 / 共 5 页
字号:
		** If yyr2[ yy_n ] doesn't have the low order bit		** set, then there is no action to be done for		** this reduction.  So, no saving & unsaving of		** registers done.  The only difference between the		** code just after the if and the body of the if is		** the goto yy_stack in the body.  This way the test		** can be made before the choice of what to do is needed.		*/		{			/* length of production doubled with extra bit */			register int yy_len = yyr2[ yy_n ];			if ( !( yy_len & 01 ) )			{				yy_len >>= 1;				yyval = ( yy_pv -= yy_len )[1];	/* $$ = $1 */				yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] +					*( yy_ps -= yy_len ) + 1;				if ( yy_state >= YYLAST ||					yychk[ yy_state =					yyact[ yy_state ] ] != -yy_n )				{					yy_state = yyact[ yypgo[ yy_n ] ];				}				goto yy_stack;			}			yy_len >>= 1;			yyval = ( yy_pv -= yy_len )[1];	/* $$ = $1 */			yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] +				*( yy_ps -= yy_len ) + 1;			if ( yy_state >= YYLAST ||				yychk[ yy_state = yyact[ yy_state ] ] != -yy_n )			{				yy_state = yyact[ yypgo[ yy_n ] ];			}		}					/* save until reenter driver code */		yystate = yy_state;		yyps = yy_ps;		yypv = yy_pv;	}	/*	** code supplied by user is placed in this switch	*/	switch( yytmp )	{		case 1:# line 343 "gram.y"{	return yypvt[-0].i; } break;case 2:# line 345 "gram.y"{	return 1; } break;case 3:# line 347 "gram.y"{	return 0; } break;case 4:# line 351 "gram.y"{	modified_tn = 0; if (yypvt[-0].pn==0) yyval.i = 1; } break;case 5:# line 353 "gram.y"{	goto mod; } break;case 6:# line 355 "gram.y"{	goto mod; } break;case 7:# line 357 "gram.y"{ mod:	if (modified_tn) {					restore();					modified_tn = 0;				}			} break;case 8:# line 363 "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 9:# line 371 "gram.y"{	Pname n = yypvt[-1].pn;				if (n==0 || n->tp==0) {					error("TX for%n",n);					yyval.p = Ndata(defa_type,yypvt[-1].p);				}				switch (n->tp->base) {				case FCT:					yyval.p = Nfct(defa_type,n,0);					break;				default:					error("TX for%n",n);					yyval.p = Ndata(defa_type,yypvt[-1].p);				}			} break;case 10:# line 389 "gram.y"{	Pname n = Nfct(yypvt[-4].p,yypvt[-3].p,yypvt[-0].p);				Fargdcl(n->tp,Nunlist(yypvt[-2].p),n);				Finit(n->tp) = yypvt[-1].pn;				yyval.p = n;			} break;case 11:# line 397 "gram.y"{	Pname n = Nfct(defa_type,yypvt[-3].p,yypvt[-0].p);				Fargdcl(n->tp,Nunlist(yypvt[-2].p),n);				Finit(n->tp) = yypvt[-1].pn;				yyval.p = n;			} break;case 12:# line 405 "gram.y"{	yyval.p = yypvt[-0].p; } break;case 13:# line 407 "gram.y"{	yyval.p = 0; } break;case 15:# line 412 "gram.y"{	yyval.pn = yypvt[-0].pn;  yyval.pn->n_list = yypvt[-2].pn; } break;case 16:# line 416 "gram.y"{	yyval.pn = new name;				yyval.pn->n_initializer = yypvt[-1].pe;			} break;case 17:# line 420 "gram.y"{	yyval.pn = yypvt[-3].pn;				yyval.pn->n_initializer = yypvt[-1].pe;			} break;case 18:# line 431 "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)					Nadd_list(yypvt[-1].p,yypvt[-0].p);				else					yyval.p = nlistN(yypvt[-0].p);			} break;case 19:# line 441 "gram.y"{	yyval.p = 0; } break;case 21:# line 446 "gram.y"{	yyval.p = yypvt[-2].pn;				Ntype(yyval.p) = fieldN(yypvt[-0].pe);		 	} break;case 22:# line 450 "gram.y"{	yyval.p = new name;				Ntype(yyval.p) = fieldN(yypvt[-0].pe);			} break;case 23:# line 454 "gram.y"{	yypvt[-2].pn->n_initializer = yypvt[-0].pe; } break;case 24:# line 458 "gram.y"{	if (yypvt[-0].p) yyval.p = nlistN(yypvt[-0].p); } break;case 25:# line 460 "gram.y"{	if (yypvt[-2].p)					if (yypvt[-0].p)						Nadd(yypvt[-2].p,yypvt[-0].p);					else						error("DL syntax");				else {					if (yypvt[-0].p) yyval.p = nlistN(yypvt[-0].p);					error("DL syntax");				}			} break;case 26:# line 473 "gram.y"{	yyval.p = Ndata(yypvt[-2].p,Nunlist(yypvt[-1].p)); } break;case 27:# line 475 "gram.y"{	yyval.p = yypvt[-1].pb->aggr(); } break;case 28:# line 480 "gram.y"{	yyval.p = new basetype(yypvt[-0].t,0); } break;case 29:# line 482 "gram.y"{	yyval.p = new basetype(TYPE,yypvt[-0].pn); } break;case 33:# line 489 "gram.y"{	yyval.p = yypvt[-1].pb->type_adj(yypvt[-0].t); } break;case 34:# line 491 "gram.y"{	yyval.p = yypvt[-1].pb->name_adj(yypvt[-0].pn); } break;case 35:# line 493 "gram.y"{	yyval.p = yypvt[-1].pb->base_adj(yypvt[-0].pb); } break;case 36:# line 495 "gram.y"{	yyval.p = yypvt[-1].pb->base_adj(yypvt[-0].pb); } break;case 37:# line 505 "gram.y"{	yyval.p = end_enum(0,yypvt[-1].pn); } break;case 38:# line 507 "gram.y"{	yyval.p = end_enum(yypvt[-3].pn,yypvt[-1].pn); } break;case 39:# line 511 "gram.y"{	if (yypvt[-0].p) yyval.p = nlistN(yypvt[-0].p); } break;case 40:# line 513 "gram.y"{	if( yypvt[-0].p) if (yypvt[-2].p) Nadd(yypvt[-2].p,yypvt[-0].p); else yyval.p = nlistN(yypvt[-0].p); } break;case 41:# line 517 "gram.y"{	yyval.p = yypvt[-0].pn; Ntype(yyval.p) = moe_type; } break;case 42:# line 519 "gram.y"{	yyval.p = yypvt[-2].pn;				Ntype(yyval.p) = moe_type;				yyval.pn->n_initializer = yypvt[-0].pe;			} break;case 43:# line 524 "gram.y"{	yyval.p = 0; } break;case 44:# line 529 "gram.y"{	end_cl(); } break;case 45:# line 531 "gram.y"{	end_cl();				error("`;' or declaratorX afterCD");				lex_unget(yypvt[-0].t);				/* lex_unget($4); but only one unget, sorry */			 } break;case 46:# line 539 "gram.y"{	yyval.p = start_cl(yypvt[-1].t,0,0); } break;case 47:# line 541 "gram.y"{	yyval.p = start_cl(yypvt[-2].t,yypvt[-1].pn,0); } break;case 48:# line 543 "gram.y"{	yyval.p = start_cl(yypvt[-4].t,yypvt[-3].pn,yypvt[-1].pn);				if (yypvt[-4].t == STRUCT) ccl->pubbase = 1;			} break;case 49:# line 547 "gram.y"{	yyval.p = start_cl(yypvt[-5].t,yypvt[-4].pn,yypvt[-1].pn);				ccl->pubbase = 1;			} break;case 50:# line 553 "gram.y"{ yyval.p = yypvt[-0].pn; } break;case 52:# line 558 "gram.y"{	Pname n = Nunlist(yypvt[-0].p);				if (ccl->is_simple())					ccl->pubmem = n;				else					ccl->privmem = n;				yyval.p = 0;			} break;case 53:# line 566 "gram.y"{	error("``:'' missing after ``public''");				ccl->pubmem = Nunlist(yypvt[-0].p);				TOK t = ccl->is_simple();				if (t) error("public in%k",t);				ccl->privmem = Nunlist(yypvt[-2].p);				yyval.p = 0;			} break;case 54:# line 574 "gram.y"{	ccl->pubmem = Nunlist(yypvt[-0].p);				TOK t = ccl->is_simple();				if (t) error("public in%k",t);				ccl->privmem = Nunlist(yypvt[-3].p);				yyval.p = 0;			 } break;case 55:# line 583 "gram.y"{	if (yypvt[-0].p) if (yypvt[-1].p) Nadd_list(yypvt[-1].p,yypvt[-0].p); else yyval.p = nlistN(yypvt[-0].p); } break;case 56:# line 585 "gram.y"{	yyval.p = 0; } break;case 63:# line 595 "gram.y"{	Pname n = Ncopy(yypvt[-1].p);				n->n_qualifier = (Pname)yypvt[-2].p;				n->n_list = ccl->pubdef;				ccl->pubdef = n;				yyval.p = 0;			} break;case 64:# line 619 "gram.y"{	yyval.p = yypvt[-0].pn; } break;case 65:# line 621 "gram.y"{	yyval.p = Ncopy(yypvt[-0].p); yyval.pn->n_oper = DTOR; } break;case 66:# line 623 "gram.y"{	yyval.p = new name(oper_name(yypvt[-0].t));				yyval.pn->n_oper = yypvt[-0].t;			} break;case 67:# line 627 "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 80:# line 648 "gram.y"{	yyval.t = CALL; } break;case 81:# line 649 "gram.y"{	yyval.t = DEREF; } break;case 87:# line 655 "gram.y"{	yyval.t = NEW; } break;case 88:# line 656 "gram.y"{	yyval.t = DELETE; } break;case 91:# line 662 "gram.y"{	error("CNs do not nest"); } break;case 92:# line 664 "gram.y"{	error("CNs do not nest"); } break;case 93:# line 668 "gram.y"{	Freturns(yypvt[-0].p) = Ntype(yypvt[-1].p);				Ntype(yypvt[-1].p) = (Ptype)yypvt[-0].p;			} break;case 94:# line 672 "gram.y"{	Pname n = (Pname)yypvt[-1].p;				yyval.p = Ncopy(n);				if (ccl && strcmp(n->string,ccl->string)) Nhide(n);				yyval.pn->n_oper = TNAME;				Freturns(yypvt[-0].p) = Ntype(yyval.p);				Ntype(yyval.p) = (Ptype)yypvt[-0].p;			} break;case 95:# line 684 "gram.y"{	TOK k = 1;				Pname l = yypvt[-1].pn;				if (fct_void && l==0) k = 0;				Ntype(yypvt[-3].p) = fctN(Ntype(yypvt[-3].p),l,k);			} break;case 96:# line 690 "gram.y"{	TOK k = 1;				Pname l = yypvt[-1].pn;				if (fct_void && l==0) k = 0;				yyval.p = Ncopy(yypvt[-3].p);				yyval.pn->n_oper = TNAME;				Ntype(yyval.p) = fctN(0,l,k);			} break;case 98:# line 699 "gram.y"{	yyval.p = Ncopy(yypvt[-0].p);				yyval.pn->n_qualifier = yypvt[-2].pn;			} break;case 99:# line 703 "gram.y"{	yyval.p = yypvt[-0].p;				set_scope(yypvt[-1].pn);				yyval.pn->n_qualifier = yypvt[-1].pn;			} break;case 100:# line 708 "gram.y"{	yyval.p = Ncopy(yypvt[-0].p);				set_scope(yypvt[-1].pn);				yyval.pn->n_oper = TNAME;				yyval.pn->n_qualifier = yypvt[-1].pn;			} break;case 101:# line 714 "gram.y"{	Ptyp(yypvt[-1].p) = Ntype(yypvt[-0].p);				Ntype(yypvt[-0].p) = (Ptype)yypvt[-1].p;				yyval.p = yypvt[-0].p;			} break;case 102:# line 719 "gram.y"{	yyval.p = Ncopy(yypvt[-0].p);				yyval.pn->n_oper = TNAME;				Nhide(yypvt[-0].p);				Ntype(yyval.p) = (Ptype)yypvt[-1].p;			} break;case 103:# line 725 "gram.y"{	yyval.p = Ncopy(yypvt[-1].p);				yyval.pn->n_oper = TNAME;				Nhide(yypvt[-1].p);				Ntype(yyval.p) = (Ptype)yypvt[-0].p;			} break;case 104:# line 731 "gram.y"{	Vtype(yypvt[-0].p) = Ntype(yypvt[-1].p);				Ntype(yypvt[-1].p) = (Ptype)yypvt[-0].p;			} break;case 105:# line 735 "gram.y"{	Freturns(yypvt[-0].p) = Ntype(yypvt[-2].p);				Ntype(yypvt[-2].p) = (Ptype)yypvt[-0].p;				yyval.p = yypvt[-2].p;			} break;case 106:# line 740 "gram.y"{	Vtype(yypvt[-0].p) = Ntype(yypvt[-2].p);				Ntype(yypvt[-2].p) = (Ptype)yypvt[-0].p;				yyval.p = yypvt[-2].p;			} break;case 107:# line 747 "gram.y"{	yyval.p = yypvt[-0].pn; } break;case 108:# line 749 "gram.y"{	yyval.p = new name; } break;case 109:# line 751 "gram.y"{	Ptyp(yypvt[-1].p) = Ntype(yypvt[-0].p);				Ntype(yypvt[-0].p) = (Ptype)yypvt[-1].p;				yyval.p = yypvt[-0].p;			} break;case 110:# line 756 "gram.y"{	Vtype(yypvt[-0].p) = Ntype(yypvt[-1].p);				Ntype(yypvt[-1].p) = (Ptype)yypvt[-0].p;			} break;case 111:# line 760 "gram.y"{	Freturns(yypvt[-0].p) = Ntype(yypvt[-2].p);				Ntype(yypvt[-2].p) = (Ptype)yypvt[-0].p;				yyval.p = yypvt[-2].p;			} break;case 112:# line 765 "gram.y"{	Vtype(yypvt[-0].p) = Ntype(yypvt[-2].p);				Ntype(yypvt[-2].p) = (Ptype)yypvt[-0].p;				yyval.p = yypvt[-2].p;			} break;case 113:# line 772 "gram.y"{	yyval.p = new name; } break;case 114:# line 774 "gram.y"{	Ptyp(yypvt[-1].p) = Ntype(yypvt[-0].p);				Ntype(yypvt[-0].p) = (Ptype)yypvt[-1].p;				yyval.p = yypvt[-0].p;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -