おもこん

おもこんは「思いつくままにコンピュターの話し」の省略形です

電卓プログラムにRaccとStrScanライブラリを使用

今回の電卓プログラムは、最近投稿した計算結果が分数になる電卓とは別のプログラムで、小数を用いる普通のタイプの電卓です。

電卓プログラムCalc

このプログラムCalcは以前GitHubに置いてあったものですが、最近アップデートしました。 このアップデートは大きなもので、ほとんど書き換えといって良いものです。 ポイントは、Rubyの標準添付ライブラリのRaccとStrScanを使ったことです。

Raccとは?

Raccは有名なコンパイラコンパイラYaccRubyバージョンで、Rubyに同梱されています。 コンパイラコンパイラは「コンパイラを作成するコンパイラ」という意味ですが、古い言葉です。 今ではパーサ・ジェネレータの方がよく使われます。 これは「構文解析プログラムを生成するプログラム」という意味です。

RubyのドキュメントにはRaccの項目がありますが、ほとんど何も書かれていません。 作者のウェブサイトにドキュメントがあるので、それが参考になります。

Raccについては、別にブログ記事を書きたいと思いますので、ここでは説明を略します。

StrScanとは?

StrScan(ライブラリ名は小文字)は文字列を高速にスキャンするライブラリです。 StringScannerクラスのインスタンスを作成するときに、対象となる文字列を引数に与えます。 そのインスタンスに対してscanメソッドを使い、スキャンします。 例がRubyのドキュメントにあるので、それをご覧になれば良くわかると思います。

これを使うと、字句解析プログラムを簡単に作ることができます。 もともとRubyには正規表現があるので、字句解析プログラムを作るのは簡単ですが、このクラスはそれを高速に行うことができます。 このライブラリについても後日別に記事を投稿しますので、詳しいことはそちらをご覧ください。

電卓プログラムについて、再び

電卓プログラムはCalcという名前で、GitHubに登録してあります。

Raccを使ったので驚くほど簡単に、短くなりました。 今まで構文解析Rubyで書いていたのに比べると、格段に楽です。 Raccのソースファイルはたったの84行です。

Raccをどのように使うかは、このレポジトリのraccフォルダの下にあるdoc.mdを見てください。

また、このアップデートからは、gemのスタイルを取るようにしました。 しかし、Rubygemsには登録していません。 すでに同名のgemが登録されているので、別名にしないと登録できないのです。 電卓プログラムはいろいろなものが既に普及しているので、Rubygemsに入れるまでもないということで登録を見送りました。

ただ、この電卓は三角関数などもサポートしているので、便利ではあります。 興味がでたら、ぜひ使ってみてください。