Парсер 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 условное обозначение.

Другие вопросы по тегам