Rubyをいじってみた in セプキャン2011
セプキャンに関わったすべての方へ、ありがとうございました。そしてお疲れ様でした。
僕はRubyの文法ハックという個人課題テーマのもと、二重のforループを1文にまとめる記法を付け加えました。
わかりやすくコードで示す
簡単に、for x in 1..3 do for y in 2..4 do #...(中略)... end end
という2重ループをよく作ると思いますが、これを
for2 x in 1..3 with y in 2..4 do #...(中略)... end
という形で書けるというものです。
どういう成果か?
上の二つの構文は、構文解析の結果が同じになるようにしています。つまり、構文木を生成するときに2重のforループとして生成しています。そうなるようなパーサを悩みながらカリカリ書いたわけですよ。
yaccは初歩的な部分しか分かっていなかったので、Rubyの1万行もあるparse.yは読むだけでとても骨が折れました。
コードはgithubに置いておきました。コミットログを見たら苦悩の日々が伺えるでしょう。
https://github.com/nikuuchi/oreore_ruby
多分make時にgperfが必要となります。また、発表時にビルドしたものから改善し、Ripperクラスに対するエラーは出なくなりました。
ツッコミどころに対する言い訳
作っている途中や発表後にツッコミを入れられたFAQ的なものです。Rubyistってforよりeach使うことが多いよね
はい、僕もRubyでforループほとんど使いません。とはいえeach使うならブロックつきメソッドをRubyで書いたら簡単に出来ますよね。文法ハックがテーマなので、そこは多めに見てあげてください。
for2とか、forに出来なかったの?
自分の知識不足で、セプキャン時間内に既存のforと衝突しないyaccの書き方ができませんでした。今後の課題です。
withって何?分かりづらい。
他に良い英単語が思いつきませんでした。また、最初はカンマでやりたかったのですが、条件式が柔軟に式を取れるようになっているので、","だとメソッドの引数と間違われるというパーサエラーにぶつかりました。誰か英語力をください。