RPN短路评估

时间:2016-07-22 16:40:31

标签: c++ bytecode postfix-notation short-circuiting rpn

我现在正在制作一个简单的字节码解释器,它使用RPN表示符号,并且确实用于任何事情的后缀表示法,但是现在我遇到的问题是:短路评估实际上可以用于后缀表达式?例如,在评估表达式时(false&&(factorial(7)> factorial(5)))C ++知道&&amp ;;的结果。两个操作数上的运算符在它到达第二个操作数之前计算为false,因为(false&& anything)总是等于false。现在当你把它放在RPN中时,你得到(假(7因子5因子>)&&)。

我想构建一个高效的RPN表达式解析器,所以问题是这样的:如何通过短路评估创建一个有效的RPN表达式解析器?

1 个答案:

答案 0 :(得分:1)

您将分两个阶段评估RPN表达式。

阶段1:解析RPN,并构造RPN的树表示。因此,在此树中,例如,&&节点对于表达式的每一半都有两个子节点。构造此树的过程与评估RPN几乎相同,除了评估部分,它被构造新节点的操作所取代,并将其子节点链接到新的父节点,然后推送父节点节点返回RPN评估堆栈。

阶段2:使用递归下降来评估构造的树。在这一点上,短路评估变得微不足道:评估&&的左手孩子,然后决定你是否真的想要评估右手孩子。

同样适用于||节点......