hparserがforkされたー
昔、書いたはてな記法パーサが、id:secondlifeさんによってforkされました(g:subtech:id:secondlife:20080618)。ありがとうございます。
http://github.com/hotchpotch/hparser/tree/master
たしかこれを書いた動機は、当時のはてな記法にはなかったシンタックス・ハイライトをローカルのフィルタで実現するためだった気がする。
このころParsecにはまってて「yaccみたいなパーサ・ジェネレータは時代遅れだ。これからはパーサ・ライブラリの時代だぜい」みたいなことを考えていた。だから、lib/hparser/util/parser.rbはものすごくParsecに影響を受けている。
# blocksのうちのいずれかのあとに、Emptyくる。 # そして、上記のやつが1回以上繰り返す。 @blocks = Many1.new(Concat.new(Or.new(*blocks), Skip.new(Empty)))
あとは、「Haskellだとパーサ=関数だけど、Rubyだったらクラスだよなぁ」ということで各ノードとそれをパースするメソッドを、ひとつにしてクラスにしてる。ただ、そうしたことでパースの順番を制御しずらくなって、各クラスで<=>をオーバライドするという荒技にでてる。