Exevalator をアップデート、エラーメッセージの日本語化が手軽に

コンパクトな式計算ライブラリ「Exevalator(エグゼバレータ)」の最新版、Ver.2.2.2 をリリースしました。

今回は、そのアップデート内容をお知らせします!

- 目次 -

Exevalator とは?

まず、「そもそも Exevalator とは何なのか?」について短く触れておきましょう。

計算式の文字列から、計算結果の値を求めるライブラリ

Exevalator は、アプリ開発などの場面でしばしばある、「文字列データとして与えられた計算式を計算し、値を求める」ためのライブラリです。

具体的には、以下のような文字列:

"1.2 + 3.4 * 5.6"
"(sin(1.2) + cos(3.4)) / sqrt(5.6)"

をアプリ側から受け取って、その計算結果として:

20.24
-0.01468840...

といった値を返してくれます。

要は、関数電卓みたいな事をやってくれるライブラリですね。 実際、先日リリースした関数電卓 RINPn のオンライン版でも、この Exevalator を計算処理に使っています

RINPnオンライン版の画面

コンパクトな実装で、多くの言語に対応

RINEARN では、何種類かの言語処理系を開発していますが、その中で Exevalator は、「式の計算のみ」に焦点を絞る事で、実装規模をかなりコンパクトに抑えています。

具体的には、1つのファイルのみで処理が完結していて、それをアプリのソースコードフォルダに放り込むだけで使えます。いわゆる「シングルファイルのライブラリ」というやつですね。

さらに、コンパクトなので移植が容易で、現時点でも Java / Rust / C++ / C# / VB.NET / TypeScript の6言語に対応しています。近いうちに Python にも対応する予定です。

詳しくは公式サイトで!

Exevalator の概要は、こんなところです。より詳しく知りたい方は、ぜひ下記公式サイトをご参照ください!

なお、Exevalator はオープンソースのライブラリで、リポジトリは GitHub にあります。GitHub 慣れしている方はそちらに飛ばれた方が、色々と手っ取り早いかもしれません:

今回から、エラーメッセージの日本語化が手軽に

さて、ここからは今回のアップデート内容です。

まず前提として、Exevalator を標準状態のまま導入して使うと、エラーメッセージは英語で表示されます。 例えば以下のような具合です:

The number of open parentheses '(' is deficient.

これを、以下のような日本語にしたい場面もありますよね:

開き括弧 '(' の数が足りません。

このように、エラーメッセージをカスタマイズしたい場合にどうすればいいかというと:

というのが基本となります。めっちゃ直球ですが、Exevalator はせっかくシングルファイルの小さなライブラリなので、下手に複雑な仕組みを仕込むよりも、上記のような方式の方がよさそうと判断しているためです。

ただ、エラーメッセージを「日本語化したい」といった場面は結構あるはずで、そのために「各ユーザーさん達が、毎回各自でエラーメッセージを和訳する」というのは、さすがに労力が無駄すぎる面もあります。

という事で、ソースコードのエラーメッセージ部を和訳したテキストファイル(ERROR_MESSAGE_JAPANESE.*) を、今回から同梱しました。

上記の内容をコピペして、Exevalatorのソースコード内のエラーメッセージ部を上書きすれば、それだけで日本語化できる、というわけです。

バグ修正や細かい調整

上記以外にも、今回は細かいバグ修正や調整が入っています。

複数連続する単項マイナス演算子を正しく扱えないバグの修正

まずはバグですが、TypeScript 実装版の Exevalator で、以下のように「単項マイナス演算子『-』が複数連続する場合」を正しく扱えていませんでした:

1.2*--5.6
1.2*---5.6
1.2*----5.6

そもそも上記自体が、普通は登場しない形の式ですが(そのためテストケースから漏れていました)、それぞれ以下のように解釈されるべきです:

1.2*(-(-5.6))
1.2*(-(-(-5.6)))
1.2*(-(-(-(-5.6))))

が、パーサの構文解析が間違って、5.6 などのおかしい値が返されていました(どの部分のどういう計算の値が返されるかは、式の形によって変わります)。それを、今回のバージョンにて修正しました。

» コミット内容はこちら

このバグを引かれた方には、ご迷惑をおかけしてしまい申し訳ございません。

単一の値のみを含む括弧 ( ) がエラーになるバグの修正

加えて、「式の中で、単一の値のみを含む括弧 ( ) がある場合」、例えば以下のような式:

1.2 + 3.4 + (5.6)

がエラーになってしまうバグも修正しました。

» コミット内容はこちら

こちらは TypeScript 版でのみ生じるバグで、他の言語版では無関係です。

パーサの細かい調整

最初のバグ修正での改変に付随して、パーサ(構文解析器)のアルゴリズムに微調整を加えたい点があったため、それも今回行っています。

» コミット内容はこちら

具体的には、関数の引数区切りの「,」を、文法上の特別扱いだったものから、演算子の一種として扱うようにするための変更です。

この改変は、ライブラリのユーザー側からは何も変化はなく、普通は一切気にしなくても大丈夫なものです。 一方で、パーサ自体を拡張/改造して使われている方などには、一定の留意が必要なものです。

今回のお知らせは以上です。

Exevalator についての情報は、今後もこのコーナーにて随時お知らせしていきます!