如何解析这样的查询到sql?..或 你知道任何可以解析它的开源解析器吗?
(((adsfa ≤ "value") AND (adsfa > "value")) OR (adsfa = "value"))
AND (adsfa ≤ "value") OR ((adsfa ≤ "value") AND (adsfa ≤ "value"))
AND (adsfa ≤ "value")
我尝试使用string.Split(stringSeparators,StringSplitOptions.RemoveEmptyEntries)
构建自己的算法
算法变得越来越复杂,但我找到了更多无法解析的组合。
更新:谢谢大家,我可能会在下一个版本中使用其中一个解析器。
答案 0 :(得分:4)
我自己使用Irony库开发了这样的东西。它仍处于alpha状态,但到目前为止对我来说一直很稳定。请注意,我用它来解析由其他程序员编写的表达式,而不是用户输入。
这是另一个想法 - 如果您信任查询的来源,只需要将其转换为正确的SQL,也许一些简单的string.Replace()
就足够了?它实际上已经是SQL了,只是运算符是奇怪的字符。
答案 1 :(得分:1)
如果这些是您需要解析的唯一表达式,您可以在C#中手动编写解析器。对于需要递归的括号,因为您不知道它们可以嵌套多深。看看this article我写了一段时间,你可以重写它以满足你的需要。
当事情变得更复杂的时候手工编写解析器变得很难,那么你可能更善于使用工具包。这些天我选择的武器在FParsec,虽然它在F#而不是C#中。这是非常强大和灵活的。
另外,我对ANTLR有很好的经验。
也许你不需要一个完整的解析器等。告诉我们你想要做什么,你为什么要阅读这些表达式?也许还有另一种方式。
GJ
答案 2 :(得分:0)
这看起来真的很麻烦。 通常我会用F#中的FParsec之类的解析器生成器/组合器库来做这样的事情。但我不认为C#有这样的东西(Luke Hoben做了类似的事情here)
您可以为项目的这一部分切换到F#吗?