0
以下是一些代碼,它會導致一些非常奇怪的錯誤,具體取決於在目標文件中的標記emptyList之後解析了什麼 。當使用parsec時Emptylist問題
data Express = Seq [Express]
| ID String
| Num Integer
| BoolConst Bool
| EmptyList String
emptyList :: Parser Express
emptyList = fmap EmptyList (string "[]")
的問題是:
當「[]」之後是任何東西(包括空格)除數字或文件的末尾以外的字符串時,它導致以下錯誤
(line 1, column 6):
unexpected end of input OR unexpected "d"
expecting digit
*** Exception: user error (parse error)
但是,當用[]後面的數字解析時,它報告沒有錯誤。
e.g. "[] " error
"[] a" error
"[] 1" successful
而且應該在民整數來的文件
number :: Parser Express
number = fmap Num integer
該文件將經過「[]」,然而解析將返回解析精而不任何從數據定義中刪除和其他地方只,直到第一次出現「[]」,之後什麼也沒有
在此先感謝。
我們需要查看更多的代碼。如何使用'emptyList'?它使用的其他解析器是什麼? – dave4420 2013-03-08 12:37:40
您應該發佈解析器代碼的其餘部分。我認爲這個問題不在你到目前爲止包含的內容中。 – shang 2013-03-08 12:37:52
問題在於調用'emptyList'的解析器。顯然,它假設它後面緊跟着'eof'或''''。發佈解析器,以便我們可以診斷錯誤。 – 2013-03-08 13:15:59