Higher-Order Lua [1] のサイトを作る上で一部に Text::Hatena [2] を使用しているのだけど Text::Hatena はドキュメント上はルールの拡張や改変をサポートしていなくて細かいことをやろうとしたら HTML 直打ちをしないといけないところが都合が悪い。 Text::Hatena は内部的には Parse::RecDescent [3] を使っているのだが、このパーサには Extend メソッドと Replace メソッドが定義されていて、既に作られているルールを後から変更することが可能である。 たとえば最初に次のような文法があったとする。 use Parse::RecDescent; $grammar = q( expression : atom "+" expression { $return = $item[1] + $item[3]; } ex