0

ターゲット ファイルのトークン 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

ファイルは "[]" の後に何もなくても正常に解析されますが、解析は "[]" が最初に出現するまでしか返されず、その後は何も返されません。

前もって感謝します。

4

1 に答える 1

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はgenTokenParserTypeの語彙素パーサーです。

于 2013-03-08T22:18:19.047 に答える