即使是非常基本的东西也可以。就像输入和评估像 x+1 这样的东西,其中 x 是我要指定的变量。
我正在考虑为每个公式编写自己的字符串,使用正则表达式来解析它们等等,但是让我们假设我的目标是尽可能地懒惰,并且如果有另一种选择(尤其是正式的) ),我宁愿先尝试使用它。
有什么东西可以做这样的事情吗?
我知道以下库:
Symja Parser(GPL 许可)支持类似 Mathematica 的语法
Jep - Java 数学表达式解析器(商业 - GNU 公共许可证下的旧版本?)
JFormula(商业)
MathEval - 数学表达式评估器(公共领域和非常小的足迹)
您可以考虑使用Java 6 中的脚本。参考 JDK 带有一个 JavaScript 实现,您也可以插入其他语言。
几年前我成功地使用了JEP,它似乎仍在积极开发中。我相信他们在那些日子里有一个更宽松的许可证,但它可能比自己编码便宜(取决于你的确切需求和技能)。
我已经为我自己构建了一个 java 库来作为 Lex/YACC 的学习示例。它被合并到一个更大的项目中,似乎运行良好。如果我要重新开始更大的项目,我会遵循上面的建议并使用 Java 脚本引擎。
您可以尝试LibFormula,这是一个基于 OpenDocument 的 OpenFormula 标准的公式计算库。
OpenFormula 是为电子表格应用程序编写的,并使用接近 Excel 公式的语法。更多信息可以在Pentaho-Wiki中找到
样本:
=[x]+1
您可以查看我在Apache License 2.0下发布的exp4j。它实现了 dijkstra 的调车场算法,并且适用于多变量函数,如f(x,foo)=log(foo^(x^-1))
有些人可能对名为formula4j的新工具感兴趣。
它是商业的,所以它并不适合所有人。
也许MathML?
MathML 是一种低级规范,用于将数学描述为机器对机器通信的基础,它为在网页中包含数学表达式提供了急需的基础。在发布科学和技术工作流程以及必须通过软件处理数学的任何地方,它也很重要。例如,新版本改进了数学的可访问性,以及从右到左书写的语言公式。基本标记保持不变,因为社区有七年的经验。