后缀表达式中的等运算符 我在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
无效。