Ejemplo n.º 1
0
        private static bool TryTakeExpression(TokenKeeper tokenKeeper, out FilterClause clause)
        {
            if (TryTakeParenExpression(tokenKeeper, out clause) ||
                TryTakeComparison(tokenKeeper, out clause))
            {
                var work = new TokenKeeper(tokenKeeper);
                if (TryTakeRelOp(work, ref clause))
                {
                    tokenKeeper.Swap(work);
                }
                return(true);
            }

            clause = null;
            return(false);
        }
Ejemplo n.º 2
0
        private static bool TryTakeComparison(TokenKeeper tokenKeeper, out FilterClause clause)
        {
            Token left, right, op;
            var   work = new TokenKeeper(tokenKeeper);

            if (TryTakeData(work, out left) && TryTakeOperator(work, out op) &&
                TryTakeData(work, out right))
            {
                tokenKeeper.Swap(work);
                clause = new ComparisonClause(left, op, right);
                return(true);
            }

            clause = null;
            return(false);
        }
Ejemplo n.º 3
0
        private static bool TryTakeRelOp(TokenKeeper tokenKeeper, ref FilterClause clause)
        {
            if (tokenKeeper.Next.IsRelop())
            {
                var work = new TokenKeeper(tokenKeeper);
                var op   = work.Take();

                FilterClause rhs;
                if (TryTakeExpression(work, out rhs))
                {
                    var relOpClause = new RelOpClause(clause, op, rhs);
                    tokenKeeper.Swap(work);
                    clause = relOpClause;
                    return(true);
                }
            }

            return(false);
        }
Ejemplo n.º 4
0
        private static bool TryTakeParenExpression(TokenKeeper tokenKeeper, out FilterClause clause)
        {
            if (tokenKeeper.Next.TokenType == TokenType.OpenParen)
            {
                var work = new TokenKeeper(tokenKeeper);
                work.Take();
                FilterClause expression;
                if (TryTakeExpression(work, out expression) && work.Next.TokenType == TokenType.CloseParen)
                {
                    work.Take();
                    clause = new ParenClause(expression);
                    tokenKeeper.Swap(work);
                    return(true);
                }
            }

            clause = null;
            return(false);
        }
Ejemplo n.º 5
0
 public RelOpClause(FilterClause lhs, Token op, FilterClause rhs)
 {
     Lhs = lhs;
     Op  = op;
     Rhs = rhs;
 }
Ejemplo n.º 6
0
 public ParenClause(FilterClause clause)
 {
     Clause = clause;
 }