我需要一个快速的运行时表达式解析器

2023-11-29

我需要找到一个快速、轻量级的表达式解析器。

理想情况下,我想向它传递一个名称/值对列表(例如变量)和一个包含要评估的表达式的字符串。我需要从中返回的只是一个真/假值。

表达式的类型应遵循以下原则:

varA == "xyz" and varB==123

基本上,只是一个简单的逻辑引擎,其表达式是在运行时提供的。

UPDATE
至少需要支持 ==、!=、>、>=、

关于速度,我预计每个请求大约执行 5 个表达式。我们会看到每秒大约有 100 个请求。我们当前的页面往往在 50 毫秒内执行。通常任何表达式中只涉及 2 或 3 个变量。但是,在执行之前我需要将大约 30 个加载到解析器中。

更新2012/11/5
关于性能的更新。我们大约 2 年前实施了 nCalc。从那时起,我们扩展了它的用途,以便在回发时平均使用 40 多个表达式,覆盖 300 多个变量。现在每秒发生数千次回发,性能下降绝对为零。

我们还对其进行了扩展,添加了一些附加功能,同样没有性能损失。简而言之,nCalc满足了我们所有的需求并超出了我们的期望。


你见过吗https://ncalc.codeplex.com/ and https://github.com/sheetsync/NCalc ?

它可扩展、快速(例如拥有自己的缓存),使您能够通过处理 EvaluateFunction/EvaluateParameter 事件在运行时提供自定义函数和变量。它可以解析的示例表达式:

Expression e = new Expression("Round(Pow(Pi, 2) + Pow([Pi2], 2) + X, 2)");

  e.Parameters["Pi2"] = new Expression("Pi * Pi");
  e.Parameters["X"] = 10;

  e.EvaluateParameter += delegate(string name, ParameterArgs args)
    {
      if (name == "Pi")
      args.Result = 3.14;
    };

  Debug.Assert(117.07 == e.Evaluate());

它还可以本地处理 unicode 和许多数据类型。如果您想更改语法,它会附带一个鹿角文件。还有一个支持 MEF 加载新功能的 fork。

它还支持逻辑运算符、日期/时间字符串和 if 语句。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我需要一个快速的运行时表达式解析器 的相关文章

