是否可以将字符串表达式转换为布尔条件?
例如,我得到以下字符串:
var b = "32 < 45 && 32 > 20"
我想从中创建一个bool
表达式并调用它。字符串表示也很灵活(为了使它更有趣),所以它允许||, &&, ()
。
我会使用.NET语言工具包Irony。您可以使用Irony构造一个简单的语法,然后将该字符串解析为可执行命令。在这个tutorial和Expression Grammar Sample中有一个很好的关节语法的例子,这是一个非常常见的要求;)
我绝对建议使用正确的编译器而不是Regex或者滚动你自己的方法 - 如果你想要添加更多规则,它将更具可扩展性。
在CodePlex上查看Flee(快速轻量级表达式评估器)。
如果它遵循所有C#表达式规则,则根据http://www.west-wind.com/presentations/dynamiccode/dynamiccode.htm将其编译为动态代码
如果你正在处理相对简单的数学表达式,那么shunting-yard algorithm的简单实现应该可以解决问题。
我认为为这个字符串创建一个解释器不会花费太长时间。
http://www.industriallogic.com/xp/refactoring/implicitLanguageWithInterpreter.html
在这里,您可以找到有关可用于创建它的设计的信息。
你可以看看JINT(Javascript Interpreter for .NET)http://jint.codeplex.com/
看看我的图书馆Proviant。它是一个.NET标准库,使用Shunting Yard algorithm来评估布尔表达式。你也可以实现自己的语法。