Restructure the parser so I can actually understand what it does.
Try out the new parser