Ejemplo n.º 1
0
        public override object Process(TreeFunctional treeFunction)
        {
            MakeReversePolishNotation();

            foreach (var token in reversePolishNotation)
            {
                switch (token.type)
                {
                case TokenType.NUMERIC_CONST:
                case TokenType.VARIABLE:
                    stack.Push(token);
                    break;

                case TokenType.PLUS:
                    stack.Push(new TokenNumeric()
                    {
                        data = (double)((stack.Pop() as TokenNumeric).data) + (double)((stack.Pop() as TokenNumeric).data)
                    });
                    break;

                case TokenType.MINUS:
                    var right = (double)((stack.Pop() as TokenNumeric).data);
                    var left  = (double)((stack.Pop() as TokenNumeric).data);
                    stack.Push(new TokenNumeric()
                    {
                        data = left - right
                    });
                    break;

                case TokenType.MULTIPLICATION:
                    stack.Push(new TokenNumeric()
                    {
                        data = (double)((stack.Pop() as TokenNumeric).data) * (double)((stack.Pop() as TokenNumeric).data)
                    });
                    break;

                case TokenType.DIVIDE:
                    right = (double)((stack.Pop() as TokenNumeric).data);
                    left  = (double)((stack.Pop() as TokenNumeric).data);
                    stack.Push(new TokenNumeric()
                    {
                        data = left / right
                    });
                    break;

                default:
                    throw new Exception("something bad in get priority!");
                }
            }
            object data = (stack.Pop() as TokenNumeric).data;

            if (tokenToChange != null && treeFunction != null)
            {
                treeFunction.UpdateVar(tokenToChange.name, data, VariableType.NUMERIC);
            }

            return(data);
        }
Ejemplo n.º 2
0
        public override object Process(TreeFunctional treeFunction)
        {
            string str = "";

            foreach (var token in strings)
            {
                str += (string)token.data;
            }
            if (treeFunction != null)
            {
                treeFunction.UpdateVar(tokenToChange.name, str, VariableType.STRING);
            }
            return(str);
        }