【问题标题】:c# convert string expression to a boolean expression [closed]c#将字符串表达式转换为布尔表达式[关闭]
【发布时间】:2011-02-17 13:41:46
【问题描述】:

是否可以将字符串表达式转换为布尔条件?

例如,我得到以下字符串:

var b = "32 < 45 && 32 > 20"

我想从中创建一个bool 表达式并调用它。字符串表示也很灵活(让它更有趣),所以它允许||, &amp;&amp;, ()

【问题讨论】:

标签: c# parsing expression-trees


【解决方案1】:

查看 CodePlex 上的 Flee(快速轻量级表达式评估器)。

【讨论】:

  • 伙计,多么令人难以置信的图书馆!它对我来说非常有效。非常感谢您的提示。
  • 感谢@Richard 指出这个库,这正是我需要的!!!
【解决方案2】:

我会使用Irony,.NET 语言工具包。您可以使用 Irony 构造一个简单的语法,然后将字符串解析为可执行命令。在 tutorialExpression Grammar Sample 中有一个算术语法的好例子,这是一个很常见的请求;)

我绝对建议使用适当的编译器而不是 Regex 或滚动您自己的方法 - 如果您想添加更多规则,它将更具可扩展性。

【讨论】:

    【解决方案3】:

    如果它遵循所有 C# 表达式规则,则按照 http://www.west-wind.com/presentations/dynamiccode/dynamiccode.htm 将其编译为动态代码

    【讨论】:

    • 这有多快?我想它很慢
    • 一点也不快。基本上你调用 C# 编译器,它发出表达式的 IL,然后将其包装在一个方法中,然后在一个类中,然后在一个加载到当前 AppDomain 的动态程序集中,然后通过反射调用该方法以获取评估结果。但是,如果只是为了概念验证或其他目的,集成起来很容易......
    • 是的,我知道它是如何工作的。我只是想指出这将是一种非常缓慢的方法
    【解决方案4】:

    如果您正在处理相对简单的数学表达式,那么 shunting-yard algorithm 的直接实现应该可以解决问题。

    【讨论】:

      【解决方案5】:

      看看我的图书馆,Proviant。这是一个 .NET Standard 库,使用 Shunting Yard algorithm 来评估布尔表达式。你也可以实现自己的语法。

      【讨论】:

      • 仅仅链接到您自己的库或教程并不是一个好的答案。链接到它,解释它解决问题的原因,提供如何解决问题的代码,并否认你编写了它,以获得更好的答案。见:What signifies “Good” self promotion?
      【解决方案6】:

      我认为为这个字符串创建一个解释器不会花费太长时间。

      http://www.industriallogic.com/xp/refactoring/implicitLanguageWithInterpreter.html

      您可以在此处找到有关可用于创建它的设计的信息。

      【讨论】:

        【解决方案7】:

        你可以看看 JINT (Javascript Interpreter for .NET) http://jint.codeplex.com/

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-06
          • 2013-11-27
          • 1970-01-01
          • 2019-06-05
          相关资源
          最近更新 更多