16 May 21:33
Re: Proving my point
Achim Schneider <barsoap <at> web.de>
2008-05-16 19:33:47 GMT
2008-05-16 19:33:47 GMT
Andrew Coppin <andrewcoppin <at> btinternet.com> wrote: > Wait... "unexpected end of input; expecting [...] end of input [...]" > > That's just *wrong*...!> > But don't despaire - show us your parser and what it's supposed to > parse, and I'm sure somebody [maybe even me] will be able to tell you > what's up. This is what I came up with while simplifying the parser: import Text.Parsec identifier = do whiteSpace s <- many1 letter whiteSpace return s whiteSpace = do eof <|> ((many $ choice [ char ' ', newline ]) >> return ()) main = do let syn = runParser (do char '\\' many1 identifier char ':' whiteSpace identifier whiteSpace ) () "" "\\a b" print syn Admittedly, this is a quite degenerate case crouching in at least 10 corners simultaneously. Anyway, I get % ./test Left (line 1, column 5): unexpected end of input expecting end of input, letter or ":" and if I change it to whiteSpace = do (many eof >> return ()) <|> ((many $ choice [ char ' ', newline ]) >> return ()) Left (line 1, column 3): unexpected " " expecting letter, end of input or ":" Please, please don't ask me for the rationale of using eof like this, you would get the same answer as if you'd ask me why I cast a stone into the sea. -- -- (c) this sig last receiving data processing entity. Inspect headers for past copyright information. All rights reserved. Unauthorised copying, hiring, renting, public performance and/or broadcasting of this signature prohibited.
>
> But don't despaire - show us your parser and what it's supposed to
> parse, and I'm sure somebody [maybe even me] will be able to tell you
> what's up.
This is what I came up with while simplifying the parser:
import Text.Parsec
identifier = do
whiteSpace
s <- many1 letter
whiteSpace
return s
whiteSpace = do
eof <|> ((many $ choice [ char ' ', newline ]) >> return ())
main = do
let syn = runParser (do
char '\\'
many1 identifier
char ':'
whiteSpace
identifier
whiteSpace
) () "" "\\a b"
print syn
Admittedly, this is a quite degenerate case crouching in at least 10
corners simultaneously. Anyway, I get
% ./test
Left (line 1, column 5):
unexpected end of input
expecting end of input, letter or ":"
and if I change it to
whiteSpace = do
(many eof >> return ())
<|> ((many $ choice [ char ' ', newline ]) >> return ())
Left (line 1, column 3):
unexpected " "
expecting letter, end of input or ":"
Please, please don't ask me for the rationale of using eof like this,
you would get the same answer as if you'd ask me why I cast a stone into
the sea.
RSS Feed