随机推荐

  • 我们如何列出 Google Drive 上特定文件夹中的所有文件

    我们注意到 Google Drive APIJavaScript允许您列出特定文件夹中的所有文件 但它仅带来文件的基本详细信息 如果我们想了解更多信息 例如文件名 我们需要再次查询每个文件的 API 有没有一种方法可以让我们列出文件的更多详
  • 如何设置Cloudfront和S3以指向每个路由的index.html?

    我有一个托管在 AWS 上的 NextJS 应用程序 我的文件夹结构是这样的 index html articles index html article1 index html article2 index html 如何将路由设置为 a
  • Weld 在库 jar 中找不到 CDI 生成器方法

    使用 Wildfly 8 2 0 Final 我相信它使用 Weld 2 2 我在 Maven 多模块项目中使用 2 个简单的类重现了这个问题 一个产生一个javax ws rs client Client 另一个有相同的注入点 Arqui
  • 用于创建 C/C++ 解析器/分析器的好工具 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 有哪些可以快速开始解析和分析 C C 代码的好工具 特别是 我正在寻找处理 C C 预处理器和语言的开源工具 优选地 这些工具将使用 lex yacc 或 flex bison 作为
  • xcopy 文件、重命名、抑制“xxx 是否指定文件名...”消息

    这看起来很简单 也许我只是忽略了适当的旗帜 但是我如何在一个命令中将文件从一个目录复制到另一个目录并在目标目录中重命名 这是我的命令 if exist bin development whee config example if not e
  • MYSQL ORDER BY CASE 问题

    我有一个这样的数据库 id one id two timestamp one timestamp two 27 35 9 30 NULL
  • JDBC/Connectorj:了解连接池

    我想我需要更好地理解连接池的概念 我正在使用 ConnectorJ 使用 java 进行工作 并将 servlet 部署在 Apache Tomcat 服务器上 我一直在关注文档 所以我的 Tomcat context xml 如下所示
  • Rails 中 -%> 和 %> 之间的区别[重复]

    这个问题在这里已经有答案了 我已经开始了一些 Rails 教程 并注意到一些视图代码块就像 h1 h1 其他代码块就像 h1 h1 gt 和 gt 有什么区别 如果您知道一些好的语法参考 可以给我指出 这也会很有帮助 额外的破折号使得 ER
  • 如何在 Node js 中发送 POST 请求内容类型为 application/octet-stream 的文件

    我正在尝试将一些内容上传到 Facebook 的服务器 他们的官方文件指出 使用对话框中的令牌 您可以向我们的 Graph API 提交以下调用以提交您的 zip 请注意 我们正在使用视频子域 但这是故意的 因为该 URL 被配置为接收更大
  • 为什么尝试将 Grape 与 Rails 一起使用会因“未初始化常量 API”而失败?

    我希望有人解释一下为什么在 Rails 4 1 8 和 Grape 0 10 1 中会发生这种情况 这是我的 API app api root rb module API class Root lt Grape API prefix api
  • 使用 .pth 文件

    我正在尝试使模块在我没有全局写入权限的系统上可发现site packages目录 并且不改变环境 PYTHONPATH 我试图放置一个 pth文件与我正在执行的脚本位于同一目录中 但它似乎被忽略 例如 我创建了一个文件extras pth包
  • 使用 Maven 构建完整的应用程序文件夹

    大多数 Java 独立应用程序在部署到生产环境后最终都会出现在如下所示的文件夹中 myapp gt lib here lay all dependencies gt config here lay all the config files
  • 在 JavaScript 中将十六进制转换为浮点数

    我想将带有分数的以 10 为底的数字转换为以 16 为底的数字 var myno 28 5 var convno myno toString 16 alert convno 那里一切都很好 现在我想将其转换回十进制 但现在我不能写 var
  • 使用 Jetpack 的 Android 导航组件销毁/重新创建的片段

    我正在尝试实施使用 Jetpack 架构组件进行导航在我现有的应用程序中 我有一个活动应用程序 其中主要片段 ListFragment 是一个项目列表 目前 当用户点击列表项时 第二个片段将添加到堆栈中fragmentTransaction
  • 如何在 Android 中实现“Lettrine”渲染?

    我有一个小问题 如何在 Android 中实现 Lettrine 删除首字母大写字母 渲染 我的意思是 一个自动渲染 lettrine 的小部件 这是我正在寻找的示例 我很确定没有 简单的方法 可以做到这一点 但如果有的话可以帮助 欢迎所有
  • ARM BLX 指令范围(绝对)

    我有一个关于 ARM BLX 指令的问题 特别是关于 BLX RX 指令的问题 ARM手册上规定 对于BLX标签 标签应在32MB范围内 在我的代码中 我将 R0 寄存器设置为指向地址 1 我当前的地址和address1 目标地址 之间的距
  • 适用于armv7和arm64的Theos

    我正在尝试让 theos 在 OSX Mavericks 上工作 我最近购买了一部 iPhone 5s 并从那时起对其进行了越狱 现在我正在尝试让 Theos 工作 这样我就可以再次开始进行一些调整 我让它在 OSX Lion 以及 IOS
  • 将日期设置为从今天起 7 个工作日(不包括周末和公众假期)

    我尝试将日期设置为从今天算起 7 个工作日 不包括周末和英国公共假期 我首先将默认日期设置为今天的日期 todaysDate 7 天 todayPlusSevenDays 然后我计算todaysDate 和todayPlusSevenDay
  • 从 http 响应中保存角度文件

    我想知道如何以角度保存服务器响应中包含的文件 以便响应到达时自动下载文件 Edit 我有一个 http post 方法 我在响应中获取 pdf 数据 成功后 我想将响应数据保存为 pdf 文件 E g http method POST ur
  • 我需要一个快速的运行时表达式解析器

    我需要找到一个快速 轻量级的表达式解析器 理想情况下 我想向它传递一个名称 值对列表 例如变量 和一个包含要评估的表达式的字符串 我需要从中返回的只是一个真 假值 表达式的类型应遵循以下原则 varA xyz and varB 123 基本