这是一些导致一些非常奇怪的错误的代码,具体取决于在目标文件中的令牌 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
还应该从数据定义和文件中的其他地方删除 Num Integer
number :: Parser Express
number = fmap Num integer
该文件将在“[]”之后没有任何内容进行解析,但是解析只会返回到第一次出现“[]”,之后什么都没有
提前致谢。