2009-11-18 13 views
6

Qual è il modo migliore per aumentare gli errori (ParseError) in Parsec? Ho ottenuto del codice all'interno di un parser che esegue un controllo e se il controllo fallisce è necessario restituire ParseError (ad esempio Left ParseError durante l'esecuzione di parse).Raise ParseError in Haskell/Parsec

risposta

5

È possibile utilizzare Text.ParserCombinators.Parsec.Prim.unexpected e Control.Monad.fail per questo. Entrambi accettano un argomento String che indica il messaggio di errore e restituiranno (in questo caso) un valore di tipo GenParser tok st a.

Per ulteriori informazioni, vedere Text.ParserCombinators.Parsec.Error, in particolare Message. Qui puoi leggere quale funzione usare in quel caso (anche se entrambi significano un errore di analisi, sono semanticamente leggermente differenti).

+0

puoi approfondire come combinarli con i parser? per esempio quando si ha parser come questo: 'p = someparser <|> errore" errore "" la cosa è quando someparser fallisce il suo messaggio di errore non scompare, invece la stringa "errore" viene aggiunta ad essa. – niceman

Problemi correlati