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 _______________________________________________ Haskell-Cafe mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell-cafe