Как можно определить, когда синтаксический анализатор 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"]