Пример #1
0
 // --- ComparisonPredicate ---
 public override void ExitComparisonPredicateNone(NSPredicateParser.ComparisonPredicateNoneContext context)
 {
     ComparisonPredicate pred = Stack.Pop();
       var subpred = ComparisonPredicate.Comparison(pred.LeftExpression, pred.PredicateOperatorType, pred.RightExpression, ComparisonPredicateModifier.Any, pred.Options);
       var not = CompoundPredicate.Not(subpred);
       Stack.Push(not);
 }
Пример #2
0
 //        | CONTAINS                  # OpContains
 public override void ExitOpContains(NSPredicateParser.OpContainsContext context)
 {
     Operators.Push(PredicateOperatorType.Contains);
 }
Пример #3
0
 public override void ExitComparisonPredicateSome(NSPredicateParser.ComparisonPredicateSomeContext context)
 {
     ComparisonPredicate pred = Stack.Pop();
       var any = ComparisonPredicate.Comparison(pred.LeftExpression, pred.PredicateOperatorType, pred.RightExpression, ComparisonPredicateModifier.Any, pred.Options);
       Stack.Push(any);
 }
Пример #4
0
 //        | IDENTIFIER '(' expression_list ')'    # ExprArgFunction
 public override void EnterExprArgFunction(NSPredicateParser.ExprArgFunctionContext context)
 {
     Stack.Push(new FunctionArgSentinel());
 }
Пример #5
0
 public override void ExitValueTrue(NSPredicateParser.ValueTrueContext context)
 {
     Stack.Push(Expr.MakeConstant(true));
 }
Пример #6
0
 public override void ExitValueSelf(NSPredicateParser.ValueSelfContext context)
 {
     Stack.Push(Expr.MakeEvaluatedObject());
 }
Пример #7
0
 public override void ExitValueNull(NSPredicateParser.ValueNullContext context)
 {
     Stack.Push(Expr.MakeConstant(null));
 }
Пример #8
0
 // --- ConstantExprs ---
 public override void ExitValueEmptyAggregate(NSPredicateParser.ValueEmptyAggregateContext context)
 {
     Stack.Push(Expr.MakeAggregate(new Expr[] { }));
 }
Пример #9
0
 // <
 public override void ExitOpLessThan(NSPredicateParser.OpLessThanContext context)
 {
     Operators.Push(PredicateOperatorType.LessThan);
 }
Пример #10
0
 //        | IN                        # OpIn
 public override void ExitOpIn(NSPredicateParser.OpInContext context)
 {
     Operators.Push(PredicateOperatorType.In);
 }
Пример #11
0
 // >=
 public override void ExitOpGreaterThanOrEqualTo(NSPredicateParser.OpGreaterThanOrEqualToContext context)
 {
     Operators.Push(PredicateOperatorType.GreaterThanOrEqualTo);
 }
Пример #12
0
        public override void ExitOperatorOptionsSpecified(NSPredicateParser.OperatorOptionsSpecifiedContext context)
        {
            string optStr = context.IDENTIFIER().GetText().ToLower();

              ComparisonPredicateOptions opts = 0;
              if (optStr.Contains("c")) {
            opts |= ComparisonPredicateOptions.CaseInsensitive;
              }
              if (optStr.Contains("d")) {
            opts |= ComparisonPredicateOptions.DiacriticInsensitive;
              }

              ComparisonOptions.Push(opts);
        }
Пример #13
0
 public override void ExitOperatorOptionsBare(NSPredicateParser.OperatorOptionsBareContext context)
 {
     ComparisonOptions.Push(0);
 }
Пример #14
0
 public override void ExitOperatorBetween(NSPredicateParser.OperatorBetweenContext context)
 {
     ComparisonOptions.Push(0);
       Operators.Push(PredicateOperatorType.Between);
 }
Пример #15
0
 //        | ENDS_WITH                 # OpEndsWith
 public override void ExitOpEndsWith(NSPredicateParser.OpEndsWithContext context)
 {
     Operators.Push(PredicateOperatorType.EndsWith);
 }
Пример #16
0
        public override void ExitUnqualifiedComparisonPredicate(NSPredicateParser.UnqualifiedComparisonPredicateContext context)
        {
            var rhs = Stack.Pop();
              var lhs = Stack.Pop();

              var pred = ComparisonPredicate.Comparison(lhs, Operators.Pop(), rhs, ComparisonPredicateModifier.Direct, ComparisonOptions.Pop());
              Stack.Push(pred);
        }
