以下是一些代码导致一些非常奇怪的错误,具体取决于是什么 在目标文件中的令牌空列表之后解析。
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
在“[]”之后,文件将在没有任何内容的情况下解析,但解析只会在第一次出现“[]”之前返回,并且之后没有任何内容
提前致谢。
答案 0 :(得分:0)
问题来自于表达式被分隔的方式,在处理多个表达式时,whiteSpace没有被正确计算。 最初:
seqOfExpr8 =
do list <- (sepBy1 expr8 (string "" ) )
return $ if length list == 1 then head list else Seq list
固定:
seqOfExpr8 =
do list <- (sepBy1 expr8 whiteSpace )
return $ if length list == 1 then head list else Seq list
其中whiteSpace是genTokenParser Type的词法解析器。