如果您实现解析器或使用解析库,您想要的可能会实现。基本上,您需要将表达式分解为其组件,然后将它们解释为逻辑块;您的示例包含两种类型,值和运算符。
让我们在您的第一个示例中尝试一下,True AND False:
True <- value : Carry it over
AND <- operator : store
False <- Value : Use stored Operation on Carried value. Carry it over.
End of expression
如果添加分组,事情会变得有点复杂,因为您需要将序列存储在通常称为 表达式树 的结构中,因为它是分层的,并且需要您解析每个组,从“叶子”(离根最远)。让我们使用以下示例:
False XOR (True AND False) OR (True OR False)
表达式树如下所示:
Root Group : False XOR G1 OR G2
Group 1 : True AND False
Group 2 : True OR False
使用您的表达式评估器,您需要先解决第 1 组和第 2 组:
Root Group : False XOR G1 OR G2
Group 1 : False
Group 2 : True
然后将其应用到 Root 组:
Root Group : False XOR False OR True
False <- value : Carry it over
XOR <- operator : store
False <- value : Apply stored Operation (result True). Carry it over.
AND <- operator : store
False <- Value : Apply stored Operation (result True). Carry it over.
- End of expression
这基本上就是表达式解析器的工作原理。
编辑:Irony,Frode 在对您的问题的评论中指出,是一个著名的语言解析器,可能会为您解决问题。我记得不久前读过它,但他比我快得多。 =)