![]() |
|
![]() ![]() ![]() |
|
rudvil |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 20.11.2009 Где: Latvia/Riga Репутация: нет Всего: 3 |
Как в регулярных выражениях выглядит NFA для оператора "^"?
С операторами: "|" ![]() "?" ![]() "*" ![]() "+" ![]() все просто и понятно, а вот как быть с оператором "^"? В гугле пусто, т.к. корректно сформулировать вопрос так и не удалось(NFA operator ^, NFA operator not, NFA ^)??? Это сообщение отредактировал(а) rudvil - 25.7.2010, 15:05 --------------------
xor |
|||
|
||||
Pavia |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 6.12.2008 Репутация: 11 Всего: 12 |
В таблице состояний отрицательное и положительное меняется местами. А никак, тут для упрощение отрицательные состояния не показаны. И вообще оператор ^ обычно применяется только в "[]" скобках. |
|||
|
||||
rudvil |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 20.11.2009 Где: Latvia/Riga Репутация: нет Всего: 3 |
первый раз слышу, пошел гуглить... все равно, спасибо. --------------------
xor |
|||
|
||||
Pavia |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 6.12.2008 Репутация: 11 Всего: 12 |
||||
|
||||
neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Вот так думаю все станет понятно:
a(∑\{b}) Когда ∑ обозначает весь алфавит: ∑={a..z}U{0..9}U{@#$%^&*...} Добавлено через 4 минуты и 56 секунд Это лишено всякого смысла, ибо если а, то уж точно не б. Видимо имеется в виду: а, а потом все кроме б. Именно для этого случая я написал пояснение. -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
esperanto |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 194 Регистрация: 31.5.2003 Репутация: 2 Всего: 4 |
Правильный ответ:
1) Имея НФА, строишь ДФА ему эквивалентный 2) Имея ДФА строишь его отрицание, посредством инверсии конечных состояний. 3) Полученный ДФА он же и НФА и есть нот от исходного автомата --------------------
B.Sc ->M.Sc.->Microsoft SDE-> (Ph.D. student + Intel SDE + psyсhology B.A) - > Skype SDET |
|||
|
||||
neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
esperanto, А побыстрее никак?
-------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
rudvil |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 20.11.2009 Где: Latvia/Riga Репутация: нет Всего: 3 |
Чтобы упростить я остановился на решении как тут http://www.codeproject.com/KB/recipes/re_e...ion_parser.aspx
т.е. если попали на dummy то дальше идти не будем. --------------------
xor |
|||
|
||||
esperanto |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 194 Регистрация: 31.5.2003 Репутация: 2 Всего: 4 |
На курсе, вычислений учили именно так делать. Я не видел других решений в учебниких никогда. --------------------
B.Sc ->M.Sc.->Microsoft SDE-> (Ph.D. student + Intel SDE + psyсhology B.A) - > Skype SDET |
|||
|
||||
neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
rudvil, Да, но если мне нужно построить не отрицание одного символа, а отрицание целого регулярного выражения, то такой фокус не пройдет.
Добавлено через 54 секунды Кстати, за ссылку спасибо. Интересно было почитать. Жаль я не читал ее до того, как реализовал свой регексп. -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
esperanto, У меня не получилось реализовать такой вариант.
Вот посмотри на этот регексп комментария в С например: "/*"(^("*/"))*"*/" Здесь я выделил операторы красным. ^ - отрицание. * - Kleene closure (хрен знает как по-русски, ну сколько угодно повторений включая 0). Скобки задают приоритеты операторов. Можно прочитать этот регексп как: "/*"; все, что угодно кроме "*/"; "*/". Именно так задают подобные токены в Лексе и подобных тулах. Нарисуй или опиши мне автомат, который принимает комментарии. Внимание! До комментария и после идут другие токены, т.е. мне необходим именно такой автомат, который бы мне нарезал ввод на токены, один из которых - комментарий. -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
rudvil |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 20.11.2009 Где: Latvia/Riga Репутация: нет Всего: 3 |
Не совсем верное рег. выражение. Тут можно почитать про более универсальный регэксп http://ostermiller.org/findcomment.html
Это сообщение отредактировал(а) rudvil - 2.11.2010, 23:32 --------------------
xor |
||||
|
|||||
esperanto |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 194 Регистрация: 31.5.2003 Репутация: 2 Всего: 4 |
В формальном определение регулярных выражений нет операции отрицание. Отрицание можно применить на язык распозноваемый регулярным выражением. Замыкание Клина наверное это называется --------------------
B.Sc ->M.Sc.->Microsoft SDE-> (Ph.D. student + Intel SDE + psyсhology B.A) - > Skype SDET |
|||
|
||||
neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Известно, что регулярные языки можно инвертировать и получить регулярный язык. В данном случае регулярное выражение - пример нотации. Дело в принципе. Как можно автомат такой создать?
-------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
esperanto |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 194 Регистрация: 31.5.2003 Репутация: 2 Всего: 4 |
Тогда наверное так
Разбираем регулярное выражение. Находим терм содержащий отрицание. Переводим его в автомат, для автомата строим отрицание, и ответ переводим в регулярное выражение. это регулярное выражение подставляем вместо терма и так продолжаем Сложность экспоненциальная. --------------------
B.Sc ->M.Sc.->Microsoft SDE-> (Ph.D. student + Intel SDE + psyсhology B.A) - > Skype SDET |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |