2010-10-27 53 views
4

您好,我經常開發JTableModels,其中某些單元格必須包含應用某個簡單數學公式的結果。這個公式可得:Java 1.5:數學公式分析器

  • 符(+, - ,*,/)
  • 一些常量
  • 其他單元格引用(其中包含數字)
  • 參數(如「INTEREST_RATE參考名稱號碼「)

我經常解決它使一個小計算器類解析公式,我定義的語法。計算器類爲calc計算使用堆棧,而語法總是使用波蘭語表示法。

但是波蘭語言符號對我和我的用戶來說是不自然的。所以我的問題是...

是否有一個lib運行在1.5 jvm的,可以處理我的requeriments和使用正常表示法(括號,我不知道這種表示法的名稱)的公式?

Pd積它假定公式語法永諾正確的,我可以預處理不屬於常量提供他們的價值觀

回答

3

你有沒有想過的JSR-223好處的數字?用幾句話說,這個規格allows Java developers很容易集成dynamic languages and their parsers。使用這樣的解析器,您需要定義一個解析器轉換爲定義一個internal DSL的需求,它可以解析爲創建一個簡單的API,並讓用戶選擇他們更喜歡的Javascript/Groovy/Scala/WTF語法。

+0

這似乎是一個很好的方法,我會調查它,但可悲的是我需要它運行在jvm 1.5。我會更新我的問題 – Telcontar 2010-10-27 10:08:52

+0

這真的有效,但我不能使用它,因爲1.5限制。如果沒有人爲java 1.5提供更好的答案,我會將問題更改爲原始答案接受您的答案 – Telcontar 2010-10-27 10:48:28

+0

最後,當我在您提供的第二個鏈接中閱讀時,如果您從http: //jcp.org/aboutJava/communityprocess/final/jsr223/index.html – Telcontar 2010-10-27 11:03:28

1

嘗試JEP

您可以爲解析器定義新變量,因此它可以包含引用名稱,如「INTEREST_RATE」。但是您必須事先定義它。

至於單元格引用,你將不得不提取數字並相應地編輯表達式,或者可能有一些我還沒有意識到的選項。

0

如果您不能使用Java 6及其腳本支持,請查看Apache Bean Scripting Framework(BSF)。從該頁開始:

... BSF 3.x將運行在Java 1.4+上,允許訪問Java 1.4和Java 1.5的JSR-223腳本。

+0

我可以使用參考實現JSR-223從1.5使用int,但謝謝你的答案 – Telcontar 2010-10-28 09:07:18

0

有一個稱爲formula4j一個商業工具,這可能是一些有用的。

對於單元格引用沒有直接的幫助。您必須自己處理這些內容,並將單元格引用轉換爲值。