Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
NFA を使用して否定正規表現を実装しようとしています。
ab a|bNFA はとのような正規表現を簡単に組み合わせることができることを知っています。a*
ab
a|b
a*
そしてその多様[ab]性はに変換することができますa|b
[ab]
[^ab]しかし、どうすればNFAフラグメントに変換できますか?
[^ab]
これは単なる文字クラスです。NFA の遷移は、1 文字またはラムダ (空の文字列) でラベル付けされます。文字クラスを実装するには、クラス内の各文字のトランジションを用意するだけです。否定されたクラスは、クラスにない文字ごとに 1 つのトランジションで実装されています。NFA は有限のアルファベットを持つ必要があるため、これはまったく問題ありません。A がアルファベットで [^ab] が必要な場合は、セット A - {a, b} 内の文字ごとに 1 つのトランジションが必要です。