如何在C#中评估自定义括号表达式?

我正在开发一个高级搜索function,其中我需要评估的表达式看起来像是这样的括号:

((Loan number is 1000 And Lock Date is less than 12/03/2015) Or Borrower SSN contains 12345) And ((Buy date is between 12/01/2015 and 23/02/2016 And APR is less than 20000) Or Loan amount is greater than 60000) 

或者用简单的话说

 ((condition1 And condition2) Or condition 3) And ((condition4 And condition5) Or condition6). 

如果我们看一下括号,必须首先评估condition1和condition2,然后用条件3执行它的输出,依此类推……

我们有API来一次评估两个条件。 然而,在这方面的挑战是

1)如何识别相应的括号并首先对其进行评估。 然后使用这个中间结果进行进一步评估?

2)如何找到未使用的括号? 例如(((condition1 And condition2))),在这种情况下虽然不需要,但有3个起始括号和3个右括号,它是一个有效的表达式。

我试着在这里和这里找到一些算法

然而,这需要基于令牌的操作,该操作一次读取一个字符,并且它是计算机理解的算术表达式评估。 在我的情况下,这些东西是自定义的,我们应该找到一个算法来做到这一点。 任何人都可以为我的场景建议更好的方法吗?

如果我理解正确,你已经有了表达式评估器。 您需要的是根据括号分割评估。 我使用一个循环,我在其中找到内括号组,使用此正则表达式:

 \(([^()]*)\) 

然后,如果找到,则将其替换为评估例程的结果,并重复直到最后一个字符串保留,不带括号。

伪代码:

 Find a string enclosed by (), not containing any () If found Replace it with the evaluated value of the string (including parenthesis) Go again Return result 

关于未使用的括号,让它们处理相同。 它们最终会作为单个值进入您的评估例程。

检查这个小提琴 。 而不是评估它返回一个随机数, 01 ,但它certificate了逻辑。

希望这可以帮助。

问候。