public Exprs.Expr Eval(EvalContext argContext, Exprs.FunctionExpr e, bool argNoExecInstr = true) { var pName = e.FunctionName; #if DEBUG Stopwatch pStopwatch; #endif if (mInstructions.TryGetValue(pName, out InstructionInfo pInstr)) { if (argNoExecInstr) { throw new EvalException(string.Format(Properties.Resources.NoExecInsTrNoStartExprException, pName)); } #if DEBUG pStopwatch = Stopwatch.StartNew(); #endif try { pInstr.Method.Invoke(argContext, e.Args); } catch (Exception ex) { throw new EvalFunctionException(string.Format(Properties.Resources.EvalFunctionException, pInstr.Name, ex.Message), ex, pInstr); } finally { #if DEBUG pStopwatch.Stop(); Debug.WriteLine($"{pInstr.Name} {pStopwatch.Elapsed.TotalMilliseconds} ms"); #endif } return(Exprs.Expr.Null); } if (mFunctions.TryGetValue(pName, out FunctionInfo pFN)) { #if DEBUG pStopwatch = Stopwatch.StartNew(); #endif try { return(pFN.Method.Invoke(argContext, e.Args)); } catch (Exception ex) { throw new EvalFunctionException(string.Format(Properties.Resources.EvalFunctionException, pFN.Name, ex.Message), ex, pFN); } finally { #if DEBUG pStopwatch.Stop(); Debug.WriteLine($"{pFN.Name} {pStopwatch.Elapsed.TotalMilliseconds} ms"); #endif } } return(null); }
public Exprs.BooleanExpr PrimeP(EvalContext argContext, Exprs.Expr n) { var pInt = Integer(argContext, n); var pRet = BigInteger.IsProbablePrime(pInt, PrimePNumberOfTest, argContext.CancelToken); return(Exprs.Expr.Boolean(pRet)); }
public Exprs.NumberExpr NextPrime(EvalContext argContext, Exprs.Expr n) { var pInt = Integer(argContext, n); var pRet = BigInteger.NextProbablePrime(pInt, argContext.CancelToken); return(Exprs.Expr.Number(pRet)); }
public void Eval(Action <CAS, EvalContext> argEval, CancellationToken argCancelToken) { var pContext = new EvalContext { CancelToken = argCancelToken }; argEval(this, pContext); }
public Exprs.ListExpr Primes(EvalContext argContext, Exprs.Expr start, Exprs.Expr end) { var pStartInt = Integer(argContext, start); var pEndInt = Integer(argContext, end); var pPrimes = from n in Math.MathEx.Primes(pStartInt, pEndInt, PrimePNumberOfTest, argContext.CancelToken) select Exprs.Expr.Number(n); return(Exprs.Expr.List(pPrimes)); }
public BigInteger Integer(EvalContext argContext, Exprs.Expr e) { if (!Integer(argContext, e, out Exprs.Expr argRet, out BigInteger argInteger)) { throw new EvalException(string.Format(Properties.Resources.NoExprIntegerException, e)); } return(argInteger); }
private Exprs.Expr Tex(EvalContext argContext, Exprs.Expr[] argParams) { VerifNumArgs(1, argParams); var n = argParams[0]; var pRet = Tex(argContext, n); return(Exprs.Expr.String(pRet)); }
private Exprs.Expr NextPrime(EvalContext argContext, Exprs.Expr[] argParams) { VerifNumArgs(1, argParams); var n = argParams[0]; var pRet = NextPrime(argContext, n); return(pRet); }
private Exprs.Expr Primes(EvalContext argContext, Exprs.Expr[] argParams) { VerifNumArgs(2, argParams); var start = argParams[0]; var end = argParams[1]; var pRet = Primes(argContext, start, end); return(pRet); }
public Exprs.Expr Approx(EvalContext argContext, Exprs.EPrecisionNumber argPrecision, Exprs.Expr e) { var c = new EvalContext(argContext, argPrecision); var e1 = Eval(c, e); // falta aplicar operaciones y funciones matemáticas var e2 = e1; return((e2.TypeExpr == Exprs.ETypeExpr.Number && e2 is Exprs.NumberExpr ne) ? ne.ConverTo(argPrecision, FPPrec) : e2); }
public string Tex(EvalContext argContext, Exprs.Expr e) { argContext.CancelToken.ThrowIfCancellationRequested(); switch (e.TypeExpr) { case Exprs.ETypeExpr.List: return(Tex(argContext, (Exprs.ListExpr)e)); default: return(e.ToString()); } }
public bool Integer(EvalContext argContext, Exprs.Expr e, out Exprs.Expr argRet, out BigInteger argInteger) { var pRet = Approx(argContext, Exprs.EPrecisionNumber.Integer, e); argRet = pRet; if (pRet.TypeExpr == Exprs.ETypeExpr.Number && pRet is Exprs.IntegerNumberExpr en) { argInteger = en.PrecisionValue; return(true); } argInteger = null; return(false); }
public EvalExprInResult EvalPrompt(ST.STTokensTerminate argTokens, CancellationToken argCancelToken) { var pReader = new ST.STTokensReader(argTokens, argCancelToken); var pIn = STToExprIn(pReader); var pContext = new EvalContext { CancelToken = argCancelToken }; var pOut = EvalIn(pContext, pIn); var pIOE = mVars.AddInOut(pIn, pOut, out string pNameVarIn, out string pNameVarOut); if (argTokens.Terminate == ST.ESTTokenizerTerminate.ShowResult) { mPost.PrintExprOutPost(GetPromptVar(pNameVarOut), pOut); } return(new EvalExprInResult { Terminate = argTokens.Terminate, InExpr = pIn, OutExpr = pOut, NameVarIn = pNameVarIn, NameVarOut = pNameVarOut }); }
public Exprs.Expr Eval(EvalContext argContext, Exprs.Expr e) { switch (e.TypeExpr) { case Exprs.ETypeExpr.Number: if (e is Exprs.NumberExpr ne) { return(ne.ConverTo(argContext.Precision, FPPrec)); } break; case Exprs.ETypeExpr.Function: if (e is Exprs.FunctionExpr pFn) { return(Eval(argContext, pFn)); } break; } return(e); }
public string Tex(EvalContext argContext, Exprs.ListExpr e) => @"\left[" + string.Join(",", e.TheList.Select(l => Tex(argContext, l))) + @"\right]";
public EvalContext(EvalContext c, Exprs.EPrecisionNumber argPrecision) { CancelToken = c.CancelToken; Precision = argPrecision; }
public EvalContext(EvalContext c) { CancelToken = c.CancelToken; Precision = c.Precision; }
private void Quit(EvalContext argContext, Exprs.Expr[] argParams) { VerifNumArgs(0, argParams); mPost.QuitPost(); }
public Exprs.Expr EvalIn(EvalContext argContext, Exprs.Expr e) { var pExpr = (e.TypeExpr == Exprs.ETypeExpr.Function && e is Exprs.FunctionExpr pFn) ? Eval(argContext, pFn, false) : Eval(argContext, e); return(pExpr); }