Java 1.5:数学公式解析器

时间:2010-10-27 09:45:28

标签: java parsing math formula

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

  • 运营商(+, - ,*,/)
  • 数量常数
  • 其他单元格引用(包含数字)
  • 参数(引用名称如“INTEREST_RATE”的数字)

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

但是对于我和我的用户来说,波兰语符号是不自然的。所以我的问题是......

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

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

5 个答案:

答案 0 :(得分:3)

您是否考虑过JSR-223的好处?简而言之,这个规范allows Java developers很容易整合dynamic languages and their parsers。使用这样的解析器,您需要定义解析器转换为定义internal DSL的需要,这解析为创建一个好的API,并让您的用户选择他们更喜欢Javascript / Groovy / Scala / WTF语法他们发生更喜欢。

答案 1 :(得分:1)

尝试JEP

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

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

答案 2 :(得分:0)

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

  

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

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