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()); }
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); }
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; }
public ReplApp(IStringEvaluator stringEvaluator) { _stringEvaluator = stringEvaluator; }