3

我需要一个类型的值,它会在空(长度为 0)输入时Parser ()成功(并返回),并在所有其他情况下失败。()

pSatisfy (const False)不完全符合要求。pEnd甚至似乎不适合这个目的。


pExact 0 pAscii可能是确切的“按定义”解决方案。似乎仍然不起作用:

ghci> runParser "<input>" (pSymbol "aaa" <|> pSymbol "bbb" <|> pExact 0 pAscii) ""
*** Exception: ambiguous parser?
4

1 回答 1

1

似乎 uu-parsinglib 的想法比例如 parsec 更具声明性,所以你只需要pure ()

λ> runParser "<input>" (pSymbol "aaa" <|> pSymbol "bbb" <|> pure "") "aaa"
"aaa"
λ> runParser "<input>" (pSymbol "aaa" <|> pSymbol "bbb" <|> pure "") "bbb"
"bbb"
λ> runParser "<input>" (pSymbol "aaa" <|> pSymbol "bbb" <|> pure "") ""
""
λ> runParser "<input>" (pSymbol "aaa" <|> pSymbol "bbb" <|> pure "") "ccc"
"*** Exception: Failed parsing '<input>' :
Unexpected ''c'' at end.

你需要以不需要魔法EOF符号的方式来构建你的语法。

于 2015-01-15T15:55:21.513 回答