Catrobat.IDE.Core.Formulas.FormulaInterpreter.CompleteOperator C# (CSharp) Method

CompleteOperator() private method

private CompleteOperator ( IList tokens, int index ) : IEnumerable
tokens IList
index int
return IEnumerable
        private IEnumerable<IFormulaToken> CompleteOperator(IList<IFormulaToken> tokens, int index)
        {
            var operatorToken = (IFormulaOperator) tokens[index];
            var operatorTokens = Enumerable.Repeat((IFormulaToken) operatorToken, 1);

            // handle minus token
            var minusToken = operatorToken as FormulaNodeSubtract;
            if (minusToken != null) operatorToken = InterpretMinusToken(index == 0 ? null : tokens[index - 1], minusToken);

            // gather tokens before
            if (operatorToken is FormulaNodeInfixOperator)
            {
                var tokensBefore = tokens.Take(index).Reverse();
                tokensBefore = CompleteBrackets(tokensBefore, false);
                tokensBefore = CompleteFunctionsBackwards(tokensBefore);
                tokensBefore = CompleteNumbers(tokensBefore);
                tokensBefore = InterpretMinusTokenBackwards(tokensBefore);
                operatorTokens = CompleteOperatorBackwards(tokensBefore, operatorToken).Reverse().Concat(operatorTokens);
            }

            // gather tokens afterwards
            var tokensAfterwards = tokens.Skip(index + 1);
            tokensAfterwards = CompleteBrackets(tokensAfterwards);
            tokensAfterwards = CompleteFunctionsForward(tokensAfterwards);
            tokensAfterwards = CompleteNumbers(tokensAfterwards);
            tokensAfterwards = InterpretMinusTokenForward(tokensAfterwards);
            operatorTokens = operatorTokens.Concat(CompleteOperatorForward(tokensAfterwards, operatorToken));

            return operatorTokens;
        }