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

📄 old_parse.c

📁 calc大数库
💻 C
📖 第 1 页 / 共 3 页
字号:
{ 
	  POLYI O, P;
	  O = ONEPI();
	  P = SCALARPI(yyvsp[0].val, O);
	  yyval.pol = ADDPI(yyvsp[-2].pol, P);
	  DELETEPI(O);
	  DELETEPI(P);
	  DELETEPI(yyvsp[-2].pol);
	  FREEMPI(yyvsp[0].val);
	}
break;
case 24:
#line 211 "parse.y"
{ 
	  POLYI O, P;
	  O = ONEPI();
	  P = SCALARPI(yyvsp[-2].val, O);
	  yyval.pol = ADDPI(yyvsp[0].pol, P);
	  DELETEPI(O);
	  DELETEPI(P);
	  DELETEPI(yyvsp[0].pol);
	  FREEMPI(yyvsp[-2].val);
	}
break;
case 25:
#line 223 "parse.y"
{ 
	  POLYI O, P;
	  O = ONEPI();
	  P = SCALARPI(yyvsp[0].val, O);
	  yyval.pol = SUBPI(yyvsp[-2].pol, P);
	  DELETEPI(O);
	  DELETEPI(P);
	  DELETEPI(yyvsp[-2].pol);
	  FREEMPI(yyvsp[0].val);
	}
break;
case 26:
#line 234 "parse.y"
{ 
	  POLYI O, P;
	  O = ONEPI();
	  P = SCALARPI(yyvsp[-2].val, O);
	  yyval.pol = SUBPI(P, yyvsp[0].pol);
	  DELETEPI(O);
	  DELETEPI(P);
	  DELETEPI(yyvsp[0].pol);
	  FREEMPI(yyvsp[-2].val);
	}
break;
case 27:
#line 245 "parse.y"
{
	  yyval.pol = SCALARPI(yyvsp[-2].val,yyvsp[0].pol);
	  FREEMPI(yyvsp[-2].val);
	  DELETEPI(yyvsp[0].pol);
	}
break;
case 28:
#line 251 "parse.y"
{
	  yyval.pol = SCALARPI(yyvsp[0].val, yyvsp[-2].pol);
	  FREEMPI(yyvsp[0].val);
	  DELETEPI(yyvsp[-2].pol);
	}
break;
case 29:
#line 257 "parse.y"
{
	  yyval.pol = MULTPI(yyvsp[-2].pol, yyvsp[0].pol);
	  DELETEPI(yyvsp[-2].pol);
	  DELETEPI(yyvsp[0].pol);
	}
break;
case 30:
#line 263 "parse.y"
{
	  yyval.pol = POWERPI(yyvsp[-2].pol, CONVERTI(yyvsp[0].val));
	  DELETEPI(yyvsp[-2].pol);
	  FREEMPI(yyvsp[0].val);
	}
break;
case 31:
#line 269 "parse.y"
{ 
		yyval.pol = yyvsp[-1].pol; 
	}
break;
case 32:
#line 273 "parse.y"
{
	  Stack varStack;
	  if ((varStack = checkArgs(yyvsp[-1].sym))) {
	    yyval.pol = (*(yyvsp[-1].sym->u.ptrp))(varStack);
	    stackFree(&varStack);
	  } else {
	    rettype = FUNC_FAIL; /* return failure of function */
	    yyval.pol = NULL;
	  }
	}
break;
case 33:
#line 290 "parse.y"
{
	     unsigned n = CONVERTI(yyvsp[-3].val);
	     if (yyvsp[-5].sym->type == UNDEF) {
	       yyvsp[-5].sym->u.symarr = BUILDMPIA();
	       yyvsp[-5].sym->type = ARRAY;
	     }
	     ADD_TO_MPIA(yyvsp[-5].sym->u.symarr, yyvsp[0].val, n);
	     FREEMPI(yyvsp[-3].val);
	     FREEMPI(yyvsp[0].val);

	   }
