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