我正在閱讀有關編譯器和解析器體系結構,現在我想知道一件事情... 當您有XML,XHTML,HTML或任何基於SGML的語言時,詞法分析器這裏以及代幣是什麼?解析器與詞法分析器和XML
我讀過令牌就像由詞法分析器解析準備話。雖然我沒有找到C語言,C++,Pascal等語言的令牌的問題,那裏有關鍵字,名稱,文字和其他由空白分隔的單詞字符串,但是我有一個問題,因爲沒有'無言以對!只有純文本與標記(標記)交錯。
我想我自己可能是這些標籤和純文本片段是令牌,類似的:[TXT][TAG][TAG][TXT][TAG][TXT][TAG][TAG][TXT]...
。這是非常合理的,因爲SGML不在乎標記分隔符<
和>
內部的內容(當它發現?
或!
作爲下一個字符時它會識別特殊處理指令和定義;評論也屬於該組);以及SGML分詞器可以作爲XML/HTML/XHTML分析器的基礎。
但後來我意識到有可能是<
字符標記爲其他語法的一部分,裏面鼓鼓囊囊:屬性值: - /即使它不太好主意,把屬性值中的<
字符(最好是使用<
爲此),許多瀏覽器和編輯處理這些問題,並將這些<
作爲屬性值的一部分,而不是標籤分隔符。
它使事情變得複雜一點,因爲我沒有看到在詞法分析器中通過簡單的確定性有限自動機(DFA)識別標記的方法。它看起來像是它在標籤內部需要一個單獨的上下文,當它遇到一個屬性值時需要另一個上下文。這需要一堆我認爲的狀態/上下文,因此DFA可能無法處理。我對嗎?
您的觀點是什麼?從標籤(標記)和純文本中製作標記是否好?
這裏:http://www.antlr.org/wiki/display/ANTLR3/Parsing+XML
使用某種不同的技術:他們對待<
和>
(也</
和/>
)作爲分隔標記,他們用GENERIC_ID
爲令牌etc.They標籤內通常移動大多數工作到解析器。但他們也必須更改標記器的上下文:他們在純文本中使用不同的上下文,而在標記中使用不同的上下文(但他們忘記了我認爲的屬性值上下文,因爲第一次出現>
會在其詞法分析器中結束標記)。
那麼解析SGML類語言的最佳方法是什麼?詞法分析器真的用在那裏嗎?如果是,那麼什麼字符串構成了令牌?
感謝您的快速和實質性的回覆:)
嗯..聽起來很合理。還有3個輔助問題: 1.這意味着'''在'ATTRIBUTEVALUE'標記內遇到時不會被視爲'TAGEND'嗎? 2.這些額外的上下文狀態如何與NFA/DFA理論相關?他們是否被視爲正常狀態?或者一些控制DFA操作的高級國家? 3.使用一個解析器來解析SGML標籤並將它吐出作爲XML/HTML/XHTML解析器的標記在它上面會更好嗎?這是一個明智的做法嗎? – SasQ 2010-09-02 03:25:54
@SasQ:1.
2010-09-02 03:33:29