Когда вы читаете такие посты, как Regex: NFA and Thompson's algorithm все выглядит довольно просто, пока вы не поймете, в реальной жизни вам не только прямые символы, такие как «7» или «B», но также:Как реализовать регулярное выражение NFA с диапазонами символов?
[A-Z]
[^_]
.
а именно классы символов (или диапазоны). И, таким образом, мой вопрос - как построить NFA с использованием диапазонов символов? Использование метасимволов типа «не А», «что-нибудь еще», а затем вычисление перекрывающихся диапазонов? Это приведет к использованию древовидной структуры при использовании финального автомата вместо таблицы.
Обновление:, пожалуйста, предположите нетривиальный размер (>> 256) алфавита.
Я спрашиваю о NFA, но позже я хотел бы конвертировать NFA в DFA.
Вы бы уточнили свое значение «построить NFA с использованием диапазонов символов» – revo
@revo, пометить край «», используя эту метку, если ввод «j», но нет, если вход «z». Это не так сложно, но с несколькими перекрывающимися такими метками ('', 'h',' <,> ') может вызвать беспорядок. И я не поклонник изобретать колесо, поэтому я спрашиваю. – greenoldman
Это все, как вы представляете края.Для 8-битного набора символов рассмотрим растровое изображение из 256 бит. Если бит * n * установлен, то, например, код символа * n * находится в разрешенном наборе. – tripleee