Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何解析C+中的表达式+;_C++_Parsing_Expression - Fatal编程技术网

C++ 如何解析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

我想解析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::map
保存变量名和值。

您可能需要查看Boost的Spirit库或Boost正则表达式库。或者你需要在没有任何第三方LIB的情况下使用它?我从来没有使用过boost,但谢谢你的回复。有人能说出一些第三方LIB吗boost@Kiril,则无法使用正则表达式解析此类表达式。Regex不允许递归定义。我应该声明一个兴趣-我维护这个FAQ,已经做了很多年了。一个算法会很受欢迎的算法是什么?解析(解释)像
45+12*7
这样的表达式的算法是基础数学;每个孩子都学习如何解析它。评估它也是基本的。解析
a+12*7
并不是那么难,使用
a=45
对其进行评估也很简单。