2013-01-08 77 views
2

解析鬍鬚模板時,Parsec識別註釋時出現問題。
各種小鬍子標籤都以{{開頭,包括塊註釋({{!comment}})。 我已經對我的TokenParser中的{{!}}設置了評論開始和評論。
每當我向模板添加評論時,Parsec都會抱怨評論意外。
它需要一個mustache變量,因爲這是匹配{{的唯一標記。Parsec無法識別塊註釋

Parsec何時刪除評論?我認爲這會發生在源打擊我的解析器之前?

+0

你能告訴我們你的解析代碼的相關部分嗎? – asm

+1

您可能有興趣查看我在'mustache2hs'包中的鬍子的Parsec解析器。 – singpolyma

+0

mustache2hs是一個很酷的主意! 我看了一下,它可以從一些模塊化中受益:-)。 我的解析器建立一個XML /鬍子AST來做一些DOM的東西,所以你的解析器不適用於我的情況(它已經編碼了......) – andsens

回答

7

Parsec不刪除評論。在TokenParser,意見在白色空間納入,所以

whiteSpace tokenParser 

跳過註釋和普通的空白字符(空格,製表符,換行符,...)。

通常情況下,您使用lexeme parser跳過跟隨詞位的所有空格,然後您只需要一個初始空白跳過頂級解析器跳過源中的任何前導空格,之後,所有空格(包括評論)自動處理(由,makeTokenParser創建)。

如果您不使用lexeme並手動處理空白區域,則必須注意作爲註釋分隔符前綴的標記/詞位。如果首先嚐試前綴,那將會成功,但只會佔用註釋分隔符的一部分,在這種情況下,將爲變量解析器留下'!',然後失敗。

+0

oooh,當然!我有一些「重要的空白」的東西,這就是爲什麼我經常簡單地使用Char.string解析器。當我在XML屬性(我使用詞法分析器)之間放置註釋時,它實際上起作用。謝謝! – andsens

+0

這也恰好是Parsec問題的解決方案,其中輸入開頭的註釋或空白不會被忽略。 – Xilexio