gpt4 book ai didi

Haskell parsec 解析一串项目

转载 作者:行者123 更新时间:2023-12-04 08:38:57 34 4
gpt4 key购买 nike

我有一个列表,我需要解析除最后一个元素之外的所有元素都需要由一个解析器解析,最后一个元素需要由另一个解析器解析。

a = "p1 p1b ... p2"
or
a = "p2"

原来我试过
parser = do parse1 <- many parser1
parse2 <- parser2
return AParse parse1 parse2

问题是 parse1 可以使用 parse2 输入。所以 parse1 总是消耗整个列表,而 parse2 什么都没有。

有没有办法说将 parse1 应用于字符串中最后一个元素之外的所有内容,然后应用 parse2?

最佳答案

怎么样:

parseTrain car caboose = choice
[ fmap (:[]) $ try (caboose `endBy` eof),
, liftM2 (:) car (parseTrain car caboose)
[

eof 困扰我,因为这使得这个解析器不是组合的。 IE。你不能说:
char '(' >> parseTrain p1 p2 >> char ')'

对于解析器来说,在组合上执行此操作非常困难。它应该如何知道继续使用 char ')',而不试图捕获每一个机会并查看它是否失败?这样做可以成倍增长。

如果你需要它是组合的,你的问题是否有一些你可以利用的额外结构?例如,您能否解析所有元素的列表,然后在事后处理最后一个元素?

关于Haskell parsec 解析一串项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2448683/

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