2010-06-24 83 views
9

我對Erlang非常新,並且作爲我學習練習的一部分,我想在Erlang中編寫一個HTML解析器。在Erlang中編寫一個HTML解析器

我想從網頁中提取某些值,可能使用一種模式來描述我想要提取的數據。

任何人都可以爲我提供一些關於他們如何在Erlang中解決這個問題的高級建議嗎?

我想我需要把文檔轉換成一堆令牌,也許使用一個有限狀態機來跟蹤我在嵌套和我在元素中的位置。

回答

4

如果您打算完成這項工作,這是一項很大的工作。您最好使用Roberto建議的那個,但是如果您決定編寫自己的項目來熟悉Erlang,這裏有一些建議...

您應該先決定是否要手動創建,編碼解析器或使用leex and yecc從語法生成解析器。如果你想學習如何編寫慣用的Erlang,手寫代碼可能是一種更好的學習體驗。編寫解析器是向Erlang介紹自己的絕佳方式;函數式編程語言擅長實現解析器。其次,您應該決定是否要生成類似DOM的結構,或者在Erlang中執行類似SAX的回調模型behaviour。如果你使用後者,你可以簡單地實現這個行爲來創建一個DOM。

如果你看看行爲,你可能也想看看parametrized modules。這是一個可以補充行爲的實驗性功能,允許將不可變狀態存儲在「模塊實例」中。目前還不知道這個新功能是否會得到社區的支持。 (對於一些人來說,它看起來太OO)。

另一個優秀的資源是xmerl的代碼。密切關注它如何確定字符編碼並進行相應的解析。 HTML(各種標準)的工作方式略有不同,但重要的是在閱讀文件時要考慮到正確的字符編碼。

同樣來自xmerl,您可以看到該庫如何使用Erlang元組構造DOM。你可能想要做類似的事情。

+1

也許我草率建議你看一下參數化的模塊。有避免它的好論據(http://stackoverflow.com/questions/2291155/what-alternatives-are-there-to-parameterised-modules-in-erlang)。 – dsmith 2010-06-25 01:32:41

+0

謝謝你的回答,這是一個學習練習,而不是許多人會用到的東西。 XMerl是一個很好的資源。 – dagda1 2010-06-25 09:44:53