2009-11-18 12 views
6

¿Cuál es la forma preferida de generar errores (ParseError) en Parsec? Obtuve un código dentro de un analizador que realiza una comprobación y si la comprobación falla, se debe devolver un ParseError (es decir, Left ParseError cuando se ejecuta parse).Elevar ParseError en Haskell/Parsec

Respuesta

5

Puede usar Text.ParserCombinators.Parsec.Prim.unexpected y Control.Monad.fail para esto. Ambos toman un argumento String que significa el mensaje de error y devolverá (en este caso) un valor de tipo GenParser tok st a. Para obtener más información, consulte Text.ParserCombinators.Parsec.Error, específicamente Message. Allí puede leer qué función usar, en cuyo caso (aunque ambos significan un error de análisis, son semánticamente ligeramente diferentes).

+0

¿Puede explicar cómo combinar estos con analizadores? por ejemplo, cuando se tiene un analizador como este: 'p = someparser <|> falla" error "' la cosa es cuando someparser falla su mensaje de error no desaparece, sino que se le agrega el "error" de cadena. – niceman

Cuestiones relacionadas