break;
case 34:
#line 302 "parse.y"
{
	     if (yyvsp[-5].sym->type != UNDEF) 
	       FREEMPIA(yyvsp[-5].sym->u.symarr);
	     yyvsp[-5].sym->u.symarr = yyvsp[0].arr;
	     yyvsp[-5].sym->type=ARRAY;

           }
break;
case 35:
#line 310 "parse.y"
{
	     yyval.arr = BUILDMPIA();
	     ADD_TO_MPIA(yyval.arr, yyvsp[-1].val, 0);
	     FREEMPI(yyvsp[-1].val);
	   }
break;
case 36:
#line 316 "parse.y"
{
	     MPIA_INSERT(yyvsp[0].arr, yyvsp[-2].val, 0);
	     FREEMPI(yyvsp[-2].val);
	     yyval.arr = yyvsp[0].arr;
	   }
break;
case 37:
#line 323 "parse.y"
{
		if(yyvsp[-2].sym->type!=UNDEF && yyvsp[-2].sym->u.symval != NULL)
			FREEMPI(yyvsp[-2].sym->u.symval);		  
		yyvsp[-2].sym->u.symval=yyvsp[0].val;
		if ( yyvsp[-2].sym->u.symval != (MPI *) NULL)
			yyval.val = COPYI(yyvsp[-2].sym->u.symval);
		else
  			yyval.val = (MPI *) NULL;
		yyvsp[-2].sym->type = VAR; 
	}
break;
case 38:
#line 334 "parse.y"
{  
	  yyval.val = yyvsp[0].val; 
	}
break;
case 39:
#line 338 "parse.y"
{
	  if (yyvsp[0].sym->type == UNDEF)
			execerror("is an undefined variable", yyvsp[0].sym->name);
		else 
		  yyval.val = COPYI(yyvsp[0].sym->u.symval);
	}
break;
case 40:
#line 350 "parse.y"
{
	  yyval.val = VALPI(yyvsp[-3].pol, yyvsp[-1].val);
	  FREEMPI(yyvsp[-1].val);
	  DELETEPI(yyvsp[-3].pol);
	}
break;
case 41:
#line 356 "parse.y"
{
	  yyval.val = VALPI(yyvsp[-3].sym->u.sympval, yyvsp[-1].val);
	  FREEMPI(yyvsp[-1].val);
	}
break;
case 42:
#line 361 "parse.y"
{
	  int ind;
		if (yyvsp[-3].sym->type == UNDEF)
		{
			FREEMPI(yyvsp[-1].val);
			execerror("[] is an undefined array", yyvsp[-3].sym->name);
		}
		ind = (int)CONVERTI(yyvsp[-1].val);
		if(ind >= yyvsp[-3].sym->u.symarr->size)
		{
			FREEMPI(yyvsp[-1].val);
			execerror("array is too small", yyvsp[-3].sym->name);
		}
		yyval.val = COPYI(yyvsp[-3].sym->u.symarr->A[ind]);
		FREEMPI(yyvsp[-1].val);
	}
break;
case 43:
#line 378 "parse.y"
{
	}
break;
case 44:
#line 381 "parse.y"
{
		 yyval.val = ADDI(yyvsp[-2].val, yyvsp[0].val);
		 FREEMPI(yyvsp[-2].val);
		 FREEMPI(yyvsp[0].val);
	}
break;
case 45:
#line 387 "parse.y"
{ 
		yyval.val = SUBI(yyvsp[-2].val, yyvsp[0].val);
		FREEMPI(yyvsp[-2].val);
		FREEMPI(yyvsp[0].val);
	}
break;
case 46:
#line 393 "parse.y"
{
		yyval.val = MULTI(yyvsp[-2].val, yyvsp[0].val);
		FREEMPI(yyvsp[-2].val);
		FREEMPI(yyvsp[0].val);
	}
