
Malcolm Wallace wrote:
I can't help thinking that all you really want to do is parse the same data twice, through an intermediate representation. That only requires you to feed the result of one parse into a top-level call to a different parser. For instance:
this = do tmp <- parser1 x <- return (runParser parser2 bar tmp) y <- parser3
... = runParser this foo input
In the example, 'parser2' takes a different state type, and a different source token representation from 'parser1' and 'parser3'. No fearsome stack type is needed. :-)
For the Nth time... The amount of data processed by parser1 needs to depend on the amount of data processed by parser2. (The amount of data output by each parser is very nontrivially related to the amount of data consumed.) How do you propose to pull that off?