Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Как построить конечний автомат для RegEx?


Автор: unkis 17.10.2007, 10:56
Привет всем! У меня такая проблема, мне надо построить конечный автомат по определенному RegEx, к примеру по этому. "(df)*(baf*b+)+"
Как вообще строятся такие автоматы, может есть готовый пример кода?

Автор: Platon 17.10.2007, 10:59
Мне тоже такая задачка интересна. Это ключ к решению задачи многослойного BB-кода.

Автор: nornad 17.10.2007, 16:47
Если можно, опиши подробнее суть проблемы. Что должен делать этот твой автомат? Если всего лишь принимать состояние "подошло"/"не подошло", то зачем вообще автомат? Оборачивание в новый класс особо код не уменьшит.

Автор: chief39 17.10.2007, 17:58
Цитата(nornad @  17.10.2007,  16:47 Найти цитируемый пост)
Что должен делать этот твой автомат? 

Исполнять логику конкретного регекспа.

Цитата(nornad @  17.10.2007,  16:47 Найти цитируемый пост)
Оборачивание в новый класс особо код не уменьшит. 

Не оборачивание, а замена на вылизанный до состояния конечного автомата код. Причём, я так понимаю, автоматически. smile

На всяк случай(мало ли)
http://ru.wikipedia.org/wiki/Конечный_автомат


Но.. уже подзабылась теория и практика данных "кофейных банкоматов"...
Он на то и конечный, что конечный.... а входящие даные у тебя конечные ли? Я не копенгаген в нюансах регэкспершнов - расшифруй, если что, его логику.

Добавлено через 5 минут и 54 секунды
Ты не об этом: http://absurdopedia.wikia.com/wiki/%D0%9A%D0%BE%D0%BD%D0%B5%D1%87%D0%BD%D1%8B%D0%B9_%D0%B0%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82?

Тока не бейте  smile 

Автор: nornad 17.10.2007, 18:54
Цитата(chief39 @  17.10.2007,  20:58 Найти цитируемый пост)
Тока не бейте

Забавная ...педия. smile

Цитата(chief39 @  17.10.2007,  20:58 Найти цитируемый пост)
Исполнять логику конкретного регекспа.

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

Автор: chief39 17.10.2007, 21:08
Цитата(nornad @  17.10.2007,  18:54 Найти цитируемый пост)
В плане - заменить стандартный регэксп на свою реализацию что ли? Что-то я пока не понимаю, что же требуется автору. 

Ну... как бы... 
Примерно так попробую объяснить суть КА:
есть конституция, законы и постановления. Учишь их все. И по входящему запросу принимаешь решение: накладываешь логику конституции, накладываешь логику законов и накладываешь логику постановлений/указов. Получается некий алгоритм, по которому мы приходим к детерминированному решению.
А если это всё, грубо говоря, "оптимизировать", то есть вместо абстрактного х*2*2/4*3 сделать x*3 - выйдет КА.
То есть, нечто вроде тупой интструкции для ресепшна: пришёл такой запрос - в такую папку, пришёл такой - в такую. Без всяких просчитываний законов и конституции на приёмке.

Добавлено через 6 минут и 23 секунды
Ещё грубее говоря:
У тебя есть БД словарная со списком стран и языков. Есть датабэйс слой некий. ОРМка, бизнес логика для этого всего и интерфейс програмный для клиентских приложений.
Но. Если набор стран и языков стабилен(в контексте задачи) - то можем упростить всё до состояния конечного автомата:
если идёт вот такой запрос с клиента - отдать вот такое. Если такое - строго такое отдать.
Трудно объяснить так... У нас очень хорошо освещали. И очень хорошо видно на триггерах, логических схемках при их оптимизации. Чувствуешь саму суть, дух КА smile))

Автор: nornad 18.10.2007, 01:49
Ну, в общем, идея КА стала понятнее, хотя я пока всё равно ен понимаю, чего же хочет автор. smile
В смысле, что должен делать КА, построенный по регэкспу?

Добавлено через 1 минуту и 1 секунду
Вот оно где выплыло, непрограммерское образование. smile

Автор: LSD 18.10.2007, 16:30
Цитата(nornad @  18.10.2007,  02:49 Найти цитируемый пост)
В смысле, что должен делать КА, построенный по регэкспу?

Тут два варианта он должен принимать последовательность которая соответсвует регекспу, и отвергать ту которая не соответсвует. Или принимать последовательность которая содержит подмножество символов, которые соответсвуют регекспу.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)