2011-06-29 65 views
1

我想用類似於BBCode,Markdown,Wikisyntax等的標記語言來編程解析器,使用像Python或Perl這樣的高級語言。它應該具有切片,代碼高亮,自動鏈接創建,嵌入圖像,但允許HTML更復雜的格式。如何爲標記編寫解析器?

有沒有人做過類似的事情,或者與這些系統密切合作,並且可以總體描述如何有效地完成這項工作? 儘管對於這樣一個小系統來說效率並不是真正的問題,但它通常是有利的。 特別是我想了解是否有比使用正則表達式這樣的程序更有效的方法。

+6

是否有原因*不*使用任何現有的解析器(和語言)?有可能你會遇到很多問題,其他人已經經歷過(並克服)的角落案例等。 – jensgram

+0

對不起,我關閉了JavaScript。這個問題之前已經提出過,因此可以關閉。雖然我希望對這個應用程序進行一般性討論,但這可能不是這個地方。 – moileroi

+1

您可以自由刪除該問題而不受罰。沒有答案或投票,所以它不會讓任何人失望。如果你確信這是事實,那麼比浪費每個人的時間等待它積累接近的選票更好。 –

回答

0

爲了您的一般性討論...

您應該具有以下藍圖開始:

  • 你需要在整個數據charwise迭代
  • 你需要它的上下文來識別每一個字符,它可能是標籤打開('<','['等)或只是字符。這可以通過使用escape-char(如某些語言中的反斜槓)觸發擒縱標誌來完成。如果你使用這種方法,你還需要檢查逃生擒縱機構。
  • 您可能還需要一些標誌,告訴您在註釋或特殊數據部分中,這些部分可能有不同的擒縱規則。
  • 您需要構建一個樹狀結構或至少一些用於嵌套標記的堆棧。這就是爲什麼正則表達式是一個壞主意的原因:它們不僅要花費太多的開銷,而且還希望在下面的剪切中獲得第二個x(x =任何標記)的正確結束標記時,它們也沒用:<x><x><x></x><x><x></x></x><x></x><!-- </x> -->this one →</x><x></x></x>