思案

SkRegExpをいろいろいじってきました。

ただ、いろいろなことに手を出しすぎて、自分が何をやりたかったのかわからなくなりました。

ここで一度整理をしておきます。と言うわけで、今回の記事は極めて個人的なものです。

そもそも、SkRegExpに2年ぶりに更新したのは、再び正規表現というテーマが自分の興味の対象になったこと。

そういえばDelphi用のライブラリを作ったことを思い出した。

でも、Delphi 2009 のユニコード対応を意識して作ったのに放置したまま。

まずは、Unicode Delphiへの対応を最優先で行った。

と言っても、人様のアイデアをほぼそのまま採用しただけだが。

その過程でソースを見ながら思い出したことがある。

このライブラリを公開した理由はバグ報告が欲しかったから。

バグ報告をもらうにはそもそも動かないとダメ。

そこで、鬼車のテストプログラムを参考にしたものと、あちこちで拾ってきた正規表現のサンプルをぶち込んだテストプログラムを作り、それでエラーが出なかったので公開した。

ぶっちゃけ、公開した時の心境は「動かないものは改良できない」の精神だった。

再帰を導入しようとあれこれいじってわかったのだが、深い再帰を回避しようとしたことが仇となって、現状のマッチングエンジンでは再帰は不可能だとわかった。

改めてソースを見ると、やってることが極めてトリッキーで、自分でもどこでなにが行われているのかよくわからない。

そこでマッチングエンジンを改善しようとして「迷走」が始まった。

構文木をそのまま実行するアイデアは、パーサーを大幅に変えないとダメとわかり却下。

そこをいじるのは本末転倒のような気がしたので。

次に思いついてのが正規表現からバイトコードを作るアイデア。

NFAを直列型にすればバイトコードを生成するのはカンタンそうに思えたが、バイトコードを最適化するのが難しくて断念。

この3日ほどはコードには触らず、コンパイラや詳説正規表現を読んでどうしようか思案していました。

そして、今日決めました。

マッチングエンジンに Thompson NFA を実装してみようと決めました。

散々いじくったソースを破棄して0.9.3に戻ります。

コメントを残す

メールアドレスが公開されることはありません。