Парсер UU, распознающий только ввод пустой строки?
Мне нужно значение типа Parser ()
который преуспеет (и вернется ()
) на пустом (длина 0) входе и не работает во всех остальных случаях.
pSatisfy (const False)
не совсем делает то, что требуется. pEnd
даже не кажется подходящим для этой цели.
pExact 0 pAscii
может быть точным решением "по определению". Все еще не работает
ghci> runParser "<input>" (pSymbol "aaa" <|> pSymbol "bbb" <|> pExact 0 pAscii) ""
*** Exception: ambiguous parser?
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
условное обозначение.