BODMAS任务

时间:2009-12-25 09:39:55

标签: java expression evaluation

我正在研究这样的问题 -

实现一个评估包含的表达式的函数 以下操作数:'(',')','+',' - ','*','/'。中的每个数字 表达式可能很大(与字符串表示一样大) 1000位数)。 '/'(即除法)操作数返回整数 商。

测试案例就像 -

(((10000000000000000000000001231234448563465435434723854278423 / 1111111111234623874627)* 2342384523 + 123124 - 34534534)*( 1231263123242346 + 223423234346 * 234236536))

甚至可能更长。

我不想使用像JEP之类的表达式评估器/解析器的外部库。

我正在思考BigInteger,然后才知道BigIntegers不会像Integers那样评估epressions。我也知道解析是一个选项,我必须模拟BODMAS行为。我想知道是否有任何其他方法可以解决这个问题,如果没有,想要一些关于如何实现这一点的指针

我不是在寻找一个现成的解决方案,只是寻找自己达成解决方案的方向。

2 个答案:

答案 0 :(得分:1)

您可以创建recursive descent parser来评估表达式,并使用StringTokenizer作为spimple词法分析线来分割线。您可以使用delim = "()/*-+"returnDelims = true。这将返回您的案例中的数字和分隔符,您需要评估的运算符和括号。

答案 1 :(得分:0)

您可以将其实现为finite state machine,然后使用state pattern实现它。遗憾的是我找不到任何BODMAS状态机的例子,但它们必须在某处。