gpt4 book ai didi

haskell - 如何从此 Parsec 错误中删除 "expecting letter or digit"?

转载 作者:行者123 更新时间:2023-12-01 02:38:39 26 4
gpt4 key购买 nike

我在 Parsec 中玩弄一个未完成的解析器,用于类似 Haskell 的语言。

它似乎工作正常,尽管我对错误消息不满意。

  • 输入:"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"

    最佳答案

    我想出了如何获得所需的行为。这是由 alphaNum 引起的:

    identifier = (:) <$> letter <*> (many alphaNum <?> "")
    <?> "identifier"

    "bar"可以继续被解析为标识符。

    关于haskell - 如何从此 Parsec 错误中删除 "expecting letter or digit"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9122988/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com