后缀表达式中的等运算符 我在C++中评估 PXFIX < /Cord>表达式。一切正常,但我没有正确管理=相等运算符

后缀表达式中的等运算符 我在C++中评估 PXFIX < /Cord>表达式。一切正常,但我没有正确管理=相等运算符,c++,data-structures,C++,Data Structures,导致中缀表达式的问题如下:A=2+B=5,其中A和B是变量。 我的程序将其转换为后缀:25=B+=A 在我的程序中,我编写了如果当前元素是一个相等的运算符,后跟一个变量,则将结果移动到该变量中。这不是正确的方法,因为我的程序在求解上述表达式后给出了B=5和a=7,从表达式来看,这似乎是错误的 我应该遵循哪种技巧来处理代码的相等运算符?正如注释所说,如果当前元素是后跟变量的相等运算符,则得到的答案与规则一致,然后将结果移动到该变量中 然而,规则中有一些东西打破了后缀符号的一致性,因此我建议将该规则

导致中缀表达式的问题如下:
A=2+B=5
,其中A和B是变量。 我的程序将其转换为后缀:
25=B+=A

在我的程序中,我编写了
如果当前元素是一个相等的运算符,后跟一个变量,则将结果移动到该变量中。
这不是正确的方法,因为我的程序在求解上述表达式后给出了
B=5
a=7
,从表达式来看,这似乎是错误的


我应该遵循哪种技巧来处理代码的相等运算符?

正如注释所说,如果当前元素是后跟变量的相等运算符,则得到的答案与规则一致,然后将结果移动到该变量中

然而,规则中有一些东西打破了后缀符号的一致性,因此我建议将该规则改为

如果当前元素是赋值运算符,则将第一个操作数(任意值)移动到第二个操作数(变量)

要使此规则适用,必须验证最后一个标记(第二个操作数)是否为变量


我提议的规则与其他操作一致。例如,后缀符号
3 4+
被转换为
3+4
,因为当扫描仪读取
+
时,它将使用最后两个操作数
3
4
,并将它们相加:
3+4
。以同样的方式,
3 4+A=
首先将
3+4
保存为第一个操作数,然后将
A
保存为第二个操作数,最后将第一个操作数移动到第二个
A=3+4
。相反,您设计赋值规则的方式很特殊,因为它首先读取运算符
=
,然后读取第二个操作数
A
,这将起作用,但与其他操作的方式不同。

我假设“相等运算符”实际上是指“赋值运算符”?然后结果似乎与您的表达式一致:您将
5
分配给
B
,然后将
B
添加到
2
,并将结果(
7
)分配给
A
。我同意约阿希姆的观点。赋值运算符是反向的,因为它首先读取表达式,然后读取受让人(这是正确的)。也许这会造成一些混乱,因为我们习惯于直接赋值x=3+4。你期望得到什么结果?我很困惑,在
a=2+B=5
`2+B将被单独求解,它将忽略5,因为左手边是一个常数,最后2+B的答案将被赋值给a。好的,我得到了你的答案规则,但如果
A=B+2=5
会发生什么?如果更改规则,表达式
A=B+2=5
将无效,因为它是由其他规则生成的。如果您采纳我的建议,使规则统一,那么您现在必须在读取
=
之前强制存在两个操作数,因为
3*
是无效的,因为
*
需要两个参数。换句话说,
ab=
将变为有效,
A=B
无效。