private static IStringEvaluator combineTokens(List <IToken> tokens)
        {
            var  valStack    = new Stack <IStringEvaluator>();
            var  opeStack    = new Stack <OperatorEvaluator>();
            bool valueLasted = false;

            Action <OperatorEvaluator> fnResolveOperator = (OperatorEvaluator ope) => {
                ope.Right = valStack.Pop();
                ope.Left  = valStack.Pop();
                valStack.Push(ope);
            };

            foreach (var token in tokens)
            {
                IStringEvaluator evaluator = token.getEvaluator();
                if (evaluator is ValueEvaluator)
                {
                    if (valueLasted)
                    {
                        throw new FormatException("Value expression duplicated.");
                    }
                    valStack.Push(evaluator);
                    valueLasted = true;
                }
                else if (evaluator is OperatorEvaluator)
                {
                    OperatorEvaluator ope = (OperatorEvaluator)evaluator;
                    if (!valueLasted)
                    {
                        throw new FormatException("Operator expression duplicated.");
                    }
                    if (opeStack.Count > 0)
                    {
                        if (opeStack.Last().getPriority() <= ope.getPriority())
                        {
                            fnResolveOperator(opeStack.Pop());
                        }
                    }
                    opeStack.Push(ope);
                    valueLasted = false;
                }
            }

            while (opeStack.Count > 0)
            {
                fnResolveOperator(opeStack.Pop());
            }

            if (valStack.Count == 0)
            {
                throw new FormatException("Operator expression is none.");
            }

            return(valStack.Last());
        }
Exemple #2
0
        public void IsDecodable1()
        {
            string syntax = "a == \"b\"";
            FuzzyEqualEvaluator expect = new FuzzyEqualEvaluator();
            var left = new LiteralValueEvaluator();

            left.Value  = "a";
            expect.Left = left;
            var right = new LiteralValueEvaluator();

            right.Value  = "b";
            expect.Right = right;

            IStringEvaluator actual = EvaluatorDecoder.decode(syntax);

            Assert.AreEqual(actual, expect);
        }
Exemple #3
0
        YamlPathInfo?findPath(RequestProxy requestProxy, HttpListenerContext httpContext)
        {
            var    request = httpContext.Request;
            string path    = request.Url.LocalPath;
            string method  = request.HttpMethod.ToLower();

            foreach (var p in settings.paths)
            {
                if (p.path != path)
                {
                    continue;
                }
                if (!string.IsNullOrEmpty(p.methods) && !p.methods.ToLower().Split(',').Contains(method))
                {
                    continue;
                }
                if (!string.IsNullOrEmpty(p.filter))
                {
                    try {
                        IStringEvaluator evoluator = EvaluatorDecoder.decode(p.filter);
                        var context = new RequestMatchingContext();
                        context.PathInfo    = p;
                        context.Request     = requestProxy;
                        context.HttpContext = httpContext;
                        if (evoluator.evoluate(context) != StringEvaluator.TRUE)
                        {
                            continue;
                        }
                    } catch (FormatException ex) {
                        log.error("ERROR! filter syntax is broken. filter: " + p.filter + " reason:" + ex.ToString());
                    }
                }
                return(p);
            }
            return(null);
        }
 public EvaluatorController(IStringEvaluator evaluator, ILogStorage <EvaluatorLog> logStorage)
 {
     _evaluator  = evaluator;
     _logStorage = logStorage;
 }
 public void Setup()
 {
     this._stringEvaluator = CreateStringEvaluator();
 }
 public LoggingStringEvaluatorDecorator(IStringEvaluator evaluator, ILogStorage <EvaluatorLog> logStorage)
 {
     _evaluator  = evaluator;
     _logStorage = logStorage;
 }
Exemple #7
0
 public ReplApp(IStringEvaluator stringEvaluator)
 {
     _stringEvaluator = stringEvaluator;
 }