Тип работы:
Предмет:
Язык работы:


ПРИМЕНЕНИЕ РЕГУЛЯРНЫХ ВЫРАЖЕНИЙ ДЛЯ РАЗБОРА ТЕКСТОВОГО ПОТОКА В СИСТЕМАХ UNIX

Работа №184469

Тип работы

Дипломные работы, ВКР

Предмет

прикладная информатика

Объем работы76
Год сдачи2022
Стоимость4600 руб.
ПУБЛИКУЕТСЯ ВПЕРВЫЕ
Просмотрено
9
Не подходит работа?

Узнай цену на написание


Аннотация
ВВЕДЕНИЕ 1
1. Описание 3
1.1. Обработка текста при помощи регулярных выражений 3
1.1.1. Многострочные шаблоны в регулярных выражениях 4
1.2. Решение проблемы обработки текстового потока 4
1.3. Конечные автоматы как способ представления регулярных
выражений 6
1.4. Сравнительная характеристика библиотек регулярных выра­жений 8
2. Особенности реализации 9
2.1. Менеджер памяти 9
2.2. Парсер 10
2.3. Оптимизация AST 13
2.4. Компиляция AST в промежуточное представление 14
2.4.1. Сопо ставление с сохранением контекста 22
2.5. Формирование целевого представления 23
2.5.1. JIT 27
3. Сравнение производительности 36
ЗАКЛЮЧЕНИЕ 41
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ И ЛИТЕРАТУРЫ 42

Регулярные выражения - последовательности символов, определяю­щие шаблоны поиска по тексту и широко применяющиеся для первичного анализа текстов на предмет наличия определенных закономерностей и из­влечения информации из них, обработки и форматирования. С ростом вычис­лительных мощностей растут и объемы обрабатываемых данных, естествен­ным образом постанавливая задачу эффективной их обработки, в первую оче­редь эффективной по памяти. Решения этой задачи сводятся к обработке дан­ных по частям, сохраняя в оперативной памяти лишь необходимую их часть. В языках программирования подпрограммы, выполняющие с регулярными выражениями, обычно оформляются в виде библиотек. Программный интер­фейс, предоставляемый такими библиотеками, будем называть «потоковым». Напротив, программный интерфейс, выполняющий обработку исключитель­но текста целиком, будем называть «классическим», поскольку именно такие интерфейсы появились первыми. Важно отметить, что данные можно обра­батывать по частям (обычно построчно) и при помощи классических интер­фейсов - ценой значительного усложнения программы и невозможности кор­ректно обработать данные в ряде случаев.
Потоковые интерфейсы оказываются необходимы уже при достаточно малых размерах обрабатываемых данных. Примером может послужить тек­стовый редактор vis, в котором текст представлен в виде двусвязного списка буферов [1]. Такое представление позволяет эффективно реализовать мно­жественные вставку и удалению, редактирование при помощи нескольких курсоров и операции над несколькими выделенными областями разом и, в отличие от, например, представления текста в виде массива строк, не вызы­вает просадок производительности при увеличении длины строк. Поиск по такому представлению текста невозможен с применением классических ин­терфейсов библиотек регулярных выражений.
Потоковые интерфейсы необходимы и при обработке потоков данных, поступающих небольшими порциями - например, при выполнении аудита системы на признаки типовых атак посредством мониторинга системного журнала. Схожую задачу выполняет утилита monit, анализирующую вывод процесса и выполняющую заданные пользователем действия в соответствии с результатами анализа. Эта утилита часто используется для автоматизации повседневных задач в Unix-подобных системах. Она выполняет построчный разбор ввода, что приводит к необходимости хранения промежуточной ин­формации о текущем состоянии при разборе многострочных шаблонов. При­менение поточного разбора позволило бы избежать этого.

Возникли сложности?

Нужна помощь преподавателя?

Помощь в написании работ!


