@ledsun blog

無味の味は佳境に入らざればすなわち知れず

Syntax Tree

rubykaigi.org

Rubyのパーサーを書き直そうという野心的なプロジェクトを持っている人の発表です。 プロジェクトに対するモチベーションに関してはこちらのツイートのスレッドを見るのがよいと思います。

発表内容は

Ripperの構文木のイベントは190あります。 整理すると160になります。

みたいな、話とRuby構文木を操作する一般的な話をしていたような気がします。 よくわかりません。

そもそもRubyに限らずプログラムの構文木を操作するプログラムを書いた事がありません。 RubyでつくるRuby 読書感想文 - @ledsun blog で、本の手順に従って動かしてみたぐらいです。 「RubyでつくるRuby」では構文木をたどって順番に処理していきます。 任意の目的のために構文木の特定のノードを探して特定のルールに則って編集する、そしてまたプログラムにもどす。 いわゆるトランスパイラみたなプログラムを書いたことがありません。

こりゃなんか一発トランスパイラみたなプログラムを書いてみる必要があります。 そういえば、直近でC#のプログラムを特定のルールに従ってまとめて編集したい要求があります。 「複数クラスが一つのファイルに書かれている箇所を、クラス毎にファイルをわけたい」です。 ルールは簡単だし、ツール作ればスケールするし、めっちゃ最高じゃないですか。 と言うことでググってRoslynって、C#用のコンパイラプラットフォームを使えばよさそうと調べてました。

発表内容と全然関係ない?いや、構文木というテーマとしてはドンピシャのアイデアをもらいました。 今回のRubyKaigi 2022で一番の即物的な収穫です。

それで練習し始めたのが Roslynを使ってC#のクラス名を変更する - @ledsun blog です。

参考