2013-03-10 79 views
2

我一直在尋找谷歌一段時間,但無法找到我需要的東西。 我需要一個開源的數學表達式解析器&評估器 - 其中有無數 - 但鏈接到一個體面的數學庫,如Apache Commons Math。我需要複雜的算術,諸如罪的基本功能,在複雜平面上工作的日誌,以及諸如伽瑪,erf等函數。小型Java開源數學表達式評估器,與Apache公用數學計算結合

最接近的答案,我發現是Built-in method for evaluating math expressions in Java - 但我不能看到,除了創作了無數的輔助功能,綁定

  • jexpr
  • JRuby的
  • jeval
  • 的javax.script

與下議院數學。此外,修改我自己的現有(實值)表達式解析器以綁定所有函數將需要很多工作。

另外,在我的應用程序中包括一個像python/ruby​​這樣的整個腳本編程語言似乎有點矯枉過正,我想要做的僅僅是一個老式的袖珍計算器。

還沒有人做過這樣的事情已經? 謝謝!

+0

只是爲了總結,我想是一個解析器的數學庫,**結合不用額外的努力**。 – 2013-03-10 08:32:57

回答

0

我們使用的ScriptEngine的JavaScript來做到這一點 - 不知道這是足以滿足你的要求......這裏是SA的引用:

Is there an eval() function in Java?

+0

感謝您的快速回答。但我不確定這是否適合我的目的 - 除非我錯過了一些東西。我編寫了自己的解析器,它們可以完成我所需要的大部分工作,但工作是與好的數學庫和複雜的算術運算符鏈接,並與標準函數庫鏈接。這個想法是,用戶將能夠編寫'gamma(1.8)',並且知道將函數引導到數學庫。 – 2013-03-10 08:30:25

1

你可能想看看一個實現我創建的:

https://github.com/uklimaschewski/EvalEx

它基於java.math.BigDecimal並支持基本的matehmatical和布爾操作。 這是一個非常緊湊的實現:只有一個類文件沒有任何依賴於其他庫。另外,它可以通過自定義功能和操作員輕鬆擴展。

gamma(1.8)例如可以以這種方式加入:

Expression e = new Expression("gamma(1.8)"); 

e.addFunction(e.new Function("gamma", 1) { 
    @Override 
    public BigDecimal eval(List<BigDecimal> parameters) { 
     BigDecimal gamma = MyMathLibraryGammaCalculation(parameters.get(0)); 
     return gamma; 
    } 
}); 

e.eval(); // returns gamma(1.8)