0

現在、この投稿で説明されているように、正規表現を使用してレクサーを作成しています: C# の貧乏人の「レクサー」

以前よりもはるかに高速でしたが、ファイルごとに約 500 ミリ秒かかるのが気に入らなかっただけです (ストップウォッチを使用した 100x36k トークンのループで計測)。

トークンの優先順位を変更した後、500 ミリ秒をすでに半分に削減し、ほとんどのトークンに「シンプル マッチ」ブール値を追加することで (大まかに) 追加の 50 ミリ秒を獲得しました (これは、基本的にはstring.Contains(Ordinal)ではなく単純なものを使用する必要があることを意味しますRegex.Match) 。 .

Regex.Match最高のパフォーマンスを得るために、すべてではないにしても、ほとんどの呼び出しを取り除きたいのは明らかです。それを可能にするには、正規表現の\bタグをシミュレートするもの、つまり単語境界とも呼ばれるものが必要です (つまり、単語全体にのみ一致する必要があります)。

「単純一致」の前後の文字が単語以外の文字であるかどうかをチェックする単純なメソッドを作成することはできますが、.NET にこのビルトイン用の何かがあるかどうか疑問に思っていました。

独自のメソッドを作成する必要がある場合、最善のアプローチは何でしょうか? 私の単語の後の文字のインデックスを選択し、それがバイト値よりも小さいかどうかを確認しますか? これに関するヒントも大歓迎です!

4

1 に答える 1