public Expression ParenExpression(ParenExpression expression)
 {
     return(expression.Expression.Visit(this));
 }
 public virtual T ParenExpression(ParenExpression expression)
 {
     throw new QueryNotSupportException();
 }
Esempio n. 3
0
        private Expression ParseCommonItem()
        {
            switch (Current.Type)
            {
            case TokenType.Literal:
                var literal = (LiteralToken)Current;

                MoveNext();

                return(new LiteralExpression(literal.Value, literal.LiteralType));

            case TokenType.Syntax:
                if (Current == SyntaxToken.Negative)
                {
                    MoveNext();

                    return(new ArithmeticUnaryExpression(Operator.Negative, ParseCommonItem()));
                }
                if (Current == SyntaxToken.ParenOpen)
                {
                    MoveNext();

                    ExpectAny();

                    var result = new ParenExpression(ParseCommon());

                    Expect(SyntaxToken.ParenClose);

                    return(result);
                }
                else
                {
                    throw new ODataException(ErrorMessages.Parser_ExpectedSyntax);
                }

            case TokenType.Identifier:
                if (Next == SyntaxToken.ParenOpen && !GetOperator(Current).HasValue&& _mode != ParserMode.Path)
                {
                    return(ParseMethodCall());
                }
                else if (GetOperator(Current) == Operator.Not)
                {
                    MoveNext();

                    return(new BoolUnaryExpression(Operator.Not, ParseCommonItem()));
                }
                else
                {
                    var members = new List <MemberExpressionComponent>();

                    ParseMember(members);

                    while (!AtEnd && Current == SyntaxToken.Slash)
                    {
                        MoveNext();

                        ExpectAny();

                        if (IsCollectionMethodCall())
                        {
                            return(ParseCollectionMethodCall(members));
                        }

                        ParseMember(members);
                    }

                    return(new MemberExpression(MemberType.Normal, members));
                }

            default:
                throw new NotSupportedException();
            }
        }