Exemple #1
0
        private void OnClosingBracket()
        {
            var funcNode = new MultiTreeNode <Value>(new Value(ValueType.Function, null));

            while (OperationsStack.Peek() != "(")
            {
                if (EvalOperator() == ",")
                {
                    funcNode.AddChild(OperandsStack.Pop());
                }
            }

            OperationsStack.Pop();

            if (OperationsStack.Count > 0 && Library.IsFunction(OperationsStack.Peek()))
            {
                funcNode.Data.Val = OperationsStack.Pop();
                OperandsStack.Push(funcNode);
                return;
            }

            if (funcNode.Count > 0)
            {
                funcNode.Data.Val = "MkTuple";
                OperandsStack.Push(funcNode);
            }
        }
Exemple #2
0
        private void OnClosingSquareBracket()
        {
            var funcNode = new MultiTreeNode <Value>(new Value(ValueType.Function, null));

            while (OperationsStack.Peek() != "[")
            {
                if (EvalOperator() == ",")
                {
                    funcNode.AddChild(OperandsStack.Pop());
                }
            }

            OperationsStack.Pop();

            if (OperationsStack.Count > 0 && OperationsStack.Peek() == "MkList")
            {
                funcNode.Data.Val = OperationsStack.Pop();
                OperandsStack.Push(funcNode);
                return;
            }

            if (OperationsStack.Count > 0 && OperationsStack.Peek() == "ByIdx")
            {
                funcNode.Data.Val = OperationsStack.Pop();
                funcNode.AddChild(OperandsStack.Pop());
                funcNode.AddChild(OperandsStack.Pop());
                OperandsStack.Push(funcNode);
                return;
            }
        }
Exemple #3
0
        private void ParseToken(TokenLine.TokenEnum token)
        {
            if (Library.IsFunction(token.Current))
            {
                OnFunction(token);
            }

            else if (token.Current == "[")
            {
                OnOpeningSquareBracket(token);
            }

            else if (RouteOperators.Contains(token.Current))
            {
                OperationsStack.Push(token.Current);
            }

            else if (token.Current == ")")
            {
                OnClosingBracket();
            }

            else if (token.Current == "]")
            {
                OnClosingSquareBracket();
            }

            else if (Library.IsOperator(token.Current))
            {
                while (OperationsStack.Count > 0 && Library.Operators[OperationsStack.Peek()] >= Library.Operators[token.Current])
                {
                    EvalOperator();
                }

                OperationsStack.Push(token.Current);
            }

            else
            {
                var value = Translator.ParseTypes(token.Current);
                OperandsStack.Push(value == null
                    ? new MultiTreeNode <Value>(new Value(ValueType.Variable, token.Current))
                    : new MultiTreeNode <Value>(new Value(ValueType.Value, value)));
            }
        }