C++ 如何解析C+中的表达式+;
我想解析res=((a*(2+b))/c)+5.603+(6*(d^5))之类的表达式。我只想用C++做。 看一下 这里有一个彻底的处理方法:C++ 如何解析C+中的表达式+;,c++,parsing,expression,C++,Parsing,Expression,我想解析res=((a*(2+b))/c)+5.603+(6*(d^5))之类的表达式。我只想用C++做。 看一下 这里有一个彻底的处理方法: 是java,但对C++非常便携。 < p> Stroustrup解释了如何评价表达式,如((1×(2 + 3))/4)+5.603 +(6*(11 ^ 5))< /> >。基本上,为所有子表达式构建一个计算树 您的示例有三个额外步骤。在解析过程中,必须注意变量a,在计算过程中,必须用当前值替换变量。最后,您需要将结果分配给变量 您可以使用std::ma
<代码>是java,但对C++非常便携。 < p> Stroustrup解释了如何评价表达式,如<代码>((1×(2 + 3))/4)+5.603 +(6*(11 ^ 5))< /> >。基本上,为所有子表达式构建一个计算树 您的示例有三个额外步骤。在解析过程中,必须注意变量
a
,在计算过程中,必须用当前值替换变量。最后,您需要将结果分配给变量
您可以使用
std::map
保存变量名和值。您可能需要查看Boost的Spirit库或Boost正则表达式库。或者你需要在没有任何第三方LIB的情况下使用它?我从来没有使用过boost,但谢谢你的回复。有人能说出一些第三方LIB吗boost@Kiril,则无法使用正则表达式解析此类表达式。Regex不允许递归定义。我应该声明一个兴趣-我维护这个FAQ,已经做了很多年了。一个算法会很受欢迎的算法是什么?解析(解释)像45+12*7
这样的表达式的算法是基础数学;每个孩子都学习如何解析它。评估它也是基本的。解析a+12*7
并不是那么难,使用a=45
对其进行评估也很简单。