UU解析器只识别空字符串输入?

时间:2015-01-15 13:52:29

标签: haskell uu-parsinglib

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

pSatisfy (const False)并不能完全满足要求。 pEnd似乎不适合此目的。


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

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

1 个答案:

答案 0 :(得分: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符号的方式构建你的语法。