2016-11-18 44 views
-3

something like this(*(+ 1 2 3)5)
像*,+这样的运算符可以有两个以上的操作数。如何从前缀表示法构建二进制表达式树?

+2

也许某种搜索?如果只有一个工具可以搜索互联网.... –

+1

如果你还没有做到这一点,请花一些时间阅读[帮助页面](http://stackoverflow.com/help),尤其是部分命名[“我可以问什么问题?”](http://stackoverflow.com/help/on-topic)和[“应避免问什么类型的问题?”](http://stackoverflow.com /帮助/不-问)。还请[参观](http://stackoverflow.com/tour)和[阅读如何提出好问题](http://stackoverflow.com/help/how-to-ask)。最后,请学习如何创建[最小,完整和可验证示例](http://stackoverflow.com/help/mcve)。 –

回答

0

要使用无限数量的操作数创建前缀表示法,您应该为打开/关闭括号定义一些附加规则(并且这不是前缀表示法通常所做的)。

简单的解析器将执行操作,第一个操作数并逐个添加其他操作数。在每一步创建新的操作节点时,左操作数将取前一个(当前)结果,右操作数取新取的操作数。

继续输入或结束括号。不要从输入中删除左括号 - 它应该在开 - 关解析部分处理,而不是在操作解析中处理。

以操作很简单:

  • “(” - >进入更深和解析子表达式达 “)”。
  • 不同的操作 - >深入并解析子表达式。
  • 相同的操作凸轮可以简单地忽略,但取决于您。
  • 常量(或变量,如果你有它们) - >使操作数子表达式。
+0

谢谢你亚历山大 – Gunasekar