[Haskell-cafe] Parsec question
John Goerzen
jgoerzen at complete.org
Fri Nov 19 10:34:44 EST 2004
On Fri, Nov 19, 2004 at 02:56:38PM -0000, Bayley, Alistair wrote:
> I've also used Parsec for separated lexer + parser and currently have
> something like this to invoke them:
>
> testParse inputString = do
> case (parse myLexer "" inputString) of
> Left err -> fail ("lexical error: " ++ err)
> Right tokens ->
> case (parse myParser "" tokens) of
> Left err -> fail ("parse error: " ++ err)
> Right result -> return result
>
> ... or was this the "manual startup" that you were referring to? The above
> seems clunky to me, so I'd also welcome suggestions for piping the lexer
> output into the parser.
Yep, that is exactly the idea I took. Works, but just doesn't seem
right.
> What do you mean by "makes position calculations very complex"? Are you
> talking about reporting the position of lexical or parse errors? (If so,
> Parsec supports this quite well.)
The parse errors. I did take to passing around pairs of SourcePos, Tok
around. It works, but I had to then write custom token functions to
handle them. I'd rather be able to just access the other parser like
normal (refer to it in a do block or whatever), so I don't have to
manually handle it. I suppose "very complex" was an exaggeration,
looking back.
-- John
More information about the Haskell-Cafe
mailing list