Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parsing 使用parsec时出现的Emptylist问题_Parsing_Haskell_Parsec - Fatal编程技术网

Parsing 使用parsec时出现的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

下面是一些导致一些非常奇怪的错误的代码,这取决于 在目标文件中的令牌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