代码之家  ›  专栏  ›  技术社区  ›  Henrik

绑定分析器;重新分析使用的数据

  •  2
  • Henrik  · 技术社区  · 6 年前

    我有一个用于uri查询的解析器。查询是十六进制/uri编码的。

    我还有一个用于解码字符串的解析器;它从查询参数中生成键值选项对。

    我想做一个两阶段的传递:一个检测查询字符串,另一个解析查询字符串的内容;然后将它们组合成一个fparsec解析器。

    或者简而言之;

    let private Predicate i =
            isPchar i
         || i = 0x2f // /
         || i = 0x3f // ?
    
    let contentP =
        PercentEncoding.makeParser Predicate
    
    let paramsP =
        contentP >>= fun q ->
        run QueryParams.queryParamsP q
    

    然而, contentP 推进charstream的状态,并且 run ... 生成一个parseResult,而不是一个解析器。我真的很想做些 contentP |> Parser.bindSuccess queryParamsP ,同时返回预期的分析器状态。

    如何用fparsec来表达?

    0 回复  |  直到 6 年前