Пример #17
0
        public override void ExitValueAggregate(NSPredicateParser.ValueAggregateContext context)
        {
            var exprs = new List<Expr>();
              do {
            var expr = Stack.Pop();
            if (expr is Expr) {
              exprs.Insert(0, expr);
            } else {
              Debug.Assert(expr is AggregateSentinel);
              break;
            }
              } while (true);

              Stack.Push(Expr.MakeAggregate(exprs));
        }
Пример #18
0
 //        | LIKE                      # OpLike
 public override void ExitOpLike(NSPredicateParser.OpLikeContext context)
 {
     Operators.Push(PredicateOperatorType.Like);
 }
Пример #19
0
        public override void ExitValueFormat(NSPredicateParser.ValueFormatContext context)
        {
            // Figure out the index of the positional argument that we have here
              int start = context.Start.StartIndex;
              int position = PositionalArgumentLocations[start];

              var format = context.FORMAT().GetText();

              if (format == "%K") {
            Stack.Push(Expr.MakeKeyPath(FormatArguments[position]));
              } else {
            Stack.Push(Expr.MakeConstant(FormatArguments[position]));
              }
        }
Пример #20
0
 //        | MATCHES                   # OpMatches
 public override void ExitOpMatches(NSPredicateParser.OpMatchesContext context)
 {
     Operators.Push(PredicateOperatorType.Matches);
 }
Пример #21
0
 public override void ExitValueNumber(NSPredicateParser.ValueNumberContext context)
 {
     var numStr = context.NUMBER().GetText();
       if (numStr.Contains(".")) {
     double val = double.Parse(numStr);
     Stack.Push(Expr.MakeConstant(val));
       } else {
     int val = int.Parse(numStr);
     Stack.Push(Expr.MakeConstant(val));
       }
 }
Пример #22
0
 // !=
 public override void ExitOpNotEqualTo(NSPredicateParser.OpNotEqualToContext context)
 {
     Operators.Push(PredicateOperatorType.NotEqualTo);
 }
Пример #23
0
 public override void ExitValueString(NSPredicateParser.ValueStringContext context)
 {
     var str = context.STRING().GetText();
       str = str.Substring(1, str.Length - 2); // Strip quotes
       str = Unescape(str);
       Stack.Push(Expr.MakeConstant(str));
 }
Пример #24
0
 public override void ExitPredicateFalse(NSPredicateParser.PredicateFalseContext context)
 {
     Stack.Push(Predicate.Constant(false));
 }
Пример #25
0
        private dynamic _Parse(Func<NSPredicateParser, IParseTree> startRule)
        {
            // Figure out where all the positional arguments live in the input
              PositionalArgumentLocations.Clear();
              int positional = 0;
              bool state = false;
              for (int i = 0; i < PredicateFormat.Length; i++) {
            var c = PredicateFormat[i];
            if (c == '%') {
              state = !state;
            } else if (state && (c == '@' || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))) {
              state = false;
              PositionalArgumentLocations[i - 1] = positional;
              positional++;
            }
              }

              // Run the input through antlr to generate the predicate tree
              AntlrInputStream input = new AntlrInputStream(PredicateFormat);
              NSPredicateLexer lexer = Lexer = new NSPredicateLexer(input);
              CommonTokenStream tokens = new CommonTokenStream(lexer);
              NSPredicateParser parser = Parser = new NSPredicateParser(tokens);
              IParseTree tree = startRule(parser);
              ParseTreeWalker.Default.Walk(this, tree);
              return Stack.Pop();
        }
Пример #26
0
 public override void ExitPredicateNot(NSPredicateParser.PredicateNotContext context)
 {
     Predicate subpred = Stack.Pop();
       Stack.Push(CompoundPredicate.Not(subpred));
 }
Пример #27
0
        public override void ExitPredicateOr(NSPredicateParser.PredicateOrContext context)
        {
            Predicate rhs = Stack.Pop();
              Predicate lhs = Stack.Pop();

              Stack.Push(CompoundPredicate.Or(new Predicate[] { lhs, rhs }));
        }
Пример #28
0
 // --- PredicateTrue/False ---
 public override void ExitPredicateTrue(NSPredicateParser.PredicateTrueContext context)
 {
     Stack.Push(Predicate.Constant(true));
 }
Пример #29
0
        //        | expression '+' expression     # ExprAdd
        public override void ExitExprAdd(NSPredicateParser.ExprAddContext context)
        {
            var rhs = Stack.Pop();
              var lhs = Stack.Pop();

              Stack.Push(Expr.MakeFunction("add:to:", rhs, lhs));
        }
Пример #30
0
 public override void ExitIndexSize(NSPredicateParser.IndexSizeContext context)
 {
     Stack.Push(Expr.MakeSymbolic(SymbolicValueType.SIZE));
 }