Парсеры связывания; повторный анализ потребляемых данных

У меня есть парсер для запроса 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 ответов

Другие вопросы по тегам