如何从前缀表示法构建二进制表达式树?

时间:2016-11-18 07:56:25

标签: algorithm

something like this(*(+ 1 2 3)5)
像*,+这样的运算符可以有两个以上的操作数。

1 个答案:

答案 0 :(得分:0)

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

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

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

取操作数很简单:

  • “(” - >更深入并将子表达式解析为“)”。
  • 不同的操作 - >更深入并解析子表达式。
  • 同样的操作可以简单地忽略,但这取决于你。
  • 常数(如果你有,则为变量) - > make operand subexpression。