Jak zaimplementować wyrażenie regularne NFA z zakresami znaków?

Kiedy czytasz takie posty jakRegex: NFA i algorytm Thompsona wszystko wygląda dość prosto, dopóki nie uświadomisz sobie w życiu, że potrzebujesz nie tylko bezpośrednich znaków, takich jak „7” czy „b”, ale także:

[A-Z]
[^_]
.

mianowicie klasy postaci (lub zakresy). A zatem moje pytanie - jak zbudować NFA przy użyciu zakresów znaków? Używając meta-znaków takich jak „nie A”, „cokolwiek innego”, a następnie obliczając nakładające się zakresy? Doprowadziłoby to do użycia struktury podobnej do drzewa podczas używania automatu końcowego, a nie tylko tabeli.

Aktualizacja: proszę założyć nietrywialny alfabet wielkości (>> 256).

Pytam o NFA, ale później chciałbym również przekonwertować NFA na DFA.

questionAnswers(1)

yourAnswerToTheQuestion