Converting Reverse Polish Notation
在使用 C 或 C# 时,有什么方法可以将逆波兰表示法解释为"正常"数学表示法?我在一家工程公司工作,所以他们偶尔会使用 RPN,我们需要一种方法来转换它。有什么建议吗?
是的。想想 RPN 计算器是如何工作的。现在,不是计算值,而是将操作添加到树中。因此,例如,
这是前缀符号,然后您必须将其转换为中缀。从左到右遍历树,深度优先。对于每个"内部级别",如果运算符的优先级较低,则必须将运算放在括号中。那么,在这里,您会说
希望这会有所帮助!
编辑:有一个微妙之处(除了上面没有考虑一元运算之外):我假设是左关联运算符。对于右关联(例如,
会得到不同的结果
从树中重构中缀时,两种情况都表明优先级不需要括号,但实际上后一种情况需要括号(
另外,进一步的想法是您也需要
Shunting Yard 算法用于将中缀(即代数)转换为 RPN。这与您想要的相反。
你能给我举一个你的 RPN 输入的例子吗?我是一位资深的惠普计算器用户/程序员。我想你有一个包含所有输入的堆栈
C# 没有对解析逆波兰表示法 (RPN) 的内置支持。您需要编写自己的解析器,或者在网上找到一个。
有许多教程将后缀形式(RPN)转换为中缀(代数方程)。看看这个,也许你会发现它很有用,你可以试试逆向工程?它将后缀表达式转换为中缀形式,请记住,给定的后缀可以有多个中缀表示法。实际上讨论将后缀转换为中缀的有用示例很少。这是一个由两部分组成的条目,我发现它非常有用。它也有一些伪代码:
- PostFix to Infix:将 RPN 转换为代数表达式
- 后缀到中缀,第 2 部分:添加括号
n
n
n
n