递归下降算法

算法模型:

Term = Term + Expr

Expr=Expr+Factor

Factor =单个元素。最小单位。

 

什么叫左递归?

举个例子:1-2+1 正确答案应该是0,如果出现左递归答案将会是-2。

所谓的左递归其实就是算式在进行同等级运算符的运算的时候强行从右至左进行了运算解析,因为递归下降法中越是后生成的运算符其优先级越高,在同等级运算中,就无法确保优先级了,在这里的体现就是算式从右至左进行了解析。

 

解决方案:

将运算符号抽象出来单独成立一层,将数值节点统统存入Vector,这样的话,在实际生成到内存中需要判断优先级的只有+ - * / 四个了,因为递归下降算法,所以只要让 * /在+ -的下一级子类中生成,就可以确保他们的优先级是正确的。

内存中只new出+ - * / 四个运算符号,NumberNode统统存入到Vector当中,在调用STL算法将NumberNode依次取出,计算就可以了。