5

数式(文字列)を評価して答えを返すことができるJava Embedding Plugin (JEP)のようなものを見つけようとしています。

ただし、変数も計算する必要があります。たとえば、(25 + 36 + x)* 2 = 25は次のようになります:x = -11

http://www.wolframalpha.com/に少し似ていますが、それほど用途が広いわけではなく、オフラインで動作するはずです。

オープンソースが推奨されます。

私の小さな計算機プロジェクト、http://sourceforge.net/projects/calex/に必要です。

4

2 に答える 2

3

これは と呼ばれArithmetic evaluationます。これを実装する最も簡単な方法の 1 つは、 Edsger Dijkstra Shunting-yard_algorithmを使用することです。

分流場アルゴリズムは、中置表記法で指定された数式を解析するための方法です。逆ポーランド記法 (RPN) または抽象構文木 (AST) として出力を生成するために使用できます。このアルゴリズムは Edsger Dijkstra によって発明され、その操作が鉄道の操車場の操作に似ていることから、「操車場」アルゴリズムと名付けられました。RPN の評価と同様に、操車場アルゴリズムはスタックベースです。中置式は、3+4 や 3+4*(2−1) など、ほとんどの人が慣れている数学表記の形式です。変換には、入力と出力の 2 つのテキスト変数 (文字列) があります。出力キューにまだ追加されていないオペレーターを保持するスタックもあります。変換するために、プログラムは各シンボルを順番に読み取り、そのシンボルに基づいて何かを実行します。

しかし、スタックオーバーフローのユーザーブログであなたが探している正確な解決策を見たことがありますが、アドレスを思い出せません (「コードモンキー主義」のようでした)。アプレットで使用できる軽量クラスでした (定数を定義して値をリセットすることもできます)。

編集:見つけた: http://tech.dolhub.com/Code/MathEval

線形再帰数学評価器

この数式エバリュエーターは、プリコンパイルを必要とせずに任意の式を合理的に効率的に評価できる、フットプリントが小さく効率的なソリューションが必要であるというニーズから生まれました。「Top + 2」、「Bottom-2」、「(Right + 1-Left)/2」などの変数で基本的な計算を行うものが必要でした。

インターネットでの調査により、多くのかなり優れたソリューションが見つかりました。それらはすべて、解析ツリーの作成を中心に展開されました (これは理にかなっています)。問題は、それらがどれもかさばり、計算のためにアプレットのサイズに 100K を追加する余裕がなかったことです。そこで、この問題に対する線形再帰的な解決策について疑問に思い始めました。最終結果は、外部依存関係のない許容可能なパフォーマンスの単一クラスであり、重量は 10 KiB 未満です。

于 2010-11-13T17:44:57.443 に答える
0

Apache License 2.0の条件の下で、 Dijkstra の Shunting Yardアルゴリズムに基づく式評価器をリリースしました。

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

于 2011-07-23T17:38:29.490 に答える