Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Регулярное выражение, оператор "not" в NFA, Как выглядит NFA для оператора "not"? 
V
    Опции темы
rudvil
Дата 25.7.2010, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 20.11.2009
Где: Latvia/Riga

Репутация: нет
Всего: 3



Как в регулярных выражениях выглядит NFA для оператора "^"?
Код
a^b
т.е. "a" но не "b"

С операторами:

"|" user posted image

"?" user posted image

"*" user posted image

"+" user posted image

все просто и понятно, а вот как быть с оператором "^"?

В гугле пусто, т.к. корректно сформулировать вопрос так и не удалось(NFA operator ^, NFA operator not, NFA ^)???

Это сообщение отредактировал(а) rudvil - 25.7.2010, 15:05
--------------------
xor
PM MAIL Skype   Вверх
Pavia
Дата 25.7.2010, 17:12 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 6.12.2008

Репутация: 11
Всего: 12



Цитата(rudvil @  25.7.2010,  15:04 Найти цитируемый пост)
Как в регулярных выражениях выглядит NFA для оператора "^"?

В таблице состояний отрицательное и положительное меняется местами.
Цитата(rudvil @  25.7.2010,  15:04 Найти цитируемый пост)
все просто и понятно, а вот как быть с оператором "^"?

А никак, тут для упрощение отрицательные состояния не показаны.
И вообще оператор ^  обычно применяется только в "[]" скобках.
PM MAIL   Вверх
rudvil
Дата 25.7.2010, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 20.11.2009
Где: Latvia/Riga

Репутация: нет
Всего: 3



Цитата
отрицательные состояния

первый раз слышу, пошел гуглить...
все равно, спасибо.
--------------------
xor
PM MAIL Skype   Вверх
Pavia
Дата 25.7.2010, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 6.12.2008

Репутация: 11
Всего: 12



Цитата(rudvil @  25.7.2010,  17:35 Найти цитируемый пост)
 пошел гуглить...

Гугл тебя думать не научит.
PM MAIL   Вверх
neutrino
Дата 25.7.2010, 18:46 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: нет
Всего: 62



Вот так думаю все станет понятно:

a(∑\{b})

Когда ∑ обозначает весь алфавит:

∑={a..z}U{0..9}U{@#$%^&*...}

Добавлено через 4 минуты и 56 секунд
Цитата(rudvil @  25.7.2010,  14:04 Найти цитируемый пост)
"a" но не "b"

Это лишено всякого смысла, ибо если а, то уж точно не б. Видимо имеется в виду: а, а потом все кроме б. Именно для этого случая я написал пояснение.


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
esperanto
Дата 25.7.2010, 22:36 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 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
PM MAIL   Вверх
neutrino
Дата 27.10.2010, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: нет
Всего: 62



esperanto, А побыстрее никак?


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
rudvil
Дата 27.10.2010, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 20.11.2009
Где: Latvia/Riga

Репутация: нет
Всего: 3



Чтобы упростить я остановился на решении как тут http://www.codeproject.com/KB/recipes/re_e...ion_parser.aspx
user posted image
т.е. если попали на dummy то дальше идти не будем.
--------------------
xor
PM MAIL Skype   Вверх
esperanto
Дата 28.10.2010, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 194
Регистрация: 31.5.2003

Репутация: 2
Всего: 4



Цитата(neutrino @ 27.10.2010,  15:16)
esperanto, А побыстрее никак?

На курсе, вычислений учили именно так делать. Я не видел других решений в учебниких никогда. 
--------------------
B.Sc ->M.Sc.->Microsoft SDE-> (Ph.D. student + Intel SDE + psyсhology B.A) - > Skype SDET
PM MAIL   Вверх
neutrino
Дата 28.10.2010, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: нет
Всего: 62



rudvil, Да, но если мне нужно построить не отрицание одного символа, а отрицание целого регулярного выражения, то такой фокус не пройдет.

Добавлено через 54 секунды
Кстати, за ссылку спасибо. Интересно было почитать. Жаль я не читал ее до того, как реализовал свой регексп.


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
neutrino
Дата 2.11.2010, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: нет
Всего: 62



esperanto, У меня не получилось реализовать такой вариант. 
Вот посмотри на этот регексп комментария в С например: "/*"(^("*/"))*"*/"
Здесь я выделил операторы красным. ^ - отрицание. * - Kleene closure (хрен знает как по-русски, ну сколько угодно повторений включая 0). Скобки задают приоритеты операторов. Можно прочитать этот регексп как: "/*"; все, что угодно кроме "*/"; "*/". Именно так задают подобные токены в Лексе и подобных тулах.

Нарисуй или опиши мне автомат, который принимает комментарии. Внимание! До комментария и после идут другие токены, т.е. мне необходим именно такой автомат, который бы мне нарезал ввод на токены, один из которых - комментарий.


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
rudvil
Дата 2.11.2010, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 20.11.2009
Где: Latvia/Riga

Репутация: нет
Всего: 3



Цитата(neutrino @ 2.11.2010,  21:49)
"/*"(^("*/"))*"*/"

Не совсем верное рег. выражение.
Тут можно почитать про более универсальный регэксп http://ostermiller.org/findcomment.html
Код
/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/


Это сообщение отредактировал(а) rudvil - 2.11.2010, 23:32
--------------------
xor
PM MAIL Skype   Вверх
esperanto
Дата 2.11.2010, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 194
Регистрация: 31.5.2003

Репутация: 2
Всего: 4



Цитата(neutrino @ 2.11.2010,  21:49)
 Здесь я выделил операторы красным. ^ - отрицание.  .

В формальном определение регулярных выражений нет операции отрицание. Отрицание можно применить на язык распозноваемый регулярным выражением.

Замыкание Клина наверное это называется
--------------------
B.Sc ->M.Sc.->Microsoft SDE-> (Ph.D. student + Intel SDE + psyсhology B.A) - > Skype SDET
PM MAIL   Вверх
neutrino
Дата 3.11.2010, 00:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: нет
Всего: 62



Известно, что регулярные языки можно инвертировать и получить регулярный язык. В данном случае регулярное выражение - пример нотации. Дело в принципе. Как можно автомат такой создать?


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
esperanto
Дата 4.11.2010, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 194
Регистрация: 31.5.2003

Репутация: 2
Всего: 4



Тогда наверное так

Разбираем регулярное выражение.
Находим терм содержащий отрицание.
Переводим его в автомат, для автомата строим отрицание, и ответ переводим в регулярное выражение. это регулярное выражение подставляем вместо терма и так продолжаем


Сложность экспоненциальная.
--------------------
B.Sc ->M.Sc.->Microsoft SDE-> (Ph.D. student + Intel SDE + psyсhology B.A) - > Skype SDET
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0863 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.