break;
case 47:
#line 399 "parse.y"
{
	        if((yyvsp[0].val)->S <= 0)
		{
			FREEMPI(yyvsp[-2].val);
			FREEMPI(yyvsp[0].val);
			execerror(" divisor <= 0", "");
		}
		yyval.val = INTI(yyvsp[-2].val, yyvsp[0].val);
		FREEMPI(yyvsp[-2].val);
		FREEMPI(yyvsp[0].val);
	}
break;
case 48:
#line 411 "parse.y"
{
	        if((yyvsp[0].val)->S <= 0)
		{
			FREEMPI(yyvsp[-2].val);
			FREEMPI(yyvsp[0].val);
			execerror(" divisor <= 0", "");
		}
		yyval.val = MOD(yyvsp[-2].val, yyvsp[0].val);
		FREEMPI(yyvsp[-2].val);
 	        FREEMPI(yyvsp[0].val);
	}
break;
case 49:
#line 423 "parse.y"
{ 
		if ((yyvsp[0].val)->S < 0)
		{
			FREEMPI(yyvsp[-2].val);
			FREEMPI(yyvsp[0].val);
			execerror("negative exponent", "");
		}
		if ((yyvsp[0].val)->D > 0)
		{
			FREEMPI(yyvsp[-2].val);
			FREEMPI(yyvsp[0].val);
			execerror("exponent >= R0", "");
		}
		yyval.val = POWERI(yyvsp[-2].val, (unsigned int)(CONVERTI(yyvsp[0].val))); 
 		FREEMPI(yyvsp[-2].val);
		FREEMPI(yyvsp[0].val);
	}
break;
case 50:
#line 435 "parse.y"
{
		yyval.val = MINUSI(yyvsp[0].val); 
		FREEMPI(yyvsp[0].val);
	}
break;
case 51:
#line 440 "parse.y"
{ 
		yyval.val = yyvsp[-1].val; 
	}
break;
case 52:
#line 444 "parse.y"
{        
	  Stack varStack;
	  if ((varStack = checkArgs(yyvsp[-1].sym))) {
	    yyval.val = (*(yyvsp[-1].sym->u.ptr))(varStack);
	    stackFree(&varStack);
	  } else {
	    yyval.val = NULL;
	    rettype = FUNC_FAIL;
	  }
	}
break;
case 53:
#line 457 "parse.y"
{
	  Stack varStack;
	  if ((varStack = checkArgs(yyvsp[-1].sym))) {
	    (*(yyvsp[-1].sym->u.ptrv))(varStack);
	    stackFree(&varStack);
	  } else {
	    rettype = FUNC_FAIL;
	  }
	}
break;
case 54:
#line 467 "parse.y"
{ 
	  if (yyvsp[-2].sym->type != UNDEF){
	    PRINTIA(yyvsp[-2].sym->u.symarr);
	  } else {
	    execerror("undefined array", yyvsp[-2].sym->name );
	  }
	}
break;
case 55:
#line 476 "parse.y"
{
       }
break;
case 56:
#line 479 "parse.y"
{
       }
break;
case 57:
#line 484 "parse.y"
{
	   stackPush(argStack, createArg(yyvsp[-1].val, NUM, 0));
         }
break;
case 58:
#line 488 "parse.y"
{
	   stackPush(argStack, createArg(yyvsp[-1].pol, POLY, 0));
         }
break;
case 59:
#line 492 "parse.y"
{
	   if (yyvsp[-3].sym->type != UNDEF) {
	     stackPush(argStack, createArg(yyvsp[-3].sym, ARR, 0));
	   } else {
	     execerror("[] is an undefined array", yyvsp[-3].sym->name);
	     rettype = FUNC_FAIL;
	   }
         }
