コード例 #1
0
        private IEnumerable <IFormulaToken> CompleteOperatorBackwards(IEnumerable <IFormulaToken> tokens, IFormulaOperator operatorToken)
        {
            var operatorOrder = operatorToken.Order;

            return(tokens
                   .TakeWhile(token => !(token is FormulaTokenParameterSeparator))
                   .WithContext()
                   .TakeWhile(context =>
            {
                var nextToken = context[0];
                var token = context[1];
                if (token == null)
                {
                    return false;
                }
                var operatorToken2 = token as IFormulaOperator;

                var expectValue = nextToken == null || nextToken is FormulaNodeInfixOperator;
                if (expectValue)
                {
                    // missing value of operator
                    return operatorToken2 == null;
                }

                // operator fully completed
                return operatorToken2 != null && operatorOrder < operatorToken2.Order;
            }).Select(context => context[1]));
        }
コード例 #2
0
        private IEnumerable<IFormulaToken> CompleteOperatorBackwards(IEnumerable<IFormulaToken> tokens, IFormulaOperator operatorToken)
        {
            var operatorOrder = operatorToken.Order;
            return tokens
                .TakeWhile(token => !(token is FormulaTokenParameterSeparator))
                .WithContext()
                .TakeWhile(context =>
                {
                    var nextToken = context[0];
                    var token = context[1];
                    if (token == null) return false;
                    var operatorToken2 = token as IFormulaOperator;

                    var expectValue = nextToken == null || nextToken is FormulaNodeInfixOperator;
                    if (expectValue)
                    {
                        // missing value of operator
                        return operatorToken2 == null;
                    }

                    // operator fully completed
                    return operatorToken2 != null && operatorOrder < operatorToken2.Order;
                }).Select(context => context[1]);
        }
コード例 #3
0
        private IEnumerable <IFormulaToken> CompleteOperatorForward(IEnumerable <IFormulaToken> tokens, IFormulaOperator operatorToken)
        {
            var operatorOrder = operatorToken.Order;

            return(tokens
                   .TakeWhile(token => !(token is FormulaTokenParameterSeparator))
                   .WithContext()
                   .TakeWhile(context =>
            {
                var previousToken = context[0];
                var token = context[1];
                if (token == null)
                {
                    return false;
                }
                var infixOperatorToken = token as FormulaNodeInfixOperator;

                var expectValue = previousToken == null || previousToken is IFormulaOperator;
                if (expectValue)
                {
                    // missing value of operator
                    return infixOperatorToken == null;
                }

                // operator fully completed
                return infixOperatorToken != null && infixOperatorToken.Order > operatorOrder;
            }).Select(context => context[1]));
        }
コード例 #4
0
        private IEnumerable<IFormulaToken> CompleteOperatorForward(IEnumerable<IFormulaToken> tokens, IFormulaOperator operatorToken)
        {
            var operatorOrder = operatorToken.Order;
            return tokens
                .TakeWhile(token => !(token is FormulaTokenParameterSeparator))
                .WithContext()
                .TakeWhile(context =>
                {
                    var previousToken = context[0];
                    var token = context[1];
                    if (token == null) return false;
                    var infixOperatorToken = token as FormulaNodeInfixOperator;

                    var expectValue = previousToken == null || previousToken is IFormulaOperator;
                    if (expectValue)
                    {
                        // missing value of operator
                        return infixOperatorToken == null;
                    }

                    // operator fully completed
                    return infixOperatorToken != null && infixOperatorToken.Order > operatorOrder;
                }).Select(context => context[1]);
        }