检测FParsec未解析所有输入的情况

8
你怎样才能检测到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个回答

7

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

尝试一下:

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接