Esempio n. 1
0
        public override void ExecuteInternal(RPNStack rpn, Types dataType)
        {
            string v1 = rpn.Pop().Token;
            string v2 = rpn.Pop().Token;

            rpn.Push(v1);
            rpn.Push(v2);
        }
Esempio n. 2
0
 public override void ExecuteInternal(RPNStack rpn, Types dataType)
 {
     StackItem[] stk = new StackItem[rpn.Count];
     rpn.CopyTo(stk);
     rpn.Clear();
     for (int i = stk.Length - 2; i >= 0; i--)
     {
         rpn.Push(stk[i]);
     }
     rpn.Push(stk[^ 1]);
Esempio n. 3
0
        public override void ExecuteInternal(RPNStack rpn, Types dataType)
        {
            int i1 = int.Parse(rpn.Pop().Token);

            if (i1 > rpn.Count)
            {
                throw new Exception("Too Few Arguments");
            }
            StackItem[] stk = new StackItem[rpn.Count];
            rpn.CopyTo(stk);
            rpn.Push(stk[i1 - 1]);
        }
Esempio n. 4
0
        public override void ExecuteInternal(RPNStack rpn, Types dataType)
        {
            string v1 = rpn.Pop().Token;

            if ((dataType & Types.Infix) == Types.Infix)
            {
                rpn.Push($"{Symbols[0]}({v1})", dataType);
            }
            else
            {
                double d1 = double.Parse(v1);
                rpn.Push(SpecialFunctions.Fact(d1).ToString(), dataType);
            }
        }
Esempio n. 5
0
        public override void ExecuteInternal(RPNStack rpn, Types dataType)
        {
            string v1 = rpn.Pop().Token;

            if ((dataType & Types.Infix) == Types.Infix)
            {
                rpn.Push($"1/({v1})", dataType);
            }
            else
            {
                double d1 = double.Parse(v1);
                rpn.Push((1 / d1).ToString(), dataType);
            }
        }
Esempio n. 6
0
        public override void ExecuteInternal(RPNStack rpn, Types dataType)
        {
            int i1 = int.Parse(rpn.Pop().Token);

            if (rpn.Count < i1)
            {
                rpn.Push(i1.ToString(), Types.Integer);
                throw new ArgumentException("Too few arguments");
            }
            while (--i1 >= 0)
            {
                rpn.Pop();
            }
        }
Esempio n. 7
0
        public override void ExecuteInternal(RPNStack rpn, Types dataType)
        {
            string v1 = rpn.Pop().Token;

            if (rpn.Count == 0)
            {
                ErrorFunction = "EVAL";
                ErrorMessage  = "Too Few Arguments";
            }

            foreach (string token in rpn.InfixToRPN(v1).Split(' '))
            {
                rpn.Push(token);
            }
        }
Esempio n. 8
0
        public override void ExecuteInternal(RPNStack rpn, Types dataType)
        {
            string v1 = rpn.Pop().Token;
            string v2 = rpn.Pop().Token;

            if ((dataType & Types.Infix) == Types.Infix)
            {
                rpn.Push($"({v2}){Symbols[0]}({v1})", dataType);
            }
            else
            {
                double d1 = double.Parse(v1);
                double d2 = double.Parse(v2);
                rpn.Push(Math.Pow(d2, d1).ToString(), dataType);
            }
        }
Esempio n. 9
0
        public override void ExecuteInternal(RPNStack rpn, Types dataType)
        {
            int i1 = int.Parse(rpn.Pop().Token);

            if (rpn.Count < i1)
            {
                rpn.Push(i1.ToString(), Types.Integer);
                throw new ArgumentException("Too few arguments");
            }
            StackItem[] stk = new StackItem[i1];
            Array.Copy(rpn.ToArray(), rpn.Count - i1, stk, 0, i1);
            while (--i1 >= 0)
            {
                rpn.Push(stk[i1]);
            }
        }
Esempio n. 10
0
        public override void ExecuteInternal(RPNStack rpn, Types dataType)
        {
            int i1 = int.Parse(rpn.Pop().Token);

            if (i1 > rpn.Count)
            {
                throw new Exception("Too Few Arguments");
            }
            StackItem[] stk = new StackItem[rpn.Count];
            rpn.CopyTo(stk);
            rpn.Clear();
            for (int i = stk.Length - 1; i >= 0; i--)
            {
                if ((i1 - 1) != i)
                {
                    rpn.Push(stk[i]);
                }
            }
            rpn.Push(stk[i1 - 1]);
        }
Esempio n. 11
0
        public override void ExecuteInternal(RPNStack rpn, Types dataType)
        {
            StackItem v1 = rpn.Pop();
            StackItem v2 = rpn.Pop();

            if ((dataType & Types.Infix) == Types.Infix)
            {
                rpn.Push($"{Symbols[0]}({v2.Token},{v1.Token})", dataType);
            }
            else
            {
                double d1 = double.Parse(v1.Token);
                double d2 = double.Parse(v2.Token);
                if (d2 < d1)
                {
                    rpn.Push(v2.Token, v2.Type);
                    rpn.Push(v1.Token, v1.Type);
                    throw new ArgumentException("Bad argument value");
                }
                rpn.Push((SpecialFunctions.Fact(d2) / (SpecialFunctions.Fact(d1) * SpecialFunctions.Fact(d2 - d1))).ToString(), dataType);
            }
        }
Esempio n. 12
0
 public void Setup()
 {
     _stack = new RPNStack();
 }
Esempio n. 13
0
 public override void ExecuteInternal(RPNStack rpn, Types dataType)
 {
     rpn.Push("2 DUPN");
 }
Esempio n. 14
0
 public RPNEngine()
 {
     this.internalStack = new RPNStack();
 }
Esempio n. 15
0
        public override void ExecuteInternal(RPNStack rpn, Types dataType)
        {
            double d1 = rnd.NextDouble();

            rpn.Push(d1.ToString(), Types.Float);
        }
Esempio n. 16
0
 public override void ExecuteInternal(RPNStack rpn, Types dataType)
 {
     rpn.Pop();
 }