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

InterpretParameters() private method

Ensures all parameters are separated by exactly one FormulaTokenParameterSeparator and suppresses all occurences of FormulaTokenParameterSeparator.
private InterpretParameters ( IEnumerable tokens ) : IEnumerable
tokens IEnumerable
return IEnumerable
        private IEnumerable<IFormulaToken> InterpretParameters(IEnumerable<IFormulaToken> tokens)
        {
            var expectSeparator = false;
            foreach (var context in tokens.WithContext())
            {
                if (IsCancellationRequested) yield break;
                var previousToken = context[0];
                var token = context[1];

                // parameter separator
                if (token is FormulaTokenParameterSeparator)
                {
                    if (!expectSeparator)
                    {
                        SetParsingError(
                            source: Range.Empty(GetOrigin(token).Start),
                            message: AppResourcesHelper.Get("FormulaInterpreter_Brackets_EmptyArgument"));
                        yield break;
                    }
                    expectSeparator = false;
                    continue;
                }

                //  any argument
                if (token != null)
                {
                    if (expectSeparator)
                    {
                        SetParsingError(
                            source: Range.Empty(GetOrigin(token).Start), 
                            message: AppResourcesHelper.Get("FormulaInterpreter_Brackets_ArgumentDoubleValue"));
                        yield break;
                    }
                    yield return token;
                    expectSeparator = true;
                    continue;
                }

                // last token
                if (token == null && !expectSeparator)
                {
                    SetParsingError(
                        source: Range.Empty(GetOrigin(previousToken).End), 
                        message: AppResourcesHelper.Get("FormulaInterpreter_Brackets_EmptyArgument"));
                    yield break;
                }
            }
        }