parens解析问题。 Parsec - Haskell

时间:2014-06-05 01:51:08

标签: parsing haskell parsec

这是我的代码:

expr :: Parser Integer
expr = buildExpressionParser table factor <?> "expression"

table :: [[ Operator Char st Integer ]]
table = [
    [ op "*" (*) AssocLeft],
    [ op "+" (+) AssocLeft]
    ]
  where
    op s f assoc = Infix (do { string s ; return f }) assoc

factor = do { char '(' ; x <- expr ; char ')' ; return x }
    <|> number
    <?> "simple expression"


number :: Parser Integer
number = do { ds <- many1 digit; return read(ds))) } <?> "number"

这与以下表达式完美配合:(10 + 10)* 10。 但我有以下问题:10 +10) 这必须返回一个解析错误(最后只有1个括号),而是返回20。

如何解决这个问题?

谢谢!

1 个答案:

答案 0 :(得分:3)

您需要使用eof解析器来确保您已阅读整个输入内容:

myParser = do
    parsed <- expr
    eof
    return parsed

如果您正在使用Control.Applicative,则可将其简化为:

myParser = expr <* eof