解析具有重叠分隔符purescript-string-parsers的整数列表

时间:2017-05-30 19:35:45

标签: purescript

让我用这个例子:

1 2 3 / 4 5 6

应解析为:

[[1, 2, 3], [4, 5, 6]]

所以我写道:

p1 :: Parser (List Char)
p1 = sepBy anyDigit (char ' ')

p2 :: Parser (List (List Char))
p2 = sepBy p1 (string " / ")
唉,这失败了:

(Left Character '/' is not a digit)

走哪条路?

1 个答案:

答案 0 :(得分:2)

问题是分隔符/以空格开头,因此第一个解析器提交解析其分隔符然后解析下一个数字。

您有几个选择。您可以更改p1,以便明确查找空格而不是运算符:

sepBy anyDigit (char ' ' <* notFollowedBy (char '/'))

或者,让你的词汇急切地消耗任何尾随空格:

myDigit = anyDigit <* many whitespace

p1 = many1 myDigit
p2 = sepBy p1 (char '/' <* many whitespace)

另一种选择是将解析器拆分为初始的lexing阶段,将输入拆分为lexemes,删除空格。然后,您将无法使用string-parsers,但purescript-parsing可以处理令牌流。

相关问题