Написание HTML-парсера

В настоящее время я пытаюсь (или планирую попытаться) написать простую (насколько это возможно) программу для синтаксического анализа HTML-документа в дерево.

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

Я считаю, что мог бы создать рабочий XML-анализатор, просто чтение документа и добавление тегов / текста и т. д. к дереву, повышение уровня всякий раз, когда я нажимаю закрывающий тег (опять же, просто, на этом этапе не требуется никаких сложных потоков или эффективности). Однако для HTML не все теги закрыты.

Итак, у меня такой вопрос: что вы порекомендуете для решения этой проблемы? Единственная идея, которая у меня возникла, - это обрабатывать его так же, как XML, но иметь список тегов, которые не обязательно закрываются, каждый с условиями закрытия (например,

заканчивается

или следующий

tag).

Есть ли у кого-нибудь другие (надеюсь, лучшие) предложения? Есть ли вообще лучший способ сделать это?

26
задан Einacio 25 August 2011 в 14:42
поделиться