gpt4 book ai didi

parsing - 如何使用 Parsec 否定解析器

转载 作者:行者123 更新时间:2023-12-04 13:38:56 25 4
gpt4 key购买 nike

我有一个以“\r\r\n”结尾的文件,并使用解析器 eol = string "\r\r\n" :: Parser String来处理它们。要获取这些分隔符之间的行列表,我想使用 sepBy以及一个解析器,它返回 eol 无法捕获的任何文本.查看文档,我没有看到否定解析器的组合器(“除了模式 ”\r\r\n” 之外的任何东西”解析器)。

我试过使用 sepBy (many anyToken) end , 但是 many anyToken似乎很贪婪,没有停下来 eol火柴。我不能使用 many (noneOf "\n\r") ,因为在我的文本中有几个地方是单个 '\n'特点。

有没有一个组合器可以让我得到 string "\r\r\n" 的倒数? ?

最佳答案

恐怕你会倒退。 Parsec 解析器不会分割输入,它们会构建输出。
你越想通过思考你不想要的东西来解析它,它就越难。你需要自下而上思考什么是允许的,而不是自上而下思考你砍的地方。

你应该从你想要的最小、最基本的东西开始。例如,不要将标识符视为空格之前的所有内容,将其视为字母后跟字母数字数据。然后,您可以将它与您期望在一行中的其他内容结合起来,用空格分隔。

line = do
i <- identifier
whiteSpace
string "="
e <- expr
return $ Line i e

只有当您完成了一个解析器,该解析器成功地从一行解析您想要的内容并拒绝无效行时,您才应该解析多行:
lines = sepBy line eol

关于parsing - 如何使用 Parsec 否定解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25840008/

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