LINUX.ORG.RU

оптимизация регулярных выражений


0

0

Здравствуйте!

Нужно мне свои регулярные выражения заимплементить, но проблемма в том, что приложение критично к памяти и скорости. Соответственно полные матрицы переходов размера N*m (N -- мощность алфавита, m -- длина шаблона) не устраивают.

Возможна ли компиляция регекспов (составление матрицы переходов для DFA) сразу для нескольких паттернов? Матрица переходов получается разреженной -- возможно ли ее эффективное сжатие (без существенной потери перформанса)?

Очень нужны _конкретные_ советы и ссылки на материалы по оптимизации регекспов. В гугле ничего по существу не нашел (по методам реализации движков для регекспов). Смотрю glibc -- пока не особо понятно...


Увы, ничего конкретного.

Я бы посоветовал самому повозиться, глядя в сторону Перла -- там, вроде, аналогичные проблемы затрагивались и были успешно решены...

Die-Hard ★★★★★
()

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

vilfred ☆☆
()
Ответ на: комментарий от Die-Hard

> Я бы посоветовал самому повозиться, глядя в сторону Перла -- там, вроде, аналогичные проблемы затрагивались и были успешно решены...

Ты сам смотрел в перловые исходники, или чисто теоретически советуешь? Потому что, насколько я знаю, они сложные и страшные. Настолько, что в рассылке perl6-compiler я видел высказывание в том духе, что в коде регекспов пятого перла что-то понять могут два-три человека в мире.

anonymous
()
Ответ на: комментарий от anonymous

> Ты сам смотрел в перловые исходники, или чисто теоретически советуешь?

Чисто теоретически :)

Опять же, чисто теоретически. оптимизация регекспов должна быть достаточно тривиальной, нечто вроде постороения минимального конечного автомата эквивалентного заданному. Конечно, возможна эвристика, да и минимальный КА не со всех точек зрения оптимален.

Я уверен что на эту тему существует масса литературы, но я тут не спец, увы.

Погугли про регекспы, конечные автоматы, оптимизация...

Die-Hard ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.