我在c ++中评估postfix
表达式。一切正常,但我没有正确管理=
平等操作员。
导致中缀表达式的问题如下所示:A = 2 + B = 5
其中A和B是变量。
我的程序将其转换为postfix:2 5 = B + = A
。
在我的程序中,我写了if current element is an equal operator followed by a variable then move the result in that variable.
这不是正确的方法,因为我的程序在解决上面的表达式后会给出B = 5
和A = 7
这个表达式看起来不对。
我应该遵循哪种技术来处理代码的相等运算符?
答案 0 :(得分:0)
正如评论所说,你得到的答案与规则一致如果当前元素是一个相等的运算符后跟一个变量,那么将结果移动到该变量。
但是,规则中的某些内容会破坏后缀表示法的一致性,所以我宁愿建议将该规则更改为
如果当前元素是赋值运算符,则将第一个操作数(任何值)移动到第二个操作数(变量)
要使此规则适用,您必须验证最后一个标记(第二个操作数)是否为变量。
我建议的规则与其他操作一致。例如,后缀符号3 4 +
将转换为3 + 4
,因为当您的扫描程序读取+
时,将使用最后两个操作数3
和4
,并总结:3 + 4
。以同样的方式3 4 + A =
将首先保存3 + 4
作为第一个操作数,然后A
作为第二个,最后将第一个操作数移动到第二个A = 3 + 4
。相反,您设计分配规则的方式很特殊,因为它首先读取运算符=
,然后是第二个操作数A
,它将起作用,但与其余操作的方式不同