Проблема с разбором скобок. Парсек - Хаскелл

Это мой код:

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 .

Как это исправить?

Спасибо!


person Fabricio    schedule 05.06.2014    source источник


Ответы (1)


Вам нужно будет использовать синтаксический анализатор eof, чтобы убедиться, что вы прочитали весь ввод:

myParser = do
    parsed <- expr
    eof
    return parsed

Если вы используете Control.Applicative, это можно упростить до:

myParser = expr <* eof
person porges    schedule 05.06.2014