I think parser generators are a pretty nice tool to have in your programming toolkit so after playing around with some I wrote my own just to understand things better and it turned out to be better than I expected so I've stuck with it.
One thing that has been bugging me lately though is error reporting and recovery. I don't do a very good job of it. I know one method is token synchronization but the trail seems to stop there. Other than rolling your own recursive descent parser and including all sorts of heuristics what are some general purpose ways of handling error reporting and error recovery in parser generators?