Schemeのブロックコメントにマッチする正規表現

自信はない.

re = /(?<block>#\|(?:(?:[^#|]|#[^|]|\|[^#])++|\g<block>)*+\|#)/

str = <<EOS
(1)
(2) #| (3) |#
#| # (4) | |#
(5) #| (6) #| (7) |# (8) |# (9)
(10) #| # | #| #| (11) | # |# |# (12) #| (13) |# |#
(14)
EOS

puts str.scan(re)
#| (3) |#
#| # (4) | |#
#| (6) #| (7) |# (8) |#
#| # | #| #| (11) | # |# |# (12) #| (13) |# |#

恐ろしい.(これをparser generatorのユーザに書かせるのは)正気の沙汰じゃないな.開き括弧と閉じ括弧から自動生成されるべき.まぁ,普通に考えれば何でも正規表現でやってしまおうというのが間違いで,別の仕組みを用意すべきだよね.(空白と)コメントは既に特別扱いしてるんだから,ブロックコメント用の仕組みを特別に用意するのもいいでしょ.でも,他にそういうのが出てきたりしないかな.
一行目の正規表現の後でruby-modeのインデントがおかしい.


参考:
http://q.hatena.ne.jp/1208309804