Schemeの数値リテラルにマッチする正規表現(6)

部分式呼び出しを使って短くしてみた.一度treeを作ってから再帰的に正規表現を構成する戦略.
naiveな実装で1124bytes,頑張って探索して11141110bytes.名前付きグループがあると括弧の意味が変わる問題がなければ909bytes(Gオプションが使えれば910bytes.現状テストできないけど).ただのgroupingが伸びるから1kくらいかも.


(24:50)部分式呼び出ししないのに名前が付いてる所が4ヶ所あったので,それを縮めて1082bytes.

/((((#(?<r>b)(?<_h>(#(?<e>[ei]))?))|(\g<_h>#(?<r>b)))(((?<_0>[+-]?(?<_1>(([01]+#
*)|((?<a>[01]+#*)(?<t>\/)(?<b>[01]+#*))))))|((?<a>\g<_0>)(?<t>@)(?<b>\g<_0>))|((
?<a>\g<_0>)(?<s>[+-])(?<b>\g<_1>)?(?<t>i))|((?<s>[+-])(?<b>\g<_1>)?(?<t>i))))|((
(#(?<r>o)\g<_h>)|(\g<_h>#(?<r>o)))(((?<_3>[+-]?(?<_4>(([0-7]+#*)|((?<a>[0-7]+#*)
(?<t>\/)(?<b>[0-7]+#*))))))|((?<a>\g<_3>)(?<t>@)(?<b>\g<_3>))|((?<a>\g<_3>)(?<s>
[+-])(?<b>\g<_4>)?(?<t>i))|((?<s>[+-])(?<b>\g<_4>)?(?<t>i))))|((((#(?<r>d))?\g<_
h>)|(\g<_h>(#(?<r>d))?))(((?<n>[+-]?(?<_7>(([0-9]+#*)|(((?<a>[0-9]+#*)(?<t>\/)(?
<b>[0-9]+#*)))|(?<f>(((?<_a>[0-9]+#*(?<_i>([esfdl](?<p>[+-]?[0-9]+))?)))|((?<_b>
\.[0-9]+#*\g<_i>))|((?<_c>[0-9]+\.[0-9]*#*\g<_i>))|((?<_d>[0-9]+#+\.#*\g<_i>))))
))))|((?<a>\g<n>)(?<t>@)(?<b>\g<n>))|((?<a>\g<n>)(?<s>[+-])(?<b>\g<_7>)?(?<t>i))
|((?<s>[+-])(?<b>\g<_7>)?(?<t>i))))|(((#(?<r>x)\g<_h>)|(\g<_h>#(?<r>x)))(((?<_e>
[+-]?(?<_f>((\h+#*)|((?<a>\h+#*)(?<t>\/)(?<b>\h+#*))))))|((?<a>\g<_e>)(?<t>@)(?<
b>\g<_e>))|((?<a>\g<_e>)(?<s>[+-])(?<b>\g<_f>)?(?<t>i))|((?<s>[+-])(?<b>\g<_f>)?
(?<t>i)))))(?<_g>(?=[\t-\r "();\[\]{-}]|\z))/i