Открыть сервисСервис

Парсер — программа разбора данных

Парсер (от англ. parser, от parse — разбирать, анализировать) — программа или компонент программного обеспечения, выполняющий синтаксический разбор входных данных и преобразование их в структурированный вид, удобный для дальнейшей обработки. Парсеры применяются при работе с программным кодом, разметкой, данными в форматах JSON, XML, CSV, HTTP-протоколом и другими источниками информации.

Принцип работы

Парсер получает на вход поток данных (строку, файл или сетевой ответ) и последовательно разбирает его по заранее заданным правилам — грамматике формата. Результатом работы обычно является абстрактное синтаксическое дерево (AST), объектная модель документа или поток структурированных событий. На основе разобранных данных выполняются дальнейшие действия: вычисление выражений, генерация кода, поиск данных, валидация структуры.

Основные подходы

Рекурсивный спуск

Наиболее распространённый метод: парсер описывается набором функций, каждая из которых соответствует правилу грамматики и при необходимости вызывает другие функции. Прост в реализации, применяется в большинстве современных инструментов разбора JSON, конфигурационных файлов и языков программирования.

LL и LR-парсеры

Классические алгоритмы формальной теории компиляторов. LL-парсеры читают вход слева направо и выбирают правила сверху вниз; LR-парсеры строят разбор снизу вверх, используя стек. На их основе построены генераторы парсеров yacc, bison, ANTLR.

Парсеры на основе регулярных выражений

Используют регулярные выражения для поиска фрагментов данных. Просты, но ограничены в выразительности и ненадёжны для сложных структур.

Типы парсеров

ТипНазначениеПримеры
ЛексическийРазбиение входного потока на лексемытокенизаторы
СинтаксическийПостроение дерева разбора по грамматикеANTLR, bison
СемантическийПроверка смысла и связей между элементамикомпиляторы
HTML/XMLРазбор размеченных документовBeautifulSoup, lxml
JSONРазбор структурированных данныхjson (Python), Jackson
HTTPРазбор запросов и ответовhttp-parser, net/http
ЛоговРазбор системных и веб-логовLogstash, grok

Применение

Компиляторы и интерпретаторы

Парсер — ключевой этап трансляции программного кода: он преобразует исходный текст в синтаксическое дерево, которое далее обрабатывается оптимизатором и генератором машинного кода.

Веб-разработка

Парсеры HTML и CSS браузеров отвечают за отображение страниц. На серверной стороне парсеры используются для обработки шаблонов, извлечения данных из веб-страниц (веб-скрапинг) и разбора входящих запросов.

Работа с данными

В аналитике и интеграции систем парсеры преобразуют данные из внешних источников (CSV, XML, JSON, SQL-дампов) во внутренние структуры для загрузки в базы данных или обработки.

Сетевые протоколы

Сетевые библиотеки содержат парсеры протоколов HTTP, DNS, TLS и других, преобразующие байтовые потоки в объекты.

Парсер и лексический анализатор

Лексический анализатор (токенизатор) — первый этап разбора: он разбивает входной поток на лексемы (слова, операторы, разделители). Синтаксический парсер работает поверх лексического и строит дерево разбора из лексем. В простых случаях оба этапа объединяются в один компонент.

Особенности и сложности

Разбор произвольных данных сопряжён с рядом проблем: обработка ошибок и восстановление после них, поддержка больших объёмов данных без утечек памяти, безопасность (защита от вредоносных входных данных, например, атак вида XML-парсинга). Многие парсеры реализуют потоковую обработку, позволяющую разбирать данные по мере поступления, без загрузки всего файла в память.

Источники:

  • «Компиляторы: принципы, технологии и инструменты» — А. Ахо, М. Лам, Р. Сети, Д. Ульман
  • Документация Python: модуль json, html.parser
  • Документация ANTLR
  • RFC 8259 — The JavaScript Object Notation (JSON) Data Interchange Format
  • Документация проекта libxml2
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru