2010-06-24 10 views
9

Soy nuevo en Erlang y como parte de mi ejercicio de aprendizaje, me gustaría escribir un analizador HTML en Erlang.Escribiendo un analizador HTML en Erlang

Quiero extraer ciertos valores de una página web, quizás usando un patrón para describir qué datos quiero extraer.

¿Alguien puede ofrecerme algún consejo de alto nivel sobre cómo abordarían este problema en Erlang?

Creo que necesito convertir el documento en una pila de tokens, quizás usando una máquina de estados finitos para rastrear dónde estoy con respecto a la anidación y dónde estoy en el elemento.

Respuesta

4

Este es un gran trabajo si planea ser completo al respecto. Lo mejor es usar el que Roberto sugiere, pero si está decidido a escribir el suyo como un proyecto para familiarizarse con Erlang, aquí hay algunas sugerencias ...

Primero debe decidir si va a entregar codifique su analizador o use leex and yecc para generar su analizador a partir de una gramática. La codificación manual podría ser una mejor experiencia de aprendizaje si quieres aprender a escribir idiomático Erlang. Escribir un analizador es una excelente manera de presentarte a Erlang; los lenguajes de programación funcionales se destacan en la implementación de analizadores.

En segundo lugar, debe decidir si desea generar una estructura tipo DOM o hacer un modelo de devolución de llamada tipo SAX conocido como behaviour en Erlang. Si haces esto último, puedes simplemente implementar el comportamiento para crear un DOM.

Si observa los comportamientos, es posible que también desee consultar parametrized modules. Esta es una característica experimental que puede complementar comportamientos, permitiendo que el estado inmutable se almacene dentro de una "instancia de un módulo". No se sabe si esta nueva característica será o no compatible con la comunidad. (Para algunas personas solo se ve demasiado OO).

Otro recurso excelente es el código xmerl. Pague cerca de cómo determina la codificación de caracteres y analiza en consecuencia. HTML (estándares de varioust) funcionan ligeramente diferente, pero es importante que tenga en cuenta la codificación de caracteres adecuada cuando lea el archivo.

También desde xmerl, puede ver cómo esa biblioteca construye un DOM usando las tuplas de Erlang. Es posible que desee hacer algo similar.

+1

Quizás me apresuré a sugerirle que busque módulos parametrizados. Hay buenos argumentos para evitarlo (http://stackoverflow.com/questions/2291155/what-alternatives-are-there-to-parameterised-modules-in-erlang). – dsmith

+0

Gracias por su respuesta, este es un ejercicio de aprendizaje en lugar de algo que muchos usarán. XMerl es un gran recurso para mirar. – dagda1