考虑以下示例语法和解析器:
(* in EBNF:
ap = "a", { "ba" }
bp = ap, "bc"
*)
let ap = sepBy1 (pstring "a") (pstring "b")
let bp = ap .>> (pstring "bc")
let test = run bp "abababc"
我得到了以下输出:
Error in Ln: 1 Col: 7
abababc
^
Expecting: 'a'
显然,sepBy1
函数看到最后一个 b
并期望它接下来是另一个 a
,但当找不到时就会失败。是否有一种 sepBy1
的变体可以回溯到 b
并使解析成功?我为什么不能使用它呢?