Example #1
0
        protected internal virtual FullTextQuery term(QueryScanner scanner)
        {
            FullTextQuery q = null;

            switch (scanner.scan())
            {
            case QueryScanner.TKN_NOT:
                q = term(scanner);
                return((q != null) ? new FullTextQueryUnaryOp(FullTextQuery.Operator.Not, q) : null);

            case QueryScanner.TKN_LPAR:
                q = disjunction(scanner);
                break;

            case QueryScanner.TKN_WORD:
                q = new FullTextQueryMatchOp(scanner.inQuotes ? FullTextQuery.Operator.StrictMatch : FullTextQuery.Operator.Match, scanner.word, scanner.wordPos);
                break;

            case QueryScanner.TKN_EOQ:
                return(null);

            default:
                break;
            }
            scanner.scan();
            return(q);
        }
Example #2
0
        protected internal virtual FullTextQuery disjunction(QueryScanner scanner)
        {
            FullTextQuery left = conjunction(scanner);

            if (scanner.token == QueryScanner.TKN_OR)
            {
                FullTextQuery right = disjunction(scanner);
                if (left != null && right != null)
                {
                    return(new FullTextQueryBinaryOp(FullTextQuery.Operator.Or, left, right));
                }
                else if (right != null)
                {
                    return(right);
                }
            }
            return(left);
        }
Example #3
0
        protected internal virtual FullTextQuery conjunction(QueryScanner scanner)
        {
            FullTextQuery left = term(scanner);

            if (scanner.token == QueryScanner.TKN_WORD || scanner.token == QueryScanner.TKN_AND)
            {
                if (scanner.token == QueryScanner.TKN_WORD)
                {
                    scanner.unget = true;
                }
                FullTextQuery.Operator cop   = scanner.inQuotes ? FullTextQuery.Operator.Near : FullTextQuery.Operator.And;
                FullTextQuery          right = disjunction(scanner);
                if (left != null && right != null)
                {
                    return(new FullTextQueryBinaryOp(cop, left, right));
                }
                else if (right != null)
                {
                    return(right);
                }
            }
            return(left);
        }
 /// <summary> Binary node constructor</summary>
 /// <param name="op">operation code
 /// </param>
 /// <param name="left">left operand
 /// </param>
 /// <param name="right">right operand
 /// </param>
 public FullTextQueryBinaryOp(Operator op, FullTextQuery left, FullTextQuery right) : base(op)
 {
     this.left  = left;
     this.right = right;
 }
 public virtual void  Visit(FullTextQuery q)
 {
 }
 /// <summary> Unary node constructor</summary>
 /// <param name="op">operation code
 /// </param>
 /// <param name="opd">operand
 /// </param>
 public FullTextQueryUnaryOp(Operator op, FullTextQuery opd) : base(op)
 {
     this.opd = opd;
 }
 /// <summary> Binary node constructor</summary>
 /// <param name="op">operation code
 /// </param>
 /// <param name="left">left operand
 /// </param>
 /// <param name="right">right operand
 /// </param>
 public FullTextQueryBinaryOp(Operator op, FullTextQuery left, FullTextQuery right):base(op)
 {
     this.left = left;
     this.right = right;
 }
 public virtual void  Visit(FullTextQuery q)
 {
 }
 /// <summary> Unary node constructor</summary>
 /// <param name="op">operation code
 /// </param>
 /// <param name="opd">operand
 /// </param>
 public FullTextQueryUnaryOp(Operator op, FullTextQuery opd):base(op)
 {
     this.opd = opd;
 }