Дано регулярное выражение R, описывающее обычный язык (без причудливых обратных ссылок). Существует ли алгоритмический способ создания регулярного выражения R*, описывающего язык всех слов, кроме тех, которые описываются R? Это должно быть возможно, как говорит Википедия:
Регулярные языки замкнуты относительно различных операций, то есть, если языки K и L регулярны, то и результат следующих операций: […] дополнение ¬L
Например, для заданного алфавита {a,b,c} обратным языком (abc*)+ является (a|(ac|b| в).*)?
Как уже указывал в комментариях DPenner, инверсия регулярного выражения может быть экспоненциально больше, чем исходное выражение. Это делает инвертирование регулярных выражений непригодным для реализации синтаксиса отрицательного частичного выражения для целей поиска. Существует ли алгоритм, который сохраняет характеристику времени выполнения O(n*m) (где n — размер регулярного выражения, а m — длина ввода) сопоставления регулярных выражений и допускает отрицательные подвыражения?
checking whether there is a match, then logically negate the result
(соответствует --› ложь, нет совпадений --› истина). - person nhahtdh   schedule 12.03.2013(1)
Дополнение обычного языка (RE) является обычным(2)
для поиска RE дополнительного языка. делай какRE-->NFA-->DFA-->minimized DFA --> COMPLEMENT DFA --> RE
. (a)RE-->NFA
является алгоритмическим синтаксическим анализатором LEX (b)NFA --> DFA
является алгоритмическим (c)DFA --> MINIMIZED DFA
снова алгоритмическим (какb
, так иc
школьные задания) (d)DFA --> COMPLEMENT DFA
является алгоритмическим (прочитав мой ответ Я понял, что вы можете реализовать) (e) дополнениеDFA-->RE
- это алгоритм, использующий ТЕОРЕМУ АРДЕНА. Итак, что я хочу сказать, для данного RE вы можете найти RE для дополнения. - person Grijesh Chauhan   schedule 17.03.2013