数式の解析、計算を行う機能を提供します。

機能

以下の機能を実装します(する予定です)。

機能 内容
数式の解析、計算 通常の数式に対して、演算子順位文法による解析、抽象構文木の構築、命令列への変換(逆ポーランド記法への変換)、計算、を行います。このライブラリの基本的な機能です。
変数 数式中で変数を使用することが出来ます。(0.0.1では実実装)
関数呼び出し あらかじめ定義した関数を数式中で呼び出すことが出来ます。(0.0.1では未実装)

簡単な使い方

RpnComputerクラスは、文字列を直接計算することが出来ます。

String exp = "1 + 2";
RpnComputer comp = new RpnComputer();
double value = comp.computer(exp);
    

詳細な使い方

数式の解析、計算は、以下の段階を経て行われます。

  1. RpnParserクラスによる構文解析。
  2. RpnCompilerクラスによる意味解析(命令列への変換)。
  3. RpnComputerクラスによる命令列の実行(計算)。

RpnParserクラスは、文字列を数式として解析し、抽象構文木を構築します。 以下のように使用します。

String exp = "1 + 2";
RpnParser parser = new RpnParser();
RpnNode node = parser.parse(exp);
    

得られたRpnNodeインスタンスが、抽象構文木の最上位ノードです。

RpnCompilerクラスは、RpnParserクラスによって構築された抽象構文木を解析し、命令列へ変換します。 以下のように使用します。

RpnCompiler compiler = new RpnCompiler();
RpnCommandList cl = compiler.compile(node);
    

得られたRpnCommandListインスタンスが、命令列を表します。

RpnComputerクラスは、RpnParserクラスによって変換された命令列を実行し、計算結果を返します。 以下のように使用します。

RpnComputer comp = new RpnComputer();
double value = comp.computer(cl);
    

こうして、計算結果を取得することが出来ます。

サポートする演算子

以下の演算子をサポートします(する予定です)。
演算子 内容
+, -, *, /, % 加算、減算、乗算、除算、剰余算演算子。(剰余演算子だけ0.0.1では未実装)
<, >, <=, >=, ==, != 比較演算子。左辺をa、右辺をbとしたとき、aがbより大きい場合は1、aがbより小さい場合は-1、aとbが等しい場合は0を返します。(0.0.1では未実装)
++, -- 前置、後置インクリメント、デクリメント。(0.0.1では未実装)
&, |, ^ 論理積、論理和、排他的論理和。
<<, >>, >>> シフト演算子。
=, +=, -=, *=, /=, %=, <<=, >>=, >>>=, &=, |=, ^= 代入式。左辺が変数である必要があります。(0.0.1では未実装)
?: 条件演算子。"a ? b : c"という式がある場合、aが真(0以外である場合はbを、aが偽(0)である場合はcを返します。(0.0.1では未実装)

プロジェクト サイト

Maven2で管理していますが、siteプラグインの不具合により文字化けしていてまともに読めないので、サイトは作成していません。