はじめに
yui-knk/lr-parser-101 というRaccを使って電卓を実装しつつ、パーサージェネレーターを利用したパーサーの作り方を学ぶチュートリアルを完走した時の覚書です。
僕個人のパーサー周りの経験としては
- 拡張BNF記法がちょっと読み書きできる
- 元々parse.yに興味があり、たまにリファクタリングのパッチを投げている
- Rubyソースコード完全解説 や Rubyのしくみ などを読んでRubyのパーサー周りのある程度の知識はある
という感じです。
なので、どちらかというと全くの初心者という感じでもないところからの覚書になります。
LR parser 101とは?
Bison Killerこと yui-knk さんが書かれた電卓を実装するチュートリアルです。
Raccというパーサージェネレーターを使いつつ、パーサーの作り方を学ぶファーストステップとして非常に良いチュートリアルです。
やってみて
基本的にリポジトリをCloneしてきて、各チャプターの内容をこなしていく感じでしたー。 チャプターのボリューム的にもちょうどよい感じで、ハンズオン的な感じで2時間くらいの枠でやってみると意外といいかもと思いましたねー。
それと個人的にいいなぁと思ったのはRubyっぽいコードからパーサーの作り方を学べる感じな点ですねー。 Rubyに慣れている人であれば、拡張BNF記法周りのドキュメントなどを参照しながら進めると捗るかなと思いました。
あと各チャプターにsample.y
というサンプルがあり、それを元にパーサーを作っていくので進めやすいのも非常に良かったです。
再帰的な文法ルールの定義とか掛け算や割り算の優先順位などもわかりやすく書かれているので非常に良いチュートリアルになってます。
今後
Hamada.rbでRuby Hacking Challenge in Hamada.rbというRuby内部のソースコードを読んだりハックしたりする会をやっているので、そこでハンズオン的な感じでこのチュートリアルやってみてもいいかなと思いましたー。 で、チュートリアルをやりつつ実際のparse.yのコードと見比べてみるとかも面白そうかなと思ってますねー。