昨日の2つの課題について

昨日、SkRegExp version 1.5.0 公開の記事の中で2つやりたいことがあると書きました。

早速ですが結果です。

まずは「今後の予定は、大文字小文字を区別しない、全角半角を区別しない、ひらがなカタカナを区別しないを構文解析の段階で処理して、正規表現エンジンを軽くしたいと思っています」について。

取り敢えず暫定版を作ってみました。

その結果わかったこと。

これらを正規表現エンジン内で処理していることのプラスの方がはるかに多かったです。

と言う訳でこの計画は却下。

次に「いつの間にか単純な選択(|)の処理速度が PCRE の80%に落ちてしまっていました。コレを何とか改善したいですね」について。

コレはアルゴリズムではなく、もっとカンタンに解決できました。

やっとことは次の通り。

if (Ch >= 'a') and (Ch <= 'z') then

この種の条件文を次のように書き換えました。

if (Ch  'z') then

すると、PCRE と同じ速度になりました。

と言う訳でコレは解決です。

さすがにこれだけでバージョンアップは何なので、修正はしばらくお待ちを。

実は新たな問題を発見しました。

p{Hiragana} が PCRE と比べてものすごく遅いです。p{Lu} とかは速いのですが、どうも Unicode Script 系が軒並み遅いようです。

たぶんこれも条件文がらみの問題かと考えています。

Script の範囲は Unicode Category と比べると狭いので

if (Ch  'z') then

のようなのが効くと思うのです。

でも、今の UnicodeProp.pas の構造だとこの手は使えないんですよね。

以前のヤツに戻すか…トレードオフを検討したいと思います。

コメントを残す

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