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だったらクラスだよなぁ」ということで各ノードとそれをパースするメソッドを、ひとつにしてクラスにしてる。ただ、そうしたことでパースの順番を制御しずらくなって、各クラスで<=>をオーバライドするという荒技にでてる。