private EvaluationResult EvaluateExpression(AbstractSyntaxTree tree, IEnumerable<IGlobalMethodProvider> providers) {
     var context = new EvaluationContext {
         Tree = tree,
         MethodInvocationCallback = (m, args) => Evaluate(providers, m, args)
     };
     return new Interpreter().Evalutate(context);
 }
 public EvaluationResult Evalutate(EvaluationContext context) {
     return new InterpreterVisitor(context).Evaluate();
 }
 public InterpreterVisitor(EvaluationContext context) {
     _context = context;
 }