F# FParsec特殊字符之间的字符串列表
当试图解析F# FParsec特殊字符之间的字符串列表,f#,fparsec,F#,Fparsec,当试图解析{asdc,456,ghji,abc}时,我运行 run specialListParser "{asdc,456,ghji,abc}" 解析器失败,原因是 错误发生在输入流的末尾。 应为:任何不在“,”,“,”或“}”中的字符 我基于以下内容定义了解析器: let str:Parser=manychars(noneOf“,”) 让逗号=pstring“,” 让listParser=sepBy str逗号 让specialListParser=between(pstring“{”)(
{asdc,456,ghji,abc}
时,我运行
run specialListParser "{asdc,456,ghji,abc}"
解析器失败,原因是
错误发生在输入流的末尾。应为:任何不在“,”,“,”或“}”中的字符 我基于以下内容定义了解析器:
let str:Parser=manychars(noneOf“,”)
让逗号=pstring“,”
让listParser=sepBy str逗号
让specialListParser=between(pstring“{”)(pstring“}”)listParser
我遗漏了什么?看起来您的
str
解析器正在使用最后的}
,因此之间的永远看不到它。将str
解析器更改为manychars(noneOf“,}”)
,它应该可以工作
或者,noneOf[',';'}']
也会起作用,并且可能会更明确地说明您的意图。“不起作用”并不能很好地描述问题。请比“不起作用”更具体一些。您收到了什么错误消息?尝试从中实现test
功能,然后运行testspeciallistparser“{def,ghi,jkl}”
。它输出的是什么?基本上,您还没有提供一个示例来演示您的精确问题,在您告诉我们更多信息之前,很难给您提供有用的答案。现在我看到了您的错误消息,我能够自己重现问题并解决它。@rumnn感谢您的回复。您的建议解决了成功的场景,但它并没有给出负面场景(解析器应该抛出错误)。我不理解您所说的“它没有给出负面场景”是什么意思。你能换个说法吗?或者给出一个输入示例,其中解析器应该抛出一个错误,但没有抛出?@rumn请忽略我之前的评论。
let str : Parser<_> = many1Chars (noneOf ",")
let comma = pstring ","
let listParser = sepBy str comma
let specialListParser = between (pstring "{") (pstring "}") listParser