gpt4 book ai didi

parsing - parsec 使用 between 来解析括号

转载 作者:行者123 更新时间:2023-12-04 16:26:13 30 4
gpt4 key购买 nike

例如,如果我想将具有多个括号组的字符串解析为包含每个组的字符串列表

"((a b c) a b c)"

进入
["((a b c) a b c)","( a b c)"]

我将如何使用 parsec 做到这一点? between的使用看起来不错,但似乎不可能用开始值和结束值分开。

最佳答案

我会使用递归解析器:

data Expr = List [Expr] | Term String

expr :: Parsec String () Expr
expr = recurse <|> terminal

哪里 terminal是你的原语,在这种情况下,这些似乎是字符串,所以
 where terminal = Term <$> many1 letter

recurse
       recurse  = List <$>
(between `on` char) '(' ')' (expr `sepBy1` char ' ')

现在我们有一棵漂亮的树 Expr我们可以收集的 s
collect r@(List ts) = r : concatMap collect ts
collect _ = []

关于parsing - parsec 使用 between 来解析括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16182833/

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