2017-01-13 5 views
3

"abc, def, ghi"와 같은 사용자 입력 텍스트가 있습니다. [ "abc", "def"]와 같이 문자열 목록을 얻으려면 구문 분석하고 싶습니다. 문자열의 구문을 분석하는 fparsec

나는
let str : Parser<_> = many1Chars (noneOf ",") 
let listParser : Parser<_> = many (str);; 

을 시도했지만 항상 나에게 첫 번째 항목에만 [ "ABC"를] 제공합니다. "Def"와 다른 사용자가 결과 목록에 나타나지 않습니다.

답변

3

쉼표 자체는 구문 분석하지 않고 첫 번째 쉼표까지 구문 분석합니다.

는 다른 것들에 의해 분리 된 것들의 목록을 구문 분석 sepBy를 사용하려면

let comma = pstring "," 
let listParser = sepBy str comma 

당신은, "적어도 하나의"구문 분석하는 대신 sepBy1를 사용해야하는 경우.