左递归
进行四则运算时,根据运算结合性,我们通常是从左往右依次计算,如下所示:
-
语法规则:
add: add | add + number
-
代码实现:
function additive(){
additive();
number();
}
但是,根据add: add | add + number
从左往右计算会在代码实现的过程中没有结束条件,造成无限递归的情况,这种情况称为左递归,那么我们通过如下方式解决:
-
语法规则:
add: number | number + add
-
代码实现:
function additive(){
number();
additive();
}
但是,add: number | number + add
这种逻辑失去了结合性,导致运算结果错误。所以我们根据巴克范式对add: number | number + add
再度改进:
- 语法规则:
add: number (+ number)*
总结: 四则运算过程中,如果使用add: add | add + number
左递归的形式,会出现无限循环;如果使用add: number | number + add
右递归的形式,会出现结合性失效的问题,导致运算结果错误; 所以我们最终采用将左递归改为循环来实现四则运算