
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