后缀表达式中的等号运算符

Equal operator in Postfix expression

本文关键字:运算符 表达式 后缀      更新时间:2023-10-16

我正在评估 c++ 中的postfix表达式。一切正常,但我没有正确管理=等运算符。

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

在我的程序中,我写了if current element is an equal operator followed by a variable then move the result in that variable.这不是正确的方法,因为我的程序在解决上述表达式后给出了B = 5A = 7,这似乎与表达式有关

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

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

但是,规则

中有一些东西破坏了后缀符号的统一性,所以我宁愿建议将该规则更改为

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

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

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