Определить, когда FParsec не проанализировал все входные данные - PullRequest
0 голосов
/ 27 мая 2018

Как можно определить, когда синтаксический анализатор FParsec остановился, не анализируя все входные данные?

Например, следующий синтаксический анализатор p останавливается, когда находит неожиданный символ d и не продолжает анализировать оставшуюся часть ввода.

let test p str =
    match run p str with
    | Success(result, _, _)   -> printfn "Success: %A" result
    | Failure(errorMsg, s, _) -> printfn "Failure: %s %A" errorMsg s 

let str s = pstring s

let a = str "a" .>> spaces
let b = str "b" .>> spaces
let p = many (a <|> b)

test p "ab a  d bba  " // Success: ["a"; "b"; "a"]

1 Ответ

0 голосов
/ 27 мая 2018

Существует специальный синтаксический анализатор eof, который соответствует $ в регулярном выражении.

Попробуйте это:

let p = many (a <|> b) .>> eof

Это гарантирует, что синтаксический анализатор будет успешным, только если вход был полностьюпотребляются.

...