public WebShell() { _interpreter = new DynamicExpresso.Interpreter(); _commandsHistory = new CommandsHistory(); _interpreter.SetVariable("Commands", _commandsHistory); }
/// <summary> /// https://www.cnblogs.com/songxingzhu/p/6737618.html /// https://github.com/davideicardi/DynamicExpresso /// 高性能版本,支持公式计算。wangyunpeng。2018-02-07 /// </summary> /// <param name="statement">支持公式计算</param> /// <returns></returns> public static string Calc(string statement) { object @object = new DynamicExpresso.Interpreter().Eval(statement); if (@object == null) { return(string.Empty); } else { return(@object.ToString()); } }
private TempComputeResult ComputeBinaryNative(Type leftType, Type rightType, object leftValue, object rightValue, string operatorText, ExpressionSyntax node) // 数学运算, 依赖动态编译lambda表达式,只能JIT { try { var func = new DynamicExpresso.Interpreter().Parse(string.Format("x{0}y", operatorText), new DynamicExpresso.Parameter("x", leftType.UnWrapper()), new DynamicExpresso.Parameter("y", rightType.UnWrapper())); var result = func.Invoke(leftValue, rightValue); return(CreateComputeResult(result, result == null ? null : result.GetType())); } catch (Exception e) { throw new Exception(string.Format("Fail to calculate '{0}'", node.ToString()), e); } }
public bool DynamicExpresso(Parameter parameter) { DynamicExpresso.Interpreter interpreter = new DynamicExpresso.Interpreter(); List <int> results = new List <int>(parameter.Statements.Length); foreach (string statement in parameter.Statements) { int result = interpreter.Eval <int>(statement); results.Add(result); } return(Assert(results, parameter.Sum)); }
public bool DynamicExpresso(Parameter parameter) { DynamicExpresso.Interpreter interpreter = new DynamicExpresso.Interpreter(); List <int> results = new List <int>(parameter.Numbers.Length); foreach (int number in parameter.Numbers) { int result = interpreter.Eval <int>(EXPRESSION, new DynamicExpresso.Parameter("n", number)); results.Add(result); } return(Assert(results, parameter.Sum)); }
private static void ConfigureServices(ApeCliOptions opts) { IServiceCollection serviceCollection = new ServiceCollection(); serviceCollection.AddLogging(); serviceCollection.AddSingleton(serviceCollection); if (opts.PcapProviderUri != null) { serviceCollection.AddSingleton <ICaptureDeviceFactory, CaptureDeviceFactory>(); serviceCollection.AddSingleton <IPcapLoader, PcapLoader.PcapLoader>(); serviceCollection.AddSingleton <IL7ConversationProvider, PcapL7ConversationProvider>(); serviceCollection.AddSingleton(new PcapL7ConversationProviderOptions { PcapUri = opts.PcapProviderUri }); } // Setup for Cassandra repository else { serviceCollection.AddSingleton <IL7ConversationProvider, RepositoryL7ConversationProvider>(); var dynamicExpressoInterpreter = new DynamicExpresso.Interpreter(); Expression <Func <IL7ConversationEntity, Boolean> > l7ConversationFilterPredicate = null; if (opts.L7ConversationFilter != null) { l7ConversationFilterPredicate = dynamicExpressoInterpreter .ParseAsExpression <Func <IL7ConversationEntity, Boolean> >(opts.L7ConversationFilter, "l7c"); } serviceCollection.AddSingleton(new RepositoryL7ConversationProviderOptions { L7ConversationFilterPredicate = l7ConversationFilterPredicate }); } if (opts.PrintSnooperExports == false) { serviceCollection.AddSingleton <ISnooperExportFacade, SnooperExportFacade>(); } serviceCollection.AddSingleton <ICaptureFacade, CaptureFacade>(); serviceCollection.AddSingleton <IL7ConversationFacade, L7ConversationFacade>(); serviceCollection.AddSingleton <IL7ConversationFacade, L7ConversationFacade>(); CassandraServiceInstaller.Install(serviceCollection, opts.CassandraKeyspace, opts.CassandraContactPoint); _services = serviceCollection.BuildServiceProvider(); }
public bool DynamicExpressoCompiled(Parameter parameter) { DynamicExpresso.Interpreter interpreter = new DynamicExpresso.Interpreter(); Func <int, int> @delegate = interpreter.ParseAsDelegate <Func <int, int> >(EXPRESSION, "n"); List <int> results = new List <int>(parameter.Numbers.Length); foreach (int number in parameter.Numbers) { int result = @delegate.Invoke(number); results.Add(result); } return(Assert(results, parameter.Sum)); }
public static Func <object, object, TimeSpan, bool> ComposeTestInputOutput(string errorRuleLang, string errorRule, Action <DateTime, string> logError) { if (string.IsNullOrEmpty(errorRuleLang) || string.IsNullOrEmpty(errorRule)) { return((input, output, TimeSpan) => false); } return((input, output, timeSpan) => { var isAssert = false; try { if (errorRuleLang == "DynamicExpresso") { var interpreter = new DynamicExpresso.Interpreter(); var result = interpreter.Eval(errorRule, new[] { new DynamicExpresso.Parameter("input", input), new DynamicExpresso.Parameter("output", output), new DynamicExpresso.Parameter("timeSpan", timeSpan) }); if (result is bool) { isAssert = (bool)result; } else { isAssert = true; logError(DateTime.Now, $"Rule lang '{errorRuleLang}', rule '{errorRule}' has returned not boolean result"); } } if (!isAssert) { logError(DateTime.Now, $"[{errorRuleLang}] {errorRule}"); } } catch (Exception ex) { isAssert = true; logError(DateTime.Now, Markdown(ex)); } return isAssert; }); }
string IActivityChooser.GetNextActivityKey(Data.Workflow wf, Data.UnliqudatedObjectsWorkflowQuestion question, string settings) { var s = JsonConvert.DeserializeObject <MySettings>(settings); //TODO: pass in questions object var parameters = new[] { new DynamicExpresso.Parameter(CommonParameterNames.Workflow, wf), new DynamicExpresso.Parameter(CommonParameterNames.Ulo, wf.UnliquidatedObligation), new DynamicExpresso.Parameter(CommonParameterNames.wfQuestion, question), }; var i = new DynamicExpresso.Interpreter(); foreach (var e in s.Expressions) { bool res = i.Eval <bool>(e.Code, parameters); if (res) { return(e.WorkflowActivityKey); } } return(null); }
public TempComputeResult VisitUnaryExpression(ExpressionSyntax operand, string operatorText, bool isPrefix, string nodeText) { var operandResult = Visit(operand); if (operandResult.Type == null) { return(CreateComputeResult(null, null)); } string methodName; if (dic_UnaryOperator_MethodName.TryGetValue(operatorText, out methodName)) { var bindingFlags = BindingFlags.Public | BindingFlags.Static; var overloadOperatorMethod = DebugService.GetMethod(operandResult.Type, methodName, bindingFlags, true, operandResult.Type); if (overloadOperatorMethod != null) // 有运算符重载 { var result = overloadOperatorMethod.Invoke(null, new object[1] { operandResult.Value }); return(CreateComputeResult(result, overloadOperatorMethod.ReturnType)); } } try { var expressionText = isPrefix ? "{0}x" : "x{0}"; var func = new DynamicExpresso.Interpreter().Parse(string.Format(expressionText, operatorText), new DynamicExpresso.Parameter("x", operandResult.Type.UnWrapper())); var result = func.Invoke(operandResult.Value); return(CreateComputeResult(result, result == null ? null : result.GetType())); } catch { throw new Exception(string.Format("Fail to calculate '{0}'", nodeText)); } }
private Predicate<double> GetCondition(string expression) { if (string.IsNullOrWhiteSpace(expression)) return null; var interpreter = new DynamicExpresso.Interpreter(); var func = interpreter.Parse<Predicate<double>>(expression, "value"); return func; }
private Func<double, double> GetTransform(string expression) { if (string.IsNullOrWhiteSpace(expression)) return null; var interpreter = new DynamicExpresso.Interpreter(); var func = interpreter.Parse<Func<double, double>>(expression, "value"); return func; }
public async Task Execute(IJobExecutionContext context) { try { //ILoggerRepository repository = LogManager.CreateRepository("TestJob"); //XmlConfigurator.Configure(repository, new FileInfo("log4net.config")); //ILog log = LogManager.GetLogger(repository.Name, "TestJob"); var methodName = System.Reflection.MethodBase.GetCurrentMethod().ReflectedType.FullName; logger.Info("InfoInfoInfoInfoInfoInfoInfoInfoInfoInfoInfoInfoInfo"); logger.Warn("WarnWarnWarnWarnWarnWarnWarnWarnWarnWarnWarnWarnWarnWarnWarn"); logger.Error("ErrorErrorErrorErrorErrorErrorErrorErrorErrorErrorErrorErrorError"); logger.Debug("DebugDebugDebugDebugDebugDebugDebugDebugDebugDebugDebug"); //log.LogInformation("aaaaaaaaaaaaaaaaa"); //log.LogWarning("bbbbbbbbbbbbbbbbbbbbb"); //log.LogError("cccccccccccccccccccccccccc"); //log.LogDebug("dddddddddddddddddd"); var jobData = context.JobDetail.JobDataMap; //获取Job中的参数 var triggerData = context.Trigger.JobDataMap; //获取Trigger中的参数 // var data = context.MergedJobDataMap;//获取Job和Trigger中合并的参数 var value1 = jobData.GetString("key1"); var value2 = jobData.GetString("key2"); // var flag = jobData.GetInt("flag"); // var value3 = data.GetString("key2"); await Task.Run(() => { // ==============================(Install - Package DynamicExpresso.Core)====================================== //var whereExpression = $"m.{queryField}==\"{queryValue}\""; // string whereExpression = "customer.Age > 18 && customer.Gender == 'F'"; // var interpreter = new Interpreter(); // Func<Customer, bool> dynamicWhere = interpreter.ParseAsDelegate<Func<Customer, bool>>(whereExpression, "customer"); // Assert.AreEqual(1, customers.Where(dynamicWhere).Count()); //===================================================================================================== //string whereExpression = "customer.Age > 18 && customer.Gender == 'F'"; //var interpreter = new Interpreter(); //Expression<Func<Customer, bool>> expression = interpreter.ParseAsExpression<Func<Customer, bool>>(whereExpression, "customer"); var code = "i<100&&s.Contains(\"测试\")"; var interpreter = new DynamicExpresso.Interpreter(); var result = interpreter.ParseAsDelegate <Func <int, string, bool> >(code, "i", "s"); //var result = interpreter.ParseAsExpression<Func<int, string, bool>>(code, "i", "s").Compile(); for (int i = 0; i < 102; i++) { var v = result(i, "我在测试" + i);//2213ms logger.Warn(v); //Console.WriteLine(v); } for (var i = 0; i < 10; i++) { logger.Info($"参数作业:{flag}"); } //context.Scheduler.UnscheduleJob(context.Trigger.Key);// 移除触发器 //context.Scheduler.DeleteJob(context.JobDetail.Key);// 删除任务 //context.Scheduler.Shutdown(); //Thread.Sleep(5000); }); } catch (Exception e) { await context.Scheduler.Shutdown(); logger.Error(e.ToString()); } }
public ScriptService() { _engine = new DynamicExpresso.Interpreter(); }