Beispiel #1
0
        private RqlTupleExpression ParseTuple(RqlToken leftParenToken)
        {
            var  constants = new List <RqlConstantExpression>();
            Type itemType  = null;

            while (true)
            {
                RqlToken token = tokenizer.Next();

                if (token.IsConstant)
                {
                    if (itemType == null)
                    {
                        itemType = token.Data.GetType();
                    }
                    else if (token.Data.GetType() != itemType)
                    {
                        throw new RqlParseException(token, "Tuple items must all be of the same type");
                    }

                    constants.Add(RqlExpression.Constant(token));
                }
                else
                {
                    throw new RqlParseException(token);
                }

                token = tokenizer.Next();

                if (token.IsComma)
                {
                    continue;
                }
                else if (token.IsRightParen)
                {
                    break;
                }
                else
                {
                    throw new RqlParseException(token);
                }
            }

            return(RqlExpression.Tuple(leftParenToken, constants));
        }