2010-06-24 13 views
9

Ich bin sehr neu in Erlang und als Teil meiner Lernübung möchte ich einen HTML-Parser in Erlang schreiben.Schreiben eines HTML-Parsers in Erlang

Ich möchte bestimmte Werte von einer Webseite extrahieren, vielleicht mithilfe eines Musters, um zu beschreiben, welche Daten ich extrahieren möchte.

Kann mir jemand einen hochrangigen Rat geben, wie sie dieses Problem in Erlang angehen würden?

Ich denke, ich muss das Dokument in einen Stapel von Tokens verwandeln, vielleicht mithilfe einer endlichen Zustandsmaschine, um zu verfolgen, wo ich bin in Bezug auf Verschachtelung und wo ich im Element bin.

Antwort

4

Dies ist ein großer Job, wenn Sie vorhaben, vollständig zu sein. Am besten benutzt du Roberto, aber wenn du entschlossen bist, dein eigenes Projekt zu schreiben, um dich mit Erlang vertraut zu machen, hier sind einige Vorschläge ...

Du solltest zuerst entscheiden, ob du zur Hand gehen willst. Codieren Sie Ihren Parser oder verwenden Sie leex and yecc, um Ihren Parser aus einer Grammatik zu generieren. Hand-Codierung könnte eine bessere Lernerfahrung sein, wenn Sie lernen möchten, idiomatische Erlang zu schreiben. Das Schreiben eines Parsers ist eine ausgezeichnete Möglichkeit, sich Erlang vorzustellen; funktionale Programmiersprachen zeichnen sich durch die Implementierung von Parsern aus.

Zweitens sollten Sie entscheiden, ob Sie eine DOM-ähnliche Struktur generieren oder ein SAX-ähnliches Callback-Modell namens behaviour in Erlang erstellen möchten. Wenn Sie Letzteres tun, können Sie einfach das Verhalten implementieren, um ein DOM zu erstellen.

Wenn Sie sich Verhaltensweisen ansehen, können Sie auch in parametrized modules suchen. Dies ist ein experimentelles Merkmal, das Verhaltensweisen ergänzen kann und es ermöglicht, dass ein unveränderlicher Zustand in einer "Instanz eines Moduls" gespeichert wird. Es ist nicht bekannt, ob diese neue Funktion von der Community unterstützt wird oder nicht. (Für manche Leute sieht es einfach zu OO).

Eine weitere hervorragende Ressource ist der Code xmerl. Pay nah an, wie es die Zeichenkodierung bestimmt und entsprechend analysiert. HTML (verschiedene Standards) funktionieren etwas anders, aber es ist wichtig, dass Sie die korrekte Zeichencodierung berücksichtigen, wenn Sie die Datei lesen.

Auch von Xmerl können Sie sehen, wie diese Bibliothek ein DOM mit Erlang Tupeln erstellt. Vielleicht möchten Sie etwas Ähnliches tun.

+1

Vielleicht habe ich voreilig vorgeschlagen, dass Sie in parametrisierte Module schauen. Es gibt gute Argumente dafür, es zu vermeiden (http://stackoverflow.com/questions/2291155/what-alternatives-are-there-to-parameterized-modules-in-erlang). – dsmith

+0

Vielen Dank für Ihre Antwort, dies ist eine Lernübung und nicht etwas, das von vielen genutzt wird. XMerl ist eine großartige Ressource zum Betrachten. – dagda1