Racc と Ruby1.9(.1)

最近ちょっと Racc を触っている。それで1.9.1対応ちょっと。

1.4.5 と RC1

ASR付属の Racc-1.4.5 はちょっと手を入れると RC1 で動いた(artonさんありがとう)。bin の raccコマンドファイルと site_ruby をコピーしてきて、コマンドファイル(Rubyファイルと .batファイル両方)の中の String#map してるところを String#lines.each に変更する(一箇所ずつ)。試したの「H」があったら「Hello world!」するだけの簡単な文法ファイル。

1.4.6 と RC2

と言う事で同じく artonさんのパッケージの RC2 を入れてみる。RC1 はアンインストールした。
Racc 昨年暮れに 1.9対応を謳った 1.4.6 が出ているのでそれを試す。

.tgz版をダウンロードして展開、libサブディレクトリの中味を丸ごと site_ruby にコピー(racc.rb は site_ruby直下)、binサブディレクトリの raccコマンドファイルも「C:\Program Files\Ruby-1.9.1\bin>」へコピー。setup.rb がどっちの Ruby (普通に ASR も使っている) でインストールしてくれるか自信が無かったので手でコピー。
特に .batファイルとか作らず直接 ruby コマンドで racc実行、一応「set PATH=」してコマンドプロンプトのパスをクリアしておいてから。irb で $: みても全部 1.9.1 系だからそれで動いてるんだと思う。
で、ちゃんと動いた。1.4.5 のときの String の挙動による修正とかしない。(というか raccコマンドの内容とかかなり変わってるっぽい)

関係ないけど、yyparse で使う yield の挙動(というか多値の扱い)が変わってるので、トークンの受け渡しは、

  yield [<記号>, <値>]

と書く事にしよう。

  yield <記号>, <値>

では良くない。丸括弧「()」使うときどう書くのが良いかは確認していない。