Создание собственного HTML-парсера

Я знаю этот пост, я его уже читал, но все же я хотел бы узнать, какой язык (может) использовать парсер html? Я имею в виду, анализирует ли он весь исходный код с помощью регулярного выражения или использует обычный язык программирования, такой как С# или Python?

Помимо вопроса выше, не могли бы вы также рассказать мне, с чего я должен начать создавать свой собственный парсер? (Я хотел бы создать парсер html для своих личных нужд :)


person Shaokan    schedule 29.07.2011    source источник
comment
Вы можете использовать любой полный по Тьюрингу язык. Регулярные выражения (по крайней мере те из теории формального языка) таковыми не являются. Но большинство библиотек и реализаций регулярных выражений обладают гораздо большими возможностями (см., например, Могут ли расширенные реализации регулярных выражений анализировать HTML?).   -  person Gumbo    schedule 29.07.2011
comment
Обязательно прочитайте это: stackoverflow.com/questions/1732348/ Шедевр StackOverflow.   -  person Iterator    schedule 29.07.2011
comment
Я это уже читал :) @Iterator   -  person Shaokan    schedule 29.07.2011
comment
@Bart Kiers У меня нет особой проблемы, мне просто нравится узнавать что-то новое.   -  person Shaokan    schedule 29.07.2011
comment
Ах хорошо. Я не интерпретировал свои личные нужды как учебный опыт.   -  person Bart Kiers    schedule 29.07.2011
comment
@Gumbo: технически вы можете использовать автоматы с выталкиванием вниз. Вам не нужна полнота Тьюринга: D. И для Шаокана: тот факт, что HTML имеет контекстно-свободную грамматику, делает любой традиционный язык программирования вполне подходящим. Существует множество инструментов для создания таких парсеров. Мне нравится Antlr с Java (или C#, или Python). Если вы хотите создать такой парсер полностью вручную, вам следует обратиться к любому справочнику по реализации компилятора. Разбор CFG почти всегда хорошо обсуждается в книгах по компиляторам.   -  person ccoakley    schedule 30.07.2011
comment
@ccoakley: Но КПК эквивалентны контекстно-свободным грамматикам, а не регулярным выражениям.   -  person Gumbo    schedule 30.07.2011
comment
@ccoakley Большое спасибо за полезную информацию. +1   -  person Shaokan    schedule 30.07.2011
comment
@Гамбо: Да. Я не выбирал эту гниду, а только ужесточил верхнюю границу того, какие языки подходят. Языки-генераторы синтаксических анализаторов на основе BNF не являются полными по Тьюрингу, но могут вполне подойти для поставленной задачи.   -  person ccoakley    schedule 01.08.2011
comment
Отвечает ли это на ваш вопрос? Написание парсера HTML   -  person ggorlen    schedule 12.11.2020


Ответы (2)


Python, Java и Perl — прекрасные языки для обучения написанию парсера HTML. Perl очень удобен для регулярных выражений, но это не то, что вам нужно для синтаксического анализатора. Писать объектно-ориентированные программы на Python или Java немного приятнее. C/C++/C# и т. д. также распространены для очень быстрых парсеров. Однако в качестве учебного упражнения я рекомендую Python или Java, чтобы вы могли сравнить свою работу со стандартными парсерами.

person Iterator    schedule 29.07.2011

Стандартный способ — использовать дуэт Yacc/Lex; второй делает код, который разбивает код на токены, первый строит код, который преобразует поток токенов в некоторую желаемую структуру.

Есть и более заманчивый вариант, Ragel. Здесь вы просто пишете большую структуру, подобную регулярному выражению, способную сопоставлять весь файл, и определяете хуки, которые будут срабатывать при совпадении определенного подшаблона.

person mbq    schedule 01.08.2011