complete LL(1) parser