Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Несколько теоретических вопросов по Perl 
:(
    Опции темы
Suppir
Дата 20.4.2009, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Добрый день!

1. Можно ли поиск с помощью регулярных выражений отнести к "прямому поиску"? Под прямым поиском понимают поиск без предварительного индексирования. Однако в Perl строка, насколько мне известно, подвергается хешированию перед обработкой регулярным выражением. 
2. Фридл пишет, что регулярные выражения Perl основаны на действии недетерминированного конечного автомата. При этом считается, что детерминированный конечный автомат работает быстрее, но недетерминированный дает больше возможностей для поиска. Можно ли средствами Perl конвертировать код регулярного выражения в код, совместимый с детерминированными конечными автоматими? (может модуль такой есть)
3. Где можно увидеть схему работы Perl НКА? Т.е. как механизм действует при обработке регулярного выражения. У Фридла всего две страницы про механизм действия. Про исходный код знаю, но, к сожалению, не силен в сях :(
4. Я прочитал на одном английском сайте, что регулярные выражения Perl и подобные намного слабее регулярных выражений в языке SNOBOL. Там использовалась система на контестно-независимой BNF-грамматике. Подобная система была в Алголе. Только я не нашел, в чем именно сноболовские регулярные выражения были сильнее перловских. 

PM MAIL   Вверх
arto
Дата 20.4.2009, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



1. откуда известно?
2. ...
3. perldoc re
4. не уверен
PM MAIL ICQ   Вверх
KSURi
Дата 20.4.2009, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 20
Всего: 27



1. У перла есть внутренний тип SvPVBM в котором хранятся данные необходимые для поиска в строке (алгоритм Бойера-Мура).
Используется ф-ями типа index, а также движком регулярных выражений.
Внутри структуры типа SvPVBM есть данные о самом редком символе в строке, индекс первого вхождения искомой подстроки и др.


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
Logo
Дата 20.4.2009, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



3. В книге фридла есть все, чтобы понимать как работу механизма, для того чтобы составлять регулярные выражения. Наглядно можно посмотреть в проге RegexBuddy. Еще помогает в отладке встроенный код, особенно (?{print "$`\[$&]$'\n"})
4. Тоже стало интересно. Насколько я понимаю это те самые грамматики которые появились в Perl 6, и вроде там специализация синтаксический разбор различных исходных текстов. Т.е. для написания своих языков, или вообще скриптов исполняющих/валидирующих тексты на языках.
Если есть инфа, особенно на русском и разжеванная, прошу сюда smile.
PM MAIL   Вверх
Suppir
Дата 21.4.2009, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



KSURi, насколько мне известно, Perl использует упрощенный алгоритм Бойера-Мура-Пратта. Он отличается от алгоритма Бойера-Мура тем, что не строит таблицу суффиксов (строит только таблицу стоп-символов). Этот алгоритм используется в предварительных оптимизациях регулярных выражений для поиска одиночных символов в строке. 
Например, есть регулярка /(abcabcabcabcabcabc)d/, алгоритм сначала ищет в строке символ "d" с помощью алгоритма БМП и только потом обрабатывает остальную часть регулярного выражения. Соответственно, если "d" не найден, то нет смысла обрабатывать остальную длинную строку - экономия времени.
-------
arto - "откуда известно?". Насколько мне известно, есть не так уже много видов поиска: с предварительной индексацией(инвертированные индексы), основанный на деревьях, основанных на сигнатурах, прямой поиск. В прямой поиск входят упомянутые алгоритмы Боейра-Мура, а также Карпа-Рабина, Ахо-Корасик и т.д. Туда же часто относят поиск с помощью детерминированных и недетерминированных автоматов (собственно, Ахо как раз и строится на автомате). 
По идее, регулярные выражения Perl работают на недетерминированных автоматах + большое количество разнообразных предварительных оптимизаций. Но при этом используется и индексирование строки (ведь создаются же переменные $_, $' и т.п.).  Выходит, что поиск с помощью рег.выр. какой-то смешанный. И я думаю, можно ли его отнести к прямому поиску?
------
Logo, насчет Снобола - в википедии прочитал. Цитирую:
In recent years its use has faded as newer languages such as Awk and Perl have made string manipulation by means of regular expressions fashionable. SNOBOL4 patterns, however, subsume BNF grammars, which are equivalent to Context-free grammars and more powerful than regular expressions [1] (Gimpel, J. F. 1973. A theory of discrete patterns and their implementation in SNOBOL4. Commun. ACM 16, 2 (Feb. 1973), 91-100.). Мне самому интересно, чем же они отличались от перловских. Насколько мне известно, SNOBOL представлял язык для обработки текста, разработки компиляторов и систем ИИ.
PM MAIL   Вверх
KSURi
Дата 21.4.2009, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 20
Всего: 27



Хм, я не встречал упоминаний по поводу упрощенности алгоритма. Хотя, судя по его описанию, возможно вы правы.
В SvPVBM также есть поле BmUSEFUL, в котором хранится вес полезности данной подстроки при оптимизации. Весьма похоже на то, что вы описали с регуляркой /(abcabcabcabcabcabc)d/, если я все правильно понял.

ЗЫ: возможно стоит попробовать написать в рассылку для разработчиков (http://dev.perl.org/perl5/lists.html)


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
arto
Дата 21.4.2009, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



SvPVBM -- функция, которая нигде не используется.
PM MAIL ICQ   Вверх
KSURi
Дата 21.4.2009, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 20
Всего: 27



SvPVBM - тип данных. Структуры такого типа создаются ф-ией fbm_compile(). По крайней мере так говорят в PerlGuts Illustrated v0.9


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
arto
Дата 21.4.2009, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



смотреть надо исходники

perl-5.10.0# grep -Fr SvPVBM .
./ext/B/B.xs:SvPVBM(sv)
perl-5.10.0#
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


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

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


 




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


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

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