我正在寻找可以对查询过滤器进行操作的解析器。但是,我不太确定这些术语,因此证明工作很辛苦。我希望有人能帮助我。我读过“递归下降解析器”,但我想知道这些是否适用于成熟的语言解析器,而不是我正在寻找的逻辑表达式评估。
理想情况下,我正在寻找 .NET 代码 (C#),但也在寻找在 T-SQL 中工作的类似解析器。
我想要的是解析的东西,例如:
((a=b)|(e=1))&(c<=d)
理想情况下,运算符可以是可定义的(例如 '<' vs 'lt'、'=' vs '==' vs 'eq' 等)并且我们可以指定函数类型标签(例如 (left(x,1)= 'e'))。解析器加载它,遵循顺序优先级(并且理想情况下处理缺少任何括号),然后使用表达式回调我的代码以评估布尔结果 - 例如'a = b'?)。我不希望解析器理解表达式中的自定义函数(尽管一些基本函数会很有用,比如字符串拆分)。将表达式拆分(分成左右两部分)会很好。
解析器最好询问最少数量的问题来计算最终结果 - 例如,如果 AND 的一侧为假,则评估另一侧没有意义,并首先评估最简单的一侧(即上面的表达式,'c<=d' 应该被认为更快,因此首先被评估。
我可以想象这是很多工作要做,但是,相当普遍。任何人都可以给我任何指示吗?如果没有像上面那样灵活的解析器,是否有任何基本的解析器可以用作开始?
非常感谢
李