2010-06-24 2 views
9

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

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

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

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

ответ

4

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

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

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

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

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

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

+1

Возможно, я поспешил предложить вам изучить модули с параметрами. Есть хорошие аргументы в пользу его устранения (http://stackoverflow.com/questions/2291155/what-alternatives-are-there-to-parameterized-modules-in-erlang). – dsmith

+0

Спасибо за ваш ответ, это учебное упражнение, а не то, что будет использоваться многими. XMerl - отличный ресурс для просмотра. – dagda1