Проведенный сравнительный анализ показал, что число предоставля­ющих потоковый интерфейс библиотек регулярных выражений невелико, а предоставляемый ими интерфейс в подавляющем большинстве случаев осложняет эффективное управление памятью, что накладывает ограничения на размер обрабатываемых текстов.
Разработана библиотека, предоставляющая потоковый интерфейс тре­буемого вида, что обеспечивает хранение в оперативной памяти лишь тре­буемого для извлечения совпадения участка текстового потока. Применение технологии JIT-компиляции, ценой дополнительных затрат памяти и времени на компиляцию в исполняемый код, позволяет кратно ускорить поиск совпа­дения в текстовом потоке по сравнению с более широко распространенным подходом использования байткода. При этом предоставляется и возможность использования интерпретируемого байткода, если затраты времени и/или па­мяти по каким-либо причинам неприемлемы для пользователя; разработан­ный байткод более компактен, чем байткод библиотеки sregex. Библиотека реентрантна1 и пригодна для использования в многопоточном окружении, полностью поддерживает Unicode.
Библиотека отличается высокой производительностью на сценариях, не сводящихся к поиску фиксированной строки. Сравнительные замеры про­водились относительно библиотеки sregex, на указанных сценариях уско­рение достигает 2-3 раз при исполнении байткода, и 4-10 раз при JIT- компиляции. На остальных сценариях результат можно улучшить, применив описанную технику определения набора символов, с которых может начи­наться совпадение.


1. Vis — Combining Modal Editing with Structural Regular Expressions. URL: https://github.com/martanne/vis (дата обр. 25.01.2022).
2. A S. Y. REGULAR LANGUAGES.
3. Calabro C. NFA to DFA blowup. 2005.
4. Performance comparison of regular expression engines. URL: https :
/ / zherczeg . github . io/ sljit / regex_perf . html (дата обр. 17.04.2022).
5. Rabin M. O., Scott D. Finite Automata and Their Decision Problems // IBM Journal of Research and Development. 1959. Т 3, №2. С. 114—125. DOI: 10.1147/rd.32.0114.
6. Hyperscan: A Fast Multi-pattern Regex Matcher for Modern CPUs / X. Wang [и др.] // 16th USENIX Symposium on Networked Systems De­sign and Implementation (NSDI 19). Boston, MA : USENIX Association, 02.2019. С. 631—648. ISBN 978-1-931971-49-2. URL: https://www. usenix . org / conference / nsdi19/ presentation / wang - xiang.
7. [DISCUSS] hyperscan support ARM. URL: https : / / github . com/ intel/hyperscan/issues/197.
8. Hyperscan API Reference. URL: http : / / intel . github . io / hyperscan / dev - reference / api _ files . html (дата обр. 23.01.2022).
9. PIRE, Perl Incompatible Regular Expressions library. URL: https : // github.com/yandex/pire (дата обр. 04.02.2022).
10. libsregex — A non-backtracking NFA/DFA-based Perl-compatible regex en­gine library for matching on large data streams. URL: https://github. com/openresty/sregex (дата обр. 08.05.2022).
11. ngx_replace_filter — Streaming regular expression replacement in response bodies. URL: https : / / github . com/openresty/replace- filter-nginx-module (дата обр. 26.01.2022).
12. Baldassin A., Borin E., Araujo G. Performance Implications of Dynamic Memory Allocators on Transactional Memory Systems //. Т 2015. 01.2015. С. 87—96. DOI: 10.1145/2 68 8500.2 68 8504.
13. Benjamin Zorn D. L., Moura L. de. Mimalloc: Free List Sharding in Action : тех. отч. / Microsoft. 06.2019.
14. Regular Expression Matching Can Be Simple And Fast (but is slow in Java, Perl, PHP, Python, Ruby,...) URL: https : / / swtch . com / ~rsc / regexp/regexp1.html (дата обр. 06.05.2022).
15. GNU Bison. URL: https : / /www . gnu . org / software /bison/ (дата обр. 15.01.2022).
... всего 21 источников


Работу высылаем на протяжении 30 минут после оплаты.




©2025 Cервис помощи студентам в выполнении работ