【发布时间】:2012-09-20 19:19:47
【问题描述】:
我想解析一个类似 SQL 的输入,例如:
SEX = 'MALE' AND AGE > 20
然后根据“sql”输入搜索我的 c# 项目数组。
例如上面的例子,我会在我的数据中搜索所有 Item.Sex 属性设置为“MALE”且 Item.Age 属性大于 20 的项目。
这是一个简单的示例,您可以轻松地开始想象更复杂的场景。例如:
(SEX = 'MALE' AND AGE > 20) OR (SEX = 'FEMALE' AND AGE < 30)
我需要能够支持以下运营商:
=
>
<
<>
() - for precedence
AND
OR
我有一种感觉,我最终不得不自己从头开始编写代码,但不想重新发明轮子。在研究了一会儿之后,我确实遇到了对解析器/语法等的引用,但不太确定这些是否符合要求。
【问题讨论】:
-
您可以使用 ANTLR(或 C# 等价物)或 Parser-Combinator 库(如果有 C# 库)等工具来简化生活。
-
有关 ANTLR 和 C# 演示,请参阅:stackoverflow.com/questions/4396080/antlr-3-3-c-sharp-tutorials
-
@astander 有没有办法轻松地从字符串 -> 表达式树? (我假设,也许是错误的,输入是文本。)
-
我不知道,不过这里的其他建议似乎不错
标签: c# sql parsing grammar logical-operators