abhishek
abhishek

Reputation: 373

FParsec list of string between special char

When trying to parse {asdc,456,ghji,abc} and I run

run specialListParser "{asdc,456,ghji,abc}"

the parser fails with

The error occurred at the end of the input stream.
Expecting: any char not in ‘,’, ',' or '}'

I defined my parser based on this answer:

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

let specialListParser = between (pstring "{") (pstring "}") listParser

What am I missing?

Upvotes: 4

Views: 299

Answers (1)

rmunn
rmunn

Reputation: 36718

Looks like your str parser is consuming the final }, so that between never gets to see it. Change your str parser to be many1Chars (noneOf ",}") and it should work.

Alternately, noneOf [','; '}'] would also work, and might be more explicit about your intentions.

Upvotes: 5

Related Questions