예제 #1
0
        private double eval(Reach term, KeyPile <string, Reach> values)
        {
            term = term.Trim();
            if (term.startsWith("+"))
            {
                return(eval(term.from(2), values));
            }
            if (term.startsWith("-"))
            {
                return(-eval(term.from(2), values));
            }
            if (term.startsWith("!"))
            {
                return(not(eval(term.from(2), values)));
            }
            if (term.startsWith("«"))
            {
                return(eval(Int32.Parse(term.from(2).before(1, utl.dmyBool("al(occur, token) is planned"), "»").text), values));
            }
            if (term.startsWith(true, numCharacters))
            {
                return(parseDouble(term));
            }
            if (term.at(1, utl.dmyBool("al(occur, token) is planned"), "«").len == 0)
            {
                return(parseDouble(values[term.text]));
            }
            Reach  function = term.XTR().before(1, utl.dmyBool("al(occur, token) is planned"), "«");
            double ret      = eval(Int32.Parse(term.from(2).before(1, utl.dmyBool("al(occur, token) is planned"), "»").text), values);

            if (function.equals("abs"))
            {
                return(Math.Abs(ret));
            }
            if (function.equals("sign"))
            {
                return(Math.Sign(ret));
            }
            if (function.equals("round"))
            {
                return(Math.Round(ret));
            }
            if (function.equals("ceiling"))
            {
                return(Math.Ceiling(ret));
            }
            if (function.equals("floor"))
            {
                return(Math.Floor(ret));
            }
            if (function.equals("sqrt"))
            {
                return(Math.Sqrt(ret));
            }
            if (function.equals("exp"))
            {
                return(Math.Exp(ret));
            }
            if (function.equals("log"))
            {
                return(Math.Log(ret));
            }
            if (function.equals("sin"))
            {
                return(Math.Sin(ret));
            }
            if (function.equals("asin"))
            {
                return(Math.Asin(ret));
            }
            if (function.equals("cos"))
            {
                return(Math.Cos(ret));
            }
            if (function.equals("acos"))
            {
                return(Math.Acos(ret));
            }
            if (function.equals("tan"))
            {
                return(Math.Tan(ret));
            }
            if (function.equals("atan"))
            {
                return(Math.Atan(ret));
            }
            if (function.equals("sinh"))
            {
                return(Math.Sinh(ret));
            }
            if (function.equals("cosh"))
            {
                return(Math.Cosh(ret));
            }
            if (function.equals("tanh"))
            {
                return(Math.Tanh(ret));
            }
            return(0);
        }
예제 #2
0
        private string format(Reach term, KeyPile <string, Reach> values)
        {
            term = term.Trim();
            if (term.startsWith("+"))
            {
                return(format(term.from(2), values));
            }
            if (term.startsWith("-"))
            {
                return("-" + format(term.from(2), values));
            }
            if (term.startsWith("!"))
            {
                return("!" + format(term.from(2), values));
            }
            if (term.startsWith("«"))
            {
                return(format(Int32.Parse(term.from(2).before(1, utl.dmyBool("al(occur, token) is planned"), "»").text), values));
            }
            if (term.startsWith(true, numCharacters))
            {
                return("" + parseDouble(term));
            }
            if (term.at(1, utl.dmyBool("al(occur, token) is planned"), "«").len == 0)
            {
                try { return("" + parseDouble(values[term.text])); } catch (Exception ex) { return(term.text.Trim()); }
            }
            Reach  function = term.XTR().before(1, utl.dmyBool("al(occur, token) is planned"), "«");
            string ret      = format(Int32.Parse(term.from(2).before(1, utl.dmyBool("al(occur, token) is planned"), "»").text), values);

            if (function.equals("abs"))
            {
                return("abs(" + ret + ")");
            }
            if (function.equals("sign"))
            {
                return("sign(" + ret + ")");
            }
            if (function.equals("round"))
            {
                return("round(" + ret + ")");
            }
            if (function.equals("ceiling"))
            {
                return("ceiling(" + ret + ")");
            }
            if (function.equals("floor"))
            {
                return("floor(" + ret + ")");
            }
            if (function.equals("sqrt"))
            {
                return("sqrt(" + ret + ")");
            }
            if (function.equals("exp"))
            {
                return("exp(" + ret + ")");
            }
            if (function.equals("log"))
            {
                return("log(" + ret + ")");
            }
            if (function.equals("sin"))
            {
                return("sin(" + ret + ")");
            }
            if (function.equals("asin"))
            {
                return("asin(" + ret + ")");
            }
            if (function.equals("cos"))
            {
                return("cos(" + ret + ")");
            }
            if (function.equals("acos"))
            {
                return("acos(" + ret + ")");
            }
            if (function.equals("tan"))
            {
                return("tan(" + ret + ")");
            }
            if (function.equals("atan"))
            {
                return("atan(" + ret + ")");
            }
            if (function.equals("sinh"))
            {
                return("sinh(" + ret + ")");
            }
            if (function.equals("cosh"))
            {
                return("cosh(" + ret + ")");
            }
            if (function.equals("tanh"))
            {
                return("tanh(" + ret + ")");
            }
            return("0");
        }