Rewrite of Parser which should properly handle left recursion.