后缀表达式中的等号运算符
Equal operator in Postfix expression
我正在评估 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 = 5
和A = 7
,这似乎与表达式有关
我应该遵循哪种技术来处理代码的相等运算符?
正如评论所说,你得到的答案与规则一致 如果当前元素是一个相等运算符,后跟一个变量,则移动该变量中的结果。
但是,规则中有一些东西破坏了后缀符号的统一性,所以我宁愿建议将该规则更改为
如果当前元素是赋值运算符,则将第一个操作数(任何内容)移动到第二个操作数(变量)
要使此规则适用,您必须验证最后一个标记(第二个操作数)是否为变量。
我提出的规则与其他操作是一致的。例如,后缀表示法3 4 +
被转换为3 + 4
,因为当扫描仪读取+
时,它将采用最后两个操作数,3
和4
,并将它们相加:3 + 4
。以同样的方式3 4 + A =
首先将3 + 4
保存为第一个操作数,然后A
保存为第二个操作数,最后将第一个操作数移动到第二个操作数A = 3 + 4
。相反,您设计赋值规则的方式很特殊,因为它首先读取运算符=
,然后读取第二个操作数A
,这将起作用,但与其他操作的方式不同。
相关文章:
- 表达式中运算符的 GCC 和 ADL
- 错误:表达式必须具有算术、无作用域枚举或带有运算符重载的指针类型
- 为什么这个涉及重载运算符和隐式转换的C++表达式是不明确的
- 运算符表达式上下文中重载解析的内置运算符候选项的正确行为
- 这些重载运算符如何应用于表达式 d***b?
- 在 C 和 C++ 中,使用逗号运算符的表达式是否未定义"a = b, ++a;"?
- 运算符超载的Lambda表达式
- C++表达式中的运算符优先级
- 使用运算符>>折叠表达式
- 表达式必须具有类类型(运算符)
- C++表达式模板不明确的运算符重载
- 二元运算符"<<"不能应用于类型 "wostream" 和 "string" 的表达式
- 更改对象并将其在同一表达式中使用它是不确定的行为,但是子表达式由逗号运算符分开
- [ ] - 运算符中的加法和递增表达式
- 逗号运算符与圆括号表达式的用法示例
- 折叠表达式作为 [] 运算符的参数
- 关于解引用运算符是否在表达式中产生对象对值的定义不明确
- 读取真值表C++的逻辑运算符表达式
- 声明不能发生在条件运算符表达式内部
- 表达式"a==1 ? 1 : 0"与比较加三元运算符表达式是原子的吗?