2010-06-24 20 views
9

Jestem bardzo nowy w Erlangu i jako część mojego ćwiczenia, chciałbym napisać parser HTML w Erlang.Pisanie parsera HTML w Erlang

Chcę wyodrębnić pewne wartości ze strony internetowej, być może za pomocą wzorca, aby opisać dane, które chcę wyodrębnić.

Czy ktokolwiek może zaoferować mi porady na wysokim poziomie, jak podejść do tego problemu w Erlangu?

Myślę, że potrzebuję przekształcić dokument w stos żetonów, być może za pomocą skończonej maszyny stanów, aby śledzić, gdzie jestem w odniesieniu do zagnieżdżania i gdzie jestem w elemencie.

Odpowiedz

4

To jest wielka praca, jeśli planujesz być kompletny. Najlepiej użyć tego, który sugeruje Roberto, ale jeśli jesteś zdecydowany napisać własne jako projekt, aby zapoznać się z Erlangiem, oto kilka sugestii ...

Najpierw powinieneś zdecydować, czy zamierzasz zakoduj swój parser lub użyj leex and yecc, aby wygenerować swój parser z gramatyki. Kodowanie ręczne może być lepszym doświadczeniem, jeśli chcesz nauczyć się pisania idiomatycznego Erlanga. Pisanie parsera to doskonały sposób na przedstawienie się Erlangowi; języki programowania funkcjonalnego excel w implementujących parserach.

Po drugie, powinieneś zdecydować, czy chcesz wygenerować strukturę podobną do DOM, czy wykonać podobny do SAX model wywołania zwrotnego znany jako behaviour w Erlang. Jeśli zrobisz to drugie, możesz po prostu zaimplementować zachowanie, aby utworzyć DOM.

Jeśli spojrzysz na zachowania, możesz również zajrzeć do parametrized modules. Jest to funkcja eksperymentalna, która może uzupełniać zachowania, umożliwiając przechowywanie niezmiennego stanu w "instancji modułu". Nie wiadomo, czy nowa funkcja będzie wspierana przez społeczność, czy nie. (Dla niektórych osób po prostu wygląda zbyt OO).

Kolejnym doskonałym źródłem informacji jest kod xmerl. Płać blisko, jak określa kodowanie znaków i odpowiednio analizuje. HTML (varioust standards) działa trochę inaczej, ale ważne jest, aby wziąć pod uwagę właściwe kodowanie znaków podczas czytania pliku.

Również z xmerl widać, jak ta biblioteka konstruuje DOM za pomocą krotek Erlanga. Możesz chcieć zrobić coś podobnego.

+1

Być może pochopnie sugerowałem, że patrzysz na sparametryzowane moduły. Istnieją dobre argumenty przemawiające za jego unikaniem (http://stackoverflow.com/questions/2291155/what-alternatives-are-there-to-parameterised-modules-in-erlang). – dsmith

+0

Dziękuję za odpowiedź, jest to ćwiczenie edukacyjne, a nie coś, co będzie używane przez wielu. XMerl jest doskonałym źródłem do obejrzenia. – dagda1