检测FParsec何时未解析所有输入

时间:2018-05-27 14:34:33

标签: f# fparsec

如何在不解析所有输入的情况下检测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 :(得分:6)

在正则表达式中有一个与eof对应的特殊解析器$

试试这个:

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

这确保解析器仅在输入完全消耗时才成功。