今回の電卓プログラムは、最近投稿した計算結果が分数になる電卓とは別のプログラムで、小数を用いる普通のタイプの電卓です。
電卓プログラムCalc
このプログラムCalcは以前GitHubに置いてあったものですが、最近アップデートしました。 このアップデートは大きなもので、ほとんど書き換えといって良いものです。 ポイントは、Rubyの標準添付ライブラリのRaccとStrScanを使ったことです。
Raccとは?
Raccは有名なコンパイラ・コンパイラのYaccのRubyバージョンで、Rubyに同梱されています。 コンパイラ・コンパイラは「コンパイラを作成するコンパイラ」という意味ですが、古い言葉です。 今ではパーサ・ジェネレータの方がよく使われます。 これは「構文解析プログラムを生成するプログラム」という意味です。
RubyのドキュメントにはRaccの項目がありますが、ほとんど何も書かれていません。 作者のウェブサイトにドキュメントがあるので、それが参考になります。
Raccについては、別にブログ記事を書きたいと思いますので、ここでは説明を略します。
StrScanとは?
StrScan(ライブラリ名は小文字)は文字列を高速にスキャンするライブラリです。 StringScannerクラスのインスタンスを作成するときに、対象となる文字列を引数に与えます。 そのインスタンスに対してscanメソッドを使い、スキャンします。 例がRubyのドキュメントにあるので、それをご覧になれば良くわかると思います。
これを使うと、字句解析プログラムを簡単に作ることができます。 もともとRubyには正規表現があるので、字句解析プログラムを作るのは簡単ですが、このクラスはそれを高速に行うことができます。 このライブラリについても後日別に記事を投稿しますので、詳しいことはそちらをご覧ください。
電卓プログラムについて、再び
電卓プログラムはCalcという名前で、GitHubに登録してあります。
Raccを使ったので驚くほど簡単に、短くなりました。 今まで構文解析をRubyで書いていたのに比べると、格段に楽です。 Raccのソースファイルはたったの84行です。
Raccをどのように使うかは、このレポジトリのraccフォルダの下にあるdoc.mdを見てください。
また、このアップデートからは、gemのスタイルを取るようにしました。 しかし、Rubygemsには登録していません。 すでに同名のgemが登録されているので、別名にしないと登録できないのです。 電卓プログラムはいろいろなものが既に普及しているので、Rubygemsに入れるまでもないということで登録を見送りました。
ただ、この電卓は三角関数などもサポートしているので、便利ではあります。 興味がでたら、ぜひ使ってみてください。