Запись синтаксического анализатора HTML в Erlang

Я очень плохо знаком с Erlang и как часть моего приобретения знаний осуществления, я хотел бы записать синтаксический анализатор HTML в Erlang.

Я хочу извлечь определенные значения из веб-страницы, возможно, с помощью шаблона для описания, какие данные я хочу извлечь.

Кто-либо может дать мне некоторый совет высокого уровня относительно того, как они приблизились бы к этой проблеме в Erlang?

Я думаю, что должен превратить документ в стопку маркеров, возможно, с помощью конечного автомата для отслеживания, где я относительно вложения и где я в своей стихии.

9
задан richarbernal 22 May 2012 в 22:48
поделиться

2 ответа

Это большая работа, если вы планируете выполнить ее полностью. Лучше всего использовать тот, который предложил Роберто, но если вы решили написать свой собственный проект для ознакомления с Erlang, то вот несколько предложений...

Сначала вы должны решить, будете ли вы кодировать парсер вручную или использовать leex и yecc для создания парсера на основе грамматики. Ручное кодирование может быть лучшим способом обучения, если вы хотите научиться писать на идиоматическом языке Erlang. Написание парсера - отличный способ познакомиться с Erlang; функциональные языки программирования отлично справляются с реализацией парсеров.

Во-вторых, вы должны решить, хотите ли вы генерировать DOM-подобную структуру или использовать SAX-подобную модель обратного вызова, известную в Erlang как поведение. Если вы сделаете последнее, вы можете просто реализовать поведение для создания DOM.

Если вы рассматриваете поведение, вы также можете обратить внимание на параметризованные модули. Это экспериментальная функция, которая может дополнить поведение, позволяя хранить неизменяемое состояние в "экземпляре модуля". Неизвестно, будет ли эта новая возможность поддержана сообществом или нет. (Для некоторых людей это выглядит слишком ОО).

Еще один отличный ресурс - код xmerl. Внимательно следите за тем, как он определяет кодировку символов и анализирует соответствующим образом. HTML (различные стандарты) работает несколько иначе, но важно, чтобы вы учитывали правильную кодировку символов при чтении файла.

Также из xmerl вы можете увидеть, как эта библиотека строит DOM, используя кортежи Erlang. Возможно, вы захотите сделать что-то подобное.

4
ответ дан 4 December 2019 в 21:07
поделиться

Я бы посоветовал вам взглянуть на тот, который включен в Mochiweb:

http://github.com/mochi/mochiweb/blob/master/src/mochiweb_html.erl

Функция parse/1 - это, вероятно, та точка входа, которая вас интересует.

6
ответ дан 4 December 2019 в 21:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: