JavaScript递归括号匹配

JavaScript递归括号匹配,javascript,jquery,recursion,Javascript,Jquery,Recursion,首先,我包含了一个JSFIDLE,突出显示了我要做的事情,在这里可以找到: 我正在尝试用JavaScript进行动态计算解析,如果您输入诸如SUM(Sales)+SUM(Revenue)之类的计算,这将非常有效 但是,SUM(Sales)*SUM(Revenue)+SUM(Sales)将从右向左运行(由于我的递归算法),因此将首先运行SUM(Revenue)+SUM(Sales)。解决这一问题的方法是让用户输入括号,以确定他们希望首先进行哪部分计算 为了我的生命,我无法理解。。。还有其他人做过同

首先,我包含了一个JSFIDLE,突出显示了我要做的事情,在这里可以找到:


我正在尝试用JavaScript进行动态计算解析,如果您输入诸如
SUM(Sales)+SUM(Revenue)
之类的计算,这将非常有效

但是,
SUM(Sales)*SUM(Revenue)+SUM(Sales)
将从右向左运行(由于我的递归算法),因此将首先运行
SUM(Revenue)+SUM(Sales)
。解决这一问题的方法是让用户输入括号,以确定他们希望首先进行哪部分计算

为了我的生命,我无法理解。。。还有其他人做过同样的事吗?希望提供的代码将进一步演示我正在尝试做的事情

代码如下:

var calculation = '(SUM(Sales) * SUM(Revenue)) + SUM(Sales)';
//var calculation = 'Sales';
var resorted = [];

// Need to enter into an array into the order of which calculations need to be run first.

// so, it should be...
// resorted[0] = SUM(Sales) * SUM(Revenue)
// resorted[1] = + SUM(Sales)

// Then I can parse it such as...

//var calculation = 'SUM(Sales) + (SUM(Sales) + SUM(Revenue))';

// Then... (as my JS calculations run from right to left)

//var calculation = 'SUM(Sales) + SUM(Sales) * SUM(Revenue)';

“我正在尝试用JavaScript进行动态计算解析”哎呀,我宁愿使用eval(开玩笑的,有点)。哈哈,这就是我害怕的,因为我正在拼命尝试不使用eval!实际上,你最好的选择是像解析任何其他语言一样,使用一个标记输入的lexer和一个将标记转换为抽象树的解析器。为什么不用适当的值替换SUM(Sales),然后使用eval进行实际计算呢?正确使用Eval并不是坏事。不幸的是@MarcusEkwall无法工作,因为必须对数据源进行大量分组,在执行映射/缩减之前,我无法获得实际计算的数字。我在这里做了一个精心策划的噩梦。