Parsing 使用parsec时出现的Emptylist问题
下面是一些导致一些非常奇怪的错误的代码,这取决于 在目标文件中的令牌emptyList之后解析Parsing 使用parsec时出现的Emptylist问题,parsing,haskell,parsec,Parsing,Haskell,Parsec,下面是一些导致一些非常奇怪的错误的代码,这取决于 在目标文件中的令牌emptyList之后解析 data Express = Seq [Express] | ID String | Num Integer | BoolConst Bool | EmptyList String emptyList :: Parser Express emptyList = fmap 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
文件在“[]”之后没有任何内容都可以解析,但是解析只会在第一次出现“[]”之前返回,在“[]”之后不会返回任何内容
提前感谢。问题来自表达式的分隔方式,在处理多个表达式时没有正确考虑空格。 最初:
seqOfExpr8 =
do list <- (sepBy1 expr8 (string "" ) )
return $ if length list == 1 then head list else Seq list
seqOfExpr8=
我们需要查看更多您的代码。如何使用emptyList
?与之一起使用的其他解析器是什么?您还应该发布其余的解析器代码。我认为问题不在于您到目前为止所包含的部分。问题在于调用emptyList
的解析器。显然,它假定后面紧跟着的是eof
或number
。发布该解析器,以便我们可以诊断错误。
seqOfExpr8 =
do list <- (sepBy1 expr8 whiteSpace )
return $ if length list == 1 then head list else Seq list