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

📄 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 441 "parse.y"{
		yyval.val = MINUSI(yyvsp[0].val); 
		FREEMPI(yyvsp[0].val);
	}break;case 51:#line 446 "parse.y"{ 
		yyval.val = yyvsp[-1].val; 
	}break;case 52:#line 450 "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 463 "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 473 "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 482 "parse.y"{
       }break;case 56:#line 485 "parse.y"{
       }break;case 57:#line 490 "parse.y"{
	   stackPush(argStack, createArg(yyvsp[-1].val, NUM, 0));
         }break;case 58:#line 494 "parse.y"{
	   stackPush(argStack, createArg(yyvsp[-1].pol, POLY, 0));
         }break;case 59:#line 498 "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 507 "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 520 "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 530 "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 538 "parse.y"{
	   stackPush(argStack, createArg(yyvsp[-2].val, NUM, 0));
         }break;case 64:#line 542 "parse.y"{
	   stackPush(argStack, createArg(yyvsp[-2].pol, POLY, 0));
         }break;case 65:#line 546 "parse.y"{
	   if (yyvsp[-4].sym->type != UNDEF) {
	     stackPush(argStack, createArg(yyvsp[-4].sym, ARR, 0));
	   } else {
	     rettype = FUNC_FAIL;
	   }
         }break;case 66:#line 554 "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 1422 "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 + -