相信你想用sepBy
。
type AST =
| Arguments of AST list
| Argument of string * string
let parseArguments =
spaces
>>. pchar '('
>>. spaces
>>. sepBy parseArgument (pchar ',')
.>> spaces
.>> pchar ')'
|>> Arguments
由 devoured_elysium 编辑:
上面的代码是正确的,虽然它没有编译。我将在此处发布我的编译版本,以便如果有人只想尝试代码而不费吹灰之力,他们可以做到。
type AST =
| Arguments of AST list
| Argument of string
let parseArguments =
spaces
>>. pchar '('
>>. spaces
>>. sepBy (many1Satisfy isLetter |>> Argument) (pchar ',')
.>> spaces
.>> pchar ')'
|>> Arguments
test parseArguments "(a,b,c)" //succeed
test parseArguments "(a,b,c,)" //fail