Научная статья на тему 'СИНТАКСИЧЕСКИЙ АНАЛИЗАТОР HTML В БРАУЗЕРАХ'

СИНТАКСИЧЕСКИЙ АНАЛИЗАТОР HTML В БРАУЗЕРАХ Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
159
17
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
HTML / СИНТАКСИЧЕСКИЙ АНАЛИЗ / СИНТАКСИЧЕСКИЙ АНАЛИЗАТОР / БРАУЗЕР / DOM-ДЕРЕВО / SYNTAX ANALYSIS / PARSER / BROWSER / DOM-TREE

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Поляк Г.Л.

В данной статье рассмотрен основной этап синтаксического анализа html-документов в браузерах - построение DOM-дерева.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

HTML PARSER IN BROWSERS

This article is devoted to main step of html parsing in browsers that is DOM-tree creating.

Текст научной работы на тему «СИНТАКСИЧЕСКИЙ АНАЛИЗАТОР HTML В БРАУЗЕРАХ»

УДК 004.622

Поляк Г.Л.

студент 2 курса магистратуры Санкт-Петербургский горный университет Россия, г. Санкт-Петербург

СИНТАКСИЧЕСКИЙ АНАЛИЗАТОР HTML В БРАУЗЕРАХ

Аннотация: В данной статье рассмотрен основной этап синтаксического анализа hml-документов в браузерах - построение DOM-дерева.

Ключевые слова: html, синтаксический анализ, синтаксический анализатор, браузер, DOM-дерево.

Poliak G.L.

2nd year master student Saint-Petersburg Mining University Russia, Saint Petersburg HTML PARSER IN BROWSERS

Abstract: This article is devoted to main step of html parsing in browsers that is DOM-tree creating.

Keywords: html, syntax analysis, parser, browser, DOM-tree.

Задача синтаксического анализатора HTML - разобрать исходный текст HTML файла и на его основе построить синтаксическое дерево. К сожалению, ни один из стандартных анализаторов не подходит для языка HTML. HTML невозможно определить с помощью контекстно-свободной (бесконтекстной) грамматики, с которой работают автоматические синтаксические анализаторы. Существует формальный стандарт определения HTML - формат DTD (Document Type Definition), однако его грамматика не является бесконтекстной.

На первый взгляд это может показаться странным, так как язык HTML во многом схож с XML; кроме того, оба этих языка произошли от стандартного обобщенного языка разметки SGML. В ходе развития технологий разработки web-документов язык HTML совершенствовался и, начиная с версии HTML4, перестал полностью соответствовать структуре языка SGML. Кроме того, синтаксис языка перестал быть строгим: вместе с развитием Интернета браузеры научились исправлять за разработчиками разного рода ошибки, например, потерянные теги (открывающие или закрывающие). Все эти нововведения привели к тому, что для современного HTML становится очень сложно формально определить грамматику. Таким образом, грамматика HTML не является контекстно-свободной, поэтому его анализ нельзя выполнить ни с помощью стандартно сгенерированных анализаторов, ни с помощью анализаторов для языка XML.

Полученное синтаксическое дерево называют DOM-деревом. DOM -объектная модель документа (Document Object Model) - служит для описания структуры и представления HTML-документа. Кроме того, DOM-дерево

является главным интерфейсом взаимодействия для внешних объектов, таких как Javascript код.

Модель DOM практически идентична разметке. Рассмотрим небольшой пример разметки (рис. 1):

<html>

<body>

<р>

Hello World

</р>

<div> <img src = "example.png"/></div> </body> <^html>

Рисунок 8 - HTML-код

На рисунке 2 представлено DOM-дерево для данной разметки.

HTMLHtmlElcmcnt

HTMLBodyElcmcnt

HTMLParagraphEIcment HTMLDivEIcment

Text HTMLImageElement

Рисунок 9 - DOM-дерево

Спецификации DOM, как и сам язык HTML, разрабатывает World Wide Web Consortium (W3C). Это универсальная спецификация для работы с документами. В специальном модуле описаны элементы, характерные для HTML. Под словами "дерево содержит узлы DOM" подразумевается, что дерево состоит из элементов, которые реализуют один из интерфейсов DOM. В браузерах применяются специфические реализации, обладающие дополнительными атрибутами для внутреннего использования

Рассмотрим этапы создания дерева для следующего примера (рис. 3):

<html>

tbody>

Пустой документ

</body>

</html>

Рисунок 10 - Пример HTML-кода

1. Начальное состояние анализатора - исходное состояние: последовательность токенов, полученная в результате лексического анализа;

2. Анализатор получает токен "html". Состояние меняется на "до html", после чего токен обрабатывается еще раз, но уже в новом состоянии;

3. Анализатор создает элемент HTMLHtmlElement и добавляет его к корневому объекту Document. Состояние меняется на "до head";

4. Анализатор получает токен "body". Несмотря на то, что в коде нет тега "head", элемент HTMLHeadElement будет автоматически создан и добавлен в дерево, так как элемент "head" является обязательным. Состояние меняется на "внутри head" и сразу же на "после head". После повторной обработки токена "body" элемент HTMLBodyElement создается и добавляется в дерево. Состояние меняется на "внутри body";

5. Анализатор получает первый токен строки "Пустой документ", что ведет к созданию узла Text и добавление его к объекту HTMLBodyElement. Далее к созданному узлу добавляются остальные символы;

6. Анализатор получает закрывающий токен "body". Состояние меняется на "после body";

7. Анализатор получает закрывающий токен "html". Состояние меняется на "после после body";

8. Как только будет получен токен конца файла (EOF), анализ завершается.

Использованные источники:

1. Garsiel, T. How Browsers Work: Behind the scenes of modern web browsers / T. Garsiel, P. Irish. - Режим доступа:

https://www.html5rocks.com/en/tutorials/internals/howbrowserswork/ (Дата обращения: 31.05.2019)

i Надоели баннеры? Вы всегда можете отключить рекламу.