HTML Parser Tarasenko
Опис
Цей проект є базовим HTML-парсером, написаним на Rust із використанням Pest для синтаксичного аналізу. Парсер розбирає HTML-документи, виділяючи основні компоненти, такі як теги, атрибути та текстові вузли, створюючи деревоподібну структуру для представлення розмітки HTML.
Мета проекту
Метою цього проекту є створення синтаксичного аналізатора, здатного розпізнавати HTML-структури, включаючи вкладені елементи, атрибути тегів, текстові вузли, а також перевіряти правильність відкриття і закриття тегів.
Технічний опис синтаксичного аналізу
Що саме аналізується
Парсер аналізує наступні основні компоненти HTML-документа:
- Теги елементів: Відкриваючі та закриваючі теги розбираються як єдині вузли в дереві синтаксичного аналізу. Наприклад, тег
<div>розпізнається як елемент із вкладеними дочірніми елементами, тоді як самозакриваючі теги на кшталт<img />обробляються окремо. - Атрибути тегів: Кожен тег може містити атрибути, записані у форматі
name="value". Вони додаються до відповідного елемента як список пар "ім'я-значення". - Вкладені елементи: Парсер підтримує вкладення елементів, що дозволяє розбирати HTML-структури будь-якої глибини, наприклад,
<div><p><span>Text</span></p></div>. - Текстові вузли: Будь-який текст між тегами обробляється як текстовий вузол і додається як дочірній елемент відповідного батьківського вузла.
Процес аналізу
Синтаксичний аналіз здійснюється за допомогою граматики, визначеної у файлі HTML.pest, яка розділяє HTML-код на основні компоненти: element, self_closing_element, attribute, text тощо. Граматика побудована таким чином, щоб дозволити рекурсивну обробку вкладених тегів.
Для забезпечення коректності структури HTML, після парсингу відбувається валідація збігу імен у відкриваючих і закриваючих тегах. Наприклад, для <div>...</div> парсер перевірить, що ім'я тега в кінцевому тегу відповідає імені в початковому. Якщо відбувається помилка (наприклад, <div>...</span>), програма повертає повідомлення про помилку.
Використання результатів аналізу
Результати синтаксичного аналізу зберігаються у вигляді дерева, де кожен вузол представляє HTML-елемент із потенційними дочірніми елементами. Дерево може бути використане для різних цілей:
- Генерація або модифікація HTML: Оброблене дерево можна перетворити назад у HTML або модифікувати, додаючи чи видаляючи вузли.
- Конвертація у формат XML або JSON: Це дозволяє імпортувати HTML-контент у програми, які працюють із структурованими даними.
- Аналіз вмісту HTML: Можливість обробляти та витягувати текстові та атрибутивні дані дозволяє використовувати парсер для аналітичних задач, таких як аналіз контенту або пошук певних елементів.