gpt4 book ai didi

parsing - 创建类型为 Parser a -> Parser b -> Parser (要么 a b)的解析器组合器

转载 作者:行者123 更新时间:2023-12-02 21:25:16 27 4
gpt4 key购买 nike

我想解析一些文本,其中某些字段在大多数情况下都具有结构,但偶尔(由于特殊大小写、拼写错误等)该结构会丢失。

例如常规情况是 Cost: 5,但偶尔会显示 Cost: 5mCost: 3 + 1 per ally,或其他一些随机内容.

在正常解析器 (p) 无法工作的情况下,我想回退到仅将整行视为字符串的解析器。

为此,我想创建一个 Parser a -> Parser b -> Either a b 类型的组合器。但是,如果不执行诸如 case parse p ""txt of ... 之类的操作,我无法弄清楚如何检查尝试查看第一个解析器是否成功的结果。

我看不到组合器中的内置内容,但我确信有一些简单的方法可以解决我所缺少的问题

最佳答案

我想你想要这样的东西

eitherParse :: Parser a -> Parser b -> Parser (Either a b)
eitherParse a b = fmap Left (try a) <|> fmap Right b

try 只是为了确保如果 a 消耗了一些输入然后失败,您将正确回溯。然后,您可以使用运行解析器的正常方法来产生 Either ParseError (Either a b)

这很容易转换成您的Either a b

case parse p "" str of
Right (Left a) -> useA a
Right (Right b) -> useB b
Left err -> handleParserError err

关于parsing - 创建类型为 Parser a -> Parser b -> Parser (要么 a b)的解析器组合器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20180053/

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