📄 y.tab.c
字号:
** 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 + -