コンパクトな式計算ライブラリ「Exevalator(エグゼバレータ)」の最新版、Ver.2.2.2 をリリースしました。
今回は、そのアップデート内容をお知らせします!
まず、「そもそも Exevalator とは何なのか?」について短く触れておきましょう。
Exevalator は、アプリ開発などの場面でしばしばある、「文字列データとして与えられた計算式を計算し、値を求める」ためのライブラリです。
具体的には、以下のような文字列:
をアプリ側から受け取って、その計算結果として:
といった値を返してくれます。
要は、関数電卓みたいな事をやってくれるライブラリですね。 実際、先日リリースした関数電卓 RINPn のオンライン版でも、この Exevalator を計算処理に使っています。
RINEARN では、何種類かの言語処理系を開発していますが、その中で Exevalator は、「式の計算のみ」に焦点を絞る事で、実装規模をかなりコンパクトに抑えています。
具体的には、1つのファイルのみで処理が完結していて、それをアプリのソースコードフォルダに放り込むだけで使えます。いわゆる「シングルファイルのライブラリ」というやつですね。
さらに、コンパクトなので移植が容易で、現時点でも Java / Rust / C++ / C# / VB.NET / TypeScript の6言語に対応しています。近いうちに Python にも対応する予定です。
Exevalator の概要は、こんなところです。より詳しく知りたい方は、ぜひ下記公式サイトをご参照ください!
なお、Exevalator はオープンソースのライブラリで、リポジトリは GitHub にあります。GitHub 慣れしている方はそちらに飛ばれた方が、色々と手っ取り早いかもしれません:
さて、ここからは今回のアップデート内容です。
まず前提として、Exevalator を標準状態のまま導入して使うと、エラーメッセージは英語で表示されます。 例えば以下のような具合です:
これを、以下のような日本語にしたい場面もありますよね:
このように、エラーメッセージをカスタマイズしたい場合にどうすればいいかというと:
というのが基本となります。めっちゃ直球ですが、Exevalator はせっかくシングルファイルの小さなライブラリなので、下手に複雑な仕組みを仕込むよりも、上記のような方式の方がよさそうと判断しているためです。
ただ、エラーメッセージを「日本語化したい」といった場面は結構あるはずで、そのために「各ユーザーさん達が、毎回各自でエラーメッセージを和訳する」というのは、さすがに労力が無駄すぎる面もあります。
という事で、ソースコードのエラーメッセージ部を和訳したテキストファイル(ERROR_MESSAGE_JAPANESE.*) を、今回から同梱しました。
上記の内容をコピペして、Exevalatorのソースコード内のエラーメッセージ部を上書きすれば、それだけで日本語化できる、というわけです。
上記以外にも、今回は細かいバグ修正や調整が入っています。
まずはバグですが、TypeScript 実装版の Exevalator で、以下のように「単項マイナス演算子『-』が複数連続する場合」を正しく扱えていませんでした:
そもそも上記自体が、普通は登場しない形の式ですが(そのためテストケースから漏れていました)、それぞれ以下のように解釈されるべきです:
が、パーサの構文解析が間違って、5.6 などのおかしい値が返されていました(どの部分のどういう計算の値が返されるかは、式の形によって変わります)。それを、今回のバージョンにて修正しました。
このバグを引かれた方には、ご迷惑をおかけしてしまい申し訳ございません。
加えて、「式の中で、単一の値のみを含む括弧 ( ) がある場合」、例えば以下のような式:
がエラーになってしまうバグも修正しました。
こちらは TypeScript 版でのみ生じるバグで、他の言語版では無関係です。
最初のバグ修正での改変に付随して、パーサ(構文解析器)のアルゴリズムに微調整を加えたい点があったため、それも今回行っています。
具体的には、関数の引数区切りの「,」を、文法上の特別扱いだったものから、演算子の一種として扱うようにするための変更です。
この改変は、ライブラリのユーザー側からは何も変化はなく、普通は一切気にしなくても大丈夫なものです。 一方で、パーサ自体を拡張/改造して使われている方などには、一定の留意が必要なものです。
◇
今回のお知らせは以上です。
Exevalator についての情報は、今後もこのコーナーにて随時お知らせしていきます!