2011-04-03 111 views
2

作爲一名開發人員,我確信我在這裏遠非孤身一人,我總是很想知道什麼是「」,其中。 DOM解析器是我對這種好奇心的榜單之一。我們都知道famous post。我甚至從一些臨時需求和好奇心中一起砍了一塊"O RLY?"DOM解析,結構化文檔遍歷

然而,我需要見面幕後的男人仍然沒有得到滿足。 DOM解析器或任何結構化文檔解析器如何解析文檔?就我的中間Web應用程序開發人員的理解而言,它是遞歸字符串解析和狀態保持邏輯的組合,與我自己的冒險嘗試無異。

魔術師不應該泄露他們的祕密,但嚴重的是,他藏在兔子的哪裏?

回答

4

有一個完善的解析理論,以及無數的工具來支持它。一般來說,您每次看一個字符,然後決定何時您製作的字符構成了一個標記。然後,查看一系列令牌,並確定令牌序列何時構成更高級的語法結構 - 在本例中爲HTML元素。在您識別構造時,您會構建一個節點樹來表示它們(在本例中爲DOM樹)。

那麼你是否熟悉上下文無關的語法,以及像yacc,bison這樣的編譯器編譯器,以及它們更現代的對應?如果你理解這些,DOM解析器不應該是一個謎。

+0

**感謝Ernest Friedman-Hill; **我不熟悉上下文無關的語法。鑑於此,我相信這是我開始閱讀的好地方。字符串標記化的概念對我來說並不完全陌生,儘管實現細節已經避開了我。如果你有任何資源建議,我會很高興聽到他們。 – Dan 2011-04-03 20:19:14

+0

雖然有點詳細說明我的問題;正則表達式(或其他類似的文本匹配技術)是否適合標記化?它們是否在任何生產庫中用於此目的? – Dan 2011-04-03 20:31:59

+0

世代人從「龍書」中學到了:http://www.amazon.com/compilers-principles-techniques-tools-2nd/dp/0321486811。儘管如此,它有點昂貴。互聯網上有大量較少的資源可用:嘗試使用yacc/lex HOWTO:http://ds9a.nl/lex-yacc/cvs/lex-yacc-howto.html。 – 2011-04-03 20:35:08