我有一个用于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来表达这一点?