The little gem in the middle is fantastic: using a data set of newbie errors to train the parser with friendly error messages. This step is done after the parser is generated, but <i>before</i> it's distributed.