Написание конечного автомата для разбора HTML
Trusow 16 минут назад Написание конечного автомата для разбора HTML Уровень сложности Средний Время на прочтение 30 мин Охват и читатели 605 Программирование * Доброго времени суток, дорогие читатели. Пришла идея...
Anthropic — What company has the best second artificial intelligence model at the end of June?
В сфере искусственного интеллекта произошло заметное событие. Trusow 16 минут назад Написание конечного автомата для разбора HTML Уровень сложности Средний Время на прочтение 30 мин Охват и читатели 605 Программирование * Доброго времени суток, дорогие читатели. Пришла идея поделиться опытом написания конечного автомата. Скажу сразу же, я из мира фронтенд разработки, поэтому в моей реализации могут быть косяки, которые не допустят, например, бородатые сишники) Поэтому, критика, если она по делу да и к тому же от людей уже имеющих подобный опыт, категорически приветствуется.
Думаю, не одному мне она будет интересна. Здесь и далее весь код будет приводиться на html/js , но код на js может быть легко портирован на любой другой язык, поскольку он не будет содержать специфичных для js конструкций. Тут будет приведен упрощенный пример конечного автомата.
Технические детали
Например, в нем не будет учитываться, что значение атрибута может заключаться в одинарных кавычках или быть вовсе без них. Или что в разметке могут быть комментарии. Основная цель статьи, поделиться своим опытом и идеями.
Постановка задачи Есть некая разметка Text Которую нужно распарсить за один while/for не прибегая к специальным возможностям работы со строками, типа сплита и прочего. То есть в идеале код должен будет выглядеть как-то так: function getNextStatus(ch, status) { // вот тут и будет написан конечный автомат, который будет принимать на вход символ и текущий статус и возвращать следующий статус в зависимости от символа return status; } function parseHtml(text) { let status = 0; for(let i = 0; i Зададимся несколькими вопросами: Как эту строку преобразовать в набор событий? Как эти события будут называться и сколько их будет?
Мы знаем что теги состоят из угловых скобок и самого названия внутри. Название должно начинаться с буквы английского алфавита и может содержать в себе буквы английского алфавита, цифры, знаки - и _ . Также в тегах могут присутствовать атрибуты, которые состоят из имени и значения разделенные знаком = (или иногда просто из имени, опустим это).
Само значение должно быть в кавычках двойных или одинарных.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





