Crates.io | html_parser_tarasenko |
lib.rs | html_parser_tarasenko |
version | 0.1.2 |
source | src |
created_at | 2024-11-13 21:31:53.570948 |
updated_at | 2024-11-16 14:08:55.020359 |
description | Базовий HTML-парсер на Rust з використанням Pest |
homepage | |
repository | https://github.com/MishaTarasenko/RustParser |
max_upload_size | |
id | 1447108 |
size | 41,249 |
Цей проект є базовим HTML-парсером, написаним на Rust із використанням Pest
для синтаксичного аналізу. Парсер розбирає HTML-документи, виділяючи основні компоненти, такі як теги, атрибути та текстові вузли, створюючи деревоподібну структуру для представлення розмітки HTML.
Метою цього проекту є створення синтаксичного аналізатора, здатного розпізнавати HTML-структури, включаючи вкладені елементи, атрибути тегів, текстові вузли, а також перевіряти правильність відкриття і закриття тегів.
Парсер аналізує наступні основні компоненти HTML-документа:
<div>
розпізнається як елемент із вкладеними дочірніми елементами, тоді як самозакриваючі теги на кшталт <img />
обробляються окремо.name="value"
. Вони додаються до відповідного елемента як список пар "ім'я-значення".<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: Можливість обробляти та витягувати текстові та атрибутивні дані дозволяє використовувати парсер для аналітичних задач, таких як аналіз контенту або пошук певних елементів.
html = { SOI ~ elements ~ EOI }
elements = { (element | self_closed_tag)* }
element = { opening_tag ~ content ~ closing_tag }
opening_tag = { "<" ~ tag_name ~ attribute_list ~ ">" }
closing_tag = { "</" ~ tag_name ~ ">" }
self_closed_tag = { "<" ~ tag_name ~ attribute_list ~ "/>" }
tag_name = @{ ASCII_ALPHA+ ~ ASCII_DIGIT? }
attribute_list = { attribute* }
attribute = { identifier ~ "=" ~ quoted_string }
identifier = { ASCII_ALPHA+ }
quoted_string = { """ ~ (!""" ~ ANY)* ~ """ }
content = { (element | text | self_closed_tag)* }
text = @{ (!"<" ~ ANY)+ }
WHITESPACE = _{ " " | "\t" | "\n" | "\r" }
cargo run --release -- parse <Назва файлу>