FParsec特殊字符串之间的字符串列表

abh*_*hek 4 f# fparsec

在尝试解析时{asdc,456,ghji,abc},我跑了

run specialListParser "{asdc,456,ghji,abc}"
Run Code Online (Sandbox Code Playgroud)

解析器失败了

错误发生在输入流的末尾.
期待:任何不在',',','或'}'中的字符

我根据这个答案定义了我的解析器:

let str : Parser<_> = many1Chars (noneOf ",")
let comma = pstring ","
let listParser = sepBy str comma

let specialListParser = between (pstring "{") (pstring "}") listParser
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

rmu*_*unn 5

看起来你的str解析器正在消耗最终的},所以between永远不会看到它.更改您的str解析器many1Chars (noneOf ",}"),它应该工作.

或者,noneOf [','; '}']也可以工作,并且可能更明确地表达您的意图.