Implement my own LR(1) parser instead of using PLY