我正在编写一个C ++程序,该程序必须先解析然后求值保存在这样的字符串中的表达式:
((C<3) || (D>5)) and (B)
或类似的
((A+4) > (B-2) || C) && ^D
表达式将始终为true或false。我了解了调车场算法,但是操作顺序对我而言并不那么重要(我只能说从左到右的评估)。
我正在考虑构建一棵树来保存公式的组成部分,然后从左下角递归地评估树。一个节点的每个子节点将是一个AND,每个节点将是一个测试。如果我到达最高节点(当前状态为true时),则必须评估为true。这是一个艰难的开始……正在寻求建议。
是否有关于如何执行此操作的算法设计模式? (似乎这个问题以前已经解决了很多次了)
答案 0 :(得分:1)
我建议您花时间和精力来学习为此目的而设计的适当的词法分析工具。使用Flex进行词法分析(获取单个标记-变量,运算符,自变量等),然后使用Bison进行语法分析(根据标记构建语法树)。
有了语法树后,如您所说,从下到上进行评估很容易。
我不确定您对正式语法的了解程度如何,但是您始终可以在线找到好的教程,也许从这里开始:How do I use C++ in flex and bison?