В настоящее время я пытаюсь (или планирую попытаться) написать простую (насколько это возможно) программу для синтаксического анализа HTML-документа в дерево.
После поиска в Google я нашел много ответов, в которых говорилось: «Не делай этого, это было сделано» (или слов в этом роде) и ссылок на примеры анализаторов HTML;а также довольно категоричная статья о том, почему не следует использовать регулярные выражения. Однако я не нашел руководств по "правильному" способу написания парсера. (Это, кстати, то, что я пытаюсь больше как учебное упражнение, чем что-либо еще, поэтому я бы предпочел сделать это, а не использовать готовый)
Я считаю, что мог бы создать рабочий XML-анализатор, просто чтение документа и добавление тегов / текста и т. д. к дереву, повышение уровня всякий раз, когда я нажимаю закрывающий тег (опять же, просто, на этом этапе не требуется никаких сложных потоков или эффективности). Однако для HTML не все теги закрыты.
Итак, у меня такой вопрос: что вы порекомендуете для решения этой проблемы? Единственная идея, которая у меня возникла, - это обрабатывать его так же, как XML, но иметь список тегов, которые не обязательно закрываются, каждый с условиями закрытия (например,
заканчивается
или следующийtag).
Есть ли у кого-нибудь другие (надеюсь, лучшие) предложения? Есть ли вообще лучший способ сделать это?