将数学公式转换为Java BigDecimal行

将数学公式转换为Java BigDecimal行,java,Java,我正在尝试制作一个小工具,将一个数学公式转换成Java的BigDecimal行 例如: A + B * C => A.add(B.multiply(C)) A / B + C => A.divide(B).add(C) 事情变得越来越糟 A - (B + C) / D => A.substract(B.add(C).divide(D)) A - (B * (C + D)) => A.substract(B.multiply(C.add(D))) 我的方法是递归地进行。

我正在尝试制作一个小工具,将一个数学公式转换成Java的BigDecimal行

例如:

A + B * C => A.add(B.multiply(C))
A / B + C => A.divide(B).add(C)
事情变得越来越糟

A - (B + C) / D => A.substract(B.add(C).divide(D))
A - (B * (C + D)) => A.substract(B.multiply(C.add(D)))
我的方法是递归地进行。 例如:A+B*C

1. convert( A + B * C ) 
2. A.add( convert (B * C) )
3. A.add(B.multiply(C))
支持的数学符号:
+-*/%()

我想知道是否有更好的方法来处理这个问题

这类问题有名字吗?编译程序?(如果不是,很抱歉,我从未使用编译器做过任何工作。)
提前感谢。

您可能需要查看一个,图示为双值。对
BigDecimal
的更改很简单,但是您可能需要缩减命名函数的规模。

为什么不使用Groovy?它直接支持更好的大十进制算法语法

BigDecimal a = ...;
BigDecimal b = ...;
BigDecimal c = ...;
Binding binding = new Binding();
binding.setVariable("A", a);
binding.setVariable("B", b);
binding.setVariable("C", c);
GroovyShell shell = new GroovyShell(binding);

BigDecimal value = (BigDecimal) shell.evaluate("a+b*c");
如果需要,Groovy还有一个直接的文本语法来表示大小数

A = 2G
B = 4G
C = 8G

如果您的主要目标只是输入表达式并对其求值,那么这是一种非常简单的方法。如果您试图生成代码,那就不同了。

您正在编写一个非常基本的编译器或解释器。你可以用谷歌搜索这两个词来找到一些有用的信息。也可以查找语法分析器。你要做的就是做一个解析树,然后用深度优先搜索遍历树。最低的节点将具有最高的优先级。正如其他人所说,这与(编译器设计的某些步骤)非常相似。如果您的主要目标是计算表达式,请查看:感谢您的回复。:)我想我还需要深入研究一下。ps:你也可以使用power操作符,如果需要的话可以输入强制。仔细看,我认为你可以添加
%
作为另一个
mulop
,并使用
余数()
实现它。这正是我需要的。非常感谢。