Exemple #1
0
        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);
        }
Exemple #2
0
        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));
        }
Exemple #3
0
        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));
        }
Exemple #4
0
        public void Eval(Action <CAS, EvalContext> argEval, CancellationToken argCancelToken)
        {
            var pContext = new EvalContext {
                CancelToken = argCancelToken
            };

            argEval(this, pContext);
        }
Exemple #5
0
        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));
        }
Exemple #6
0
        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);
        }
Exemple #7
0
        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));
        }
Exemple #8
0
        private Exprs.Expr NextPrime(EvalContext argContext, Exprs.Expr[] argParams)
        {
            VerifNumArgs(1, argParams);

            var n    = argParams[0];
            var pRet = NextPrime(argContext, n);

            return(pRet);
        }
Exemple #9
0
        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);
        }
Exemple #10
0
        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);
        }
Exemple #11
0
        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());
            }
        }
Exemple #12
0
        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);
        }
Exemple #13
0
        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
            });
        }
Exemple #14
0
        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);
        }
Exemple #15
0
 public string Tex(EvalContext argContext, Exprs.ListExpr e) => @"\left[" + string.Join(",", e.TheList.Select(l => Tex(argContext, l))) + @"\right]";
Exemple #16
0
 public EvalContext(EvalContext c, Exprs.EPrecisionNumber argPrecision)
 {
     CancelToken = c.CancelToken;
     Precision   = argPrecision;
 }
Exemple #17
0
 public EvalContext(EvalContext c)
 {
     CancelToken = c.CancelToken;
     Precision   = c.Precision;
 }
Exemple #18
0
        private void Quit(EvalContext argContext, Exprs.Expr[] argParams)
        {
            VerifNumArgs(0, argParams);

            mPost.QuitPost();
        }
Exemple #19
0
        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);
        }