Haskell 秒差距空间解析错误

标签 haskell parsec

我有

stringparse = mstring
          <$> char '"'
          <*> (many alphaNum <|> many space)
          <*> char '"'
    where mstring a b c = [a] ++ b ++ [c]

当我这样做的时候,

解析 stringparse """\"hello\" 我得到 正确的 "\"hello\""

当我这样做的时候,

解析 stringparse """\"\"" 我得到正确的 "\"\""

但是当我这样做时,

解析 stringparse """\"\""解析 stringparse """\"he llo\""

它不起作用。

我收到错误,

Left (line 1, column 2):
unexpected " "
expecting letter or digit or "\""

Left (line 1, column 4):
unexpected " "
expecting letter or digit or "\""

分别。

我不明白为什么代码不能正确解析空格。

最佳答案

因为你这样做many alphaNum <|> many spacemany接受 0 作为可接受的字符数,它总是成功。这与 * 的行为相同。在正则表达式中。

所以在 <|>它永远不会失败并调用正确的一方。所以你是说“尝试尽可能多的 alphaNum ,然后采取 "

你想要的是

many (alphaNum <|> space) 

换句话说,“尽可能多的 alphaNumspace ”。

关于Haskell 秒差距空间解析错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18777191/

相关文章:

haskell - 无意义编程时 readFile 和 IO monad 之间没有合作

haskell - `sepBy`(秒差距)中分隔符解析器的渴望

haskell - 如何在 Haskell 中使用 (.)

haskell - 如果跌倒

haskell - 用 Haskell 编码 "Less Than"

haskell - 在 Haskell 中将字节转换为 Int64s/Floats/Doubles

haskell - 为什么使用 Parsec 的 buildExpressionParser 时只解析第一个定义的中缀运算符?

haskell - 如何使用 parsec 解析整数

parsing - 使用秒差距解析命令式语言的奇怪行为

parsing - Haskell 解析 - Parsec 与 Alex