gpt4 book ai didi

f# - 使用 FParsec 解析方法参数

转载 作者:行者123 更新时间:2023-12-05 01:13:57 27 4
gpt4 key购买 nike

我正在尝试使用 FParsec 实现方法参数解析器。

我想知道 FParsec 本身是否有一些已经实现的功能可以帮助我实现这个目的?我问这个是因为 FParsec 在处理运算符优先级时提供了工具,所以也可能有一些东西。

解析左括号和右括号非常简单。头疼的问题在于处理以下可能发生的 3 种情况:

方法参数可以包括:

  • 没有参数,
  • 一个论点,
  • 几个参数(所有逗号分隔)。请记住,最后一个参数前面不能有逗号!


  • 如果没有任何内置功能,即使用 <|> 运算符和流复制,我已经有了一些关于如何自己实现这一点的线索,但我想远离那种低级的东西,如果可能的。

    最佳答案

    相信你想用sepBy .

    type AST =
    | Arguments of AST list
    | Argument of string * string

    let parseArguments =
    spaces
    >>. pchar '('
    >>. spaces
    >>. sepBy parseArgument (pchar ',')
    .>> spaces
    .>> pchar ')'
    |>> Arguments

    由 devoured_elysium 编辑:

    上面的代码是正确的,虽然它不能编译。我将在此处发布我的编译版本,以便如果有人只是想毫不费力地试用代码,他们可以这样做。
    type AST =
    | Arguments of AST list
    | Argument of string

    let parseArguments =
    spaces
    >>. pchar '('
    >>. spaces
    >>. sepBy (many1Satisfy isLetter |>> Argument) (pchar ',')
    .>> spaces
    .>> pchar ')'
    |>> Arguments

    test parseArguments "(a,b,c)" //succeed
    test parseArguments "(a,b,c,)" //fail

    关于f# - 使用 FParsec 解析方法参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7199589/

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