4
我在Parsec中玩弄了一个Haskell式语言的未完成解析器。如何从此Parsec错误中删除“期待的字母或数字”?
它似乎工作正常,虽然我不满意的错误消息。
- 输入:
"foo (bar"
- 错误:
expecting letter or digit, operand or ")"
我怎样才能得到它只能打印expecting operand or ")"
?我曾尝试添加<?>
,但无法使其正常工作。
这里是我的代码:
separator = skipMany1 space
<?> ""
identifier :: Parser String
identifier = (:) <$> letter <*> many alphaNum
<?> "identifier"
number :: Parser String
number = many1 digit
<?> "numeric literal"
primitiveExpr :: Parser String
primitiveExpr = (identifier
<|> number)
<?> "primitive expression"
expr :: Parser()
expr = do identifier
spaces <?> ""
sepBy operand separator
return()
parenExpr :: Parser String
parenExpr = do char '('
expr
char ')'
return "foo"
<?> "parenthesized expression"
operand = parenExpr <|> primitiveExpr
<?> "operand"