我正在编写一个C++程序,它必须解析并评估这样一个字符串中的表达式:

((C<3) || (D>5)) and (B)

或者类似的
((A+4) > (B-2) || C) && ^D

表达式的计算结果始终为真或假我读过调车场算法,但操作顺序对我来说并不重要(我可以从左到右进行评估)。
我正在考虑构建一个树来保存公式的组件,然后从左下角向上递归地计算树。节点的每个子节点都是一个和,每个节点都是一个测试。如果我到达最上面的节点(当当前状态为true时),则必须计算为true这是一个艰难的开始…寻求建议。
有没有一个算法设计模式如何做到这一点?(这个问题好像已经解决过很多次了)

最佳答案

我建议把时间和精力用于学习为这个设计的适当的语法分析工具。Flex用于词法分析(获取单个令牌-变量、操作、偏旁等),然后用BISEN进行语法分析(用令牌构建语法树)。
一旦你有了语法树,评估就很容易从下到上了,正如你所说的。
我不知道你对正式的gramars了解多少,但你总能在网上找到好的教程,也许从这里开始:How do I use C++ in flex and bison?

关于algorithm - 表达式计算算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54062267/

10-16 19:31