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

InterpretFunctions() private method

Attaches the children of FormulaNodeUnaryFunction and FormulaNodeBinaryFunction.
private InterpretFunctions ( IEnumerable tokens ) : IEnumerable
tokens IEnumerable
return IEnumerable
        private IEnumerable<IFormulaToken> InterpretFunctions(IEnumerable<IFormulaToken> tokens)
        {
            foreach (var context in tokens.WithContext())
            {
                if (IsCancellationRequested) yield break;
                var previousToken = context[0];
                var token = context[1];

                // attach argument to function
                if (previousToken  is IFormulaFunction)
                {
                    if (!(token is FormulaTokenParameter))
                    {
                        SetParsingError(
                            source: Range.Empty(GetOrigin(previousToken).End), 
                            message: AppResourcesHelper.Get("FormulaInterpreter_Function_Empty"));
                        yield break;
                    }

                    var unaryFunctionToken = previousToken as FormulaNodeUnaryFunction;
                    if (unaryFunctionToken != null)
                    {
                        var unaryParameterToken = (FormulaTokenUnaryParameter) token;
                        unaryFunctionToken.Child = unaryParameterToken.Parameter;
                    }
                    var binaryFunctionToken = previousToken as FormulaNodeBinaryFunction;
                    if (binaryFunctionToken != null)
                    {
                        var binaryParameterToken = (FormulaTokenBinaryParameter) token;
                        binaryFunctionToken.FirstChild = binaryParameterToken.FirstParameter;
                        binaryFunctionToken.SecondChild = binaryParameterToken.SecondParameter;
                    }

                    SetOrigin(previousToken, new[] { previousToken, token });
                    yield return previousToken;
                    continue;
                }

                // yield any other token
                if (token != null && !(token is IFormulaFunction))
                {
                    yield return token;
                }
            }
        }