一个UU分析器只识别空字符串输入?
问题描述:
我需要一个类型为Parser()
的值,它将在空(长度为0)输入时成功(并返回()
),并在所有其他情况下失败。一个UU分析器只识别空字符串输入?
pSatisfy (const False)
不完全符合要求。 pEnd
甚至不适用于此目的。
pExact 0 pAscii
可能是确切的“按定义”解决方案。似乎仍然没有工作:
ghci> runParser "<input>" (pSymbol "aaa" <|> pSymbol "bbb" <|> pExact 0 pAscii) ""
*** Exception: ambiguous parser?
答
看来,uu-parsinglib的想法比它更具说明性。秒差距,所以你只要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
符号的方式。