break;
case 60:
#line 501 "parse.y"
{

	   /* S.Seefried.  Normally one would free an old array if it 
	    * existed.  I have deferred this until I am sure all arguments
	    * on the command line are valid for the function in question.
	    * See checkArgs.  It is here that I free. */
	   if (yyvsp[-3].sym->type != UNDEF)
	     stackPush(argStack, createArg(yyvsp[-3].sym, ARRADR, 1));	     
	   else
	     stackPush(argStack, createArg(yyvsp[-3].sym, ARRADR, 0));
	   yyvsp[-3].sym->type=ARRAY;
         }
break;
case 61:
#line 514 "parse.y"
{

	   if (yyvsp[-1].sym->type != UNDEF) 
	     stackPush(argStack, createArg(yyvsp[-1].sym, VARADR, 1));	     
	   else
	     stackPush(argStack, createArg(yyvsp[-1].sym, VARADR, 0));
	   yyvsp[-1].sym->type=VAR;
	 }
break;
case 62:
#line 524 "parse.y"
{
	   if (yyvsp[-2].sym->type != UNDEF) 
	     stackPush(argStack, createArg(yyvsp[-2].sym, VARADR, 1));	     
	   else
	     stackPush(argStack, createArg(yyvsp[-2].sym, VARADR, 0));
	   yyvsp[-2].sym->type=VAR;
	 }
break;
case 63:
#line 532 "parse.y"
{
	   stackPush(argStack, createArg(yyvsp[-2].val, NUM, 0));
         }
break;
case 64:
#line 536 "parse.y"
{
	   stackPush(argStack, createArg(yyvsp[-2].pol, POLY, 0));
         }
break;
case 65:
#line 540 "parse.y"
{
	   if (yyvsp[-4].sym->type != UNDEF) {
	     stackPush(argStack, createArg(yyvsp[-4].sym, ARR, 0));
	   } else {
	     rettype = FUNC_FAIL;
	   }
         }
break;
case 66:
#line 548 "parse.y"
{
	   /* S.Seefried.  Normally one would free an old array if it 
	    * existed.  I have deferred this until I am sure all arguments
	    * on the command line are valid for the function in question.
	    * See checkArgs.  It is here that I free. */

	   if (yyvsp[-4].sym->type != UNDEF) 
	     stackPush(argStack, createArg(yyvsp[-4].sym, ARRADR, 1));	     
	   else
	     stackPush(argStack, createArg(yyvsp[-4].sym, ARRADR, 0));
	   yyvsp[-4].sym->type=ARRAY;
	 }
break;
#line 1414 "y.tab.c"
    }
    yyssp -= yym;
    yystate = *yyssp;
    yyvsp -= yym;
    yym = yylhs[yyn];
    if (yystate == 0 && yym == 0)
    {
#if YYDEBUG
        if (yydebug)
            printf("%sdebug: after reduction, shifting from state 0 to\
 state %d\n", YYPREFIX, YYFINAL);
#endif
        yystate = YYFINAL;
        *++yyssp = YYFINAL;
        *++yyvsp = yyval;
        if (yychar < 0)
        {
            if ((yychar = yylex()) < 0) yychar = 0;
#if YYDEBUG
            if (yydebug)
            {
                yys = 0;
                if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
                if (!yys) yys = "illegal-symbol";
                printf("%sdebug: state %d, reading %d (%s)\n",
                        YYPREFIX, YYFINAL, yychar, yys);
            }
#endif
        }
        if (yychar == 0) goto yyaccept;
        goto yyloop;
    }
    if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
            yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
        yystate = yytable[yyn];
    else
        yystate = yydgoto[yym];
#if YYDEBUG
    if (yydebug)
        printf("%sdebug: after reduction, shifting from state %d \
to state %d\n", YYPREFIX, *yyssp, yystate);
#endif
    if (yyssp >= yysslim && yygrowstack())
    {
        goto yyoverflow;
    }
    *++yyssp = yystate;
    *++yyvsp = yyval;
    goto yyloop;
yyoverflow:
    yyerror("yacc stack overflow");
yyabort:
    return (1);
yyaccept:
    return (0);
}

⌨️ 快捷键说明

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