3

我将首先描述问题,然后根据库来描述我目前正在研究的内容。

在我的应用程序中,我们有一组始终可用的变量。例如:TOTAL_ITEMS、PRICE、CONTRACTS、ETC(我们大约有 15 个)。应用程序的客户希望使用这些变量执行和显示某些计算。到目前为止,我一直在不断地将这些计算添加到应用程序中。这很麻烦,我想通过创建模板使其更通用,用户可以在模板中指定一组应用程序将解析和计算的公式。

这是一个案例:

total_cost = CONTRACTS*PRICE*TOTAL_ITEMS

因此,想要为用户在模板文件中定义做类似的事情:

total_cost = CONTRACTS*PRICE*TOTAL_ITEMS 和一些元日期,比如显示它的屏幕。因此,他们将使用屏幕指定公式。该文件将包含许多这种性质的公式。

现在,我正在查看两个库:Spiritmatheval

有人会提出对这项任务更好的建议,以及参考、示例、链接吗?

如果问题不清楚,请告诉我,我会尽力进一步澄清。

谢谢,

萨沙

4

3 回答 3

0

看起来使用yaccbison生成一个简单的解析器并将其集成到您的代码中应该不会太难。

于 2009-02-27T15:59:15.230 回答
0

如果您有固定数量的变量,则调用解析器可能有点矫枉过正。虽然 Spirit 很酷,我一直想在项目中使用它。

我可能只是对字符串进行标记,制作以名称为键的变量的映射(假设所有变量都是整数):

map<const char*,int*> vars;
vars["CONTRACTS"] = &contracts;
...

然后使用一个简单的后缀计算器函数来做实际的数学运算。

编辑:

查看 MathEval,它似乎完全符合您的要求;设置变量并使用这些变量评估数学函数。我不确定您为什么要在语法解析器级别创建解决方案。您是否有任何 MathEval 无法满足的要求?

于 2009-02-27T16:08:06.660 回答
0

我不知道 matheval,但是 boost::spirit 可以非常有效地为你做到这一点:见那里

如果你喜欢模板元编程,你可能想看看Boost::Proto,但开始使用它需要一些时间

于 2009-02-27T16:13:11.640 回答