Java 1.5:数学公式解析器

你好我经常开发JTableModels,其中一些单元格必须包含一个简单的数学公式的结果。 这个公式可以有:

  • 运算符(+, – ,*,/)
  • 数字常数
  • 其他单元格引用(包含数字)
  • 参数(引用名称为“INTEREST_RATE”的数字)

我经常解决它制作一个小的计算器类,它解析公式,我定义的语法。 计算器类使用堆栈进行计算,语法总是使用波兰表示法。

但波兰语对我和我的用户来说都不自然。 所以我的问题是……

是否有一个运行在1.5 jvm的lib并且可以处理我的requeriments并使用常规符号(带括号,我不知道这种符号样式的名称)的公式?

PD它假设公式总是语法正确,我可以预处理不是常量的数字来提供它们的值

你有没有想过JSR-223的好处? 简而言之,这个规范允许Java开发人员轻松地集成动态语言及其解析器 。 使用这样的解析器,您需要定义解析器转换为定义内部DSL的需要,这解析为创建一个好的API,并让您的用户选择他们喜欢他们喜欢的Javascript / Groovy / Scala / WTF语法。

试试JEP 。

您可以为解析器定义新变量,因此它可以包含引用名称,例如“INTEREST_RATE”。但是您必须事先定义它。

至于单元格引用,你必须提取数字并相应地编辑表达式,或者可能有一些我还不知道的选项。

如果您不能使用Java 6及其脚本支持,那么请查看Apache Bean Scripting Framework (BSF)。 从那个页面:

… BSF 3.x将在Java 1.4+上运行,允许访问Java 1.4和Java 1.5的JSR-223脚本。

我根据Apache License 2.0的条款发布了基于Dijkstra的Shunting Yard算法的表达式评估器:

http://projects.congrace.de/exp4j/index.html

有一种名为formula4j的商业工具可能对某些人有用。

它对细胞参考没有直接帮助。 您必须自己处理这些,并将单元格引用转换为值。